XOOPSのイベント通知は、モジュールのルートコントローラを要求する上に、各種パスを決めうちしてある、D3にとってはなかなか嫌らしい機能です。
XOOPS_ROOT_PATH/modules/(dirname)/notification.php
XOOPS_ROOT_PATH/modules/(dirname)/notification_update.php
は用意せざるを得ないでしょう。
このあたりは、bulletin2がかなり先駆者としての働きをしていて、私自身、そのソースコードを追うだけでほとんどうまく行きました。
ただ、実際にモジュールからトリガーを引くときに、イベント通知の言語ファイル(*.tpl)のパスが決めうちであり、D3モジュールの特長である言語ファイルオーバーライドシステムが効きません。
bulletin2 では、それを解決しようと、イベント通知で呼ばれるlookup_fileの中でtriggerEvent()内の変数を書き換える、というアクロバティックな技(お前がいうか?)を見せています。
ところが、lookup_file 自体は、一度しか読み込まれない(include_once $lookup_file;)ために、この方法では、同時に2つのイベントをトリガーすることができません。他にも、これだとCube2.1との互換性も失われるであろう、というデメリットがあります。
仕方がないので、d3forumでは、XoopsNotificationHanlder::triggerEvent() は捨てて、それの代用関数を作りました。内部では、XoopsNotificationHanlder::notifyUser() を呼び出す形になっているので、このインターフェースさえ変わらなければ、Cube2.1でも本家版2.2でも動くはずです。もちろん、2種類以上のトリガーを同時に引くことも可能です。
このような仕掛けを作ったおかげで、ちゃんと以下のようなファイルオーバーライドが効くようになります。
1. XOOPS_ROOT_PATH/modules/(dirname)/language/(lang)/mail_template/
2. XOOPS_TRUST_PATH/modules/(trustdirname)/language/(lang)/mail_template/
3. XOOPS_TRUST_PATH/modules/(trustdirname)/language/english/mail_template/