@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 63 lines 1.8 kB view raw
1<?php 2 3final class PonderAnswerCommentController extends PonderController { 4 5 public function handleRequest(AphrontRequest $request) { 6 $viewer = $request->getViewer(); 7 $id = $request->getURIData('id'); 8 9 if (!$request->isFormPost()) { 10 return new Aphront400Response(); 11 } 12 13 $answer = id(new PonderAnswerQuery()) 14 ->setViewer($viewer) 15 ->withIDs(array($id)) 16 ->executeOne(); 17 if (!$answer) { 18 return new Aphront404Response(); 19 } 20 21 $is_preview = $request->isPreviewRequest(); 22 23 $qid = $answer->getQuestion()->getID(); 24 $aid = $answer->getID(); 25 26 // TODO, this behaves badly when redirecting to the answer 27 $view_uri = "/Q{$qid}"; 28 29 $xactions = array(); 30 $xactions[] = id(new PonderAnswerTransaction()) 31 ->setTransactionType(PhabricatorTransactions::TYPE_COMMENT) 32 ->attachComment( 33 id(new PonderAnswerTransactionComment()) 34 ->setContent($request->getStr('comment'))); 35 36 $editor = id(new PonderAnswerEditor()) 37 ->setActor($viewer) 38 ->setContinueOnNoEffect($request->isContinueRequest()) 39 ->setContentSourceFromRequest($request) 40 ->setIsPreview($is_preview); 41 42 try { 43 $xactions = $editor->applyTransactions($answer, $xactions); 44 } catch (PhabricatorApplicationTransactionNoEffectException $ex) { 45 return id(new PhabricatorApplicationTransactionNoEffectResponse()) 46 ->setCancelURI($view_uri) 47 ->setException($ex); 48 } 49 50 51 if ($request->isAjax() && $is_preview) { 52 return id(new PhabricatorApplicationTransactionResponse()) 53 ->setObject($answer) 54 ->setViewer($viewer) 55 ->setTransactions($xactions) 56 ->setIsPreview($is_preview); 57 } else { 58 return id(new AphrontRedirectResponse()) 59 ->setURI($view_uri); 60 } 61 } 62 63}