function b_pico_subcategories_show($options) { global $xoopsUser; $mydirname = empty($options[0]) ? 'pico' : $options[0]; $categories = trim(@$options[1]) === '' ? array() : array_map('intval', explode(',', $options[1])); $this_template = empty($options[2]) ? 'db:' . $mydirname . '_block_subcategories.html' : trim($options[2]); if (preg_match('/[^0-9a-zA-Z_-]/', $mydirname)) { die('Invalid mydirname'); } $db =& Database::getInstance(); $myts =& MyTextSanitizer::getInstance(); $uid = is_object(@$xoopsUser) ? $xoopsUser->getVar('uid') : 0; $module_handler =& xoops_gethandler('module'); $module =& $module_handler->getByDirname($mydirname); $config_handler =& xoops_gethandler('config'); $configs = $config_handler->getConfigList($module->mid()); // categories can be read by current viewer (check by category_permissions) $whr_read4cat = 'c.`cat_id` IN (' . implode(",", pico_common_get_categories_can_read($mydirname)) . ')'; // categories if ($categories === array()) { $whr_categories = 'WHERE pid=0'; $categories4assign = ''; } else { $whr_categories = 'c.pid IN (' . implode(',', $categories) . ')'; $categories4assign = implode(',', $categories); } $sql = "SELECT c.cat_id,c.cat_title,c.cat_vpath FROM " . $db->prefix($mydirname . "_categories") . " c WHERE ({$whr_read4cat}) AND ({$whr_categories}) ORDER BY c.cat_weight"; if (!($result = $db->query($sql))) { echo $db->logger->dumpQueries(); exit; } $constpref = '_MB_' . strtoupper($mydirname); $block = array('mydirname' => $mydirname, 'mod_url' => XOOPS_URL . '/modules/' . $mydirname, 'mod_imageurl' => XOOPS_URL . '/modules/' . $mydirname . '/' . $configs['images_dir'], 'mod_config' => $configs, 'categories' => $categories4assign, 'lang_category' => constant($constpref . '_CATEGORY'), 'lang_topcategory' => constant($constpref . '_TOPCATEGORY')); $cat4assign = array(); while ($cat_row = $db->fetchArray($result)) { $cat4assign[] = array('id' => intval($cat_row['cat_id']), 'link' => pico_common_make_category_link4html($configs, $cat_row), 'title' => $myts->makeTboxData4Show($cat_row['cat_title'], 1, 1)); } $block['categories'] = $cat4assign; if (empty($options['disable_renderer'])) { require_once XOOPS_ROOT_PATH . '/class/template.php'; $tpl =& new XoopsTpl(); $tpl->assign('block', $block); $ret['content'] = $tpl->fetch($this_template); return $ret; } else { return $block; } }
function getCategoryLatestContents(&$categoryObj, $num = 10, $fetch_from_subcategories = false) { $db =& Database::getInstance(); $cat_data = $categoryObj->getData(); $child_categories = $categoryObj->getChildIds(); $readable_categories = pico_common_get_categories_can_read($this->mydirname); $target_categories = array_intersect(array_merge($child_categories, array($cat_data['id'])), $readable_categories); $whr_cid = 'cat_id IN (' . implode(',', $target_categories) . ')'; $sql = "SELECT content_id FROM " . $db->prefix($this->mydirname . "_contents") . " WHERE ({$whr_cid}) AND visible AND created_time <= UNIX_TIMESTAMP() AND expiring_time > UNIX_TIMESTAMP() ORDER BY modified_time DESC, content_id LIMIT {$num}"; if (!($result = $db->query($sql))) { if ($GLOBALS['xoopsUser']->isAdmin()) { echo $db->logger->dumpQueries(); } exit; } $ret = array(); while (list($content_id) = $db->fetchRow($result)) { $objTemp =& new PicoContent($this->mydirname, $content_id); $ret[$content_id] =& $objTemp; //if( $objTemp->data['can_read'] ) $ret[ $content_id ] =& $objTemp ; } return $ret; }
function pico_common_get_submenu($mydirname, $caller = 'xoops_version') { static $submenus_cache; if (!empty($submenus_cache[$caller][$mydirname])) { return $submenus_cache[$caller][$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_read = '`cat_id` IN (' . implode(",", pico_common_get_categories_can_read($mydirname)) . ')'; $categories = array(0 => array('pid' => -1, 'name' => '', 'url' => '', 'sub' => array())); // categories query $sql = "SELECT cat_id,pid,cat_title,cat_vpath FROM " . $db->prefix($mydirname . "_categories") . " WHERE ({$whr_read}) 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'], 1, 1), 'url' => pico_common_make_category_link4html($mod_config, $cat_row), 'is_category' => true, 'pid' => $cat_row['pid']); } } if (!($caller == 'sitemap_plugin' && !@$mod_config['sitemap_showcontents']) && !($caller == 'xoops_version' && !@$mod_config['submenu_showcontents'])) { // contents query $ors = $db->query("SELECT cat_id,content_id,vpath,subject FROM " . $db->prefix($mydirname . "_contents") . " WHERE show_in_menu AND visible AND created_time <= UNIX_TIMESTAMP() AND expiring_time > UNIX_TIMESTAMP() AND {$whr_read} ORDER BY weight,content_id"); if ($ors) { while ($content_row = $db->fetchArray($ors)) { $cat_id = intval($content_row['cat_id']); $categories[$cat_id]['sub'][] = array('name' => $myts->makeTboxData4Show($content_row['subject'], 1, 1), 'url' => pico_common_make_content_link4html($mod_config, $content_row), 'is_category' => false); } } } // restruct categories $top_sub = !empty($categories[0]['sub']) ? $categories[0]['sub'] : array(); $submenus_cache[$caller][$mydirname] = array_merge($top_sub, pico_common_restruct_categories($categories, 0)); return $submenus_cache[$caller][$mydirname]; }
function picoGetContent4Assign() { $db =& Database::getInstance(); $mydirname = $this->mydirname; $content_id = intval($this->item_id); $module_handler =& xoops_gethandler('module'); $module =& $module_handler->getByDirname($mydirname); $config_handler =& xoops_gethandler('config'); $configs = $config_handler->getConfigList($module->mid()); // categories can be read by current viewer (check by category_permissions) $whr_read4content = 'o.`cat_id` IN (' . implode(",", pico_common_get_categories_can_read($mydirname)) . ')'; $sql = "SELECT o.content_id FROM " . $db->prefix($mydirname . "_contents") . " o WHERE ({$whr_read4content}) AND o.content_id='{$content_id}' AND o.visible AND o.created_time <= UNIX_TIMESTAMP()"; if (!($result = $db->query($sql))) { return array(); } if (!$db->getRowsNum($result)) { return array(); } list($content_id) = $db->fetchRow($result); // assigning $content4assign = pico_common_get_content4assign($mydirname, $content_id, $configs, array()); // convert links from relative to absolute (wraps mode only) if ($configs['use_wraps_mode']) { $parsed_url = parse_url(XOOPS_URL); $path = strlen(@$parsed_url['path']) > 1 ? $parsed_url['path'] : ''; $content_url = $path . '/modules/' . $mydirname . '/' . $content4assign['link']; $wrap_base_url = substr($content_url, 0, strrpos($content_url, '/')); $pattern = "/(href|src)\\=(\"|\\')?(?![a-z]+:|\\/|\\#)([^, \r\n\"\\(\\)'<>]+)/i"; $replacement = "\\1=\\2{$wrap_base_url}/\\3"; $content4assign['body'] = preg_replace($pattern, $replacement, $content4assign['body']); } return $content4assign; }