From 1a8d87699c1595aa0c945c128a8ae987e22fe9e1 Mon Sep 17 00:00:00 2001 From: Chad Little Date: Fri, 21 Nov 2014 11:17:20 -0800 Subject: [PATCH] Add default policy to Files application Summary: **WIP** This adds default capability to the Files application Test Plan: Set default to public, go to Files page, see public preset. Upload File. Doesn't work. Reviewers: btrahan, epriestley Reviewed By: epriestley Subscribers: Korvin, epriestley Maniphest Tasks: T6564 Differential Revision: https://secure.phabricator.com/D10888 --- src/__phutil_library_map__.php | 2 ++ .../application/PhabricatorFilesApplication.php | 11 ++++++++++- .../capability/FilesDefaultViewCapability.php | 16 ++++++++++++++++ .../PhabricatorFileUploadController.php | 2 +- .../files/storage/PhabricatorFile.php | 9 +++++++++ 5 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 src/applications/files/capability/FilesDefaultViewCapability.php diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index 5f105a5864..e793f9c0fb 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -725,6 +725,7 @@ phutil_register_library_map(array( 'FileReplyHandler' => 'applications/files/mail/FileReplyHandler.php', 'FileUploadConduitAPIMethod' => 'applications/files/conduit/FileUploadConduitAPIMethod.php', 'FileUploadHashConduitAPIMethod' => 'applications/files/conduit/FileUploadHashConduitAPIMethod.php', + 'FilesDefaultViewCapability' => 'applications/files/capability/FilesDefaultViewCapability.php', 'FlagConduitAPIMethod' => 'applications/flag/conduit/FlagConduitAPIMethod.php', 'FlagDeleteConduitAPIMethod' => 'applications/flag/conduit/FlagDeleteConduitAPIMethod.php', 'FlagEditConduitAPIMethod' => 'applications/flag/conduit/FlagEditConduitAPIMethod.php', @@ -3726,6 +3727,7 @@ phutil_register_library_map(array( 'FileReplyHandler' => 'PhabricatorMailReplyHandler', 'FileUploadConduitAPIMethod' => 'FileConduitAPIMethod', 'FileUploadHashConduitAPIMethod' => 'FileConduitAPIMethod', + 'FilesDefaultViewCapability' => 'PhabricatorPolicyCapability', 'FlagConduitAPIMethod' => 'ConduitAPIMethod', 'FlagDeleteConduitAPIMethod' => 'FlagConduitAPIMethod', 'FlagEditConduitAPIMethod' => 'FlagConduitAPIMethod', diff --git a/src/applications/files/application/PhabricatorFilesApplication.php b/src/applications/files/application/PhabricatorFilesApplication.php index eb1a5a4db8..c3d434bf2e 100644 --- a/src/applications/files/application/PhabricatorFilesApplication.php +++ b/src/applications/files/application/PhabricatorFilesApplication.php @@ -11,7 +11,7 @@ final class PhabricatorFilesApplication extends PhabricatorApplication { } public function getShortDescription() { - return 'Store and Share Files'; + return pht('Store and Share Files'); } public function getIconName() { @@ -40,6 +40,15 @@ final class PhabricatorFilesApplication extends PhabricatorApplication { ); } + protected function getCustomCapabilities() { + return array( + FilesDefaultViewCapability::CAPABILITY => array( + 'caption' => pht( + 'Default view policy for newly created files.'), + ), + ); + } + public function getRoutes() { return array( '/F(?P[1-9]\d*)' => 'PhabricatorFileInfoController', diff --git a/src/applications/files/capability/FilesDefaultViewCapability.php b/src/applications/files/capability/FilesDefaultViewCapability.php new file mode 100644 index 0000000000..7a0aae8e0c --- /dev/null +++ b/src/applications/files/capability/FilesDefaultViewCapability.php @@ -0,0 +1,16 @@ +getRequest(); $viewer = $request->getUser(); - $file = new PhabricatorFile(); + $file = PhabricatorFile::initializeNewFile(); $e_file = true; $errors = array(); diff --git a/src/applications/files/storage/PhabricatorFile.php b/src/applications/files/storage/PhabricatorFile.php index 703886f5d4..48c178fa55 100644 --- a/src/applications/files/storage/PhabricatorFile.php +++ b/src/applications/files/storage/PhabricatorFile.php @@ -53,7 +53,16 @@ final class PhabricatorFile extends PhabricatorFileDAO private $originalFile = self::ATTACHABLE; public static function initializeNewFile() { + $app = id(new PhabricatorApplicationQuery()) + ->setViewer(PhabricatorUser::getOmnipotentUser()) + ->withClasses(array('PhabricatorFilesApplication')) + ->executeOne(); + + $view_policy = $app->getPolicy( + FilesDefaultViewCapability::CAPABILITY); + return id(new PhabricatorFile()) + ->setViewPolicy($view_policy) ->attachOriginalFile(null) ->attachObjects(array()) ->attachObjectPHIDs(array());