diff --git a/src/applications/differential/controller/DifferentialRevisionListController.php b/src/applications/differential/controller/DifferentialRevisionListController.php index fdfbb2e599..387942b8b3 100644 --- a/src/applications/differential/controller/DifferentialRevisionListController.php +++ b/src/applications/differential/controller/DifferentialRevisionListController.php @@ -439,7 +439,8 @@ final class DifferentialRevisionListController extends DifferentialController { $view = id(clone $template) ->setHighlightAge(true) - ->setRevisions($active); + ->setRevisions($active) + ->loadAssets(); $views[] = array( 'title' => 'Action Required', 'view' => $view, @@ -468,7 +469,8 @@ final class DifferentialRevisionListController extends DifferentialController { } $view = id(clone $template) - ->setRevisions($waiting); + ->setRevisions($waiting) + ->loadAssets(); $views[] = array( 'title' => 'Waiting On Others', 'view' => $view, @@ -486,7 +488,8 @@ final class DifferentialRevisionListController extends DifferentialController { 'all' => 'Revisions', ); $view = id(clone $template) - ->setRevisions($revisions); + ->setRevisions($revisions) + ->loadAssets(); $views[] = array( 'title' => idx($titles, $filter), 'view' => $view, diff --git a/src/applications/differential/controller/DifferentialRevisionViewController.php b/src/applications/differential/controller/DifferentialRevisionViewController.php index e7eec1ffc3..2eaa9b2142 100644 --- a/src/applications/differential/controller/DifferentialRevisionViewController.php +++ b/src/applications/differential/controller/DifferentialRevisionViewController.php @@ -862,7 +862,8 @@ final class DifferentialRevisionViewController extends DifferentialController { $view = id(new DifferentialRevisionListView()) ->setRevisions($revisions) ->setFields(DifferentialRevisionListView::getDefaultFields()) - ->setUser($this->getRequest()->getUser()); + ->setUser($this->getRequest()->getUser()) + ->loadAssets(); $phids = $view->getRequiredHandlePHIDs(); $handles = id(new PhabricatorObjectHandleData($phids))->loadHandles(); diff --git a/src/applications/differential/view/DifferentialRevisionListView.php b/src/applications/differential/view/DifferentialRevisionListView.php index 360950a52d..e5015b0bee 100644 --- a/src/applications/differential/view/DifferentialRevisionListView.php +++ b/src/applications/differential/view/DifferentialRevisionListView.php @@ -22,6 +22,7 @@ final class DifferentialRevisionListView extends AphrontView { private $revisions; + private $flags = array(); private $handles; private $user; private $fields; @@ -69,6 +70,23 @@ final class DifferentialRevisionListView extends AphrontView { return $this; } + public function loadAssets() { + $user = $this->user; + if (!$user) { + throw new Exception("Call setUser() before loadAssets()!"); + } + if ($this->revisions === null) { + throw new Exception("Call setRevisions() before loadAssets()!"); + } + + $this->flags = id(new PhabricatorFlagQuery()) + ->withOwnerPHIDs(array($user->getPHID())) + ->withObjectPHIDs(mpull($this->revisions, 'getPHID')) + ->execute(); + + return $this; + } + public function render() { $user = $this->user; @@ -88,11 +106,7 @@ final class DifferentialRevisionListView extends AphrontView { Javelin::initBehavior('phabricator-tooltips', array()); require_celerity_resource('aphront-tooltip-css'); - $flags = id(new PhabricatorFlagQuery()) - ->withOwnerPHIDs(array($user->getPHID())) - ->withObjectPHIDs(mpull($this->revisions, 'getPHID')) - ->execute(); - $flagged = mpull($flags, null, 'getObjectPHID'); + $flagged = mpull($this->flags, null, 'getObjectPHID'); foreach ($this->fields as $field) { $field->setUser($this->user); diff --git a/src/applications/diffusion/controller/DiffusionController.php b/src/applications/diffusion/controller/DiffusionController.php index 8796699041..ffdc897ed5 100644 --- a/src/applications/diffusion/controller/DiffusionController.php +++ b/src/applications/diffusion/controller/DiffusionController.php @@ -137,7 +137,8 @@ abstract class DiffusionController extends PhabricatorController { $view = id(new DifferentialRevisionListView()) ->setRevisions($revisions) ->setFields(DifferentialRevisionListView::getDefaultFields()) - ->setUser($this->getRequest()->getUser()); + ->setUser($this->getRequest()->getUser()) + ->loadAssets(); $phids = $view->getRequiredHandlePHIDs(); $handles = id(new PhabricatorObjectHandleData($phids))->loadHandles(); diff --git a/src/applications/directory/controller/PhabricatorDirectoryMainController.php b/src/applications/directory/controller/PhabricatorDirectoryMainController.php index 0b0228251f..e0784a211a 100644 --- a/src/applications/directory/controller/PhabricatorDirectoryMainController.php +++ b/src/applications/directory/controller/PhabricatorDirectoryMainController.php @@ -326,7 +326,8 @@ final class PhabricatorDirectoryMainController ->setHighlightAge(true) ->setRevisions($active) ->setFields(DifferentialRevisionListView::getDefaultFields()) - ->setUser($user); + ->setUser($user) + ->loadAssets(); $phids = array_merge( array($user_phid), $revision_view->getRequiredHandlePHIDs());