referencedAssets() as $value => $collection) { if (CmsMedia::query()->where('filename', $value)->exists()) { continue; } $source = public_path('img/assets/'.$value); $extension = strtolower(pathinfo($source, PATHINFO_EXTENSION)); $path = $originals.'/'.Str::random(40).'.'.$extension; Storage::disk($disk)->put($path, file_get_contents($source)); $isSvg = $extension === 'svg'; $dimensions = $isSvg ? false : @getimagesize($source); $media = CmsMedia::create([ 'filename' => $value, 'disk' => $disk, 'path' => $path, 'type' => 'image', 'mime_type' => $isSvg ? 'image/svg+xml' : (mime_content_type($source) ?: 'image/'.$extension), 'file_size' => filesize($source), 'original_width' => $dimensions ? $dimensions[0] : null, 'original_height' => $dimensions ? $dimensions[1] : null, 'collection' => $collection, 'conversions' => [], ]); if (! $isSvg) { $service->generateThumbnail($media); } $imported++; } $this->command?->info($imported === 0 ? 'Mediathek: alle verwendeten Bilder sind bereits übernommen.' : "Mediathek: {$imported} Bilder aus public/img/assets übernommen."); } /** * Bildpfade, die Marken, Magazin oder CMS verwenden und die unter public/img/assets/ liegen, * mit der Sammlung, in die sie kommen (die erste Quelle zählt: Marken, Magazin, Website). * * @return array */ public function referencedAssets(): array { $values = []; $collect = function (mixed $value, string $collection) use (&$collect, &$values): void { if (is_array($value)) { array_walk($value, fn ($item) => $collect($item, $collection)); return; } if (! is_string($value) || ! preg_match('/\.(jpe?g|png|webp|svg|gif)$/i', $value)) { return; } $value = ltrim(trim($value), '/'); if (str_contains($value, '://') || str_starts_with($value, 'storage/') || str_starts_with($value, 'immobile/')) { return; } if (is_file(public_path('img/assets/'.$value))) { $values[$value] ??= $collection; } }; foreach (CmsBrand::query()->get() as $brand) { $collect([$brand->logo, $brand->image, $brand->gallery, $brand->sections], 'Marken'); } foreach (CmsArticle::query()->get() as $article) { $collect($article->toArray(), 'Magazin'); } foreach (CmsContent::query()->get() as $row) { $collect($row->getTranslations('value'), 'Website'); } $collect(trans('b2in.themes.'.config('app.theme', 'b2in'), [], 'de'), 'Website'); ksort($values); return $values; } }