mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-10 08:52:39 +01:00
Move Files editing and commenting to EditEngine
Summary: Ref T11357. This moves editing and commenting (but not creation) to EditEngine. Since only the name is really editable, this is pretty straightforward. Test Plan: Renamed files; commented on files. Reviewers: chad Reviewed By: chad Maniphest Tasks: T11357 Differential Revision: https://secure.phabricator.com/D17611
This commit is contained in:
parent
8500f78e45
commit
260a08a128
7 changed files with 98 additions and 186 deletions
|
@ -2743,7 +2743,6 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorFileChunk' => 'applications/files/storage/PhabricatorFileChunk.php',
|
'PhabricatorFileChunk' => 'applications/files/storage/PhabricatorFileChunk.php',
|
||||||
'PhabricatorFileChunkIterator' => 'applications/files/engine/PhabricatorFileChunkIterator.php',
|
'PhabricatorFileChunkIterator' => 'applications/files/engine/PhabricatorFileChunkIterator.php',
|
||||||
'PhabricatorFileChunkQuery' => 'applications/files/query/PhabricatorFileChunkQuery.php',
|
'PhabricatorFileChunkQuery' => 'applications/files/query/PhabricatorFileChunkQuery.php',
|
||||||
'PhabricatorFileCommentController' => 'applications/files/controller/PhabricatorFileCommentController.php',
|
|
||||||
'PhabricatorFileComposeController' => 'applications/files/controller/PhabricatorFileComposeController.php',
|
'PhabricatorFileComposeController' => 'applications/files/controller/PhabricatorFileComposeController.php',
|
||||||
'PhabricatorFileController' => 'applications/files/controller/PhabricatorFileController.php',
|
'PhabricatorFileController' => 'applications/files/controller/PhabricatorFileController.php',
|
||||||
'PhabricatorFileDAO' => 'applications/files/storage/PhabricatorFileDAO.php',
|
'PhabricatorFileDAO' => 'applications/files/storage/PhabricatorFileDAO.php',
|
||||||
|
@ -2751,6 +2750,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorFileDeleteController' => 'applications/files/controller/PhabricatorFileDeleteController.php',
|
'PhabricatorFileDeleteController' => 'applications/files/controller/PhabricatorFileDeleteController.php',
|
||||||
'PhabricatorFileDropUploadController' => 'applications/files/controller/PhabricatorFileDropUploadController.php',
|
'PhabricatorFileDropUploadController' => 'applications/files/controller/PhabricatorFileDropUploadController.php',
|
||||||
'PhabricatorFileEditController' => 'applications/files/controller/PhabricatorFileEditController.php',
|
'PhabricatorFileEditController' => 'applications/files/controller/PhabricatorFileEditController.php',
|
||||||
|
'PhabricatorFileEditEngine' => 'applications/files/editor/PhabricatorFileEditEngine.php',
|
||||||
'PhabricatorFileEditField' => 'applications/transactions/editfield/PhabricatorFileEditField.php',
|
'PhabricatorFileEditField' => 'applications/transactions/editfield/PhabricatorFileEditField.php',
|
||||||
'PhabricatorFileEditor' => 'applications/files/editor/PhabricatorFileEditor.php',
|
'PhabricatorFileEditor' => 'applications/files/editor/PhabricatorFileEditor.php',
|
||||||
'PhabricatorFileExternalRequest' => 'applications/files/storage/PhabricatorFileExternalRequest.php',
|
'PhabricatorFileExternalRequest' => 'applications/files/storage/PhabricatorFileExternalRequest.php',
|
||||||
|
@ -7860,7 +7860,6 @@ phutil_register_library_map(array(
|
||||||
'Iterator',
|
'Iterator',
|
||||||
),
|
),
|
||||||
'PhabricatorFileChunkQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
|
'PhabricatorFileChunkQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
|
||||||
'PhabricatorFileCommentController' => 'PhabricatorFileController',
|
|
||||||
'PhabricatorFileComposeController' => 'PhabricatorFileController',
|
'PhabricatorFileComposeController' => 'PhabricatorFileController',
|
||||||
'PhabricatorFileController' => 'PhabricatorController',
|
'PhabricatorFileController' => 'PhabricatorController',
|
||||||
'PhabricatorFileDAO' => 'PhabricatorLiskDAO',
|
'PhabricatorFileDAO' => 'PhabricatorLiskDAO',
|
||||||
|
@ -7868,6 +7867,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorFileDeleteController' => 'PhabricatorFileController',
|
'PhabricatorFileDeleteController' => 'PhabricatorFileController',
|
||||||
'PhabricatorFileDropUploadController' => 'PhabricatorFileController',
|
'PhabricatorFileDropUploadController' => 'PhabricatorFileController',
|
||||||
'PhabricatorFileEditController' => 'PhabricatorFileController',
|
'PhabricatorFileEditController' => 'PhabricatorFileController',
|
||||||
|
'PhabricatorFileEditEngine' => 'PhabricatorEditEngine',
|
||||||
'PhabricatorFileEditField' => 'PhabricatorEditField',
|
'PhabricatorFileEditField' => 'PhabricatorEditField',
|
||||||
'PhabricatorFileEditor' => 'PhabricatorApplicationTransactionEditor',
|
'PhabricatorFileEditor' => 'PhabricatorApplicationTransactionEditor',
|
||||||
'PhabricatorFileExternalRequest' => array(
|
'PhabricatorFileExternalRequest' => array(
|
||||||
|
|
|
@ -78,7 +78,8 @@ final class PhabricatorFilesApplication extends PhabricatorApplication {
|
||||||
'comment/(?P<id>[1-9]\d*)/' => 'PhabricatorFileCommentController',
|
'comment/(?P<id>[1-9]\d*)/' => 'PhabricatorFileCommentController',
|
||||||
'thread/(?P<phid>[^/]+)/' => 'PhabricatorFileLightboxController',
|
'thread/(?P<phid>[^/]+)/' => 'PhabricatorFileLightboxController',
|
||||||
'delete/(?P<id>[1-9]\d*)/' => 'PhabricatorFileDeleteController',
|
'delete/(?P<id>[1-9]\d*)/' => 'PhabricatorFileDeleteController',
|
||||||
'edit/(?P<id>[1-9]\d*)/' => 'PhabricatorFileEditController',
|
$this->getEditRoutePattern('edit/')
|
||||||
|
=> 'PhabricatorFileEditController',
|
||||||
'info/(?P<phid>[^/]+)/' => 'PhabricatorFileInfoController',
|
'info/(?P<phid>[^/]+)/' => 'PhabricatorFileInfoController',
|
||||||
'imageproxy/' => 'PhabricatorFileImageProxyController',
|
'imageproxy/' => 'PhabricatorFileImageProxyController',
|
||||||
'transforms/(?P<id>[1-9]\d*)/' =>
|
'transforms/(?P<id>[1-9]\d*)/' =>
|
||||||
|
|
|
@ -1,62 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
final class PhabricatorFileCommentController extends PhabricatorFileController {
|
|
||||||
|
|
||||||
public function handleRequest(AphrontRequest $request) {
|
|
||||||
$viewer = $request->getViewer();
|
|
||||||
$id = $request->getURIData('id');
|
|
||||||
|
|
||||||
if (!$request->isFormPost()) {
|
|
||||||
return new Aphront400Response();
|
|
||||||
}
|
|
||||||
|
|
||||||
$file = id(new PhabricatorFileQuery())
|
|
||||||
->setViewer($viewer)
|
|
||||||
->withIDs(array($id))
|
|
||||||
->executeOne();
|
|
||||||
if (!$file) {
|
|
||||||
return new Aphront404Response();
|
|
||||||
}
|
|
||||||
|
|
||||||
$is_preview = $request->isPreviewRequest();
|
|
||||||
$draft = PhabricatorDraft::buildFromRequest($request);
|
|
||||||
|
|
||||||
$view_uri = $file->getInfoURI();
|
|
||||||
|
|
||||||
$xactions = array();
|
|
||||||
$xactions[] = id(new PhabricatorFileTransaction())
|
|
||||||
->setTransactionType(PhabricatorTransactions::TYPE_COMMENT)
|
|
||||||
->attachComment(
|
|
||||||
id(new PhabricatorFileTransactionComment())
|
|
||||||
->setContent($request->getStr('comment')));
|
|
||||||
|
|
||||||
$editor = id(new PhabricatorFileEditor())
|
|
||||||
->setActor($viewer)
|
|
||||||
->setContinueOnNoEffect($request->isContinueRequest())
|
|
||||||
->setContentSourceFromRequest($request)
|
|
||||||
->setIsPreview($is_preview);
|
|
||||||
|
|
||||||
try {
|
|
||||||
$xactions = $editor->applyTransactions($file, $xactions);
|
|
||||||
} catch (PhabricatorApplicationTransactionNoEffectException $ex) {
|
|
||||||
return id(new PhabricatorApplicationTransactionNoEffectResponse())
|
|
||||||
->setCancelURI($view_uri)
|
|
||||||
->setException($ex);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($draft) {
|
|
||||||
$draft->replaceOrDelete();
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($request->isAjax() && $is_preview) {
|
|
||||||
return id(new PhabricatorApplicationTransactionResponse())
|
|
||||||
->setViewer($viewer)
|
|
||||||
->setTransactions($xactions)
|
|
||||||
->setIsPreview($is_preview);
|
|
||||||
} else {
|
|
||||||
return id(new AphrontRedirectResponse())
|
|
||||||
->setURI($view_uri);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,114 +1,12 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
final class PhabricatorFileEditController extends PhabricatorFileController {
|
final class PhabricatorFileEditController
|
||||||
|
extends PhabricatorFileController {
|
||||||
|
|
||||||
public function handleRequest(AphrontRequest $request) {
|
public function handleRequest(AphrontRequest $request) {
|
||||||
$viewer = $request->getViewer();
|
return id(new PhabricatorFileEditEngine())
|
||||||
$id = $request->getURIData('id');
|
->setController($this)
|
||||||
|
->buildResponse();
|
||||||
$file = id(new PhabricatorFileQuery())
|
|
||||||
->setViewer($viewer)
|
|
||||||
->withIDs(array($id))
|
|
||||||
->requireCapabilities(
|
|
||||||
array(
|
|
||||||
PhabricatorPolicyCapability::CAN_VIEW,
|
|
||||||
PhabricatorPolicyCapability::CAN_EDIT,
|
|
||||||
))
|
|
||||||
->executeOne();
|
|
||||||
if (!$file) {
|
|
||||||
return new Aphront404Response();
|
|
||||||
}
|
|
||||||
|
|
||||||
$title = pht('Edit File: %s', $file->getName());
|
|
||||||
$file_name = $file->getName();
|
|
||||||
$header_icon = 'fa-pencil';
|
|
||||||
$view_uri = '/'.$file->getMonogram();
|
|
||||||
$error_name = true;
|
|
||||||
$validation_exception = null;
|
|
||||||
|
|
||||||
if ($request->isFormPost()) {
|
|
||||||
$can_view = $request->getStr('canView');
|
|
||||||
$file_name = $request->getStr('name');
|
|
||||||
$errors = array();
|
|
||||||
|
|
||||||
$type_name = PhabricatorFileNameTransaction::TRANSACTIONTYPE;
|
|
||||||
|
|
||||||
$xactions = array();
|
|
||||||
|
|
||||||
$xactions[] = id(new PhabricatorFileTransaction())
|
|
||||||
->setTransactionType(PhabricatorTransactions::TYPE_VIEW_POLICY)
|
|
||||||
->setNewValue($can_view);
|
|
||||||
|
|
||||||
$xactions[] = id(new PhabricatorFileTransaction())
|
|
||||||
->setTransactionType($type_name)
|
|
||||||
->setNewValue($file_name);
|
|
||||||
|
|
||||||
$editor = id(new PhabricatorFileEditor())
|
|
||||||
->setActor($viewer)
|
|
||||||
->setContentSourceFromRequest($request)
|
|
||||||
->setContinueOnNoEffect(true);
|
|
||||||
|
|
||||||
try {
|
|
||||||
$editor->applyTransactions($file, $xactions);
|
|
||||||
return id(new AphrontRedirectResponse())->setURI($view_uri);
|
|
||||||
} catch (PhabricatorApplicationTransactionValidationException $ex) {
|
|
||||||
$validation_exception = $ex;
|
|
||||||
$error_name = $ex->getShortMessage($type_name);
|
|
||||||
|
|
||||||
$file->setViewPolicy($can_view);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
$policies = id(new PhabricatorPolicyQuery())
|
|
||||||
->setViewer($viewer)
|
|
||||||
->setObject($file)
|
|
||||||
->execute();
|
|
||||||
|
|
||||||
$form = id(new AphrontFormView())
|
|
||||||
->setUser($viewer)
|
|
||||||
->appendChild(
|
|
||||||
id(new AphrontFormTextControl())
|
|
||||||
->setName('name')
|
|
||||||
->setValue($file_name)
|
|
||||||
->setLabel(pht('Name'))
|
|
||||||
->setError($error_name))
|
|
||||||
->appendChild(
|
|
||||||
id(new AphrontFormPolicyControl())
|
|
||||||
->setUser($viewer)
|
|
||||||
->setCapability(PhabricatorPolicyCapability::CAN_VIEW)
|
|
||||||
->setPolicyObject($file)
|
|
||||||
->setPolicies($policies)
|
|
||||||
->setName('canView'))
|
|
||||||
->appendChild(
|
|
||||||
id(new AphrontFormSubmitControl())
|
|
||||||
->addCancelButton($view_uri)
|
|
||||||
->setValue(pht('Save Changes')));
|
|
||||||
|
|
||||||
$crumbs = $this->buildApplicationCrumbs()
|
|
||||||
->addTextCrumb($file->getMonogram(), $view_uri)
|
|
||||||
->addTextCrumb(pht('Edit'))
|
|
||||||
->setBorder(true);
|
|
||||||
|
|
||||||
$box = id(new PHUIObjectBoxView())
|
|
||||||
->setHeaderText($title)
|
|
||||||
->setValidationException($validation_exception)
|
|
||||||
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
|
|
||||||
->appendChild($form);
|
|
||||||
|
|
||||||
$header = id(new PHUIHeaderView())
|
|
||||||
->setHeader($title)
|
|
||||||
->setHeaderIcon($header_icon);
|
|
||||||
|
|
||||||
$view = id(new PHUITwoColumnView())
|
|
||||||
->setHeader($header)
|
|
||||||
->setFooter($box);
|
|
||||||
|
|
||||||
return $this->newPage()
|
|
||||||
->setTitle($title)
|
|
||||||
->setCrumbs($crumbs)
|
|
||||||
->appendChild($view);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -94,25 +94,18 @@ final class PhabricatorFileInfoController extends PhabricatorFileController {
|
||||||
$file,
|
$file,
|
||||||
new PhabricatorFileTransactionQuery());
|
new PhabricatorFileTransactionQuery());
|
||||||
|
|
||||||
$is_serious = PhabricatorEnv::getEnvConfig('phabricator.serious-business');
|
$comment_view = id(new PhabricatorFileEditEngine())
|
||||||
|
->setViewer($viewer)
|
||||||
|
->buildEditEngineCommentView($file);
|
||||||
|
|
||||||
$add_comment_header = $is_serious
|
$monogram = $file->getMonogram();
|
||||||
? pht('Add Comment')
|
|
||||||
: pht('Question File Integrity');
|
|
||||||
|
|
||||||
$draft = PhabricatorDraft::newFromUserAndKey($viewer, $file->getPHID());
|
$timeline->setQuoteRef($monogram);
|
||||||
|
$comment_view->setTransactionTimeline($timeline);
|
||||||
$add_comment_form = id(new PhabricatorApplicationTransactionCommentView())
|
|
||||||
->setUser($viewer)
|
|
||||||
->setObjectPHID($file->getPHID())
|
|
||||||
->setDraft($draft)
|
|
||||||
->setHeaderText($add_comment_header)
|
|
||||||
->setAction($this->getApplicationURI('/comment/'.$file->getID().'/'))
|
|
||||||
->setSubmitButtonName(pht('Add Comment'));
|
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
$timeline,
|
$timeline,
|
||||||
$add_comment_form,
|
$comment_view,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
79
src/applications/files/editor/PhabricatorFileEditEngine.php
Normal file
79
src/applications/files/editor/PhabricatorFileEditEngine.php
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
final class PhabricatorFileEditEngine
|
||||||
|
extends PhabricatorEditEngine {
|
||||||
|
|
||||||
|
const ENGINECONST = 'files.file';
|
||||||
|
|
||||||
|
public function getEngineName() {
|
||||||
|
return pht('Files');
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function supportsEditEngineConfiguration() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getCreateNewObjectPolicy() {
|
||||||
|
// TODO: For now, this EditEngine can only edit objects, since there is
|
||||||
|
// a lot of complexity in dealing with file data during file creation.
|
||||||
|
return PhabricatorPolicies::POLICY_NOONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSummaryHeader() {
|
||||||
|
return pht('Configure Files Forms');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSummaryText() {
|
||||||
|
return pht('Configure creation and editing forms in Files.');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getEngineApplicationClass() {
|
||||||
|
return 'PhabricatorFilesApplication';
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function newEditableObject() {
|
||||||
|
return PhabricatorFile::initializeNewFile();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function newObjectQuery() {
|
||||||
|
return new PhabricatorFileQuery();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getObjectCreateTitleText($object) {
|
||||||
|
return pht('Create New File');
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getObjectEditTitleText($object) {
|
||||||
|
return pht('Edit File: %s', $object->getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getObjectEditShortText($object) {
|
||||||
|
return $object->getMonogram();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getObjectCreateShortText() {
|
||||||
|
return pht('Create File');
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getObjectName() {
|
||||||
|
return pht('File');
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getObjectViewURI($object) {
|
||||||
|
return $object->getURI();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function buildCustomEditFields($object) {
|
||||||
|
return array(
|
||||||
|
id(new PhabricatorTextEditField())
|
||||||
|
->setKey('name')
|
||||||
|
->setLabel(pht('Name'))
|
||||||
|
->setTransactionType(PhabricatorFileNameTransaction::TRANSACTIONTYPE)
|
||||||
|
->setDescription(pht('The name of the file.'))
|
||||||
|
->setConduitDescription(pht('Rename the file.'))
|
||||||
|
->setConduitTypeDescription(pht('New file name.'))
|
||||||
|
->setValue($object->getName()),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -774,6 +774,9 @@ final class PhabricatorFile extends PhabricatorFileDAO
|
||||||
return $format->newReadIterator($raw_iterator);
|
return $format->newReadIterator($raw_iterator);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getURI() {
|
||||||
|
return $this->getInfoURI();
|
||||||
|
}
|
||||||
|
|
||||||
public function getViewURI() {
|
public function getViewURI() {
|
||||||
if (!$this->getPHID()) {
|
if (!$this->getPHID()) {
|
||||||
|
|
Loading…
Reference in a new issue