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

Reply via email to