diff --git a/src/applications/project/controller/PhabricatorProjectBoardDeleteController.php b/src/applications/project/controller/PhabricatorProjectBoardDeleteController.php index 31302ce8d8..019bc65228 100644 --- a/src/applications/project/controller/PhabricatorProjectBoardDeleteController.php +++ b/src/applications/project/controller/PhabricatorProjectBoardDeleteController.php @@ -42,10 +42,17 @@ final class PhabricatorProjectBoardDeleteController } $column_phid = $column->getPHID(); - $view_uri = $this->getApplicationURI( '/board/'.$this->projectID.'/column/'.$this->id.'/'); + if ($column->isDefaultColumn()) { + return $this->newDialog() + ->setTitle(pht('Can Not Hide Default Column')) + ->appendParagraph( + pht('You can not hide the default/backlog column on a board.')) + ->addCancelButton($view_uri, pht('Okay')); + } + if ($request->isFormPost()) { if ($column->isHidden()) { $new_status = PhabricatorProjectColumn::STATUS_ACTIVE; diff --git a/src/applications/project/controller/PhabricatorProjectBoardEditController.php b/src/applications/project/controller/PhabricatorProjectBoardEditController.php index 5520f126b3..af674898e3 100644 --- a/src/applications/project/controller/PhabricatorProjectBoardEditController.php +++ b/src/applications/project/controller/PhabricatorProjectBoardEditController.php @@ -111,9 +111,11 @@ final class PhabricatorProjectBoardEditController if ($is_new) { $title = pht('Create Column'); $submit = pht('Create Column'); + $crumb_text = pht('Create Column'); } else { - $title = pht('Edit %s', $column->getName()); + $title = pht('Edit %s', $column->getDisplayName()); $submit = pht('Save Column'); + $crumb_text = pht('Edit'); } $form->appendChild( @@ -125,7 +127,14 @@ final class PhabricatorProjectBoardEditController $crumbs->addTextCrumb( pht('Board'), $this->getApplicationURI('board/'.$project->getID().'/')); - $crumbs->addTextCrumb($title); + + if (!$is_new) { + $crumbs->addTextCrumb( + $column->getDisplayName(), + $view_uri); + } + + $crumbs->addTextCrumb($crumb_text); $form_box = id(new PHUIObjectBoxView()) ->setHeaderText($title) diff --git a/src/applications/project/controller/PhabricatorProjectBoardViewController.php b/src/applications/project/controller/PhabricatorProjectBoardViewController.php index 81aa482db6..f0450aa6b8 100644 --- a/src/applications/project/controller/PhabricatorProjectBoardViewController.php +++ b/src/applications/project/controller/PhabricatorProjectBoardViewController.php @@ -175,9 +175,7 @@ final class PhabricatorProjectBoardViewController ->setHeader($column->getDisplayName()) ->setHeaderColor($column->getHeaderColor()); - if (!$column->isDefaultColumn()) { - $panel->setEditURI($board_uri.'column/'.$column->getID().'/'); - } + $panel->setEditURI($board_uri.'column/'.$column->getID().'/'); $panel->setHeaderAction(id(new PHUIIconView()) ->setIconFont('fa-plus') diff --git a/src/applications/project/controller/PhabricatorProjectColumnDetailController.php b/src/applications/project/controller/PhabricatorProjectColumnDetailController.php index d86c01741f..ae519c70cb 100644 --- a/src/applications/project/controller/PhabricatorProjectColumnDetailController.php +++ b/src/applications/project/controller/PhabricatorProjectColumnDetailController.php @@ -54,7 +54,7 @@ final class PhabricatorProjectColumnDetailController ->setObjectPHID($column->getPHID()) ->setTransactions($xactions); - $title = pht('%s', $column->getName()); + $title = pht('%s', $column->getDisplayName()); $crumbs = $this->buildApplicationCrumbs(); $crumbs->addTextCrumb( pht('Board'), @@ -85,7 +85,7 @@ final class PhabricatorProjectColumnDetailController $header = id(new PHUIHeaderView()) ->setUser($viewer) - ->setHeader($column->getName()) + ->setHeader($column->getDisplayName()) ->setPolicyObject($column); if ($column->isHidden()) { @@ -119,13 +119,15 @@ final class PhabricatorProjectColumnDetailController ->setDisabled(!$can_edit) ->setWorkflow(!$can_edit)); + $can_hide = ($can_edit && !$column->isDefaultColumn()); + if (!$column->isHidden()) { $actions->addAction( id(new PhabricatorActionView()) ->setName(pht('Hide Column')) ->setIcon('fa-eye-slash') ->setHref($this->getApplicationURI($base_uri.'delete/'.$id.'/')) - ->setDisabled(!$can_edit) + ->setDisabled(!$can_hide) ->setWorkflow(true)); } else { $actions->addAction( @@ -133,7 +135,7 @@ final class PhabricatorProjectColumnDetailController ->setName(pht('Show Column')) ->setIcon('fa-eye') ->setHref($this->getApplicationURI($base_uri.'delete/'.$id.'/')) - ->setDisabled(!$can_edit) + ->setDisabled(!$can_hide) ->setWorkflow(true)); } diff --git a/src/applications/project/editor/PhabricatorProjectColumnTransactionEditor.php b/src/applications/project/editor/PhabricatorProjectColumnTransactionEditor.php index 5107f400cf..7524eecfc5 100644 --- a/src/applications/project/editor/PhabricatorProjectColumnTransactionEditor.php +++ b/src/applications/project/editor/PhabricatorProjectColumnTransactionEditor.php @@ -81,7 +81,10 @@ final class PhabricatorProjectColumnTransactionEditor $object->getName(), $xactions); - if ($missing) { + // The default "Backlog" column is allowed to be unnamed, which + // means we use the default name. + + if ($missing && !$object->isDefaultColumn()) { $error = new PhabricatorApplicationTransactionValidationError( $type, pht('Required'), diff --git a/src/applications/project/storage/PhabricatorProjectColumn.php b/src/applications/project/storage/PhabricatorProjectColumn.php index 9f9d8940e9..8b7d79dc7b 100644 --- a/src/applications/project/storage/PhabricatorProjectColumn.php +++ b/src/applications/project/storage/PhabricatorProjectColumn.php @@ -50,10 +50,16 @@ final class PhabricatorProjectColumn } public function getDisplayName() { + $name = $this->getName(); + if (strlen($name)) { + return $name; + } + if ($this->isDefaultColumn()) { return pht('Backlog'); } - return $this->getName(); + + return pht('Unnamed Column'); } public function getHeaderColor() { diff --git a/src/applications/project/storage/PhabricatorProjectColumnTransaction.php b/src/applications/project/storage/PhabricatorProjectColumnTransaction.php index 4fdd8d2de6..71fc47279e 100644 --- a/src/applications/project/storage/PhabricatorProjectColumnTransaction.php +++ b/src/applications/project/storage/PhabricatorProjectColumnTransaction.php @@ -21,16 +21,27 @@ final class PhabricatorProjectColumnTransaction switch ($this->getTransactionType()) { case PhabricatorProjectColumnTransaction::TYPE_NAME: - if (!strlen($old)) { + if ($old === null) { return pht( '%s created this column.', $author_handle); } else { - return pht( - '%s renamed this column from "%s" to "%s".', - $author_handle, - $old, - $new); + if (!strlen($old)) { + return pht( + '%s named this column "%s".', + $author_handle, + $new); + } else if (strlen($new)) { + return pht( + '%s renamed this column from "%s" to "%s".', + $author_handle, + $old, + $new); + } else { + return pht( + '%s removed the custom name of this column.', + $author_handle); + } } case PhabricatorProjectColumnTransaction::TYPE_STATUS: switch ($new) {