changeset 1025:02ee54197879 luisf

Merge
author luisf <luis.figueira@eecs.qmul.ac.uk>
date Tue, 13 Nov 2012 12:10:15 +0000
parents 503ed68a4e0f (diff) 52be96e83080 (current diff)
children b42553f6df71 b0e0ffb43fa1 beea10a56132
files .hgignore
diffstat 11 files changed, 145 insertions(+), 67 deletions(-) [+]
line wrap: on
line diff
--- a/.hgignore	Mon Nov 12 15:17:17 2012 +0000
+++ b/.hgignore	Tue Nov 13 12:10:15 2012 +0000
@@ -35,3 +35,4 @@
 Gemfile.lock
 Gemfile.local
 
+re:^config\.ru$
--- a/vendor/plugins/redmine_bibliography/app/controllers/publications_controller.rb	Mon Nov 12 15:17:17 2012 +0000
+++ b/vendor/plugins/redmine_bibliography/app/controllers/publications_controller.rb	Tue Nov 13 12:10:15 2012 +0000
@@ -3,18 +3,18 @@
 
 class PublicationsController < ApplicationController
   unloadable
-  
+
   model_object Publication
   before_filter :find_model_object, :except => [:new, :create, :index, :get_bibtex_required_fields, :autocomplete_for_project, :add_author, :sort_author_order, :autocomplete_for_author, :get_user_info ]  
   before_filter :find_project_by_project_id, :authorize, :only => [ :edit, :new, :update, :create ]
-    
+
   def new
     find_project_by_project_id
     @publication = Publication.new
-    
+
     # we'll always want a new publication to have its bibtex entry
     @publication.build_bibtex_entry
-    
+
     # and at least one author
     # @publication.authorships.build.build_author        
     @author_options = [["#{User.current.name} (@#{User.current.mail.partition('@')[2]})", "#{User.current.class.to_s}_#{User.current.id.to_s}"]]
@@ -29,10 +29,10 @@
 
     @publication = Publication.new(params[:publication])
     @publication.projects << @project unless @project.nil?
-        
+
     if @publication.save 
       @publication.notify_authors_publication_added(@project)
-      
+
       flash[:notice] = "Successfully created publication."
       redirect_to :action => :show, :id => @publication, :project_id => @project
     else
@@ -52,7 +52,7 @@
 
   def new_from_bibfile
     @publication.current_step = session[:publication_step]
-    
+
     # contents of the paste text area
     bibtex_entry = params[:bibtex_entry]
 
@@ -78,7 +78,7 @@
           end
         }
       }
-    
+
     end
   end
 
@@ -94,13 +94,13 @@
 
   def edit   
     find_project_by_project_id unless params[:project_id].nil?
-    
+
     @edit_view = true;
     @publication = Publication.find(params[:id])
     @selected_bibtex_entry_type_id = @publication.bibtex_entry.entry_type
 
     @author_options = []  
-    
+
     @bibtype_fields = BibtexEntryType.fields(@selected_bibtex_entry_type_id)    
   end
 
@@ -124,9 +124,10 @@
     end   
   end
 
+
   def show
     find_project_by_project_id unless params[:project_id].nil?
-        
+
     if @publication.nil?
       @publications = Publication.all
       render "index", :alert => 'The publication was not found!'
@@ -191,16 +192,17 @@
     authors.each_with_index.map do |authorname, idx|
       author = Author.new(:name => authorname)
       if author.save!
+        # todo: catch the errors...
         puts "SAVED"
       else
         puts "NOT SAVED"
       end
 
       author.authorships.create!(
-        :publication => @publication,
-        :institution => institution,
-        :email => email,
-        :order => idx)
+      :publication => @publication,
+      :institution => institution,
+      :email => email,
+      :order => idx)
     end
   end
 
@@ -211,13 +213,13 @@
 
   def import
     @publication = Publication.new
-    
-    
+
+
   end
-  
+
   def autocomplete_for_project
     @publication = Publication.find(params[:id])
-        
+
     @projects = Project.active.like(params[:q]).find(:all, :limit => 100) - @publication.projects            
     logger.debug "Query for \"#{params[:q]}\" returned \"#{@projects.size}\" results"
     render :layout => false
@@ -225,22 +227,22 @@
 
   def autocomplete_for_author    
     @results = []
-    
+
     object_id = params[:object_id]
     @object_name = "publications[authorships_attributes][#{object_id}][search_results]"
