@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.

Modernize QuickSearch typeahead

Summary:
Use ClassQuery to find datasources for the quick-search.

Mostly, this allows extensions to add quicksearches.

Test Plan:
using `/typeahead/class/`, tested several search terms that make sense.
Removed the tag interface from a datasource, which removed it from results.

Reviewers: epriestley, amckinley, #blessed_reviewers

Reviewed By: epriestley, #blessed_reviewers

Subscribers: Korvin

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

authored by

Aviv Eyal and committed by
avivey
d8f2630d 1b76250f

+98 -8
+14
src/__phutil_library_map__.php
··· 831 831 'DiffusionQueryCommitsConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionQueryCommitsConduitAPIMethod.php', 832 832 'DiffusionQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionQueryConduitAPIMethod.php', 833 833 'DiffusionQueryPathsConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionQueryPathsConduitAPIMethod.php', 834 + 'DiffusionQuickSearchEngineExtension' => 'applications/diffusion/engineextension/DiffusionQuickSearchEngineExtension.php', 834 835 'DiffusionRawDiffQuery' => 'applications/diffusion/query/rawdiff/DiffusionRawDiffQuery.php', 835 836 'DiffusionRawDiffQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionRawDiffQueryConduitAPIMethod.php', 836 837 'DiffusionReadmeView' => 'applications/diffusion/view/DiffusionReadmeView.php', ··· 3202 3203 'PhabricatorMetronomicTriggerClock' => 'infrastructure/daemon/workers/clock/PhabricatorMetronomicTriggerClock.php', 3203 3204 'PhabricatorModularTransaction' => 'applications/transactions/storage/PhabricatorModularTransaction.php', 3204 3205 'PhabricatorModularTransactionType' => 'applications/transactions/storage/PhabricatorModularTransactionType.php', 3206 + 'PhabricatorMonogramQuickSearchEngineExtension' => 'applications/typeahead/engineextension/PhabricatorMonogramQuickSearchEngineExtension.php', 3205 3207 'PhabricatorMonospacedFontSetting' => 'applications/settings/setting/PhabricatorMonospacedFontSetting.php', 3206 3208 'PhabricatorMonospacedTextareasSetting' => 'applications/settings/setting/PhabricatorMonospacedTextareasSetting.php', 3207 3209 'PhabricatorMotivatorProfileMenuItem' => 'applications/search/menuitem/PhabricatorMotivatorProfileMenuItem.php', ··· 3525 3527 'PhabricatorPeopleProfileTasksController' => 'applications/people/controller/PhabricatorPeopleProfileTasksController.php', 3526 3528 'PhabricatorPeopleProfileViewController' => 'applications/people/controller/PhabricatorPeopleProfileViewController.php', 3527 3529 'PhabricatorPeopleQuery' => 'applications/people/query/PhabricatorPeopleQuery.php', 3530 + 'PhabricatorPeopleQuickSearchEngineExtension' => 'applications/people/engineextension/PhabricatorPeopleQuickSearchEngineExtension.php', 3528 3531 'PhabricatorPeopleRenameController' => 'applications/people/controller/PhabricatorPeopleRenameController.php', 3529 3532 'PhabricatorPeopleRevisionsProfileMenuItem' => 'applications/people/menuitem/PhabricatorPeopleRevisionsProfileMenuItem.php', 3530 3533 'PhabricatorPeopleSearchEngine' => 'applications/people/query/PhabricatorPeopleSearchEngine.php', ··· 3785 3788 'PhabricatorQueryOrderItem' => 'infrastructure/query/order/PhabricatorQueryOrderItem.php', 3786 3789 'PhabricatorQueryOrderTestCase' => 'infrastructure/query/order/__tests__/PhabricatorQueryOrderTestCase.php', 3787 3790 'PhabricatorQueryOrderVector' => 'infrastructure/query/order/PhabricatorQueryOrderVector.php', 3791 + 'PhabricatorQuickSearchApplicationEngineExtension' => 'applications/meta/engineextension/PhabricatorQuickSearchApplicationEngineExtension.php', 3792 + 'PhabricatorQuickSearchEngine' => 'applications/search/engine/PhabricatorQuickSearchEngine.php', 3793 + 'PhabricatorQuickSearchEngineExtension' => 'applications/search/engineextension/PhabricatorQuickSearchEngineExtension.php', 3788 3794 'PhabricatorRateLimitRequestExceptionHandler' => 'aphront/handler/PhabricatorRateLimitRequestExceptionHandler.php', 3789 3795 'PhabricatorRecaptchaConfigOptions' => 'applications/config/option/PhabricatorRecaptchaConfigOptions.php', 3790 3796 'PhabricatorRedirectController' => 'applications/base/controller/PhabricatorRedirectController.php', ··· 4817 4823 'ProjectDefaultViewCapability' => 'applications/project/capability/ProjectDefaultViewCapability.php', 4818 4824 'ProjectEditConduitAPIMethod' => 'applications/project/conduit/ProjectEditConduitAPIMethod.php', 4819 4825 'ProjectQueryConduitAPIMethod' => 'applications/project/conduit/ProjectQueryConduitAPIMethod.php', 4826 + 'ProjectQuickSearchEngineExtension' => 'applications/project/engineextension/ProjectQuickSearchEngineExtension.php', 4820 4827 'ProjectRemarkupRule' => 'applications/project/remarkup/ProjectRemarkupRule.php', 4821 4828 'ProjectRemarkupRuleTestCase' => 'applications/project/remarkup/__tests__/ProjectRemarkupRuleTestCase.php', 4822 4829 'ProjectReplyHandler' => 'applications/project/mail/ProjectReplyHandler.php', ··· 5880 5887 'DiffusionQueryCommitsConduitAPIMethod' => 'DiffusionConduitAPIMethod', 5881 5888 'DiffusionQueryConduitAPIMethod' => 'DiffusionConduitAPIMethod', 5882 5889 'DiffusionQueryPathsConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod', 5890 + 'DiffusionQuickSearchEngineExtension' => 'PhabricatorQuickSearchEngineExtension', 5883 5891 'DiffusionRawDiffQuery' => 'DiffusionFileFutureQuery', 5884 5892 'DiffusionRawDiffQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod', 5885 5893 'DiffusionReadmeView' => 'DiffusionView', ··· 8612 8620 'PhabricatorMetronomicTriggerClock' => 'PhabricatorTriggerClock', 8613 8621 'PhabricatorModularTransaction' => 'PhabricatorApplicationTransaction', 8614 8622 'PhabricatorModularTransactionType' => 'Phobject', 8623 + 'PhabricatorMonogramQuickSearchEngineExtension' => 'PhabricatorQuickSearchEngineExtension', 8615 8624 'PhabricatorMonospacedFontSetting' => 'PhabricatorStringSetting', 8616 8625 'PhabricatorMonospacedTextareasSetting' => 'PhabricatorSelectSetting', 8617 8626 'PhabricatorMotivatorProfileMenuItem' => 'PhabricatorProfileMenuItem', ··· 9004 9013 'PhabricatorPeopleProfileTasksController' => 'PhabricatorPeopleProfileController', 9005 9014 'PhabricatorPeopleProfileViewController' => 'PhabricatorPeopleProfileController', 9006 9015 'PhabricatorPeopleQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 9016 + 'PhabricatorPeopleQuickSearchEngineExtension' => 'PhabricatorQuickSearchEngineExtension', 9007 9017 'PhabricatorPeopleRenameController' => 'PhabricatorPeopleController', 9008 9018 'PhabricatorPeopleRevisionsProfileMenuItem' => 'PhabricatorProfileMenuItem', 9009 9019 'PhabricatorPeopleSearchEngine' => 'PhabricatorApplicationSearchEngine', ··· 9319 9329 'Phobject', 9320 9330 'Iterator', 9321 9331 ), 9332 + 'PhabricatorQuickSearchApplicationEngineExtension' => 'PhabricatorQuickSearchEngineExtension', 9333 + 'PhabricatorQuickSearchEngine' => 'Phobject', 9334 + 'PhabricatorQuickSearchEngineExtension' => 'Phobject', 9322 9335 'PhabricatorRateLimitRequestExceptionHandler' => 'PhabricatorRequestExceptionHandler', 9323 9336 'PhabricatorRecaptchaConfigOptions' => 'PhabricatorApplicationConfigOptions', 9324 9337 'PhabricatorRedirectController' => 'PhabricatorController', ··· 10605 10618 'ProjectDefaultViewCapability' => 'PhabricatorPolicyCapability', 10606 10619 'ProjectEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod', 10607 10620 'ProjectQueryConduitAPIMethod' => 'ProjectConduitAPIMethod', 10621 + 'ProjectQuickSearchEngineExtension' => 'PhabricatorQuickSearchEngineExtension', 10608 10622 'ProjectRemarkupRule' => 'PhabricatorObjectRemarkupRule', 10609 10623 'ProjectRemarkupRuleTestCase' => 'PhabricatorTestCase', 10610 10624 'ProjectReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
+12
src/applications/diffusion/engineextension/DiffusionQuickSearchEngineExtension.php
··· 1 + <?php 2 + 3 + final class DiffusionQuickSearchEngineExtension 4 + extends PhabricatorQuickSearchEngineExtension { 5 + 6 + public function newQuickSearchDatasources() { 7 + return array( 8 + new DiffusionRepositoryDatasource(), 9 + new DiffusionSymbolDatasource(), 10 + ); 11 + } 12 + }
+11
src/applications/meta/engineextension/PhabricatorQuickSearchApplicationEngineExtension.php
··· 1 + <?php 2 + 3 + final class PhabricatorQuickSearchApplicationEngineExtension 4 + extends PhabricatorQuickSearchEngineExtension { 5 + 6 + public function newQuickSearchDatasources() { 7 + return array( 8 + new PhabricatorApplicationDatasource(), 9 + ); 10 + } 11 + }
+11
src/applications/people/engineextension/PhabricatorPeopleQuickSearchEngineExtension.php
··· 1 + <?php 2 + 3 + final class PhabricatorPeopleQuickSearchEngineExtension 4 + extends PhabricatorQuickSearchEngineExtension { 5 + 6 + public function newQuickSearchDatasources() { 7 + return array( 8 + new PhabricatorPeopleDatasource(), 9 + ); 10 + } 11 + }
+11
src/applications/project/engineextension/ProjectQuickSearchEngineExtension.php
··· 1 + <?php 2 + 3 + final class ProjectQuickSearchEngineExtension 4 + extends PhabricatorQuickSearchEngineExtension { 5 + 6 + public function newQuickSearchDatasources() { 7 + return array( 8 + new PhabricatorProjectDatasource(), 9 + ); 10 + } 11 + }
+8
src/applications/search/engine/PhabricatorQuickSearchEngine.php
··· 1 + <?php 2 + 3 + final class PhabricatorQuickSearchEngine extends Phobject { 4 + 5 + public function getAllDatasources() { 6 + return PhabricatorQuickSearchEngineExtension::getAllDatasources(); 7 + } 8 + }
+18
src/applications/search/engineextension/PhabricatorQuickSearchEngineExtension.php
··· 1 + <?php 2 + 3 + abstract class PhabricatorQuickSearchEngineExtension extends Phobject { 4 + 5 + abstract public function newQuickSearchDatasources(); 6 + 7 + final public static function getAllDatasources() { 8 + $extensions = id(new PhutilClassMapQuery()) 9 + ->setAncestorClass(__CLASS__) 10 + ->execute(); 11 + 12 + $datasources = array(); 13 + foreach ($extensions as $extension) { 14 + $datasources[] = $extension->newQuickSearchDatasources(); 15 + } 16 + return array_mergev($datasources); 17 + } 18 + }
+2 -8
src/applications/search/typeahead/PhabricatorSearchDatasource.php
··· 16 16 } 17 17 18 18 public function getComponentDatasources() { 19 - $sources = array( 20 - new PhabricatorPeopleDatasource(), 21 - new PhabricatorProjectDatasource(), 22 - new PhabricatorApplicationDatasource(), 23 - new PhabricatorTypeaheadMonogramDatasource(), 24 - new DiffusionRepositoryDatasource(), 25 - new DiffusionSymbolDatasource(), 26 - ); 19 + $sources = id(new PhabricatorQuickSearchEngine()) 20 + ->getAllDatasources(); 27 21 28 22 // These results are always rendered in the full browse display mode, so 29 23 // set the browse flag on all component sources.
+11
src/applications/typeahead/engineextension/PhabricatorMonogramQuickSearchEngineExtension.php
··· 1 + <?php 2 + 3 + final class PhabricatorMonogramQuickSearchEngineExtension 4 + extends PhabricatorQuickSearchEngineExtension { 5 + 6 + public function newQuickSearchDatasources() { 7 + return array( 8 + new PhabricatorTypeaheadMonogramDatasource(), 9 + ); 10 + } 11 + }