Changeset View
Changeset View
Standalone View
Standalone View
src/applications/maniphest/event/ManiphestHovercardEventListener.php
Show All 37 Lines | $edge_query = id(new PhabricatorEdgeQuery()) | ||||
$e_dep_on, | $e_dep_on, | ||||
$e_dep_by, | $e_dep_by, | ||||
)); | )); | ||||
$edges = idx($edge_query->execute(), $phid); | $edges = idx($edge_query->execute(), $phid); | ||||
$edge_phids = $edge_query->getDestinationPHIDs(); | $edge_phids = $edge_query->getDestinationPHIDs(); | ||||
$owner_phid = $task->getOwnerPHID(); | $owner_phid = $task->getOwnerPHID(); | ||||
$phids = array_filter(array_merge( | $hovercard | ||||
array($owner_phid), | ->setTitle(pht('T%d', $task->getID())) | ||||
$edge_phids)); | |||||
$viewer_handles = $this->loadHandles($phids, $viewer); | |||||
$hovercard->setTitle(pht('T%d', $task->getID())) | |||||
->setDetail($task->getTitle()); | ->setDetail($task->getTitle()); | ||||
$owner = phutil_tag('em', array(), pht('None')); | |||||
if ($owner_phid) { | 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) { | if ($edge_phids) { | ||||
$edge_types = array( | $edge_types = array( | ||||
$e_project => pht('Projects'), | $e_project => pht('Projects'), | ||||
$e_dep_by => pht('Dependent Tasks'), | $e_dep_by => pht('Dependent Tasks'), | ||||
$e_dep_on => pht('Depends On'), | $e_dep_on => pht('Depends On'), | ||||
); | ); | ||||
$max_count = 6; | $max_count = 6; | ||||
foreach ($edge_types as $edge_type => $edge_name) { | foreach ($edge_types as $edge_type => $edge_name) { | ||||
if ($edges[$edge_type]) { | if ($edges[$edge_type]) { | ||||
// TODO: This can be made more sophisticated. We still load all | // TODO: This can be made more sophisticated. We still load all | ||||
// edges into memory. Only load the ones we need. | // edges into memory. Only load the ones we need. | ||||
$edge_overflow = array(); | $edge_overflow = array(); | ||||
if (count($edges[$edge_type]) > $max_count) { | if (count($edges[$edge_type]) > $max_count) { | ||||
$edges[$edge_type] = array_slice($edges[$edge_type], 0, 6, true); | $edges[$edge_type] = array_slice($edges[$edge_type], 0, 6, true); | ||||
$edge_overflow = ', ...'; | $edge_overflow = ', ...'; | ||||
} | } | ||||
$hovercard->addField( | $hovercard->addField( | ||||
$edge_name, | $edge_name, | ||||
implode_selected_handle_links(', ', $viewer_handles, | array( | ||||
array_keys($edges[$edge_type])) | $viewer->renderHandleList(array_keys($edges[$edge_type])), | ||||
->appendHTML($edge_overflow)); | $edge_overflow, | ||||
)); | |||||
} | } | ||||
} | } | ||||
} | } | ||||
$hovercard->addTag(ManiphestView::renderTagForTask($task)); | $hovercard->addTag(ManiphestView::renderTagForTask($task)); | ||||
$event->setValue('hovercard', $hovercard); | $event->setValue('hovercard', $hovercard); | ||||
} | } | ||||
protected function loadHandles(array $phids, $viewer) { | |||||
return id(new PhabricatorHandleQuery()) | |||||
->setViewer($viewer) | |||||
->withPHIDs($phids) | |||||
->execute(); | |||||
} | |||||
} | } |