mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-10 08:52:39 +01:00
Allow Nuance items to put commands actions into the work UI
Summary: Ref T12738. This doesn't actually do anything yet, but allows items to define commands that show up in the UI. Adds a "Throw in Trash" item for complaints. This construction will allow future changes to add an `EngineExtension` which can provide generic/default commands across item types. Test Plan: {F4975086} Reviewers: chad Reviewed By: chad Maniphest Tasks: T12738 Differential Revision: https://secure.phabricator.com/D18009
This commit is contained in:
parent
cbf9008d15
commit
e1b8532e24
5 changed files with 113 additions and 3 deletions
|
@ -1622,6 +1622,7 @@ phutil_register_library_map(array(
|
||||||
'NuanceItemActionController' => 'applications/nuance/controller/NuanceItemActionController.php',
|
'NuanceItemActionController' => 'applications/nuance/controller/NuanceItemActionController.php',
|
||||||
'NuanceItemCommand' => 'applications/nuance/storage/NuanceItemCommand.php',
|
'NuanceItemCommand' => 'applications/nuance/storage/NuanceItemCommand.php',
|
||||||
'NuanceItemCommandQuery' => 'applications/nuance/query/NuanceItemCommandQuery.php',
|
'NuanceItemCommandQuery' => 'applications/nuance/query/NuanceItemCommandQuery.php',
|
||||||
|
'NuanceItemCommandSpec' => 'applications/nuance/command/NuanceItemCommandSpec.php',
|
||||||
'NuanceItemCommandTransaction' => 'applications/nuance/xaction/NuanceItemCommandTransaction.php',
|
'NuanceItemCommandTransaction' => 'applications/nuance/xaction/NuanceItemCommandTransaction.php',
|
||||||
'NuanceItemController' => 'applications/nuance/controller/NuanceItemController.php',
|
'NuanceItemController' => 'applications/nuance/controller/NuanceItemController.php',
|
||||||
'NuanceItemEditor' => 'applications/nuance/editor/NuanceItemEditor.php',
|
'NuanceItemEditor' => 'applications/nuance/editor/NuanceItemEditor.php',
|
||||||
|
@ -6744,6 +6745,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorPolicyInterface',
|
'PhabricatorPolicyInterface',
|
||||||
),
|
),
|
||||||
'NuanceItemCommandQuery' => 'NuanceQuery',
|
'NuanceItemCommandQuery' => 'NuanceQuery',
|
||||||
|
'NuanceItemCommandSpec' => 'Phobject',
|
||||||
'NuanceItemCommandTransaction' => 'NuanceItemTransactionType',
|
'NuanceItemCommandTransaction' => 'NuanceItemTransactionType',
|
||||||
'NuanceItemController' => 'NuanceController',
|
'NuanceItemController' => 'NuanceController',
|
||||||
'NuanceItemEditor' => 'PhabricatorApplicationTransactionEditor',
|
'NuanceItemEditor' => 'PhabricatorApplicationTransactionEditor',
|
||||||
|
|
37
src/applications/nuance/command/NuanceItemCommandSpec.php
Normal file
37
src/applications/nuance/command/NuanceItemCommandSpec.php
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
final class NuanceItemCommandSpec
|
||||||
|
extends Phobject {
|
||||||
|
|
||||||
|
private $commandKey;
|
||||||
|
private $name;
|
||||||
|
private $icon;
|
||||||
|
|
||||||
|
public function setCommandKey($command_key) {
|
||||||
|
$this->commandKey = $command_key;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCommandKey() {
|
||||||
|
return $this->commandKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setName($name) {
|
||||||
|
$this->name = $name;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getName() {
|
||||||
|
return $this->name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setIcon($icon) {
|
||||||
|
$this->icon = $icon;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getIcon() {
|
||||||
|
return $this->icon;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -54,16 +54,25 @@ final class NuanceQueueWorkController
|
||||||
|
|
||||||
$item = head($items);
|
$item = head($items);
|
||||||
|
|
||||||
$curtain = $this->buildCurtain($queue);
|
$curtain = $this->buildCurtain($queue, $item);
|
||||||
|
|
||||||
$timeline = $this->buildTransactionTimeline(
|
$timeline = $this->buildTransactionTimeline(
|
||||||
$item,
|
$item,
|
||||||
new NuanceItemTransactionQuery());
|
new NuanceItemTransactionQuery());
|
||||||
$timeline->setShouldTerminate(true);
|
$timeline->setShouldTerminate(true);
|
||||||
|
|
||||||
|
$impl = $item->getImplementation()
|
||||||
|
->setViewer($viewer);
|
||||||
|
|
||||||
|
$work_content = $impl->buildItemWorkView($item);
|
||||||
|
|
||||||
$view = id(new PHUITwoColumnView())
|
$view = id(new PHUITwoColumnView())
|
||||||
->setCurtain($curtain)
|
->setCurtain($curtain)
|
||||||
->setMainColumn($timeline);
|
->setMainColumn(
|
||||||
|
array(
|
||||||
|
$work_content,
|
||||||
|
$timeline,
|
||||||
|
));
|
||||||
|
|
||||||
return $this->newPage()
|
return $this->newPage()
|
||||||
->setTitle($title)
|
->setTitle($title)
|
||||||
|
@ -71,12 +80,28 @@ final class NuanceQueueWorkController
|
||||||
->appendChild($view);
|
->appendChild($view);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function buildCurtain(NuanceQueue $queue) {
|
private function buildCurtain(NuanceQueue $queue, NuanceItem $item) {
|
||||||
$viewer = $this->getViewer();
|
$viewer = $this->getViewer();
|
||||||
$id = $queue->getID();
|
$id = $queue->getID();
|
||||||
|
|
||||||
$curtain = $this->newCurtainView();
|
$curtain = $this->newCurtainView();
|
||||||
|
|
||||||
|
$impl = $item->getImplementation();
|
||||||
|
$commands = $impl->buildWorkCommands($item);
|
||||||
|
|
||||||
|
foreach ($commands as $command) {
|
||||||
|
$command_key = $command->getCommandKey();
|
||||||
|
|
||||||
|
$item_id = $item->getID();
|
||||||
|
|
||||||
|
$curtain->addAction(
|
||||||
|
id(new PhabricatorActionView())
|
||||||
|
->setName($command->getName())
|
||||||
|
->setIcon($command->getIcon())
|
||||||
|
->setHref("queue/command/{$id}/{$command_key}/{$item_id}/"))
|
||||||
|
->setWorkflow(true);
|
||||||
|
}
|
||||||
|
|
||||||
$curtain->addAction(
|
$curtain->addAction(
|
||||||
id(new PhabricatorActionView())
|
id(new PhabricatorActionView())
|
||||||
->setType(PhabricatorActionView::TYPE_DIVIDER));
|
->setType(PhabricatorActionView::TYPE_DIVIDER));
|
||||||
|
|
|
@ -13,4 +13,38 @@ final class NuanceFormItemType
|
||||||
return pht('Complaint');
|
return pht('Complaint');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function newWorkCommands(NuanceItem $item) {
|
||||||
|
return array(
|
||||||
|
$this->newCommand('trash')
|
||||||
|
->setIcon('fa-trash')
|
||||||
|
->setName(pht('Throw In Trash')),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function newItemView(NuanceItem $item) {
|
||||||
|
$viewer = $this->getViewer();
|
||||||
|
|
||||||
|
$content = $item->getItemProperty('complaint');
|
||||||
|
$content_view = id(new PHUIRemarkupView($viewer, $content))
|
||||||
|
->setContextObject($item);
|
||||||
|
|
||||||
|
$content_section = id(new PHUIPropertyListView())
|
||||||
|
->addTextContent(
|
||||||
|
phutil_tag(
|
||||||
|
'div',
|
||||||
|
array(
|
||||||
|
'class' => 'phabricator-remarkup',
|
||||||
|
),
|
||||||
|
$content_view));
|
||||||
|
|
||||||
|
$content_box = id(new PHUIObjectBoxView())
|
||||||
|
->setHeaderText(pht('Complaint'))
|
||||||
|
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
|
||||||
|
->appendChild($content_section);
|
||||||
|
|
||||||
|
return array(
|
||||||
|
$content_box,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,6 +32,10 @@ abstract class NuanceItemType
|
||||||
return $this->newItemView($item);
|
return $this->newItemView($item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final public function buildItemWorkView(NuanceItem $item) {
|
||||||
|
return $this->newItemView($item);
|
||||||
|
}
|
||||||
|
|
||||||
protected function newItemView(NuanceItem $item) {
|
protected function newItemView(NuanceItem $item) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -104,6 +108,10 @@ abstract class NuanceItemType
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final public function buildWorkCommands(NuanceItem $item) {
|
||||||
|
return $this->newWorkCommands($item);
|
||||||
|
}
|
||||||
|
|
||||||
final public function applyCommand(
|
final public function applyCommand(
|
||||||
NuanceItem $item,
|
NuanceItem $item,
|
||||||
NuanceItemCommand $command) {
|
NuanceItemCommand $command) {
|
||||||
|
@ -159,4 +167,8 @@ abstract class NuanceItemType
|
||||||
return id(new PhabricatorNuanceApplication())->getPHID();
|
return id(new PhabricatorNuanceApplication())->getPHID();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function newCommand($command_key) {
|
||||||
|
return id(new NuanceItemCommandSpec())
|
||||||
|
->setCommandKey($command_key);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue