@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
at upstream/main 76 lines 2.1 kB view raw
1<?php 2 3final class PhabricatorMacroMemeDialogController 4 extends PhabricatorMacroController { 5 6 public function handleRequest(AphrontRequest $request) { 7 $viewer = $request->getViewer(); 8 9 $phid = head($request->getArr('macro')); 10 $above = $request->getStr('above'); 11 $below = $request->getStr('below'); 12 13 $e_macro = true; 14 $errors = array(); 15 if ($request->isDialogFormPost()) { 16 if (!$phid) { 17 $e_macro = pht('Required'); 18 $errors[] = pht('Macro name is required.'); 19 } else { 20 $macro = id(new PhabricatorMacroQuery()) 21 ->setViewer($viewer) 22 ->withPHIDs(array($phid)) 23 ->executeOne(); 24 if (!$macro) { 25 $e_macro = pht('Invalid'); 26 $errors[] = pht('No such macro.'); 27 } 28 } 29 30 if (!$errors) { 31 $options = new PhutilSimpleOptions(); 32 $data = array( 33 'src' => $macro->getName(), 34 'above' => $above, 35 'below' => $below, 36 ); 37 $string = $options->unparse($data, $escape = '}'); 38 39 $result = array( 40 'text' => "{meme, {$string}}", 41 ); 42 return id(new AphrontAjaxResponse())->setContent($result); 43 } 44 } 45 46 $view = id(new AphrontFormView()) 47 ->setUser($viewer) 48 ->appendControl( 49 id(new AphrontFormTokenizerControl()) 50 ->setLabel(pht('Macro')) 51 ->setName('macro') 52 ->setLimit(1) 53 ->setDatasource(new PhabricatorMacroDatasource()) 54 ->setError($e_macro)) 55 ->appendChild( 56 id(new AphrontFormTextControl()) 57 ->setLabel(pht('Above')) 58 ->setName('above') 59 ->setValue($above)) 60 ->appendChild( 61 id(new AphrontFormTextControl()) 62 ->setLabel(pht('Below')) 63 ->setName('below') 64 ->setValue($below)); 65 66 $dialog = id(new AphrontDialogView()) 67 ->setUser($viewer) 68 ->setTitle(pht('Create Meme')) 69 ->appendForm($view) 70 ->addCancelButton('/') 71 ->addSubmitButton(pht('Llama Diorama')); 72 73 return id(new AphrontDialogResponse())->setDialog($dialog); 74 } 75 76}