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 @@ -3386,6 +3386,7 @@ 'PholioInlineController' => 'applications/pholio/controller/PholioInlineController.php', 'PholioInlineListController' => 'applications/pholio/controller/PholioInlineListController.php', 'PholioMock' => 'applications/pholio/storage/PholioMock.php', + 'PholioMockArchiveController' => 'applications/pholio/controller/PholioMockArchiveController.php', 'PholioMockAuthorHeraldField' => 'applications/pholio/herald/PholioMockAuthorHeraldField.php', 'PholioMockCommentController' => 'applications/pholio/controller/PholioMockCommentController.php', 'PholioMockDescriptionHeraldField' => 'applications/pholio/herald/PholioMockDescriptionHeraldField.php', @@ -7762,6 +7763,7 @@ 'PhabricatorSpacesInterface', 'PhabricatorMentionableInterface', ), + 'PholioMockArchiveController' => 'PholioController', 'PholioMockAuthorHeraldField' => 'PholioMockHeraldField', 'PholioMockCommentController' => 'PholioController', 'PholioMockDescriptionHeraldField' => 'PholioMockHeraldField', diff --git a/src/applications/pholio/application/PhabricatorPholioApplication.php b/src/applications/pholio/application/PhabricatorPholioApplication.php --- a/src/applications/pholio/application/PhabricatorPholioApplication.php +++ b/src/applications/pholio/application/PhabricatorPholioApplication.php @@ -45,6 +45,7 @@ '(?:query/(?P<queryKey>[^/]+)/)?' => 'PholioMockListController', 'new/' => 'PholioMockEditController', 'edit/(?P<id>\d+)/' => 'PholioMockEditController', + 'archive/(?P<id>\d+)/' => 'PholioMockArchiveController', 'comment/(?P<id>\d+)/' => 'PholioMockCommentController', 'inline/' => array( '(?:(?P<id>\d+)/)?' => 'PholioInlineController', diff --git a/src/applications/pholio/controller/PholioMockArchiveController.php b/src/applications/pholio/controller/PholioMockArchiveController.php new file mode 100644 --- /dev/null +++ b/src/applications/pholio/controller/PholioMockArchiveController.php @@ -0,0 +1,65 @@ +<?php + +final class PholioMockArchiveController + extends PholioController { + + public function handleRequest(AphrontRequest $request) { + $viewer = $request->getViewer(); + $id = $request->getURIData('id'); + + $mock = id(new PholioMockQuery()) + ->setViewer($viewer) + ->withIDs(array($id)) + ->requireCapabilities( + array( + PhabricatorPolicyCapability::CAN_VIEW, + PhabricatorPolicyCapability::CAN_EDIT, + )) + ->executeOne(); + if (!$mock) { + return new Aphront404Response(); + } + + $view_uri = '/M'.$mock->getID(); + + if ($request->isFormPost()) { + if ($mock->isClosed()) { + $new_status = PholioMock::STATUS_OPEN; + } else { + $new_status = PholioMock::STATUS_CLOSED; + } + + $xactions = array(); + + $xactions[] = id(new PholioTransaction()) + ->setTransactionType(PholioTransaction::TYPE_STATUS) + ->setNewValue($new_status); + + id(new PholioMockEditor()) + ->setActor($viewer) + ->setContentSourceFromRequest($request) + ->setContinueOnNoEffect(true) + ->setContinueOnMissingFields(true) + ->applyTransactions($mock, $xactions); + + return id(new AphrontRedirectResponse())->setURI($view_uri); + } + + if ($mock->isClosed()) { + $title = pht('Open Pholio Mock'); + $body = pht('This mock will become open again.'); + $button = pht('Open Mock'); + } else { + $title = pht('Close Pholio Mock'); + $body = pht('This mock will be closed.'); + $button = pht('Close Mock'); + } + + return $this->newDialog() + ->setTitle($title) + ->appendChild($body) + ->addCancelButton($view_uri) + ->addSubmitButton($button); + } + +} diff --git a/src/applications/pholio/controller/PholioMockEditController.php b/src/applications/pholio/controller/PholioMockEditController.php --- a/src/applications/pholio/controller/PholioMockEditController.php +++ b/src/applications/pholio/controller/PholioMockEditController.php @@ -54,7 +54,6 @@ $v_name = $mock->getName(); $v_desc = $mock->getDescription(); - $v_status = $mock->getStatus(); $v_view = $mock->getViewPolicy(); $v_edit = $mock->getEditPolicy(); $v_cc = PhabricatorSubscribersQuery::loadSubscribersForPHID( @@ -66,7 +65,6 @@ $type_name = PholioTransaction::TYPE_NAME; $type_desc = PholioTransaction::TYPE_DESCRIPTION; - $type_status = PholioTransaction::TYPE_STATUS; $type_view = PhabricatorTransactions::TYPE_VIEW_POLICY; $type_edit = PhabricatorTransactions::TYPE_EDIT_POLICY; $type_cc = PhabricatorTransactions::TYPE_SUBSCRIBERS; @@ -74,7 +72,6 @@ $v_name = $request->getStr('name'); $v_desc = $request->getStr('description'); - $v_status = $request->getStr('status'); $v_view = $request->getStr('can_view'); $v_edit = $request->getStr('can_edit'); $v_cc = $request->getArr('cc'); @@ -84,7 +81,6 @@ $mock_xactions = array(); $mock_xactions[$type_name] = $v_name; $mock_xactions[$type_desc] = $v_desc; - $mock_xactions[$type_status] = $v_status; $mock_xactions[$type_view] = $v_view; $mock_xactions[$type_edit] = $v_edit; $mock_xactions[$type_cc] = array('=' => $v_cc); @@ -315,20 +311,7 @@ ->setName('description') ->setValue($v_desc) ->setLabel(pht('Description')) - ->setUser($viewer)); - - if ($id) { - $form->appendChild( - id(new AphrontFormSelectControl()) - ->setLabel(pht('Status')) - ->setName('status') - ->setValue($mock->getStatus()) - ->setOptions($mock->getStatuses())); - } else { - $form->addHiddenInput('status', 'open'); - } - - $form + ->setUser($viewer)) ->appendControl( id(new AphrontFormTokenizerControl()) ->setLabel(pht('Projects')) diff --git a/src/applications/pholio/controller/PholioMockViewController.php b/src/applications/pholio/controller/PholioMockViewController.php --- a/src/applications/pholio/controller/PholioMockViewController.php +++ b/src/applications/pholio/controller/PholioMockViewController.php @@ -133,6 +133,24 @@ ->setDisabled(!$can_edit) ->setWorkflow(!$can_edit)); + if ($mock->isClosed()) { + $actions->addAction( + id(new PhabricatorActionView()) + ->setIcon('fa-check') + ->setName(pht('Open Mock')) + ->setHref($this->getApplicationURI('/archive/'.$mock->getID().'/')) + ->setDisabled(!$can_edit) + ->setWorkflow(true)); + } else { + $actions->addAction( + id(new PhabricatorActionView()) + ->setIcon('fa-ban') + ->setName(pht('Close Mock')) + ->setHref($this->getApplicationURI('/archive/'.$mock->getID().'/')) + ->setDisabled(!$can_edit) + ->setWorkflow(true)); + } + $actions->addAction( id(new PhabricatorActionView()) ->setIcon('fa-anchor')