Page MenuHomePhabricator

D13171.id31844.diff
No OneTemporary

D13171.id31844.diff

diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -2525,6 +2525,7 @@
'PhabricatorSearchRelationship' => 'applications/search/constants/PhabricatorSearchRelationship.php',
'PhabricatorSearchResultView' => 'applications/search/view/PhabricatorSearchResultView.php',
'PhabricatorSearchSelectController' => 'applications/search/controller/PhabricatorSearchSelectController.php',
+ 'PhabricatorSearchSpacesField' => 'applications/search/field/PhabricatorSearchSpacesField.php',
'PhabricatorSearchStringListField' => 'applications/search/field/PhabricatorSearchStringListField.php',
'PhabricatorSearchTokenizerField' => 'applications/search/field/PhabricatorSearchTokenizerField.php',
'PhabricatorSearchUsersField' => 'applications/search/field/PhabricatorSearchUsersField.php',
@@ -2578,6 +2579,7 @@
'PhabricatorSpacesInterface' => 'applications/spaces/interface/PhabricatorSpacesInterface.php',
'PhabricatorSpacesListController' => 'applications/spaces/controller/PhabricatorSpacesListController.php',
'PhabricatorSpacesNamespace' => 'applications/spaces/storage/PhabricatorSpacesNamespace.php',
+ 'PhabricatorSpacesNamespaceDatasource' => 'applications/spaces/typeahead/PhabricatorSpacesNamespaceDatasource.php',
'PhabricatorSpacesNamespaceEditor' => 'applications/spaces/editor/PhabricatorSpacesNamespaceEditor.php',
'PhabricatorSpacesNamespacePHIDType' => 'applications/spaces/phid/PhabricatorSpacesNamespacePHIDType.php',
'PhabricatorSpacesNamespaceQuery' => 'applications/spaces/query/PhabricatorSpacesNamespaceQuery.php',
@@ -6020,6 +6022,7 @@
'PhabricatorSearchPreferencesSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorSearchResultView' => 'AphrontView',
'PhabricatorSearchSelectController' => 'PhabricatorSearchBaseController',
+ 'PhabricatorSearchSpacesField' => 'PhabricatorSearchTokenizerField',
'PhabricatorSearchStringListField' => 'PhabricatorSearchField',
'PhabricatorSearchTokenizerField' => 'PhabricatorSearchField',
'PhabricatorSearchUsersField' => 'PhabricatorSearchTokenizerField',
@@ -6083,6 +6086,7 @@
'PhabricatorApplicationTransactionInterface',
'PhabricatorDestructibleInterface',
),
+ 'PhabricatorSpacesNamespaceDatasource' => 'PhabricatorTypeaheadDatasource',
'PhabricatorSpacesNamespaceEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorSpacesNamespacePHIDType' => 'PhabricatorPHIDType',
'PhabricatorSpacesNamespaceQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
diff --git a/src/applications/paste/query/PhabricatorPasteSearchEngine.php b/src/applications/paste/query/PhabricatorPasteSearchEngine.php
--- a/src/applications/paste/query/PhabricatorPasteSearchEngine.php
+++ b/src/applications/paste/query/PhabricatorPasteSearchEngine.php
@@ -11,6 +11,10 @@
return 'PhabricatorPasteApplication';
}
+ public function newResultObject() {
+ return new PhabricatorPaste();
+ }
+
public function buildQueryFromParameters(array $map) {
$query = id(new PhabricatorPasteQuery())
->needContent(true);
diff --git a/src/applications/search/engine/PhabricatorApplicationSearchEngine.php b/src/applications/search/engine/PhabricatorApplicationSearchEngine.php
--- a/src/applications/search/engine/PhabricatorApplicationSearchEngine.php
+++ b/src/applications/search/engine/PhabricatorApplicationSearchEngine.php
@@ -26,6 +26,10 @@
const CONTEXT_LIST = 'list';
const CONTEXT_PANEL = 'panel';
+ public function newResultObject() {
+ return null;
+ }
+
public function setViewer(PhabricatorUser $viewer) {
$this->viewer = $viewer;
return $this;
@@ -102,7 +106,20 @@
$parameters[$field->getKey()] = $value;
}
- return $this->buildQueryFromParameters($parameters);
+ $query = $this->buildQueryFromParameters($parameters);
+
+ $object = $this->newResultObject();
+ if (!$object) {
+ return $query;
+ }
+
+ if ($object instanceof PhabricatorSpacesInterface) {
+ if (!empty($parameters['spacePHIDs'])) {
+ $query->withSpacePHIDs($parameters['spacePHIDs']);
+ }
+ }
+
+ return $query;
}
protected function buildQueryFromParameters(array $parameters) {
@@ -146,6 +163,20 @@
$fields[] = $field;
}
+ $object = $this->newResultObject();
+ if (!$object) {
+ return $fields;
+ }
+
+ if ($object instanceof PhabricatorSpacesInterface) {
+ if (PhabricatorSpacesNamespaceQuery::getSpacesExist()) {
+ $fields[] = id(new PhabricatorSearchSpacesField())
+ ->setKey('spacePHIDs')
+ ->setAliases(array('space', 'spaces'))
+ ->setLabel(pht('Spaces'));
+ }
+ }
+
return $fields;
}
@@ -893,6 +924,10 @@
* @task appsearch
*/
public function getCustomFieldObject() {
+ $object = $this->newResultObject();
+ if ($object instanceof PhabricatorCustomFieldInterface) {
+ return $object;
+ }
return null;
}
diff --git a/src/applications/search/field/PhabricatorSearchSpacesField.php b/src/applications/search/field/PhabricatorSearchSpacesField.php
new file mode 100644
--- /dev/null
+++ b/src/applications/search/field/PhabricatorSearchSpacesField.php
@@ -0,0 +1,43 @@
+<?php
+
+final class PhabricatorSearchSpacesField
+ extends PhabricatorSearchTokenizerField {
+
+ protected function getDefaultValue() {
+ return array();
+ }
+
+ protected function newDatasource() {
+ return new PhabricatorSpacesNamespaceDatasource();
+ }
+
+ protected function getValueFromRequest(AphrontRequest $request, $key) {
+ $viewer = $this->getViewer();
+ $list = $this->getListFromRequest($request, $key);
+
+ $type = new PhabricatorSpacesNamespacePHIDType();
+ $phids = array();
+ $names = array();
+ foreach ($list as $item) {
+ if ($type->canLoadNamedObject($item)) {
+ $names[] = $item;
+ } else {
+ $phids[] = $item;
+ }
+ }
+
+ if ($names) {
+ $spaces = id(new PhabricatorObjectQuery())
+ ->setViewer($viewer)
+ ->withNames($names)
+ ->execute();
+ foreach (mpull($spaces, 'getPHID') as $phid) {
+ $phids[] = $phid;
+ }
+ $phids = array_unique($phids);
+ }
+
+ return $phids;
+ }
+
+}
diff --git a/src/applications/spaces/phid/PhabricatorSpacesNamespacePHIDType.php b/src/applications/spaces/phid/PhabricatorSpacesNamespacePHIDType.php
--- a/src/applications/spaces/phid/PhabricatorSpacesNamespacePHIDType.php
+++ b/src/applications/spaces/phid/PhabricatorSpacesNamespacePHIDType.php
@@ -9,6 +9,10 @@
return pht('Space');
}
+ public function getPHIDTypeApplicationClass() {
+ return 'PhabricatorSpacesApplication';
+ }
+
public function newObject() {
return new PhabricatorSpacesNamespace();
}
diff --git a/src/applications/spaces/query/PhabricatorSpacesNamespaceQuery.php b/src/applications/spaces/query/PhabricatorSpacesNamespaceQuery.php
--- a/src/applications/spaces/query/PhabricatorSpacesNamespaceQuery.php
+++ b/src/applications/spaces/query/PhabricatorSpacesNamespaceQuery.php
@@ -86,6 +86,10 @@
));
}
+ public static function getSpacesExist() {
+ return (bool)self::getAllSpaces();
+ }
+
public static function getAllSpaces() {
$cache = PhabricatorCaches::getRequestCache();
$cache_key = self::KEY_ALL;
diff --git a/src/applications/spaces/typeahead/PhabricatorSpacesNamespaceDatasource.php b/src/applications/spaces/typeahead/PhabricatorSpacesNamespaceDatasource.php
new file mode 100644
--- /dev/null
+++ b/src/applications/spaces/typeahead/PhabricatorSpacesNamespaceDatasource.php
@@ -0,0 +1,32 @@
+<?php
+
+final class PhabricatorSpacesNamespaceDatasource
+ extends PhabricatorTypeaheadDatasource {
+
+ public function getBrowseTitle() {
+ return pht('Browse Spaces');
+ }
+
+ public function getPlaceholderText() {
+ return pht('Type a space name...');
+ }
+
+ public function getDatasourceApplicationClass() {
+ return 'PhabricatorSpacesApplication';
+ }
+
+ public function loadResults() {
+ $query = id(new PhabricatorSpacesNamespaceQuery());
+
+ $spaces = $this->executeQuery($query);
+ $results = array();
+ foreach ($spaces as $space) {
+ $results[] = id(new PhabricatorTypeaheadResult())
+ ->setName($space->getNamespaceName())
+ ->setPHID($space->getPHID());
+ }
+
+ return $this->filterResultsAgainstTokens($results);
+ }
+
+}

File Metadata

Mime Type
text/plain
Expires
Fri, Mar 21, 2:53 PM (6 d, 7 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7695853
Default Alt Text
D13171.id31844.diff (8 KB)

Event Timeline