Redmine 2.3.0にXMPP Notifications Pluginを入れた話
Redmine 2.3.0にXMPP Notifications Pluginを入れました。いくつかハマリポイントがあったのでメモしておきます。
なお、私はRubyは全く詳しくありません。
まず、xmpp4r-simpleを入れるのですが、普通にgem install xmpp4r-simpleするとRuby 1.9以上に対応できなかったので、gem install xmpp4r-simple-19としました。
続いて、エンコード云々によって正規表現云々で落ちていたので plugins/redmine_xmpp_notifications/init.rb に書き足しています。
具体的には、require_dependencyの塊に上からに"project" "principal" "user"の3つを追加してやります。
更に、
# Encoding patch require 'socket' class TCPSocket def external_encoding Encoding::BINARY end end require 'rexml/source' class REXML::IOSource alias_method :encoding_assign, :encoding= def encoding=(value) encoding_assign(value) if value end end begin # OpenSSL is optional and can be missing require 'openssl' class OpenSSL::SSL::SSLSocket def external_encoding Encoding::BINARY end end rescue end
をRedmine::Plugin.register :redmine_xmpp_notifications doブロックの末尾に追加します。
標準手順に加えて上記をすることでとりあえずXMPPのメッセージは飛ぶようになりました。
が、「ウォッチまたは関係している事柄のみ」メール通知をする設定になっている人にはこれでは飛ばなかったので、app/models/user.rb にパッチを当てます。
notify_about?(object)メソッドの when 'selected', 'only_my_events' の下をこんな感じに書き換えます(私は1行で書きましたが複数行に分割して大丈夫?)。
object.author == self || is_or_belongs_to?(object.assigned_to) || is_or_belongs_to?(object.assigned_to_was) || object.watcher_recipients.include?(self.mail)
やっていることは、Issueのwacher_recipients(メールアドレスが入っていた)にUserのmailが含まれるか調べているだけです。
とりあえずは以上でなんとなく使えると思います。
なにか問題がありましたら教えてください。