Skip to content

Commit 8676873

Browse files
author
epriestley
committed
Move Nuance Queues to EditEngine
Summary: Ref T10537. Update queue editing to use EditEngine. Test Plan: - Created a new queue. - Edited an existing queue. Reviewers: chad Reviewed By: chad Maniphest Tasks: T10537 Differential Revision: https://secure.phabricator.com/D15431
1 parent 6872b96 commit 8676873

File tree

7 files changed

+96
-143
lines changed

7 files changed

+96
-143
lines changed

src/__phutil_library_map__.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1436,6 +1436,7 @@
14361436
'NuanceQueueController' => 'applications/nuance/controller/NuanceQueueController.php',
14371437
'NuanceQueueDatasource' => 'applications/nuance/typeahead/NuanceQueueDatasource.php',
14381438
'NuanceQueueEditController' => 'applications/nuance/controller/NuanceQueueEditController.php',
1439+
'NuanceQueueEditEngine' => 'applications/nuance/editor/NuanceQueueEditEngine.php',
14391440
'NuanceQueueEditor' => 'applications/nuance/editor/NuanceQueueEditor.php',
14401441
'NuanceQueueListController' => 'applications/nuance/controller/NuanceQueueListController.php',
14411442
'NuanceQueuePHIDType' => 'applications/nuance/phid/NuanceQueuePHIDType.php',
@@ -5683,6 +5684,7 @@
56835684
'NuanceQueueController' => 'NuanceController',
56845685
'NuanceQueueDatasource' => 'PhabricatorTypeaheadDatasource',
56855686
'NuanceQueueEditController' => 'NuanceQueueController',
5687+
'NuanceQueueEditEngine' => 'PhabricatorEditEngine',
56865688
'NuanceQueueEditor' => 'PhabricatorApplicationTransactionEditor',
56875689
'NuanceQueueListController' => 'NuanceQueueController',
56885690
'NuanceQueuePHIDType' => 'PhabricatorPHIDType',

