From 2f054edfa22ea40ce3179688fce25d0c618d6c98 Mon Sep 17 00:00:00 2001 From: June Rhodes Date: Fri, 12 Feb 2016 05:03:43 -0800 Subject: [PATCH] Hide milestone columns when milestone is archived Summary: Fixes T10310. This replaces the "Hide Column" / "Show Column" option for milestone columns with one that archives/unarchives, and hides milestone columns when the milestone project is archived. Test Plan: - Hid and unhid a normal column (got normal dialogs). - Hid and unhid a milestone column (got "archive project" dialogs, underlying project archived/unarchived, column vanished). Reviewers: hach-que, #blessed_reviewers, chad Reviewed By: #blessed_reviewers, chad Subscribers: jcowgar, Korvin Maniphest Tasks: T10310 Differential Revision: https://secure.phabricator.com/D15231 --- ...PhabricatorProjectColumnHideController.php | 96 +++++++++++++------ .../storage/PhabricatorProjectColumn.php | 5 + 2 files changed, 72 insertions(+), 29 deletions(-) diff --git a/src/applications/project/controller/PhabricatorProjectColumnHideController.php b/src/applications/project/controller/PhabricatorProjectColumnHideController.php index ae39e783bb..41665ea6f8 100644 --- a/src/applications/project/controller/PhabricatorProjectColumnHideController.php +++ b/src/applications/project/controller/PhabricatorProjectColumnHideController.php @@ -52,42 +52,80 @@ final class PhabricatorProjectColumnHideController ->addCancelButton($view_uri, pht('Okay')); } + $proxy = $column->getProxy(); + if ($request->isFormPost()) { - if ($column->isHidden()) { - $new_status = PhabricatorProjectColumn::STATUS_ACTIVE; + if ($proxy) { + if ($proxy->isArchived()) { + $new_status = PhabricatorProjectStatus::STATUS_ACTIVE; + } else { + $new_status = PhabricatorProjectStatus::STATUS_ARCHIVED; + } + + $xactions = array(); + + $xactions[] = id(new PhabricatorProjectTransaction()) + ->setTransactionType(PhabricatorProjectTransaction::TYPE_STATUS) + ->setNewValue($new_status); + + id(new PhabricatorProjectTransactionEditor()) + ->setActor($viewer) + ->setContentSourceFromRequest($request) + ->setContinueOnNoEffect(true) + ->setContinueOnMissingFields(true) + ->applyTransactions($proxy, $xactions); } else { - $new_status = PhabricatorProjectColumn::STATUS_HIDDEN; + if ($column->isHidden()) { + $new_status = PhabricatorProjectColumn::STATUS_ACTIVE; + } else { + $new_status = PhabricatorProjectColumn::STATUS_HIDDEN; + } + + $type_status = PhabricatorProjectColumnTransaction::TYPE_STATUS; + $xactions = array( + id(new PhabricatorProjectColumnTransaction()) + ->setTransactionType($type_status) + ->setNewValue($new_status), + ); + + $editor = id(new PhabricatorProjectColumnTransactionEditor()) + ->setActor($viewer) + ->setContinueOnNoEffect(true) + ->setContentSourceFromRequest($request) + ->applyTransactions($column, $xactions); } - $type_status = PhabricatorProjectColumnTransaction::TYPE_STATUS; - $xactions = array( - id(new PhabricatorProjectColumnTransaction()) - ->setTransactionType($type_status) - ->setNewValue($new_status), - ); - - $editor = id(new PhabricatorProjectColumnTransactionEditor()) - ->setActor($viewer) - ->setContinueOnNoEffect(true) - ->setContentSourceFromRequest($request) - ->applyTransactions($column, $xactions); - return id(new AphrontRedirectResponse())->setURI($view_uri); } - if ($column->isHidden()) { - $title = pht('Show Column'); + if ($proxy) { + if ($column->isHidden()) { + $title = pht('Activate and Show Column'); + $body = pht( + 'This column is hidden because it represents an archived '. + 'subproject. Do you want to activate the subproject so the '. + 'column is visible again?'); + $button = pht('Activate Subproject'); + } else { + $title = pht('Archive and Hide Column'); + $body = pht( + 'This column is visible because it represents an active '. + 'subproject. Do you want to hide the column by archiving the '. + 'subproject?'); + $button = pht('Archive Subproject'); + } } else { - $title = pht('Hide Column'); - } - - if ($column->isHidden()) { - $body = pht( - 'Are you sure you want to show this column?'); - } else { - $body = pht( - 'Are you sure you want to hide this column? It will no longer '. - 'appear on the workboard.'); + if ($column->isHidden()) { + $title = pht('Show Column'); + $body = pht('Are you sure you want to show this column?'); + $button = pht('Show Column'); + } else { + $title = pht('Hide Column'); + $body = pht( + 'Are you sure you want to hide this column? It will no longer '. + 'appear on the workboard.'); + $button = pht('Hide Column'); + } } $dialog = $this->newDialog() @@ -96,7 +134,7 @@ final class PhabricatorProjectColumnHideController ->appendChild($body) ->setDisableWorkflowOnCancel(true) ->addCancelButton($view_uri) - ->addSubmitButton($title); + ->addSubmitButton($button); foreach ($request->getPassthroughRequestData() as $key => $value) { $dialog->addHiddenInput($key, $value); diff --git a/src/applications/project/storage/PhabricatorProjectColumn.php b/src/applications/project/storage/PhabricatorProjectColumn.php index 0ab6ec89c0..4092ca7fa8 100644 --- a/src/applications/project/storage/PhabricatorProjectColumn.php +++ b/src/applications/project/storage/PhabricatorProjectColumn.php @@ -86,6 +86,11 @@ final class PhabricatorProjectColumn } public function isHidden() { + $proxy = $this->getProxy(); + if ($proxy) { + return $proxy->isArchived(); + } + return ($this->getStatus() == self::STATUS_HIDDEN); }