@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
1<?php
2
3final class PhabricatorOwnersHovercardEngineExtension
4 extends PhabricatorHovercardEngineExtension {
5
6 const EXTENSIONKEY = 'owners';
7
8 public function isExtensionEnabled() {
9 return PhabricatorApplication::isClassInstalled(
10 PhabricatorOwnersApplication::class);
11 }
12
13 public function getExtensionName() {
14 return pht('Owner Packages');
15 }
16
17 public function canRenderObjectHovercard($object) {
18 return ($object instanceof PhabricatorOwnersPackage);
19 }
20
21 public function willRenderHovercards(array $objects) {
22 $viewer = $this->getViewer();
23 $phids = mpull($objects, 'getPHID');
24
25 $packages = id(new PhabricatorOwnersPackageQuery())
26 ->setViewer($viewer)
27 ->withPHIDs($phids)
28 ->execute();
29 $packages = mpull($packages, null, 'getPHID');
30
31 return array(
32 'packages' => $packages,
33 );
34 }
35
36 public function renderHovercard(
37 PHUIHovercardView $hovercard,
38 PhabricatorObjectHandle $handle,
39 $object,
40 $data) {
41
42 $viewer = $this->getViewer();
43
44 $package = idx($data['packages'], $object->getPHID());
45 if (!$package) {
46 return;
47 }
48
49 $title = pht('%s: %s', 'O'.$package->getID(), $package->getName());
50 $hovercard->setTitle($title);
51
52 $dominion = $package->getDominion();
53 $dominion_map = PhabricatorOwnersPackage::getDominionOptionsMap();
54 $spec = idx($dominion_map, $dominion, array());
55 $name = idx($spec, 'short', $dominion);
56 $hovercard->addField(pht('Dominion'), $name);
57
58 $auto = $package->getAutoReview();
59 $autoreview_map = PhabricatorOwnersPackage::getAutoreviewOptionsMap();
60 $spec = idx($autoreview_map, $auto, array());
61 $name = idx($spec, 'name', $auto);
62 $hovercard->addField(pht('Auto Review'), $name);
63
64 if ($package->isArchived()) {
65 $tag = id(new PHUITagView())
66 ->setName(pht('Archived'))
67 ->setColor(PHUITagView::COLOR_INDIGO)
68 ->setType(PHUITagView::TYPE_OBJECT);
69 $hovercard->addTag($tag);
70 }
71
72 $owner_phids = $package->getOwnerPHIDs();
73
74 $hovercard->addField(
75 pht('Owners'),
76 $viewer->renderHandleList($owner_phids)->setAsInline(true));
77
78 $description = $package->getDescription();
79 if (strlen($description)) {
80 $description = id(new PhutilUTF8StringTruncator())
81 ->setMaximumGlyphs(120)
82 ->truncateString($description);
83
84 $hovercard->addField(pht('Description'), $description);
85 }
86
87 }
88
89}