# HG changeset patch # User luisf # Date 1380303809 -3600 # Node ID 0f918e37e1d6a5b4a9b8491dafe59719883dd246 # Parent 67abd7b08753d380a8da5831ffb63a481bc9a000 Major interface changes; will use virtual attributes to identify search results. diff -r 67abd7b08753 -r 0f918e37e1d6 plugins/redmine_bibliography/app/helpers/publications_helper.rb --- a/plugins/redmine_bibliography/app/helpers/publications_helper.rb Thu Sep 26 11:44:57 2013 +0100 +++ b/plugins/redmine_bibliography/app/helpers/publications_helper.rb Fri Sep 27 18:43:29 2013 +0100 @@ -106,7 +106,6 @@ end end - def show_bibtex_fields(bibtex_entry) s = "" bibtex_entry.attributes.keys.sort.each do |key| @@ -124,4 +123,3 @@ s end end - diff -r 67abd7b08753 -r 0f918e37e1d6 plugins/redmine_bibliography/app/models/authorship.rb --- a/plugins/redmine_bibliography/app/models/authorship.rb Thu Sep 26 11:44:57 2013 +0100 +++ b/plugins/redmine_bibliography/app/models/authorship.rb Fri Sep 27 18:43:29 2013 +0100 @@ -9,9 +9,13 @@ validates_presence_of :name_on_paper - attr_accessor :search_author_class, :search_author_id, :search_name, :search_results, :identify_author + attr_writer :search_author_id, :search_author_class + attr_writer :search_author_tie - before_create :associate_author_user + ### attr_accessor :search_results, :identify_author + ## attr_writer :search_author_class + + before_create :set_author before_update :delete_publication_cache # tod: review scope of ordering @@ -34,6 +38,35 @@ } } + def search_author_class + # Authorship must always have an Author + # unless it hasn't been saved yet + # using default setter (attr_writer) + + if self.author.nil? + return "" + else + return "Author" + end + end + + def search_author_id + if self.author.nil? + return "" + else + return self.author_id + end + end + + def search_author_tie + if self.author.nil? + return false + else + return true + end + + end + def name return self.name_on_paper end @@ -54,35 +87,46 @@ Rails.cache.delete "publication-#{publication.id}-bibtex" end - def associate_author_user + def set_author + # if an author, simply associates with it + # if an user, checks if it has already an author associated with it + # if so, assicoates with that author + # otherwise, creates a new author + + logger.error { "%%%%%%%%%%%%%%% Associate Author User %%%%%%%%%%%%%%" } + + logger.error { "EU #{self.to_yaml}" } + logger.error { "Class: #{search_author_class}" } + logger.error { "ID #{search_author_id}" } + case self.search_author_class when "" - logger.debug { "Unknown Author to be added..." } - when "User" + logger.debug { "Adding new author to the database." } author = Author.new author.save - self.author_id = author.id + + when "User" + # get user id + user = User.find(self.search_author_id) + logger.error { "Found user with this ID: #{user.id}" } + + if user.author.nil? + logger.error { "The user has no author... creating one!" } + + # User w/o author: + # create new author and update user + author = Author.new + author.save + user << author + else + logger.error { "found an author!" } + author = user.author + end when "Author" - selected = self.search_results - selected_classname = Kernel.const_get(self.search_author_class) - selected_id = self.search_author_id - object = selected_classname.find(selected_id) + author = Author.find(self.search_author_id) + end - if object.respond_to? :name_on_paper - # Authorship - self.author_id = object.author.id - else - # User - unless object.author.nil? - self.author_id = object.author.id - else - author = Author.new - object.author = author - object.save - self.author_id = object.author.id - end - end - end + self.author = author end end diff -r 67abd7b08753 -r 0f918e37e1d6 plugins/redmine_bibliography/app/models/bibtex_entry_type.rb --- a/plugins/redmine_bibliography/app/models/bibtex_entry_type.rb Thu Sep 26 11:44:57 2013 +0100 +++ b/plugins/redmine_bibliography/app/models/bibtex_entry_type.rb Fri Sep 27 18:43:29 2013 +0100 @@ -1,7 +1,7 @@ class BibtexEntryType < ActiveRecord::Base unloadable - @@fields = Hash['article', ['journal', 'year', 'volume', 'number', 'pages', 'month', 'note' ], + @@fields = Hash['article', ['journal', 'year', 'volume', 'number', 'pages', 'month', 'note' ], 'book' , [ 'editor', 'publisher', 'volume', 'series', 'address', 'edition', 'month', 'year', 'note' ], 'booklet' , [ 'howpublished', 'address', 'year', 'month', 'note', 'key' ], 'conference', [ 'booktitle', 'year', 'editor', 'pages', 'organization', 'publisher', 'address', 'month', 'note' ], @@ -25,6 +25,6 @@ end def self.fields (type) - @@fields[ self.find(type).name ] + @@fields[ self.find(type).name ] end end diff -r 67abd7b08753 -r 0f918e37e1d6 plugins/redmine_bibliography/app/views/publications/_authorship_fields.html.erb --- a/plugins/redmine_bibliography/app/views/publications/_authorship_fields.html.erb Thu Sep 26 11:44:57 2013 +0100 +++ b/plugins/redmine_bibliography/app/views/publications/_authorship_fields.html.erb Fri Sep 27 18:43:29 2013 +0100 @@ -1,32 +1,17 @@
-
-

