Christopher Johnson (WMDE) has submitted this change and it was merged. Change subject: adds conduit methods to set and get start and end dates for a Sprint ......................................................................
adds conduit methods to set and get start and end dates for a Sprint Bug: T106815 Change-Id: Ib5d16432156c0f98c9b3c90dc0b4b8eed34ee363 --- M src/__phutil_library_map__.php M src/conduit/SprintConduitAPIMethod.php A src/conduit/SprintGetStartEndDatesConduitAPIMethod.php A src/conduit/SprintSetStartEndDatesConduitAPIMethod.php 4 files changed, 155 insertions(+), 1 deletion(-) Approvals: Christopher Johnson (WMDE): Verified; Looks good to me, approved diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index 20d42d8..f0a2754 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -51,6 +51,7 @@ 'SprintDefaultViewCapability' => 'capability/SprintDefaultViewCapability.php', 'SprintEndDateField' => 'customfield/SprintEndDateField.php', 'SprintGetIsSprintConduitAPIMethod' => 'conduit/SprintGetIsSprintConduitAPIMethod.php', + 'SprintGetStartEndDatesConduitAPIMethod' => 'conduit/SprintGetStartEndDatesConduitAPIMethod.php', 'SprintGetTaskProjectHistoryConduitAPIMethod' => 'conduit/SprintGetTaskProjectHistoryConduitAPIMethod.php', 'SprintHandleIconView' => 'view/SprintHandleIconView.php', 'SprintHistoryController' => 'controller/SprintHistoryController.php', @@ -70,6 +71,7 @@ 'SprintReportController' => 'controller/SprintReportController.php', 'SprintReportOpenTasksView' => 'view/reports/SprintReportOpenTasksView.php', 'SprintSetIsSprintConduitAPIMethod' => 'conduit/SprintSetIsSprintConduitAPIMethod.php', + 'SprintSetStartEndDatesConduitAPIMethod' => 'conduit/SprintSetStartEndDatesConduitAPIMethod.php', 'SprintStats' => 'storage/SprintStats.php', 'SprintStatsTest' => 'tests/SprintStatsTest.php', 'SprintTableView' => 'view/SprintTableView.php', @@ -121,6 +123,7 @@ 'SprintDefaultViewCapability' => 'PhabricatorPolicyCapability', 'SprintEndDateField' => 'SprintProjectCustomField', 'SprintGetIsSprintConduitAPIMethod' => 'SprintConduitAPIMethod', + 'SprintGetStartEndDatesConduitAPIMethod' => 'SprintConduitAPIMethod', 'SprintGetTaskProjectHistoryConduitAPIMethod' => 'SprintConduitAPIMethod', 'SprintHandleIconView' => 'AphrontTagView', 'SprintHistoryController' => 'SprintController', @@ -141,6 +144,7 @@ 'SprintReportController' => 'SprintController', 'SprintReportOpenTasksView' => 'SprintView', 'SprintSetIsSprintConduitAPIMethod' => 'SprintConduitAPIMethod', + 'SprintSetStartEndDatesConduitAPIMethod' => 'SprintConduitAPIMethod', 'SprintStatsTest' => 'SprintTestCase', 'SprintTableView' => 'AphrontView', 'SprintTaskStoryPointsField' => array( diff --git a/src/conduit/SprintConduitAPIMethod.php b/src/conduit/SprintConduitAPIMethod.php index c41a204..3b0cc56 100644 --- a/src/conduit/SprintConduitAPIMethod.php +++ b/src/conduit/SprintConduitAPIMethod.php @@ -11,6 +11,36 @@ return idx($results, $project->getPHID()); } + protected function buildSprintInfoDictionary(PhabricatorProject $project, $user) { + $result = array(); + $query = id(new SprintQuery()) + ->setViewer($user); + $dates = $this->getStartEndDates($query, $project); + $member_phids = $project->getMemberPHIDs(); + $member_phids = array_values($member_phids); + $project_slugs = $project->getSlugs(); + $project_slugs = array_values(mpull($project_slugs, 'getSlug')); + $issprint = $this->isSprint($project->getPHID()); + $project_icon = PhabricatorProjectIcon::getAPIName($project->getIcon()); + + $result[$project->getPHID()] = array( + 'id' => $project->getID(), + 'phid' => $project->getPHID(), + 'name' => $project->getName(), + 'profileImagePHID' => $project->getProfileImagePHID(), + 'icon' => $project_icon, + 'color' => $project->getColor(), + 'members' => $member_phids, + 'slugs' => $project_slugs, + 'issprint' => $issprint, + 'startDate' => $dates['start'], + 'endDate' => $dates['end'], + 'dateCreated' => $project->getDateCreated(), + 'dateModified' => $project->getDateModified(), + ); + return $result; + } + protected function buildProjectInfoDictionaries(array $projects) { assert_instances_of($projects, 'PhabricatorProject'); if (empty($projects)) { @@ -22,7 +52,6 @@ $member_phids = $project->getMemberPHIDs(); $member_phids = array_values($member_phids); - $project_slugs = $project->getSlugs(); $project_slugs = array_values(mpull($project_slugs, 'getSlug')); $issprint = $this->isSprint($project->getPHID()); @@ -52,4 +81,13 @@ array($validator, 'isSprint'), $project_phid); return $issprint; } + + protected function getStartEndDates($query, $project) { + $query->setProject($project); + $field_list = $query->getCustomFieldList(); + $aux_fields = $query->getAuxFields($field_list); + $dates['start'] = $query->getStartDate($aux_fields); + $dates['end'] = $query->getEndDate($aux_fields); + return $dates; + } } diff --git a/src/conduit/SprintGetStartEndDatesConduitAPIMethod.php b/src/conduit/SprintGetStartEndDatesConduitAPIMethod.php new file mode 100644 index 0000000..f841dd2 --- /dev/null +++ b/src/conduit/SprintGetStartEndDatesConduitAPIMethod.php @@ -0,0 +1,43 @@ +<?php + +final class SprintGetStartEndDatesConduitAPIMethod extends SprintConduitAPIMethod { + + public function getAPIMethodName() { + return 'sprint.getstartenddates'; + } + + public function getMethodDescription() { + return pht('Get sprint start and end dates'); + } + + public function defineParamTypes() { + return array( + 'project' => 'required string ("PHID")', + ); + } + + public function defineReturnType() { + return 'dict'; + } + + public function defineErrorTypes() { + return array(); + } + + protected function execute(ConduitAPIRequest $request) { + $user = $request->getUser(); + $query = id(new SprintQuery()) + ->setViewer($user); + $project = id(new PhabricatorProjectQuery()) + ->setViewer($user) + ->withPHIDS(array($request->getValue('project'))) + ->needSlugs(true) + ->executeOne(); + if (!$project) { + return null; + } else { + $dates = $this->getStartEndDates($query, $project); + return $dates; + } + } +} diff --git a/src/conduit/SprintSetStartEndDatesConduitAPIMethod.php b/src/conduit/SprintSetStartEndDatesConduitAPIMethod.php new file mode 100644 index 0000000..f957b60 --- /dev/null +++ b/src/conduit/SprintSetStartEndDatesConduitAPIMethod.php @@ -0,0 +1,69 @@ +<?php + +final class SprintSetStartEndDatesConduitAPIMethod extends SprintConduitAPIMethod { + + public function getAPIMethodName() { + return 'sprint.setstartenddates'; + } + + public function getMethodDescription() { + return pht('Set sprint start and end dates'); + } + + public function defineParamTypes() { + return array( + 'project' => 'required string ("PHID")', + 'startdate' => 'required string ("YYYY-MM-DD H:i")', + 'enddate' => 'required string ("YYYY-MM-DD H:i")', + ); + } + + public function defineReturnType() { + return 'dict'; + } + + public function defineErrorTypes() { + return array(); + } + + protected function execute(ConduitAPIRequest $request) { + $user = $request->getUser(); + + $this->requireApplicationCapability( + ProjectCreateProjectsCapability::CAPABILITY, + $user); + + $xactions = array(); + + $xactions[] = id(new PhabricatorProjectTransaction()) + ->setTransactionType(PhabricatorTransactions::TYPE_CUSTOMFIELD) + ->setMetadataValue('customfield:key', 'isdc:sprint:startdate') + ->setOldValue(null) + ->setNewValue(strtotime($request->getValue('startdate'))); + + $xactions[] = id(new PhabricatorProjectTransaction()) + ->setTransactionType(PhabricatorTransactions::TYPE_CUSTOMFIELD) + ->setMetadataValue('customfield:key', 'isdc:sprint:enddate') + ->setOldValue(null) + ->setNewValue(strtotime($request->getValue('enddate'))); + + $editor = id(new PhabricatorProjectTransactionEditor()) + ->setActor($user) + ->setContinueOnNoEffect(true) + ->setContentSourceFromConduitRequest($request); + + $project = id(new PhabricatorProjectQuery()) + ->setViewer($user) + ->withPHIDS(array($request->getValue('project'))) + ->needSlugs(true) + ->executeOne(); + + if (!$project) { + return null; + } else { + $editor->applyTransactions($project, $xactions); + return $this->buildSprintInfoDictionary($project, $user); + } + } + +} -- To view, visit https://gerrit.wikimedia.org/r/226992 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: Ib5d16432156c0f98c9b3c90dc0b4b8eed34ee363 Gerrit-PatchSet: 1 Gerrit-Project: phabricator/extensions/Sprint Gerrit-Branch: master Gerrit-Owner: Christopher Johnson (WMDE) <christopher.john...@wikimedia.de> Gerrit-Reviewer: Christopher Johnson (WMDE) <christopher.john...@wikimedia.de> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits