Page MenuHomePhorge

D25066.1734624225.diff
No OneTemporary

D25066.1734624225.diff

diff --git a/src/applications/project/controller/PhabricatorProjectColumnEditController.php b/src/applications/project/controller/PhabricatorProjectColumnEditController.php
--- a/src/applications/project/controller/PhabricatorProjectColumnEditController.php
+++ b/src/applications/project/controller/PhabricatorProjectColumnEditController.php
@@ -45,17 +45,36 @@
$e_name = null;
$e_limit = null;
+ $e_milestone_name = null;
$v_limit = $column->getPointLimit();
$v_name = $column->getName();
+ $proxy = $column->getProxy();
+
+ // Is this a normal Column? Example: when true, this is not a Milestone.
+ $is_column = !$proxy;
+
+ // Is this a Milestone? Example: when true, this is not a normal Column.
+ $is_milestone = $proxy && $proxy->isMilestone();
+
+ // Milestone name eventually coming from the proxed object
+ $v_milestone_name = null;
+ if ($is_milestone) {
+ $v_milestone_name = $proxy->getName();
+ }
+
$validation_exception = null;
$view_uri = $project->getWorkboardURI();
if ($request->isFormPost()) {
+ // Name and Limit for the normal Column
$v_name = $request->getStr('name');
$v_limit = $request->getStr('limit');
+ // In case of a Milestone, eventual Name.
+ $v_milestone_name = $request->getStr('milestone.name');
+
if ($is_new) {
$column->setProjectPHID($project->getPHID());
$column->attachProject($project);
@@ -73,17 +92,26 @@
$column->setSequence($new_sequence);
}
+ // New Transactions for a normal Column, plus eventually its Milestone
$xactions = array();
+ $xactions_milestone = array();
$type_name = PhabricatorProjectColumnNameTransaction::TRANSACTIONTYPE;
$type_limit = PhabricatorProjectColumnLimitTransaction::TRANSACTIONTYPE;
- if (!$column->getProxy()) {
+ // Transaction for Column Name. It has no sense on a Milestone.
+ if ($is_column) {
$xactions[] = id(new PhabricatorProjectColumnTransaction())
->setTransactionType($type_name)
->setNewValue($v_name);
+ } else if ($is_milestone) {
+ $type_project_name = PhabricatorProjectNameTransaction::TRANSACTIONTYPE;
+ $xactions_milestone[] = id(new PhabricatorProjectTransaction())
+ ->setTransactionType($type_project_name)
+ ->setNewValue($v_milestone_name);
}
+ // Transaction for Column Points. Has sense for both Column and Milestone.
$xactions[] = id(new PhabricatorProjectColumnTransaction())
->setTransactionType($type_limit)
->setNewValue($v_limit);
@@ -94,26 +122,55 @@
->setContinueOnNoEffect(true)
->setContentSourceFromRequest($request)
->applyTransactions($column, $xactions);
- return id(new AphrontRedirectResponse())->setURI($view_uri);
} catch (PhabricatorApplicationTransactionValidationException $ex) {
+ // Error messages related to the Column (like invalid Name, etc.)
$e_name = $ex->getShortMessage($type_name);
$e_limit = $ex->getShortMessage($type_limit);
$validation_exception = $ex;
}
+
+ // Eventually save Milestone-related stuff
+ if ($validation_exception === null && $xactions_milestone) {
+ try {
+ $editor_milestone = id(new PhabricatorProjectTransactionEditor())
+ ->setActor($viewer)
+ ->setContinueOnNoEffect(true)
+ ->setContentSourceFromRequest($request)
+ ->applyTransactions($proxy, $xactions_milestone);
+ } catch (PhabricatorApplicationTransactionValidationException $ex) {
+ // Error messages related to the Milestone (like invalid Name, etc.)
+ $e_milestone_name = $ex->getShortMessage($type_project_name);
+ $validation_exception = $ex;
+ }
+ }
+
+ // Refresh the page only if there are no errors to show.
+ if ($validation_exception === null) {
+ return id(new AphrontRedirectResponse())->setURI($view_uri);
+ }
}
$form = id(new AphrontFormView())
->setUser($request->getUser());
- if (!$column->getProxy()) {
+ // Name input field for the most appropriate case (Column vs Milestone)
+ if ($is_column) {
$form->appendChild(
id(new AphrontFormTextControl())
->setValue($v_name)
->setLabel(pht('Name'))
->setName('name')
->setError($e_name));
+ } else if ($is_milestone) {
+ $form->appendChild(
+ id(new AphrontFormTextControl())
+ ->setValue($v_milestone_name)
+ ->setLabel(pht('Milestone Name'))
+ ->setName('milestone.name')
+ ->setError($e_milestone_name));
}
+ // Story Points input field
$form->appendChild(
id(new AphrontFormTextControl())
->setValue($v_limit)

File Metadata

Mime Type
text/plain
Expires
Thu, Dec 19, 16:03 (20 h, 2 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1015154
Default Alt Text
D25066.1734624225.diff (4 KB)

Event Timeline