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));
 }
예제 #3
0
 /**
  * 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);
 }