diff --git a/app/Console/Commands/MigrateMediaToPrivateDisk.php b/app/Console/Commands/MigrateMediaToPrivateDisk.php index 1db6bbb9..9286abcc 100644 --- a/app/Console/Commands/MigrateMediaToPrivateDisk.php +++ b/app/Console/Commands/MigrateMediaToPrivateDisk.php @@ -27,8 +27,18 @@ class MigrateMediaToPrivateDisk extends Command $prefix = env('DYNAMIC_DISK_PREFIX', 'temp_'); $targetDiskName = $prefix.$targetDisk->driver; - $targetDisk->setConfig(); - $targetRoot = config('filesystems.disks.'.$targetDiskName.'.root'); + // Register disk config without mutating filesystems.default + $credentials = collect(json_decode($targetDisk->credentials)); + $baseConfig = config('filesystems.disks.'.$targetDisk->driver, []); + + foreach ($baseConfig as $key => $value) { + if ($credentials->has($key)) { + $baseConfig[$key] = $credentials[$key]; + } + } + + config(['filesystems.disks.'.$targetDiskName => $baseConfig]); + $targetRoot = $baseConfig['root'] ?? null; if (! $targetRoot) { $this->error('Could not resolve target disk root path.'); diff --git a/app/Providers/AppConfigProvider.php b/app/Providers/AppConfigProvider.php index 481f8b4a..3bfaf859 100644 --- a/app/Providers/AppConfigProvider.php +++ b/app/Providers/AppConfigProvider.php @@ -163,15 +163,30 @@ class AppConfigProvider extends ServiceProvider protected function configureFileSystemFromDatabase(): void { try { - // Get the default file disk from database + // Register the default file disk config without changing filesystems.default. + // Calling setConfig() mutates the global default which causes side effects + // on pages that make multiple API requests (e.g., File Disk admin page). $fileDisk = FileDisk::whereSetAsDefault(true)->first(); if ($fileDisk) { - $fileDisk->setConfig(); + $prefix = env('DYNAMIC_DISK_PREFIX', 'temp_'); + $diskName = $prefix.$fileDisk->driver; + $credentials = collect(json_decode($fileDisk->credentials)); + $baseConfig = config('filesystems.disks.'.$fileDisk->driver, []); + + foreach ($baseConfig as $key => $value) { + if ($credentials->has($key)) { + $baseConfig[$key] = $credentials[$key]; + } + } + + config(['filesystems.disks.'.$diskName => $baseConfig]); + + // Point Spatie Media Library at the same disk + config(['media-library.disk_name' => $diskName]); } } catch (\Exception $e) { // Silently fail if database is not available (during installation, migrations, etc.) - // This prevents the application from breaking during setup } } } diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 080380cb..acf9eda6 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -2,8 +2,6 @@ namespace App\Providers; -use App\Models\FileDisk; -use App\Models\Setting; use App\Policies\CompanyPolicy; use App\Policies\CustomerPolicy; use App\Policies\DashboardPolicy; @@ -59,7 +57,6 @@ class AppServiceProvider extends ServiceProvider if (InstallUtils::isDbCreated()) { $this->addMenus(); - $this->configureMediaDisk(); } Gate::policy(Role::class, RolePolicy::class); @@ -169,41 +166,4 @@ class AppServiceProvider extends ServiceProvider { Broadcast::routes(['middleware' => 'api.auth']); } - - /** - * Configure Spatie Media Library to use the FileDisk system. - * - * Resolves the media disk from the `media_disk_id` setting, - * falling back to the default FileDisk. This ensures media - * uploads go to a private disk by default. - */ - private function configureMediaDisk(): void - { - try { - $mediaDiskId = Setting::getSetting('media_disk_id'); - $disk = $mediaDiskId - ? FileDisk::find($mediaDiskId) - : FileDisk::where('set_as_default', true)->first(); - - if ($disk) { - // Register the disk config without changing the global default. - // setConfig() mutates filesystems.default which causes side effects. - $prefix = env('DYNAMIC_DISK_PREFIX', 'temp_'); - $diskName = $prefix.$disk->driver; - $credentials = collect(json_decode($disk->credentials)); - $baseConfig = config('filesystems.disks.'.$disk->driver, []); - - foreach ($baseConfig as $key => $value) { - if ($credentials->has($key)) { - $baseConfig[$key] = $credentials[$key]; - } - } - - config(['filesystems.disks.'.$diskName => $baseConfig]); - config(['media-library.disk_name' => $diskName]); - } - } catch (\Exception $e) { - // DB not yet migrated or settings table missing — use config default - } - } }