示例#1
0
 /**
  *
  * 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;
 }
示例#2
0
 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;
 }