annotate plugins/redmine_bibliography/app/models/authorship.rb @ 1402:5cb7eeccede1 biblio_alt_search_auth

merged from 'luisf' branch
author luisf <luis.figueira@eecs.qmul.ac.uk>
date Mon, 30 Sep 2013 13:53:20 +0100
parents 6106c49c5f50
children 35732ac4324a
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@1395 12 attr_writer :search_author_id , :search_author_class
luis@1394 13 attr_writer :search_author_tie
luis@1364 14
luis@1394 15 ### attr_accessor :search_results, :identify_author
luis@1394 16 ## attr_writer :search_author_class
luis@1394 17
luis@1395 18 before_save :set_author
luis@1367 19 before_update :delete_publication_cache
luis@591 20
luis@1363 21 # tod: review scope of ordering
luis@1363 22 acts_as_list :column => 'auth_order'
luis@1317 23
luis@1124 24 # todo: review usage of scope --lf.20130108
luis@1123 25 scope :like_unique, lambda {|q|
luis@601 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@601 28 :order => 'name_on_paper',
luis@601 29 :group => "name_on_paper, institution, email"
luis@601 30 }
luis@601 31 }
luis@601 32
luis@1124 33 # todo: review usage of scope --lf.20130108
luis@1123 34 scope :like, lambda {|q|
luis@591 35 s = "%#{q.to_s.strip.downcase}%"
luis@601 36 {:conditions => ["LOWER(name_on_paper) LIKE :s OR LOWER(email) LIKE :s", {:s => s}],
luis@591 37 :order => 'name_on_paper'
luis@591 38 }
luis@591 39 }
luis@1123 40
luis@1394 41 def search_author_class
luis@1394 42 # Authorship must always have an Author
luis@1394 43 # unless it hasn't been saved yet
luis@1394 44 # using default setter (attr_writer)
luis@1394 45
luis@1394 46 if self.author.nil?
luis@1397 47 aclass = ""
luis@1394 48 else
luis@1397 49 aclass = "Author"
luis@1394 50 end
luis@1395 51
luis@1397 52 @search_author_class || aclass
luis@1394 53 end
luis@1394 54
luis@1395 55 # def search_author_class=(search_author_class)
luis@1395 56 # @search_author_class = search_author_class
luis@1395 57 # end
luis@1395 58
luis@1394 59 def search_author_id
luis@1394 60 if self.author.nil?
luis@1398 61 authid = ""
luis@1394 62 else
luis@1397 63 authid = author_id
luis@1394 64 end
luis@1397 65
luis@1397 66 @search_author_id || authid
luis@1394 67 end
luis@1394 68
luis@1394 69 def search_author_tie
luis@1394 70 if self.author.nil?
luis@1397 71 auth_tie = false
luis@1394 72 else
luis@1397 73 auth_tie = true
luis@1394 74 end
luis@1394 75
luis@1397 76 @search_author_tie || auth_tie
luis@1394 77 end
luis@1394 78
luis@592 79 def name
luis@592 80 return self.name_on_paper
luis@592 81 end
luis@1123 82
luis@591 83 def <=>(authorship)
luis@592 84 name.downcase <=> authorship.name.downcase
luis@592 85 end
luis@1123 86
luis@592 87 def mail
luis@592 88 return self.email
luis@591 89 end
luis@1123 90
luis@1123 91 protected
luis@1367 92
luis@1367 93 def delete_publication_cache
luis@1367 94 publication = Publication.find(self.publication_id)
luis@1367 95 Rails.cache.delete "publication-#{publication.id}-ieee"
luis@1367 96 Rails.cache.delete "publication-#{publication.id}-bibtex"
luis@1367 97 end
luis@1367 98
luis@1395 99 private
luis@1395 100
luis@1394 101 def set_author
luis@1394 102 # if an author, simply associates with it
luis@1394 103 # if an user, checks if it has already an author associated with it
luis@1394 104 # if so, assicoates with that author
luis@1394 105 # otherwise, creates a new author
luis@1394 106
luis@1394 107 logger.error { "%%%%%%%%%%%%%%% Associate Author User %%%%%%%%%%%%%%" }
luis@1394 108
luis@1395 109 logger.error { "Me #{self.to_yaml}" }
luis@1395 110 logger.error { "Class: #{@search_author_class}" }
luis@1395 111 logger.error { "ID #{@search_author_id}" }
luis@1394 112
luis@1395 113 case @search_author_class
luis@1366 114 when ""
luis@1394 115 logger.debug { "Adding new author to the database." }
luis@1366 116 author = Author.new
luis@1366 117 author.save
luis@1394 118
luis@1394 119 when "User"
luis@1394 120 # get user id
luis@1395 121 user = User.find(@search_author_id)
luis@1394 122 logger.error { "Found user with this ID: #{user.id}" }
luis@1394 123
luis@1394 124 if user.author.nil?
luis@1394 125 logger.error { "The user has no author... creating one!" }
luis@1394 126
luis@1394 127 # User w/o author:
luis@1394 128 # create new author and update user
luis@1394 129 author = Author.new
luis@1394 130 author.save
luis@1399 131 user.author = author
luis@1399 132 user.save
luis@1394 133 else
luis@1394 134 logger.error { "found an author!" }
luis@1394 135 author = user.author
luis@1394 136 end
luis@1366 137
luis@1366 138 when "Author"
luis@1395 139 author = Author.find(@search_author_id)
luis@1394 140 end
luis@1366 141
luis@1394 142 self.author = author
luis@518 143 end
luis@328 144 end