@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 PonderQuestionStatusController
4 extends PonderController {
5
6 public function handleRequest(AphrontRequest $request) {
7 $viewer = $request->getViewer();
8 $id = $request->getURIData('id');
9
10 $question = id(new PonderQuestionQuery())
11 ->setViewer($viewer)
12 ->withIDs(array($id))
13 ->requireCapabilities(
14 array(
15 PhabricatorPolicyCapability::CAN_VIEW,
16 PhabricatorPolicyCapability::CAN_EDIT,
17 ))
18 ->executeOne();
19 if (!$question) {
20 return new Aphront404Response();
21 }
22
23 $view_uri = '/Q'.$question->getID();
24 $v_status = $question->getStatus();
25
26 if ($request->isFormPost()) {
27 $v_status = $request->getStr('status');
28
29 $xactions = array();
30 $xactions[] = id(new PonderQuestionTransaction())
31 ->setTransactionType(PonderQuestionStatusTransaction::TRANSACTIONTYPE)
32 ->setNewValue($v_status);
33
34 $editor = id(new PonderQuestionEditor())
35 ->setActor($viewer)
36 ->setContentSourceFromRequest($request);
37
38 $editor->applyTransactions($question, $xactions);
39
40 return id(new AphrontRedirectResponse())->setURI($view_uri);
41 }
42
43 $radio = id(new AphrontFormRadioButtonControl())
44 ->setLabel(pht('Status'))
45 ->setName('status');
46
47 foreach (PonderQuestionStatus::getQuestionStatusMap() as $value => $name) {
48 $description = PonderQuestionStatus::getQuestionStatusDescription($value);
49 if ($value === $v_status) {
50 continue;
51 }
52 $radio->addButton($value, $name, $description);
53 }
54
55 $form = id(new AphrontFormView())
56 ->setUser($viewer)
57 ->appendChild($radio);
58
59 return $this->newDialog()
60 ->setTitle(pht('Change Question Status'))
61 ->appendChild($form->buildLayoutView())
62 ->addSubmitButton(pht('Submit'))
63 ->addCancelButton($view_uri);
64
65 }
66
67}