From 97cd7a98b1e3a5d79e97f39a60cd2a861b6730f7 Mon Sep 17 00:00:00 2001 From: epriestley Date: Fri, 18 Nov 2016 14:04:20 -0800 Subject: [PATCH] Strip restricted and incomplete handles from the "Mentions" tab on Maniphest tasks Summary: Ref T8345. See T8345#201048 for discussion. This rule (don't show mentions of or from restricted objects) is more consistent with how we render mentions in the timeline and I think generally a better behavior. Test Plan: - Mentioned a task on a public task and a private task. - Privileged user (foreground) sees both. - Public user (background) sees only the public mention. {F1929485} Reviewers: chad Reviewed By: chad Maniphest Tasks: T8345 Differential Revision: https://secure.phabricator.com/D16900 --- .../ManiphestTaskDetailController.php | 30 ++++++++++++++++--- .../handle/pool/PhabricatorHandleList.php | 18 +++++++++++ 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/src/applications/maniphest/controller/ManiphestTaskDetailController.php b/src/applications/maniphest/controller/ManiphestTaskDetailController.php index 5d1999c2af..f1157bcb9f 100644 --- a/src/applications/maniphest/controller/ManiphestTaskDetailController.php +++ b/src/applications/maniphest/controller/ManiphestTaskDetailController.php @@ -510,15 +510,23 @@ final class ManiphestTaskDetailController extends ManiphestController { } $viewer = $this->getViewer(); + $in_handles = $viewer->loadHandles($in_phids); + $out_handles = $viewer->loadHandles($out_phids); + + $in_handles = $this->getCompleteHandles($in_handles); + $out_handles = $this->getCompleteHandles($out_handles); + + if (!count($in_handles) && !count($out_handles)) { + return null; + } + $view = new PHUIPropertyListView(); - if ($in_phids) { - $in_handles = $viewer->loadHandles($in_phids); + if (count($in_handles)) { $view->addProperty(pht('Mentioned In'), $in_handles->renderList()); } - if ($out_phids) { - $out_handles = $viewer->loadHandles($out_phids); + if (count($out_handles)) { $view->addProperty(pht('Mentioned Here'), $out_handles->renderList()); } @@ -528,4 +536,18 @@ final class ManiphestTaskDetailController extends ManiphestController { ->appendChild($view); } + private function getCompleteHandles(PhabricatorHandleList $handles) { + $phids = array(); + + foreach ($handles as $phid => $handle) { + if (!$handle->isComplete()) { + continue; + } + $phids[] = $phid; + } + + return $handles->newSublist($phids); + } + + } diff --git a/src/applications/phid/handle/pool/PhabricatorHandleList.php b/src/applications/phid/handle/pool/PhabricatorHandleList.php index 7a8fed529f..d9a279f8ba 100644 --- a/src/applications/phid/handle/pool/PhabricatorHandleList.php +++ b/src/applications/phid/handle/pool/PhabricatorHandleList.php @@ -74,6 +74,24 @@ final class PhabricatorHandleList } + /** + * Create a new list with a subset of the PHIDs in this list. + */ + public function newSublist(array $phids) { + foreach ($phids as $phid) { + if (!isset($this[$phid])) { + throw new Exception( + pht( + 'Trying to create a new sublist of an existsing handle list, '. + 'but PHID "%s" does not appear in the parent list.', + $phid)); + } + } + + return $this->handlePool->newHandleList($phids); + } + + /* -( Rendering )---------------------------------------------------------- */ -- 2.51.2