@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 PhabricatorFaviconRefQuery extends Phobject {
4
5 private $refs;
6
7 /**
8 * @param array<PhabricatorFaviconRef> $refs
9 */
10 public function withRefs(array $refs) {
11 assert_instances_of($refs, PhabricatorFaviconRef::class);
12 $this->refs = $refs;
13 return $this;
14 }
15
16 public function execute() {
17 $viewer = PhabricatorUser::getOmnipotentUser();
18
19 $refs = $this->refs;
20
21 $config_digest = PhabricatorFaviconRef::newConfigurationDigest();
22
23 $ref_map = array();
24 foreach ($refs as $ref) {
25 $ref_digest = $ref->newDigest();
26 $ref_key = "favicon({$config_digest},{$ref_digest},8)";
27
28 $ref
29 ->setViewer($viewer)
30 ->setCacheKey($ref_key);
31
32 $ref_map[$ref_key] = $ref;
33 }
34
35 $cache = PhabricatorCaches::getImmutableCache();
36 $ref_hits = $cache->getKeys(array_keys($ref_map));
37
38 foreach ($ref_hits as $ref_key => $ref_uri) {
39 $ref_map[$ref_key]->setURI($ref_uri);
40 unset($ref_map[$ref_key]);
41 }
42
43 if ($ref_map) {
44 $new_map = array();
45 foreach ($ref_map as $ref_key => $ref) {
46 $ref_uri = $ref->newURI();
47 $ref->setURI($ref_uri);
48 $new_map[$ref_key] = $ref_uri;
49 }
50
51 $cache->setKeys($new_map);
52 }
53
54 return $refs;
55 }
56
57
58}