# HG changeset patch
# User luisf
# Date 1352813810 0
# Node ID 72294a3b06474ecd7ec954e0d209c58d96a4f0b6
# Parent b42553f6df71ec5b2edced0dea95a6fa1b8e5ac3# Parent b8ae7b3af25af53b4a8e3717ecc29bb0e725e626
Merge
diff -r b8ae7b3af25a -r 72294a3b0647 vendor/plugins/redmine_bibliography/app/controllers/publications_controller.rb
--- a/vendor/plugins/redmine_bibliography/app/controllers/publications_controller.rb Tue Nov 13 13:33:15 2012 +0000
+++ b/vendor/plugins/redmine_bibliography/app/controllers/publications_controller.rb Tue Nov 13 13:36:50 2012 +0000
@@ -1,11 +1,13 @@
# -*- coding: utf-8 -*-
# vendor/plugins/redmine_bibliography/app/controllers/publications_controller.rb
+class BibtexParsingError < Exception; end
+
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_model_object, :except => [:parse_bibtex, :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
@@ -18,11 +20,67 @@
# 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}"]]
+ end
+ def parse_bibtex
+ find_project_by_project_id
+
+ @bibtex_paste = params[:bibtex_paste]
+
+ begin
+ bib = BibTeX.parse(@bibtex_paste)
+
+ if bib.errors.present? or bib[0].class == NilClass
+ raise BibtexParsingError, "Bibtex Parsing Error"
+ end
+
+ respond_to do |format|
+ format.js {
+ render(:update) {|page|
+ flash[:notice] = "Correctly parsed BibTeX entry"
+
+ bibtex_entry_no = BibtexEntryType.find_by_name(bib[0].type.to_s).id
+ page["publication_title"].value = bib[0][:title]
+ page["publication_bibtex_entry_attributes_entry_type"].value = bibtex_entry_no
+
+ BibtexEntryType.fields(bibtex_entry_no).each do |field|
+ page["publication_bibtex_entry_attributes_#{field}"].value = bib[0][field]
+ end
+
+ # for each author simulates a click and fills the author info
+ bib[0].authors.each do |author|
+ page["add_another_author"].click
+# page.alert(bib[0].authors.length)
+# page.alert(page["authors"].first.id)
+
+ end
+
+
+
+ }
+ }
+ end
+
+ rescue BibtexParsingError => e
+ logger.error { "Bibtex Parsing Error #{bib.errors}" }
+
+ # todo: not showing... should be inside render?
+ flash[:error] = e.message
+
+ respond_to do |format|
+ format.js{
+ render(:update) {|page|
+ }
+ }
+ end
+
+ end
+
end
- def create
+
+ def create
@project = Project.find(params[:project_id])
@author_options = []
@@ -64,14 +122,12 @@
def get_bibtex_required_fields
- unless params[:value].empty?
- fields = BibtexEntryType.fields(params[:value])
- end
+ fields = BibtexEntryType.fields(params[:q])
respond_to do |format|
format.js {
render(:update) {|page|
- if params[:value].empty?
+ if params[:q].empty?
page << "hideOnLoad();"
else
page << "show_required_bibtex_fields(#{fields.to_json()});"
@@ -109,10 +165,8 @@
@author_options = []
- logger.error { "INSIDE THE UPDATE ACTION IN THE PUBLICATION CONTROLLER" }
-
if @publication.update_attributes(params[:publication])
- flash[:notice] = "Successfully updated Publication."
+ flash[:notice] = "Successfully Updated Publication."
if !params[:project_id].nil?
redirect_to :action => :show, :id => @publication, :project_id => params[:project_id]
@@ -224,6 +278,7 @@
logger.debug "Query for \"#{params[:q]}\" returned \"#{@projects.size}\" results"
render :layout => false
end
+
def autocomplete_for_author
@results = []
diff -r b8ae7b3af25a -r 72294a3b0647 vendor/plugins/redmine_bibliography/app/views/publications/_authorship_fields.html.erb
--- a/vendor/plugins/redmine_bibliography/app/views/publications/_authorship_fields.html.erb Tue Nov 13 13:33:15 2012 +0000
+++ b/vendor/plugins/redmine_bibliography/app/views/publications/_authorship_fields.html.erb Tue Nov 13 13:36:50 2012 +0000
@@ -1,9 +1,4 @@
-<%= stylesheet_link_tag 'bibliography', :plugin => 'redmine_bibliography' %>
-
-
-
-
-
+
-
-
-
+
-
- <%- if params[:action] == 'new' -%>
- <%= button_to_function l(:label_save_author), {}, { :onclick => "toggle_save_author(#{form_object_id(f.object_name)}); return false;", :id => form_tag_id( f.object_name, :edit_save_button )} %>
- <%- else -%>
- <%= button_to_function l(:label_edit_author), {}, { :onclick => "toggle_save_author(#{form_object_id(f.object_name)}); return false;", :id => form_tag_id( f.object_name, :edit_save_button )} %>
- <%- end -%>
-
+ <%- if params[:action] == 'new' -%>
+ <%= button_to_function l(:label_save_author), {}, { :onclick => "toggle_save_author(#{form_object_id(f.object_name)}); return false;", :id => form_tag_id( f.object_name, :edit_save_button )} %>
+ <%- else -%>
+ <%= button_to_function l(:label_edit_author), {}, { :onclick => "toggle_save_author(#{form_object_id(f.object_name)}); return false;", :id => form_tag_id( f.object_name, :edit_save_button )} %>
+ <%- end -%>
<%= link_to_remove_fields l("remove_author"), f %>
-
-
+
+
+
diff -r b8ae7b3af25a -r 72294a3b0647 vendor/plugins/redmine_bibliography/app/views/publications/_bibtex_fields.html.erb
--- a/vendor/plugins/redmine_bibliography/app/views/publications/_bibtex_fields.html.erb Tue Nov 13 13:33:15 2012 +0000
+++ b/vendor/plugins/redmine_bibliography/app/views/publications/_bibtex_fields.html.erb Tue Nov 13 13:36:50 2012 +0000
@@ -3,12 +3,17 @@
<%= f.collection_select :entry_type,
BibtexEntryType.find(:all).reject { |x| x.redundant? },
:id,
- :label,
- { :selected => @selected_bibtex_entry_type_id, :prompt => true },
- :onChange => remote_function( :url => { :controller => :publications, :action => :get_bibtex_required_fields}, :with => "'value=' + value" )
+ :label,
+ { :prompt => true }
%>
+
+<%= observe_field :publication_bibtex_entry_attributes_entry_type, :url => { :controller => :publications, :action => :get_bibtex_required_fields },
+ :frequency => 0.25,
+ :with => 'q'
+ %>
+
<%= f.text_field :year, :size => 4 %>
diff -r b8ae7b3af25a -r 72294a3b0647 vendor/plugins/redmine_bibliography/app/views/publications/_form.html.erb
--- a/vendor/plugins/redmine_bibliography/app/views/publications/_form.html.erb Tue Nov 13 13:33:15 2012 +0000
+++ b/vendor/plugins/redmine_bibliography/app/views/publications/_form.html.erb Tue Nov 13 13:36:50 2012 +0000
@@ -1,9 +1,9 @@
-<%= f.error_messages %>
+<%= f.error_messages %>
+<%= stylesheet_link_tag 'bibliography', :plugin => 'redmine_bibliography' %>
<%= f.text_field :title, :required => true, :size => 70 %>
-
-
<%= l(:label_publication_other_details) %>
+
<%= l(:label_publication_other_details) %>
<% f.fields_for :bibtex_entry do |builder| -%>
<%= render :partial => 'bibtex_fields', :locals => { :f => builder} %>
@@ -14,18 +14,15 @@
<%= l(:text_external_url) %>
+
-
-
-
-
-
<%= l(:authors) %>
+
<%= l(:authors) %>
- <% f.fields_for :authorships do |builder| -%>
- <%= render "authorship_fields", :f => builder %>
- <%- end -%>
+
+ <% f.fields_for :authorships do |builder| -%>
+ <%= render "authorship_fields", :f => builder %>
+ <%- end -%>
+
<%= link_to_add_author_fields l(:label_add_an_author), f, :authorships, params[:action] %>
-
-
-
+
\ No newline at end of file
diff -r b8ae7b3af25a -r 72294a3b0647 vendor/plugins/redmine_bibliography/app/views/publications/new.html.erb
--- a/vendor/plugins/redmine_bibliography/app/views/publications/new.html.erb Tue Nov 13 13:33:15 2012 +0000
+++ b/vendor/plugins/redmine_bibliography/app/views/publications/new.html.erb Tue Nov 13 13:36:50 2012 +0000
@@ -5,8 +5,21 @@
<%=l(:label_publication_new)%>
-<% form_for @publication, :url => { :project_id => @project, :action => :create }, :builder => TabularFormBuilder do |f| -%>
- <%= render :partial => 'form', :locals => { :f => f } %>
-
- <%= f.submit %>
-<% end %>
+To create a publication you can either parse a BibTeX entry or enter the publication details manually.
+
+
+
+ <%- remote_form_for @publication, :url => { :project_id => @project, :action => :parse_bibtex } do |f| -%>
+ <%= text_area_tag :bibtex_paste, "Please paste your bibtex entry here", :rows => 6, :style => 'width:90%' %>
+
+ <%= f.submit "Parse BibTex" %>
+ <%- end -%>
+
+
+
+ <% form_for @publication, :url => { :project_id => @project, :action => :create }, :builder => TabularFormBuilder do |f| -%>
+ <%= render :partial => 'form', :locals => { :f => f } %>
+
+ <%= f.submit %>
+ <% end %>
+
diff -r b8ae7b3af25a -r 72294a3b0647 vendor/plugins/redmine_bibliography/app/views/publications/show.html.erb
--- a/vendor/plugins/redmine_bibliography/app/views/publications/show.html.erb Tue Nov 13 13:33:15 2012 +0000
+++ b/vendor/plugins/redmine_bibliography/app/views/publications/show.html.erb Tue Nov 13 13:36:50 2012 +0000
@@ -1,3 +1,5 @@
+<%= stylesheet_link_tag 'bibliography', :plugin => 'redmine_bibliography' %>
+
<%=l(:label_publication_show)%>
diff -r b8ae7b3af25a -r 72294a3b0647 vendor/plugins/redmine_bibliography/assets/javascripts/authors.js
--- a/vendor/plugins/redmine_bibliography/assets/javascripts/authors.js Tue Nov 13 13:33:15 2012 +0000
+++ b/vendor/plugins/redmine_bibliography/assets/javascripts/authors.js Tue Nov 13 13:36:50 2012 +0000
@@ -6,9 +6,9 @@
function add_author_fields(link, association, content, action) {
var new_id = new Date().getTime();
var regexp = new RegExp("new_" + association, "g");
- $(link).insert({
- before: content.replace(regexp, new_id)
- });
+
+ $('authors').insert(content.replace(regexp, new_id));
+
if(action != "new"){
toggle_save_author(new_id, $(link));
};