@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
at recaptime-dev/main 91 lines 2.5 kB view raw
1<?php 2 3final class DiffusionHovercardEngineExtension 4 extends PhabricatorHovercardEngineExtension { 5 6 const EXTENSIONKEY = 'diffusion'; 7 8 public function isExtensionEnabled() { 9 return PhabricatorApplication::isClassInstalled( 10 PhabricatorDiffusionApplication::class); 11 } 12 13 public function getExtensionName() { 14 return pht('Diffusion Commits'); 15 } 16 17 public function canRenderObjectHovercard($object) { 18 return ($object instanceof PhabricatorRepositoryCommit); 19 } 20 21 public function renderHovercard( 22 PHUIHovercardView $hovercard, 23 PhabricatorObjectHandle $handle, 24 $commit, 25 $data) { 26 27 $viewer = $this->getViewer(); 28 29 $commit = id(new DiffusionCommitQuery()) 30 ->setViewer($viewer) 31 ->needIdentities(true) 32 ->needCommitData(true) 33 ->withPHIDs(array($commit->getPHID())) 34 ->executeOne(); 35 if (!$commit) { 36 return; 37 } 38 39 $author_phid = $commit->getAuthorDisplayPHID(); 40 $committer_phid = $commit->getCommitterDisplayPHID(); 41 $repository_phid = $commit->getRepository()->getPHID(); 42 43 $phids = array(); 44 $phids[] = $author_phid; 45 $phids[] = $committer_phid; 46 $phids[] = $repository_phid; 47 48 $handles = $viewer->loadHandles($phids); 49 50 $hovercard->setTitle($handle->getName()); 51 52 // See T13620. Use a longer slice of the message than the "summary" here, 53 // since we have at least a few lines of room in the UI. 54 $commit_message = $commit->getCommitMessageForDisplay(); 55 56 $message_limit = 512; 57 58 $short_message = id(new PhutilUTF8StringTruncator()) 59 ->setMaximumBytes($message_limit * 4) 60 ->setMaximumGlyphs($message_limit) 61 ->truncateString($commit_message); 62 $short_message = phutil_escape_html_newlines($short_message); 63 64 $hovercard->setDetail($short_message); 65 66 $repository = $handles[$repository_phid]->renderLink(); 67 $hovercard->addField(pht('Repository'), $repository); 68 69 $author = $handles[$author_phid]->renderLink(); 70 if ($author_phid) { 71 $hovercard->addField(pht('Author'), $author); 72 } 73 74 if ($committer_phid && ($committer_phid !== $author_phid)) { 75 $committer = $handles[$committer_phid]->renderLink(); 76 $hovercard->addField(pht('Committer'), $committer); 77 } 78 79 $date = phabricator_date($commit->getEpoch(), $viewer); 80 $hovercard->addField(pht('Commit Date'), $date); 81 82 if (!$commit->isAuditStatusNoAudit()) { 83 $status = $commit->getAuditStatusObject(); 84 85 $hovercard->addField( 86 pht('Audit Status'), 87 $status->getName()); 88 } 89 } 90 91}