photo visibility for demo events, hardened the demo mode. fixed dark/light mode toggle and notification bell toggle. fixed photo upload page sizes & header visibility.

This commit is contained in:
Codex Agent
2025-12-18 21:14:24 +01:00
parent 7c4067b32b
commit 53ec427e6e
25 changed files with 965 additions and 102 deletions

View File

@@ -3,6 +3,7 @@
namespace App\Console\Commands;
use App\Models\Event;
use App\Models\EventMediaAsset;
use App\Models\EventPackage;
use App\Models\EventType;
use App\Models\Package;
@@ -11,6 +12,7 @@ use App\Models\TaskCollection;
use App\Models\Tenant;
use App\Models\TenantPackage;
use App\Models\User;
use App\Services\Storage\EventStorageManager;
use Carbon\Carbon;
use Illuminate\Console\Command;
use Illuminate\Support\Arr;
@@ -26,6 +28,11 @@ class SeedDemoSwitcherTenants extends Command
protected $description = 'Seeds demo tenants used by the DevTenantSwitcher (endcustomer + reseller profiles)';
public function __construct(private EventStorageManager $eventStorageManager)
{
parent::__construct();
}
public function handle(): int
{
if (! app()->environment(['local', 'development', 'demo'])) {
@@ -88,20 +95,14 @@ class SeedDemoSwitcherTenants extends Command
$photo->likes()->delete();
$photoLikesDeleted += $deletedLikes;
if ($photo->thumbnail_path) {
Storage::disk('public')->delete($photo->thumbnail_path);
}
if ($photo->file_path) {
Storage::disk('public')->delete($photo->file_path);
}
$this->deleteDemoPhotoAssets($photo, $event);
$photo->delete();
$photosDeleted++;
}
Storage::disk('public')->deleteDirectory("events/{$event->id}/gallery");
Storage::disk('public')->deleteDirectory("events/{$event->id}/gallery/thumbs");
$cleanupDisk = $this->eventStorageManager->getHotDiskForEvent($event);
Storage::disk($cleanupDisk)->deleteDirectory("events/{$event->id}/gallery");
Storage::disk($cleanupDisk)->deleteDirectory("events/{$event->id}/gallery/thumbs");
$event->taskCollections()->detach();
$event->tasks()->detach();
@@ -489,7 +490,7 @@ class SeedDemoSwitcherTenants extends Command
continue;
}
$this->storePhotos($event, $photos);
$this->storePhotos($event, $photos, $targetPerEvent);
}
}
@@ -528,10 +529,11 @@ class SeedDemoSwitcherTenants extends Command
return Arr::get($data, 'photos', []);
}
private function storePhotos(Event $event, array $photos): void
private function storePhotos(Event $event, array $photos, int $targetPerEvent): void
{
$tenantId = $event->tenant_id;
$storage = Storage::disk('public');
$disk = $this->eventStorageManager->getHotDiskForEvent($event);
$storage = Storage::disk($disk);
$storage->makeDirectory("events/{$event->id}/gallery");
$storage->makeDirectory("events/{$event->id}/gallery/thumbs");
@@ -540,11 +542,11 @@ class SeedDemoSwitcherTenants extends Command
->get();
foreach ($demoPhotos as $photo) {
$storage->delete([$photo->file_path, $photo->thumbnail_path]);
$this->deleteDemoPhotoAssets($photo, $event);
$photo->delete();
}
$limit = min(count($photos), (int) $this->option('photos-per-event'));
$limit = min(count($photos), $targetPerEvent);
for ($i = 0; $i < $limit; $i++) {
$photo = $photos[$i];
$src = $photo['src'] ?? [];
@@ -561,16 +563,20 @@ class SeedDemoSwitcherTenants extends Command
$filePath = "events/{$event->id}/gallery/{$filename}";
$thumbPath = "events/{$event->id}/gallery/thumbs/{$thumbFilename}";
$originalBody = null;
$thumbBody = null;
try {
$imageResponse = Http::get($originalUrl);
if ($imageResponse->ok()) {
$storage->put($filePath, $imageResponse->body());
$originalBody = $imageResponse->body();
$storage->put($filePath, $originalBody);
}
if ($thumbUrl) {
$thumbResponse = Http::get($thumbUrl);
if ($thumbResponse->ok()) {
$storage->put($thumbPath, $thumbResponse->body());
$thumbBody = $thumbResponse->body();
$storage->put($thumbPath, $thumbBody);
}
}
} catch (\Throwable $exception) {
@@ -581,7 +587,7 @@ class SeedDemoSwitcherTenants extends Command
$timestamp = Carbon::parse($event->date ?? Carbon::now())->addHours($i);
Photo::updateOrCreate(
$photoRecord = Photo::updateOrCreate(
[
'tenant_id' => $tenantId,
'event_id' => $event->id,
@@ -592,11 +598,36 @@ class SeedDemoSwitcherTenants extends Command
'guest_name' => 'Demo Guest '.($i + 1),
'likes_count' => rand(1, 25),
'is_featured' => $i === 0,
'status' => 'approved',
'mime_type' => 'image/jpeg',
'size' => $originalBody ? strlen($originalBody) : null,
'metadata' => ['demo' => true, 'source' => 'pexels'],
'created_at' => $timestamp,
'updated_at' => $timestamp,
]
);
$originalAsset = $this->eventStorageManager->recordAsset($event, $disk, $filePath, [
'variant' => 'original',
'mime_type' => 'image/jpeg',
'size_bytes' => $originalBody ? strlen($originalBody) : null,
'checksum' => $originalBody ? hash('sha256', $originalBody) : null,
'photo_id' => $photoRecord->id,
]);
if ($thumbBody) {
$this->eventStorageManager->recordAsset($event, $disk, $thumbPath, [
'variant' => 'thumbnail',
'mime_type' => 'image/jpeg',
'size_bytes' => strlen($thumbBody),
'photo_id' => $photoRecord->id,
'meta' => [
'source_variant_id' => $originalAsset->id,
],
]);
}
$photoRecord->update(['media_asset_id' => $originalAsset->id]);
}
EventPackage::where('event_id', $event->id)->update([
@@ -606,4 +637,31 @@ class SeedDemoSwitcherTenants extends Command
$this->info("Seeded {$limit} photos for {$event->slug}");
}
private function deleteDemoPhotoAssets(Photo $photo, Event $event): void
{
$fallbackDisk = $this->eventStorageManager->getHotDiskForEvent($event);
$assets = EventMediaAsset::where('photo_id', $photo->id)->get();
foreach ($assets as $asset) {
$assetDisk = $asset->disk ?: $fallbackDisk;
if (! config("filesystems.disks.{$assetDisk}")) {
$assetDisk = $fallbackDisk;
}
if ($asset->path) {
Storage::disk($assetDisk)->delete($asset->path);
}
$asset->delete();
}
if ($photo->file_path) {
Storage::disk($fallbackDisk)->delete($photo->file_path);
}
if ($photo->thumbnail_path) {
Storage::disk($fallbackDisk)->delete($photo->thumbnail_path);
}
}
}