diff --git a/src/applications/files/controller/PhabricatorFileUploadController.php b/src/applications/files/controller/PhabricatorFileUploadController.php index d7a6247a51..0fc5f20eb5 100644 --- a/src/applications/files/controller/PhabricatorFileUploadController.php +++ b/src/applications/files/controller/PhabricatorFileUploadController.php @@ -1,108 +1,126 @@ getRequest(); - $user = $request->getUser(); + $viewer = $request->getUser(); + + $file = new PhabricatorFile(); $e_file = true; $errors = array(); if ($request->isFormPost()) { + $view_policy = $request->getStr('viewPolicy'); + if (!$request->getFileExists('file')) { $e_file = pht('Required'); $errors[] = pht('You must select a file to upload.'); } else { $file = PhabricatorFile::newFromPHPUpload( idx($_FILES, 'file'), array( 'name' => $request->getStr('name'), - 'authorPHID' => $user->getPHID(), + 'authorPHID' => $viewer->getPHID(), + 'viewPolicy' => $view_policy, 'isExplicitUpload' => true, )); } if (!$errors) { return id(new AphrontRedirectResponse())->setURI($file->getInfoURI()); } + + $file->setViewPolicy($view_policy); } $support_id = celerity_generate_unique_node_id(); $instructions = id(new AphrontFormMarkupControl()) ->setControlID($support_id) ->setControlStyle('display: none') ->setValue(hsprintf( '

%s %s

', pht('Drag and Drop:'), pht( 'You can also upload files by dragging and dropping them from your '. 'desktop onto this page or the Phabricator home page.'))); + $policies = id(new PhabricatorPolicyQuery()) + ->setViewer($viewer) + ->setObject($file) + ->execute(); + $form = id(new AphrontFormView()) - ->setUser($user) + ->setUser($viewer) ->setEncType('multipart/form-data') ->appendChild( id(new AphrontFormFileControl()) ->setLabel(pht('File')) ->setName('file') ->setError($e_file) ->setCaption($this->renderUploadLimit())) ->appendChild( id(new AphrontFormTextControl()) ->setLabel(pht('Name')) ->setName('name') - ->setValue($request->getStr('name')) - ->setCaption(pht('Optional file display name.'))) + ->setValue($request->getStr('name'))) + ->appendChild( + id(new AphrontFormPolicyControl()) + ->setUser($viewer) + ->setCapability(PhabricatorPolicyCapability::CAN_VIEW) + ->setPolicyObject($file) + ->setPolicies($policies) + ->setName('viewPolicy')) ->appendChild( id(new AphrontFormSubmitControl()) ->setValue(pht('Upload')) ->addCancelButton('/file/')) ->appendChild($instructions); $crumbs = $this->buildApplicationCrumbs(); $crumbs->addTextCrumb(pht('Upload'), $request->getRequestURI()); $title = pht('Upload File'); $global_upload = id(new PhabricatorGlobalUploadTargetView()) - ->setUser($user) + ->setUser($viewer) ->setShowIfSupportedID($support_id); $form_box = id(new PHUIObjectBoxView()) ->setHeaderText($title) ->setFormErrors($errors) ->setForm($form); return $this->buildApplicationPage( array( $crumbs, $form_box, $global_upload, ), array( 'title' => $title, )); } private function renderUploadLimit() { $limit = PhabricatorEnv::getEnvConfig('storage.upload-size-limit'); $limit = phutil_parse_bytes($limit); if ($limit) { $formatted = phutil_format_bytes($limit); return 'Maximum file size: '.$formatted; } $doc_href = PhabricatorEnv::getDocLink( 'Configuring File Upload Limits'); $doc_link = phutil_tag( 'a', array( 'href' => $doc_href, 'target' => '_blank', ), 'Configuring File Upload Limits'); return hsprintf('Upload limit is not configured, see %s.', $doc_link); } }