/** * * count all products for current category and sub categories * * @return int */ public function countAllContents() { $children = FolderQuery::findAllChild($this->getId()); array_push($children, $this); $contentsCount = 0; foreach ($children as $child) { $contentsCount += ContentQuery::create()->filterByFolder($child)->count(); } return $contentsCount; }
public function buildModelCriteria() { $search = ContentQuery::create(); /* manage translations */ $this->configureI18nProcessing($search, array('TITLE', 'CHAPO', 'DESCRIPTION', 'POSTSCRIPTUM', 'META_TITLE', 'META_DESCRIPTION', 'META_KEYWORDS')); $id = $this->getId(); if (!is_null($id)) { $search->filterById($id, Criteria::IN); } $folder = $this->getFolder(); $folderDefault = $this->getFolderDefault(); if (!is_null($folder) || !is_null($folderDefault)) { $foldersIds = array(); if (!is_array($folder)) { $folder = array(); } if (!is_array($folderDefault)) { $folderDefault = array(); } $foldersIds = array_merge($foldersIds, $folder, $folderDefault); $folders = FolderQuery::create()->filterById($foldersIds, Criteria::IN)->find(); $depth = $this->getDepth(); if (null !== $depth) { foreach (FolderQuery::findAllChild($folder, $depth) as $subFolder) { $folders->prepend($subFolder); } } $search->filterByFolder($folders, Criteria::IN); } $current = $this->getCurrent(); if ($current === true) { $search->filterById($this->request->get("content_id")); } elseif ($current === false) { $search->filterById($this->request->get("content_id"), Criteria::NOT_IN); } $current_folder = $this->getCurrentFolder(); if ($current_folder === true) { $current = ContentQuery::create()->findPk($this->request->get("content_id")); $search->filterByFolder($current->getFolders(), Criteria::IN); } elseif ($current_folder === false) { $current = ContentQuery::create()->findPk($this->request->get("content_id")); $search->filterByFolder($current->getFolders(), Criteria::NOT_IN); } $visible = $this->getVisible(); if ($visible !== BooleanOrBothType::ANY) { $search->filterByVisible($visible ? 1 : 0); } $title = $this->getTitle(); if (!is_null($title)) { $search->where("CASE WHEN NOT ISNULL(`requested_locale_i18n`.ID) THEN `requested_locale_i18n`.`TITLE` ELSE `default_locale_i18n`.`TITLE` END " . Criteria::LIKE . " ?", "%" . $title . "%", \PDO::PARAM_STR); } $orders = $this->getOrder(); foreach ($orders as $order) { switch ($order) { case "alpha": $search->addAscendingOrderByColumn('i18n_TITLE'); break; case "alpha-reverse": $search->addDescendingOrderByColumn('i18n_TITLE'); break; case "manual": if (null === $foldersIds || count($foldersIds) != 1) { throw new \InvalidArgumentException('Manual order cannot be set without single folder argument'); } $search->orderByPosition(Criteria::ASC); break; case "manual_reverse": if (null === $foldersIds || count($foldersIds) != 1) { throw new \InvalidArgumentException('Manual order cannot be set without single folder argument'); } $search->orderByPosition(Criteria::DESC); break; case "given_id": if (null === $id) { throw new \InvalidArgumentException('Given_id order cannot be set without `id` argument'); } foreach ($id as $singleId) { $givenIdMatched = 'given_id_matched_' . $singleId; $search->withColumn(ContentTableMap::ID . "='{$singleId}'", $givenIdMatched); $search->orderBy($givenIdMatched, Criteria::DESC); } break; case "random": $search->clearOrderByColumns(); $search->addAscendingOrderByColumn('RAND()'); break 2; case "created": $search->addAscendingOrderByColumn('created_at'); break; case "created_reverse": $search->addDescendingOrderByColumn('created_at'); break; case "updated": $search->addAscendingOrderByColumn('updated_at'); break; case "updated_reverse": $search->addDescendingOrderByColumn('updated_at'); break; case "position": $search->orderByPosition(Criteria::ASC); break; case "position_reverse": $search->orderByPosition(Criteria::DESC); break; } } $exclude = $this->getExclude(); if (!is_null($exclude)) { $search->filterById($exclude, Criteria::NOT_IN); } $exclude_folder = $this->getExcludeFolder(); if (!is_null($exclude_folder)) { $search->filterByFolder(FolderQuery::create()->filterById($exclude_folder, Criteria::IN)->find(), Criteria::NOT_IN); } return $search; }