- blogs:
- cles::blog
« Trac のメール通知でSMTPSサーバを使う :: 酒房TAROH »
2011/02/24

Tracのメールの通知先をプロファイルのEmail宛にする

Tracで前々から不便だなと思っていることとして、Notificationの送り先のカスタマイズ性が低いというものがあります。
具体的に述べると、Tracのメールの通知先はログイン名がメールアドレスになっていればそのアドレス、もしくは設定を変更することでログイン名+あるドメイン名をつけたもの宛にしかならないので、ユーザーが通知先を自由に変更することができません。また、ユーザーごとに通知のOn/Offを切り替えるような機能もありません。
ユーザーのプロファイルには折角Emailの欄があるので、このアドレス宛にメール通知を行なうように改造してみました。ちょっとやっつけなので、今回のパッチを当てると、ユーザーのプロファイル欄だけを通知先を見なすようになるので、ログイン名をメールアドレスにしていても、ユーザーのプロファイル欄が空であれば通知は行なわれないようになります。coalesce()を使えば、プロファイルのメールを優先するようにすることくらいは可能かもしれません。
† notification.py.diff
今回はTracLightningだったので C:\TracLight\python\Lib\site-packages\Trac-0.11.5.ja1-py2.5.egg\trac\ticket\notification.py に下記のような変更を加えています。
--- notification.py.org Thu Feb 24 11:40:38 2011
+++ notification.py Thu Feb 24 11:42:51 2011
@@ -241,8 +241,11 @@
cursor = self.db.cursor()
# Harvest email addresses from the cc, reporter, and owner fields
- cursor.execute("SELECT cc,reporter,owner FROM ticket WHERE id=%s",
- (tktid,))
+ cursor.execute("SELECT s1.value,s2.value,s3.value FROM ticket t "
+ "LEFT OUTER JOIN session_attribute s1 ON cc = s1.sid AND s1.name = 'email' "
+ "LEFT OUTER JOIN session_attribute s2 ON reporter = s2.sid AND s2.name = 'email' "
+ "LEFT OUTER JOIN session_attribute s3 ON owner = s3.sid AND s3.name = 'email' "
+ "WHERE t.id=%s", (tktid,))
row = cursor.fetchone()
if row:
ccrecipients += row[0] and row[0].replace(',', ' ').split() or []
@@ -255,20 +258,24 @@
# Harvest email addresses from the author field of ticket_change(s)
if notify_updater:
- cursor.execute("SELECT DISTINCT author,ticket FROM ticket_change "
+ cursor.execute("SELECT DISTINCT value,ticket FROM ticket_change "
+ "LEFT OUTER JOIN session_attribute ON author = sid AND name = 'email' "
"WHERE ticket=%s", (tktid,))
for author,ticket in cursor:
torecipients.append(author)
# Suppress the updater from the recipients
updater = None
- cursor.execute("SELECT author FROM ticket_change WHERE ticket=%s "
+ cursor.execute("SELECT value FROM ticket_change "
+ "LEFT OUTER JOIN session_attribute ON author = sid AND name = 'email' "
+ "WHERE ticket=%s "
"ORDER BY time DESC LIMIT 1", (tktid,))
for updater, in cursor:
break
else:
- cursor.execute("SELECT reporter FROM ticket WHERE id=%s",
- (tktid,))
+ cursor.execute("SELECT value FROM ticket "
+ "LEFT OUTER JOIN session_attribute ON reporter = sid AND name = 'email' "
+ "WHERE id=%s", (tktid,))
for updater, in cursor:
break
トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/4089
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
« Trac のメール通知でSMTPSサーバを使う :: 酒房TAROH »
サイト内検索
検索ワードランキング
へぇが多いエントリ
閲覧数が多いエントリ
1 . アーロンチェアのポスチャーフィットを修理(114438)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(112957)
3 . 年次の人間ドックへ(112381)
4 . 2023 年分の確定申告完了!(1つめ)(111951)
5 . 三菱鉛筆がラミーを買収(111824)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(112957)
3 . 年次の人間ドックへ(112381)
4 . 2023 年分の確定申告完了!(1つめ)(111951)
5 . 三菱鉛筆がラミーを買収(111824)
cles::blogについて
Referrers