@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 recaptime-dev/main 67 lines 1.9 kB view raw
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}