-        
+
     # cc 20110909 -- revert to like instead of like_unique -- see #289
     authorships_list = Authorship.like(params[:q]).find(:all, :limit => 100)
     users_list = User.active.like(params[:q]).find(:all, :limit => 100)
 
     logger.debug "Query for \"#{params[:q]}\" returned \"#{authorships_list.size}\" authorships and \"#{users_list.size}\" users"
-    
+
     @results = users_list
 
     # TODO: can be optimized…    
     authorships_list.each do |authorship|      
       flag = true
-      
+
       users_list.each do |user|
         if authorship.name == user.name && authorship.email == user.mail && authorship.institution == user.institution
           Rails.logger.debug { "Rejecting Authorship #{authorship.id}" }
@@ -254,8 +256,7 @@
 
     render :layout => false    
   end
-  
-  
+
   def get_user_info
     object_id = params[:object_id]
     value = params[:value]
@@ -266,9 +267,9 @@
     name_field = "publication_authorships_attributes_#{object_id}_name_on_paper".to_sym
     email_field = "publication_authorships_attributes_#{object_id}_email".to_sym
     institution_field = "publication_authorships_attributes_#{object_id}_institution".to_sym
-    
+
     yes_radio = "publication_authorships_attributes_#{object_id}_identify_author_yes".to_sym
