Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15480334
D17611.id.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
13 KB
Referenced Files
None
Subscribers
None
D17611.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
@@ -2743,7 +2743,6 @@
'PhabricatorFileChunk' => 'applications/files/storage/PhabricatorFileChunk.php',
'PhabricatorFileChunkIterator' => 'applications/files/engine/PhabricatorFileChunkIterator.php',
'PhabricatorFileChunkQuery' => 'applications/files/query/PhabricatorFileChunkQuery.php',
- 'PhabricatorFileCommentController' => 'applications/files/controller/PhabricatorFileCommentController.php',
'PhabricatorFileComposeController' => 'applications/files/controller/PhabricatorFileComposeController.php',
'PhabricatorFileController' => 'applications/files/controller/PhabricatorFileController.php',
'PhabricatorFileDAO' => 'applications/files/storage/PhabricatorFileDAO.php',
@@ -2751,6 +2750,7 @@
'PhabricatorFileDeleteController' => 'applications/files/controller/PhabricatorFileDeleteController.php',
'PhabricatorFileDropUploadController' => 'applications/files/controller/PhabricatorFileDropUploadController.php',
'PhabricatorFileEditController' => 'applications/files/controller/PhabricatorFileEditController.php',
+ 'PhabricatorFileEditEngine' => 'applications/files/editor/PhabricatorFileEditEngine.php',
'PhabricatorFileEditField' => 'applications/transactions/editfield/PhabricatorFileEditField.php',
'PhabricatorFileEditor' => 'applications/files/editor/PhabricatorFileEditor.php',
'PhabricatorFileExternalRequest' => 'applications/files/storage/PhabricatorFileExternalRequest.php',
@@ -7860,7 +7860,6 @@
'Iterator',
),
'PhabricatorFileChunkQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
- 'PhabricatorFileCommentController' => 'PhabricatorFileController',
'PhabricatorFileComposeController' => 'PhabricatorFileController',
'PhabricatorFileController' => 'PhabricatorController',
'PhabricatorFileDAO' => 'PhabricatorLiskDAO',
@@ -7868,6 +7867,7 @@
'PhabricatorFileDeleteController' => 'PhabricatorFileController',
'PhabricatorFileDropUploadController' => 'PhabricatorFileController',
'PhabricatorFileEditController' => 'PhabricatorFileController',
+ 'PhabricatorFileEditEngine' => 'PhabricatorEditEngine',
'PhabricatorFileEditField' => 'PhabricatorEditField',
'PhabricatorFileEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorFileExternalRequest' => array(
diff --git a/src/applications/files/application/PhabricatorFilesApplication.php b/src/applications/files/application/PhabricatorFilesApplication.php
--- a/src/applications/files/application/PhabricatorFilesApplication.php
+++ b/src/applications/files/application/PhabricatorFilesApplication.php
@@ -78,7 +78,8 @@
'comment/(?P<id>[1-9]\d*)/' => 'PhabricatorFileCommentController',
'thread/(?P<phid>[^/]+)/' => 'PhabricatorFileLightboxController',
'delete/(?P<id>[1-9]\d*)/' => 'PhabricatorFileDeleteController',
- 'edit/(?P<id>[1-9]\d*)/' => 'PhabricatorFileEditController',
+ $this->getEditRoutePattern('edit/')
+ => 'PhabricatorFileEditController',
'info/(?P<phid>[^/]+)/' => 'PhabricatorFileInfoController',
'imageproxy/' => 'PhabricatorFileImageProxyController',
'transforms/(?P<id>[1-9]\d*)/' =>
diff --git a/src/applications/files/controller/PhabricatorFileCommentController.php b/src/applications/files/controller/PhabricatorFileCommentController.php
deleted file mode 100644
--- a/src/applications/files/controller/PhabricatorFileCommentController.php
+++ /dev/null
@@ -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);
- }
- }
-
-}
diff --git a/src/applications/files/controller/PhabricatorFileEditController.php b/src/applications/files/controller/PhabricatorFileEditController.php
--- a/src/applications/files/controller/PhabricatorFileEditController.php
+++ b/src/applications/files/controller/PhabricatorFileEditController.php
@@ -1,114 +1,12 @@
<?php
-final class PhabricatorFileEditController extends PhabricatorFileController {
+final class PhabricatorFileEditController
+ extends PhabricatorFileController {
public function handleRequest(AphrontRequest $request) {
- $viewer = $request->getViewer();
- $id = $request->getURIData('id');
-
- $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);
-
+ return id(new PhabricatorFileEditEngine())
+ ->setController($this)
+ ->buildResponse();
}
}
diff --git a/src/applications/files/controller/PhabricatorFileInfoController.php b/src/applications/files/controller/PhabricatorFileInfoController.php
--- a/src/applications/files/controller/PhabricatorFileInfoController.php
+++ b/src/applications/files/controller/PhabricatorFileInfoController.php
@@ -94,25 +94,18 @@
$file,
new PhabricatorFileTransactionQuery());
- $is_serious = PhabricatorEnv::getEnvConfig('phabricator.serious-business');
-
- $add_comment_header = $is_serious
- ? pht('Add Comment')
- : pht('Question File Integrity');
+ $comment_view = id(new PhabricatorFileEditEngine())
+ ->setViewer($viewer)
+ ->buildEditEngineCommentView($file);
- $draft = PhabricatorDraft::newFromUserAndKey($viewer, $file->getPHID());
+ $monogram = $file->getMonogram();
- $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'));
+ $timeline->setQuoteRef($monogram);
+ $comment_view->setTransactionTimeline($timeline);
return array(
$timeline,
- $add_comment_form,
+ $comment_view,
);
}
diff --git a/src/applications/files/editor/PhabricatorFileEditEngine.php b/src/applications/files/editor/PhabricatorFileEditEngine.php
new file mode 100644
--- /dev/null
+++ b/src/applications/files/editor/PhabricatorFileEditEngine.php
@@ -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()),
+ );
+ }
+
+}
diff --git a/src/applications/files/storage/PhabricatorFile.php b/src/applications/files/storage/PhabricatorFile.php
--- a/src/applications/files/storage/PhabricatorFile.php
+++ b/src/applications/files/storage/PhabricatorFile.php
@@ -774,6 +774,9 @@
return $format->newReadIterator($raw_iterator);
}
+ public function getURI() {
+ return $this->getInfoURI();
+ }
public function getViewURI() {
if (!$this->getPHID()) {
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Apr 9, 1:25 PM (2 w, 11 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7708415
Default Alt Text
D17611.id.diff (13 KB)
Attached To
Mode
D17611: Move Files editing and commenting to EditEngine
Attached
Detach File
Event Timeline
Log In to Comment