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

Basic Favorites application

Summary: Ref T5867. Rough in a Favorites application, not wired to anything.

Test Plan: tbd. currently 404s so... I messed up something. Tossing up to read.

Reviewers: epriestley

Reviewed By: epriestley

Subscribers: Korvin

Maniphest Tasks: T5867

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

+262 -3
+14
src/__phutil_library_map__.php
··· 2654 2654 'PhabricatorFactSimpleSpec' => 'applications/fact/spec/PhabricatorFactSimpleSpec.php', 2655 2655 'PhabricatorFactSpec' => 'applications/fact/spec/PhabricatorFactSpec.php', 2656 2656 'PhabricatorFactUpdateIterator' => 'applications/fact/extract/PhabricatorFactUpdateIterator.php', 2657 + 'PhabricatorFavoritesApplication' => 'applications/favorites/application/PhabricatorFavoritesApplication.php', 2658 + 'PhabricatorFavoritesConstants' => 'applications/favorites/constants/PhabricatorFavoritesConstants.php', 2659 + 'PhabricatorFavoritesController' => 'applications/favorites/controller/PhabricatorFavoritesController.php', 2660 + 'PhabricatorFavoritesMainController' => 'applications/favorites/controller/PhabricatorFavoritesMainController.php', 2661 + 'PhabricatorFavoritesManageProfileMenuItem' => 'applications/favorites/menuitem/PhabricatorFavoritesManageProfileMenuItem.php', 2662 + 'PhabricatorFavoritesMenuItemController' => 'applications/favorites/controller/PhabricatorFavoritesMenuItemController.php', 2663 + 'PhabricatorFavoritesProfileMenuEngine' => 'applications/favorites/engine/PhabricatorFavoritesProfileMenuEngine.php', 2657 2664 'PhabricatorFaxContentSource' => 'infrastructure/contentsource/PhabricatorFaxContentSource.php', 2658 2665 'PhabricatorFeedApplication' => 'applications/feed/application/PhabricatorFeedApplication.php', 2659 2666 'PhabricatorFeedBuilder' => 'applications/feed/builder/PhabricatorFeedBuilder.php', ··· 7650 7657 'PhabricatorFactSimpleSpec' => 'PhabricatorFactSpec', 7651 7658 'PhabricatorFactSpec' => 'Phobject', 7652 7659 'PhabricatorFactUpdateIterator' => 'PhutilBufferedIterator', 7660 + 'PhabricatorFavoritesApplication' => 'PhabricatorApplication', 7661 + 'PhabricatorFavoritesConstants' => 'PhabricatorFavoritesController', 7662 + 'PhabricatorFavoritesController' => 'PhabricatorController', 7663 + 'PhabricatorFavoritesMainController' => 'PhabricatorFavoritesController', 7664 + 'PhabricatorFavoritesManageProfileMenuItem' => 'PhabricatorProfileMenuItem', 7665 + 'PhabricatorFavoritesMenuItemController' => 'PhabricatorFavoritesController', 7666 + 'PhabricatorFavoritesProfileMenuEngine' => 'PhabricatorProfileMenuEngine', 7653 7667 'PhabricatorFaxContentSource' => 'PhabricatorContentSource', 7654 7668 'PhabricatorFeedApplication' => 'PhabricatorApplication', 7655 7669 'PhabricatorFeedBuilder' => 'Phobject',
+39
src/applications/favorites/application/PhabricatorFavoritesApplication.php
··· 1 + <?php 2 + 3 + final class PhabricatorFavoritesApplication extends PhabricatorApplication { 4 + 5 + public function getBaseURI() { 6 + return '/favorites/'; 7 + } 8 + 9 + public function getName() { 10 + return pht('Favorites'); 11 + } 12 + 13 + public function getShortDescription() { 14 + return pht('Favorite Items'); 15 + } 16 + 17 + public function getIcon() { 18 + return 'fa-star-o'; 19 + } 20 + 21 + public function getRoutes() { 22 + return array( 23 + '/favorites/' => array( 24 + '' => 'PhabricatorFavoritesMainController', 25 + '(?P<type>global|personal)/item/' => $this->getProfileMenuRouting( 26 + 'PhabricatorFavoritesMenuItemController'), 27 + ), 28 + ); 29 + } 30 + 31 + public function isLaunchable() { 32 + return false; 33 + } 34 + 35 + public function getApplicationOrder() { 36 + return 9; 37 + } 38 + 39 + }
+8
src/applications/favorites/constants/PhabricatorFavoritesConstants.php
··· 1 + <?php 2 + 3 + final class PhabricatorFavoritesConstants 4 + extends PhabricatorFavoritesController { 5 + 6 + const ITEM_MANAGE = 'favorites.manage'; 7 + 8 + }
+3
src/applications/favorites/controller/PhabricatorFavoritesController.php
··· 1 + <?php 2 + 3 + abstract class PhabricatorFavoritesController extends PhabricatorController {}
+58
src/applications/favorites/controller/PhabricatorFavoritesMainController.php
··· 1 + <?php 2 + 3 + final class PhabricatorFavoritesMainController 4 + extends PhabricatorFavoritesController { 5 + 6 + public function shouldAllowPublic() { 7 + return false; 8 + } 9 + 10 + public function handleRequest(AphrontRequest $request) { 11 + $viewer = $request->getViewer(); 12 + 13 + $menu = id(new PHUIObjectItemListView()) 14 + ->setUser($viewer); 15 + 16 + $menu->addItem( 17 + id(new PHUIObjectItemView()) 18 + ->setHeader(pht('Personal Menu Items')) 19 + ->setHref($this->getApplicationURI('personal/item/configure/')) 20 + ->setImageURI($viewer->getProfileImageURI()) 21 + ->addAttribute(pht('Edit favorites for your personal account.'))); 22 + 23 + $icon = id(new PHUIIconView()) 24 + ->setIcon('fa-globe') 25 + ->setBackground('bg-blue'); 26 + 27 + $menu->addItem( 28 + id(new PHUIObjectItemView()) 29 + ->setHeader(pht('Global Menu Items')) 30 + ->setHref($this->getApplicationURI('global/item/configure/')) 31 + ->setImageIcon($icon) 32 + ->addAttribute(pht('Edit global default favorites for all users.'))); 33 + 34 + $crumbs = $this->buildApplicationCrumbs(); 35 + $crumbs->addTextCrumb(pht('Manage')); 36 + $crumbs->setBorder(true); 37 + 38 + $box = id(new PHUIObjectBoxView()) 39 + ->setObjectList($menu); 40 + 41 + $header = id(new PHUIHeaderView()) 42 + ->setHeader(pht('Manage Favorites')) 43 + ->setHeaderIcon('fa-star-o'); 44 + 45 + $view = id(new PHUITwoColumnView()) 46 + ->setHeader($header) 47 + ->setFooter(array( 48 + $box, 49 + )); 50 + 51 + return $this->newPage() 52 + ->setTitle(pht('Manage')) 53 + ->setCrumbs($crumbs) 54 + ->appendChild($view); 55 + 56 + } 57 + 58 + }
+29
src/applications/favorites/controller/PhabricatorFavoritesMenuItemController.php
··· 1 + <?php 2 + 3 + final class PhabricatorFavoritesMenuItemController 4 + extends PhabricatorFavoritesController { 5 + 6 + public function handleRequest(AphrontRequest $request) { 7 + $viewer = $this->getViewer(); 8 + $type = $request->getURIData('type'); 9 + $custom_phid = null; 10 + if ($type == 'personal') { 11 + $custom_phid = $viewer->getPHID(); 12 + } 13 + 14 + $application = 'PhabricatorFavoritesApplication'; 15 + $favorites = id(new PhabricatorApplicationQuery()) 16 + ->setViewer($viewer) 17 + ->withClasses(array($application)) 18 + ->withInstalled(true) 19 + ->executeOne(); 20 + 21 + $engine = id(new PhabricatorFavoritesProfileMenuEngine()) 22 + ->setProfileObject($favorites) 23 + ->setCustomPHID($custom_phid) 24 + ->setController($this); 25 + 26 + return $engine->buildResponse(); 27 + } 28 + 29 + }
+36
src/applications/favorites/engine/PhabricatorFavoritesProfileMenuEngine.php
··· 1 + <?php 2 + 3 + final class PhabricatorFavoritesProfileMenuEngine 4 + extends PhabricatorProfileMenuEngine { 5 + 6 + protected function isMenuEngineConfigurable() { 7 + return true; 8 + } 9 + 10 + protected function getItemURI($path) { 11 + $object = $this->getProfileObject(); 12 + $custom = $this->getCustomPHID(); 13 + 14 + if ($custom) { 15 + return "/favorites/personal/item/{$path}"; 16 + } else { 17 + return "/favorites/global/item/{$path}"; 18 + } 19 + } 20 + 21 + protected function getBuiltinProfileItems($object) { 22 + $items = array(); 23 + 24 + $custom = $this->getCustomPHID(); 25 + 26 + if ($custom) { 27 + $items[] = $this->newItem() 28 + ->setBuiltinKey(PhabricatorFavoritesConstants::ITEM_MANAGE) 29 + ->setMenuItemKey( 30 + PhabricatorFavoritesManageProfileMenuItem::MENUITEMKEY); 31 + } 32 + 33 + return $items; 34 + } 35 + 36 + }
+65
src/applications/favorites/menuitem/PhabricatorFavoritesManageProfileMenuItem.php
··· 1 + <?php 2 + 3 + final class PhabricatorFavoritesManageProfileMenuItem 4 + extends PhabricatorProfileMenuItem { 5 + 6 + const MENUITEMKEY = 'favorites.manage'; 7 + 8 + public function getMenuItemTypeName() { 9 + return pht('Manage Favorites'); 10 + } 11 + 12 + private function getDefaultName() { 13 + return pht('Manage'); 14 + } 15 + 16 + public function canHideMenuItem( 17 + PhabricatorProfileMenuItemConfiguration $config) { 18 + return false; 19 + } 20 + 21 + public function canMakeDefault( 22 + PhabricatorProfileMenuItemConfiguration $config) { 23 + return false; 24 + } 25 + 26 + public function getDisplayName( 27 + PhabricatorProfileMenuItemConfiguration $config) { 28 + $name = $config->getMenuItemProperty('name'); 29 + 30 + if (strlen($name)) { 31 + return $name; 32 + } 33 + 34 + return $this->getDefaultName(); 35 + } 36 + 37 + public function buildEditEngineFields( 38 + PhabricatorProfileMenuItemConfiguration $config) { 39 + return array( 40 + id(new PhabricatorTextEditField()) 41 + ->setKey('name') 42 + ->setLabel(pht('Name')) 43 + ->setPlaceholder($this->getDefaultName()) 44 + ->setValue($config->getMenuItemProperty('name')), 45 + ); 46 + } 47 + 48 + protected function newNavigationMenuItems( 49 + PhabricatorProfileMenuItemConfiguration $config) { 50 + 51 + $name = $this->getDisplayName($config); 52 + $icon = 'fa-pencil'; 53 + $href = '/favorites/personal/item/configure/'; 54 + 55 + $item = $this->newItem() 56 + ->setHref($href) 57 + ->setName($name) 58 + ->setIcon($icon); 59 + 60 + return array( 61 + $item, 62 + ); 63 + } 64 + 65 + }
+6 -1
src/applications/search/engine/PhabricatorProfileMenuEngine.php
··· 748 748 return new Aphront404Response(); 749 749 } 750 750 751 + $custom_phid = $this->getCustomPHID(); 751 752 $configuration = PhabricatorProfileMenuItemConfiguration::initializeNewItem( 752 753 $object, 753 - $item_type); 754 + $item_type, 755 + $custom_phid); 754 756 755 757 $viewer = $this->getViewer(); 756 758 ··· 765 767 ->setMenuEngine($this) 766 768 ->setProfileObject($object) 767 769 ->setNewMenuItemConfiguration($configuration) 770 + ->setCustomPHID($custom_phid) 768 771 ->setController($controller) 769 772 ->buildResponse(); 770 773 } ··· 778 781 ->setMenuEngine($this) 779 782 ->setProfileObject($object) 780 783 ->setController($controller) 784 + ->setCustomPHID($this->getCustomPHID()) 781 785 ->buildResponse(); 782 786 } 783 787 ··· 810 814 ->setProfileObject($object) 811 815 ->setNewMenuItemConfiguration($configuration) 812 816 ->setController($controller) 817 + ->setCustomPHID($this->getCustomPHID()) 813 818 ->buildResponse(); 814 819 } 815 820
+4 -2
src/applications/search/storage/PhabricatorProfileMenuItemConfiguration.php
··· 34 34 35 35 public static function initializeNewItem( 36 36 $profile_object, 37 - PhabricatorProfileMenuItem $item) { 37 + PhabricatorProfileMenuItem $item, 38 + $custom_phid) { 38 39 39 40 return self::initializeNewBuiltin() 40 41 ->setProfilePHID($profile_object->getPHID()) 41 42 ->setMenuItemKey($item->getMenuItemKey()) 42 43 ->attachMenuItem($item) 43 - ->attachProfileObject($profile_object); 44 + ->attachProfileObject($profile_object) 45 + ->setCustomPHID($custom_phid); 44 46 } 45 47 46 48 protected function getConfiguration() {