src/applications/nuance/application/PhabricatorNuanceApplication.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,16 +45,16 @@ public function getRoutes() {
4545
'new/' => 'NuanceItemEditController',
4646
),
4747
'source/' => array(
48-
'(?:query/(?P<queryKey>[^/]+)/)?' => 'NuanceSourceListController',
48+
$this->getQueryRoutePattern() => 'NuanceSourceListController',
4949
'view/(?P<id>[1-9]\d*)/' => 'NuanceSourceViewController',
5050
'edit/(?P<id>[1-9]\d*)/' => 'NuanceSourceEditController',
5151
'new/(?P<type>[^/]+)/' => 'NuanceSourceEditController',
5252
'create/' => 'NuanceSourceCreateController',
5353
),
5454
'queue/' => array(
55-
'(?:query/(?P<queryKey>[^/]+)/)?' => 'NuanceQueueListController',
55+
$this->getQueryRoutePattern() => 'NuanceQueueListController',
56+
$this->getEditRoutePattern('edit/') => 'NuanceQueueEditController',
5657
'view/(?P<id>[1-9]\d*)/' => 'NuanceQueueViewController',
57-
'edit/(?P<id>[1-9]\d*)/' => 'NuanceQueueEditController',
5858
'new/' => 'NuanceQueueEditController',
5959
),
6060
'requestor/' => array(

src/applications/nuance/controller/NuanceQueueEditController.php

Lines changed: 3 additions & 127 deletions
Original file line numberDiff line numberDiff line change
@@ -4,133 +4,9 @@ final class NuanceQueueEditController
44
extends NuanceQueueController {
55

66
public function handleRequest(AphrontRequest $request) {
7-
$viewer = $this->getViewer();
8-
$queues_uri = $this->getApplicationURI('queue/');
9-
10-
$queue_id = $request->getURIData('id');
11-
$is_new = !$queue_id;
12-
if ($is_new) {
13-
$queue = NuanceQueue::initializeNewQueue();
14-
$cancel_uri = $queues_uri;
15-
} else {
16-
$queue = id(new NuanceQueueQuery())
17-
->setViewer($viewer)
18-
->withIDs(array($queue_id))
19-
->executeOne();
20-
if (!$queue) {
21-
return new Aphront404Response();
22-
}
23-
$cancel_uri = $queue->getURI();
24-
}
25-
26-
$v_name = $queue->getName();
27-
$e_name = true;
28-
$v_edit = $queue->getEditPolicy();
29-
$v_view = $queue->getViewPolicy();
30-
31-
$validation_exception = null;
32-
if ($request->isFormPost()) {
33-
$e_name = null;
34-
35-
$v_name = $request->getStr('name');
36-
$v_edit = $request->getStr('editPolicy');
37-
$v_view = $request->getStr('viewPolicy');
38-
39-
$type_name = NuanceQueueTransaction::TYPE_NAME;
40-
$type_view = PhabricatorTransactions::TYPE_VIEW_POLICY;
41-
$type_edit = PhabricatorTransactions::TYPE_EDIT_POLICY;
42-
43-
$xactions = array();
44-
45-
$xactions[] = id(new NuanceQueueTransaction())
46-
->setTransactionType($type_name)
47-
->setNewValue($v_name);
48-
49-
$xactions[] = id(new NuanceQueueTransaction())
50-
->setTransactionType($type_view)
51-
->setNewValue($v_view);
52-
53-
$xactions[] = id(new NuanceQueueTransaction())
54-
->setTransactionType($type_edit)
55-
->setNewValue($v_edit);
56-
57-
$editor = id(new NuanceQueueEditor())
58-
->setActor($viewer)
59-
->setContentSourceFromRequest($request)
60-
->setContinueOnNoEffect(true);
61-
62-
try {
63-
64-
$editor->applyTransactions($queue, $xactions);
65-
66-
$uri = $queue->getURI();
67-
return id(new AphrontRedirectResponse())->setURI($uri);
68-
} catch (PhabricatorApplicationTransactionValidationException $ex) {
69-
$validation_exception = $ex;
70-
71-
$e_name = $ex->getShortMessage($type_name);
72-
}
73-
}
74-
75-
$crumbs = $this->buildApplicationCrumbs();
76-
$crumbs->addTextCrumb(pht('Queues'), $queues_uri);
77-
78-
if ($is_new) {
79-
$title = pht('Create Queue');
80-
$crumbs->addTextCrumb(pht('Create'));
81-
} else {
82-
$title = pht('Edit %s', $queue->getName());
83-
$crumbs->addTextCrumb($queue->getName(), $queue->getURI());
84-
$crumbs->addTextCrumb(pht('Edit'));
85-
}
86-
87-
$policies = id(new PhabricatorPolicyQuery())
88-
->setViewer($viewer)
89-
->setObject($queue)
90-
->execute();
91-
92-
$form = id(new AphrontFormView())
93-
->setUser($viewer)
94-
->appendChild(
95-
id(new AphrontFormTextControl())
96-
->setLabel(pht('Name'))
97-
->setName('name')
98-
->setError($e_name)
99-
->setValue($v_name))
100-
->appendChild(
101-
id(new AphrontFormPolicyControl())
102-
->setUser($viewer)
103-
->setCapability(PhabricatorPolicyCapability::CAN_VIEW)
104-
->setPolicyObject($queue)
105-
->setPolicies($policies)
106-
->setValue($v_view)
107-
->setName('viewPolicy'))
108-
->appendChild(
109-
id(new AphrontFormPolicyControl())
110-
->setUser($viewer)
111-
->setCapability(PhabricatorPolicyCapability::CAN_EDIT)
112-
->setPolicyObject($queue)
113-
->setPolicies($policies)
114-
->setValue($v_edit)
115-
->setName('editPolicy'))
116-
->appendChild(
117-
id(new AphrontFormSubmitControl())
118-
->addCancelButton($cancel_uri)
119-
->setValue(pht('Save')));
120-
121-
$box = id(new PHUIObjectBoxView())
122-
->setHeaderText($title)
123-
->setValidationException($validation_exception)
124-
->appendChild($form);
125-
126-
return $this->buildApplicationPage(
127-
array(
128-
$crumbs,
129-
$box,
130-
),
131-
array(
132-
'title' => $title,
133-
));
7+
return id(new NuanceQueueEditEngine())
8+
->setController($this)
9+
->buildResponse();
13410
}
13511

13612
}
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
<?php
2+
3+
final class NuanceQueueEditEngine
4+
extends PhabricatorEditEngine {
5+
6+
const ENGINECONST = 'nuance.queue';
7+
8+
public function isEngineConfigurable() {
9+
return false;
10+
}
11+
12+
public function getEngineName() {
13+
return pht('Nuance Queues');
14+
}
15+
16+
public function getSummaryHeader() {
17+
return pht('Edit Nuance Queue Configurations');
18+
}
19+
20+
public function getSummaryText() {
21+
return pht('This engine is used to edit Nuance queues.');
22+
}
23+
24+
public function getEngineApplicationClass() {
25+
return 'PhabricatorNuanceApplication';
26+
}
27+
28+
protected function newEditableObject() {
29+
return NuanceQueue::initializeNewQueue();
30+
}
31+
32+
protected function newObjectQuery() {
33+
return new NuanceQueueQuery();
34+
}
35+
36+
protected function getObjectCreateTitleText($object) {
37+
return pht('Create Queue');
38+
}
39+
40+
protected function getObjectCreateButtonText($object) {
41+
return pht('Create Queue');
42+
}
43+
44+
protected function getObjectEditTitleText($object) {
45+
return pht('Edit Queue: %s', $object->getName());
46+
}
47+
48+
protected function getObjectEditShortText($object) {
49+
return pht('Edit Queue');
50+
}
51+
52+
protected function getObjectCreateShortText() {
53+
return pht('Create Queue');
54+
}
55+
56+
protected function getEditorURI() {
57+
return '/nuance/queue/edit/';
58+
}
59+
60+
protected function getObjectCreateCancelURI($object) {
61+
return '/nuance/queue/';
62+
}
63+
64+
protected function getObjectViewURI($object) {
65+
return $object->getURI();
66+
}
67+
68+
protected function buildCustomEditFields($object) {
69+
return array(
70+
id(new PhabricatorTextEditField())
71+
->setKey('name')
72+
->setLabel(pht('Name'))
73+
->setDescription(pht('Name of the queue.'))
74+
->setTransactionType(NuanceQueueTransaction::TYPE_NAME)
75+
->setIsRequired(true)
76+
->setValue($object->getName()),
77+
);
78+
}
79+
80+
}

src/applications/nuance/editor/NuanceQueueEditor.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ protected function applyCustomExternalTransaction(
6868

6969
return parent::applyCustomExternalTransaction($object, $xaction);
7070
}
71+
7172
protected function validateTransaction(
7273
PhabricatorLiskDAO $object,
7374
$type,

src/applications/nuance/storage/NuanceQueue.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@ public function generatePHID() {
2727
}
2828

2929
public static function initializeNewQueue() {
30-
return new NuanceQueue();
30+
return id(new self())
31+
->setViewPolicy(PhabricatorPolicies::POLICY_USER)
32+
->setEditPolicy(PhabricatorPolicies::POLICY_USER);
3133
}
3234

3335
public function save() {

src/applications/nuance/storage/NuanceQueueTransaction.php

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,6 @@ public function getApplicationTransactionCommentObject() {
1212
return new NuanceQueueTransactionComment();
1313
}
1414

15-
public function shouldHide() {
16-
$old = $this->getOldValue();
17-
$type = $this->getTransactionType();
18-
19-
switch ($type) {
20-
case self::TYPE_NAME:
21-
return ($old === null);
22-
}
23-
24-
return parent::shouldHide();
25-
}
26-
2715
public function getTitle() {
2816
$old = $this->getOldValue();
2917
$new = $this->getNewValue();
@@ -32,6 +20,10 @@ public function getTitle() {
3220
$author_phid = $this->getAuthorPHID();
3321

3422
switch ($type) {
23+
case PhabricatorTransactions::TYPE_CREATE:
24+
return pht(
25+
'%s created this queue.',
26+
$this->renderHandleLink($author_phid));
3527
case self::TYPE_NAME:
3628
return pht(
3729
'%s renamed this queue from "%s" to "%s".',

0 commit comments

Comments
 (0)