changeset 1111:7d62d2f497c5 bibplugin_bibtex

adds all the necessary hidden fieds; associates authors, users and publications. Known issues associating publications, authors and users.
author luisf <luis.figueira@eecs.qmul.ac.uk>
date Fri, 07 Dec 2012 14:39:38 +0000
parents e48a7a36491b
children 70849df4eae1
files vendor/plugins/redmine_bibliography/app/controllers/publications_controller.rb vendor/plugins/redmine_bibliography/app/models/authorship.rb vendor/plugins/redmine_bibliography/app/views/publications/_authorship_from_bibtex.html.erb vendor/plugins/redmine_bibliography/app/views/publications/_hidden_bibtex_field.html.erb vendor/plugins/redmine_bibliography/app/views/publications/_suggest_author.html.erb vendor/plugins/redmine_bibliography/app/views/publications/new/_bibtex.html.erb vendor/plugins/redmine_bibliography/app/views/publications/parse_bibtex.rjs
diffstat 7 files changed, 74 insertions(+), 30 deletions(-) [+]
line wrap: on
line diff
--- a/vendor/plugins/redmine_bibliography/app/controllers/publications_controller.rb	Thu Dec 06 21:45:34 2012 +0000
+++ b/vendor/plugins/redmine_bibliography/app/controllers/publications_controller.rb	Fri Dec 07 14:39:38 2012 +0000
@@ -45,8 +45,6 @@
   end
 
 
-
-
   def parse_bibtex
     find_project_by_project_id
     @bibtex_parse_success = true
@@ -99,10 +97,50 @@
   def create_from_bibtex
     find_project_by_project_id
 
-    @publication = Publication.new(params[:publication])
-    debugger
+    # todo: drop unknown parameters from params hash lf.07122012
+    @publication = Publication.new(:title => params[:pub][:title])
+    @publication.build_bibtex_entry(params[:pub][:bibtex_entry])
+    @publication.projects << @project unless @project.nil?
 
 
+    params[:pub][:authorships].each do |idx|
+      auth = idx[1]
+
+      authorship = Authorship.new :name_on_paper => auth[:name_on_paper]
+
+      unless auth[:parent].nil?
+        if auth[:parent] > -1
+          logger.error { "AUTH PRENT #{auth[:parent]}" }
+          parent_class, parent_id = auth[:parent].split "_"
+
+          if parent_class == "user"
+            user = User.find(id)
+            author = user.author ||= Author.create(:name => auth[:name_on_paper])
+          else
+            author = Author.find(id)
+          end
+
+          authorship.author_id = author.id
+        end
+      end
+
+
+
+      # todo: test success
+      authorship.save!
+
+      @publication.authorships << authorship
+    end
+
+    if @publication.save
+      @publication.notify_authors_publication_added(@project)
+
+      flash[:notice] = "Successfully created publication."
+      redirect_to :action => :show, :id => @publication, :project_id => @project
+    else
+      render :action => 'new', :project_id => @project
+    end
+
   end
 
   def create
--- a/vendor/plugins/redmine_bibliography/app/models/authorship.rb	Thu Dec 06 21:45:34 2012 +0000
+++ b/vendor/plugins/redmine_bibliography/app/models/authorship.rb	Fri Dec 07 14:39:38 2012 +0000
@@ -1,18 +1,20 @@
 class Authorship < ActiveRecord::Base
-  unloadable 
-  
+  unloadable
+
   belongs_to :author
   belongs_to :publication
-  
+
   accepts_nested_attributes_for :author
   accepts_nested_attributes_for :publication
 
   validates_presence_of :name_on_paper
-  
+
   attr_accessor :is_user, :author_user_id, :search_name, :identify_author, :search_results
-  before_save :associate_author_user
 
