Differential D14763 Diff 35717 src/applications/search/engine/PhabricatorApplicationSearchEngine.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/search/engine/PhabricatorApplicationSearchEngine.php
Show First 20 Lines • Show All 1,167 Lines • ▼ Show 20 Lines | foreach ($list->getFields() as $field) { | ||||
->setSearchEngine($this) | ->setSearchEngine($this) | ||||
->setCustomField($field); | ->setCustomField($field); | ||||
} | } | ||||
return $fields; | return $fields; | ||||
} | } | ||||
public function getSearchFieldsForConduit() { | public function getSearchFieldsForConduit() { | ||||
$fields = $this->buildSearchFields(); | $standard_fields = $this->buildSearchFields(); | ||||
$fields = array(); | |||||
foreach ($standard_fields as $field_key => $field) { | |||||
$conduit_key = $field->getConduitKey(); | |||||
if (isset($fields[$conduit_key])) { | |||||
$other = $fields[$conduit_key]; | |||||
$other_key = $other->getKey(); | |||||
throw new Exception( | |||||
pht( | |||||
'SearchFields "%s" (of class "%s") and "%s" (of class "%s") both '. | |||||
'define the same Conduit key ("%s"). Keys must be unique.', | |||||
$field_key, | |||||
get_class($field), | |||||
$other_key, | |||||
get_class($other), | |||||
$conduit_key)); | |||||
} | |||||
$fields[$conduit_key] = $field; | |||||
} | |||||
$viewer = $this->requireViewer(); | |||||
foreach ($fields as $key => $field) { | |||||
$field->setViewer($viewer); | |||||
} | |||||
// These are handled separately for Conduit, so don't show them as | // These are handled separately for Conduit, so don't show them as | ||||
// supported. | // supported. | ||||
unset($fields['ids']); | unset($fields['ids']); | ||||
unset($fields['phids']); | unset($fields['phids']); | ||||
unset($fields['order']); | unset($fields['order']); | ||||
unset($fields['limit']); | unset($fields['limit']); | ||||
return $fields; | return $fields; | ||||
} | } | ||||
public function buildConduitResponse(ConduitAPIRequest $request) { | public function buildConduitResponse(ConduitAPIRequest $request) { | ||||
$viewer = $this->requireViewer(); | $viewer = $this->requireViewer(); | ||||
$fields = $this->buildSearchFields(); | |||||
$query_key = $request->getValue('queryKey'); | $query_key = $request->getValue('queryKey'); | ||||
if (!strlen($query_key)) { | if (!strlen($query_key)) { | ||||
$saved_query = new PhabricatorSavedQuery(); | $saved_query = new PhabricatorSavedQuery(); | ||||
} else if ($this->isBuiltinQuery($query_key)) { | } else if ($this->isBuiltinQuery($query_key)) { | ||||
$saved_query = $this->buildSavedQueryFromBuiltin($query_key); | $saved_query = $this->buildSavedQueryFromBuiltin($query_key); | ||||
} else { | } else { | ||||
$saved_query = id(new PhabricatorSavedQueryQuery()) | $saved_query = id(new PhabricatorSavedQueryQuery()) | ||||
->setViewer($viewer) | ->setViewer($viewer) | ||||
->withQueryKeys(array($query_key)) | ->withQueryKeys(array($query_key)) | ||||
->executeOne(); | ->executeOne(); | ||||
if (!$saved_query) { | if (!$saved_query) { | ||||
throw new Exception( | throw new Exception( | ||||
pht( | pht( | ||||
'Query key "%s" does not correspond to a valid query.', | 'Query key "%s" does not correspond to a valid query.', | ||||
$query_key)); | $query_key)); | ||||
} | } | ||||
} | } | ||||
foreach ($fields as $field) { | |||||
$field->setViewer($viewer); | |||||
} | |||||
$constraints = $request->getValue('constraints', array()); | $constraints = $request->getValue('constraints', array()); | ||||
$fields = $this->getSearchFieldsForConduit(); | |||||
foreach ($fields as $key => $field) { | |||||
if (!$field->getConduitParameterType()) { | |||||
unset($fields[$key]); | |||||
} | |||||
} | |||||
foreach ($fields as $field) { | foreach ($fields as $field) { | ||||
if (!$field->getValueExistsInConduitRequest($constraints)) { | if (!$field->getValueExistsInConduitRequest($constraints)) { | ||||
continue; | continue; | ||||
} | } | ||||
$value = $field->readValueFromConduitRequest($constraints); | $value = $field->readValueFromConduitRequest($constraints); | ||||
$saved_query->setParameter($field->getKey(), $value); | $saved_query->setParameter($field->getKey(), $value); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 176 Lines • Show Last 20 Lines |