Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F2896175
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Award Token
Flag For Later
Advanced/Developer...
View Handle
View Hovercard
Size
7 KB
Referenced Files
None
Subscribers
None
View Options
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 @@
<?php
final class DifferentialHovercardEventListener
extends PhabricatorEventListener {
public function register() {
$this->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 @@
<?php
final class ManiphestHovercardEventListener extends PhabricatorEventListener {
public function register() {
$this->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 @@
-<?php
-
-/**
- * Implodes selected handles from a pool of handles. Useful if you load handles
- * for various phids, but only render a few of them at a time.
- *
- * @return PhutilSafeHTML
- */
-function implode_selected_handle_links($glue, array $handles, array $phids) {
-
- $items = array();
- foreach ($phids as $phid) {
- $items[] = $handles[$phid]->renderLink();
- }
-
- return phutil_implode_html($glue, $items);
-}
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Jan 19 2025, 22:40 (6 w, 3 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1129494
Default Alt Text
(7 KB)
Attached To
Mode
rP Phorge
Attached
Detach File
Event Timeline
Log In to Comment