-  named_scope :like_unique, lambda {|q| 
+  # todo: too much logic here
+  #  before_save :associate_author_user
+
+  named_scope :like_unique, lambda {|q|
     s = "%#{q.to_s.strip.downcase}%"
     {:conditions => ["LOWER(name_on_paper) LIKE :s OR LOWER(email) LIKE :s", {:s => s}],
      :order => 'name_on_paper',
@@ -20,27 +22,27 @@
     }
   }
 
-  named_scope :like, lambda {|q| 
+  named_scope :like, lambda {|q|
     s = "%#{q.to_s.strip.downcase}%"
     {:conditions => ["LOWER(name_on_paper) LIKE :s OR LOWER(email) LIKE :s", {:s => s}],
      :order => 'name_on_paper'
     }
   }
-  
+
   def name
     return self.name_on_paper
   end
-  
+
   def <=>(authorship)
     name.downcase <=> authorship.name.downcase
   end
-    
+
   def mail
     return self.email
   end
-  
-  protected 
-  def associate_author_user 
+
+  protected
+  def associate_author_user
     case self.identify_author
       when "no"
         author = Author.new
@@ -66,6 +68,6 @@
             self.author_id = object.author.id
           end
         end
-    end      
+    end
   end
 end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/redmine_bibliography/app/views/publications/_authorship_from_bibtex.html.erb	Fri Dec 07 14:39:38 2012 +0000
@@ -0,0 +1,1 @@
+ <%= hidden_field_tag "pub[authorships][#{index}][name_on_paper]", auth[0] -%>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/redmine_bibliography/app/views/publications/_hidden_bibtex_field.html.erb	Fri Dec 07 14:39:38 2012 +0000
@@ -0,0 +1,1 @@
+<%= hidden_field_tag "pub[bibtex_entry][#{fieldname}]", value -%>
\ No newline at end of file
--- a/vendor/plugins/redmine_bibliography/app/views/publications/_suggest_author.html.erb	Thu Dec 06 21:45:34 2012 +0000
+++ b/vendor/plugins/redmine_bibliography/app/views/publications/_suggest_author.html.erb	Fri Dec 07 14:39:38 2012 +0000
@@ -7,13 +7,13 @@
     <br />
 
     <%- suggestions[1][:authors].each do |auth| -%>
-      <%= create_author_suggestion_radio("author_#{index}", auth) -%>
+      <%= create_author_suggestion_radio("pub[authorships][#{index}][parent]", auth) -%>
     <%- end -%>
     <br />
     <%- suggestions[1][:users].each do |usr| -%>
-      <%= create_user_suggestion_radio("author_#{index}", usr) -%>
+      <%= create_user_suggestion_radio("pub[authorship][#{index}][parent]", usr) -%>
     <%- end -%>
-    <%= radio_button_tag("author_#{index}", nil, false) -%><%= l(:none_of_above) %>
+    <%= radio_button_tag("pub][authorship][#{index}][parent]", "-1", false) -%><%= l(:none_of_above) %>
     <br />
   </p>
 <%- end -%>
--- a/vendor/plugins/redmine_bibliography/app/views/publications/new/_bibtex.html.erb	Thu Dec 06 21:45:34 2012 +0000
+++ b/vendor/plugins/redmine_bibliography/app/views/publications/new/_bibtex.html.erb	Fri Dec 07 14:39:38 2012 +0000
@@ -13,16 +13,13 @@
 
   <div class="splitcontentright">
     <h3>Preview and correct</h3>
-
     <div class="box" id="ieee_prev"><h3>Preview</h3></div>
-
-    <div class="box" id="suggest_bibtex_authors"></div>
   </div>
 
+  <div id="publication_authors"></div>
+
   <div id="publication_info">
-    <%= hidden_field_tag "pub_bibtex_title" -%>
-    <%= hidden_field_tag "pub_bibtex_entry_type" -%>
-    <%= hidden_field_tag "pub_bibtex_year" -%>
+    <%= hidden_field_tag "pub[title]" -%>
   </div>
 
   <%= f.submit %>
--- a/vendor/plugins/redmine_bibliography/app/views/publications/parse_bibtex.rjs	Thu Dec 06 21:45:34 2012 +0000
+++ b/vendor/plugins/redmine_bibliography/app/views/publications/parse_bibtex.rjs	Fri Dec 07 14:39:38 2012 +0000
@@ -2,14 +2,19 @@
   page.insert_html :bottom, :ieee_prev, @ieee_prev
   page.insert_html :top, :content, '<div class="flash notice">Successfully Parsed BibTeX</div>'
 
+  # todo - use authors.each?? instead
   @suggested_authors.each_with_index do |auth, idx|
-    page.insert_html :bottom, :suggest_bibtex_authors, :partial => "suggest_author", :locals => {:suggestions => auth, :index => idx}
+    page.insert_html :bottom, :publication_authors, :partial => "authorship_from_bibtex", :locals => {:auth => auth, :index => idx}
+
+    page.insert_html :bottom, :publication_authors, :partial => "suggest_author", :locals => {:suggestions => auth, :index => idx}
   end
 
-  page[:pub_bibtex_title].value = @publication.title
+  # fills the publication's hidden fields
+  page[:pub_title].value = @publication.title
 
   @publication.bibtex_entry.attributes.each do |k,v|
-    page["pub_bibtex_#{k}"].value = v.to_s unless v.nil?
+    page.insert_html :bottom, :publication_info, :partial => "hidden_bibtex_field", :locals => {:fieldname => k, :value => v} unless v.nil?
+
   end
 
 else