@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Support PhabricatorSpacesInterface in ApplicationSearch UI

Summary: Ref T8441. Does what it says, provided other conditions (like using the new SearchField stuff) are fulfilled.

Test Plan:
{F473836}

{F473837}

Reviewers: btrahan

Reviewed By: btrahan

Subscribers: epriestley

Maniphest Tasks: T8441

Differential Revision: https://secure.phabricator.com/D13171

+127 -1
+4
src/__phutil_library_map__.php
··· 2525 2525 'PhabricatorSearchRelationship' => 'applications/search/constants/PhabricatorSearchRelationship.php', 2526 2526 'PhabricatorSearchResultView' => 'applications/search/view/PhabricatorSearchResultView.php', 2527 2527 'PhabricatorSearchSelectController' => 'applications/search/controller/PhabricatorSearchSelectController.php', 2528 + 'PhabricatorSearchSpacesField' => 'applications/search/field/PhabricatorSearchSpacesField.php', 2528 2529 'PhabricatorSearchStringListField' => 'applications/search/field/PhabricatorSearchStringListField.php', 2529 2530 'PhabricatorSearchTokenizerField' => 'applications/search/field/PhabricatorSearchTokenizerField.php', 2530 2531 'PhabricatorSearchUsersField' => 'applications/search/field/PhabricatorSearchUsersField.php', ··· 2578 2579 'PhabricatorSpacesInterface' => 'applications/spaces/interface/PhabricatorSpacesInterface.php', 2579 2580 'PhabricatorSpacesListController' => 'applications/spaces/controller/PhabricatorSpacesListController.php', 2580 2581 'PhabricatorSpacesNamespace' => 'applications/spaces/storage/PhabricatorSpacesNamespace.php', 2582 + 'PhabricatorSpacesNamespaceDatasource' => 'applications/spaces/typeahead/PhabricatorSpacesNamespaceDatasource.php', 2581 2583 'PhabricatorSpacesNamespaceEditor' => 'applications/spaces/editor/PhabricatorSpacesNamespaceEditor.php', 2582 2584 'PhabricatorSpacesNamespacePHIDType' => 'applications/spaces/phid/PhabricatorSpacesNamespacePHIDType.php', 2583 2585 'PhabricatorSpacesNamespaceQuery' => 'applications/spaces/query/PhabricatorSpacesNamespaceQuery.php', ··· 6020 6022 'PhabricatorSearchPreferencesSettingsPanel' => 'PhabricatorSettingsPanel', 6021 6023 'PhabricatorSearchResultView' => 'AphrontView', 6022 6024 'PhabricatorSearchSelectController' => 'PhabricatorSearchBaseController', 6025 + 'PhabricatorSearchSpacesField' => 'PhabricatorSearchTokenizerField', 6023 6026 'PhabricatorSearchStringListField' => 'PhabricatorSearchField', 6024 6027 'PhabricatorSearchTokenizerField' => 'PhabricatorSearchField', 6025 6028 'PhabricatorSearchUsersField' => 'PhabricatorSearchTokenizerField', ··· 6083 6086 'PhabricatorApplicationTransactionInterface', 6084 6087 'PhabricatorDestructibleInterface', 6085 6088 ), 6089 + 'PhabricatorSpacesNamespaceDatasource' => 'PhabricatorTypeaheadDatasource', 6086 6090 'PhabricatorSpacesNamespaceEditor' => 'PhabricatorApplicationTransactionEditor', 6087 6091 'PhabricatorSpacesNamespacePHIDType' => 'PhabricatorPHIDType', 6088 6092 'PhabricatorSpacesNamespaceQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
+4
src/applications/paste/query/PhabricatorPasteSearchEngine.php
··· 11 11 return 'PhabricatorPasteApplication'; 12 12 } 13 13 14 + public function newResultObject() { 15 + return new PhabricatorPaste(); 16 + } 17 + 14 18 public function buildQueryFromParameters(array $map) { 15 19 $query = id(new PhabricatorPasteQuery()) 16 20 ->needContent(true);
+36 -1
src/applications/search/engine/PhabricatorApplicationSearchEngine.php
··· 26 26 const CONTEXT_LIST = 'list'; 27 27 const CONTEXT_PANEL = 'panel'; 28 28 29 + public function newResultObject() { 30 + return null; 31 + } 32 + 29 33 public function setViewer(PhabricatorUser $viewer) { 30 34 $this->viewer = $viewer; 31 35 return $this; ··· 102 106 $parameters[$field->getKey()] = $value; 103 107 } 104 108 105 - return $this->buildQueryFromParameters($parameters); 109 + $query = $this->buildQueryFromParameters($parameters); 110 + 111 + $object = $this->newResultObject(); 112 + if (!$object) { 113 + return $query; 114 + } 115 + 116 + if ($object instanceof PhabricatorSpacesInterface) { 117 + if (!empty($parameters['spacePHIDs'])) { 118 + $query->withSpacePHIDs($parameters['spacePHIDs']); 119 + } 120 + } 121 + 122 + return $query; 106 123 } 107 124 108 125 protected function buildQueryFromParameters(array $parameters) { ··· 144 161 145 162 foreach ($this->buildCustomSearchFields() as $field) { 146 163 $fields[] = $field; 164 + } 165 + 166 + $object = $this->newResultObject(); 167 + if (!$object) { 168 + return $fields; 169 + } 170 + 171 + if ($object instanceof PhabricatorSpacesInterface) { 172 + if (PhabricatorSpacesNamespaceQuery::getSpacesExist()) { 173 + $fields[] = id(new PhabricatorSearchSpacesField()) 174 + ->setKey('spacePHIDs') 175 + ->setAliases(array('space', 'spaces')) 176 + ->setLabel(pht('Spaces')); 177 + } 147 178 } 148 179 149 180 return $fields; ··· 893 924 * @task appsearch 894 925 */ 895 926 public function getCustomFieldObject() { 927 + $object = $this->newResultObject(); 928 + if ($object instanceof PhabricatorCustomFieldInterface) { 929 + return $object; 930 + } 896 931 return null; 897 932 } 898 933
+43
src/applications/search/field/PhabricatorSearchSpacesField.php
··· 1 + <?php 2 + 3 + final class PhabricatorSearchSpacesField 4 + extends PhabricatorSearchTokenizerField { 5 + 6 + protected function getDefaultValue() { 7 + return array(); 8 + } 9 + 10 + protected function newDatasource() { 11 + return new PhabricatorSpacesNamespaceDatasource(); 12 + } 13 + 14 + protected function getValueFromRequest(AphrontRequest $request, $key) { 15 + $viewer = $this->getViewer(); 16 + $list = $this->getListFromRequest($request, $key); 17 + 18 + $type = new PhabricatorSpacesNamespacePHIDType(); 19 + $phids = array(); 20 + $names = array(); 21 + foreach ($list as $item) { 22 + if ($type->canLoadNamedObject($item)) { 23 + $names[] = $item; 24 + } else { 25 + $phids[] = $item; 26 + } 27 + } 28 + 29 + if ($names) { 30 + $spaces = id(new PhabricatorObjectQuery()) 31 + ->setViewer($viewer) 32 + ->withNames($names) 33 + ->execute(); 34 + foreach (mpull($spaces, 'getPHID') as $phid) { 35 + $phids[] = $phid; 36 + } 37 + $phids = array_unique($phids); 38 + } 39 + 40 + return $phids; 41 + } 42 + 43 + }
+4
src/applications/spaces/phid/PhabricatorSpacesNamespacePHIDType.php
··· 9 9 return pht('Space'); 10 10 } 11 11 12 + public function getPHIDTypeApplicationClass() { 13 + return 'PhabricatorSpacesApplication'; 14 + } 15 + 12 16 public function newObject() { 13 17 return new PhabricatorSpacesNamespace(); 14 18 }
+4
src/applications/spaces/query/PhabricatorSpacesNamespaceQuery.php
··· 86 86 )); 87 87 } 88 88 89 + public static function getSpacesExist() { 90 + return (bool)self::getAllSpaces(); 91 + } 92 + 89 93 public static function getAllSpaces() { 90 94 $cache = PhabricatorCaches::getRequestCache(); 91 95 $cache_key = self::KEY_ALL;
+32
src/applications/spaces/typeahead/PhabricatorSpacesNamespaceDatasource.php
··· 1 + <?php 2 + 3 + final class PhabricatorSpacesNamespaceDatasource 4 + extends PhabricatorTypeaheadDatasource { 5 + 6 + public function getBrowseTitle() { 7 + return pht('Browse Spaces'); 8 + } 9 + 10 + public function getPlaceholderText() { 11 + return pht('Type a space name...'); 12 + } 13 + 14 + public function getDatasourceApplicationClass() { 15 + return 'PhabricatorSpacesApplication'; 16 + } 17 + 18 + public function loadResults() { 19 + $query = id(new PhabricatorSpacesNamespaceQuery()); 20 + 21 + $spaces = $this->executeQuery($query); 22 + $results = array(); 23 + foreach ($spaces as $space) { 24 + $results[] = id(new PhabricatorTypeaheadResult()) 25 + ->setName($space->getNamespaceName()) 26 + ->setPHID($space->getPHID()); 27 + } 28 + 29 + return $this->filterResultsAgainstTokens($results); 30 + } 31 + 32 + }