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

Move uncommon workboard management options to "Manage Board" view

Summary:
This gives us room for less-common workboard management options like "Disable Board" without overloading the menus on the main board.

Particularly, we can add background color options here without anything getting weird.

I've left "Add Column" on the main UI since I think it's common enough to leave there. We could probably move "Hide Column" to this UI in the future, though.

Test Plan: {F1114475}

Reviewers: chad

Reviewed By: chad

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

+165 -24
+2
src/__phutil_library_map__.php
··· 2872 2872 'PhabricatorProjectBoardController' => 'applications/project/controller/PhabricatorProjectBoardController.php', 2873 2873 'PhabricatorProjectBoardDisableController' => 'applications/project/controller/PhabricatorProjectBoardDisableController.php', 2874 2874 'PhabricatorProjectBoardImportController' => 'applications/project/controller/PhabricatorProjectBoardImportController.php', 2875 + 'PhabricatorProjectBoardManageController' => 'applications/project/controller/PhabricatorProjectBoardManageController.php', 2875 2876 'PhabricatorProjectBoardReorderController' => 'applications/project/controller/PhabricatorProjectBoardReorderController.php', 2876 2877 'PhabricatorProjectBoardViewController' => 'applications/project/controller/PhabricatorProjectBoardViewController.php', 2877 2878 'PhabricatorProjectCardView' => 'applications/project/view/PhabricatorProjectCardView.php', ··· 7300 7301 'PhabricatorProjectBoardController' => 'PhabricatorProjectController', 7301 7302 'PhabricatorProjectBoardDisableController' => 'PhabricatorProjectBoardController', 7302 7303 'PhabricatorProjectBoardImportController' => 'PhabricatorProjectBoardController', 7304 + 'PhabricatorProjectBoardManageController' => 'PhabricatorProjectBoardController', 7303 7305 'PhabricatorProjectBoardReorderController' => 'PhabricatorProjectBoardController', 7304 7306 'PhabricatorProjectBoardViewController' => 'PhabricatorProjectBoardController', 7305 7307 'PhabricatorProjectCardView' => 'AphrontTagView',
+2
src/applications/project/application/PhabricatorProjectApplication.php
··· 84 84 => 'PhabricatorProjectBoardReorderController', 85 85 'disable/' 86 86 => 'PhabricatorProjectBoardDisableController', 87 + 'manage/' 88 + => 'PhabricatorProjectBoardManageController', 87 89 ), 88 90 'update/(?P<id>[1-9]\d*)/(?P<action>[^/]+)/' 89 91 => 'PhabricatorProjectUpdateController',
+155
src/applications/project/controller/PhabricatorProjectBoardManageController.php
··· 1 + <?php 2 + 3 + final class PhabricatorProjectBoardManageController 4 + extends PhabricatorProjectBoardController { 5 + 6 + public function handleRequest(AphrontRequest $request) { 7 + $viewer = $request->getViewer(); 8 + $board_id = $request->getURIData('projectID'); 9 + 10 + $board = id(new PhabricatorProjectQuery()) 11 + ->setViewer($viewer) 12 + ->withIDs(array($board_id)) 13 + ->needImages(true) 14 + ->executeOne(); 15 + if (!$board) { 16 + return new Aphront404Response(); 17 + } 18 + $this->setProject($board); 19 + 20 + // Perform layout of no tasks to load and populate the columns in the 21 + // correct order. 22 + $layout_engine = id(new PhabricatorBoardLayoutEngine()) 23 + ->setViewer($viewer) 24 + ->setBoardPHIDs(array($board->getPHID())) 25 + ->setObjectPHIDs(array()) 26 + ->setFetchAllBoards(true) 27 + ->executeLayout(); 28 + 29 + $columns = $layout_engine->getColumns($board->getPHID()); 30 + 31 + $board_id = $board->getID(); 32 + 33 + $header = $this->buildHeaderView($board); 34 + $actions = $this->buildActionView($board); 35 + $properties = $this->buildPropertyView($board); 36 + 37 + $properties->setActionList($actions); 38 + 39 + $crumbs = $this->buildApplicationCrumbs(); 40 + $crumbs->addTextCrumb(pht('Workboard'), "/project/board/{$board_id}/"); 41 + $crumbs->addTextCrumb(pht('Manage')); 42 + 43 + $box = id(new PHUIObjectBoxView()) 44 + ->setHeader($header) 45 + ->addPropertyList($properties); 46 + 47 + $nav = $this->getProfileMenu(); 48 + 49 + $title = array( 50 + pht('Manage Workboard'), 51 + $board->getDisplayName(), 52 + ); 53 + 54 + $columns_list = $this->buildColumnsList($board, $columns); 55 + 56 + return $this->newPage() 57 + ->setTitle($title) 58 + ->setNavigation($nav) 59 + ->setCrumbs($crumbs) 60 + ->appendChild( 61 + array( 62 + $box, 63 + $columns_list, 64 + )); 65 + } 66 + 67 + private function buildHeaderView(PhabricatorProject $board) { 68 + $viewer = $this->getRequest()->getUser(); 69 + 70 + $header = id(new PHUIHeaderView()) 71 + ->setUser($viewer) 72 + ->setHeader(pht('Workboard: %s', $board->getDisplayName())); 73 + 74 + return $header; 75 + } 76 + 77 + private function buildActionView(PhabricatorProject $board) { 78 + $viewer = $this->getRequest()->getUser(); 79 + $id = $board->getID(); 80 + 81 + $actions = id(new PhabricatorActionListView()) 82 + ->setUser($viewer); 83 + 84 + $can_edit = PhabricatorPolicyFilter::hasCapability( 85 + $viewer, 86 + $board, 87 + PhabricatorPolicyCapability::CAN_EDIT); 88 + 89 + $reorder_uri = $this->getApplicationURI("board/{$id}/reorder/"); 90 + 91 + $actions->addAction( 92 + id(new PhabricatorActionView()) 93 + ->setIcon('fa-exchange') 94 + ->setName(pht('Reorder Columns')) 95 + ->setHref($reorder_uri) 96 + ->setDisabled(!$can_edit) 97 + ->setWorkflow(true)); 98 + 99 + $disable_uri = $this->getApplicationURI("board/{$id}/disable/"); 100 + 101 + $actions->addAction( 102 + id(new PhabricatorActionView()) 103 + ->setIcon('fa-ban') 104 + ->setName(pht('Disable Board')) 105 + ->setHref($disable_uri) 106 + ->setDisabled(!$can_edit) 107 + ->setWorkflow(true)); 108 + 109 + return $actions; 110 + } 111 + 112 + private function buildPropertyView( 113 + PhabricatorProject $board) { 114 + $viewer = $this->getRequest()->getUser(); 115 + 116 + $properties = id(new PHUIPropertyListView()) 117 + ->setUser($viewer) 118 + ->setObject($board); 119 + 120 + return $properties; 121 + } 122 + 123 + private function buildColumnsList( 124 + PhabricatorProject $board, 125 + array $columns) { 126 + assert_instances_of($columns, 'PhabricatorProjectColumn'); 127 + 128 + $board_id = $board->getID(); 129 + 130 + $view = id(new PHUIObjectItemListView()) 131 + ->setNoDataString(pht('This board has no columns.')); 132 + 133 + foreach ($columns as $column) { 134 + $column_id = $column->getID(); 135 + 136 + $detail_uri = "/project/board/{$board_id}/column/{$column_id}/"; 137 + 138 + $item = id(new PHUIObjectItemView()) 139 + ->setHeader($column->getDisplayName()) 140 + ->setHref($detail_uri); 141 + 142 + if ($column->isHidden()) { 143 + $item->setDisabled(true); 144 + } 145 + 146 + $view->addItem($item); 147 + } 148 + 149 + return id(new PHUIObjectBoxView()) 150 + ->setHeaderText(pht('Columns')) 151 + ->setObjectList($view); 152 + } 153 + 154 + 155 + }
+2 -2
src/applications/project/controller/PhabricatorProjectBoardReorderController.php
··· 23 23 $this->setProject($project); 24 24 $project_id = $project->getID(); 25 25 26 - $board_uri = $this->getApplicationURI("board/{$project_id}/"); 26 + $manage_uri = $this->getApplicationURI("board/{$project_id}/manage/"); 27 27 $reorder_uri = $this->getApplicationURI("board/{$project_id}/reorder/"); 28 28 29 29 if ($request->isFormPost()) { 30 30 // User clicked "Done", make sure the page reloads to show the new 31 31 // column order. 32 - return id(new AphrontRedirectResponse())->setURI($board_uri); 32 + return id(new AphrontRedirectResponse())->setURI($manage_uri); 33 33 } 34 34 35 35 $columns = id(new PhabricatorProjectColumnQuery())
+4 -22
src/applications/project/controller/PhabricatorProjectBoardViewController.php
··· 680 680 681 681 $id = $project->getID(); 682 682 683 - $disable_uri = $this->getApplicationURI("board/{$id}/disable/"); 683 + $manage_uri = $this->getApplicationURI("board/{$id}/manage/"); 684 684 $add_uri = $this->getApplicationURI("board/{$id}/edit/"); 685 - $reorder_uri = $this->getApplicationURI("board/{$id}/reorder/"); 686 685 687 686 $can_edit = PhabricatorPolicyFilter::hasCapability( 688 687 $viewer, ··· 699 698 ->setWorkflow(true); 700 699 701 700 $manage_items[] = id(new PhabricatorActionView()) 702 - ->setIcon('fa-exchange') 703 - ->setName(pht('Reorder Columns')) 704 - ->setHref($reorder_uri) 705 - ->setDisabled(!$can_edit) 706 - ->setWorkflow(true); 701 + ->setIcon('fa-pencil') 702 + ->setName(pht('Manage Board')) 703 + ->setHref($manage_uri); 707 704 708 705 if ($show_hidden) { 709 706 $hidden_uri = $this->getURIWithState() ··· 734 731 ->setName(pht('Batch Edit Visible Tasks...')) 735 732 ->setHref($batch_edit_uri) 736 733 ->setDisabled(!$can_batch_edit); 737 - 738 - $manage_items[] = id(new PhabricatorActionView()) 739 - ->setIcon('fa-ban') 740 - ->setName(pht('Disable Workboard')) 741 - ->setHref($disable_uri) 742 - ->setWorkflow(true) 743 - ->setDisabled(!$can_edit); 744 734 745 735 $manage_menu = id(new PhabricatorActionListView()) 746 736 ->setUser($viewer); ··· 825 815 ->setName(pht('Batch Edit Tasks...')) 826 816 ->setHref($batch_edit_uri) 827 817 ->setDisabled(!$can_batch_edit); 828 - 829 - $detail_uri = $this->getApplicationURI( 830 - 'board/'.$this->id.'/column/'.$column->getID().'/'); 831 - 832 - $column_items[] = id(new PhabricatorActionView()) 833 - ->setIcon('fa-columns') 834 - ->setName(pht('Column Details')) 835 - ->setHref($detail_uri); 836 818 837 819 $can_hide = ($can_edit && !$column->isDefaultColumn()); 838 820 $hide_uri = 'board/'.$this->id.'/hide/'.$column->getID().'/';