To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.

Statistics Download as Zip
| Branch: | Tag: | Revision:

root / plugins / redmine_bibliography / app / models / authorship.rb @ 1399:6106c49c5f50

History | View | Annotate | Download (3.29 KB)

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