protected function _getParentIdsWithPost() { $db = DiscussHelper::getDBO(); $my = JFactory::getUser(); $query = 'select * from `#__discuss_category`'; $query .= ' where `published` = 1'; $query .= ' and `parent_id` = 0'; if ($my->id == 0) { $query .= ' and `private` = 0'; } $db->setQuery($query); $result = $db->loadObjectList(); $validCat = array(); if (count($result) > 0) { for ($i = 0; $i < count($result); $i++) { $item =& $result[$i]; $item->childs = null; DiscussHelper::buildNestedCategories($item->id, $item); $catIds = array(); $catIds[] = $item->id; DiscussHelper::accessNestedCategoriesId($item, $catIds); $item->cnt = $this->getTotalPostCount($catIds); if ($item->cnt > 0) { $validCat[] = $item->id; } } } return $validCat; }
public static function getPrivateCategories($acltype = DISCUSS_CATEGORY_ACL_ACTION_VIEW) { $db = DiscussHelper::getDBO(); $my = JFactory::getUser(); static $result = array(); $excludeCats = array(); $sig = (int) $my->id . '-' . (int) $acltype; if (!isset($result[$sig])) { if ($my->id == 0) { $catQuery = 'select distinct a.`id`, a.`private`'; $catQuery .= ' from `#__discuss_category` as a'; $catQuery .= ' left join `#__discuss_category_acl_map` as b on a.`id` = b.`category_id`'; $catQuery .= ' and b.`acl_id` = ' . $db->Quote($acltype); $catQuery .= ' and b.`type` = ' . $db->Quote('group'); $catQuery .= ' where a.`private` != ' . $db->Quote('0'); $gid = array(); $gids = ''; if (DiscussHelper::getJoomlaVersion() >= '1.6') { // $gid = JAccess::getGroupsByUser(0, false); $gid = DiscussHelper::getUserGroupId($my); } else { $gid = DiscussHelper::getUserGids(); } if (count($gid) > 0) { foreach ($gid as $id) { $gids .= empty($gids) ? $db->Quote($id) : ',' . $db->Quote($id); } $catQuery .= ' and a.`id` NOT IN ('; $catQuery .= ' SELECT c.category_id FROM `#__discuss_category_acl_map` as c '; $catQuery .= ' WHERE c.acl_id = ' . $db->Quote($acltype); $catQuery .= ' AND c.type = ' . $db->Quote('group'); $catQuery .= ' AND c.content_id IN (' . $gids . ') )'; } $db->setQuery($catQuery); $result = $db->loadObjectList(); } else { $result = self::getAclCategories($acltype, $my->id); } for ($i = 0; $i < count($result); $i++) { $item =& $result[$i]; $item->childs = null; DiscussHelper::buildNestedCategories($item->id, $item, true); $catIds = array(); $catIds[] = $item->id; DiscussHelper::accessNestedCategoriesId($item, $catIds); $excludeCats = array_merge($excludeCats, $catIds); } $result[$sig] = $excludeCats; } return $result[$sig]; }
/** * Retrieves the number of post count from a particular category. * * @since 3.0 * @access public */ public function getPostCount() { $db = DiscussHelper::getDBO(); $my = JFactory::getUser(); $queryExclude = ''; $excludeCats = array(); // We need to determine if the user is a guest. // If it is a guest, we need to retrieve all private categories. if (!$my->id) { $query = 'SELECT a.' . $db->nameQuote('id') . ',' . $db->nameQuote('private'); $query .= ' FROM ' . $db->nameQuote('#__discuss_category') . ' AS a'; $query .= ' WHERE a.' . $db->nameQuote('private') . '=' . $db->Quote(1); $db->setQuery($query); $result = $db->loadObjectList(); for ($i = 0; $i < count($result); $i++) { $item = $result[$i]; $item->childs = null; DiscussHelper::buildNestedCategories($item->id, $item); $catIds = array(); $catIds[] = $item->id; DiscussHelper::accessNestedCategoriesId($item, $catIds); $excludeCats = array_merge($excludeCats, $catIds); } } $model = DiscussHelper::getModel('Categories'); $childs = $model->getChildIds($this->id); $total = count($childs); $subcategories = array(); $subcategories[] = $this->id; if ($childs) { for ($i = 0; $i < $total; $i++) { $subcategories[] = $childs[$i]; } } $filtered = array_diff($subcategories, $excludeCats); if (empty($filtered)) { // just a temp fix when DiscussHelper::getPrivateCategories() // failed to get correct result and it will cause the following // query fails with error 500. return; } $allowedCategories = array(); foreach ($filtered as $filteredCategory) { if ($filteredCategory) { $allowedCategories[] = $db->Quote($filteredCategory); } } $query = 'SELECT COUNT(1) FROM ' . $db->nameQuote('#__discuss_posts') . ' ' . 'WHERE ' . $db->nameQuote('category_id') . ' IN (' . implode(',', $allowedCategories) . ') ' . 'AND ' . $db->nameQuote('parent_id') . '=' . $db->Quote(0) . ' ' . 'AND ' . $db->nameQuote('published') . '=' . $db->Quote(DISCUSS_ID_PUBLISHED); $db->setQuery($query); $count = $db->loadResult(); return $count; }