@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 PonderQuestionCommentController 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 $question = id(new PonderQuestionQuery())
14 ->setViewer($viewer)
15 ->withIDs(array($id))
16 ->executeOne();
17 if (!$question) {
18 return new Aphront404Response();
19 }
20
21 $is_preview = $request->isPreviewRequest();
22
23 $qid = $question->getID();
24 $view_uri = "/Q{$qid}";
25
26 $xactions = array();
27 $xactions[] = id(new PonderQuestionTransaction())
28 ->setTransactionType(PhabricatorTransactions::TYPE_COMMENT)
29 ->attachComment(
30 id(new PonderQuestionTransactionComment())
31 ->setContent($request->getStr('comment')));
32
33 $editor = id(new PonderQuestionEditor())
34 ->setActor($viewer)
35 ->setContinueOnNoEffect($request->isContinueRequest())
36 ->setContentSourceFromRequest($request)
37 ->setIsPreview($is_preview);
38
39 try {
40 $xactions = $editor->applyTransactions($question, $xactions);
41 } catch (PhabricatorApplicationTransactionNoEffectException $ex) {
42 return id(new PhabricatorApplicationTransactionNoEffectResponse())
43 ->setCancelURI($view_uri)
44 ->setException($ex);
45 }
46
47 if ($request->isAjax() && $is_preview) {
48 return id(new PhabricatorApplicationTransactionResponse())
49 ->setObject($question)
50 ->setViewer($viewer)
51 ->setTransactions($xactions)
52 ->setIsPreview($is_preview);
53 } else {
54 return id(new AphrontRedirectResponse())
55 ->setURI($view_uri);
56 }
57 }
58
59}