# HG changeset patch # User Chris Cannam # Date 1352815765 0 # Node ID 8526d74365278cdfb319cc135e0dcf21acb49c32 # Parent 4ac34b54f94656f4962616662af6259d1e931169# Parent beea10a56132eaebfc5d94796c4722a794115b19 Merge from branch "luisf" diff -r 4ac34b54f946 -r 8526d7436527 .hgignore --- a/.hgignore Tue Nov 13 14:00:16 2012 +0000 +++ b/.hgignore Tue Nov 13 14:09:25 2012 +0000 @@ -35,3 +35,4 @@ Gemfile.lock Gemfile.local +re:^config\.ru$ diff -r 4ac34b54f946 -r 8526d7436527 vendor/plugins/redmine_bibliography/app/controllers/publications_controller.rb --- a/vendor/plugins/redmine_bibliography/app/controllers/publications_controller.rb Tue Nov 13 14:00:16 2012 +0000 +++ b/vendor/plugins/redmine_bibliography/app/controllers/publications_controller.rb Tue Nov 13 14:09:25 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 diff -r 4ac34b54f946 -r 8526d7436527 vendor/plugins/redmine_bibliography/app/helpers/publications_helper.rb --- a/vendor/plugins/redmine_bibliography/app/helpers/publications_helper.rb Tue Nov 13 14:00:16 2012 +0000 +++ b/vendor/plugins/redmine_bibliography/app/helpers/publications_helper.rb Tue Nov 13 14:09:25 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| diff -r 4ac34b54f946 -r 8526d7436527 vendor/plugins/redmine_bibliography/app/models/author.rb --- a/vendor/plugins/redmine_bibliography/app/models/author.rb Tue Nov 13 14:00:16 2012 +0000 +++ b/vendor/plugins/redmine_bibliography/app/models/author.rb Tue Nov 13 14:09:25 2012 +0000 @@ -1,4 +1,6 @@ class Author < ActiveRecord::Base + unloadable + has_many :authorships, :dependent => :destroy has_many :publications, :through => :authorships diff -r 4ac34b54f946 -r 8526d7436527 vendor/plugins/redmine_bibliography/app/models/bibtex_entry_type.rb --- a/vendor/plugins/redmine_bibliography/app/models/bibtex_entry_type.rb Tue Nov 13 14:00:16 2012 +0000 +++ b/vendor/plugins/redmine_bibliography/app/models/bibtex_entry_type.rb Tue Nov 13 14:09:25 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' ], diff -r 4ac34b54f946 -r 8526d7436527 vendor/plugins/redmine_bibliography/app/models/publication.rb --- a/vendor/plugins/redmine_bibliography/app/models/publication.rb Tue Nov 13 14:00:16 2012 +0000 +++ b/vendor/plugins/redmine_bibliography/app/models/publication.rb Tue Nov 13 14:09:25 2012 +0000 @@ -57,7 +57,35 @@ 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 = BibtexEntryType.find(self.bibtex_entry.entry_type).name + 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 diff -r 4ac34b54f946 -r 8526d7436527 vendor/plugins/redmine_bibliography/app/views/projects/_bibliography_box.html.erb --- a/vendor/plugins/redmine_bibliography/app/views/projects/_bibliography_box.html.erb Tue Nov 13 14:00:16 2012 +0000 +++ b/vendor/plugins/redmine_bibliography/app/views/projects/_bibliography_box.html.erb Tue Nov 13 14:09:25 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' %>