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

Policy - filter app engines where the user can't see the application from panel editing

Summary: Fixes T7118. This does the basic "filter the list" thing, though it ends up being a little manual since I guess this hasn't come up before? There is also potential weird behavior if the user was using an app and lost access to it - they will have nothing selected on edit - but I think this is actually correct behavior in this circumstance.

Test Plan:
used a user who couldn't get access to the "quick create" apps and noted that the dropdown list on dashboard panel create was missing the expected engines

ran `arc unit --everything` to verify abstract method implemented everywhere

Reviewers: epriestley

Reviewed By: epriestley

Subscribers: Korvin, epriestley

Maniphest Tasks: T7118

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

+97 -44
+1 -1
src/applications/almanac/query/AlmanacDeviceSearchEngine.php
··· 7 7 return pht('Almanac Devices'); 8 8 } 9 9 10 - protected function getApplicationClassName() { 10 + public function getApplicationClassName() { 11 11 return 'PhabricatorAlmanacApplication'; 12 12 } 13 13
+1 -1
src/applications/almanac/query/AlmanacNetworkSearchEngine.php
··· 7 7 return pht('Almanac Networks'); 8 8 } 9 9 10 - protected function getApplicationClassName() { 10 + public function getApplicationClassName() { 11 11 return 'PhabricatorAlmanacApplication'; 12 12 } 13 13
+1 -1
src/applications/almanac/query/AlmanacServiceSearchEngine.php
··· 7 7 return pht('Almanac Services'); 8 8 } 9 9 10 - protected function getApplicationClassName() { 10 + public function getApplicationClassName() { 11 11 return 'PhabricatorAlmanacApplication'; 12 12 } 13 13
+4
src/applications/audit/query/PhabricatorCommitSearchEngine.php
··· 7 7 return pht('Commits'); 8 8 } 9 9 10 + public function getApplicationClassName() { 11 + return 'PhabricatorDiffusionApplication'; 12 + } 13 + 10 14 public function buildSavedQueryFromRequest(AphrontRequest $request) { 11 15 $saved = new PhabricatorSavedQuery(); 12 16
+1 -1
src/applications/calendar/query/PhabricatorCalendarEventSearchEngine.php
··· 7 7 return pht('Calendar Events'); 8 8 } 9 9 10 - protected function getApplicationClassName() { 10 + public function getApplicationClassName() { 11 11 return 'PhabricatorCalendarApplication'; 12 12 } 13 13
+1 -1
src/applications/conduit/query/PhabricatorConduitSearchEngine.php
··· 7 7 return pht('Conduit Methods'); 8 8 } 9 9 10 - protected function getApplicationClassName() { 10 + public function getApplicationClassName() { 11 11 return 'PhabricatorConduitApplication'; 12 12 } 13 13
+1 -1
src/applications/countdown/query/PhabricatorCountdownSearchEngine.php
··· 7 7 return pht('Countdowns'); 8 8 } 9 9 10 - protected function getApplicationClassName() { 10 + public function getApplicationClassName() { 11 11 return 'PhabricatorCountdownApplication'; 12 12 } 13 13
+11
src/applications/dashboard/customfield/PhabricatorDashboardPanelSearchApplicationCustomField.php
··· 16 16 $engines = id(new PhutilSymbolLoader()) 17 17 ->setAncestorClass('PhabricatorApplicationSearchEngine') 18 18 ->loadObjects(); 19 + $all_apps = id(new PhabricatorApplicationQuery()) 20 + ->setViewer($this->getViewer()) 21 + ->withUnlisted(false) 22 + ->withInstalled(true) 23 + ->execute(); 24 + foreach ($engines as $index => $engine) { 25 + if (!isset($all_apps[$engine->getApplicationClassName()])) { 26 + unset($engines[$index]); 27 + continue; 28 + } 29 + } 19 30 20 31 $options = array(); 21 32
+1 -1
src/applications/dashboard/query/PhabricatorDashboardPanelSearchEngine.php
··· 7 7 return pht('Dashboard Panels'); 8 8 } 9 9 10 - protected function getApplicationClassName() { 10 + public function getApplicationClassName() { 11 11 return 'PhabricatorDashboardApplication'; 12 12 } 13 13
+1 -1
src/applications/dashboard/query/PhabricatorDashboardSearchEngine.php
··· 7 7 return pht('Dashboards'); 8 8 } 9 9 10 - protected function getApplicationClassName() { 10 + public function getApplicationClassName() { 11 11 return 'PhabricatorDashboardApplication'; 12 12 } 13 13
+1 -1
src/applications/differential/query/DifferentialRevisionSearchEngine.php
··· 7 7 return pht('Differential Revisions'); 8 8 } 9 9 10 - protected function getApplicationClassName() { 10 + public function getApplicationClassName() { 11 11 return 'PhabricatorDifferentialApplication'; 12 12 } 13 13
+1 -1
src/applications/diviner/query/DivinerAtomSearchEngine.php
··· 6 6 return pht('Documentation Atoms'); 7 7 } 8 8 9 - protected function getApplicationClassName() { 9 + public function getApplicationClassName() { 10 10 return 'PhabricatorDivinerApplication'; 11 11 } 12 12
+1 -1
src/applications/drydock/query/DrydockBlueprintSearchEngine.php
··· 7 7 return pht('Drydock Blueprints'); 8 8 } 9 9 10 - protected function getApplicationClassName() { 10 + public function getApplicationClassName() { 11 11 return 'PhabricatorDrydockApplication'; 12 12 } 13 13
+1 -1
src/applications/drydock/query/DrydockLeaseSearchEngine.php
··· 7 7 return pht('Drydock Leases'); 8 8 } 9 9 10 - protected function getApplicationClassName() { 10 + public function getApplicationClassName() { 11 11 return 'PhabricatorDrydockApplication'; 12 12 } 13 13
+1 -1
src/applications/drydock/query/DrydockLogSearchEngine.php
··· 6 6 return pht('Drydock Logs'); 7 7 } 8 8 9 - protected function getApplicationClassName() { 9 + public function getApplicationClassName() { 10 10 return 'PhabricatorDrydockApplication'; 11 11 } 12 12
+1 -1
src/applications/drydock/query/DrydockResourceSearchEngine.php
··· 7 7 return pht('Drydock Resources'); 8 8 } 9 9 10 - protected function getApplicationClassName() { 10 + public function getApplicationClassName() { 11 11 return 'PhabricatorDrydockApplication'; 12 12 } 13 13
+4
src/applications/feed/query/PhabricatorFeedSearchEngine.php
··· 7 7 return pht('Feed Stories'); 8 8 } 9 9 10 + public function getApplicationClassName() { 11 + return 'PhabricatorFeedApplication'; 12 + } 13 + 10 14 public function buildSavedQueryFromRequest(AphrontRequest $request) { 11 15 $saved = new PhabricatorSavedQuery(); 12 16
+1 -1
src/applications/files/query/PhabricatorFileSearchEngine.php
··· 7 7 return pht('Files'); 8 8 } 9 9 10 - protected function getApplicationClassName() { 10 + public function getApplicationClassName() { 11 11 return 'PhabricatorFilesApplication'; 12 12 } 13 13
+1 -1
src/applications/flag/query/PhabricatorFlagSearchEngine.php
··· 7 7 return pht('Flags'); 8 8 } 9 9 10 - protected function getApplicationClassName() { 10 + public function getApplicationClassName() { 11 11 return 'PhabricatorFlagsApplication'; 12 12 } 13 13
+1 -1
src/applications/fund/query/FundBackerSearchEngine.php
··· 18 18 return pht('Fund Backers'); 19 19 } 20 20 21 - protected function getApplicationClassName() { 21 + public function getApplicationClassName() { 22 22 return 'PhabricatorFundApplication'; 23 23 } 24 24
+1 -1
src/applications/fund/query/FundInitiativeSearchEngine.php
··· 7 7 return pht('Fund Initiatives'); 8 8 } 9 9 10 - protected function getApplicationClassName() { 10 + public function getApplicationClassName() { 11 11 return 'PhabricatorFundApplication'; 12 12 } 13 13
+1 -1
src/applications/harbormaster/query/HarbormasterBuildPlanSearchEngine.php
··· 7 7 return pht('Harbormaster Build Plans'); 8 8 } 9 9 10 - protected function getApplicationClassName() { 10 + public function getApplicationClassName() { 11 11 return 'PhabricatorHarbormasterApplication'; 12 12 } 13 13
+1 -1
src/applications/harbormaster/query/HarbormasterBuildableSearchEngine.php
··· 7 7 return pht('Harbormaster Buildables'); 8 8 } 9 9 10 - protected function getApplicationClassName() { 10 + public function getApplicationClassName() { 11 11 return 'PhabricatorHarbormasterApplication'; 12 12 } 13 13
+1 -1
src/applications/herald/query/HeraldRuleSearchEngine.php
··· 6 6 return pht('Herald Rules'); 7 7 } 8 8 9 - protected function getApplicationClassName() { 9 + public function getApplicationClassName() { 10 10 return 'PhabricatorHeraldApplication'; 11 11 } 12 12
+1 -1
src/applications/herald/query/HeraldTranscriptSearchEngine.php
··· 7 7 return pht('Herald Transcripts'); 8 8 } 9 9 10 - protected function getApplicationClassName() { 10 + public function getApplicationClassName() { 11 11 return 'PhabricatorHeraldApplication'; 12 12 } 13 13
+1 -1
src/applications/legalpad/query/LegalpadDocumentSearchEngine.php
··· 7 7 return pht('Legalpad Documents'); 8 8 } 9 9 10 - protected function getApplicationClassName() { 10 + public function getApplicationClassName() { 11 11 return 'PhabricatorLegalpadApplication'; 12 12 } 13 13
+1 -1
src/applications/legalpad/query/LegalpadDocumentSignatureSearchEngine.php
··· 9 9 return pht('Legalpad Signatures'); 10 10 } 11 11 12 - protected function getApplicationClassName() { 12 + public function getApplicationClassName() { 13 13 return 'PhabricatorLegalpadApplication'; 14 14 } 15 15
+1 -1
src/applications/macro/query/PhabricatorMacroSearchEngine.php
··· 7 7 return pht('Macros'); 8 8 } 9 9 10 - protected function getApplicationClassName() { 10 + public function getApplicationClassName() { 11 11 return 'PhabricatorMacroApplication'; 12 12 } 13 13
+1 -1
src/applications/mailinglists/query/PhabricatorMailingListSearchEngine.php
··· 7 7 return pht('Mailing Lists'); 8 8 } 9 9 10 - protected function getApplicationClassName() { 10 + public function getApplicationClassName() { 11 11 return 'PhabricatorMailingListsApplication'; 12 12 } 13 13
+1 -1
src/applications/maniphest/query/ManiphestTaskSearchEngine.php
··· 34 34 return pht('Tasks'); 35 35 } 36 36 37 - protected function getApplicationClassName() { 37 + public function getApplicationClassName() { 38 38 return 'PhabricatorManiphestApplication'; 39 39 } 40 40
+1 -1
src/applications/meta/query/PhabricatorAppSearchEngine.php
··· 7 7 return pht('Applications'); 8 8 } 9 9 10 - protected function getApplicationClassName() { 10 + public function getApplicationClassName() { 11 11 return 'PhabricatorApplicationsApplication'; 12 12 } 13 13
+1 -1
src/applications/notification/query/PhabricatorNotificationSearchEngine.php
··· 7 7 return pht('Notifications'); 8 8 } 9 9 10 - protected function getApplicationClassName() { 10 + public function getApplicationClassName() { 11 11 return 'PhabricatorNotificationsApplication'; 12 12 } 13 13
+1 -1
src/applications/oauthserver/query/PhabricatorOAuthServerClientSearchEngine.php
··· 7 7 return pht('OAuth Clients'); 8 8 } 9 9 10 - protected function getApplicationClassName() { 10 + public function getApplicationClassName() { 11 11 return 'PhabricatorOAuthServerApplication'; 12 12 } 13 13
+1 -1
src/applications/passphrase/query/PassphraseCredentialSearchEngine.php
··· 7 7 return pht('Passphrase Credentials'); 8 8 } 9 9 10 - protected function getApplicationClassName() { 10 + public function getApplicationClassName() { 11 11 return 'PhabricatorPassphraseApplication'; 12 12 } 13 13
+4
src/applications/paste/query/PhabricatorPasteSearchEngine.php
··· 7 7 return pht('Pastes'); 8 8 } 9 9 10 + public function getApplicationClassName() { 11 + return 'PhabricatorPasteApplication'; 12 + } 13 + 10 14 public function buildSavedQueryFromRequest(AphrontRequest $request) { 11 15 $saved = new PhabricatorSavedQuery(); 12 16 $saved->setParameter(
+1 -1
src/applications/people/query/PhabricatorPeopleLogSearchEngine.php
··· 7 7 return pht('Account Activity'); 8 8 } 9 9 10 - protected function getApplicationClassName() { 10 + public function getApplicationClassName() { 11 11 return 'PhabricatorPeopleApplication'; 12 12 } 13 13
+1 -1
src/applications/people/query/PhabricatorPeopleSearchEngine.php
··· 7 7 return pht('Users'); 8 8 } 9 9 10 - protected function getApplicationClassName() { 10 + public function getApplicationClassName() { 11 11 return 'PhabricatorPeopleApplication'; 12 12 } 13 13
+1 -1
src/applications/pholio/query/PholioMockSearchEngine.php
··· 6 6 return pht('Pholio Mocks'); 7 7 } 8 8 9 - protected function getApplicationClassName() { 9 + public function getApplicationClassName() { 10 10 return 'PhabricatorPholioApplication'; 11 11 } 12 12
+4
src/applications/phortune/query/PhortuneCartSearchEngine.php
··· 38 38 return pht('Phortune Orders'); 39 39 } 40 40 41 + public function getApplicationClassName() { 42 + return 'PhabricatorPhortuneApplication'; 43 + } 44 + 41 45 public function buildSavedQueryFromRequest(AphrontRequest $request) { 42 46 $saved = new PhabricatorSavedQuery(); 43 47
+4
src/applications/phortune/query/PhortuneChargeSearchEngine.php
··· 18 18 return pht('Phortune Charges'); 19 19 } 20 20 21 + public function getApplicationClassName() { 22 + return 'PhabricatorPhortuneApplication'; 23 + } 24 + 21 25 public function buildSavedQueryFromRequest(AphrontRequest $request) { 22 26 $saved = new PhabricatorSavedQuery(); 23 27
+4
src/applications/phortune/query/PhortuneMerchantSearchEngine.php
··· 7 7 return pht('Phortune Merchants'); 8 8 } 9 9 10 + public function getApplicationClassName() { 11 + return 'PhabricatorPhortuneApplication'; 12 + } 13 + 10 14 public function buildSavedQueryFromRequest(AphrontRequest $request) { 11 15 $saved = new PhabricatorSavedQuery(); 12 16
+4
src/applications/phortune/query/PhortuneSubscriptionSearchEngine.php
··· 28 28 return pht('Phortune Subscriptions'); 29 29 } 30 30 31 + public function getApplicationClassName() { 32 + return 'PhabricatorPhortuneApplication'; 33 + } 34 + 31 35 public function buildSavedQueryFromRequest(AphrontRequest $request) { 32 36 $saved = new PhabricatorSavedQuery(); 33 37
+1 -1
src/applications/phrequent/query/PhrequentSearchEngine.php
··· 6 6 return pht('Phrequent Time'); 7 7 } 8 8 9 - protected function getApplicationClassName() { 9 + public function getApplicationClassName() { 10 10 return 'PhabricatorPhrequentApplication'; 11 11 } 12 12
+4
src/applications/phriction/query/PhrictionSearchEngine.php
··· 7 7 return pht('Wiki Documents'); 8 8 } 9 9 10 + public function getApplicationClassName() { 11 + return 'PhabricatorPhrictionApplication'; 12 + } 13 + 10 14 public function buildSavedQueryFromRequest(AphrontRequest $request) { 11 15 $saved = new PhabricatorSavedQuery(); 12 16
+1 -1
src/applications/ponder/query/PonderQuestionSearchEngine.php
··· 7 7 return pht('Ponder Questions'); 8 8 } 9 9 10 - protected function getApplicationClassName() { 10 + public function getApplicationClassName() { 11 11 return 'PhabricatorPonderApplication'; 12 12 } 13 13
+1 -1
src/applications/project/query/PhabricatorProjectSearchEngine.php
··· 7 7 return pht('Projects'); 8 8 } 9 9 10 - protected function getApplicationClassName() { 10 + public function getApplicationClassName() { 11 11 return 'PhabricatorProjectApplication'; 12 12 } 13 13
+4
src/applications/releeph/query/ReleephBranchSearchEngine.php
··· 9 9 return pht('Releeph Branches'); 10 10 } 11 11 12 + public function getApplicationClassName() { 13 + return 'PhabricatorReleephApplication'; 14 + } 15 + 12 16 public function setProduct(ReleephProject $product) { 13 17 $this->product = $product; 14 18 return $this;
+1 -1
src/applications/releeph/query/ReleephProductSearchEngine.php
··· 7 7 return pht('Releeph Products'); 8 8 } 9 9 10 - protected function getApplicationClassName() { 10 + public function getApplicationClassName() { 11 11 return 'PhabricatorReleephApplication'; 12 12 } 13 13
+4
src/applications/releeph/query/ReleephRequestSearchEngine.php
··· 10 10 return pht('Releeph Pull Requests'); 11 11 } 12 12 13 + public function getApplicationClassName() { 14 + return 'PhabricatorReleephApplication'; 15 + } 16 + 13 17 public function setBranch(ReleephBranch $branch) { 14 18 $this->branch = $branch; 15 19 return $this;
+1 -1
src/applications/repository/query/PhabricatorRepositoryPushLogSearchEngine.php
··· 7 7 return pht('Push Logs'); 8 8 } 9 9 10 - protected function getApplicationClassName() { 10 + public function getApplicationClassName() { 11 11 return 'PhabricatorDiffusionApplication'; 12 12 } 13 13
+1 -1
src/applications/repository/query/PhabricatorRepositorySearchEngine.php
··· 7 7 return pht('Repositories'); 8 8 } 9 9 10 - protected function getApplicationClassName() { 10 + public function getApplicationClassName() { 11 11 return 'PhabricatorDiffusionApplication'; 12 12 } 13 13
+1 -3
src/applications/search/engine/PhabricatorApplicationSearchEngine.php
··· 243 243 return $this->application; 244 244 } 245 245 246 - protected function getApplicationClassName() { 247 - throw new PhutilMethodNotImplementedException(); 248 - } 246 + abstract public function getApplicationClassName(); 249 247 250 248 251 249 /* -( Constructing Engines )----------------------------------------------- */
+1 -1
src/applications/search/query/PhabricatorSearchApplicationSearchEngine.php
··· 7 7 return pht('Fulltext Results'); 8 8 } 9 9 10 - protected function getApplicationClassName() { 10 + public function getApplicationClassName() { 11 11 return 'PhabricatorSearchApplication'; 12 12 } 13 13
+4
src/applications/slowvote/query/PhabricatorSlowvoteSearchEngine.php
··· 7 7 return pht('Slowvotes'); 8 8 } 9 9 10 + public function getApplicationClassName() { 11 + return 'PhabricatorSlowvoteApplication'; 12 + } 13 + 10 14 public function buildSavedQueryFromRequest(AphrontRequest $request) { 11 15 $saved = new PhabricatorSavedQuery(); 12 16 $saved->setParameter(