@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<?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}