annotate plugins/redmine_bibliography/app/models/authorship.rb @ 1298:4f746d8966dd redmine_2.3_integration

Merge from redmine-2.3 branch to create new branch redmine-2.3-integration
author Chris Cannam
date Fri, 14 Jun 2013 09:28:30 +0100
parents d0d6bbe9f2e0
children 2805873c0147
rev   line source
luis@328 1 class Authorship < ActiveRecord::Base
luis@1123 2 unloadable
luis@1123 3
luis@328 4 belongs_to :author
luis@328 5 belongs_to :publication
luis@1123 6
luis@483 7 accepts_nested_attributes_for :author
luis@483 8 accepts_nested_attributes_for :publication
luis@686 9
luis@686 10 validates_presence_of :name_on_paper
luis@1123 11
luis@1286 12 attr_accessor :search_author_class, :search_author_id, :search_name, :search_results, :identify_author
luis@563 13 before_save :associate_author_user
luis@591 14
luis@1124 15 # todo: review usage of scope --lf.20130108
luis@1123 16 scope :like_unique, lambda {|q|
luis@601 17 s = "%#{q.to_s.strip.downcase}%"
luis@601 18 {:conditions => ["LOWER(name_on_paper) LIKE :s OR LOWER(email) LIKE :s", {:s => s}],
luis@601 19 :order => 'name_on_paper',
luis@601 20 :group => "name_on_paper, institution, email"
luis@601 21 }
luis@601 22 }
luis@601 23
luis@1124 24 # todo: review usage of scope --lf.20130108
luis@1123 25 scope :like, lambda {|q|
luis@591 26 s = "%#{q.to_s.strip.downcase}%"
luis@601 27 {:conditions => ["LOWER(name_on_paper) LIKE :s OR LOWER(email) LIKE :s", {:s => s}],
luis@591 28 :order => 'name_on_paper'
luis@591 29 }
luis@591 30 }
luis@1123 31
luis@592 32 def name
luis@592 33 return self.name_on_paper
luis@592 34 end
luis@1123 35
luis@591 36 def <=>(authorship)
luis@592 37 name.downcase <=> authorship.name.downcase
luis@592 38 end
luis@1123 39
luis@592 40 def mail
luis@592 41 return self.email
luis@591 42 end
luis@1123 43
luis@1123 44 protected
luis@1123 45 def associate_author_user
luis@1286 46 case self.search_author_class
luis@1286 47 when "User"
luis@601 48 author = Author.new
luis@601 49 author.save
luis@601 50 self.author_id = author.id
luis@601 51 else
luis@601 52 selected = self.search_results
luis@1286 53 selected_classname = Kernel.const_get(self.search_author_class)
luis@1286 54 selected_id = self.search_author_id
luis@601 55 object = selected_classname.find(selected_id)
luis@563 56
luis@601 57 if object.respond_to? :name_on_paper
luis@601 58 # Authorship
luis@601 59 self.author_id = object.author.id
luis@601 60 else
luis@601 61 # User
luis@601 62 unless object.author.nil?
luis@601 63 self.author_id = object.author.id
luis@601 64 else
luis@601 65 author = Author.new
luis@601 66 object.author = author
luis@601 67 object.save
luis@601 68 self.author_id = object.author.id
luis@601 69 end
luis@601 70 end
luis@1123 71 end
luis@518 72 end
luis@328 73 end