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 ¬ificationEvents が呼ばれ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)