diff --git a/resources/celerity/map.php b/resources/celerity/map.php --- a/resources/celerity/map.php +++ b/resources/celerity/map.php @@ -80,7 +80,7 @@ 'rsrc/css/application/maniphest/task-summary.css' => '11cc5344', 'rsrc/css/application/objectselector/object-selector.css' => '85ee8ce6', 'rsrc/css/application/owners/owners-path-editor.css' => '2f00933b', - 'rsrc/css/application/paste/paste.css' => 'b2f5a543', + 'rsrc/css/application/paste/paste.css' => 'a5157c48', 'rsrc/css/application/people/people-profile.css' => '25970776', 'rsrc/css/application/phame/phame.css' => 'cea3c9e1', 'rsrc/css/application/pholio/pholio-edit.css' => '3ad9d1ee', @@ -730,7 +730,7 @@ 'multirow-row-manager' => 'b5d57730', 'owners-path-editor' => 'aa1733d0', 'owners-path-editor-css' => '2f00933b', - 'paste-css' => 'b2f5a543', + 'paste-css' => 'a5157c48', 'path-typeahead' => 'f7fc67ec', 'people-profile-css' => '25970776', 'phabricator-action-list-view-css' => 'c5eba19d', 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 @@ -2616,6 +2616,7 @@ 'PhabricatorPasswordSettingsPanel' => 'applications/settings/panel/PhabricatorPasswordSettingsPanel.php', 'PhabricatorPaste' => 'applications/paste/storage/PhabricatorPaste.php', 'PhabricatorPasteApplication' => 'applications/paste/application/PhabricatorPasteApplication.php', + 'PhabricatorPasteArchiveController' => 'applications/paste/controller/PhabricatorPasteArchiveController.php', 'PhabricatorPasteConfigOptions' => 'applications/paste/config/PhabricatorPasteConfigOptions.php', 'PhabricatorPasteController' => 'applications/paste/controller/PhabricatorPasteController.php', 'PhabricatorPasteDAO' => 'applications/paste/storage/PhabricatorPasteDAO.php', @@ -6824,6 +6825,7 @@ 'PhabricatorSpacesInterface', ), 'PhabricatorPasteApplication' => 'PhabricatorApplication', + 'PhabricatorPasteArchiveController' => 'PhabricatorPasteController', 'PhabricatorPasteConfigOptions' => 'PhabricatorApplicationConfigOptions', 'PhabricatorPasteController' => 'PhabricatorController', 'PhabricatorPasteDAO' => 'PhabricatorLiskDAO', diff --git a/src/applications/paste/application/PhabricatorPasteApplication.php b/src/applications/paste/application/PhabricatorPasteApplication.php --- a/src/applications/paste/application/PhabricatorPasteApplication.php +++ b/src/applications/paste/application/PhabricatorPasteApplication.php @@ -41,6 +41,7 @@ 'create/' => 'PhabricatorPasteEditController', $this->getEditRoutePattern('edit/') => 'PhabricatorPasteEditController', 'raw/(?P[1-9]\d*)/' => 'PhabricatorPasteRawController', + 'archive/(?P[1-9]\d*)/' => 'PhabricatorPasteArchiveController', ), ); } diff --git a/src/applications/paste/controller/PhabricatorPasteArchiveController.php b/src/applications/paste/controller/PhabricatorPasteArchiveController.php new file mode 100644 --- /dev/null +++ b/src/applications/paste/controller/PhabricatorPasteArchiveController.php @@ -0,0 +1,65 @@ +getViewer(); + $id = $request->getURIData('id'); + + $paste = id(new PhabricatorPasteQuery()) + ->setViewer($viewer) + ->withIDs(array($id)) + ->requireCapabilities( + array( + PhabricatorPolicyCapability::CAN_VIEW, + PhabricatorPolicyCapability::CAN_EDIT, + )) + ->executeOne(); + if (!$paste) { + return new Aphront404Response(); + } + + $view_uri = '/P'.$paste->getID(); + + if ($request->isFormPost()) { + if ($paste->isArchived()) { + $new_status = PhabricatorPaste::STATUS_ACTIVE; + } else { + $new_status = PhabricatorPaste::STATUS_ARCHIVED; + } + + $xactions = array(); + + $xactions[] = id(new PhabricatorPasteTransaction()) + ->setTransactionType(PhabricatorPasteTransaction::TYPE_STATUS) + ->setNewValue($new_status); + + id(new PhabricatorPasteEditor()) + ->setActor($viewer) + ->setContentSourceFromRequest($request) + ->setContinueOnNoEffect(true) + ->setContinueOnMissingFields(true) + ->applyTransactions($paste, $xactions); + + return id(new AphrontRedirectResponse())->setURI($view_uri); + } + + if ($paste->isArchived()) { + $title = pht('Activate Paste'); + $body = pht('This paste will become consumable again.'); + $button = pht('Activate Paste'); + } else { + $title = pht('Archive Paste'); + $body = pht('This paste will be marked as expired.'); + $button = pht('Archive Paste'); + } + + return $this->newDialog() + ->setTitle($title) + ->appendChild($body) + ->addCancelButton($view_uri) + ->addSubmitButton($button); + } + +} diff --git a/src/applications/paste/controller/PhabricatorPasteViewController.php b/src/applications/paste/controller/PhabricatorPasteViewController.php --- a/src/applications/paste/controller/PhabricatorPasteViewController.php +++ b/src/applications/paste/controller/PhabricatorPasteViewController.php @@ -129,22 +129,43 @@ $id = $paste->getID(); - return id(new PhabricatorActionListView()) + $action_list = id(new PhabricatorActionListView()) ->setUser($viewer) ->setObject($paste) - ->setObjectURI($this->getRequest()->getRequestURI()) - ->addAction( + ->setObjectURI($this->getRequest()->getRequestURI()); + + $action_list->addAction( id(new PhabricatorActionView()) ->setName(pht('Edit Paste')) ->setIcon('fa-pencil') ->setDisabled(!$can_edit) - ->setWorkflow(!$can_edit) - ->setHref($this->getApplicationURI("edit/{$id}/"))) - ->addAction( + ->setHref($this->getApplicationURI("edit/{$id}/"))); + + if ($paste->isArchived()) { + $action_list->addAction( + id(new PhabricatorActionView()) + ->setName(pht('Activate Paste')) + ->setIcon('fa-check') + ->setDisabled(!$can_edit) + ->setWorkflow($can_edit) + ->setHref($this->getApplicationURI("archive/{$id}/"))); + } else { + $action_list->addAction( + id(new PhabricatorActionView()) + ->setName(pht('Archive Paste')) + ->setIcon('fa-ban') + ->setDisabled(!$can_edit) + ->setWorkflow($can_edit) + ->setHref($this->getApplicationURI("archive/{$id}/"))); + } + + $action_list->addAction( id(new PhabricatorActionView()) ->setName(pht('View Raw File')) ->setIcon('fa-file-text-o') ->setHref($this->getApplicationURI("raw/{$id}/"))); + + return $action_list; } private function buildPropertyView( diff --git a/src/applications/paste/editor/PhabricatorPasteEditEngine.php b/src/applications/paste/editor/PhabricatorPasteEditEngine.php --- a/src/applications/paste/editor/PhabricatorPasteEditEngine.php +++ b/src/applications/paste/editor/PhabricatorPasteEditEngine.php @@ -76,13 +76,6 @@ ->setIsCopyable(true) ->setValue($object->getLanguage()) ->setOptions($langs), - id(new PhabricatorSelectEditField()) - ->setKey('status') - ->setLabel(pht('Status')) - ->setDescription(pht('Archive the paste.')) - ->setTransactionType(PhabricatorPasteTransaction::TYPE_STATUS) - ->setValue($object->getStatus()) - ->setOptions(PhabricatorPaste::getStatusNameMap()), id(new PhabricatorTextAreaEditField()) ->setKey('text') ->setLabel(pht('Text')) diff --git a/webroot/rsrc/css/application/paste/paste.css b/webroot/rsrc/css/application/paste/paste.css --- a/webroot/rsrc/css/application/paste/paste.css +++ b/webroot/rsrc/css/application/paste/paste.css @@ -3,11 +3,11 @@ */ .container-of-paste { - margin: 16px; + margin: 16px 16px 0 16px; } .device .container-of-paste { - margin: 8px; + margin: 8px 8px 0 8px; } .paste-embed {