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

Add an ApplicationProfilePanel

Summary: Allows applications to be added as profile menu items

Test Plan: Add an application to a project, see menu item, click on menu. Uninstall application, see menu without application.

Reviewers: epriestley

Reviewed By: epriestley

Subscribers: Korvin

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

+81
+2
src/__phutil_library_map__.php
··· 1787 1787 'PhabricatorApplicationEmailCommandsController' => 'applications/meta/controller/PhabricatorApplicationEmailCommandsController.php', 1788 1788 'PhabricatorApplicationLaunchView' => 'applications/meta/view/PhabricatorApplicationLaunchView.php', 1789 1789 'PhabricatorApplicationPanelController' => 'applications/meta/controller/PhabricatorApplicationPanelController.php', 1790 + 'PhabricatorApplicationProfilePanel' => 'applications/search/profilepanel/PhabricatorApplicationProfilePanel.php', 1790 1791 'PhabricatorApplicationQuery' => 'applications/meta/query/PhabricatorApplicationQuery.php', 1791 1792 'PhabricatorApplicationSearchController' => 'applications/search/controller/PhabricatorApplicationSearchController.php', 1792 1793 'PhabricatorApplicationSearchEngine' => 'applications/search/engine/PhabricatorApplicationSearchEngine.php', ··· 6609 6610 'PhabricatorApplicationEmailCommandsController' => 'PhabricatorApplicationsController', 6610 6611 'PhabricatorApplicationLaunchView' => 'AphrontTagView', 6611 6612 'PhabricatorApplicationPanelController' => 'PhabricatorApplicationsController', 6613 + 'PhabricatorApplicationProfilePanel' => 'PhabricatorProfilePanel', 6612 6614 'PhabricatorApplicationQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 6613 6615 'PhabricatorApplicationSearchController' => 'PhabricatorSearchBaseController', 6614 6616 'PhabricatorApplicationSearchEngine' => 'Phobject',
+79
src/applications/search/profilepanel/PhabricatorApplicationProfilePanel.php
··· 1 + <?php 2 + 3 + final class PhabricatorApplicationProfilePanel 4 + extends PhabricatorProfilePanel { 5 + 6 + const PANELKEY = 'application'; 7 + 8 + public function getPanelTypeIcon() { 9 + return 'fa-globe'; 10 + } 11 + 12 + public function getPanelTypeName() { 13 + return pht('Application'); 14 + } 15 + 16 + public function canAddToObject($object) { 17 + return true; 18 + } 19 + 20 + public function getDisplayName( 21 + PhabricatorProfilePanelConfiguration $config) { 22 + $app = $this->getApplication($config); 23 + if ($app) { 24 + return $app->getName(); 25 + } else { 26 + return pht('(Uninstalled Application)'); 27 + } 28 + return $app->getName(); 29 + } 30 + 31 + public function buildEditEngineFields( 32 + PhabricatorProfilePanelConfiguration $config) { 33 + return array( 34 + id(new PhabricatorDatasourceEditField()) 35 + ->setKey('application') 36 + ->setLabel(pht('Application')) 37 + ->setDatasource(new PhabricatorApplicationDatasource()) 38 + ->setSingleValue($config->getPanelProperty('application')), 39 + ); 40 + } 41 + 42 + private function getApplication( 43 + PhabricatorProfilePanelConfiguration $config) { 44 + $viewer = $this->getViewer(); 45 + $phid = $config->getPanelProperty('application'); 46 + $app = id(new PhabricatorApplicationQuery()) 47 + ->setViewer($viewer) 48 + ->withPHIDs(array($phid)) 49 + ->executeOne(); 50 + 51 + return $app; 52 + } 53 + 54 + protected function newNavigationMenuItems( 55 + PhabricatorProfilePanelConfiguration $config) { 56 + $viewer = $this->getViewer(); 57 + $app = $this->getApplication($config); 58 + if (!$app) { 59 + return array(); 60 + } 61 + 62 + $is_installed = PhabricatorApplication::isClassInstalledForViewer( 63 + get_class($app), 64 + $viewer); 65 + if (!$is_installed) { 66 + return array(); 67 + } 68 + 69 + $item = $this->newItem() 70 + ->setHref($app->getApplicationURI()) 71 + ->setName($app->getName()) 72 + ->setIcon($app->getIcon()); 73 + 74 + return array( 75 + $item, 76 + ); 77 + } 78 + 79 + }