@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
fork

Configure Feed

Select the types of activity you want to include in your feed.

Make Ponder use ApplicationTransaction rendering for answers

Summary: Ref T3373. This breaks some stuff, but future diffs will fix it.

Test Plan: Viewed some questions, saw answer text.

Reviewers: btrahan

Reviewed By: btrahan

CC: aran, chad

Maniphest Tasks: T3373

Differential Revision: https://secure.phabricator.com/D6604

+122 -30
+2
src/__phutil_library_map__.php
··· 1877 1877 'PonderAnswerSaveController' => 'applications/ponder/controller/PonderAnswerSaveController.php', 1878 1878 'PonderAnswerTransaction' => 'applications/ponder/storage/PonderAnswerTransaction.php', 1879 1879 'PonderAnswerTransactionComment' => 'applications/ponder/storage/PonderAnswerTransactionComment.php', 1880 + 'PonderAnswerTransactionQuery' => 'applications/ponder/query/PonderAnswerTransactionQuery.php', 1880 1881 'PonderAnswerViewController' => 'applications/ponder/controller/PonderAnswerViewController.php', 1881 1882 'PonderAnsweredMail' => 'applications/ponder/mail/PonderAnsweredMail.php', 1882 1883 'PonderComment' => 'applications/ponder/storage/PonderComment.php', ··· 3997 3998 'PonderAnswerSaveController' => 'PonderController', 3998 3999 'PonderAnswerTransaction' => 'PhabricatorApplicationTransaction', 3999 4000 'PonderAnswerTransactionComment' => 'PhabricatorApplicationTransactionComment', 4001 + 'PonderAnswerTransactionQuery' => 'PhabricatorApplicationTransactionQuery', 4000 4002 'PonderAnswerViewController' => 'PonderController', 4001 4003 'PonderAnsweredMail' => 'PonderMail', 4002 4004 'PonderComment' =>
+110 -30
src/applications/ponder/controller/PonderQuestionViewController.php
··· 16 16 $question = id(new PonderQuestionQuery()) 17 17 ->setViewer($user) 18 18 ->withIDs(array($this->questionID)) 19 + ->needAnswers(true) 19 20 ->executeOne(); 20 21 if (!$question) { 21 22 return new Aphront404Response(); 22 23 } 23 - $question->attachRelated(); 24 - $question->attachVotes($user->getPHID()); 25 - $object_phids = array($user->getPHID(), $question->getAuthorPHID()); 26 24 27 - $answers = $question->getAnswers(); 28 - $comments = $question->getComments(); 29 - foreach ($comments as $comment) { 30 - $object_phids[] = $comment->getAuthorPHID(); 31 - } 32 - 33 - foreach ($answers as $answer) { 34 - $object_phids[] = $answer->getAuthorPHID(); 35 - 36 - $comments = $answer->getComments(); 37 - foreach ($comments as $comment) { 38 - $object_phids[] = $comment->getAuthorPHID(); 39 - } 40 - } 41 - 42 - $object_phids = array_merge($object_phids); 43 - 44 - $this->loadHandles($object_phids); 45 - $handles = $this->getLoadedHandles(); 25 + $question->attachVotes($user->getPHID()); 46 26 47 27 $question_xactions = $this->buildQuestionTransactions($question); 48 - 49 - $responses_panel = new PonderAnswerListView(); 50 - $responses_panel 51 - ->setQuestion($question) 52 - ->setHandles($handles) 53 - ->setUser($user) 54 - ->setAnswers($answers); 28 + $answers = $this->buildAnswers($question->getAnswers()); 55 29 56 30 $answer_add_panel = new PonderAddAnswerView(); 57 31 $answer_add_panel ··· 79 53 $actions, 80 54 $properties, 81 55 $question_xactions, 82 - $responses_panel, 56 + $answers, 83 57 $answer_add_panel 84 58 ), 85 59 array( ··· 194 168 // TODO: Add comment form. 195 169 196 170 return $timeline; 171 + } 172 + 173 + private function buildAnswers(array $answers) { 174 + $request = $this->getRequest(); 175 + $viewer = $request->getUser(); 176 + 177 + $out = array(); 178 + 179 + $phids = mpull($answers, 'getAuthorPHID'); 180 + $this->loadHandles($phids); 181 + 182 + $xactions = id(new PonderAnswerTransactionQuery()) 183 + ->setViewer($viewer) 184 + ->withObjectPHIDs(mpull($answers, 'getPHID')) 185 + ->execute(); 186 + 187 + $engine = id(new PhabricatorMarkupEngine()) 188 + ->setViewer($viewer); 189 + foreach ($xactions as $xaction) { 190 + if ($xaction->getComment()) { 191 + $engine->addObject( 192 + $xaction->getComment(), 193 + PhabricatorApplicationTransactionComment::MARKUP_FIELD_COMMENT); 194 + } 195 + } 196 + $engine->process(); 197 + 198 + $xaction_groups = mgroup($xactions, 'getObjectPHID'); 199 + 200 + foreach ($answers as $answer) { 201 + $author_phid = $answer->getAuthorPHID(); 202 + $xactions = idx($xaction_groups, $answer->getPHID(), array()); 203 + 204 + $out[] = phutil_tag('br'); 205 + $out[] = phutil_tag('br'); 206 + $out[] = id(new PhabricatorHeaderView()) 207 + ->setHeader($this->getHandle($author_phid)->getFullName()) 208 + ->setImage($this->getHandle($author_phid)->getImageURI()); 209 + 210 + $out[] = $this->buildAnswerActions($answer); 211 + $out[] = $this->buildAnswerProperties($answer); 212 + $out[] = id(new PhabricatorApplicationTransactionView()) 213 + ->setUser($viewer) 214 + ->setTransactions($xactions) 215 + ->setMarkupEngine($engine); 216 + 217 + // TODO: Add comment form 218 + 219 + } 220 + 221 + $out[] = phutil_tag('br'); 222 + $out[] = phutil_tag('br'); 223 + 224 + return $out; 225 + } 226 + 227 + private function buildAnswerActions(PonderAnswer $answer) { 228 + $request = $this->getRequest(); 229 + $viewer = $request->getUser(); 230 + 231 + $can_edit = PhabricatorPolicyFilter::hasCapability( 232 + $viewer, 233 + $answer, 234 + PhabricatorPolicyCapability::CAN_EDIT); 235 + 236 + $view = id(new PhabricatorActionListView()) 237 + ->setUser($request->getUser()) 238 + ->setObject($answer) 239 + ->setObjectURI($request->getRequestURI()); 240 + 241 + /* 242 + 243 + TODO 244 + 245 + $view->addAction( 246 + id(new PhabricatorActionView()) 247 + ->setIcon('edit') 248 + ->setName(pht('Edit Answer')) 249 + ->setHref($this->getApplicationURI("/answer/edit/{$id}/")) 250 + ->setDisabled(!$can_edit) 251 + ->setWorkflow(!$can_edit)); 252 + 253 + */ 254 + 255 + return $view; 256 + } 257 + 258 + private function buildAnswerProperties(PonderAnswer $answer) { 259 + $viewer = $this->getRequest()->getUser(); 260 + $view = id(new PhabricatorPropertyListView()) 261 + ->setUser($viewer) 262 + ->setObject($answer); 263 + 264 + $view->addProperty( 265 + pht('Created'), 266 + phabricator_datetime($answer->getDateCreated(), $viewer)); 267 + 268 + $view->invokeWillRenderEvent(); 269 + 270 + $view->addTextContent( 271 + PhabricatorMarkupEngine::renderOneObject( 272 + $answer, 273 + $answer->getMarkupField(), 274 + $viewer)); 275 + 276 + return $view; 197 277 } 198 278 199 279 }
+10
src/applications/ponder/query/PonderAnswerTransactionQuery.php
··· 1 + <?php 2 + 3 + final class PonderAnswerTransactionQuery 4 + extends PhabricatorApplicationTransactionQuery { 5 + 6 + protected function getTemplateApplicationTransaction() { 7 + return new PonderAnswerTransaction(); 8 + } 9 + 10 + }