Differential D14904 Diff 36033 src/applications/project/controller/PhabricatorProjectEditController.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/project/controller/PhabricatorProjectEditController.php
<?php | <?php | ||||
final class PhabricatorProjectEditController | final class PhabricatorProjectEditController | ||||
extends PhabricatorProjectController { | extends PhabricatorProjectController { | ||||
private $engine; | |||||
public function setEngine(PhabricatorProjectEditEngine $engine) { | |||||
$this->engine = $engine; | |||||
return $this; | |||||
} | |||||
public function getEngine() { | |||||
return $this->engine; | |||||
} | |||||
public function handleRequest(AphrontRequest $request) { | public function handleRequest(AphrontRequest $request) { | ||||
return id(new PhabricatorProjectEditEngine()) | $viewer = $this->getViewer(); | ||||
->setController($this) | |||||
->buildResponse(); | $engine = id(new PhabricatorProjectEditEngine()) | ||||
->setController($this); | |||||
$this->setEngine($engine); | |||||
$id = $request->getURIData('id'); | |||||
if (!$id) { | |||||
$parent_id = head($request->getArr('parent')); | |||||
if (!$parent_id) { | |||||
$parent_id = $request->getStr('parent'); | |||||
} | |||||
if ($parent_id) { | |||||
$is_milestone = false; | |||||
} else { | |||||
$parent_id = head($request->getArr('milestone')); | |||||
if (!$parent_id) { | |||||
$parent_id = $request->getStr('milestone'); | |||||
} | |||||
$is_milestone = true; | |||||
} | |||||
if ($parent_id) { | |||||
$query = id(new PhabricatorProjectQuery()) | |||||
->setViewer($viewer) | |||||
->requireCapabilities( | |||||
array( | |||||
PhabricatorPolicyCapability::CAN_VIEW, | |||||
PhabricatorPolicyCapability::CAN_EDIT, | |||||
)); | |||||
if (ctype_digit($parent_id)) { | |||||
$query->withIDs(array($parent_id)); | |||||
} else { | |||||
$query->withPHIDs(array($parent_id)); | |||||
} | |||||
$parent = $query->executeOne(); | |||||
if ($is_milestone) { | |||||
if (!$parent->supportsMilestones()) { | |||||
$cancel_uri = "/project/milestones/{$parent_id}/"; | |||||
return $this->newDialog() | |||||
->setTitle(pht('No Milestones')) | |||||
->appendParagraph( | |||||
pht('You can not add milestones to this project.')) | |||||
->addCancelButton($cancel_uri); | |||||
} | |||||
$engine->setMilestoneProject($parent); | |||||
} else { | |||||
if (!$parent->supportsSubprojects()) { | |||||
$cancel_uri = "/project/subprojects/{$parent_id}/"; | |||||
return $this->newDialog() | |||||
->setTitle(pht('No Subprojects')) | |||||
->appendParagraph( | |||||
pht('You can not add subprojects to this project.')) | |||||
->addCancelButton($cancel_uri); | |||||
} | |||||
$engine->setParentProject($parent); | |||||
} | |||||
$this->setProject($parent); | |||||
} | |||||
} | |||||
return $engine->buildResponse(); | |||||
} | |||||
protected function buildApplicationCrumbs() { | |||||
$crumbs = parent::buildApplicationCrumbs(); | |||||
$engine = $this->getEngine(); | |||||
if ($engine) { | |||||
$parent = $engine->getParentProject(); | |||||
if ($parent) { | |||||
$id = $parent->getID(); | |||||
$crumbs->addTextCrumb( | |||||
pht('Subprojects'), | |||||
$this->getApplicationURI("subprojects/{$id}/")); | |||||
} | |||||
$milestone = $engine->getMilestoneProject(); | |||||
if ($milestone) { | |||||
$id = $milestone->getID(); | |||||
$crumbs->addTextCrumb( | |||||
pht('Milestones'), | |||||
$this->getApplicationURI("milestones/{$id}/")); | |||||
} | |||||
} | |||||
return $crumbs; | |||||
} | } | ||||
} | } |