mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-18 21:02:41 +01:00
Provide a basic maniphest.createtask method via Conduit
Summary: This could be a lot fancier but let's see what else we need. Also fixed some bugs with maniphest.info. Test Plan: Used the Conduit web console to create some tasks with different values. Reviewers: jungejason, tuomaspelkonen, aran Reviewed By: jungejason CC: aran, jungejason, epriestley Differential Revision: 824
This commit is contained in:
parent
57208dfd52
commit
5bf28498c8
7 changed files with 203 additions and 28 deletions
|
@ -112,6 +112,8 @@ phutil_register_library_map(array(
|
|||
'ConduitAPI_file_download_Method' => 'applications/conduit/method/file/download',
|
||||
'ConduitAPI_file_info_Method' => 'applications/conduit/method/file/info',
|
||||
'ConduitAPI_file_upload_Method' => 'applications/conduit/method/file/upload',
|
||||
'ConduitAPI_maniphest_Method' => 'applications/conduit/method/maniphest/base',
|
||||
'ConduitAPI_maniphest_createtask_Method' => 'applications/conduit/method/maniphest/createtask',
|
||||
'ConduitAPI_maniphest_info_Method' => 'applications/conduit/method/maniphest/info',
|
||||
'ConduitAPI_paste_Method' => 'applications/conduit/method/paste/base',
|
||||
'ConduitAPI_paste_create_Method' => 'applications/conduit/method/paste/create',
|
||||
|
@ -782,7 +784,9 @@ phutil_register_library_map(array(
|
|||
'ConduitAPI_file_download_Method' => 'ConduitAPIMethod',
|
||||
'ConduitAPI_file_info_Method' => 'ConduitAPIMethod',
|
||||
'ConduitAPI_file_upload_Method' => 'ConduitAPIMethod',
|
||||
'ConduitAPI_maniphest_info_Method' => 'ConduitAPIMethod',
|
||||
'ConduitAPI_maniphest_Method' => 'ConduitAPIMethod',
|
||||
'ConduitAPI_maniphest_createtask_Method' => 'ConduitAPI_maniphest_Method',
|
||||
'ConduitAPI_maniphest_info_Method' => 'ConduitAPI_maniphest_Method',
|
||||
'ConduitAPI_paste_Method' => 'ConduitAPIMethod',
|
||||
'ConduitAPI_paste_create_Method' => 'ConduitAPI_paste_Method',
|
||||
'ConduitAPI_paste_info_Method' => 'ConduitAPI_paste_Method',
|
||||
|
|
|
@ -0,0 +1,51 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* Copyright 2011 Facebook, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @group conduit
|
||||
*/
|
||||
abstract class ConduitAPI_maniphest_Method extends ConduitAPIMethod {
|
||||
|
||||
protected function buildTaskInfoDictionary(ManiphestTask $task) {
|
||||
$auxiliary = $task->loadAuxiliaryAttributes();
|
||||
$auxiliary = mpull($auxiliary, 'getValue', 'getName');
|
||||
|
||||
$result = array(
|
||||
'id' => $task->getID(),
|
||||
'phid' => $task->getPHID(),
|
||||
'authorPHID' => $task->getAuthorPHID(),
|
||||
'ownerPHID' => $task->getOwnerPHID(),
|
||||
'ccPHIDs' => $task->getCCPHIDs(),
|
||||
'status' => $task->getStatus(),
|
||||
'priority' => ManiphestTaskPriority::getTaskPriorityName(
|
||||
$task->getPriority()),
|
||||
'title' => $task->getTitle(),
|
||||
'description' => $task->getDescription(),
|
||||
'projectPHIDs' => $task->getProjectPHIDs(),
|
||||
'uri' => PhabricatorEnv::getProductionURI('/T'.$task->getID()),
|
||||
'auxiliary' => $auxiliary,
|
||||
|
||||
'objectName' => 'T'.$task->getID(),
|
||||
'dateCreated' => $task->getDateCreated(),
|
||||
'dateModified' => $task->getDateModified(),
|
||||
);
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
}
|
16
src/applications/conduit/method/maniphest/base/__init__.php
Normal file
16
src/applications/conduit/method/maniphest/base/__init__.php
Normal file
|
@ -0,0 +1,16 @@
|
|||
<?php
|
||||
/**
|
||||
* This file is automatically generated. Lint this module to rebuild it.
|
||||
* @generated
|
||||
*/
|
||||
|
||||
|
||||
|
||||
phutil_require_module('phabricator', 'applications/conduit/method/base');
|
||||
phutil_require_module('phabricator', 'applications/maniphest/constants/priority');
|
||||
phutil_require_module('phabricator', 'infrastructure/env');
|
||||
|
||||
phutil_require_module('phutil', 'utils');
|
||||
|
||||
|
||||
phutil_require_source('ConduitAPI_maniphest_Method.php');
|
|
@ -0,0 +1,107 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* Copyright 2011 Facebook, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @group conduit
|
||||
*/
|
||||
final class ConduitAPI_maniphest_createtask_Method
|
||||
extends ConduitAPI_maniphest_Method {
|
||||
|
||||
public function getMethodDescription() {
|
||||
return "Create a new Maniphest task.";
|
||||
}
|
||||
|
||||
public function defineParamTypes() {
|
||||
return array(
|
||||
'title' => 'required string',
|
||||
'description' => 'optional string',
|
||||
'ownerPHID' => 'optional phid',
|
||||
'ccPHIDs' => 'optional list<phid>',
|
||||
'priority' => 'optional int',
|
||||
'projectPHIDs' => 'optional list<phid>',
|
||||
'filePHIDs' => 'optional list<phid>',
|
||||
);
|
||||
}
|
||||
|
||||
public function defineReturnType() {
|
||||
return 'nonempty dict';
|
||||
}
|
||||
|
||||
public function defineErrorTypes() {
|
||||
return array(
|
||||
);
|
||||
}
|
||||
|
||||
protected function execute(ConduitAPIRequest $request) {
|
||||
$task = new ManiphestTask();
|
||||
$task->setPriority(ManiphestTaskPriority::PRIORITY_TRIAGE);
|
||||
$task->setAuthorPHID($request->getUser()->getPHID());
|
||||
|
||||
$task->setTitle((string)$request->getValue('title'));
|
||||
$task->setDescription((string)$request->getValue('description'));
|
||||
|
||||
$changes = array();
|
||||
$changes[ManiphestTransactionType::TYPE_STATUS] =
|
||||
ManiphestTaskStatus::STATUS_OPEN;
|
||||
|
||||
$priority = $request->getValue('priority');
|
||||
if ($priority !== null) {
|
||||
$changes[ManiphestTransactionType::TYPE_PRIORITY] = $priority;
|
||||
}
|
||||
|
||||
$owner_phid = $request->getValue('ownerPHID');
|
||||
if ($owner_phid !== null) {
|
||||
$changes[ManiphestTransactionType::TYPE_OWNER] = $owner_phid;
|
||||
}
|
||||
|
||||
$ccs = $request->getValue('ccPHIDs');
|
||||
if ($ccs !== null) {
|
||||
$changes[ManiphestTransactionType::TYPE_CCS] = $ccs;
|
||||
}
|
||||
|
||||
$project_phids = $request->getValue('projectPHIDs');
|
||||
if ($project_phids !== null) {
|
||||
$changes[ManiphestTransactionType::TYPE_PROJECTS] = $project_phids;
|
||||
}
|
||||
|
||||
$file_phids = $request->getValue('filePHIDs');
|
||||
if ($file_phids !== null) {
|
||||
$file_map = array_fill_keys($file_phids, true);
|
||||
$changes[ManiphestTransactionType::TYPE_ATTACH] = array(
|
||||
PhabricatorPHIDConstants::PHID_TYPE_FILE => $file_map,
|
||||
);
|
||||
}
|
||||
|
||||
$template = new ManiphestTransaction();
|
||||
$template->setAuthorPHID($request->getUser()->getPHID());
|
||||
|
||||
$transactions = array();
|
||||
foreach ($changes as $type => $value) {
|
||||
$transaction = clone $template;
|
||||
$transaction->setTransactionType($type);
|
||||
$transaction->setNewValue($value);
|
||||
$transactions[] = $transaction;
|
||||
}
|
||||
|
||||
$editor = new ManiphestTransactionEditor();
|
||||
$editor->applyTransactions($task, $transactions);
|
||||
|
||||
return $this->buildTaskInfoDictionary($task);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
<?php
|
||||
/**
|
||||
* This file is automatically generated. Lint this module to rebuild it.
|
||||
* @generated
|
||||
*/
|
||||
|
||||
|
||||
|
||||
phutil_require_module('phabricator', 'applications/conduit/method/maniphest/base');
|
||||
phutil_require_module('phabricator', 'applications/maniphest/constants/priority');
|
||||
phutil_require_module('phabricator', 'applications/maniphest/constants/status');
|
||||
phutil_require_module('phabricator', 'applications/maniphest/constants/transactiontype');
|
||||
phutil_require_module('phabricator', 'applications/maniphest/editor/transaction');
|
||||
phutil_require_module('phabricator', 'applications/maniphest/storage/task');
|
||||
phutil_require_module('phabricator', 'applications/maniphest/storage/transaction');
|
||||
phutil_require_module('phabricator', 'applications/phid/constants');
|
||||
|
||||
|
||||
phutil_require_source('ConduitAPI_maniphest_createtask_Method.php');
|
|
@ -19,7 +19,9 @@
|
|||
/**
|
||||
* @group conduit
|
||||
*/
|
||||
class ConduitAPI_maniphest_info_Method extends ConduitAPIMethod {
|
||||
final class ConduitAPI_maniphest_info_Method
|
||||
extends ConduitAPI_maniphest_Method {
|
||||
|
||||
|
||||
public function getMethodDescription() {
|
||||
return "Retrieve information about a Maniphest task, given its id.";
|
||||
|
@ -49,29 +51,7 @@ class ConduitAPI_maniphest_info_Method extends ConduitAPIMethod {
|
|||
throw new ConduitException('ERR_BAD_TASK');
|
||||
}
|
||||
|
||||
$auxiliary = $task->loadAuxiliaryAttributes();
|
||||
$auxiliary = mpull($auxiliary, 'getValue', 'getName');
|
||||
|
||||
$result = array(
|
||||
'id' => $task->getID(),
|
||||
'phid' => $task->getPHID(),
|
||||
'authorPHID' => $task->getAuthorPHID(),
|
||||
'ownerPHID' => $task->getAuthorPHID(),
|
||||
'ccPHIDs' => $task->getCCPHIDs(),
|
||||
'status' => $task->getStatus(),
|
||||
'priority' => ManiphestTaskPriority::getTaskPriorityName(
|
||||
$task->getPriority()),
|
||||
'title' => $task->getTitle(),
|
||||
'description' => $task->getDescription(),
|
||||
'projectPHIDs' => $task->getProjectPHIDs(),
|
||||
'uri' => PhabricatorEnv::getProductionURI('/T'.$task->getID()),
|
||||
|
||||
'auxiliary' => $auxiliary,
|
||||
|
||||
// Not sure what this is yet.
|
||||
// 'attached' => array($task->getAttached()),
|
||||
);
|
||||
return $result;
|
||||
return $this->buildTaskInfoDictionary($task);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -6,11 +6,9 @@
|
|||
|
||||
|
||||
|
||||
phutil_require_module('phabricator', 'applications/conduit/method/base');
|
||||
phutil_require_module('phabricator', 'applications/conduit/method/maniphest/base');
|
||||
phutil_require_module('phabricator', 'applications/conduit/protocol/exception');
|
||||
phutil_require_module('phabricator', 'applications/maniphest/constants/priority');
|
||||
phutil_require_module('phabricator', 'applications/maniphest/storage/task');
|
||||
phutil_require_module('phabricator', 'infrastructure/env');
|
||||
|
||||
phutil_require_module('phutil', 'utils');
|
||||
|
||||
|
|
Loading…
Reference in a new issue