- <%= f.text_field :search_name, :size => 25, :class => "author_search" %> +

+ +

<%= f.text_field :name_on_paper, :class => "author_name_on_paper" -%>

+

<%= f.text_field :institution -%>

+

<%= f.text_field :email -%>

+ +

+ <%= f.check_box :search_author_tie, :style => "float:left;" -%> +

-

- -

-
- -
- -
-

-
- -
-

<%= f.text_field :name_on_paper -%>

-

<%= h l("text_author_name_on_paper") -%>

- -

<%= f.text_field :institution -%>

-

<%= h l("text_author_institution") %>

- -

<%= f.text_field :email -%>

-

<%= h l("text_author_email") %>

- - <%= hidden_field_tag(:search_author_class, '', :name => form_tag_name(f.object_name,:search_author_class ), :id => form_tag_id( f.object_name, :search_author_class )) -%> - <%= hidden_field_tag(:search_author_id, '', :name => form_tag_name(f.object_name,:search_author_id ), :id => form_tag_id( f.object_name, :search_author_id )) -%> + <%= f.text_field :search_author_class -%> + <%= f.text_field :search_author_id -%>
@@ -38,5 +23,4 @@ <%= link_to_remove_fields l("remove_author"), f %>

-
- +
\ No newline at end of file diff -r 67abd7b08753 -r 0f918e37e1d6 plugins/redmine_bibliography/app/views/publications/autocomplete_for_author.html.erb --- a/plugins/redmine_bibliography/app/views/publications/autocomplete_for_author.html.erb Thu Sep 26 11:44:57 2013 +0100 +++ b/plugins/redmine_bibliography/app/views/publications/autocomplete_for_author.html.erb Fri Sep 27 18:43:29 2013 +0100 @@ -1,10 +1,11 @@ -<%= raw @results.map {|result| { +<%= raw @results.map { |result| + { 'label' => result.name, 'value' => result.name, 'search_author_class' => result.class.name, 'search_author_id' => result.id, 'name' => result.name, 'institution' => result.institution, - 'email' => result.mail, + 'email' => result.mail } }.to_json %> \ No newline at end of file diff -r 67abd7b08753 -r 0f918e37e1d6 plugins/redmine_bibliography/assets/javascripts/authors.js --- a/plugins/redmine_bibliography/assets/javascripts/authors.js Thu Sep 26 11:44:57 2013 +0100 +++ b/plugins/redmine_bibliography/assets/javascripts/authors.js Fri Sep 27 18:43:29 2013 +0100 @@ -10,7 +10,7 @@ $(link).closest(".fields").hide(); } -$(".author_search").live('keyup.autocomplete', function(){ +$(".author_name_on_paper").live('keyup.autocomplete', function(){ $this = $(this); $this.autocomplete({ @@ -21,11 +21,17 @@ return false; }, select: function(event, ui){ - $this.closest('div').next().find("input[id$='name_on_paper']").val(ui.item.name); - $this.closest('div').next().find("input[id$='institution']").val(ui.item.institution); - $this.closest('div').next().find("input[id$='email']").val(ui.item.email); - $this.closest('div').next().find("input[id$='search_author_class']").val(ui.item.search_author_class); - $this.closest('div').next().find("input[id$='search_author_id']").val(ui.item.search_author_id); + $this.closest('div').find("input[id$='institution']").val(ui.item.institution); + $this.closest('div').find("input[id$='email']").val(ui.item.email); + + $this.closest('div').find("input[id$='search_author_class']").val(ui.item.search_author_class); + $this.closest('div').find("input[id$='search_author_id']").val(ui.item.search_author_id); + $this.closest('div').find("input[id$='search_author_tie']").attr('checked', 'checked'); + + + + // triggers the save button + $this.closest('div').next('div').find('.author_save_btn').click(); } }) .data( "autocomplete" )._renderItem = function( ul, item ) { @@ -36,15 +42,3 @@ }; }); - -$("input[id$='identify_author_yes']").live("click", function() { - console.log("aaaa"); -}); - -$("input[id$='identify_author_no']").live("click", function() { - $this.closest('div').next().find("input[id$='name_on_paper']").val(''); - $this.closest('div').next().find("input[id$='institution']").val(''); - $this.closest('div').next().find("input[id$='email']").val(''); - $this.closest('div').next().find("input[id$='search_author_class']").val(''); -}); - diff -r 67abd7b08753 -r 0f918e37e1d6 plugins/redmine_bibliography/assets/javascripts/bibliography.js --- a/plugins/redmine_bibliography/assets/javascripts/bibliography.js Thu Sep 26 11:44:57 2013 +0100 +++ b/plugins/redmine_bibliography/assets/javascripts/bibliography.js Fri Sep 27 18:43:29 2013 +0100 @@ -2,8 +2,9 @@ function disable_fields(){ $this = $(this); + $author_info = $this.closest('div').prev(); - $author_info.children('.description').toggle(); +// $author_info.children('.description').toggle(); $author_info.find('p :input').attr("readonly", true); $author_info.find('p :input').addClass('readonly'); @@ -15,8 +16,9 @@ function enable_fields(){ $this = $(this); + $author_info = $this.closest('div').prev(); - $author_info.children('.description').toggle(); +// $author_info.children('.description').toggle(); $author_info.find('p :input').attr("readonly", false); $author_info.find('p :input').removeClass('readonly'); @@ -25,3 +27,4 @@ return false; } + diff -r 67abd7b08753 -r 0f918e37e1d6 plugins/redmine_bibliography/assets/stylesheets/bibliography.css --- a/plugins/redmine_bibliography/assets/stylesheets/bibliography.css Thu Sep 26 11:44:57 2013 +0100 +++ b/plugins/redmine_bibliography/assets/stylesheets/bibliography.css Fri Sep 27 18:43:29 2013 +0100 @@ -20,19 +20,14 @@ } .tabular .author_edit .description { - padding-top: 0; font-style: italic; + font-size: small; } .publication_project { margin-right: 18px; } -#authors select { - min-width: 150px; -} - - div#bibliography dd { margin-bottom: 1em; font-size: 0.9em; } div#bibliography dd .authors { font-style: italic; } @@ -74,4 +69,3 @@ .author_edit_btn { display:none; } -