diff --git a/src/applications/project/engine/PhabricatorProjectEditEngine.php b/src/applications/project/engine/PhabricatorProjectEditEngine.php index a7702c345f..5eb6b49b87 100644 --- a/src/applications/project/engine/PhabricatorProjectEditEngine.php +++ b/src/applications/project/engine/PhabricatorProjectEditEngine.php @@ -51,7 +51,11 @@ final class PhabricatorProjectEditEngine } protected function newEditableObject() { - return PhabricatorProject::initializeNewProject($this->getViewer()); + $parent = nonempty($this->parentProject, $this->milestoneProject); + + return PhabricatorProject::initializeNewProject( + $this->getViewer(), + $parent); } protected function newObjectQuery() { @@ -112,6 +116,7 @@ final class PhabricatorProjectEditEngine PhabricatorTransactions::TYPE_VIEW_POLICY, PhabricatorTransactions::TYPE_EDIT_POLICY, PhabricatorTransactions::TYPE_JOIN_POLICY, + PhabricatorTransactions::TYPE_SPACE, PhabricatorProjectIconTransaction::TRANSACTIONTYPE, PhabricatorProjectColorTransaction::TRANSACTIONTYPE, ); diff --git a/src/applications/project/storage/PhabricatorProject.php b/src/applications/project/storage/PhabricatorProject.php index aa035aedf5..a049354ad7 100644 --- a/src/applications/project/storage/PhabricatorProject.php +++ b/src/applications/project/storage/PhabricatorProject.php @@ -61,7 +61,10 @@ final class PhabricatorProject extends PhabricatorProjectDAO const ITEM_MILESTONES = 'project.milestones'; const ITEM_SUBPROJECTS = 'project.subprojects'; - public static function initializeNewProject(PhabricatorUser $actor) { + public static function initializeNewProject( + PhabricatorUser $actor, + PhabricatorProject $parent = null) { + $app = id(new PhabricatorApplicationQuery()) ->setViewer(PhabricatorUser::getOmnipotentUser()) ->withClasses(array('PhabricatorProjectApplication')) @@ -74,6 +77,14 @@ final class PhabricatorProject extends PhabricatorProjectDAO $join_policy = $app->getPolicy( ProjectDefaultJoinCapability::CAPABILITY); + // If this is the child of some other project, default the Space to the + // Space of the parent. + if ($parent) { + $space_phid = $parent->getSpacePHID(); + } else { + $space_phid = $actor->getDefaultSpacePHID(); + } + $default_icon = PhabricatorProjectIconSet::getDefaultIconKey(); $default_color = PhabricatorProjectIconSet::getDefaultColorKey(); @@ -84,7 +95,7 @@ final class PhabricatorProject extends PhabricatorProjectDAO ->setViewPolicy($view_policy) ->setEditPolicy($edit_policy) ->setJoinPolicy($join_policy) - ->setSpacePHID($actor->getDefaultSpacePHID()) + ->setSpacePHID($space_phid) ->setIsMembershipLocked(0) ->attachMemberPHIDs(array()) ->attachSlugs(array()) @@ -704,6 +715,9 @@ final class PhabricatorProject extends PhabricatorProjectDAO public function getSpacePHID() { + if ($this->isMilestone()) { + return $this->getParentProject()->getSpacePHID(); + } return $this->spacePHID; }