Page MenuHomePhabricator

D15504.diff
No OneTemporary

D15504.diff

diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -1439,6 +1439,7 @@
'NuanceImportCursorDataQuery' => 'applications/nuance/query/NuanceImportCursorDataQuery.php',
'NuanceImportCursorPHIDType' => 'applications/nuance/phid/NuanceImportCursorPHIDType.php',
'NuanceItem' => 'applications/nuance/storage/NuanceItem.php',
+ 'NuanceItemActionController' => 'applications/nuance/controller/NuanceItemActionController.php',
'NuanceItemController' => 'applications/nuance/controller/NuanceItemController.php',
'NuanceItemEditor' => 'applications/nuance/editor/NuanceItemEditor.php',
'NuanceItemListController' => 'applications/nuance/controller/NuanceItemListController.php',
@@ -5726,6 +5727,7 @@
'PhabricatorPolicyInterface',
'PhabricatorApplicationTransactionInterface',
),
+ 'NuanceItemActionController' => 'NuanceController',
'NuanceItemController' => 'NuanceController',
'NuanceItemEditor' => 'PhabricatorApplicationTransactionEditor',
'NuanceItemListController' => 'NuanceItemController',
diff --git a/src/applications/nuance/application/PhabricatorNuanceApplication.php b/src/applications/nuance/application/PhabricatorNuanceApplication.php
--- a/src/applications/nuance/application/PhabricatorNuanceApplication.php
+++ b/src/applications/nuance/application/PhabricatorNuanceApplication.php
@@ -43,6 +43,8 @@
$this->getQueryRoutePattern() => 'NuanceItemListController',
'view/(?P<id>[1-9]\d*)/' => 'NuanceItemViewController',
'manage/(?P<id>[1-9]\d*)/' => 'NuanceItemManageController',
+ 'action/(?P<id>[1-9]\d*)/(?P<action>[^/]+)/'
+ => 'NuanceItemActionController',
),
'source/' => array(
$this->getQueryRoutePattern() => 'NuanceSourceListController',
diff --git a/src/applications/nuance/controller/NuanceItemActionController.php b/src/applications/nuance/controller/NuanceItemActionController.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/controller/NuanceItemActionController.php
@@ -0,0 +1,26 @@
+<?php
+
+final class NuanceItemActionController extends NuanceController {
+
+ public function handleRequest(AphrontRequest $request) {
+ $viewer = $this->getViewer();
+ $id = $request->getURIData('id');
+
+ $item = id(new NuanceItemQuery())
+ ->setViewer($viewer)
+ ->withIDs(array($id))
+ ->executeOne();
+ if (!$item) {
+ return new Aphront404Response();
+ }
+
+ $action = $request->getURIData('action');
+
+ $impl = $item->getImplementation();
+ $impl->setViewer($viewer);
+ $impl->setController($this);
+
+ return $impl->buildActionResponse($item, $action);
+ }
+
+}
diff --git a/src/applications/nuance/controller/NuanceItemViewController.php b/src/applications/nuance/controller/NuanceItemViewController.php
--- a/src/applications/nuance/controller/NuanceItemViewController.php
+++ b/src/applications/nuance/controller/NuanceItemViewController.php
@@ -58,6 +58,13 @@
->setIcon('fa-cogs')
->setHref($this->getApplicationURI("item/manage/{$id}/")));
+ $impl = $item->getImplementation();
+ $impl->setViewer($viewer);
+
+ foreach ($impl->getItemActions($item) as $action) {
+ $curtain->addAction($action);
+ }
+
return $curtain;
}
diff --git a/src/applications/nuance/item/NuanceGitHubEventItemType.php b/src/applications/nuance/item/NuanceGitHubEventItemType.php
--- a/src/applications/nuance/item/NuanceGitHubEventItemType.php
+++ b/src/applications/nuance/item/NuanceGitHubEventItemType.php
@@ -144,4 +144,46 @@
return NuanceGitHubRawEvent::newEvent($type, $raw);
}
+ public function getItemActions(NuanceItem $item) {
+ $actions = array();
+
+ $actions[] = $this->newItemAction($item, 'raw')
+ ->setName(pht('View Raw Event'))
+ ->setWorkflow(true)
+ ->setIcon('fa-code');
+
+ return $actions;
+ }
+
+ protected function handleAction(NuanceItem $item, $action) {
+ $controller = $this->getController();
+
+ switch ($action) {
+ case 'raw':
+ $raw = array(
+ 'api.type' => $item->getItemProperty('api.type'),
+ 'api.raw' => $item->getItemProperty('api.raw'),
+ );
+
+ $raw_output = id(new PhutilJSON())->encodeFormatted($raw);
+
+ $raw_box = id(new AphrontFormTextAreaControl())
+ ->setCustomClass('PhabricatorMonospaced')
+ ->setLabel(pht('Raw Event'))
+ ->setHeight(AphrontFormTextAreaControl::HEIGHT_VERY_TALL)
+ ->setValue($raw_output);
+
+ $form = id(new AphrontFormView())
+ ->appendChild($raw_box);
+
+ return $controller->newDialog()
+ ->setWidth(AphrontDialogView::WIDTH_FULL)
+ ->setTitle(pht('GitHub Raw Event'))
+ ->appendForm($form)
+ ->addCancelButton($item->getURI(), pht('Done'));
+ }
+
+ return null;
+ }
+
}
diff --git a/src/applications/nuance/item/NuanceItemType.php b/src/applications/nuance/item/NuanceItemType.php
--- a/src/applications/nuance/item/NuanceItemType.php
+++ b/src/applications/nuance/item/NuanceItemType.php
@@ -4,6 +4,7 @@
extends Phobject {
private $viewer;
+ private $controller;
public function setViewer(PhabricatorUser $viewer) {
$this->viewer = $viewer;
@@ -14,6 +15,15 @@
return $this->viewer;
}
+ public function setController(PhabricatorController $controller) {
+ $this->controller = $controller;
+ return $this;
+ }
+
+ public function getController() {
+ return $this->controller;
+ }
+
public function canUpdateItems() {
return false;
}
@@ -30,6 +40,10 @@
return null;
}
+ public function getItemActions(NuanceItem $item) {
+ return array();
+ }
+
abstract public function getItemTypeDisplayName();
abstract public function getItemDisplayName(NuanceItem $item);
@@ -60,4 +74,26 @@
->execute();
}
+ final protected function newItemAction(NuanceItem $item, $key) {
+ $id = $item->getID();
+ $action_uri = "/nuance/item/action/{$id}/{$key}/";
+
+ return id(new PhabricatorActionView())
+ ->setHref($action_uri);
+ }
+
+ final public function buildActionResponse(NuanceItem $item, $action) {
+ $response = $this->handleAction($item, $action);
+
+ if ($response === null) {
+ return new Aphront404Response();
+ }
+
+ return $response;
+ }
+
+ protected function handleAction(NuanceItem $item, $action) {
+ return null;
+ }
+
}

File Metadata

Mime Type
text/plain
Expires
Mon, Mar 3, 9:23 PM (9 h, 37 m)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7219834
Default Alt Text
D15504.diff (6 KB)

Event Timeline