. */ declare(strict_types=1); namespace FireflyIII\Support; use Illuminate\Support\Collection; /** * Class CacheProperties. */ class CacheProperties { protected string $hash = ''; protected Collection $properties; public function __construct() { $this->properties = new Collection(); if (auth()->check()) { $this->addProperty(auth()->user()->id); $this->addProperty(app('preferences')->lastActivity()); } } /** * @param mixed $property */ public function addProperty($property): void { $this->properties->push($property); } /** * @return mixed */ public function get() { return \Cache::get($this->hash); } public function getHash(): string { return $this->hash; } public function has(): bool { if ('testing' === config('app.env')) { return false; } $this->hash(); return \Cache::has($this->hash); } private function hash(): void { $content = ''; foreach ($this->properties as $property) { try { $content .= json_encode($property, JSON_THROW_ON_ERROR); } catch (\JsonException $e) { // @ignoreException $content .= hash('sha256', (string)time()); } } $this->hash = substr(hash('sha256', $content), 0, 16); } /** * @param mixed $data */ public function store($data): void { \Cache::forever($this->hash, $data); } }