app->environment('local')) { $this->app->register(\Laravel\Telescope\TelescopeServiceProvider::class); $this->app->register(TelescopeServiceProvider::class); } // Eloquent Model::preventLazyLoading(! $this->app->isProduction()); Model::preventSilentlyDiscardingAttributes(! $this->app->isProduction()); Model::preventAccessingMissingAttributes(! $this->app->isProduction()); Relation::enforceMorphMap([ 'client' => Client::class, 'failed-job' => FailedJob::class, 'membership' => Member::class, 'organization' => Organization::class, 'organization-invitation' => OrganizationInvitation::class, 'project' => Project::class, 'project-member' => ProjectMember::class, 'tag' => Tag::class, 'task' => Task::class, 'time-entry' => TimeEntry::class, 'user' => User::class, ]); Model::unguard(); // Filament Section::configureUsing(function (Section $section): void { $section->columns(1); }, null, true); Table::configureUsing(function (Table $table): void { $table->paginated([10, 25, 50, 100]); }); // Scramble Scramble::extendOpenApi(function (OpenApi $openApi): void { $openApi->secure( SecurityScheme::oauth2() ->flow('authorizationCode', function (OAuthFlow $flow): void { $flow ->authorizationUrl('https://solidtime.test/oauth/authorize'); }) ); }); $this->app->scoped(PermissionStore::class, function (Application $app): PermissionStore { return new PermissionStore; }); // Extensions $this->app->bind(IpLookupServiceContract::class, NoIpLookupService::class); $this->app->bind(BillingContract::class); // Storage // The local driver ignores the ResponseContentDisposition option of temporaryUrl, // so mirror it through the signed query parameters of the storage route. $privateDisk = config('filesystems.private'); if (config('filesystems.disks.'.$privateDisk.'.driver') === 'local') { $disk = Storage::disk($privateDisk); $disk->serveUsing(function (Request $request, string $path, array $headers) use ($disk): StreamedResponse { return $disk->response($path, null, $headers, $request->query('disposition', 'inline')); }); $disk->buildTemporaryUrlsUsing(function (string $path, DateTimeInterface $expiration, array $options) use ($privateDisk): string { $parameters = array_filter([ 'path' => $path, 'disposition' => isset($options['ResponseContentDisposition']) ? Str::before($options['ResponseContentDisposition'], ';') : null, ]); return url(URL::temporarySignedRoute('storage.'.$privateDisk, $expiration, $parameters, absolute: false)); }); } // Routing Route::model('member', Member::class); Route::model('invitation', OrganizationInvitation::class); Route::model('apiToken', Token::class); } }