/** * Initialize class. */ static public function initialize() { KUNENA_PROFILER ? KunenaProfiler::instance()->start('function '.__CLASS__.'::'.__FUNCTION__.'()') : null; if (KunenaConfig::getInstance()->get('cache_cat')) { // FIXME: Experimental caching. /** @var JCache|JCacheControllerCallback $cache */ $cache = JFactory::getCache('com_kunena', 'callback'); $cache->setLifeTime(180); self::$_instances = $cache->call(array('KunenaForumCategoryHelper', 'loadCategories')); } else { self::$_instances = self::loadCategories(); } if (is_null(self::$_tree)) { self::buildTree(self::$_instances); } self::$allowed = KunenaAccess::getInstance()->getAllowedCategories(); KUNENA_PROFILER ? KunenaProfiler::instance()->stop('function '.__CLASS__.'::'.__FUNCTION__.'()') : null; }
protected static function loadCategories() { KUNENA_PROFILER ? KunenaProfiler::instance()->start('function ' . __CLASS__ . '::' . __FUNCTION__ . '()') : null; $db = JFactory::getDBO(); $query = "SELECT * FROM #__kunena_categories ORDER BY ordering, name"; $db->setQuery($query); $results = (array) $db->loadAssocList(); KunenaError::checkDatabaseError(); self::$_instances = array(); self::$_tree = array(); if (empty($results)) { KUNENA_PROFILER ? KunenaProfiler::instance()->stop('function ' . __CLASS__ . '::' . __FUNCTION__ . '()') : null; return; } foreach ($results as $category) { $instance = new KunenaForumCategory($category); $instance->exists(true); self::$_instances[$instance->id] = $instance; if (!isset(self::$_tree[(int) $instance->id])) { self::$_tree[$instance->id] = array(); } self::$_tree[$instance->parent_id][$instance->id] =& self::$_tree[(int) $instance->id]; } unset($results); // TODO: remove this by adding level into table $heap = array(0); while (($parent = array_shift($heap)) !== null) { foreach (self::$_tree[$parent] as $id => $children) { if (!empty($children)) { array_push($heap, $id); } self::$_instances[$id]->level = $parent ? self::$_instances[$parent]->level + 1 : 0; } } KUNENA_PROFILER ? KunenaProfiler::instance()->stop('function ' . __CLASS__ . '::' . __FUNCTION__ . '()') : null; }