function d3forum_notify_base($mydirname, $category, $item_id)
 {
     include_once dirname(__FILE__) . '/include/common_functions.php';
     $db =& Database::getInstance();
     $module_handler =& xoops_gethandler('module');
     $module =& $module_handler->getByDirname($mydirname);
     if ($category == 'global') {
         $item['name'] = '';
         $item['url'] = '';
         return $item;
     }
     if ($category == 'category') {
         // Assume we have a valid cat_id
         $whr_cat = 'cat_id IN (' . implode(',', d3forum_get_categories_can_read($mydirname)) . ')';
         $sql = 'SELECT cat_title FROM ' . $db->prefix($mydirname . '_categories') . ' WHERE cat_id=' . $item_id . " AND ({$whr_cat})";
         $result = $db->query($sql);
         $result_array = $db->fetchArray($result);
         $item['name'] = $result_array['cat_title'];
         $item['url'] = XOOPS_URL . '/modules/' . $module->getVar('dirname') . '/index.php?cat_id=' . $item_id;
         return $item;
     }
     if ($category == 'forum') {
         // Assume we have a valid forum_id
         $whr_forum = 'forum_id IN (' . implode(',', d3forum_get_forums_can_read($mydirname)) . ')';
         $sql = 'SELECT forum_title FROM ' . $db->prefix($mydirname . '_forums') . ' WHERE forum_id=' . $item_id . " AND ({$whr_forum})";
         $result = $db->query($sql);
         $result_array = $db->fetchArray($result);
         $item['name'] = $result_array['forum_title'];
         $item['url'] = XOOPS_URL . '/modules/' . $module->getVar('dirname') . '/index.php?forum_id=' . $item_id;
         return $item;
     }
     if ($category == 'topic') {
         // Assume we have a valid topid_id
         $whr_forum = 'forum_id IN (' . implode(',', d3forum_get_forums_can_read($mydirname)) . ')';
         $sql = 'SELECT topic_title FROM ' . $db->prefix($mydirname . '_topics') . ' WHERE topic_id=' . $item_id . " AND ({$whr_forum})";
         $result = $db->query($sql);
         $result_array = $db->fetchArray($result);
         $item['name'] = $result_array['topic_title'];
         $item['url'] = XOOPS_URL . '/modules/' . $module->getVar('dirname') . '/index.php?topic_id=' . $item_id;
         return $item;
     }
 }
function d3forum_get_submenu($mydirname)
{
    static $submenus_cache;
    if (!empty($submenus_cache[$mydirname])) {
        return $submenus_cache[$mydirname];
    }
    $module_handler =& xoops_gethandler('module');
    $module =& $module_handler->getByDirname($mydirname);
    if (!is_object($module)) {
        return array();
    }
    $config_handler =& xoops_gethandler('config');
    $mod_config =& $config_handler->getConfigsByCat(0, $module->getVar('mid'));
    $db =& Database::getInstance();
    $myts =& MyTextSanitizer::getInstance();
    $whr_read4cat = '`cat_id` IN (' . implode(",", d3forum_get_categories_can_read($mydirname)) . ')';
    $whr_read4forum = '`forum_id` IN (' . implode(",", d3forum_get_forums_can_read($mydirname)) . ')';
    $categories = array(0 => array('pid' => -1, 'name' => '', 'url' => ''));
    // categories query
    $sql = "SELECT cat_id,pid,cat_title FROM " . $db->prefix($mydirname . "_categories") . " WHERE ({$whr_read4cat}) ORDER BY cat_order_in_tree";
    $crs = $db->query($sql);
    if ($crs) {
        while ($cat_row = $db->fetchArray($crs)) {
            $cat_id = intval($cat_row['cat_id']);
            $categories[$cat_id] = array('name' => $myts->makeTboxData4Show($cat_row['cat_title']), 'url' => 'index.php?cat_id=' . $cat_id, 'pid' => $cat_row['pid']);
        }
    }
    // forums query
    $frs = $db->query("SELECT cat_id,forum_id,forum_title FROM " . $db->prefix($mydirname . "_forums") . " WHERE ({$whr_read4forum}) ORDER BY forum_weight");
    if ($frs) {
        while ($forum_row = $db->fetchArray($frs)) {
            $cat_id = intval($forum_row['cat_id']);
            $categories[$cat_id]['sub'][] = array('name' => $myts->makeTboxData4Show($forum_row['forum_title']), 'url' => '?forum_id=' . intval($forum_row['forum_id']));
        }
    }
    // restruct categories
    $submenus_cache[$mydirname] = array_merge(d3forum_restruct_categories($categories, 0));
    return $submenus_cache[$mydirname];
}