public function execute($request) { $criteria = new Criteria(); $criteria->addJoin(QubitActor::ID, QubitActorI18n::ID); $criteria->add(QubitActorI18n::AUTHORIZED_FORM_OF_NAME, "{$request->query}%", Criteria::LIKE); $criteria->addAscendingOrderByColumn('authorized_form_of_name'); $criteria->setDistinct(); $criteria->setLimit(sfConfig::get('app_hits_per_page', 10)); $criteria = QubitCultureFallback::addFallbackCriteria($criteria, 'QubitActor'); // Filter "denied" repositories if list for repository autocomplete on // information object form if (isset($request->aclAction)) { $repositoryList = array(); $repositoryAccess = QubitAcl::getRepositoryAccess($request->aclAction); // If all repositories are denied, no response if (1 == count($repositoryAccess) && QubitAcl::DENY == $repositoryAccess[0]['access']) { return sfView::NONE; } else { while ($repo = array_shift($repositoryAccess)) { if ('*' != $repo['id']) { $repositoryList[] = $repo['id']; } else { if (QubitAcl::DENY == $repo['access']) { // Require repositories to be specifically allowed (all others // prohibited) $criteria->add(QubitRepository::ID, $repositoryList + array('null'), Criteria::IN); } else { // Prohibit specified repositories (all others allowed) $criteria->add(QubitRepository::ID, $repositoryList, Criteria::NOT_IN); } } } } } $this->repositories = QubitRepository::get($criteria); }
public static function searchFilterDrafts($query) { // Filter out 'draft' items by repository $repositoryViewDrafts = QubitAcl::getRepositoryAccess('viewDraft'); if (1 == count($repositoryViewDrafts)) { if (QubitAcl::DENY == $repositoryViewDrafts[0]['access']) { // Don't show *any* draft info objects $query->addSubquery(QubitSearch::getInstance()->addTerm(QubitTerm::PUBLICATION_STATUS_PUBLISHED_ID, 'publicationStatusId'), true); } } else { // Get last rule in list, it will be the global rule with the opposite // access of the preceeding rules (e.g. if last rule is "DENY ALL" then // preceeding rules will be "ALLOW" rules) $globalRule = array_pop($repositoryViewDrafts); // If global rule is GRANT, then listed repos are exceptions so remove // from results if (QubitAcl::GRANT == $globalRule['access']) { while ($repo = array_shift($repositoryViewDrafts)) { $query->addSubquery(QubitSearch::getInstance()->addTerm($repo['id'], 'repositoryId'), true); $query->addSubquery(QubitSearch::getInstance()->addTerm(QubitTerm::PUBLICATION_STATUS_DRAFT_ID, 'publicationStatusId'), true); } } else { while ($repo = array_shift($repositoryViewDrafts)) { $query->addSubquery(QubitSearch::getInstance()->addTerm($repo['id'], 'repositoryId'), true); } // Filter rule should look like "+(id:(356 357 358) status:published)" $query->addSubquery(QubitSearch::getInstance()->addTerm(QubitTerm::PUBLICATION_STATUS_PUBLISHED_ID, 'publicationStatusId'), true); } } return $query; }