Page MenuHomePhabricator

D15399.diff
No OneTemporary

D15399.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
@@ -36,6 +36,7 @@
'AlmanacDevice' => 'applications/almanac/storage/AlmanacDevice.php',
'AlmanacDeviceController' => 'applications/almanac/controller/AlmanacDeviceController.php',
'AlmanacDeviceEditController' => 'applications/almanac/controller/AlmanacDeviceEditController.php',
+ 'AlmanacDeviceEditEngine' => 'applications/almanac/editor/AlmanacDeviceEditEngine.php',
'AlmanacDeviceEditor' => 'applications/almanac/editor/AlmanacDeviceEditor.php',
'AlmanacDeviceListController' => 'applications/almanac/controller/AlmanacDeviceListController.php',
'AlmanacDeviceNameNgrams' => 'applications/almanac/storage/AlmanacDeviceNameNgrams.php',
@@ -4045,6 +4046,7 @@
),
'AlmanacDeviceController' => 'AlmanacController',
'AlmanacDeviceEditController' => 'AlmanacDeviceController',
+ 'AlmanacDeviceEditEngine' => 'PhabricatorEditEngine',
'AlmanacDeviceEditor' => 'AlmanacEditor',
'AlmanacDeviceListController' => 'AlmanacDeviceController',
'AlmanacDeviceNameNgrams' => 'PhabricatorSearchNgrams',
diff --git a/src/applications/almanac/application/PhabricatorAlmanacApplication.php b/src/applications/almanac/application/PhabricatorAlmanacApplication.php
--- a/src/applications/almanac/application/PhabricatorAlmanacApplication.php
+++ b/src/applications/almanac/application/PhabricatorAlmanacApplication.php
@@ -50,7 +50,7 @@
),
'(?P<objectType>device)/' => array(
$this->getQueryRoutePattern() => 'AlmanacDeviceListController',
- 'edit/(?:(?P<id>\d+)/)?' => 'AlmanacDeviceEditController',
+ $this->getEditRoutePattern('edit/') => 'AlmanacDeviceEditController',
'view/(?P<name>[^/]+)/' => 'AlmanacDeviceViewController',
),
'interface/' => array(
diff --git a/src/applications/almanac/controller/AlmanacDeviceController.php b/src/applications/almanac/controller/AlmanacDeviceController.php
--- a/src/applications/almanac/controller/AlmanacDeviceController.php
+++ b/src/applications/almanac/controller/AlmanacDeviceController.php
@@ -2,6 +2,11 @@
abstract class AlmanacDeviceController extends AlmanacController {
+ public function buildApplicationMenu() {
+ return $this->newApplicationMenu()
+ ->setSearchEngine(new AlmanacDeviceSearchEngine());
+ }
+
protected function buildApplicationCrumbs() {
$crumbs = parent::buildApplicationCrumbs();
diff --git a/src/applications/almanac/controller/AlmanacDeviceEditController.php b/src/applications/almanac/controller/AlmanacDeviceEditController.php
--- a/src/applications/almanac/controller/AlmanacDeviceEditController.php
+++ b/src/applications/almanac/controller/AlmanacDeviceEditController.php
@@ -4,160 +4,9 @@
extends AlmanacDeviceController {
public function handleRequest(AphrontRequest $request) {
- $viewer = $request->getViewer();
-
- $list_uri = $this->getApplicationURI('device/');
-
- $id = $request->getURIData('id');
- if ($id) {
- $device = id(new AlmanacDeviceQuery())
- ->setViewer($viewer)
- ->withIDs(array($id))
- ->requireCapabilities(
- array(
- PhabricatorPolicyCapability::CAN_VIEW,
- PhabricatorPolicyCapability::CAN_EDIT,
- ))
- ->executeOne();
- if (!$device) {
- return new Aphront404Response();
- }
-
- $is_new = false;
- $device_uri = $device->getURI();
- $cancel_uri = $device_uri;
- $title = pht('Edit Device');
- $save_button = pht('Save Changes');
- } else {
- $this->requireApplicationCapability(
- AlmanacCreateDevicesCapability::CAPABILITY);
-
- $device = AlmanacDevice::initializeNewDevice();
- $is_new = true;
-
- $cancel_uri = $list_uri;
- $title = pht('Create Device');
- $save_button = pht('Create Device');
- }
-
- $v_name = $device->getName();
- $e_name = true;
- $validation_exception = null;
-
- if ($is_new) {
- $v_projects = array();
- } else {
- $v_projects = PhabricatorEdgeQuery::loadDestinationPHIDs(
- $device->getPHID(),
- PhabricatorProjectObjectHasProjectEdgeType::EDGECONST);
- $v_projects = array_reverse($v_projects);
- }
-
- if ($request->isFormPost()) {
- $v_name = $request->getStr('name');
- $v_view = $request->getStr('viewPolicy');
- $v_edit = $request->getStr('editPolicy');
- $v_projects = $request->getArr('projects');
-
- $type_name = AlmanacDeviceTransaction::TYPE_NAME;
- $type_view = PhabricatorTransactions::TYPE_VIEW_POLICY;
- $type_edit = PhabricatorTransactions::TYPE_EDIT_POLICY;
-
- $xactions = array();
-
- $xactions[] = id(new AlmanacDeviceTransaction())
- ->setTransactionType($type_name)
- ->setNewValue($v_name);
-
- $xactions[] = id(new AlmanacDeviceTransaction())
- ->setTransactionType($type_view)
- ->setNewValue($v_view);
-
- $xactions[] = id(new AlmanacDeviceTransaction())
- ->setTransactionType($type_edit)
- ->setNewValue($v_edit);
-
- $proj_edge_type = PhabricatorProjectObjectHasProjectEdgeType::EDGECONST;
- $xactions[] = id(new AlmanacDeviceTransaction())
- ->setTransactionType(PhabricatorTransactions::TYPE_EDGE)
- ->setMetadataValue('edge:type', $proj_edge_type)
- ->setNewValue(array('=' => array_fuse($v_projects)));
-
- $editor = id(new AlmanacDeviceEditor())
- ->setActor($viewer)
- ->setContentSourceFromRequest($request)
- ->setContinueOnNoEffect(true);
-
- try {
- $editor->applyTransactions($device, $xactions);
-
- $device_uri = $device->getURI();
- return id(new AphrontRedirectResponse())->setURI($device_uri);
- } catch (PhabricatorApplicationTransactionValidationException $ex) {
- $validation_exception = $ex;
- $e_name = $ex->getShortMessage($type_name);
-
- $device->setViewPolicy($v_view);
- $device->setEditPolicy($v_edit);
- }
- }
-
- $policies = id(new PhabricatorPolicyQuery())
- ->setViewer($viewer)
- ->setObject($device)
- ->execute();
-
- $form = id(new AphrontFormView())
- ->setUser($viewer)
- ->appendChild(
- id(new AphrontFormTextControl())
- ->setLabel(pht('Name'))
- ->setName('name')
- ->setValue($v_name)
- ->setError($e_name))
- ->appendChild(
- id(new AphrontFormPolicyControl())
- ->setName('viewPolicy')
- ->setPolicyObject($device)
- ->setCapability(PhabricatorPolicyCapability::CAN_VIEW)
- ->setPolicies($policies))
- ->appendChild(
- id(new AphrontFormPolicyControl())
- ->setName('editPolicy')
- ->setPolicyObject($device)
- ->setCapability(PhabricatorPolicyCapability::CAN_EDIT)
- ->setPolicies($policies))
- ->appendControl(
- id(new AphrontFormTokenizerControl())
- ->setLabel(pht('Projects'))
- ->setName('projects')
- ->setValue($v_projects)
- ->setDatasource(new PhabricatorProjectDatasource()))
- ->appendChild(
- id(new AphrontFormSubmitControl())
- ->addCancelButton($cancel_uri)
- ->setValue($save_button));
-
- $box = id(new PHUIObjectBoxView())
- ->setValidationException($validation_exception)
- ->setHeaderText($title)
- ->setForm($form);
-
- $crumbs = $this->buildApplicationCrumbs();
- if ($is_new) {
- $crumbs->addTextCrumb(pht('Create Device'));
- } else {
- $crumbs->addTextCrumb($device->getName(), $device_uri);
- $crumbs->addTextCrumb(pht('Edit'));
- }
-
- return $this->newPage()
- ->setTitle($title)
- ->setCrumbs($crumbs)
- ->appendChild(
- array(
- $box,
- ));
+ return id(new AlmanacDeviceEditEngine())
+ ->setController($this)
+ ->buildResponse();
}
}
diff --git a/src/applications/almanac/controller/AlmanacDeviceListController.php b/src/applications/almanac/controller/AlmanacDeviceListController.php
--- a/src/applications/almanac/controller/AlmanacDeviceListController.php
+++ b/src/applications/almanac/controller/AlmanacDeviceListController.php
@@ -8,45 +8,19 @@
}
public function handleRequest(AphrontRequest $request) {
- $controller = id(new PhabricatorApplicationSearchController())
- ->setQueryKey($request->getURIData('queryKey'))
- ->setSearchEngine(new AlmanacDeviceSearchEngine())
- ->setNavigation($this->buildSideNavView());
-
- return $this->delegateToController($controller);
+ return id(new AlmanacDeviceSearchEngine())
+ ->setController($this)
+ ->buildResponse();
}
protected function buildApplicationCrumbs() {
$crumbs = parent::buildApplicationCrumbs();
- $can_create = $this->hasApplicationCapability(
- AlmanacCreateDevicesCapability::CAPABILITY);
-
- $crumbs->addAction(
- id(new PHUIListItemView())
- ->setName(pht('Create Device'))
- ->setHref($this->getApplicationURI('device/edit/'))
- ->setIcon('fa-plus-square')
- ->setDisabled(!$can_create)
- ->setWorkflow(!$can_create));
+ id(new AlmanacDeviceEditEngine())
+ ->setViewer($this->getViewer())
+ ->addActionToCrumbs($crumbs);
return $crumbs;
}
- public function buildSideNavView() {
- $viewer = $this->getViewer();
-
- $nav = new AphrontSideNavFilterView();
- $nav->setBaseURI(new PhutilURI($this->getApplicationURI()));
-
- id(new AlmanacDeviceSearchEngine())
- ->setViewer($viewer)
- ->addNavigationItems($nav->getMenu());
-
- $nav->selectFilter(null);
-
- return $nav;
- }
-
-
}
diff --git a/src/applications/almanac/editor/AlmanacDeviceEditEngine.php b/src/applications/almanac/editor/AlmanacDeviceEditEngine.php
new file mode 100644
--- /dev/null
+++ b/src/applications/almanac/editor/AlmanacDeviceEditEngine.php
@@ -0,0 +1,85 @@
+<?php
+
+final class AlmanacDeviceEditEngine
+ extends PhabricatorEditEngine {
+
+ const ENGINECONST = 'almanac.device';
+
+ public function isEngineConfigurable() {
+ return false;
+ }
+
+ public function getEngineName() {
+ return pht('Almanac Devices');
+ }
+
+ public function getSummaryHeader() {
+ return pht('Edit Almanac Device Configurations');
+ }
+
+ public function getSummaryText() {
+ return pht('This engine is used to edit Almanac devices.');
+ }
+
+ public function getEngineApplicationClass() {
+ return 'PhabricatorAlmanacApplication';
+ }
+
+ protected function newEditableObject() {
+ return AlmanacDevice::initializeNewDevice();
+ }
+
+ protected function newObjectQuery() {
+ return new AlmanacDeviceQuery();
+ }
+
+ protected function getObjectCreateTitleText($object) {
+ return pht('Create Device');
+ }
+
+ protected function getObjectCreateButtonText($object) {
+ return pht('Create Device');
+ }
+
+ protected function getObjectEditTitleText($object) {
+ return pht('Edit Device: %s', $object->getName());
+ }
+
+ protected function getObjectEditShortText($object) {
+ return pht('Edit Device');
+ }
+
+ protected function getObjectCreateShortText() {
+ return pht('Create Device');
+ }
+
+ protected function getEditorURI() {
+ return '/almanac/device/edit/';
+ }
+
+ protected function getObjectCreateCancelURI($object) {
+ return '/almanac/device/';
+ }
+
+ protected function getObjectViewURI($object) {
+ return $object->getURI();
+ }
+
+ protected function getCreateNewObjectPolicy() {
+ return $this->getApplication()->getPolicy(
+ AlmanacCreateDevicesCapability::CAPABILITY);
+ }
+
+ protected function buildCustomEditFields($object) {
+ return array(
+ id(new PhabricatorTextEditField())
+ ->setKey('name')
+ ->setLabel(pht('Name'))
+ ->setDescription(pht('Name of the device.'))
+ ->setTransactionType(AlmanacDeviceTransaction::TYPE_NAME)
+ ->setIsRequired(true)
+ ->setValue($object->getName()),
+ );
+ }
+
+}

File Metadata

Mime Type
text/plain
Expires
Sun, Dec 22, 11:56 AM (19 h, 8 m)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6918204
Default Alt Text
D15399.diff (11 KB)

Event Timeline