LOGIN ID Password Auto Login Register Now! Lost Password?
XUGJ Forum

イベント通知に使いたい情報をアサインする

  • このフォーラムに新しいトピックを立てることはできません
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2009-3-20 4:38 | 最終変更
GIJOE  Admiral 登録日: 2006-3-20   投稿数: 3708
XCL2.1のイベント通知にデリゲート XoopsNotificationHandler.Trigger があるのは知っていたのですが、一番書き換えたい部分が値渡しなので、イマイチ使えませんでした。

3日前、2.1.7の準備として、minahitoさんが Request#2642987 をコミットしてくれたので、一気に使いやすくなりました。

そのデリゲート名は、XoopsNotificationHandler.TriggerPreaction です。

ちなみに、新しいD3モジュールであればD3NotificationHandlerを使っているでしょうから、それとほぼ引数互換の D3NotificationHandler.Trigger が利用出来ます。


これでお蔵入りしていたpreloadが公開できます。
html/preload/NotificationExtraAssign.class.php
として保存してください。

動作環境は、XCL2.1.7RC以上です。今すぐ試したければ、ここから html/kernel/notification.php を落として上書きする、というのも手です。(もしくはsvn update)
http://xoopscube.svn.sourceforge.net/viewvc/xoopscube/Package_Legacy/trunk/ht...

<?php

if( ! defined( 'XOOPS_ROOT_PATH' ) ) exit ;

class NotificationExtraAssign extends XCube_ActionFilter
{
	function postFilter()
	{
		$this->mRoot->mDelegateManager->add( 'XoopsNotificationHandler.TriggerPreaction' , array( &$this , 'legacyHook' ) ) ;
		$this->mRoot->mDelegateManager->add( 'D3NotificationHandler.Trigger' , array( &$this , 'd3Hook' ) ) ;
	}

	function legacyHook( &$category , &$event , &$item_id , &$extra_tags , &$module , &$user_list , &$omit_user_id , &$not_config , &$force_return )
	{
		$extra_tags = $this->appendExtraTags( $extra_tags ) ;
		// $omit_user_id = array() ;
		return ;
	}

	function d3Hook( &$category , &$event , &$item_id , &$extra_tags , &$module , &$user_list , &$omit_user_id , $not_config , &$force_return , &$mail_template_dir , $mydirname , $mytrustdirname )
	{
		$extra_tags = $this->appendExtraTags( $extra_tags ) ;
		// $omit_user_id = array() ;
		return ;
	}

	function appendExtraTags( $extra_tags )
	{
		if( is_object( $GLOBALS['xoopsUser'] ) ) {
			$extra_tags['X_TRIGGER_UID'] = $GLOBALS['xoopsUser']->getVar('uid','n') ;
			$extra_tags['X_TRIGGER_UNAME'] = $GLOBALS['xoopsUser']->getVar('uname','n') ;
			$extra_tags['X_TRIGGER_NAME'] = $GLOBALS['xoopsUser']->getVar('name','n') ;
		} else {
			$extra_tags['X_TRIGGER_UID'] = 0 ;
			$extra_tags['X_TRIGGER_UNAME'] = _GUESTS ;
			$extra_tags['X_TRIGGER_NAME'] = _GUESTS ;
		}
		return $extra_tags ;
	}


}

このpreloadは、イベント通知テンプレート変数として、以下の3つを追加定義します。

{X_TRIGGER_UID} イベント通知相手のuid
{X_TRIGGER_UNAME} イベント通知相手のuname
{X_TRIGGER_NAME} イベント通知相手のname

イベント通知テンプレートでこれらの変数を書けば、通知文に「本名」フィールドを使うことも可能です。

あと、コメントアウトしてありますが、
		// $omit_user_id = array() ;
この行の//を外せば、通知対象となるイベントをトリガーした本人にも、イベント内容が通知されます(2箇所)。これは自分で開発しているモジュールのイベント通知機能を確認するときに便利です。実運用サイトでもそういう動作が欲しいケースは当然あるでしょう。

なお、このpreloadは、あくまでサンプルです。
実際のサイトで運用するときには、$categoryや$eventによる振り分けをするケースがほとんどでしょう。


# いつの間にかSVNに移行してたんですね。CVSの方を見ていて、「fixedになっているのに変更なしって変だなあ」とか首をかしげてました。
投票数:0 平均点:0.00

  条件検索へ


Back to Page Top
MainMenu
Manuals
Search
XOOPS Official & Dev.
XOOPS Communities