imagePreparation = $imagePreparation; $this->access = $access; } public function getImageById(int $id, ?int $size) : File { Log::info("Get Image by id", ["id" => $id, "size" => $size]); $image = \App\Models\Image::query()->where("id", "=", $id)->firstOrFail(); return $this->getImage($image, $size); } public function validateGalleryAndTenant(\App\Models\Image $image, string $gallery_url, string $tenant_url) : bool { $res = DB::select("SELECT `galleries`.`url` AS 'gallery_url', `tenants`.`url` AS 'tenant_url' FROM images LEFT JOIN `galleries` ON `images`.`gallery` = `galleries`.`id` LEFT JOIN `tenants` ON `tenants`.`id` = `galleries`.`tenant` WHERE `images`.`id` = ".$image->id.";"); if($res[0]->gallery_url == $gallery_url && $res[0]->tenant_url == $tenant_url) { return true; } return false; } public function getImage(\App\Models\Image $image, ?int $size) : File { $cacheName = $this->getCachePath($image, $size); Log::info("Get Image", ["id" => $image->id, "size" => $size, "cachename" => $cacheName]); if(Storage::disk("cache")->exists($cacheName) && $image->refreshCache == false) { Log::info("Found Image on Cache", ["id" => $image->id, "size" => $size, "cachename" => $cacheName]); return new File("cache", $cacheName); } Log::info("Get image from s3"); $file = $this->getRawImage($image); $gallery = Gallery::query()->where("id", "=", $image->gallery)->firstOrFail(); $tenant = Tenant::query()->where("id", "=", $gallery->tenant)->firstOrFail(); $watermarkFile = null; if(!is_null($tenant->watermark)) { Log::info("Image has Watermark", ["id" => $image->id, "size" => $size, "cachename" => $cacheName]); $watermarkModel = \App\Models\Image::query()->where("id", "=", $tenant->watermark)->firstOrFail(); $watermarkFile = $this->getRawImage($watermarkModel, true); } $jpg = $this->imagePreparation->prepare($file, $size, $watermarkFile); Storage::disk("cache")->put($cacheName, $jpg); $image->refreshCache = false; $image->saveOrFail(); $file = new File("cache", $cacheName); $file->setContent($jpg); unset($jpg); return $file; } public function getRawImage(\App\Models\Image $image, bool $cache = null): File { $cacheName = $this->getCachePath($image, null); if(Storage::disk("cache")->exists($cacheName)) { Log::info("Get RAW-Image File from cache", ["image_id" => $image->id]); return new File("cache", $cacheName); } if($cache === true || is_null($cache)) { Log::info("Get RAW-Image File from s3", ["image_id" => $image->id]); $content = Storage::disk($image->driver)->get($image->path); Storage::disk("cache")->put($cacheName, $content); $file = new File("cache", $cacheName); $this->access->add($image, $file, Access::TYPE_S3); $file->setContent($content); return $file; } return new File($image->driver, $image->path); } public function getCachePath(\App\Models\Image $image, ?int $size): string { if(is_null($size)) { $size = "orginal"; } $cacheName = $image->id."_".$size."_".$image->filename; return $cacheName; } }