luis@385: # vendor/plugins/redmine_bibliography/app/models/publication.rb luis@385: luis@328: class Publication < ActiveRecord::Base luis@428: unloadable luis@445: luis@571: has_many :authorships, :dependent => :destroy, :order => "auth_order ASC" luis@447: has_many :authors, :through => :authorships, :uniq => true luis@446: luis@560: has_one :bibtex_entry, :dependent => :destroy luis@376: luis@376: validates_presence_of :title luis@686: validates_length_of :authorships, :minimum => 1, :message => l("error_no_authors") luis@445: luis@445: accepts_nested_attributes_for :authorships luis@446: accepts_nested_attributes_for :authors, :allow_destroy => true luis@454: accepts_nested_attributes_for :bibtex_entry, :allow_destroy => true luis@454: luis@464: has_and_belongs_to_many :projects, :uniq => true luis@428: chris@567: before_save :set_initial_author_order chris@653: chris@653: # Ensure error message uses proper text instead of chris@653: # bibtex_entry.entry_type (#268). There has to be a better way to chris@653: # do this! chris@653: def self.human_attribute_name(k) chris@653: if k == 'bibtex_entry.entry_type' chris@653: l(:field_entry_type) chris@653: else chris@653: super chris@653: end chris@653: end chris@653: luis@666: def notify_authors_publication_added(project) luis@643: self.authors.each do |author| luis@651: Rails.logger.debug { "Sending mail to \"#{self.title}\" publication authors." } luis@666: Mailer.deliver_publication_added(author.user, self, project) unless author.user.nil? luis@643: end luis@666: end luis@666: luis@666: def notify_authors_publication_updated(project) luis@666: self.authors.each do |author| luis@666: Rails.logger.debug { "Sending mail to \"#{self.title}\" publication authors." } luis@666: Mailer.deliver_publication_updated(author.user, self, project) unless author.user.nil? luis@666: end luis@643: end luis@643: luis@556: luis@556: def set_initial_author_order luis@556: authorships = self.authorships luis@556: luis@556: logger.debug { "Publication \"#{self.title}\" has #{authorships.size} authors." } luis@556: luis@556: authorships.each_with_index do |authorship, index| luis@556: if authorship.auth_order.nil? luis@556: authorship.auth_order = index luis@556: end luis@556: end luis@556: end luis@556: luis@556: luis@556: luis@556: luis@328: end