public function saveQuery(PhabricatorSavedQuery $query) { $query->setEngineClassName(get_class($this)); $unguarded = AphrontWriteGuard::beginScopedUnguardedWrites(); try { $query->save(); } catch (AphrontDuplicateKeyQueryException $ex) { // Ignore, this is just a repeated search. } unset($unguarded); }
public function handleRequest(AphrontRequest $request) { $user = $request->getUser(); $type = $request->getURIData('type'); $action = $request->getURIData('action'); $query = new PhabricatorSavedQuery(); $query_str = $request->getStr('query'); $query->setEngineClassName('PhabricatorSearchApplicationSearchEngine'); $query->setParameter('query', $query_str); $query->setParameter('types', array($type)); $status_open = PhabricatorSearchRelationship::RELATIONSHIP_OPEN; switch ($request->getStr('filter')) { case 'assigned': $query->setParameter('ownerPHIDs', array($user->getPHID())); $query->setParameter('statuses', array($status_open)); break; case 'created': $query->setParameter('authorPHIDs', array($user->getPHID())); // TODO - if / when we allow pholio mocks to be archived, etc // update this if ($type != PholioMockPHIDType::TYPECONST) { $query->setParameter('statuses', array($status_open)); } break; case 'open': $query->setParameter('statuses', array($status_open)); break; } $query->setParameter('excludePHIDs', array($request->getStr('exclude'))); $capabilities = array(PhabricatorPolicyCapability::CAN_VIEW); switch ($action) { case self::ACTION_MERGE: $capabilities[] = PhabricatorPolicyCapability::CAN_EDIT; break; default: break; } $results = id(new PhabricatorSearchDocumentQuery())->setViewer($user)->requireObjectCapabilities($capabilities)->withSavedQuery($query)->setOffset(0)->setLimit(100)->execute(); $phids = array_fill_keys(mpull($results, 'getPHID'), true); $phids += $this->queryObjectNames($query_str, $capabilities); $phids = array_keys($phids); $handles = $this->loadViewerHandles($phids); $data = array(); foreach ($handles as $handle) { $view = new PhabricatorHandleObjectSelectorDataView($handle); $data[] = $view->renderData(); } return id(new AphrontAjaxResponse())->setContent($data); }
public function handleRequest(AphrontRequest $request) { $viewer = $request->getViewer(); $object = $this->loadRelationshipObject(); if (!$object) { return new Aphront404Response(); } $relationship = $this->loadRelationship($object); if (!$relationship) { return new Aphront404Response(); } $source = $relationship->newSource(); $query = new PhabricatorSavedQuery(); $action = $request->getURIData('action'); $query_str = $request->getStr('query'); $filter = $request->getStr('filter'); $query->setEngineClassName('PhabricatorSearchApplicationSearchEngine'); $query->setParameter('query', $query_str); $types = $source->getResultPHIDTypes(); $query->setParameter('types', $types); $status_open = PhabricatorSearchRelationship::RELATIONSHIP_OPEN; switch ($filter) { case 'assigned': $query->setParameter('ownerPHIDs', array($viewer->getPHID())); $query->setParameter('statuses', array($status_open)); break; case 'created': $query->setParameter('authorPHIDs', array($viewer->getPHID())); $query->setParameter('statuses', array($status_open)); break; case 'open': $query->setParameter('statuses', array($status_open)); break; } $query->setParameter('excludePHIDs', array($request->getStr('exclude'))); $capabilities = $relationship->getRequiredRelationshipCapabilities(); $results = id(new PhabricatorSearchDocumentQuery())->setViewer($viewer)->requireObjectCapabilities($capabilities)->withSavedQuery($query)->setOffset(0)->setLimit(100)->execute(); $phids = array_fill_keys(mpull($results, 'getPHID'), true); $phids = $this->queryObjectNames($query, $capabilities) + $phids; $phids = array_keys($phids); $handles = $viewer->loadHandles($phids); $data = array(); foreach ($handles as $handle) { $view = new PhabricatorHandleObjectSelectorDataView($handle); $data[] = $view->renderData(); } return id(new AphrontAjaxResponse())->setContent($data); }