Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/files/favicon/PhabricatorFaviconRefQuery.php
12241 views
1
<?php
2
3
final class PhabricatorFaviconRefQuery extends Phobject {
4
5
private $refs;
6
7
public function withRefs(array $refs) {
8
assert_instances_of($refs, 'PhabricatorFaviconRef');
9
$this->refs = $refs;
10
return $this;
11
}
12
13
public function execute() {
14
$viewer = PhabricatorUser::getOmnipotentUser();
15
16
$refs = $this->refs;
17
18
$config_digest = PhabricatorFaviconRef::newConfigurationDigest();
19
20
$ref_map = array();
21
foreach ($refs as $ref) {
22
$ref_digest = $ref->newDigest();
23
$ref_key = "favicon({$config_digest},{$ref_digest},8)";
24
25
$ref
26
->setViewer($viewer)
27
->setCacheKey($ref_key);
28
29
$ref_map[$ref_key] = $ref;
30
}
31
32
$cache = PhabricatorCaches::getImmutableCache();
33
$ref_hits = $cache->getKeys(array_keys($ref_map));
34
35
foreach ($ref_hits as $ref_key => $ref_uri) {
36
$ref_map[$ref_key]->setURI($ref_uri);
37
unset($ref_map[$ref_key]);
38
}
39
40
if ($ref_map) {
41
$new_map = array();
42
foreach ($ref_map as $ref_key => $ref) {
43
$ref_uri = $ref->newURI();
44
$ref->setURI($ref_uri);
45
$new_map[$ref_key] = $ref_uri;
46
}
47
48
$cache->setKeys($new_map);
49
}
50
51
return $refs;
52
}
53
54
55
}
56
57