diff --git a/src/applications/differential/event/DifferentialHovercardEventListener.php b/src/applications/differential/event/DifferentialHovercardEventListener.php index 82ec5565c1..5c53a533b1 100644 --- a/src/applications/differential/event/DifferentialHovercardEventListener.php +++ b/src/applications/differential/event/DifferentialHovercardEventListener.php @@ -1,80 +1,71 @@ listen(PhabricatorEventType::TYPE_UI_DIDRENDERHOVERCARD); } public function handleEvent(PhutilEvent $event) { switch ($event->getType()) { case PhabricatorEventType::TYPE_UI_DIDRENDERHOVERCARD: $this->handleHovercardEvent($event); break; } } private function handleHovercardEvent($event) { $viewer = $event->getUser(); $hovercard = $event->getValue('hovercard'); $object_handle = $event->getValue('handle'); $phid = $object_handle->getPHID(); $rev = $event->getValue('object'); if (!($rev instanceof DifferentialRevision)) { return; } $rev->loadRelationships(); $reviewer_phids = $rev->getReviewers(); $e_task = DifferentialRevisionHasTaskEdgeType::EDGECONST; $edge_query = id(new PhabricatorEdgeQuery()) ->withSourcePHIDs(array($phid)) ->withEdgeTypes( array( $e_task, )); $edge_query->execute(); $tasks = $edge_query->getDestinationPHIDs(); - $phids = array_merge( - array( - $rev->getAuthorPHID(), - ), - $reviewer_phids, - $tasks); - - $handles = id(new PhabricatorHandleQuery()) - ->setViewer($viewer) - ->withPHIDs($phids) - ->execute(); - $hovercard->setTitle('D'.$rev->getID()); $hovercard->setDetail($rev->getTitle()); - $hovercard->addField(pht('Author'), - $handles[$rev->getAuthorPHID()]->renderLink()); + $hovercard->addField( + pht('Author'), + $viewer->renderHandle($rev->getAuthorPHID())); - $hovercard->addField(pht('Reviewers'), - implode_selected_handle_links(', ', $handles, $reviewer_phids)); + $hovercard->addField( + pht('Reviewers'), + $viewer->renderHandleList($reviewer_phids)->setAsInline(true)); if ($tasks) { - $hovercard->addField(pht('%s Task(s)', new PhutilNumber(count($tasks))), - implode_selected_handle_links(', ', $handles, $tasks)); + $hovercard->addField( + pht('Tasks'), + $viewer->renderHandleList($tasks)->setAsInline(true)); } if ($rev->getSummary()) { $hovercard->addField(pht('Summary'), id(new PhutilUTF8StringTruncator()) ->setMaximumGlyphs(120) ->truncateString($rev->getSummary())); } $hovercard->addTag( DifferentialRevisionDetailView::renderTagForRevision($rev)); $event->setValue('hovercard', $hovercard); } } diff --git a/src/applications/maniphest/event/ManiphestHovercardEventListener.php b/src/applications/maniphest/event/ManiphestHovercardEventListener.php index f1e747de16..a33a854bc6 100644 --- a/src/applications/maniphest/event/ManiphestHovercardEventListener.php +++ b/src/applications/maniphest/event/ManiphestHovercardEventListener.php @@ -1,101 +1,90 @@ listen(PhabricatorEventType::TYPE_UI_DIDRENDERHOVERCARD); } public function handleEvent(PhutilEvent $event) { switch ($event->getType()) { case PhabricatorEventType::TYPE_UI_DIDRENDERHOVERCARD: $this->handleHovercardEvent($event); break; } } private function handleHovercardEvent(PhutilEvent $event) { $viewer = $event->getUser(); $hovercard = $event->getValue('hovercard'); $handle = $event->getValue('handle'); $phid = $handle->getPHID(); $task = $event->getValue('object'); if (!($task instanceof ManiphestTask)) { return; } $e_project = PhabricatorProjectObjectHasProjectEdgeType::EDGECONST; // Fun with "Unbeta Pholio", hua hua $e_dep_on = ManiphestTaskDependsOnTaskEdgeType::EDGECONST; $e_dep_by = ManiphestTaskDependedOnByTaskEdgeType::EDGECONST; $edge_query = id(new PhabricatorEdgeQuery()) ->withSourcePHIDs(array($phid)) ->withEdgeTypes( array( $e_project, $e_dep_on, $e_dep_by, )); $edges = idx($edge_query->execute(), $phid); $edge_phids = $edge_query->getDestinationPHIDs(); $owner_phid = $task->getOwnerPHID(); - $phids = array_filter(array_merge( - array($owner_phid), - $edge_phids)); - - $viewer_handles = $this->loadHandles($phids, $viewer); - - $hovercard->setTitle(pht('T%d', $task->getID())) + $hovercard + ->setTitle(pht('T%d', $task->getID())) ->setDetail($task->getTitle()); - $owner = phutil_tag('em', array(), pht('None')); if ($owner_phid) { - $owner = $viewer_handles[$owner_phid]->renderLink(); + $owner = $viewer->renderHandle($owner_phid); + } else { + $owner = phutil_tag('em', array(), pht('None')); } - - $hovercard->addField(pht('Assigned to'), $owner); + $hovercard->addField(pht('Assigned To'), $owner); if ($edge_phids) { $edge_types = array( $e_project => pht('Projects'), $e_dep_by => pht('Dependent Tasks'), $e_dep_on => pht('Depends On'), ); $max_count = 6; foreach ($edge_types as $edge_type => $edge_name) { if ($edges[$edge_type]) { // TODO: This can be made more sophisticated. We still load all // edges into memory. Only load the ones we need. $edge_overflow = array(); if (count($edges[$edge_type]) > $max_count) { $edges[$edge_type] = array_slice($edges[$edge_type], 0, 6, true); $edge_overflow = ', ...'; } $hovercard->addField( $edge_name, - implode_selected_handle_links(', ', $viewer_handles, - array_keys($edges[$edge_type])) - ->appendHTML($edge_overflow)); + array( + $viewer->renderHandleList(array_keys($edges[$edge_type])), + $edge_overflow, + )); } } } $hovercard->addTag(ManiphestView::renderTagForTask($task)); $event->setValue('hovercard', $hovercard); } - protected function loadHandles(array $phids, $viewer) { - return id(new PhabricatorHandleQuery()) - ->setViewer($viewer) - ->withPHIDs($phids) - ->execute(); - } - } diff --git a/src/applications/phid/handle/view/render.php b/src/applications/phid/handle/view/render.php deleted file mode 100644 index 49d18f95fe..0000000000 --- a/src/applications/phid/handle/view/render.php +++ /dev/null @@ -1,17 +0,0 @@ -renderLink(); - } - - return phutil_implode_html($glue, $items); -}