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

Transactions - make the details stuff generic and ajaxy

Summary: Fixes T2213

Test Plan: Updated a pholio mock description. Observed that when I first showed details there was a round trip made. Toggled show / hide noting no more trips made to server.

Reviewers: epriestley

Reviewed By: epriestley

CC: Korvin, aran

Maniphest Tasks: T2213

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

+97 -24
+1 -1
src/__celerity_resource_map__.php
··· 2178 2178 ), 2179 2179 'javelin-behavior-phabricator-transaction-list' => 2180 2180 array( 2181 - 'uri' => '/res/8d602093/rsrc/js/application/transactions/behavior-transaction-list.js', 2181 + 'uri' => '/res/db441ac4/rsrc/js/application/transactions/behavior-transaction-list.js', 2182 2182 'type' => 'js', 2183 2183 'requires' => 2184 2184 array(
+2
src/__phutil_library_map__.php
··· 837 837 'PhabricatorApplicationTransactionCommentQuery' => 'applications/transactions/query/PhabricatorApplicationTransactionCommentQuery.php', 838 838 'PhabricatorApplicationTransactionCommentView' => 'applications/transactions/view/PhabricatorApplicationTransactionCommentView.php', 839 839 'PhabricatorApplicationTransactionController' => 'applications/transactions/controller/PhabricatorApplicationTransactionController.php', 840 + 'PhabricatorApplicationTransactionDetailController' => 'applications/transactions/controller/PhabricatorApplicationTransactionDetailController.php', 840 841 'PhabricatorApplicationTransactionEditor' => 'applications/transactions/editor/PhabricatorApplicationTransactionEditor.php', 841 842 'PhabricatorApplicationTransactionFeedStory' => 'applications/transactions/feed/PhabricatorApplicationTransactionFeedStory.php', 842 843 'PhabricatorApplicationTransactionInterface' => 'applications/transactions/interface/PhabricatorApplicationTransactionInterface.php', ··· 2878 2879 'PhabricatorApplicationTransactionCommentQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 2879 2880 'PhabricatorApplicationTransactionCommentView' => 'AphrontView', 2880 2881 'PhabricatorApplicationTransactionController' => 'PhabricatorController', 2882 + 'PhabricatorApplicationTransactionDetailController' => 'PhabricatorApplicationTransactionController', 2881 2883 'PhabricatorApplicationTransactionEditor' => 'PhabricatorEditor', 2882 2884 'PhabricatorApplicationTransactionFeedStory' => 'PhabricatorFeedStory', 2883 2885 'PhabricatorApplicationTransactionNoEffectException' => 'Exception',
+2
src/applications/transactions/application/PhabricatorApplicationTransactions.php
··· 17 17 => 'PhabricatorApplicationTransactionCommentEditController', 18 18 'history/(?<phid>[^/]+)/' 19 19 => 'PhabricatorApplicationTransactionCommentHistoryController', 20 + 'detail/(?<phid>[^/]+)/' 21 + => 'PhabricatorApplicationTransactionDetailController', 20 22 ), 21 23 ); 22 24 }
+3 -7
src/applications/transactions/controller/PhabricatorApplicationTransactionCommentEditController.php
··· 13 13 $request = $this->getRequest(); 14 14 $user = $request->getUser(); 15 15 16 - $xactions = id(new PhabricatorObjectHandleData(array($this->phid))) 16 + $xaction = id(new PhabricatorObjectQuery()) 17 + ->withPHIDs(array($this->phid)) 17 18 ->setViewer($user) 18 - ->loadObjects(); 19 - $xaction = idx($xactions, $this->phid); 19 + ->executeOne(); 20 20 21 21 if (!$xaction) { 22 22 // TODO: This may also mean you don't have permission to edit the object, ··· 33 33 34 34 $obj_phid = $xaction->getObjectPHID(); 35 35 $obj_handle = PhabricatorObjectHandleData::loadOneHandle($obj_phid, $user); 36 - if (!$obj_handle) { 37 - // Require the corresponding object exist and be visible to the user. 38 - return new Aphront404Response(); 39 - } 40 36 41 37 if ($request->isDialogFormPost()) { 42 38 $text = $request->getStr('text');
+6 -11
src/applications/transactions/controller/PhabricatorApplicationTransactionCommentHistoryController.php
··· 13 13 $request = $this->getRequest(); 14 14 $user = $request->getUser(); 15 15 16 - $xactions = id(new PhabricatorObjectHandleData(array($this->phid))) 16 + $xaction = id(new PhabricatorObjectQuery()) 17 + ->withPHIDs(array($this->phid)) 17 18 ->setViewer($user) 18 - ->loadObjects(); 19 - $xaction = idx($xactions, $this->phid); 19 + ->executeOne(); 20 20 21 21 if (!$xaction) { 22 22 // TODO: This may also mean you don't have permission to edit the object, ··· 30 30 return new Aphront404Response(); 31 31 } 32 32 33 - $obj_phid = $xaction->getObjectPHID(); 34 - $obj_handle = PhabricatorObjectHandleData::loadOneHandle($obj_phid, $user); 35 - if (!$obj_handle) { 36 - // Require the corresponding object exist and be visible to the user. 37 - return new Aphront404Response(); 38 - } 39 - 40 33 $comments = id(new PhabricatorApplicationTransactionCommentQuery()) 41 34 ->setViewer($user) 42 35 ->setTemplate($xaction->getApplicationTransactionCommentObject()) ··· 59 52 ->attachComment($comment); 60 53 } 61 54 55 + $obj_phid = $xaction->getObjectPHID(); 56 + $obj_handle = PhabricatorObjectHandleData::loadOneHandle($obj_phid, $user); 57 + 62 58 $view = id(new PhabricatorApplicationTransactionView()) 63 59 ->setUser($user) 64 60 ->setObjectPHID($obj_phid) 65 61 ->setTransactions($xactions) 66 62 ->setShowEditActions(false); 67 - 68 63 69 64 $dialog = id(new AphrontDialogView()) 70 65 ->setUser($user)
+33
src/applications/transactions/controller/PhabricatorApplicationTransactionDetailController.php
··· 1 + <?php 2 + 3 + final class PhabricatorApplicationTransactionDetailController 4 + extends PhabricatorApplicationTransactionController { 5 + 6 + private $phid; 7 + 8 + public function willProcessRequest(array $data) { 9 + $this->phid = $data['phid']; 10 + } 11 + 12 + public function processRequest() { 13 + $request = $this->getRequest(); 14 + $user = $request->getUser(); 15 + 16 + $xaction = id(new PhabricatorObjectQuery()) 17 + ->withPHIDs(array($this->phid)) 18 + ->setViewer($user) 19 + ->executeOne(); 20 + 21 + if (!$xaction) { 22 + // future proofing for the day visibility of transactions can change 23 + return new Aphront404Response(); 24 + } 25 + 26 + return id(new PhabricatorApplicationTransactionResponse()) 27 + ->setViewer($user) 28 + ->setTransactions(array($xaction)) 29 + ->setIsDetailView(true) 30 + ->setAnchorOffset($request->getStr('anchor')); 31 + } 32 + 33 + }
+8 -1
src/applications/transactions/response/PhabricatorApplicationTransactionResponse.php
··· 7 7 private $transactions; 8 8 private $anchorOffset; 9 9 private $isPreview; 10 + private $isDetailView; 10 11 11 12 protected function buildProxy() { 12 13 return new AphrontAjaxResponse(); ··· 46 47 return $this; 47 48 } 48 49 50 + public function setIsDetailView($is_detail_view) { 51 + $this->isDetailView = $is_detail_view; 52 + return $this; 53 + } 54 + 49 55 public function reduceProxyResponse() { 50 56 if ($this->getTransactions()) { 51 57 $view = head($this->getTransactions()) ··· 57 63 $view 58 64 ->setUser($this->getViewer()) 59 65 ->setTransactions($this->getTransactions()) 60 - ->setIsPreview($this->isPreview); 66 + ->setIsPreview($this->isPreview) 67 + ->setIsDetailView($this->isDetailView); 61 68 62 69 if ($this->getAnchorOffset()) { 63 70 $view->setAnchorOffset($this->getAnchorOffset());
+29 -4
src/applications/transactions/view/PhabricatorApplicationTransactionView.php
··· 11 11 private $showEditActions = true; 12 12 private $isPreview; 13 13 private $objectPHID; 14 + private $isDetailView; 15 + 16 + public function setIsDetailView($is_detail_view) { 17 + $this->isDetailView = $is_detail_view; 18 + return $this; 19 + } 14 20 15 21 public function setObjectPHID($object_phid) { 16 22 $this->objectPHID = $object_phid; ··· 89 95 90 96 $title = $xaction->getTitle(); 91 97 if ($xaction->hasChangeDetails()) { 98 + if ($this->isPreview || $this->isDetailView) { 99 + $details = $this->buildChangeDetails($xaction); 100 + } else { 101 + $details = $this->buildChangeDetailsLink($xaction); 102 + } 92 103 $title = array( 93 104 $title, 94 105 ' ', 95 - $this->buildChangeDetails($xaction), 106 + $details, 96 107 ); 97 108 } 98 109 $event->setTitle($title); ··· 168 179 return $view->render(); 169 180 } 170 181 171 - 172 182 protected function getOrBuildEngine() { 173 183 if ($this->engine) { 174 184 return $this->engine; ··· 205 215 'sigil' => 'reveal-content', 206 216 'mustcapture' => true, 207 217 'id' => $show_id, 218 + 'style' => 'display: none', 208 219 'meta' => array( 209 220 'hideIDs' => array($show_id), 210 221 'showIDs' => array($hide_id, $content_id), ··· 219 230 'sigil' => 'reveal-content', 220 231 'mustcapture' => true, 221 232 'id' => $hide_id, 222 - 'style' => 'display: none', 223 233 'meta' => array( 224 234 'hideIDs' => array($hide_id, $content_id), 225 235 'showIDs' => array($show_id), ··· 231 241 'div', 232 242 array( 233 243 'id' => $content_id, 234 - 'style' => 'display: none', 235 244 'class' => 'phabricator-timeline-change-details', 236 245 ), 237 246 $xaction->renderChangeDetails($this->getUser())); ··· 241 250 $hide_more, 242 251 $content, 243 252 ); 253 + } 254 + 255 + private function buildChangeDetailsLink( 256 + PhabricatorApplicationTransaction $xaction) { 257 + 258 + return javelin_tag( 259 + 'a', 260 + array( 261 + 'href' => '/transactions/detail/'.$xaction->getPHID().'/', 262 + 'sigil' => 'transaction-detail', 263 + 'mustcapture' => true, 264 + 'meta' => array( 265 + 'anchor' => $this->anchorOffset, 266 + ), 267 + ), 268 + pht('(Show Details)')); 244 269 } 245 270 246 271 protected function shouldGroupTransactions(
+13
webroot/rsrc/js/application/transactions/behavior-transaction-list.js
··· 75 75 e.kill(); 76 76 }); 77 77 78 + JX.DOM.listen(list, 'click', 'transaction-detail', function(e) { 79 + if (!e.isNormalClick()) { 80 + return; 81 + } 82 + 83 + JX.Workflow.newFromLink(e.getTarget()) 84 + .setData({anchor: e.getData('anchor')}) 85 + .setHandler(ontransactions) 86 + .start(); 87 + 88 + e.kill(); 89 + }); 90 + 78 91 JX.Stratcom.listen( 79 92 ['submit', 'didSyntheticSubmit'], 80 93 'transaction-append',