protected function getListQuery() { $app = JFactory::getApplication(); $rootCategory = JUDirectoryFrontHelperCategory::getRootCategory(); $categoryId = $this->getState('category.id', $rootCategory->id); $getAllNestedCategories = $app->input->getInt('all', 0); $catFilter = true; if ($categoryId == 1 && $getAllNestedCategories == 1) { $catFilter = false; } if ($catFilter) { $categoryIdArray = array(); if ($getAllNestedCategories == 1) { $nestedCategories = JUDirectoryFrontHelperCategory::getCategoriesRecursive($categoryId, true, true); if (count($nestedCategories) > 0) { foreach ($nestedCategories as $categoryObj) { $categoryIdArray[] = $categoryObj->id; } } } array_unshift($categoryIdArray, $categoryId); $categoryString = implode(",", $categoryIdArray); } $ordering = $this->getState('list.ordering', ''); $direction = $this->getState('list.direction', 'ASC'); $user = JFactory::getUser(); $levels = $user->getAuthorisedViewLevels(); $levelsStr = implode(',', $levels); $db = JFactory::getDbo(); $nullDate = $db->getNullDate(); $nowDate = JFactory::getDate()->toSql(); $query = $db->getQuery(true); $query->select('listing.*'); $query->from('#__judirectory_listings AS listing'); JUDirectoryFrontHelper::optimizeListListingQuery($query); if ($catFilter) { $query->join('', '#__judirectory_listings_xref AS listingxref ON listing.id = listingxref.listing_id'); $query->join('', '#__judirectory_categories AS c ON c.id = listingxref.cat_id'); $query->where('c.id IN(' . $categoryString . ')'); $query->group('listing.id'); } $query->where('listing.approved = 1'); $query->where('listing.published = 1'); $query->where('(listing.publish_up = ' . $db->quote($nullDate) . ' OR listing.publish_up <= ' . $db->quote($nowDate) . ')'); $query->where('(listing.publish_down = ' . $db->quote($nullDate) . ' OR listing.publish_down >= ' . $db->quote($nowDate) . ')'); if ($user->get('guest')) { $query->where('listing.access IN (' . $levelsStr . ')'); } else { $query->where('(listing.access IN (' . $levelsStr . ') OR (listing.created_by = ' . $user->id . '))'); } $query->where('listing.featured = 1'); $app = JFactory::getApplication(); $tag = JFactory::getLanguage()->getTag(); if ($app->getLanguageFilter()) { $query->where('listing.language IN (' . $db->quote($tag) . ',' . $db->quote('*') . ',' . $db->quote('') . ')'); } $categoryRoot = JUDirectoryFrontHelperCategory::getRootCategory(); JUDirectoryFrontHelperField::appendFieldOrderingPriority($query, $categoryRoot->id, $ordering, $direction); return $query; }
protected function getInput() { $attr = $this->multiple ? ' multiple="multiple" size="7"' : ''; $nestedCategories = JUDirectoryFrontHelperCategory::getCategoriesRecursive(1, false, true, true); $options = array(); foreach ($nestedCategories as $categoryObj) { $options[] = JHtml::_('select.option', $categoryObj->id, str_repeat('|—', $categoryObj->level) . $categoryObj->title); } $html = JHtml::_('select.genericList', $options, $this->name, $attr, 'value', 'text', $this->value); return $html; }
public function isEmptyCategory($categoryId) { $nestedCategories = JUDirectoryFrontHelperCategory::getCategoriesRecursive($categoryId, true, true, true, true, true, $getIdOnly = true); if (!is_array($nestedCategories) || empty($nestedCategories)) { return true; } $categoryObject = $nestedCategories[0]; if ($categoryObject->total_nested_categories > 0) { return false; } if ($categoryObject->total_listings > 0) { return false; } return true; }
public static function getTotalListingsInCategory($categoryId, $nestedCategoryIds = null) { if (is_null($nestedCategoryIds)) { $nestedCategories = JUDirectoryFrontHelperCategory::getCategoriesRecursive($categoryId, true, true, true); $nestedCategoryIds = array(); foreach ($nestedCategories as $nestedCategory) { $nestedCategoryIds[] = $nestedCategory->id; } } if (!is_array($nestedCategoryIds) || !count($nestedCategoryIds)) { return 0; } $storeId = md5(__METHOD__ . "::" . serialize($nestedCategoryIds)); if (!isset(self::$cache[$storeId])) { $user = JFactory::getUser(); $levels = $user->getAuthorisedViewLevels(); $levelsStr = implode(',', $levels); $db = JFactory::getDbo(); $nullDate = $db->getNullDate(); $nowDate = JFactory::getDate()->toSql(); $query = $db->getQuery(true); $query->select('COUNT(*)'); $query->from('#__judirectory_listings AS listing'); $query->join('', '#__judirectory_listings_xref AS listingxref ON listing.id = listingxref.listing_id'); $query->join('', '#__judirectory_categories AS c ON c.id = listingxref.cat_id'); if (is_array($nestedCategoryIds) && count($nestedCategoryIds) > 0) { $query->where('(c.id IN (' . implode(",", $nestedCategoryIds) . '))'); } else { $query->where('(c.id IN (""))'); } $query->join('', '#__judirectory_listings_xref AS listingxmain ON listing.id = listingxmain.listing_id AND listingxmain.main = 1'); $query->join('', '#__judirectory_categories AS cmain ON cmain.id = listingxmain.cat_id'); $categoryIdArrayCanAccess = JUDirectoryFrontHelperPermission::getAccessibleCategoryIds(); if (is_array($categoryIdArrayCanAccess) && count($categoryIdArrayCanAccess) > 0) { $query->where('cmain.id IN(' . implode(",", $categoryIdArrayCanAccess) . ')'); } else { $query->where('cmain.id IN("")'); } $query->where('listing.approved = 1'); $query->where('listing.published = 1'); $query->where('(listing.publish_up = ' . $db->quote($nullDate) . ' OR listing.publish_up <= ' . $db->quote($nowDate) . ')'); $query->where('(listing.publish_down = ' . $db->quote($nullDate) . ' OR listing.publish_down >= ' . $db->quote($nowDate) . ')'); if ($user->get('guest')) { $query->where('listing.access IN (' . $levelsStr . ')'); } else { $query->where('(listing.access IN (' . $levelsStr . ') OR listing.created_by = ' . $user->id . ')'); } $app = JFactory::getApplication(); $tagLanguage = JFactory::getLanguage()->getTag(); if ($app->getLanguageFilter()) { $query->where('listing.language IN (' . $db->quote($tagLanguage) . ',' . $db->quote('*') . ',' . $db->quote('') . ')'); } $db->setQuery($query); self::$cache[$storeId] = $db->loadResult(); } return self::$cache[$storeId]; }
public function getSubCategories($parentId, $ordering = 'title', $direction = 'ASC') { $params = $this->getState('params'); $showEmptyCategory = $params->get('show_empty_subcategory', 1); $user = JFactory::getUser(); $levels = $user->getAuthorisedViewLevels(); $levelsStr = implode(',', $levels); $db = JFactory::getDbo(); $nullDate = $db->getNullDate(); $nowDate = JFactory::getDate()->toSql(); $query = $db->getQuery(true); $query->select('*'); $query->from('#__judirectory_categories'); $query->where('parent_id=' . $parentId); $query->where('published = 1'); $query->where('(publish_up = ' . $db->quote($nullDate) . ' OR publish_up <= ' . $db->quote($nowDate) . ')'); $query->where('(publish_down = ' . $db->quote($nullDate) . ' OR publish_down >= ' . $db->quote($nowDate) . ')'); $query->where('access IN (' . $levelsStr . ')'); $app = JFactory::getApplication(); $tag = JFactory::getLanguage()->getTag(); if ($app->getLanguageFilter()) { $query->where('language IN (' . $db->quote($tag) . ',' . $db->quote('*') . ',' . $db->quote('') . ')'); } $query->order($ordering . ' ' . $direction); $db->setQuery($query); $subCategoriesBefore = $db->loadObjectList(); $subCategoriesAfter = array(); foreach ($subCategoriesBefore as $category) { $showTotalSubCats = $params->get('show_total_subcats_of_subcat', 0); $showTotalChildListings = $params->get('show_total_listings_of_subcat', 0); $nestedCategories = null; if ($showTotalChildListings || $showTotalSubCats) { $nestedCategories = JUDirectoryFrontHelperCategory::getCategoriesRecursive($category->id, true, true, true, false, false, true); if ($showTotalChildListings) { $category->total_listings = JUDirectoryFrontHelperCategory::getTotalListingsInCategory($category->id, $nestedCategories); } if ($showTotalSubCats) { $category->total_nested_categories = JUDirectoryFrontHelperCategory::getTotalSubCategoriesInCategory($category->id, $nestedCategories); } } $registry = new JRegistry(); $registry->loadString($category->images); $category->images = $registry->toObject(); $category->link = JRoute::_(JUDirectoryHelperRoute::getCategoryRoute($category->id)); if (!$showEmptyCategory) { if (is_null($nestedCategories)) { $nestedCategories = JUDirectoryFrontHelperCategory::getCategoriesRecursive($category->id, true, true, true, false, false, true); } if (!isset($category->total_nested_categories)) { $category->total_nested_categories = JUDirectoryFrontHelperCategory::getTotalSubCategoriesInCategory($category->id, $nestedCategories); } if (!isset($category->total_listings)) { $category->total_listings = JUDirectoryFrontHelperCategory::getTotalListingsInCategory($category->id, $nestedCategories); } if ($category->total_nested_categories > 0 || $category->total_listings > 0) { $subCategoriesAfter[] = $category; } } else { $subCategoriesAfter[] = $category; } } return $subCategoriesAfter; }