mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-22 13:30:55 +01:00
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
This commit is contained in:
parent
e4690a3854
commit
5a44c85b6b
5 changed files with 165 additions and 24 deletions
|
@ -2872,6 +2872,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorProjectBoardController' => 'applications/project/controller/PhabricatorProjectBoardController.php',
|
'PhabricatorProjectBoardController' => 'applications/project/controller/PhabricatorProjectBoardController.php',
|
||||||
'PhabricatorProjectBoardDisableController' => 'applications/project/controller/PhabricatorProjectBoardDisableController.php',
|
'PhabricatorProjectBoardDisableController' => 'applications/project/controller/PhabricatorProjectBoardDisableController.php',
|
||||||
'PhabricatorProjectBoardImportController' => 'applications/project/controller/PhabricatorProjectBoardImportController.php',
|
'PhabricatorProjectBoardImportController' => 'applications/project/controller/PhabricatorProjectBoardImportController.php',
|
||||||
|
'PhabricatorProjectBoardManageController' => 'applications/project/controller/PhabricatorProjectBoardManageController.php',
|
||||||
'PhabricatorProjectBoardReorderController' => 'applications/project/controller/PhabricatorProjectBoardReorderController.php',
|
'PhabricatorProjectBoardReorderController' => 'applications/project/controller/PhabricatorProjectBoardReorderController.php',
|
||||||
'PhabricatorProjectBoardViewController' => 'applications/project/controller/PhabricatorProjectBoardViewController.php',
|
'PhabricatorProjectBoardViewController' => 'applications/project/controller/PhabricatorProjectBoardViewController.php',
|
||||||
'PhabricatorProjectCardView' => 'applications/project/view/PhabricatorProjectCardView.php',
|
'PhabricatorProjectCardView' => 'applications/project/view/PhabricatorProjectCardView.php',
|
||||||
|
@ -7300,6 +7301,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorProjectBoardController' => 'PhabricatorProjectController',
|
'PhabricatorProjectBoardController' => 'PhabricatorProjectController',
|
||||||
'PhabricatorProjectBoardDisableController' => 'PhabricatorProjectBoardController',
|
'PhabricatorProjectBoardDisableController' => 'PhabricatorProjectBoardController',
|
||||||
'PhabricatorProjectBoardImportController' => 'PhabricatorProjectBoardController',
|
'PhabricatorProjectBoardImportController' => 'PhabricatorProjectBoardController',
|
||||||
|
'PhabricatorProjectBoardManageController' => 'PhabricatorProjectBoardController',
|
||||||
'PhabricatorProjectBoardReorderController' => 'PhabricatorProjectBoardController',
|
'PhabricatorProjectBoardReorderController' => 'PhabricatorProjectBoardController',
|
||||||
'PhabricatorProjectBoardViewController' => 'PhabricatorProjectBoardController',
|
'PhabricatorProjectBoardViewController' => 'PhabricatorProjectBoardController',
|
||||||
'PhabricatorProjectCardView' => 'AphrontTagView',
|
'PhabricatorProjectCardView' => 'AphrontTagView',
|
||||||
|
|
|
@ -84,6 +84,8 @@ final class PhabricatorProjectApplication extends PhabricatorApplication {
|
||||||
=> 'PhabricatorProjectBoardReorderController',
|
=> 'PhabricatorProjectBoardReorderController',
|
||||||
'disable/'
|
'disable/'
|
||||||
=> 'PhabricatorProjectBoardDisableController',
|
=> 'PhabricatorProjectBoardDisableController',
|
||||||
|
'manage/'
|
||||||
|
=> 'PhabricatorProjectBoardManageController',
|
||||||
),
|
),
|
||||||
'update/(?P<id>[1-9]\d*)/(?P<action>[^/]+)/'
|
'update/(?P<id>[1-9]\d*)/(?P<action>[^/]+)/'
|
||||||
=> 'PhabricatorProjectUpdateController',
|
=> 'PhabricatorProjectUpdateController',
|
||||||
|
|
|
@ -0,0 +1,155 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
final class PhabricatorProjectBoardManageController
|
||||||
|
extends PhabricatorProjectBoardController {
|
||||||
|
|
||||||
|
public function handleRequest(AphrontRequest $request) {
|
||||||
|
$viewer = $request->getViewer();
|
||||||
|
$board_id = $request->getURIData('projectID');
|
||||||
|
|
||||||
|
$board = id(new PhabricatorProjectQuery())
|
||||||
|
->setViewer($viewer)
|
||||||
|
->withIDs(array($board_id))
|
||||||
|
->needImages(true)
|
||||||
|
->executeOne();
|
||||||
|
if (!$board) {
|
||||||
|
return new Aphront404Response();
|
||||||
|
}
|
||||||
|
$this->setProject($board);
|
||||||
|
|
||||||
|
// Perform layout of no tasks to load and populate the columns in the
|
||||||
|
// correct order.
|
||||||
|
$layout_engine = id(new PhabricatorBoardLayoutEngine())
|
||||||
|
->setViewer($viewer)
|
||||||
|
->setBoardPHIDs(array($board->getPHID()))
|
||||||
|
->setObjectPHIDs(array())
|
||||||
|
->setFetchAllBoards(true)
|
||||||
|
->executeLayout();
|
||||||
|
|
||||||
|
$columns = $layout_engine->getColumns($board->getPHID());
|
||||||
|
|
||||||
|
$board_id = $board->getID();
|
||||||
|
|
||||||
|
$header = $this->buildHeaderView($board);
|
||||||
|
$actions = $this->buildActionView($board);
|
||||||
|
$properties = $this->buildPropertyView($board);
|
||||||
|
|
||||||
|
$properties->setActionList($actions);
|
||||||
|
|
||||||
|
$crumbs = $this->buildApplicationCrumbs();
|
||||||
|
$crumbs->addTextCrumb(pht('Workboard'), "/project/board/{$board_id}/");
|
||||||
|
$crumbs->addTextCrumb(pht('Manage'));
|
||||||
|
|
||||||
|
$box = id(new PHUIObjectBoxView())
|
||||||
|
->setHeader($header)
|
||||||
|
->addPropertyList($properties);
|
||||||
|
|
||||||
|
$nav = $this->getProfileMenu();
|
||||||
|
|
||||||
|
$title = array(
|
||||||
|
pht('Manage Workboard'),
|
||||||
|
$board->getDisplayName(),
|
||||||
|
);
|
||||||
|
|
||||||
|
$columns_list = $this->buildColumnsList($board, $columns);
|
||||||
|
|
||||||
|
return $this->newPage()
|
||||||
|
->setTitle($title)
|
||||||
|
->setNavigation($nav)
|
||||||
|
->setCrumbs($crumbs)
|
||||||
|
->appendChild(
|
||||||
|
array(
|
||||||
|
$box,
|
||||||
|
$columns_list,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
private function buildHeaderView(PhabricatorProject $board) {
|
||||||
|
$viewer = $this->getRequest()->getUser();
|
||||||
|
|
||||||
|
$header = id(new PHUIHeaderView())
|
||||||
|
->setUser($viewer)
|
||||||
|
->setHeader(pht('Workboard: %s', $board->getDisplayName()));
|
||||||
|
|
||||||
|
return $header;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function buildActionView(PhabricatorProject $board) {
|
||||||
|
$viewer = $this->getRequest()->getUser();
|
||||||
|
$id = $board->getID();
|
||||||
|
|
||||||
|
$actions = id(new PhabricatorActionListView())
|
||||||
|
->setUser($viewer);
|
||||||
|
|
||||||
|
$can_edit = PhabricatorPolicyFilter::hasCapability(
|
||||||
|
$viewer,
|
||||||
|
$board,
|
||||||
|
PhabricatorPolicyCapability::CAN_EDIT);
|
||||||
|
|
||||||
|
$reorder_uri = $this->getApplicationURI("board/{$id}/reorder/");
|
||||||
|
|
||||||
|
$actions->addAction(
|
||||||
|
id(new PhabricatorActionView())
|
||||||
|
->setIcon('fa-exchange')
|
||||||
|
->setName(pht('Reorder Columns'))
|
||||||
|
->setHref($reorder_uri)
|
||||||
|
->setDisabled(!$can_edit)
|
||||||
|
->setWorkflow(true));
|
||||||
|
|
||||||
|
$disable_uri = $this->getApplicationURI("board/{$id}/disable/");
|
||||||
|
|
||||||
|
$actions->addAction(
|
||||||
|
id(new PhabricatorActionView())
|
||||||
|
->setIcon('fa-ban')
|
||||||
|
->setName(pht('Disable Board'))
|
||||||
|
->setHref($disable_uri)
|
||||||
|
->setDisabled(!$can_edit)
|
||||||
|
->setWorkflow(true));
|
||||||
|
|
||||||
|
return $actions;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function buildPropertyView(
|
||||||
|
PhabricatorProject $board) {
|
||||||
|
$viewer = $this->getRequest()->getUser();
|
||||||
|
|
||||||
|
$properties = id(new PHUIPropertyListView())
|
||||||
|
->setUser($viewer)
|
||||||
|
->setObject($board);
|
||||||
|
|
||||||
|
return $properties;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function buildColumnsList(
|
||||||
|
PhabricatorProject $board,
|
||||||
|
array $columns) {
|
||||||
|
assert_instances_of($columns, 'PhabricatorProjectColumn');
|
||||||
|
|
||||||
|
$board_id = $board->getID();
|
||||||
|
|
||||||
|
$view = id(new PHUIObjectItemListView())
|
||||||
|
->setNoDataString(pht('This board has no columns.'));
|
||||||
|
|
||||||
|
foreach ($columns as $column) {
|
||||||
|
$column_id = $column->getID();
|
||||||
|
|
||||||
|
$detail_uri = "/project/board/{$board_id}/column/{$column_id}/";
|
||||||
|
|
||||||
|
$item = id(new PHUIObjectItemView())
|
||||||
|
->setHeader($column->getDisplayName())
|
||||||
|
->setHref($detail_uri);
|
||||||
|
|
||||||
|
if ($column->isHidden()) {
|
||||||
|
$item->setDisabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
$view->addItem($item);
|
||||||
|
}
|
||||||
|
|
||||||
|
return id(new PHUIObjectBoxView())
|
||||||
|
->setHeaderText(pht('Columns'))
|
||||||
|
->setObjectList($view);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -23,13 +23,13 @@ final class PhabricatorProjectBoardReorderController
|
||||||
$this->setProject($project);
|
$this->setProject($project);
|
||||||
$project_id = $project->getID();
|
$project_id = $project->getID();
|
||||||
|
|
||||||
$board_uri = $this->getApplicationURI("board/{$project_id}/");
|
$manage_uri = $this->getApplicationURI("board/{$project_id}/manage/");
|
||||||
$reorder_uri = $this->getApplicationURI("board/{$project_id}/reorder/");
|
$reorder_uri = $this->getApplicationURI("board/{$project_id}/reorder/");
|
||||||
|
|
||||||
if ($request->isFormPost()) {
|
if ($request->isFormPost()) {
|
||||||
// User clicked "Done", make sure the page reloads to show the new
|
// User clicked "Done", make sure the page reloads to show the new
|
||||||
// column order.
|
// column order.
|
||||||
return id(new AphrontRedirectResponse())->setURI($board_uri);
|
return id(new AphrontRedirectResponse())->setURI($manage_uri);
|
||||||
}
|
}
|
||||||
|
|
||||||
$columns = id(new PhabricatorProjectColumnQuery())
|
$columns = id(new PhabricatorProjectColumnQuery())
|
||||||
|
|
|
@ -680,9 +680,8 @@ final class PhabricatorProjectBoardViewController
|
||||||
|
|
||||||
$id = $project->getID();
|
$id = $project->getID();
|
||||||
|
|
||||||
$disable_uri = $this->getApplicationURI("board/{$id}/disable/");
|
$manage_uri = $this->getApplicationURI("board/{$id}/manage/");
|
||||||
$add_uri = $this->getApplicationURI("board/{$id}/edit/");
|
$add_uri = $this->getApplicationURI("board/{$id}/edit/");
|
||||||
$reorder_uri = $this->getApplicationURI("board/{$id}/reorder/");
|
|
||||||
|
|
||||||
$can_edit = PhabricatorPolicyFilter::hasCapability(
|
$can_edit = PhabricatorPolicyFilter::hasCapability(
|
||||||
$viewer,
|
$viewer,
|
||||||
|
@ -699,11 +698,9 @@ final class PhabricatorProjectBoardViewController
|
||||||
->setWorkflow(true);
|
->setWorkflow(true);
|
||||||
|
|
||||||
$manage_items[] = id(new PhabricatorActionView())
|
$manage_items[] = id(new PhabricatorActionView())
|
||||||
->setIcon('fa-exchange')
|
->setIcon('fa-pencil')
|
||||||
->setName(pht('Reorder Columns'))
|
->setName(pht('Manage Board'))
|
||||||
->setHref($reorder_uri)
|
->setHref($manage_uri);
|
||||||
->setDisabled(!$can_edit)
|
|
||||||
->setWorkflow(true);
|
|
||||||
|
|
||||||
if ($show_hidden) {
|
if ($show_hidden) {
|
||||||
$hidden_uri = $this->getURIWithState()
|
$hidden_uri = $this->getURIWithState()
|
||||||
|
@ -735,13 +732,6 @@ final class PhabricatorProjectBoardViewController
|
||||||
->setHref($batch_edit_uri)
|
->setHref($batch_edit_uri)
|
||||||
->setDisabled(!$can_batch_edit);
|
->setDisabled(!$can_batch_edit);
|
||||||
|
|
||||||
$manage_items[] = id(new PhabricatorActionView())
|
|
||||||
->setIcon('fa-ban')
|
|
||||||
->setName(pht('Disable Workboard'))
|
|
||||||
->setHref($disable_uri)
|
|
||||||
->setWorkflow(true)
|
|
||||||
->setDisabled(!$can_edit);
|
|
||||||
|
|
||||||
$manage_menu = id(new PhabricatorActionListView())
|
$manage_menu = id(new PhabricatorActionListView())
|
||||||
->setUser($viewer);
|
->setUser($viewer);
|
||||||
foreach ($manage_items as $item) {
|
foreach ($manage_items as $item) {
|
||||||
|
@ -826,14 +816,6 @@ final class PhabricatorProjectBoardViewController
|
||||||
->setHref($batch_edit_uri)
|
->setHref($batch_edit_uri)
|
||||||
->setDisabled(!$can_batch_edit);
|
->setDisabled(!$can_batch_edit);
|
||||||
|
|
||||||
$detail_uri = $this->getApplicationURI(
|
|
||||||
'board/'.$this->id.'/column/'.$column->getID().'/');
|
|
||||||
|
|
||||||
$column_items[] = id(new PhabricatorActionView())
|
|
||||||
->setIcon('fa-columns')
|
|
||||||
->setName(pht('Column Details'))
|
|
||||||
->setHref($detail_uri);
|
|
||||||
|
|
||||||
$can_hide = ($can_edit && !$column->isDefaultColumn());
|
$can_hide = ($can_edit && !$column->isDefaultColumn());
|
||||||
$hide_uri = 'board/'.$this->id.'/hide/'.$column->getID().'/';
|
$hide_uri = 'board/'.$this->id.'/hide/'.$column->getID().'/';
|
||||||
$hide_uri = $this->getApplicationURI($hide_uri);
|
$hide_uri = $this->getApplicationURI($hide_uri);
|
||||||
|
|
Loading…
Reference in a new issue