Allow task policies to be edited from the UI; show policy information on the detail page

Summary:
Ref T603. Adds policy controls to the task edit UI.

@chad, status + policy renders a little weird -- did I mess something up? See screenshot.

Test Plan: Edited policies, viewed a task.

Reviewers: btrahan, chad

Reviewed By: chad

CC: aran

Maniphest Tasks: T603

Differential Revision: https://secure.phabricator.com/D7123
This commit is contained in:
epriestley
2013-09-25 13:44:45 -07:00
parent 36343600c5
commit c7f105ac0e
4 changed files with 49 additions and 2 deletions

View File

@@ -372,7 +372,9 @@ final class ManiphestTaskDetailController extends ManiphestController {
private function buildHeaderView(ManiphestTask $task) {
$view = id(new PHUIHeaderView())
->setHeader($task->getTitle());
->setHeader($task->getTitle())
->setUser($this->getRequest()->getUser())
->setPolicyObject($task);
$status = $task->getStatus();
$status_name = ManiphestTaskStatus::renderFullDescription($status);

View File

@@ -181,6 +181,11 @@ final class ManiphestTaskEditController extends ManiphestController {
$changes[ManiphestTransaction::TYPE_PROJECTS] =
$request->getArr('projects');
$changes[PhabricatorTransactions::TYPE_VIEW_POLICY] =
$request->getStr('viewPolicy');
$changes[PhabricatorTransactions::TYPE_EDIT_POLICY] =
$request->getStr('editPolicy');
if ($files) {
$file_map = mpull($files, 'getPHID');
$file_map = array_fill_keys($file_map, array());
@@ -431,6 +436,11 @@ final class ManiphestTaskEditController extends ManiphestController {
->setOptions(ManiphestTaskStatus::getTaskStatusMap()));
}
$policies = id(new PhabricatorPolicyQuery())
->setViewer($user)
->setObject($task)
->execute();
$form
->appendChild(
id(new AphrontFormTokenizerControl())
@@ -453,6 +463,24 @@ final class ManiphestTaskEditController extends ManiphestController {
->setName('priority')
->setOptions($priority_map)
->setValue($task->getPriority()))
->appendChild(
id(new AphrontFormPolicyControl())
->setUser($user)
->setCapability(PhabricatorPolicyCapability::CAN_VIEW)
->setPolicyObject($task)
->setPolicies($policies)
->setName('viewPolicy'))
->appendChild(
id(new AphrontFormPolicyControl())
->setUser($user)
->setCapability(PhabricatorPolicyCapability::CAN_EDIT)
->setPolicyObject($task)
->setPolicies($policies)
->setCaption(
pht(
'NOTE: These policy controls still have some rough edges and '.
'are not yet fully functional.'))
->setName('editPolicy'))
->appendChild(
id(new AphrontFormTokenizerControl())
->setLabel(pht('Projects'))

View File

@@ -16,6 +16,8 @@ final class ManiphestTransactionEditorPro
$types[] = ManiphestTransaction::TYPE_PROJECTS;
$types[] = ManiphestTransaction::TYPE_ATTACH;
$types[] = ManiphestTransaction::TYPE_EDGE;
$types[] = PhabricatorTransactions::TYPE_VIEW_POLICY;
$types[] = PhabricatorTransactions::TYPE_EDIT_POLICY;
return $types;
}

View File

@@ -199,10 +199,25 @@ final class ManiphestTask extends ManiphestDAO
}
public function getPolicy($capability) {
return PhabricatorPolicies::POLICY_USER;
switch ($capability) {
case PhabricatorPolicyCapability::CAN_VIEW:
return $this->getViewPolicy();
case PhabricatorPolicyCapability::CAN_EDIT:
return $this->getEditPolicy();
}
}
public function hasAutomaticCapability($capability, PhabricatorUser $user) {
// The owner of a task can always view and edit it.
$owner_phid = $this->getOwnerPHID();
if ($owner_phid) {
$user_phid = $user->getPHID();
if ($user_phid == $owner_phid) {
return true;
}
}
return false;
}