-    
+
     respond_to do |format|
       format.js {
         render(:update) {|page| 
@@ -296,7 +297,7 @@
     @projects = Project.find(params[:publication][:project_ids])    
     @publication.projects << @projects
     @project = Project.find(params[:project_id])    
-    
+
     # TODO luisf should also respond to HTML??? 
     respond_to do |format|
       format.html { redirect_to :back }
@@ -308,8 +309,8 @@
       }
     end
   end
-  
-  
+
+
   def remove_project
     @project = Project.find(params[:project_id])
     proj = Project.find(params[:remove_project_id])
@@ -321,19 +322,19 @@
     else
       logger.error { "Cannot remove project from publication list" }      
     end
-    
+
     logger.error { "CURRENT project name#{proj.name} and wanna delete #{@project.name}" }
-        
+
     render(:update) {|page| 
       page.replace_html "list_projects", :partial => 'list_projects', :id  => @publication
     }    
   end
-    
+
   def destroy
     find_project_by_project_id
-    
+
     @publication.destroy
-        
+
     flash[:notice] = "Successfully deleted Publication."
     redirect_to :controller => :publications, :action => 'index', :project_id => @project
   end
--- a/vendor/plugins/redmine_bibliography/app/helpers/publications_helper.rb	Mon Nov 12 15:17:17 2012 +0000
+++ b/vendor/plugins/redmine_bibliography/app/helpers/publications_helper.rb	Tue Nov 13 12:10:15 2012 +0000
@@ -89,7 +89,6 @@
     s   
   end
   
-    
   def render_projects_list(publication, show_delete_icon)    
     s= ""
     
@@ -99,6 +98,7 @@
       if show_delete_icon  
         if User.current.allowed_to?(:edit_publication, @project)
           if @project == proj
+            # todo: move this message to yml file
             confirm_msg = 'Are you sure you want to remove the current project from this publication\'s projects list?'
           else
             confirm_msg = false
@@ -114,6 +114,17 @@
     s  
   end
   
+  def show_cite_proc_entry(publication)
+    # code that should be moved either to the model or to the controller?
+    
+    publication.print_entry(:ieee)
+  end
+  
+  def print_bibtex_entry(publication)
+    publication.print_entry(:bibtex)
+  end
+    
+  
   def show_bibtex_fields(bibtex_entry)
     s = ""
     bibtex_entry.attributes.keys.sort.each do |key|
--- a/vendor/plugins/redmine_bibliography/app/models/author.rb	Mon Nov 12 15:17:17 2012 +0000
+++ b/vendor/plugins/redmine_bibliography/app/models/author.rb	Tue Nov 13 12:10:15 2012 +0000
@@ -1,4 +1,6 @@
 class Author < ActiveRecord::Base
+  unloadable
+  
   has_many :authorships, :dependent => :destroy
   has_many :publications, :through => :authorships
 
--- a/vendor/plugins/redmine_bibliography/app/models/bibtex_entry_type.rb	Mon Nov 12 15:17:17 2012 +0000
+++ b/vendor/plugins/redmine_bibliography/app/models/bibtex_entry_type.rb	Tue Nov 13 12:10:15 2012 +0000
@@ -1,4 +1,5 @@
 class BibtexEntryType < ActiveRecord::Base
+  unloadable
 
   @@fields = Hash['article', ['journal', 'year', 'volume', 'number', 'pages', 'month', 'note' ], 
                   'book' , [ 'editor', 'publisher', 'volume', 'series', 'address', 'edition', 'month', 'year', 'note' ],
--- a/vendor/plugins/redmine_bibliography/app/models/publication.rb	Mon Nov 12 15:17:17 2012 +0000
+++ b/vendor/plugins/redmine_bibliography/app/models/publication.rb	Tue Nov 13 12:10:15 2012 +0000
@@ -57,7 +57,36 @@
     end    
   end
   
+  def print_bibtex_author_names
+    # this authors are correctly sorted because the authorships model 
+    # already outputs the author names ASC by auth_order
+    self.authorships.map{|a| a.name_on_paper}.join(' and ')
+  end  
   
-  
-  
+  def print_entry(style)
+    bib = BibTeX::Entry.new
+
+    bib.author = self.print_bibtex_author_names
+    bib.title = self.title
+
+
+    self.bibtex_entry.attributes.keys.sort.each do |key|      
+      value = self.bibtex_entry.attributes[key].to_s
+      next if key == 'id' or key == 'publication_id' or value == ""
+
+      if key == "entry_type"
+        bib.type = self.bibtex_entry.entry_type_label
+      else
+        bib[key.to_sym] = value
+      end               
+    end
+    
+    if style == :ieee
+      CiteProc.process bib.to_citeproc, :style => :ieee, :format => :html      
+    else 
+      bibtex = bib.to_s :include => :meta_content
+      bibtex.strip!
+      logger.error { bibtex }
+    end  
+  end
 end
--- a/vendor/plugins/redmine_bibliography/app/views/projects/_bibliography_box.html.erb	Mon Nov 12 15:17:17 2012 +0000
+++ b/vendor/plugins/redmine_bibliography/app/views/projects/_bibliography_box.html.erb	Tue Nov 13 12:10:15 2012 +0000
@@ -1,24 +1,29 @@
+<% content_for :header_tags do %>
+    <%= stylesheet_link_tag 'bibliography', :plugin => 'redmine_bibliography' %>
+    <%= javascript_include_tag 'bibtex', :plugin => 'redmine_bibliography' -%>
+<% end %>
+
 <% if @project.publications.any? %>
 <%= stylesheet_link_tag 'bibliography', :plugin => 'redmine_bibliography' %>
   <div id="bibliography">
     <div class="box">
     <h3><%=l(:label_related_publication_plural)%></h3>
 
-   <dl>
-     <% @project.publications.each do |publication| %>
-     <dt>
-     <span class="authors">
-       <%= publication.authorships.map { |a| h a.name_on_paper }.join(', ') %><% if !publication.authorships.empty? %>.<% end %>
-     </span>
-     <span class="title"><%= link_to publication.title, :controller => 'publications', :action => 'show', :id => publication, :project_id => @project %></span>
-     <% if publication.bibtex_entry.year.to_s != "" %>
-     <span class="year">
-       &nbsp;(<%= publication.bibtex_entry.year %>)
-     </span>
-     <% end %>
-     </dt><dd></dd>
+     <dl>       
+     <% @project.publications.each do |publication| %>       
+       <dt>
+          <%= publication.print_entry(:ieee) -%>
+       </dt>
+       <dd>
+         <%= link_to("[More Details]", {:controller => :publications, :action => :show, :id => publication.id, :project_id => @project.id}) -%> 
+         
+         <%= link_to_function "[Bibtex]", onclick="toggleBibtex(this)" -%> 
+       </dd>
+       <dd class="bibtex-textarea collapsed" style="display: none;">
+         <textarea readonly><%= publication.print_entry(:bibtex) -%></textarea>         
+       </dd>
    <% end -%>
-   </dl>
+     </dl>
   </div>
 </div>
-<% end %>
+<% end -%>
--- a/vendor/plugins/redmine_bibliography/app/views/publications/show.html.erb	Mon Nov 12 15:17:17 2012 +0000
+++ b/vendor/plugins/redmine_bibliography/app/views/publications/show.html.erb	Tue Nov 13 12:10:15 2012 +0000
@@ -1,11 +1,14 @@
-<%= stylesheet_link_tag 'bibliography', :plugin => 'redmine_bibliography' %>
-
 <h2><%=l(:label_publication_show)%></h2>
 
 <div class="box">
-<h3>
-  <%= h @publication.title %>
-</h3>
+  <h3>Publication Info</h3>
+  <%= show_cite_proc_entry(@publication)%>
+  
+  <h3>Bibtex Format</h3>
+    <%=h print_bibtex_entry(@publication) %>
+</div>
+
+<div class="box">
 
 <h4><%= l(:authors) %></h4>
 <ul id="authorships">
@@ -18,6 +21,7 @@
     <%- end -%>
   <%- end -%>
 </ul>
+
 <%- if User.current.allowed_to?(:edit_publication, @project) && @publication.authorships.length > 1 -%>
   <%= sortable_element("authorships", :url => { :controller => :publications, :action => :sort_author_order }, :handle => "handle") %>
 <%- end -%>
@@ -26,7 +30,6 @@
   <%= show_bibtex_fields(@publication.bibtex_entry) %>
 <%- end -%>
 
-
 <% unless @publication.external_url.blank? %>
   <h4>
     <%= l(:field_external_url) %>
@@ -46,7 +49,7 @@
 </div>
 
 <% projects = Project.active.find(:all, :limit => 100, :order => 'name ASC') - @publication.projects %>
-
+  
 <% content_for :sidebar do %>
   <h3><%=l(:label_publication_project_index)%></h3>
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/redmine_bibliography/assets/javascripts/bibtex.js	Tue Nov 13 12:10:15 2012 +0000
@@ -0,0 +1,6 @@
+function toggleBibtex(el) {
+  var dd = Element.up(el).next('dd')
+
+  dd.toggleClassName('collapsed');
+  Effect.toggle(dd, 'slide', {duration:0.2});
+}
\ No newline at end of file
--- a/vendor/plugins/redmine_bibliography/assets/stylesheets/bibliography.css	Mon Nov 12 15:17:17 2012 +0000
+++ b/vendor/plugins/redmine_bibliography/assets/stylesheets/bibliography.css	Tue Nov 13 12:10:15 2012 +0000
@@ -32,15 +32,30 @@
     min-width: 150px;
 }
 
-div#bibliography dl { margin-left: 2em; }
-div#bibliography .box dl { margin-left: 0; }
-div#bibliography dt { margin-bottom: 0px; padding-left: 20px }
-div#bibliography .box dt { margin-bottom: 0px; padding-left: 10px }
+
 div#bibliography dd { margin-bottom: 1em; padding-left: 18px; font-size: 0.9em; }
-div#bibliography .box dd { margin-bottom: 0.6em; padding-left: 0; }
+
 div#bibliography dd .authors { font-style: italic; }
-div#bibliography dt .title { font-style: italic; }
 div#bibliography dd span.authors { color: #808080; }
 div#bibliography dd span.year { padding-left: 0.6em; }
 
-div#bibliography h3 { background: url(../../../images/table_multiple.png) no-repeat 0% 50%; padding-left: 20px; }
+div#bibliography .box dt { 
+  background: url(../../../images/document.png) no-repeat 0% 50%; padding-left: 20px;
+  margin-left: 2em;
+}
+div#bibliography .box dd { 
+  margin-left: 25px;
+}
+
+div#bibliography h3 { 
+  background: url(../../../images/table_multiple.png) no-repeat 0% 50%; 
+  padding-left: 20px;
+}
+
+div#bibliography textarea {
+  width: 90%;
+  height: 200px;
+  font: normal 8px;
+  padding: 2px 10px;
+  border: solid 1px #ddd;  
+}
\ No newline at end of file
--- a/vendor/plugins/redmine_bibliography/init.rb	Mon Nov 12 15:17:17 2012 +0000
+++ b/vendor/plugins/redmine_bibliography/init.rb	Tue Nov 13 12:10:15 2012 +0000
@@ -1,6 +1,10 @@
 require 'redmine'
 require 'dispatcher'
 
+require 'bibtex'
+require 'citeproc'
+
+
 RAILS_DEFAULT_LOGGER.info 'Starting Bibliography Plugin for RedMine'
 
 # Patches to the Redmine core.