Implement "user" and "users" Maniphest custom fields
Summary:
Ref T2575. Implements "user" (zero or one users) and "users" (zero or more users) field types.
Also allows custom fields to participate in the handle pipeline.
Test Plan: {F35071}
Reviewers: hach-que, btrahan
Reviewed By: btrahan
CC: aran
Maniphest Tasks: T2575
Differential Revision: https://secure.phabricator.com/D5287
This commit is contained in:
@@ -35,6 +35,9 @@ final class ManiphestTaskDetailController extends ManiphestController {
|
||||
'taskID = %d ORDER BY id ASC',
|
||||
$task->getID());
|
||||
|
||||
$extensions = ManiphestTaskExtensions::newExtensions();
|
||||
$aux_fields = $extensions->loadFields($task, $user);
|
||||
|
||||
$e_commit = PhabricatorEdgeConfig::TYPE_TASK_HAS_COMMIT;
|
||||
$e_dep_on = PhabricatorEdgeConfig::TYPE_TASK_DEPENDS_ON_TASK;
|
||||
$e_dep_by = PhabricatorEdgeConfig::TYPE_TASK_DEPENDED_ON_BY_TASK;
|
||||
@@ -82,8 +85,18 @@ final class ManiphestTaskDetailController extends ManiphestController {
|
||||
}
|
||||
|
||||
$phids = array_keys($phids);
|
||||
|
||||
$phids = array_merge(
|
||||
$phids,
|
||||
array_mergev(mpull($aux_fields, 'getRequiredHandlePHIDs')));
|
||||
|
||||
$this->loadHandles($phids);
|
||||
|
||||
$handles = $this->getLoadedHandles();
|
||||
foreach ($aux_fields as $aux_field) {
|
||||
$aux_field->setHandles($handles);
|
||||
}
|
||||
|
||||
$context_bar = null;
|
||||
|
||||
if ($parent_task) {
|
||||
@@ -127,9 +140,6 @@ final class ManiphestTaskDetailController extends ManiphestController {
|
||||
}
|
||||
}
|
||||
|
||||
$extensions = ManiphestTaskExtensions::newExtensions();
|
||||
$aux_fields = $extensions->loadFields($task, $user);
|
||||
|
||||
foreach ($aux_fields as $aux_field) {
|
||||
foreach ($aux_field->getMarkupFields() as $markup_field) {
|
||||
$engine->addObject($aux_field, $markup_field);
|
||||
|
||||
@@ -111,18 +111,16 @@ final class ManiphestTaskEditController extends ManiphestController {
|
||||
foreach ($aux_fields as $aux_field) {
|
||||
$aux_field->setValueFromRequest($request);
|
||||
|
||||
if ($aux_field->isRequired() && !strlen($aux_field->getValue())) {
|
||||
if ($aux_field->isRequired() && !$aux_field->getValue()) {
|
||||
$errors[] = $aux_field->getLabel() . ' is required.';
|
||||
$aux_field->setError('Required');
|
||||
}
|
||||
|
||||
if (strlen($aux_field->getValue())) {
|
||||
try {
|
||||
$aux_field->validate();
|
||||
} catch (Exception $e) {
|
||||
$errors[] = $e->getMessage();
|
||||
$aux_field->setError('Invalid');
|
||||
}
|
||||
try {
|
||||
$aux_field->validate();
|
||||
} catch (Exception $e) {
|
||||
$errors[] = $e->getMessage();
|
||||
$aux_field->setError('Invalid');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -283,7 +281,8 @@ final class ManiphestTaskEditController extends ManiphestController {
|
||||
$phids = array_merge(
|
||||
array($task->getOwnerPHID()),
|
||||
$task->getCCPHIDs(),
|
||||
$task->getProjectPHIDs());
|
||||
$task->getProjectPHIDs(),
|
||||
array_mergev(mpull($aux_fields, 'getRequiredHandlePHIDs')));
|
||||
|
||||
if ($parent_task) {
|
||||
$phids[] = $parent_task->getPHID();
|
||||
@@ -294,6 +293,10 @@ final class ManiphestTaskEditController extends ManiphestController {
|
||||
|
||||
$handles = $this->loadViewerHandles($phids);
|
||||
|
||||
foreach ($aux_fields as $aux_field) {
|
||||
$aux_field->setHandles($handles);
|
||||
}
|
||||
|
||||
$tvalues = mpull($handles, 'getFullName', 'getPHID');
|
||||
|
||||
$error_view = null;
|
||||
@@ -424,17 +427,15 @@ final class ManiphestTaskEditController extends ManiphestController {
|
||||
pht('Create New Project')))
|
||||
->setDatasource('/typeahead/common/projects/'));
|
||||
|
||||
if ($aux_fields) {
|
||||
foreach ($aux_fields as $aux_field) {
|
||||
if ($aux_field->isRequired() &&
|
||||
!$aux_field->getError() &&
|
||||
!$aux_field->getValue()) {
|
||||
$aux_field->setError(true);
|
||||
}
|
||||
|
||||
$aux_control = $aux_field->renderControl();
|
||||
$form->appendChild($aux_control);
|
||||
foreach ($aux_fields as $aux_field) {
|
||||
if ($aux_field->isRequired() &&
|
||||
!$aux_field->getError() &&
|
||||
!$aux_field->getValue()) {
|
||||
$aux_field->setError(true);
|
||||
}
|
||||
|
||||
$aux_control = $aux_field->renderControl();
|
||||
$form->appendChild($aux_control);
|
||||
}
|
||||
|
||||
require_celerity_resource('aphront-error-view-css');
|
||||
|
||||
Reference in New Issue
Block a user