public function execute($request) { if (!isset($request->limit)) { $request->limit = sfConfig::get('app_hits_per_page'); } $criteria = new Criteria(); $criteria->add(QubitActor::PARENT_ID, QubitActor::ROOT_ID); // Add criteria to exclude actors that are users or repository objects $criteria = QubitActor::addGetOnlyActorsCriteria($criteria); $fallbackTable = 'QubitActor'; switch ($request->sort) { case 'nameDown': $criteria->addDescendingOrderByColumn('authorized_form_of_name'); break; case 'nameUp': $criteria->addAscendingOrderByColumn('authorized_form_of_name'); break; case 'typeDown': $fallbackTable = 'QubitTerm'; $criteria->addJoin(QubitActor::ENTITY_TYPE_ID, QubitTerm::ID, Criteria::LEFT_JOIN); $criteria->addDescendingOrderByColumn('name'); break; case 'typeUp': $fallbackTable = 'QubitTerm'; $criteria->addJoin(QubitActor::ENTITY_TYPE_ID, QubitTerm::ID, Criteria::LEFT_JOIN); $criteria->addAscendingOrderByColumn('name'); break; case 'updatedDown': $criteria->addDescendingOrderByColumn(QubitObject::UPDATED_AT); break; case 'updatedUp': $criteria->addAscendingOrderByColumn(QubitObject::UPDATED_AT); break; default: if (!$this->getUser()->isAuthenticated()) { $criteria->addAscendingOrderByColumn('authorized_form_of_name'); } else { $criteria->addDescendingOrderByColumn(QubitObject::UPDATED_AT); } } // Do source culture fallback $criteria = QubitCultureFallback::addFallbackCriteria($criteria, $fallbackTable); // Page results $this->pager = new QubitPager('QubitActor'); $this->pager->setCriteria($criteria); $this->pager->setMaxPerPage($request->limit); $this->pager->setPage($request->page); }
public function doSearch() { $criteria = new Criteria(); $this->sort = $this->request->getParameter('sort', 'updatedDown'); // This join seems to be necessary to avoid cross joining the local table // with the QubitObject table $criteria->addJoin(constant($this->className . '::ID'), QubitObject::ID); switch ($this->form->getValue('className')) { case 'QubitActor': $nameColumn = 'authorized_form_of_name'; $this->nameColumnDisplay = 'Name'; $criteria = QubitActor::addGetOnlyActorsCriteria($criteria); $criteria->add(QubitActor::PARENT_ID, null, Criteria::ISNOTNULL); break; case 'QubitFunction': $nameColumn = 'authorized_form_of_name'; $this->nameColumnDisplay = 'Name'; break; case 'QubitRepository': $nameColumn = 'authorized_form_of_name'; $this->nameColumnDisplay = 'Name'; $criteria = QubitRepository::addGetOnlyRepositoryCriteria($criteria); break; case 'QubitTerm': $nameColumn = 'name'; $this->nameColumnDisplay = 'Name'; $criteria->add(QubitTerm::PARENT_ID, null, Criteria::ISNOTNULL); break; // Default: information object // Default: information object default: $nameColumn = 'title'; $this->nameColumnDisplay = 'Title'; $criteria->add(QubitInformationObject::PARENT_ID, null, Criteria::ISNOTNULL); } if ('QubitInformationObject' == $this->className && 'all' != $this->form->getValue('publicationStatus')) { $criteria->addJoin(QubitObject::ID, QubitStatus::OBJECT_ID); $criteria->add(QubitStatus::STATUS_ID, $this->form->getValue('publicationStatus')); } // End date at midnight if (null != $this->form->getValue('dateEnd')) { $dateEnd = $this->form->getValue('dateEnd') . ' 24:00:00'; } // Add date criteria switch ($dateOf = $this->form->getValue('dateOf')) { case 'CREATED_AT': case 'UPDATED_AT': if (null !== $this->form->getValue('dateStart')) { $criteria->addAnd(constant('QubitObject::' . $dateOf), $this->form->getValue('dateStart'), Criteria::GREATER_EQUAL); } if (isset($dateEnd)) { $criteria->addAnd(constant('QubitObject::' . $dateOf), $dateEnd, Criteria::LESS_EQUAL); } break; default: if (null !== $this->form->getValue('dateStart')) { $c1 = $criteria->getNewCriterion(QubitObject::CREATED_AT, $this->form->getValue('dateStart'), Criteria::GREATER_EQUAL); $c2 = $criteria->getNewCriterion(QubitObject::UPDATED_AT, $this->form->getValue('dateStart'), Criteria::GREATER_EQUAL); $c1->addOr($c2); $criteria->addAnd($c1); } if (isset($dateEnd)) { $c3 = $criteria->getNewCriterion(QubitObject::CREATED_AT, $dateEnd, Criteria::LESS_EQUAL); $c4 = $criteria->getNewCriterion(QubitObject::UPDATED_AT, $dateEnd, Criteria::LESS_EQUAL); $c3->addOr($c4); $criteria->addAnd($c3); } } // Add sort criteria switch ($this->sort) { case 'nameDown': $criteria->addDescendingOrderByColumn($nameColumn); break; case 'nameUp': $criteria->addAscendingOrderByColumn($nameColumn); break; case 'updatedUp': $criteria->addAscendingOrderByColumn(QubitObject::UPDATED_AT); break; case 'updatedDown': default: $criteria->addDescendingOrderByColumn(QubitObject::UPDATED_AT); } // Add fallback criteria for name if ('nameDown' == $this->sort || 'nameUp' == $this->sort) { $criteria = QubitCultureFallback::addFallbackCriteria($criteria, $this->form->getValue('className')); } // Page results $this->pager = new QubitPager($this->className); $this->pager->setCriteria($criteria); $this->pager->setMaxPerPage($this->form->getValue('limit')); $this->pager->setPage($this->request->getParameter('page', 1)); }
/** * Returns only Actor objects, excluding those * that are an instance of the User or Repository class * * @return QubitQuery array of QubitActor objects */ public static function getOnlyActors($criteria = null, $options = array()) { if (is_null($criteria)) { $criteria = new Criteria(); } $criteria = QubitActor::addGetOnlyActorsCriteria($criteria); return self::get($criteria); }