Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15451377
D15357.id.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
20 KB
Referenced Files
None
Subscribers
None
D15357.id.diff
View Options
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
@@ -1053,6 +1053,7 @@
'HarbormasterBuildPlanDatasource' => 'applications/harbormaster/typeahead/HarbormasterBuildPlanDatasource.php',
'HarbormasterBuildPlanDefaultEditCapability' => 'applications/harbormaster/capability/HarbormasterBuildPlanDefaultEditCapability.php',
'HarbormasterBuildPlanDefaultViewCapability' => 'applications/harbormaster/capability/HarbormasterBuildPlanDefaultViewCapability.php',
+ 'HarbormasterBuildPlanEditEngine' => 'applications/harbormaster/editor/HarbormasterBuildPlanEditEngine.php',
'HarbormasterBuildPlanEditor' => 'applications/harbormaster/editor/HarbormasterBuildPlanEditor.php',
'HarbormasterBuildPlanPHIDType' => 'applications/harbormaster/phid/HarbormasterBuildPlanPHIDType.php',
'HarbormasterBuildPlanQuery' => 'applications/harbormaster/query/HarbormasterBuildPlanQuery.php',
@@ -5202,6 +5203,7 @@
'HarbormasterBuildPlanDatasource' => 'PhabricatorTypeaheadDatasource',
'HarbormasterBuildPlanDefaultEditCapability' => 'PhabricatorPolicyCapability',
'HarbormasterBuildPlanDefaultViewCapability' => 'PhabricatorPolicyCapability',
+ 'HarbormasterBuildPlanEditEngine' => 'PhabricatorEditEngine',
'HarbormasterBuildPlanEditor' => 'PhabricatorApplicationTransactionEditor',
'HarbormasterBuildPlanPHIDType' => 'PhabricatorPHIDType',
'HarbormasterBuildPlanQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
@@ -5283,7 +5285,7 @@
'HarbormasterPlanDisableController' => 'HarbormasterPlanController',
'HarbormasterPlanEditController' => 'HarbormasterPlanController',
'HarbormasterPlanListController' => 'HarbormasterPlanController',
- 'HarbormasterPlanRunController' => 'HarbormasterController',
+ 'HarbormasterPlanRunController' => 'HarbormasterPlanController',
'HarbormasterPlanViewController' => 'HarbormasterPlanController',
'HarbormasterPrototypeBuildStepGroup' => 'HarbormasterBuildStepGroup',
'HarbormasterPublishFragmentBuildStepImplementation' => 'HarbormasterBuildStepImplementation',
@@ -5296,10 +5298,10 @@
'HarbormasterScratchTable' => 'HarbormasterDAO',
'HarbormasterSendMessageConduitAPIMethod' => 'HarbormasterConduitAPIMethod',
'HarbormasterSleepBuildStepImplementation' => 'HarbormasterBuildStepImplementation',
- 'HarbormasterStepAddController' => 'HarbormasterController',
- 'HarbormasterStepDeleteController' => 'HarbormasterController',
- 'HarbormasterStepEditController' => 'HarbormasterController',
- 'HarbormasterStepViewController' => 'HarbormasterController',
+ 'HarbormasterStepAddController' => 'HarbormasterPlanController',
+ 'HarbormasterStepDeleteController' => 'HarbormasterPlanController',
+ 'HarbormasterStepEditController' => 'HarbormasterPlanController',
+ 'HarbormasterStepViewController' => 'HarbormasterPlanController',
'HarbormasterTargetEngine' => 'Phobject',
'HarbormasterTargetWorker' => 'HarbormasterWorker',
'HarbormasterTestBuildStepGroup' => 'HarbormasterBuildStepGroup',
diff --git a/src/applications/harbormaster/application/PhabricatorHarbormasterApplication.php b/src/applications/harbormaster/application/PhabricatorHarbormasterApplication.php
--- a/src/applications/harbormaster/application/PhabricatorHarbormasterApplication.php
+++ b/src/applications/harbormaster/application/PhabricatorHarbormasterApplication.php
@@ -76,9 +76,9 @@
=> 'HarbormasterBuildActionController',
),
'plan/' => array(
- '(?:query/(?P<queryKey>[^/]+)/)?'
- => 'HarbormasterPlanListController',
- 'edit/(?:(?P<id>\d+)/)?' => 'HarbormasterPlanEditController',
+ $this->getQueryRoutePattern() => 'HarbormasterPlanListController',
+ $this->getEditRoutePattern('edit/')
+ => 'HarbormasterPlanEditController',
'order/(?:(?P<id>\d+)/)?' => 'HarbormasterPlanOrderController',
'disable/(?P<id>\d+)/' => 'HarbormasterPlanDisableController',
'run/(?P<id>\d+)/' => 'HarbormasterPlanRunController',
diff --git a/src/applications/harbormaster/controller/HarbormasterBuildableListController.php b/src/applications/harbormaster/controller/HarbormasterBuildableListController.php
--- a/src/applications/harbormaster/controller/HarbormasterBuildableListController.php
+++ b/src/applications/harbormaster/controller/HarbormasterBuildableListController.php
@@ -7,34 +7,21 @@
}
public function handleRequest(AphrontRequest $request) {
- $controller = id(new PhabricatorApplicationSearchController())
- ->setQueryKey($request->getURIData('queryKey'))
- ->setSearchEngine(new HarbormasterBuildableSearchEngine())
- ->setNavigation($this->buildSideNavView());
+ $items = array();
- return $this->delegateToController($controller);
- }
-
- public function buildSideNavView($for_app = false) {
- $user = $this->getRequest()->getUser();
-
- $nav = new AphrontSideNavFilterView();
- $nav->setBaseURI(new PhutilURI($this->getApplicationURI()));
-
- id(new HarbormasterBuildableSearchEngine())
- ->setViewer($user)
- ->addNavigationItems($nav->getMenu());
+ $items[] = id(new PHUIListItemView())
+ ->setType(PHUIListItemView::TYPE_LABEL)
+ ->setName(pht('Build Plans'));
- $nav->addLabel(pht('Build Plans'));
- $nav->addFilter('plan/', pht('Manage Build Plans'));
-
- $nav->selectFilter(null);
-
- return $nav;
- }
+ $items[] = id(new PHUIListItemView())
+ ->setType(PHUIListItemView::TYPE_LINK)
+ ->setName(pht('Manage Build Plans'))
+ ->setHref($this->getApplicationURI('plan/'));
- public function buildApplicationMenu() {
- return $this->buildSideNavView(true)->getMenu();
+ return id(new HarbormasterBuildableSearchEngine())
+ ->setController($this)
+ ->setNavigationItems($items)
+ ->buildResponse();
}
}
diff --git a/src/applications/harbormaster/controller/HarbormasterController.php b/src/applications/harbormaster/controller/HarbormasterController.php
--- a/src/applications/harbormaster/controller/HarbormasterController.php
+++ b/src/applications/harbormaster/controller/HarbormasterController.php
@@ -2,6 +2,11 @@
abstract class HarbormasterController extends PhabricatorController {
+ public function buildApplicationMenu() {
+ return $this->newApplicationMenu()
+ ->setSearchEngine(new HarbormasterBuildableSearchEngine());
+ }
+
protected function addBuildableCrumb(
PHUICrumbsView $crumbs,
HarbormasterBuildable $buildable) {
diff --git a/src/applications/harbormaster/controller/HarbormasterPlanController.php b/src/applications/harbormaster/controller/HarbormasterPlanController.php
--- a/src/applications/harbormaster/controller/HarbormasterPlanController.php
+++ b/src/applications/harbormaster/controller/HarbormasterPlanController.php
@@ -2,6 +2,11 @@
abstract class HarbormasterPlanController extends HarbormasterController {
+ public function buildApplicationMenu() {
+ return $this->newApplicationMenu()
+ ->setSearchEngine(new HarbormasterBuildPlanSearchEngine());
+ }
+
protected function buildApplicationCrumbs() {
$crumbs = parent::buildApplicationCrumbs();
diff --git a/src/applications/harbormaster/controller/HarbormasterPlanEditController.php b/src/applications/harbormaster/controller/HarbormasterPlanEditController.php
--- a/src/applications/harbormaster/controller/HarbormasterPlanEditController.php
+++ b/src/applications/harbormaster/controller/HarbormasterPlanEditController.php
@@ -3,146 +3,9 @@
final class HarbormasterPlanEditController extends HarbormasterPlanController {
public function handleRequest(AphrontRequest $request) {
- $viewer = $this->getViewer();
-
- $id = $request->getURIData('id');
- if ($id) {
- $plan = id(new HarbormasterBuildPlanQuery())
- ->setViewer($viewer)
- ->withIDs(array($id))
- ->requireCapabilities(
- array(
- PhabricatorPolicyCapability::CAN_VIEW,
- PhabricatorPolicyCapability::CAN_EDIT,
- ))
- ->executeOne();
- if (!$plan) {
- return new Aphront404Response();
- }
- } else {
- $this->requireApplicationCapability(
- HarbormasterCreatePlansCapability::CAPABILITY);
-
- $plan = HarbormasterBuildPlan::initializeNewBuildPlan($viewer);
- }
-
- $e_name = true;
- $v_name = $plan->getName();
- $v_view = $plan->getViewPolicy();
- $v_edit = $plan->getEditPolicy();
- $validation_exception = null;
- if ($request->isFormPost()) {
- $xactions = array();
-
- $v_name = $request->getStr('name');
- $v_view = $request->getStr('viewPolicy');
- $v_edit = $request->getStr('editPolicy');
-
- $e_name = null;
-
- $type_name = HarbormasterBuildPlanTransaction::TYPE_NAME;
- $type_view = PhabricatorTransactions::TYPE_VIEW_POLICY;
- $type_edit = PhabricatorTransactions::TYPE_EDIT_POLICY;
-
- $xactions[] = id(new HarbormasterBuildPlanTransaction())
- ->setTransactionType($type_name)
- ->setNewValue($v_name);
-
- $xactions[] = id(new HarbormasterBuildPlanTransaction())
- ->setTransactionType($type_view)
- ->setNewValue($v_view);
-
- $xactions[] = id(new HarbormasterBuildPlanTransaction())
- ->setTransactionType($type_edit)
- ->setNewValue($v_edit);
-
- $editor = id(new HarbormasterBuildPlanEditor())
- ->setActor($viewer)
- ->setContinueOnNoEffect(true)
- ->setContentSourceFromRequest($request);
-
- try {
- $editor->applyTransactions($plan, $xactions);
- return id(new AphrontRedirectResponse())
- ->setURI($this->getApplicationURI('plan/'.$plan->getID().'/'));
- } catch (PhabricatorApplicationTransactionValidationException $ex) {
- $validation_exception = $ex;
-
- $e_name = $validation_exception->getShortMessage(
- HarbormasterBuildPlanTransaction::TYPE_NAME);
- }
-
- }
-
- $is_new = (!$plan->getID());
- if ($is_new) {
- $title = pht('New Build Plan');
- $cancel_uri = $this->getApplicationURI('plan/');
- $save_button = pht('Create Build Plan');
- } else {
- $id = $plan->getID();
-
- $title = pht('Edit Build Plan');
- $cancel_uri = $this->getApplicationURI('plan/'.$plan->getID().'/');
- $save_button = pht('Save Build Plan');
- }
-
- $policies = id(new PhabricatorPolicyQuery())
- ->setViewer($viewer)
- ->setObject($plan)
- ->execute();
-
- $form = id(new AphrontFormView())
- ->setUser($viewer)
- ->appendControl(
- id(new AphrontFormTextControl())
- ->setLabel(pht('Plan Name'))
- ->setName('name')
- ->setError($e_name)
- ->setValue($v_name))
- ->appendControl(
- id(new AphrontFormPolicyControl())
- ->setCapability(PhabricatorPolicyCapability::CAN_VIEW)
- ->setPolicyObject($plan)
- ->setPolicies($policies)
- ->setValue($v_view)
- ->setName('viewPolicy'))
- ->appendControl(
- id(new AphrontFormPolicyControl())
- ->setCapability(PhabricatorPolicyCapability::CAN_EDIT)
- ->setPolicyObject($plan)
- ->setPolicies($policies)
- ->setValue($v_edit)
- ->setName('editPolicy'))
- ->appendControl(
- id(new AphrontFormSubmitControl())
- ->setValue($save_button)
- ->addCancelButton($cancel_uri));
-
- $box = id(new PHUIObjectBoxView())
- ->setHeaderText($title)
- ->setValidationException($validation_exception)
- ->setForm($form);
-
- $crumbs = $this->buildApplicationCrumbs();
- if ($is_new) {
- $crumbs->addTextCrumb(pht('New Build Plan'));
- } else {
- $id = $plan->getID();
- $crumbs->addTextCrumb(
- pht('Plan %d', $id),
- $this->getApplicationURI("plan/{$id}/"));
- $crumbs->addTextCrumb(pht('Edit'));
- }
-
- return $this->buildApplicationPage(
- array(
- $crumbs,
- $box,
- ),
- array(
- 'title' => $title,
- ));
+ return id(new HarbormasterBuildPlanEditEngine())
+ ->setController($this)
+ ->buildResponse();
}
}
diff --git a/src/applications/harbormaster/controller/HarbormasterPlanListController.php b/src/applications/harbormaster/controller/HarbormasterPlanListController.php
--- a/src/applications/harbormaster/controller/HarbormasterPlanListController.php
+++ b/src/applications/harbormaster/controller/HarbormasterPlanListController.php
@@ -7,53 +7,19 @@
}
public function handleRequest(AphrontRequest $request) {
- $controller = id(new PhabricatorApplicationSearchController())
- ->setQueryKey($request->getURIData('queryKey'))
- ->setSearchEngine(new HarbormasterBuildPlanSearchEngine())
- ->setNavigation($this->buildSideNavView());
-
- return $this->delegateToController($controller);
- }
-
- public function buildSideNavView($for_app = false) {
- $user = $this->getRequest()->getUser();
-
- $nav = new AphrontSideNavFilterView();
- $nav->setBaseURI(new PhutilURI($this->getApplicationURI()));
-
- if ($for_app) {
- $nav->addFilter('new/', pht('New Build Plan'));
- }
-
- id(new HarbormasterBuildPlanSearchEngine())
- ->setViewer($user)
- ->addNavigationItems($nav->getMenu());
-
- $nav->selectFilter(null);
-
- return $nav;
- }
-
- public function buildApplicationMenu() {
- return $this->buildSideNavView(true)->getMenu();
+ return id(new HarbormasterBuildPlanSearchEngine())
+ ->setController($this)
+ ->buildResponse();
}
protected function buildApplicationCrumbs() {
$crumbs = parent::buildApplicationCrumbs();
- $can_create = $this->hasApplicationCapability(
- HarbormasterCreatePlansCapability::CAPABILITY);
-
- $crumbs->addAction(
- id(new PHUIListItemView())
- ->setName(pht('New Build Plan'))
- ->setHref($this->getApplicationURI('plan/edit/'))
- ->setDisabled(!$can_create)
- ->setWorkflow(!$can_create)
- ->setIcon('fa-plus-square'));
+ id(new HarbormasterBuildPlanEditEngine())
+ ->setViewer($this->getViewer())
+ ->addActionToCrumbs($crumbs);
return $crumbs;
}
-
}
diff --git a/src/applications/harbormaster/controller/HarbormasterPlanRunController.php b/src/applications/harbormaster/controller/HarbormasterPlanRunController.php
--- a/src/applications/harbormaster/controller/HarbormasterPlanRunController.php
+++ b/src/applications/harbormaster/controller/HarbormasterPlanRunController.php
@@ -1,6 +1,6 @@
<?php
-final class HarbormasterPlanRunController extends HarbormasterController {
+final class HarbormasterPlanRunController extends HarbormasterPlanController {
public function handleRequest(AphrontRequest $request) {
$viewer = $this->getViewer();
diff --git a/src/applications/harbormaster/controller/HarbormasterStepAddController.php b/src/applications/harbormaster/controller/HarbormasterStepAddController.php
--- a/src/applications/harbormaster/controller/HarbormasterStepAddController.php
+++ b/src/applications/harbormaster/controller/HarbormasterStepAddController.php
@@ -1,6 +1,7 @@
<?php
-final class HarbormasterStepAddController extends HarbormasterController {
+final class HarbormasterStepAddController
+ extends HarbormasterPlanController {
public function handleRequest(AphrontRequest $request) {
$viewer = $this->getViewer();
diff --git a/src/applications/harbormaster/controller/HarbormasterStepDeleteController.php b/src/applications/harbormaster/controller/HarbormasterStepDeleteController.php
--- a/src/applications/harbormaster/controller/HarbormasterStepDeleteController.php
+++ b/src/applications/harbormaster/controller/HarbormasterStepDeleteController.php
@@ -1,6 +1,7 @@
<?php
-final class HarbormasterStepDeleteController extends HarbormasterController {
+final class HarbormasterStepDeleteController
+ extends HarbormasterPlanController {
public function handleRequest(AphrontRequest $request) {
$viewer = $this->getViewer();
diff --git a/src/applications/harbormaster/controller/HarbormasterStepEditController.php b/src/applications/harbormaster/controller/HarbormasterStepEditController.php
--- a/src/applications/harbormaster/controller/HarbormasterStepEditController.php
+++ b/src/applications/harbormaster/controller/HarbormasterStepEditController.php
@@ -1,6 +1,7 @@
<?php
-final class HarbormasterStepEditController extends HarbormasterController {
+final class HarbormasterStepEditController
+ extends HarbormasterPlanController {
public function handleRequest(AphrontRequest $request) {
$viewer = $this->getViewer();
diff --git a/src/applications/harbormaster/controller/HarbormasterStepViewController.php b/src/applications/harbormaster/controller/HarbormasterStepViewController.php
--- a/src/applications/harbormaster/controller/HarbormasterStepViewController.php
+++ b/src/applications/harbormaster/controller/HarbormasterStepViewController.php
@@ -1,6 +1,7 @@
<?php
-final class HarbormasterStepViewController extends HarbormasterController {
+final class HarbormasterStepViewController
+ extends HarbormasterPlanController {
public function handleRequest(AphrontRequest $request) {
$viewer = $this->getViewer();
diff --git a/src/applications/harbormaster/editor/HarbormasterBuildPlanEditEngine.php b/src/applications/harbormaster/editor/HarbormasterBuildPlanEditEngine.php
new file mode 100644
--- /dev/null
+++ b/src/applications/harbormaster/editor/HarbormasterBuildPlanEditEngine.php
@@ -0,0 +1,89 @@
+<?php
+
+final class HarbormasterBuildPlanEditEngine
+ extends PhabricatorEditEngine {
+
+ const ENGINECONST = 'harbormaster.buildplan';
+
+ public function isEngineConfigurable() {
+ return false;
+ }
+
+ public function getEngineName() {
+ return pht('Harbormaster Build Plans');
+ }
+
+ public function getSummaryHeader() {
+ return pht('Edit Harbormaster Build Plan Configurations');
+ }
+
+ public function getSummaryText() {
+ return pht('This engine is used to edit Harbormaster build plans.');
+ }
+
+ public function getEngineApplicationClass() {
+ return 'PhabricatorHarbormasterApplication';
+ }
+
+ protected function newEditableObject() {
+ $viewer = $this->getViewer();
+ return HarbormasterBuildPlan::initializeNewBuildPlan($viewer);
+ }
+
+ protected function newObjectQuery() {
+ return new HarbormasterBuildPlanQuery();
+ }
+
+ protected function getObjectCreateTitleText($object) {
+ return pht('Create Build Plan');
+ }
+
+ protected function getObjectCreateButtonText($object) {
+ return pht('Create Build Plan');
+ }
+
+ protected function getObjectEditTitleText($object) {
+ return pht('Edit Build Plan: %s', $object->getName());
+ }
+
+ protected function getObjectEditShortText($object) {
+ return pht('Edit Build Plan');
+ }
+
+ protected function getObjectCreateShortText() {
+ return pht('Create Build Plan');
+ }
+
+ protected function getEditorURI() {
+ return '/harbormaster/plan/edit/';
+ }
+
+ protected function getObjectCreateCancelURI($object) {
+ return '/harbormaster/plan/';
+ }
+
+ protected function getObjectViewURI($object) {
+ $id = $object->getID();
+ return "/harbormaster/plan/{$id}/";
+ }
+
+ protected function getCreateNewObjectPolicy() {
+ return $this->getApplication()->getPolicy(
+ HarbormasterCreatePlansCapability::CAPABILITY);
+ }
+
+ protected function buildCustomEditFields($object) {
+ return array(
+ id(new PhabricatorTextEditField())
+ ->setKey('name')
+ ->setLabel(pht('Name'))
+ ->setIsRequired(true)
+ ->setTransactionType(HarbormasterBuildPlanTransaction::TYPE_NAME)
+ ->setDescription(pht('The build plan name.'))
+ ->setConduitDescription(pht('Rename the plan.'))
+ ->setConduitTypeDescription(pht('New plan name.'))
+ ->setValue($object->getName()),
+ );
+ }
+
+}
diff --git a/src/applications/harbormaster/editor/HarbormasterBuildPlanEditor.php b/src/applications/harbormaster/editor/HarbormasterBuildPlanEditor.php
--- a/src/applications/harbormaster/editor/HarbormasterBuildPlanEditor.php
+++ b/src/applications/harbormaster/editor/HarbormasterBuildPlanEditor.php
@@ -90,7 +90,7 @@
$error = new PhabricatorApplicationTransactionValidationError(
$type,
pht('Required'),
- pht('Plan name is required.'),
+ pht('You must choose a name for your build plan.'),
last($xactions));
$error->setIsMissingFieldError(true);
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Mar 29, 9:46 PM (1 w, 5 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7390577
Default Alt Text
D15357.id.diff (20 KB)
Attached To
Mode
D15357: Use EditEngine for Harbormaster Build Plans, fix some crumbs/mobile stuff
Attached
Detach File
Event Timeline
Log In to Comment