cirandas.net

ref: master

app/models/approve_article.rb


  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
class ApproveArticle < Task
  validates_presence_of :requestor_id, :target_id

  validates :requestor, kind_of: {kind: Person}
  validate :allowed_requestor

  def allowed_requestor
    if target
      if target.person? && requestor != target
        self.errors.add(:requestor, _('You can not post articles to other users.'))
      end
    end
  end

  def article_title
    article ? article.title : _('(The original text was removed)')
  end

  def article
    Article.find_by id: data[:article_id]
  end

  def article= value
    data[:article_id] = value.id
  end

  def name
    data[:name].blank? ? (article ? article.name : _("Article removed.")) : data[:name]
  end

  def name= value
    data[:name] = value
  end

  settings_items :closing_statment, :article_parent_id, :highlighted
  settings_items :create_link, :type => :boolean, :default => false

  def article_parent
    Article.find_by id: article_parent_id.to_i
  end

  def article_parent= value
    self.article_parent_id = value.id
  end

  def abstract= value
    data[:abstract] = value
  end

  def abstract
    data[:abstract].blank? ? (article ? article.abstract : '') : data[:abstract]
  end

  def body= value
    data[:body] = value
  end

  def body
    data[:body].blank? ? (article ? article.body : "") : data[:body]
  end

  def perform
    if create_link
      LinkArticle.create!(:reference_article => article, :profile => target, :parent => article_parent, :highlighted => highlighted)
    else
      article.copy!(:name => name, :abstract => abstract, :body => body, :profile => target, :reference_article => article, :parent => article_parent, :highlighted => highlighted, :source => article.source, :last_changed_by_id => article.last_changed_by_id, :created_by_id => article.created_by_id)
    end
  end

  def title
    _("New article")
  end

  def icon
    result = {:type => :defined_image, :src => '/images/icons-app/article-minor.png', :name => name}
    result.merge({:url => article.url}) if article
    return result
  end

  def linked_subject
    {:text => name, :url => article.url} if article
  end

  def information
    if article
      {:message => _('%{requestor} wants to publish the article: %{linked_subject}.').html_safe}
    else
      {:message => _("The article was removed.")}
    end
  end

  def accept_details
    true
  end

  def reject_details
    true
  end

  def default_decision
    if article
      'skip'
    else
      'reject'
    end
  end

  def accept_disabled?
    article.blank?
  end

  def target_notification_description
    if article
      _('%{requestor} wants to publish the article: %{article}.') % {:requestor => requestor.name, :article => article.name}
    else
      _('%{requestor} wanted to publish an article but it was removed.') % {:requestor => requestor.name}
    end
  end

  def target_notification_message
    return nil if target.organization? && !target.moderated_articles?
    target_notification_description + "\n\n" +
    _('You need to login on %{system} in order to approve or reject this article.') % { :system => target.environment.name }
  end

  def task_finished_message
    if !closing_statment.blank?
      _("Your request for publishing the article \"%{article}\" was approved. Here is the comment left by the admin who approved your article:\n\n%{comment} ") % {:article => name, :comment => closing_statment}
    else
      _('Your request for publishing the article "%{article}" was approved.') % {:article => name}
    end
  end

  def task_cancelled_message
    message = _('Your request for publishing the article "%{article}" was rejected.') % {:article => name}
    if !reject_explanation.blank?
      message += " " + _("Here is the reject explanation left by the administrator who rejected your article: \n\n%{reject_explanation}") % {:reject_explanation => reject_explanation}
    end
    message
  end

end