2015-12-03 23:32:40 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
final class ManiphestEditEngine
|
|
|
|
extends PhabricatorEditEngine {
|
|
|
|
|
|
|
|
const ENGINECONST = 'maniphest.task';
|
|
|
|
|
|
|
|
public function getEngineName() {
|
|
|
|
return pht('Maniphest Tasks');
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getEngineApplicationClass() {
|
|
|
|
return 'PhabricatorManiphestApplication';
|
|
|
|
}
|
|
|
|
|
|
|
|
protected function newEditableObject() {
|
|
|
|
return ManiphestTask::initializeNewTask($this->getViewer());
|
|
|
|
}
|
|
|
|
|
|
|
|
protected function newObjectQuery() {
|
|
|
|
return id(new ManiphestTaskQuery());
|
|
|
|
}
|
|
|
|
|
|
|
|
protected function getObjectCreateTitleText($object) {
|
|
|
|
return pht('Create New Task');
|
|
|
|
}
|
|
|
|
|
|
|
|
protected function getObjectEditTitleText($object) {
|
|
|
|
return pht('Edit %s %s', $object->getMonogram(), $object->getTitle());
|
|
|
|
}
|
|
|
|
|
|
|
|
protected function getObjectEditShortText($object) {
|
|
|
|
return $object->getMonogram();
|
|
|
|
}
|
|
|
|
|
|
|
|
protected function getObjectCreateShortText() {
|
|
|
|
return pht('Create Task');
|
|
|
|
}
|
|
|
|
|
|
|
|
protected function getCommentViewHeaderText($object) {
|
|
|
|
$is_serious = PhabricatorEnv::getEnvConfig('phabricator.serious-business');
|
|
|
|
if (!$is_serious) {
|
|
|
|
return pht('Weigh In');
|
|
|
|
}
|
|
|
|
|
|
|
|
return parent::getCommentViewHeaderText($object);
|
|
|
|
}
|
|
|
|
|
|
|
|
protected function getObjectViewURI($object) {
|
|
|
|
return '/'.$object->getMonogram();
|
|
|
|
}
|
|
|
|
|
|
|
|
protected function buildCustomEditFields($object) {
|
2015-12-05 19:40:56 +01:00
|
|
|
$status_map = $this->getTaskStatusMap($object);
|
|
|
|
$priority_map = $this->getTaskPriorityMap($object);
|
2015-12-03 23:32:40 +01:00
|
|
|
|
2015-12-04 16:56:03 +01:00
|
|
|
if ($object->isClosed()) {
|
|
|
|
$priority_label = null;
|
|
|
|
$default_status = ManiphestTaskStatus::getDefaultStatus();
|
|
|
|
} else {
|
|
|
|
$priority_label = pht('Change Priority');
|
|
|
|
$default_status = ManiphestTaskStatus::getDefaultClosedStatus();
|
|
|
|
}
|
|
|
|
|
2015-12-04 18:30:53 +01:00
|
|
|
if ($object->getOwnerPHID()) {
|
|
|
|
$owner_value = array($object->getOwnerPHID());
|
|
|
|
} else {
|
|
|
|
$owner_value = array($this->getViewer()->getPHID());
|
|
|
|
}
|
|
|
|
|
2015-12-03 23:32:40 +01:00
|
|
|
return array(
|
2015-12-08 16:54:01 +01:00
|
|
|
id(new PhabricatorHandlesEditField())
|
|
|
|
->setKey('parent')
|
|
|
|
->setLabel(pht('Parent Task'))
|
|
|
|
->setDescription(pht('Task to make this a subtask of.'))
|
|
|
|
->setAliases(array('parentPHID'))
|
|
|
|
->setTransactionType(ManiphestTransaction::TYPE_PARENT)
|
|
|
|
->setSingleValue(null),
|
2015-12-03 23:32:40 +01:00
|
|
|
id(new PhabricatorTextEditField())
|
|
|
|
->setKey('title')
|
|
|
|
->setLabel(pht('Title'))
|
2015-12-04 15:37:36 +01:00
|
|
|
->setDescription(pht('Name of the task.'))
|
2015-12-03 23:32:40 +01:00
|
|
|
->setTransactionType(ManiphestTransaction::TYPE_TITLE)
|
|
|
|
->setIsRequired(true)
|
|
|
|
->setValue($object->getTitle()),
|
|
|
|
id(new PhabricatorSelectEditField())
|
|
|
|
->setKey('status')
|
|
|
|
->setLabel(pht('Status'))
|
|
|
|
->setDescription(pht('Status of the task.'))
|
|
|
|
->setTransactionType(ManiphestTransaction::TYPE_STATUS)
|
2015-12-07 20:37:51 +01:00
|
|
|
->setIsCopyable(true)
|
2015-12-03 23:32:40 +01:00
|
|
|
->setValue($object->getStatus())
|
2015-12-04 16:56:03 +01:00
|
|
|
->setOptions($status_map)
|
|
|
|
->setCommentActionLabel(pht('Change Status'))
|
|
|
|
->setCommentActionDefaultValue($default_status),
|
2015-12-03 23:32:40 +01:00
|
|
|
id(new PhabricatorUsersEditField())
|
2015-12-04 16:21:50 +01:00
|
|
|
->setKey('owner')
|
|
|
|
->setAliases(array('ownerPHID', 'assign', 'assigned'))
|
2015-12-03 23:32:40 +01:00
|
|
|
->setLabel(pht('Assigned To'))
|
|
|
|
->setDescription(pht('User who is responsible for the task.'))
|
|
|
|
->setTransactionType(ManiphestTransaction::TYPE_OWNER)
|
2015-12-07 20:37:51 +01:00
|
|
|
->setIsCopyable(true)
|
2015-12-04 18:30:53 +01:00
|
|
|
->setSingleValue($object->getOwnerPHID())
|
2015-12-07 19:38:32 +01:00
|
|
|
->setCommentActionLabel(pht('Assign / Claim'))
|
2015-12-04 18:30:53 +01:00
|
|
|
->setCommentActionDefaultValue($owner_value),
|
2015-12-03 23:32:40 +01:00
|
|
|
id(new PhabricatorSelectEditField())
|
|
|
|
->setKey('priority')
|
|
|
|
->setLabel(pht('Priority'))
|
|
|
|
->setDescription(pht('Priority of the task.'))
|
|
|
|
->setTransactionType(ManiphestTransaction::TYPE_PRIORITY)
|
2015-12-07 20:37:51 +01:00
|
|
|
->setIsCopyable(true)
|
2015-12-03 23:32:40 +01:00
|
|
|
->setValue($object->getPriority())
|
2015-12-04 16:56:03 +01:00
|
|
|
->setOptions($priority_map)
|
|
|
|
->setCommentActionLabel($priority_label),
|
2015-12-03 23:32:40 +01:00
|
|
|
id(new PhabricatorRemarkupEditField())
|
|
|
|
->setKey('description')
|
|
|
|
->setLabel(pht('Description'))
|
|
|
|
->setDescription(pht('Task description.'))
|
|
|
|
->setTransactionType(ManiphestTransaction::TYPE_DESCRIPTION)
|
|
|
|
->setValue($object->getDescription()),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
protected function getEditorURI() {
|
|
|
|
// TODO: Remove when cutting over.
|
|
|
|
return $this->getApplication()->getApplicationURI('editpro/');
|
|
|
|
}
|
|
|
|
|
2015-12-05 19:40:56 +01:00
|
|
|
private function getTaskStatusMap(ManiphestTask $task) {
|
|
|
|
$status_map = ManiphestTaskStatus::getTaskStatusMap();
|
|
|
|
|
|
|
|
$current_status = $task->getStatus();
|
|
|
|
|
|
|
|
// If the current status is something we don't recognize (maybe an older
|
|
|
|
// status which was deleted), put a dummy entry in the status map so that
|
|
|
|
// saving the form doesn't destroy any data by accident.
|
|
|
|
if (idx($status_map, $current_status) === null) {
|
|
|
|
$status_map[$current_status] = pht('<Unknown: %s>', $current_status);
|
|
|
|
}
|
|
|
|
|
|
|
|
$dup_status = ManiphestTaskStatus::getDuplicateStatus();
|
|
|
|
foreach ($status_map as $status => $status_name) {
|
|
|
|
// Always keep the task's current status.
|
|
|
|
if ($status == $current_status) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Don't allow tasks to be changed directly into "Closed, Duplicate"
|
|
|
|
// status. Instead, you have to merge them. See T4819.
|
|
|
|
if ($status == $dup_status) {
|
|
|
|
unset($status_map[$status]);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Don't let new or existing tasks be moved into a disabled status.
|
|
|
|
if (ManiphestTaskStatus::isDisabledStatus($status)) {
|
|
|
|
unset($status_map[$status]);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return $status_map;
|
|
|
|
}
|
|
|
|
|
|
|
|
private function getTaskPriorityMap(ManiphestTask $task) {
|
|
|
|
$priority_map = ManiphestTaskPriority::getTaskPriorityMap();
|
|
|
|
$current_priority = $task->getPriority();
|
|
|
|
|
|
|
|
// If the current value isn't a legitimate one, put it in the dropdown
|
|
|
|
// anyway so saving the form doesn't cause a side effects.
|
|
|
|
if (idx($priority_map, $current_priority) === null) {
|
|
|
|
$priority_map[$current_priority] = pht(
|
|
|
|
'<Unknown: %s>',
|
|
|
|
$current_priority);
|
|
|
|
}
|
|
|
|
|
|
|
|
foreach ($priority_map as $priority => $priority_name) {
|
|
|
|
// Always keep the current priority.
|
|
|
|
if ($priority == $current_priority) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (ManiphestTaskPriority::isDisabledPriority($priority)) {
|
|
|
|
unset($priority_map[$priority]);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return $priority_map;
|
|
|
|
}
|
|
|
|
|
2015-12-03 23:32:40 +01:00
|
|
|
}
|