@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at recaptime-dev/main 139 lines 4.0 kB view raw
1<?php 2 3final class PhamePostHeaderPictureController 4 extends PhamePostController { 5 6 public function handleRequest(AphrontRequest $request) { 7 $viewer = $request->getViewer(); 8 $id = $request->getURIData('id'); 9 10 $post = id(new PhamePostQuery()) 11 ->setViewer($viewer) 12 ->withIDs(array($id)) 13 ->needHeaderImage(true) 14 ->requireCapabilities( 15 array( 16 PhabricatorPolicyCapability::CAN_VIEW, 17 PhabricatorPolicyCapability::CAN_EDIT, 18 )) 19 ->executeOne(); 20 if (!$post) { 21 return new Aphront404Response(); 22 } 23 24 $post_uri = '/phame/post/view/'.$id; 25 26 $supported_formats = PhabricatorFile::getTransformableImageFormats(); 27 if ($supported_formats) { 28 $supported_formats_message = pht('Supported image formats: %s.', 29 implode(', ', $supported_formats)); 30 } else { 31 $supported_formats_message = pht('Server supports no image formats.'); 32 } 33 $e_file = true; 34 $errors = array(); 35 $delete_header = ($request->getInt('delete') == 1); 36 37 if ($request->isFormPost()) { 38 if ($request->getFileExists('header')) { 39 $file = PhabricatorFile::newFromPHPUpload( 40 $_FILES['header'], 41 array( 42 'authorPHID' => $viewer->getPHID(), 43 'canCDN' => true, 44 )); 45 } else if (!$delete_header) { 46 $e_file = pht('Required'); 47 $errors[] = pht( 48 'You must choose a file when uploading a new post header.'); 49 } 50 51 if (!$errors && !$delete_header) { 52 if (!$file->isTransformableImage()) { 53 $e_file = pht('Not Supported'); 54 $errors[] = $supported_formats_message; 55 } 56 } 57 58 if (!$errors) { 59 if ($delete_header) { 60 $new_value = null; 61 } else { 62 $file->attachToObject($post->getPHID()); 63 $new_value = $file->getPHID(); 64 } 65 66 $xactions = array(); 67 $xactions[] = id(new PhamePostTransaction()) 68 ->setTransactionType(PhamePostHeaderImageTransaction::TRANSACTIONTYPE) 69 ->setNewValue($new_value); 70 71 $editor = id(new PhamePostEditor()) 72 ->setActor($viewer) 73 ->setContentSourceFromRequest($request) 74 ->setContinueOnMissingFields(true) 75 ->setContinueOnNoEffect(true); 76 77 $editor->applyTransactions($post, $xactions); 78 79 return id(new AphrontRedirectResponse())->setURI($post_uri); 80 } 81 } 82 83 $title = pht('Edit Post Header'); 84 85 $upload_form = id(new AphrontFormView()) 86 ->setUser($viewer) 87 ->setEncType('multipart/form-data') 88 ->appendChild( 89 id(new AphrontFormFileControl()) 90 ->setName('header') 91 ->setLabel(pht('Upload Header')) 92 ->setError($e_file) 93 ->setCaption($supported_formats_message)) 94 ->appendChild( 95 id(new AphrontFormCheckboxControl()) 96 ->setName('delete') 97 ->setLabel(pht('Delete Header')) 98 ->addCheckbox( 99 'delete', 100 1, 101 null, 102 null)) 103 ->appendChild( 104 id(new AphrontFormSubmitControl()) 105 ->addCancelButton($post_uri) 106 ->setValue(pht('Upload Header'))); 107 108 $upload_box = id(new PHUIObjectBoxView()) 109 ->setHeaderText(pht('Upload New Header')) 110 ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) 111 ->setForm($upload_form); 112 113 $crumbs = $this->buildApplicationCrumbs(); 114 $crumbs->addTextCrumb( 115 $post->getTitle(), 116 $this->getApplicationURI('post/view/'.$id)); 117 $crumbs->addTextCrumb(pht('Post Header')); 118 $crumbs->setBorder(true); 119 120 $header = id(new PHUIHeaderView()) 121 ->setHeader(pht('Edit Post Header')) 122 ->setHeaderIcon('fa-camera'); 123 124 $view = id(new PHUITwoColumnView()) 125 ->setHeader($header) 126 ->setFooter(array( 127 $upload_box, 128 )); 129 130 return $this->newPage() 131 ->setTitle($title) 132 ->setCrumbs($crumbs) 133 ->appendChild( 134 array( 135 $view, 136 )); 137 138 } 139}