@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 142 lines 4.1 kB view raw
1<?php 2 3final class PhameBlogHeaderPictureController 4 extends PhameBlogController { 5 6 public function handleRequest(AphrontRequest $request) { 7 $viewer = $request->getViewer(); 8 $id = $request->getURIData('id'); 9 10 $blog = id(new PhameBlogQuery()) 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 (!$blog) { 21 return new Aphront404Response(); 22 } 23 24 $blog_uri = '/phame/blog/manage/'.$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 blog 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($blog->getPHID()); 63 $new_value = $file->getPHID(); 64 } 65 66 $xactions = array(); 67 $xactions[] = id(new PhameBlogTransaction()) 68 ->setTransactionType(PhameBlogHeaderImageTransaction::TRANSACTIONTYPE) 69 ->setNewValue($new_value); 70 71 $editor = id(new PhameBlogEditor()) 72 ->setActor($viewer) 73 ->setContentSourceFromRequest($request) 74 ->setContinueOnMissingFields(true) 75 ->setContinueOnNoEffect(true); 76 77 $editor->applyTransactions($blog, $xactions); 78 79 return id(new AphrontRedirectResponse())->setURI($blog_uri); 80 } 81 } 82 83 $title = pht('Edit Blog 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($blog_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 pht('Blogs'), 116 $this->getApplicationURI('blog/')); 117 $crumbs->addTextCrumb( 118 $blog->getName(), 119 $this->getApplicationURI('blog/view/'.$id)); 120 $crumbs->addTextCrumb(pht('Blog Header')); 121 $crumbs->setBorder(true); 122 123 $header = id(new PHUIHeaderView()) 124 ->setHeader(pht('Edit Blog Header')) 125 ->setHeaderIcon('fa-camera'); 126 127 $view = id(new PHUITwoColumnView()) 128 ->setHeader($header) 129 ->setFooter(array( 130 $upload_box, 131 )); 132 133 return $this->newPage() 134 ->setTitle($title) 135 ->setCrumbs($crumbs) 136 ->appendChild( 137 array( 138 $view, 139 )); 140 141 } 142}