public function processRequest()
 {
     $request = $this->getRequest();
     $user = $request->getUser();
     $phids = $request->getArr('phids');
     $handles = id(new PhabricatorHandleQuery())->setViewer($user)->withPHIDs($phids)->execute();
     $objects = id(new PhabricatorObjectQuery())->setViewer($user)->withPHIDs($phids)->execute();
     $cards = array();
     foreach ($phids as $phid) {
         $handle = $handles[$phid];
         $hovercard = new PhabricatorHovercardView();
         $hovercard->setObjectHandle($handle);
         // Send it to the other side of the world, thanks to PhutilEventEngine
         $event = new PhabricatorEvent(PhabricatorEventType::TYPE_UI_DIDRENDERHOVERCARD, array('hovercard' => $hovercard, 'handle' => $handle, 'object' => idx($objects, $phid)));
         $event->setUser($user);
         PhutilEventEngine::dispatchEvent($event);
         $cards[$phid] = $hovercard;
     }
     // Browser-friendly for non-Ajax requests
     if (!$request->isAjax()) {
         foreach ($cards as $key => $hovercard) {
             $cards[$key] = phutil_tag('div', array('class' => 'ml'), $hovercard);
         }
         return $this->buildApplicationPage($cards, array('device' => false));
     } else {
         return id(new AphrontAjaxResponse())->setContent(array('cards' => $cards));
     }
 }
 public function renderHovercard(PhabricatorHovercardView $hovercard, PhabricatorObjectHandle $handle, $object, $data)
 {
     $viewer = $this->getViewer();
     $user = idx($data['users'], $object->getPHID());
     if (!$user) {
         return;
     }
     $hovercard->setTitle($user->getUsername());
     $profile = $user->getUserProfile();
     $detail = $user->getRealName();
     if ($profile->getTitle()) {
         $detail .= ' - ' . $profile->getTitle();
     }
     $hovercard->setDetail($detail);
     if ($user->getIsDisabled()) {
         $hovercard->addField(pht('Account'), pht('Disabled'));
     } else {
         if (!$user->isUserActivated()) {
             $hovercard->addField(pht('Account'), pht('Not Activated'));
         } else {
             if (PhabricatorApplication::isClassInstalledForViewer('PhabricatorCalendarApplication', $viewer)) {
                 $hovercard->addField(pht('Status'), $user->getAvailabilityDescription($viewer));
             }
         }
     }
     $hovercard->addField(pht('User Since'), phabricator_date($user->getDateCreated(), $viewer));
     if ($profile->getBlurb()) {
         $hovercard->addField(pht('Blurb'), id(new PhutilUTF8StringTruncator())->setMaximumGlyphs(120)->truncateString($profile->getBlurb()));
     }
     $badges = $this->buildBadges($user, $viewer);
     foreach ($badges as $badge) {
         $hovercard->addBadge($badge);
     }
 }
 public function renderHovercard(PhabricatorHovercardView $hovercard, PhabricatorObjectHandle $handle, $task, $data)
 {
     $viewer = $this->getViewer();
     $hovercard->setTitle($task->getMonogram())->setDetail($task->getTitle());
     $owner_phid = $task->getOwnerPHID();
     if ($owner_phid) {
         $owner = $viewer->renderHandle($owner_phid);
     } else {
         $owner = phutil_tag('em', array(), pht('None'));
     }
     $hovercard->addField(pht('Assigned To'), $owner);
     $hovercard->addField(pht('Priority'), ManiphestTaskPriority::getTaskPriorityName($task->getPriority()));
     $hovercard->addTag(ManiphestView::renderTagForTask($task));
 }
 public function renderHovercard(PhabricatorHovercardView $hovercard, PhabricatorObjectHandle $handle, $object, $data)
 {
     $viewer = $this->getViewer();
     $revision = idx($data['revisions'], $object->getPHID());
     if (!$revision) {
         return;
     }
     $hovercard->setTitle('D' . $revision->getID());
     $hovercard->setDetail($revision->getTitle());
     $hovercard->addField(pht('Author'), $viewer->renderHandle($revision->getAuthorPHID()));
     $reviewer_phids = $revision->getReviewerStatus();
     $reviewer_phids = mpull($reviewer_phids, 'getReviewerPHID');
     $hovercard->addField(pht('Reviewers'), $viewer->renderHandleList($reviewer_phids)->setAsInline(true));
     $summary = $revision->getSummary();
     if (strlen($summary)) {
         $summary = id(new PhutilUTF8StringTruncator())->setMaximumGlyphs(120)->truncateString($summary);
         $hovercard->addField(pht('Summary'), $summary);
     }
     $tag = DifferentialRevisionDetailView::renderTagForRevision($revision);
     $hovercard->addTag($tag);
 }
 public function renderHovercard(PhabricatorHovercardView $hovercard, PhabricatorObjectHandle $handle, $commit, $data)
 {
     $viewer = $this->getViewer();
     $author_phid = $commit->getAuthorPHID();
     if ($author_phid) {
         $author = $viewer->renderHandle($author_phid);
     } else {
         $commit_data = $commit->loadCommitData();
         $author = phutil_tag('em', array(), $commit_data->getAuthorName());
     }
     $hovercard->setTitle($handle->getName());
     $hovercard->setDetail($commit->getSummary());
     $hovercard->addField(pht('Author'), $author);
     $hovercard->addField(pht('Date'), phabricator_date($commit->getEpoch(), $viewer));
     if ($commit->getAuditStatus() != PhabricatorAuditCommitStatusConstants::NONE) {
         $hovercard->addField(pht('Audit Status'), PhabricatorAuditCommitStatusConstants::getStatusName($commit->getAuditStatus()));
     }
 }