syuichi-tsuji
2/19/2013 - 4:13 PM

XOOPS Cube event notification core hack memo

XOOPS Cube event notification core hack memo

0:xoops_versions.php でパラメータをセット

html/modules/legacy/kernel/Legacy_EventFunctions.class.php で配列に積まれる。

$categories =& notificationSubscribableCategoryInfo(); 関数で表示対象を取得。
この関数内では、['item_name']をセットした場合は$_GETパラメータにその項目名があると配列に積まれる。

さらに、html/include/notification_functions.php の function &notificationEvents が呼ばれxoops_versionsのevent配列が積まれるる。命名規則として'comment','comment_submit'の場合処理がオーバーライドされる
	if ($event['name'] == 'comment') {
		$override_comment = true;
	}
	if ($event['name'] == 'comment_submit') {
		$override_commentsubmit = true;
	}

$xoopsTpl->assign('xoops_notification', $xoops_notification);

1:コメントがポストされると読み込まれる。

html/include/comment_post.php

2:イベント通知として以下が走る。

            $notification_handler =& xoops_gethandler('notification');
            $notification_handler->triggerEvent ($not_category, $not_itemid, $not_event, $comment_tags, false, $not_modid);

3:イベント通知が実行される。
html/kernel/notification.php

前段としてitem_id付きの通知対象が存在するかチェックされる。
        $criteria->add(new Criteria('not_modid', (int)$module_id));
        $criteria->add(new Criteria('not_category', $this->_escapeValue($category)));
        $criteria->add(new Criteria('not_itemid', (int)$item_id));
        $criteria->add(new Criteria('not_event', $this->_escapeValue($event)));

成功すれば以下、xoops_versionsで設定したモジュール配下の通知メソッドが読み込まれ実行される。

            $tags_file = XOOPS_ROOT_PATH . '/modules/' . $module->getVar('dirname') . '/' . $not_config['tags_file'];
  		$lookup_file = XOOPS_ROOT_PATH . '/modules/' . $module->getVar('dirname') . '/' . $not_config['lookup_file'];

4:タグのパラメータがセットされる。

		$tags['X_ITEM_NAME'] = !empty($item_info['name']) ? $item_info['name'] : '[' . _NOT_ITEMNAMENOTAVAILABLE . ']';
		$tags['X_ITEM_URL']  = !empty($item_info['url']) ? $item_info['url'] : '[' . _NOT_ITEMURLNOTAVAILABLE . ']';
		$tags['X_ITEM_TYPE'] = !empty($category_info['item_name']) ? $category_info['title'] : '[' . _NOT_ITEMTYPENOTAVAILABLE . ']';
        $tags['X_MODULE'] = $module->getVar('name', 'n');
        $tags['X_MODULE_URL'] = XOOPS_URL . '/modules/' . $module->getVar('dirname') . '/';
        $tags['X_NOTIFY_CATEGORY'] = $category;
        $tags['X_NOTIFY_EVENT'] = $event;
        
        
5:タグを渡してイベント通知が完了
 	$omit_user_id として投稿者本人には通知されないので注意。
	function notifyUser($template_dir, $template, $subject, $tags)