Roughly implement milestone columns on workboards
Summary:
Ref T10010. These aren't perfect but I think (?) they aren't horribly broken.
- When a project is a parent project, destroy (as far as the user can tell) any custom columns.
- When a project has milestones, automatically generate columns on the project's workboard (if it has a workboard).
- When you move tasks between milestones, add the proper milestone tag.
- When you move tasks out of milestones back into the backlog, add the proper parent project tag.
- (Plenty of UI / design stuff to adjust.)
Test Plan:
- Dragged stuff between milestone columns.
- Used a normal workboard.
- Wasn't able to find any egregiously bad cases that did anything terrible.
{F1088224}
Reviewers: chad
Reviewed By: chad
Maniphest Tasks: T10010
Differential Revision: https://secure.phabricator.com/D15171
This commit is contained in:
@@ -95,17 +95,27 @@ final class PhabricatorProjectBoardViewController
|
||||
|
||||
$task_query = $search_engine->buildQueryFromSavedQuery($saved);
|
||||
|
||||
$select_phids = array($project->getPHID());
|
||||
if ($project->getHasSubprojects() || $project->getHasMilestones()) {
|
||||
$descendants = id(new PhabricatorProjectQuery())
|
||||
->setViewer($viewer)
|
||||
->withAncestorProjectPHIDs($select_phids)
|
||||
->execute();
|
||||
foreach ($descendants as $descendant) {
|
||||
$select_phids[] = $descendant->getPHID();
|
||||
}
|
||||
}
|
||||
|
||||
$tasks = $task_query
|
||||
->withEdgeLogicPHIDs(
|
||||
PhabricatorProjectObjectHasProjectEdgeType::EDGECONST,
|
||||
PhabricatorQueryConstraint::OPERATOR_AND,
|
||||
array($project->getPHID()))
|
||||
PhabricatorQueryConstraint::OPERATOR_ANCESTOR,
|
||||
array($select_phids))
|
||||
->setOrder(ManiphestTaskQuery::ORDER_PRIORITY)
|
||||
->setViewer($viewer)
|
||||
->execute();
|
||||
$tasks = mpull($tasks, null, 'getPHID');
|
||||
|
||||
|
||||
$board_phid = $project->getPHID();
|
||||
|
||||
$layout_engine = id(new PhabricatorBoardLayoutEngine())
|
||||
@@ -225,6 +235,13 @@ final class PhabricatorProjectBoardViewController
|
||||
}
|
||||
}
|
||||
|
||||
$proxy = $column->getProxy();
|
||||
if ($proxy && !$proxy->isMilestone()) {
|
||||
// TODO: For now, don't show subproject columns because we can't
|
||||
// handle tasks with multiple positions yet.
|
||||
continue;
|
||||
}
|
||||
|
||||
$task_phids = $layout_engine->getColumnObjectPHIDs(
|
||||
$board_phid,
|
||||
$column->getPHID());
|
||||
@@ -247,6 +264,11 @@ final class PhabricatorProjectBoardViewController
|
||||
$panel->setHeaderIcon($header_icon);
|
||||
}
|
||||
|
||||
$display_class = $column->getDisplayClass();
|
||||
if ($display_class) {
|
||||
$panel->addClass($display_class);
|
||||
}
|
||||
|
||||
if ($column->isHidden()) {
|
||||
$panel->addClass('project-panel-hidden');
|
||||
}
|
||||
@@ -582,6 +604,12 @@ final class PhabricatorProjectBoardViewController
|
||||
|
||||
$column_items = array();
|
||||
|
||||
if ($column->getProxyPHID()) {
|
||||
$default_phid = $column->getProxyPHID();
|
||||
} else {
|
||||
$default_phid = $column->getProjectPHID();
|
||||
}
|
||||
|
||||
$column_items[] = id(new PhabricatorActionView())
|
||||
->setIcon('fa-plus')
|
||||
->setName(pht('Create Task...'))
|
||||
@@ -590,6 +618,7 @@ final class PhabricatorProjectBoardViewController
|
||||
->setMetadata(
|
||||
array(
|
||||
'columnPHID' => $column->getPHID(),
|
||||
'projectPHID' => $default_phid,
|
||||
));
|
||||
|
||||
$batch_edit_uri = $request->getRequestURI();
|
||||
@@ -738,6 +767,10 @@ final class PhabricatorProjectBoardViewController
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Tailor this UI if the project is already a parent project. We
|
||||
// should not offer options for creating a parent project workboard, since
|
||||
// they can't have their own columns.
|
||||
|
||||
$new_selector = id(new AphrontFormRadioButtonControl())
|
||||
->setLabel(pht('Columns'))
|
||||
->setName('initialize-type')
|
||||
|
||||
Reference in New Issue
Block a user