@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 very basic "quick create" menu

Summary:
Ref T3623. This is like a pre-v0, in that it doesn't have a dropdown yet.

Clicking the button takes you to a page which can serve as a right click / mobile / edit target in the long run, but is obviously not great for desktop use. I'll add the dropdown in the next iteration.

Test Plan: {F105631}

Reviewers: chad, btrahan

Reviewed By: chad

CC: aran

Maniphest Tasks: T3623

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

+159 -18
+2
src/__phutil_library_map__.php
··· 1530 1530 'PhabricatorHelpKeyboardShortcutController' => 'applications/help/controller/PhabricatorHelpKeyboardShortcutController.php', 1531 1531 'PhabricatorHomeController' => 'applications/home/controller/PhabricatorHomeController.php', 1532 1532 'PhabricatorHomeMainController' => 'applications/home/controller/PhabricatorHomeMainController.php', 1533 + 'PhabricatorHomeQuickCreateController' => 'applications/home/controller/PhabricatorHomeQuickCreateController.php', 1533 1534 'PhabricatorHovercardExample' => 'applications/uiexample/examples/PhabricatorHovercardExample.php', 1534 1535 'PhabricatorHovercardView' => 'view/widget/hovercard/PhabricatorHovercardView.php', 1535 1536 'PhabricatorIRCBot' => 'infrastructure/daemon/bot/PhabricatorIRCBot.php', ··· 4177 4178 'PhabricatorHelpKeyboardShortcutController' => 'PhabricatorHelpController', 4178 4179 'PhabricatorHomeController' => 'PhabricatorController', 4179 4180 'PhabricatorHomeMainController' => 'PhabricatorHomeController', 4181 + 'PhabricatorHomeQuickCreateController' => 'PhabricatorHomeController', 4180 4182 'PhabricatorHovercardExample' => 'PhabricatorUIExample', 4181 4183 'PhabricatorHovercardView' => 'AphrontView', 4182 4184 'PhabricatorIRCBot' => 'PhabricatorDaemon',
+4 -2
src/applications/auth/application/PhabricatorApplicationAuth.php
··· 39 39 ->setIcon('power') 40 40 ->setWorkflow(true) 41 41 ->setHref('/logout/') 42 - ->setSelected(($controller instanceof PhabricatorLogoutController)); 42 + ->setSelected(($controller instanceof PhabricatorLogoutController)) 43 + ->setOrder(900); 43 44 $items[] = $item; 44 45 } else { 45 46 if ($controller instanceof PhabricatorAuthController) { ··· 51 52 ->setName(pht('Log In')) 52 53 // TODO: Login icon? 53 54 ->setIcon('power') 54 - ->setHref('/auth/start/'); 55 + ->setHref('/auth/start/') 56 + ->setOrder(900); 55 57 $items[] = $item; 56 58 } 57 59 }
+12 -1
src/applications/base/PhabricatorApplication.php
··· 248 248 * @param PhabricatorUser The viewing user. 249 249 * @param AphrontController The current controller. May be null for special 250 250 * pages like 404, exception handlers, etc. 251 - * @return list<PhabricatorMainMenuIconView> List of menu items. 251 + * @return list<PHUIListItemView> List of menu items. 252 252 * @task ui 253 253 */ 254 254 public function buildMainMenuItems( ··· 267 267 */ 268 268 public function getQuickCreateURI() { 269 269 return null; 270 + } 271 + 272 + 273 + /** 274 + * Build items for the "quick create" menu. 275 + * 276 + * @param PhabricatorUser The viewing user. 277 + * @return list<PHUIListItemView> List of menu items. 278 + */ 279 + public function getQuickCreateItems(PhabricatorUser $viewer) { 280 + return array(); 270 281 } 271 282 272 283
+14
src/applications/conpherence/application/PhabricatorApplicationConpherence.php
··· 50 50 ); 51 51 } 52 52 53 + public function getQuickCreateItems(PhabricatorUser $viewer) { 54 + $items = array(); 55 + 56 + $item = id(new PHUIListItemView()) 57 + ->setName(pht('New Conpherence Thread')) 58 + ->setIcon('new') 59 + ->setWorkflow(true) 60 + ->setHref($this->getBaseURI().'new/'); 61 + $items[] = $item; 62 + 63 + return $items; 64 + } 65 + 66 + 53 67 }
+6 -5
src/applications/diviner/application/PhabricatorApplicationDiviner.php
··· 58 58 } 59 59 60 60 if ($application && $application->getHelpURI()) { 61 - $item = new PHUIListItemView(); 62 - $item->setName(pht('%s Help', $application->getName())); 63 - $item->addClass('core-menu-item'); 64 - $item->setIcon('help'); 65 - $item->setHref($application->getHelpURI()); 61 + $item = id(new PHUIListItemView()) 62 + ->setName(pht('%s Help', $application->getName())) 63 + ->addClass('core-menu-item') 64 + ->setIcon('help') 65 + ->setOrder(100) 66 + ->setHref($application->getHelpURI()); 66 67 $items[] = $item; 67 68 } 68 69
+26
src/applications/home/application/PhabricatorApplicationHome.php
··· 17 17 public function getRoutes() { 18 18 return array( 19 19 '/(?:(?P<filter>(?:jump))/)?' => 'PhabricatorHomeMainController', 20 + '/home/' => array( 21 + 'create/' => 'PhabricatorHomeQuickCreateController', 22 + ), 20 23 ); 21 24 } 22 25 ··· 26 29 27 30 public function canUninstall() { 28 31 return false; 32 + } 33 + 34 + public function getApplicationOrder() { 35 + return 9; 36 + } 37 + 38 + public function buildMainMenuItems( 39 + PhabricatorUser $user, 40 + PhabricatorController $controller = null) { 41 + 42 + $items = array(); 43 + 44 + if ($user->isLoggedIn() && $user->isUserActivated()) { 45 + $item = id(new PHUIListItemView()) 46 + ->setName(pht('Create New...')) 47 + ->setIcon('new') 48 + ->addClass('core-menu-item') 49 + ->setHref('/home/create/') 50 + ->setOrder(300); 51 + $items[] = $item; 52 + } 53 + 54 + return $items; 29 55 } 30 56 31 57 }
+47
src/applications/home/controller/PhabricatorHomeQuickCreateController.php
··· 1 + <?php 2 + 3 + final class PhabricatorHomeQuickCreateController 4 + extends PhabricatorHomeController { 5 + 6 + public function processRequest() { 7 + $viewer = $this->getRequest()->getUser(); 8 + 9 + $applications = id(new PhabricatorApplicationQuery()) 10 + ->setViewer($viewer) 11 + ->withInstalled(true) 12 + ->execute(); 13 + 14 + $items = array(); 15 + foreach ($applications as $application) { 16 + $app_items = $application->getQuickCreateItems($viewer); 17 + foreach ($app_items as $app_item) { 18 + $items[] = $app_item; 19 + } 20 + } 21 + 22 + $list = id(new PHUIObjectItemListView()) 23 + ->setUser($viewer); 24 + 25 + foreach ($items as $item) { 26 + $list->addItem( 27 + id(new PHUIObjectItemView()) 28 + ->setHeader($item->getName()) 29 + ->setWorkflow($item->getWorkflow()) 30 + ->setHref($item->getHref())); 31 + } 32 + 33 + $crumbs = $this->buildApplicationCrumbs(); 34 + $crumbs->addTextCrumb(pht('Quick Create')); 35 + 36 + return $this->buildApplicationPage( 37 + array( 38 + $crumbs, 39 + $list, 40 + ), 41 + array( 42 + 'title' => pht('Quick Create'), 43 + )); 44 + } 45 + 46 + 47 + }
+12
src/applications/maniphest/application/PhabricatorApplicationManiphest.php
··· 90 90 return $status; 91 91 } 92 92 93 + public function getQuickCreateItems(PhabricatorUser $viewer) { 94 + $items = array(); 95 + 96 + $item = id(new PHUIListItemView()) 97 + ->setName(pht('New Maniphest Task')) 98 + ->setIcon('new') 99 + ->setHref($this->getBaseURI().'task/create/'); 100 + $items[] = $item; 101 + 102 + return $items; 103 + } 104 + 93 105 protected function getCustomCapabilities() { 94 106 return array( 95 107 ManiphestCapabilityDefaultView::CAPABILITY => array(
+12
src/applications/paste/application/PhabricatorApplicationPaste.php
··· 50 50 ); 51 51 } 52 52 53 + public function getQuickCreateItems(PhabricatorUser $viewer) { 54 + $items = array(); 55 + 56 + $item = id(new PHUIListItemView()) 57 + ->setName(pht('New Paste')) 58 + ->setIcon('new') 59 + ->setHref($this->getBaseURI().'create/'); 60 + $items[] = $item; 61 + 62 + return $items; 63 + } 64 + 53 65 }
+5 -4
src/applications/people/application/PhabricatorApplicationPeople.php
··· 97 97 if ($user->isLoggedIn() && $user->isUserActivated()) { 98 98 $image = $user->loadProfileImageURI(); 99 99 100 - $item = new PHUIListItemView(); 101 - $item->setName($user->getUsername()); 102 - $item->setHref('/p/'.$user->getUsername().'/'); 103 - $item->addClass('core-menu-item'); 100 + $item = id(new PHUIListItemView()) 101 + ->setName($user->getUsername()) 102 + ->setHref('/p/'.$user->getUsername().'/') 103 + ->addClass('core-menu-item') 104 + ->setOrder(200); 104 105 105 106 $classes = array( 106 107 'phabricator-core-menu-icon',
+7 -6
src/applications/settings/application/PhabricatorApplicationSettings.php
··· 39 39 40 40 if ($user->isLoggedIn() && $user->isUserActivated()) { 41 41 $selected = ($controller instanceof PhabricatorSettingsMainController); 42 - $item = new PHUIListItemView(); 43 - $item->setName(pht('Settings')); 44 - $item->setIcon('settings'); 45 - $item->addClass('core-menu-item'); 46 - $item->setSelected($selected); 47 - $item->setHref('/settings/'); 42 + $item = id(new PHUIListItemView()) 43 + ->setName(pht('Settings')) 44 + ->setIcon('settings') 45 + ->addClass('core-menu-item') 46 + ->setSelected($selected) 47 + ->setHref('/settings/') 48 + ->setOrder(400); 48 49 $items[] = $item; 49 50 } 50 51
+2
src/view/page/menu/PhabricatorMainMenuView.php
··· 163 163 } 164 164 } 165 165 166 + $actions = msort($actions, 'getOrder'); 167 + 166 168 $view = $this->getApplicationMenu(); 167 169 168 170 if (!$view) {
+10
src/view/phui/PHUIListItemView.php
··· 23 23 private $disabled; 24 24 private $renderNameAsTooltip; 25 25 private $statusColor; 26 + private $order; 27 + 28 + public function setOrder($order) { 29 + $this->order = $order; 30 + return $this; 31 + } 32 + 33 + public function getOrder() { 34 + return $this->order; 35 + } 26 36 27 37 public function setRenderNameAsTooltip($render_name_as_tooltip) { 28 38 $this->renderNameAsTooltip = $render_name_as_tooltip;