code up

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Redmineでファイルのアップロードを通知する - Notification on attaching new file in Redmine

課題管理にRedmineを使用している。色々設定があってとても便利なのだが、本日設定画面では設定できない要件が発生した。

文書またはファイルがアップロードされた(add/upload/attach)時の通知が届かない。

Ruby初だったりするので、間違えていたらごめんなさい。

全くメールが届かないわけではなく、個人設定で「~すべての通知」を選んでいれば届くようになるのだが、これを選ぶと他の余計なものまで届いてしまうので設定したくない。

最新版(2.2.3)にあげてみたけど、特に設定はできるようになってない様子。仕方ないのでこちらを参考に直接コードを編集した。

vi /home/redmine/app/models/mailer.rb

  def attachments_added(attachments)
    container = attachments.first.container
    added_to = ''
    added_to_url = ''
    @author = attachments.first.author
    case container.class.name
    when 'Project'
      added_to_url = url_for(:controller => 'files', :action => 'index', :project_id => container)
      added_to = "#{l(:label_project)}: #{container}"
      recipients = container.project.notified_users.select {|user| user.allowed_to?(:view_files, container.project)}.collect  {|u| u.mail}
    when 'Version'
      added_to_url = url_for(:controller => 'files', :action => 'index', :project_id => container.project)
      added_to = "#{l(:label_version)}: #{container.name}"
#      recipients = container.project.notified_users.select {|user| user.allowed_to?(:view_files, container.project)}.collect  {|u| u.mail}
      recipients = container.project.members.collect{|m|m.user.mail if m.user.mail_notification!='none'}.select{|m|m!=nil}
    when 'Document'
      added_to_url = url_for(:controller => 'documents', :action => 'show', :id => container.id)
      added_to = "#{l(:label_document)}: #{container.title}"
#      recipients = container.recipients
      recipients = container.project.members.collect{|m|m.user.mail if m.user.mail_notification!='none'}.select{|m|m!=nil}
    end
    redmine_headers 'Project' => container.project.identifier
    @attachments = attachments
    @added_to = added_to
    @added_to_url = added_to_url
    mail :to => recipients,
      :subject => "[#{container.project.name}] #{l(:label_attachment_new)}"
  end

Version(ファイル)とDocument(文書)が添付された時のメール受信者として、プロジェクトメンバー全員のうち、メール通知を「通知しない」としている人以外を抽出するようにした。

しっかりRedmineの構造を理解すれば、フック(alias_method_chainというものらしい)を使ってプラグインとして外側でオーバーライドできるっぽいけど、今回は断念。

関連記事
タグ:Redmine Ruby
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。