Changeset View
Changeset View
Standalone View
Standalone View
src/applications/files/favicon/PhabricatorFaviconRefQuery.php
- This file was added.
<?php | |||||
final class PhabricatorFaviconRefQuery extends Phobject { | |||||
private $refs; | |||||
public function withRefs(array $refs) { | |||||
assert_instances_of($refs, 'PhabricatorFaviconRef'); | |||||
$this->refs = $refs; | |||||
return $this; | |||||
} | |||||
public function execute() { | |||||
$viewer = PhabricatorUser::getOmnipotentUser(); | |||||
$refs = $this->refs; | |||||
$config_digest = PhabricatorFaviconRef::newConfigurationDigest(); | |||||
$ref_map = array(); | |||||
foreach ($refs as $ref) { | |||||
$ref_digest = $ref->newDigest(); | |||||
$ref_key = "favicon({$config_digest},{$ref_digest},8)"; | |||||
$ref | |||||
->setViewer($viewer) | |||||
->setCacheKey($ref_key); | |||||
$ref_map[$ref_key] = $ref; | |||||
} | |||||
$cache = PhabricatorCaches::getImmutableCache(); | |||||
$ref_hits = $cache->getKeys(array_keys($ref_map)); | |||||
foreach ($ref_hits as $ref_key => $ref_uri) { | |||||
$ref_map[$ref_key]->setURI($ref_uri); | |||||
unset($ref_map[$ref_key]); | |||||
} | |||||
if ($ref_map) { | |||||
$new_map = array(); | |||||
foreach ($ref_map as $ref_key => $ref) { | |||||
$ref_uri = $ref->newURI(); | |||||
$ref->setURI($ref_uri); | |||||
$new_map[$ref_key] = $ref_uri; | |||||
} | |||||
$cache->setKeys($new_map); | |||||
} | |||||
return $refs; | |||||
} | |||||
} |