コード例 #1
0
 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('Date'), phabricator_datetime($rev->getDateModified(), $viewer));
     $hovercard->addField(pht('Reviewers'), implode_selected_handle_links(', ', $handles, $reviewer_phids));
     if ($tasks) {
         $hovercard->addField(pht('Task(s)', count($tasks)), implode_selected_handle_links(', ', $handles, $tasks));
     }
     if ($rev->getSummary()) {
         $hovercard->addField(pht('Summary'), id(new PhutilUTF8StringTruncator())->setMaximumGlyphs(120)->truncateString($rev->getSummary()));
     }
     $hovercard->addTag(DifferentialRevisionDetailView::renderTagForRevision($rev));
     $event->setValue('hovercard', $hovercard);
 }
コード例 #2
0
 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;
     }
     // Fun with "Unbeta Pholio", hua hua
     $e_dep_on = PhabricatorEdgeConfig::TYPE_TASK_DEPENDS_ON_TASK;
     $e_dep_by = PhabricatorEdgeConfig::TYPE_TASK_DEPENDED_ON_BY_TASK;
     $edge_query = id(new PhabricatorEdgeQuery())->withSourcePHIDs(array($phid))->withEdgeTypes(array($e_dep_on, $e_dep_by));
     $edges = idx($edge_query->execute(), $phid);
     $edge_phids = $edge_query->getDestinationPHIDs();
     $owner_phid = $task->getOwnerPHID();
     $project_phids = $task->getProjectPHIDs();
     $phids = array_filter(array_merge(array($owner_phid), $edge_phids, $project_phids));
     $viewer_handles = $this->loadHandles($phids, $viewer);
     $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();
     }
     $hovercard->addField(pht('Assigned to'), $owner);
     if ($project_phids) {
         $hovercard->addField(pht('Projects'), implode_selected_handle_links(', ', $viewer_handles, $project_phids));
     }
     if ($edge_phids) {
         $edge_types = array(PhabricatorEdgeConfig::TYPE_TASK_DEPENDED_ON_BY_TASK => pht('Dependent Tasks'), PhabricatorEdgeConfig::TYPE_TASK_DEPENDS_ON_TASK => 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));
             }
         }
     }
     $hovercard->addTag(ManiphestView::renderTagForTask($task));
     $event->setValue('hovercard', $hovercard);
 }
コード例 #3
0
 /**
  * Render a list of links to handles, identified by PHIDs. The handles must
  * already be loaded.
  *
  * @param   list<phid>  List of PHIDs to render links to.
  * @param   string      Style, one of "\n" (to put each item on its own line)
  *                      or "," (to list items inline, separated by commas).
  * @return  string      Rendered list of handle links.
  */
 protected function renderHandlesForPHIDs(array $phids, $style = "\n")
 {
     $style_map = array("\n" => phutil_tag('br'), ',' => ', ');
     if (empty($style_map[$style])) {
         throw new Exception("Unknown handle list style '{$style}'!");
     }
     return implode_selected_handle_links($style_map[$style], $this->getLoadedHandles(), array_filter($phids));
 }