From 56eec653555f0f8b9ca5dbe46784765e636b9f1e Mon Sep 17 00:00:00 2001 From: Yevhen Odynets Date: Sun, 28 Jul 2024 17:45:09 +0300 Subject: [PATCH] composed project, added packages, models, controllers, seeders, mirgations etc. --- app/ConsoleStyleInterfaceType.php | 27 + app/Facades/Image.php | 34 + .../Auth/AuthenticatedSessionController.php | 6 +- .../Auth/ConfirmablePasswordController.php | 6 +- .../Auth/RegisteredUserController.php | 2 +- .../Auth/VerifyEmailController.php | 4 +- app/Http/Controllers/EventController.php | 68 + app/Http/Controllers/FallbackController.php | 22 + app/Http/Controllers/VenueController.php | 67 + app/Http/Requests/Auth/LoginRequest.php | 2 +- app/Http/Requests/ProfileUpdateRequest.php | 9 +- app/LoggingSeverityLevelsType.php | 56 + app/Models/Event.php | 37 + app/Models/User.php | 7 +- app/Models/Venue.php | 40 + app/Providers/AppServiceProvider.php | 2 +- app/Providers/ImageServiceProvider.php | 26 + app/Providers/JournalServiceProvider.php | 25 + .../Contracts/FakerImageProviderType.php | 17 + .../Contracts/ProviderFactoryInterface.php | 17 + .../Image/Contracts/ProviderInterface.php | 57 + .../Faker/Image/FakerImageProvider.php | 32 + app/Services/Faker/Image/ImageStorage.php | 70 + app/Services/Faker/Image/Provider.php | 69 + .../Faker/Image/Providers/LoremFlickr.php | 25 + .../Image/Providers/LoremFlickrFactory.php | 22 + .../Image/Contracts/ImageInterface.php | 17 + app/Services/Image/Image.php | 77 + app/Services/Image/ImageCropperTrait.php | 154 ++ app/helpers.php | 13 + app/helpers/logging.php | 115 ++ bootstrap/providers.php | 1 + composer.json | 143 +- composer.lock | 1256 ++++++++++++++++- config/app.php | 2 + config/cache.php | 2 +- config/common.php | 24 + config/database.php | 2 +- config/filesystems.php | 2 +- config/image.php | 39 + config/logging.php | 8 +- config/session.php | 2 +- database/factories/EventFactory.php | 56 + database/factories/UserFactory.php | 2 +- database/factories/VenueFactory.php | 27 + .../0001_01_01_000000_create_users_table.php | 6 +- .../0001_01_01_000001_create_cache_table.php | 4 +- .../0001_01_01_000002_create_jobs_table.php | 4 +- .../2024_07_26_073099_create_venues_table.php | 27 + .../2024_07_26_073100_create_events_table.php | 30 + .../2024_07_28_151158_drop_sessions_table.php | 31 + database/seeders/DatabaseSeeder.php | 19 +- database/seeders/EventSeeder.php | 20 + database/seeders/UserSeeder.php | 24 + database/seeders/VenueSeeder.php | 23 + package-lock.json | 44 +- package.json | 18 +- public/favicon.ico | Bin 0 -> 16958 bytes resources/images/404.svg | 677 +++++++++ resources/images/logo.png | Bin 0 -> 82715 bytes resources/images/tiny_logo.png | Bin 0 -> 10214 bytes resources/js/app.js | 6 +- resources/js/main.js | 10 + resources/scss/main.scss | 16 + resources/views/auth/login.blade.php | 24 +- .../components/application-logo.blade.php | 4 +- resources/views/errors/404.blade.php | 19 + resources/views/model/event.blade.php | 13 + resources/views/welcome.blade.php | 189 +-- routes/web.php | 39 +- storage/debugbar/.gitignore | 2 + tailwind.config.js | 2 +- vite.config.js | 2 + 73 files changed, 3576 insertions(+), 368 deletions(-) create mode 100644 app/ConsoleStyleInterfaceType.php create mode 100644 app/Facades/Image.php create mode 100644 app/Http/Controllers/EventController.php create mode 100644 app/Http/Controllers/FallbackController.php create mode 100644 app/Http/Controllers/VenueController.php create mode 100644 app/LoggingSeverityLevelsType.php create mode 100644 app/Models/Event.php create mode 100644 app/Models/Venue.php create mode 100644 app/Providers/ImageServiceProvider.php create mode 100644 app/Providers/JournalServiceProvider.php create mode 100644 app/Services/Faker/Image/Contracts/FakerImageProviderType.php create mode 100644 app/Services/Faker/Image/Contracts/ProviderFactoryInterface.php create mode 100644 app/Services/Faker/Image/Contracts/ProviderInterface.php create mode 100644 app/Services/Faker/Image/FakerImageProvider.php create mode 100644 app/Services/Faker/Image/ImageStorage.php create mode 100644 app/Services/Faker/Image/Provider.php create mode 100644 app/Services/Faker/Image/Providers/LoremFlickr.php create mode 100644 app/Services/Faker/Image/Providers/LoremFlickrFactory.php create mode 100644 app/Services/Image/Contracts/ImageInterface.php create mode 100644 app/Services/Image/Image.php create mode 100644 app/Services/Image/ImageCropperTrait.php create mode 100644 app/helpers.php create mode 100644 app/helpers/logging.php create mode 100644 config/common.php create mode 100644 config/image.php create mode 100644 database/factories/EventFactory.php create mode 100644 database/factories/VenueFactory.php create mode 100644 database/migrations/2024_07_26_073099_create_venues_table.php create mode 100644 database/migrations/2024_07_26_073100_create_events_table.php create mode 100644 database/migrations/2024_07_28_151158_drop_sessions_table.php create mode 100644 database/seeders/EventSeeder.php create mode 100644 database/seeders/UserSeeder.php create mode 100644 database/seeders/VenueSeeder.php create mode 100644 resources/images/404.svg create mode 100644 resources/images/logo.png create mode 100644 resources/images/tiny_logo.png create mode 100644 resources/js/main.js create mode 100644 resources/scss/main.scss create mode 100644 resources/views/errors/404.blade.php create mode 100644 resources/views/model/event.blade.php create mode 100644 storage/debugbar/.gitignore diff --git a/app/ConsoleStyleInterfaceType.php b/app/ConsoleStyleInterfaceType.php new file mode 100644 index 0000000..e43817c --- /dev/null +++ b/app/ConsoleStyleInterfaceType.php @@ -0,0 +1,27 @@ +session()->regenerate(); - return redirect()->intended(route('dashboard', absolute: false)); + //return redirect()->intended(route('dashboard', absolute: false)); + return redirect(route('dashboard', absolute: false)); } /** diff --git a/app/Http/Controllers/Auth/ConfirmablePasswordController.php b/app/Http/Controllers/Auth/ConfirmablePasswordController.php index 712394a..75399ab 100644 --- a/app/Http/Controllers/Auth/ConfirmablePasswordController.php +++ b/app/Http/Controllers/Auth/ConfirmablePasswordController.php @@ -24,10 +24,12 @@ class ConfirmablePasswordController extends Controller */ public function store(Request $request): RedirectResponse { - if (! Auth::guard('web')->validate([ + if ( + ! Auth::guard('web')->validate([ 'email' => $request->user()->email, 'password' => $request->password, - ])) { + ]) + ) { throw ValidationException::withMessages([ 'password' => __('auth.password'), ]); diff --git a/app/Http/Controllers/Auth/RegisteredUserController.php b/app/Http/Controllers/Auth/RegisteredUserController.php index 0739e2e..88dbc08 100644 --- a/app/Http/Controllers/Auth/RegisteredUserController.php +++ b/app/Http/Controllers/Auth/RegisteredUserController.php @@ -31,7 +31,7 @@ class RegisteredUserController extends Controller { $request->validate([ 'name' => ['required', 'string', 'max:255'], - 'email' => ['required', 'string', 'lowercase', 'email', 'max:255', 'unique:'.User::class], + 'email' => ['required', 'string', 'lowercase', 'email', 'max:255', 'unique:' . User::class], 'password' => ['required', 'confirmed', Rules\Password::defaults()], ]); diff --git a/app/Http/Controllers/Auth/VerifyEmailController.php b/app/Http/Controllers/Auth/VerifyEmailController.php index 784765e..aed2efd 100644 --- a/app/Http/Controllers/Auth/VerifyEmailController.php +++ b/app/Http/Controllers/Auth/VerifyEmailController.php @@ -15,13 +15,13 @@ class VerifyEmailController extends Controller public function __invoke(EmailVerificationRequest $request): RedirectResponse { if ($request->user()->hasVerifiedEmail()) { - return redirect()->intended(route('dashboard', absolute: false).'?verified=1'); + return redirect()->intended(route('dashboard', absolute: false) . '?verified=1'); } if ($request->user()->markEmailAsVerified()) { event(new Verified($request->user())); } - return redirect()->intended(route('dashboard', absolute: false).'?verified=1'); + return redirect()->intended(route('dashboard', absolute: false) . '?verified=1'); } } diff --git a/app/Http/Controllers/EventController.php b/app/Http/Controllers/EventController.php new file mode 100644 index 0000000..141e6c5 --- /dev/null +++ b/app/Http/Controllers/EventController.php @@ -0,0 +1,68 @@ + Event::with('venue')->get()]); + } + + /** + * Show the form for creating a new resource. + */ + public function create() + { + // + } + + /** + * Store a newly created resource in storage. + */ + public function store(Request $request) + { + // + } + + /** + * Display the specified resource. + */ + public function show(string $id) + { + // + } + + /** + * Show the form for editing the specified resource. + */ + public function edit(string $id) + { + // + } + + /** + * Update the specified resource in storage. + */ + public function update(Request $request, string $id) + { + // + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(string $id) + { + // + } +} diff --git a/app/Http/Controllers/FallbackController.php b/app/Http/Controllers/FallbackController.php new file mode 100644 index 0000000..d628654 --- /dev/null +++ b/app/Http/Controllers/FallbackController.php @@ -0,0 +1,22 @@ +view('errors.404', [], 404); + } +} diff --git a/app/Http/Controllers/VenueController.php b/app/Http/Controllers/VenueController.php new file mode 100644 index 0000000..4516165 --- /dev/null +++ b/app/Http/Controllers/VenueController.php @@ -0,0 +1,67 @@ +get(); + } + + /** + * Show the form for creating a new resource. + */ + public function create() + { + // + } + + /** + * Store a newly created resource in storage. + */ + public function store(Request $request) + { + // + } + + /** + * Display the specified resource. + */ + public function show(string $id) + { + // + } + + /** + * Show the form for editing the specified resource. + */ + public function edit(string $id) + { + // + } + + /** + * Update the specified resource in storage. + */ + public function update(Request $request, string $id) + { + // + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(string $id) + { + // + } +} diff --git a/app/Http/Requests/Auth/LoginRequest.php b/app/Http/Requests/Auth/LoginRequest.php index 2b92f65..c1b3a3e 100644 --- a/app/Http/Requests/Auth/LoginRequest.php +++ b/app/Http/Requests/Auth/LoginRequest.php @@ -80,6 +80,6 @@ class LoginRequest extends FormRequest */ public function throttleKey(): string { - return Str::transliterate(Str::lower($this->string('email')).'|'.$this->ip()); + return Str::transliterate(Str::lower($this->string('email')) . '|' . $this->ip()); } } diff --git a/app/Http/Requests/ProfileUpdateRequest.php b/app/Http/Requests/ProfileUpdateRequest.php index 93b0022..b2ef6bb 100644 --- a/app/Http/Requests/ProfileUpdateRequest.php +++ b/app/Http/Requests/ProfileUpdateRequest.php @@ -17,7 +17,14 @@ class ProfileUpdateRequest extends FormRequest { return [ 'name' => ['required', 'string', 'max:255'], - 'email' => ['required', 'string', 'lowercase', 'email', 'max:255', Rule::unique(User::class)->ignore($this->user()->id)], + 'email' => [ + 'required', + 'string', + 'lowercase', + 'email', + 'max:255', + Rule::unique(User::class)->ignore($this->user()->id), + ], ]; } } diff --git a/app/LoggingSeverityLevelsType.php b/app/LoggingSeverityLevelsType.php new file mode 100644 index 0000000..57a624d --- /dev/null +++ b/app/LoggingSeverityLevelsType.php @@ -0,0 +1,56 @@ +belongsTo(Venue::class); + } + + + /** + * @param Builder $query + * @param string $column + * @param string $direction + * + * @return void + */ + public function scopeSortBy(Builder $query, string $column = 'id', string $direction = 'asc'): void + { + $query->orderBy($column, validateOrderDirection($direction)); + } +} diff --git a/app/Models/User.php b/app/Models/User.php index def621f..0525dd7 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -2,14 +2,15 @@ namespace App\Models; -// use Illuminate\Contracts\Auth\MustVerifyEmail; +use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; -class User extends Authenticatable +class User extends Authenticatable implements MustVerifyEmail { - use HasFactory, Notifiable; + use HasFactory; + use Notifiable; /** * The attributes that are mass assignable. diff --git a/app/Models/Venue.php b/app/Models/Venue.php new file mode 100644 index 0000000..52a73ad --- /dev/null +++ b/app/Models/Venue.php @@ -0,0 +1,40 @@ +hasMany(Event::class); + } + + /** + * @param Builder $query + * @param string $column + * @param string $direction + * + * @return void + */ + public function scopeSortBy(Builder $query, string $column = 'id', string $direction = 'asc'): void + { + $query->orderBy($column, validateOrderDirection($direction)); + } +} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 452e6b6..4815707 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -2,6 +2,7 @@ namespace App\Providers; +use App\Services\Image\Image; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider @@ -11,7 +12,6 @@ class AppServiceProvider extends ServiceProvider */ public function register(): void { - // } /** diff --git a/app/Providers/ImageServiceProvider.php b/app/Providers/ImageServiceProvider.php new file mode 100644 index 0000000..57ff5f7 --- /dev/null +++ b/app/Providers/ImageServiceProvider.php @@ -0,0 +1,26 @@ +app->singleton('image', Image::class); + } + + /** + * Bootstrap services. + */ + public function boot(): void + { + class_alias(Image::class, 'Image'); + } +} diff --git a/app/Providers/JournalServiceProvider.php b/app/Providers/JournalServiceProvider.php new file mode 100644 index 0000000..39b6e82 --- /dev/null +++ b/app/Providers/JournalServiceProvider.php @@ -0,0 +1,25 @@ +app->singleton('journal', Journal::class); + } + + /** + * Bootstrap services. + */ + public function boot(): void + { + class_alias(Journal::class, 'Journal'); + } +} diff --git a/app/Services/Faker/Image/Contracts/FakerImageProviderType.php b/app/Services/Faker/Image/Contracts/FakerImageProviderType.php new file mode 100644 index 0000000..390e34a --- /dev/null +++ b/app/Services/Faker/Image/Contracts/FakerImageProviderType.php @@ -0,0 +1,17 @@ +name); + } + } + } +} diff --git a/app/Services/Faker/Image/ImageStorage.php b/app/Services/Faker/Image/ImageStorage.php new file mode 100644 index 0000000..2e2e0e1 --- /dev/null +++ b/app/Services/Faker/Image/ImageStorage.php @@ -0,0 +1,70 @@ +destFolder = $destFolder; + $this->width = $width; + $this->height = $height; + $this->keywords = $keywords; + } + + /** + * @return string + */ + public function getFolder(): string + { + return $this->destFolder; + } + + /** + * @return int + */ + public function getWidth(): int + { + return $this->width; + } + + /** + * @return int + */ + public function getHeight(): int + { + return $this->height; + } + + /** + * @param string $prefix + * @param string $suffix + * + * @return string|null + */ + public function getKeyword(string $prefix = '', string $suffix = ''): ?string + { + if (count($this->keywords) === 0) { + return null; + } + + return $prefix . Arr::random($this->keywords) . $suffix; + } +} diff --git a/app/Services/Faker/Image/Provider.php b/app/Services/Faker/Image/Provider.php new file mode 100644 index 0000000..afce16a --- /dev/null +++ b/app/Services/Faker/Image/Provider.php @@ -0,0 +1,69 @@ +getFolder()) . '/' . Str::uuid()->toString() . '.jpg'; + + $response = Http::get($url); + if ($response->successful() === false) { + appNotice("Couldn't download image from $url"); + return null; + } + + $result = Storage::disk("local")->put($storagePath, $response->body()); + $verify = $this->verify($storagePath, config('image.faker.cropper')); + + return $result && $verify !== "NULL" ? $verify : "NULL"; + } + + private function verify(string $storagePath, ?array $cropper = []): string + { + $fullPath = Image::localPath($storagePath); + if (is_null($fullPath)) { + appNotice("Couldn't locate image from $storagePath"); + return "NULL"; + } + + $meta = Image::meta($fullPath); + if (empty($meta)) { + appNotice("Couldn't retrieve image meta from $fullPath"); + return "NULL"; + } + + try { + return Image::cropAlign($fullPath, $storagePath, ...$cropper); + } catch (Error $err) { + //Image::log($err, LoggingSeverityLevelsType::emergency); + return "NULL"; + } + } +} diff --git a/app/Services/Faker/Image/Providers/LoremFlickr.php b/app/Services/Faker/Image/Providers/LoremFlickr.php new file mode 100644 index 0000000..9a10c39 --- /dev/null +++ b/app/Services/Faker/Image/Providers/LoremFlickr.php @@ -0,0 +1,25 @@ +url = config('image.faker.provider.loremflickr.host') . + $storage->getWidth() . "/" . $storage->getHeight() . $storage->getKeyword('/'); + + return $this->download($storage, $this->url); + } +} diff --git a/app/Services/Faker/Image/Providers/LoremFlickrFactory.php b/app/Services/Faker/Image/Providers/LoremFlickrFactory.php new file mode 100644 index 0000000..c793ad2 --- /dev/null +++ b/app/Services/Faker/Image/Providers/LoremFlickrFactory.php @@ -0,0 +1,22 @@ +config = config('image'); + } + + /** + * @param string $imagePath + * + * @return string|null + */ + public function localPath(string $imagePath): ?string + { + $fullPath = realpath(Storage::path($imagePath)); + + if (! $fullPath || ! file_exists($fullPath)) { + return null; + } + + return $fullPath; + } + + /** + * @param string $fullPath + * @param string|null $property + * + * @return array|string + */ + public function meta(string $fullPath, ?string $property = null): array|string + { + try { + $meta = getimagesize($fullPath); + + if (is_null($property) === false && array_key_exists($property, $this->config['meta'])) { + return $meta[$this->config['meta'][$property]]; + } + + return getimagesize($fullPath); + } catch (Exception $e) { + appWarning($e); + } + + return []; + } +} diff --git a/app/Services/Image/ImageCropperTrait.php b/app/Services/Image/ImageCropperTrait.php new file mode 100644 index 0000000..da38f46 --- /dev/null +++ b/app/Services/Image/ImageCropperTrait.php @@ -0,0 +1,154 @@ +imageResource($srcPath); + if ($resource === false) { + appNotice("could not get image resource: $srcPath"); + + return $dbPath; + } + + [$image, $saveMethod, $quality] = $resource; + + $width = imagesx($image); + $height = imagesy($image); + $cropWidth ??= $width; + $cropHeight ??= $height; + + if (($width > $cropWidth || $height > $cropHeight) === false) { + $destPath = $this->destPath($srcPath, $dbPath, $width, $height); + appInfo(self::$counter++ . ". skip cropping ($width x $height): " . basename($destPath[0]) . " saved"); + + return File::move($srcPath, $destPath[0]) ? $destPath[1] : $dbPath; + } + + $horizontalAlignPixels = $this->calculatePixelsForAlign($width, $cropWidth, $horizontalAlign); + $verticalAlignPixels = $this->calculatePixelsForAlign($height, $cropHeight, $verticalAlign); + $destPath = $this->destPath($srcPath, $dbPath, $horizontalAlignPixels[1], $verticalAlignPixels[1]); + + $croppedImage = imagecrop($image, [ + 'x' => $horizontalAlignPixels[0], + 'y' => $verticalAlignPixels[0], + 'width' => $horizontalAlignPixels[1], + 'height' => $verticalAlignPixels[1], + ]); + + if ($croppedImage !== false) { + $saveMethod($croppedImage, $destPath[0], $quality); + imagedestroy($croppedImage); + + appSuccess( + self::$counter++ . ". cropped successfully from $width x $height: " . basename($destPath[0]) . " saved" + ); + } + + imagedestroy($image); + + if (File::delete($srcPath) === false) { + $e = new RuntimeException("could not delete image: $srcPath"); + + appWarning($e); + + return $dbPath; + } + + return $destPath[1]; + } + + /** + * @param string $srcPath + * + * @return false|array + */ + private function imageResource(string $srcPath): false|array + { + return match (mime_content_type($srcPath)) { + 'image/jpeg' => [imagecreatefromjpeg($srcPath), 'imagejpeg', 84], + 'image/png' => [imagecreatefrompng($srcPath), 'imagepng', 7], + 'image/gif' => [imagecreatefromgif($srcPath), 'imagegif', null], + default => false, + }; + } + + /** + * @param string $srcPath + * @param string $dbPath + * @param int $width + * @param int $height + * + * @return string[] + */ + private function destPath(string $srcPath, string $dbPath, int $width, int $height): array + { + $pi = pathinfo($srcPath); + + $fs_path = sprintf( + "%s\%s-%dx%d.%s", + $pi['dirname'], + $pi['filename'], + $width, + $height, + $pi['extension'] + ); + + $db_path = sprintf( + "%s/%s-%dx%d.%s", + dirname($dbPath), + $pi['filename'], + $width, + $height, + $pi['extension'] + ); + + return [$fs_path, $db_path]; + } + + /** + * @param int $imageSize + * @param int $cropSize + * @param string $align + * + * @return array|int[] + */ + private function calculatePixelsForAlign(int $imageSize, int $cropSize, string $align): array + { + return match ($align) { + 'left', 'top' => [0, min($cropSize, $imageSize)], + 'right', 'bottom' => [max(0, $imageSize - $cropSize), min($cropSize, $imageSize)], + 'center', 'middle' => [ + max(0, floor(($imageSize / 2) - ($cropSize / 2))), + min($cropSize, $imageSize), + ], + default => [0, $imageSize], + }; + } +} diff --git a/app/helpers.php b/app/helpers.php new file mode 100644 index 0000000..773b68b --- /dev/null +++ b/app/helpers.php @@ -0,0 +1,13 @@ +getTrace()[$traceLine]; + $context = [$code ?? $e->getCode(), $trace['file'], $trace['line'], $e->getTrace()[++$traceLine]['function']]; + } else { + $context = [$code ?? $e->getCode(), $e->getFile(), $e->getLine(), $e->getTrace()[0]['function']]; + } + + Log::channel('app')->{$severity->name}($e->getMessage(), $context); +} + +/** + * @param Exception|string $e + * @param Style $cmd + * + * @return void + * @throws ReflectionException + */ +function appConsole(Exception|string $e, Style $cmd): void +{ + if (! is_string($e)) { + $e = $e->getMessage(); + } + + // $reflection = new ReflectionClass($e); + // if (! $reflection->isSubclassOf(Exception::class)) { + // $e = $e->getMessage(); + // } + + if (App::runningInConsole()) { + $io = new SymfonyStyle(new ArgvInput(), new ConsoleOutput()); + $io->{$cmd->name}($e); + } +} + +/** + * @param Exception|string $e + * + * @return void + * @throws ReflectionException + */ +function appWarning(Exception|string $e): void +{ + appLog($e, LogType::warning); + appConsole($e, Style::warning); +} + +/** + * @param mixed $e + * + * @return void + * @throws ReflectionException + */ +function appSuccess(Exception|string $e): void +{ + appLog($e, LogType::info); + appConsole($e, Style::success); +} + +/** + * @param mixed $e + * + * @return void + * @throws ReflectionException + */ +function appInfo(Exception|string $e): void +{ + appLog($e, LogType::info); + appConsole($e, Style::note); +} + +/** + * @param mixed $e + * + * @return void + * @throws ReflectionException + */ +function appNotice(Exception|string $e): void +{ + appLog($e, LogType::notice); + appConsole($e, Style::note); +} diff --git a/bootstrap/providers.php b/bootstrap/providers.php index 38b258d..98eb02a 100644 --- a/bootstrap/providers.php +++ b/bootstrap/providers.php @@ -2,4 +2,5 @@ return [ App\Providers\AppServiceProvider::class, + App\Providers\ImageServiceProvider::class, ]; diff --git a/composer.json b/composer.json index 591369b..4710ce0 100644 --- a/composer.json +++ b/composer.json @@ -1,66 +1,83 @@ { - "name": "laravel/laravel", - "type": "project", - "description": "The skeleton application for the Laravel framework.", - "keywords": ["laravel", "framework"], - "license": "MIT", - "require": { - "php": "^8.2", - "laravel/framework": "^11.9", - "laravel/tinker": "^2.9" + "name": "laravel/laravel", + "type": "project", + "description": "The skeleton application for the Laravel framework.", + "keywords": [ + "laravel", + "framework" + ], + "license": "MIT", + "require": { + "php": "^8.3", + "ext-fileinfo": "*", + "ext-gd": "*", + "ext-pdo": "*", + "laravel/framework": "^11.9", + "laravel/tinker": "^2.9", + "predis/predis": "2.0" + }, + "require-dev": { + "barryvdh/laravel-debugbar": "^3.13", + "fakerphp/faker": "^1.23", + "laravel/breeze": "^2.1", + "laravel/pint": "^1.13", + "laravel/sail": "^1.26", + "mockery/mockery": "^1.6", + "nunomaduro/collision": "^8.0", + "phpunit/phpunit": "^11.0.1", + "roave/security-advisories": "dev-latest", + "squizlabs/php_codesniffer": "^3.10" + }, + "autoload": { + "psr-4": { + "App\\": "app/", + "Database\\Factories\\": "database/factories/", + "Database\\Seeders\\": "database/seeders/" }, - "require-dev": { - "fakerphp/faker": "^1.23", - "laravel/breeze": "^2.1", - "laravel/pint": "^1.13", - "laravel/sail": "^1.26", - "mockery/mockery": "^1.6", - "nunomaduro/collision": "^8.0", - "phpunit/phpunit": "^11.0.1" - }, - "autoload": { - "psr-4": { - "App\\": "app/", - "Database\\Factories\\": "database/factories/", - "Database\\Seeders\\": "database/seeders/" - } - }, - "autoload-dev": { - "psr-4": { - "Tests\\": "tests/" - } - }, - "scripts": { - "post-autoload-dump": [ - "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", - "@php artisan package:discover --ansi" - ], - "post-update-cmd": [ - "@php artisan vendor:publish --tag=laravel-assets --ansi --force" - ], - "post-root-package-install": [ - "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" - ], - "post-create-project-cmd": [ - "@php artisan key:generate --ansi", - "@php -r \"file_exists('database/database.sqlite') || touch('database/database.sqlite');\"", - "@php artisan migrate --graceful --ansi" - ] - }, - "extra": { - "laravel": { - "dont-discover": [] - } - }, - "config": { - "optimize-autoloader": true, - "preferred-install": "dist", - "sort-packages": true, - "allow-plugins": { - "pestphp/pest-plugin": true, - "php-http/discovery": true - } - }, - "minimum-stability": "stable", - "prefer-stable": true + "files": [ + "app/helpers.php" + ] + }, + "autoload-dev": { + "psr-4": { + "Tests\\": "tests/" + } + }, + "scripts": { + "post-autoload-dump": [ + "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", + "@php artisan package:discover --ansi" + ], + "post-update-cmd": [ + "@php artisan vendor:publish --tag=laravel-assets --ansi --force" + ], + "post-root-package-install": [ + "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" + ], + "post-create-project-cmd": [ + "@php artisan key:generate --ansi", + "@php -r \"file_exists('database/database.sqlite') || touch('database/database.sqlite');\"", + "@php artisan migrate --graceful --ansi" + ], + "phpcs": "phpcs --standard=PSR12", + "check-style": "phpcs -p --standard=PSR12 config/ app/ --ignore=src/Resources/* ", + "fix-style": "phpcbf -p --standard=PSR12 config/ app/ --ignore=src/Resources*", + "test": "phpunit" + }, + "extra": { + "laravel": { + "dont-discover": [] + } + }, + "config": { + "optimize-autoloader": true, + "preferred-install": "dist", + "sort-packages": true, + "allow-plugins": { + "pestphp/pest-plugin": true, + "php-http/discovery": true + } + }, + "minimum-stability": "stable", + "prefer-stable": true } diff --git a/composer.lock b/composer.lock index b01ffcd..a75cf7f 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "58ef83953920e06181ea84f65f0b2635", + "content-hash": "e6f9c5bf8d0e903e6faecb65e7bc0859", "packages": [ { "name": "brick/math", @@ -1052,16 +1052,16 @@ }, { "name": "laravel/framework", - "version": "v11.17.0", + "version": "v11.18.1", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "42f505a0c8afc0743f73e70bec08e641e2870bd6" + "reference": "b19ba518c56852567e99fbae9321bc436c2cc5a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/42f505a0c8afc0743f73e70bec08e641e2870bd6", - "reference": "42f505a0c8afc0743f73e70bec08e641e2870bd6", + "url": "https://api.github.com/repos/laravel/framework/zipball/b19ba518c56852567e99fbae9321bc436c2cc5a8", + "reference": "b19ba518c56852567e99fbae9321bc436c2cc5a8", "shasum": "" }, "require": { @@ -1254,7 +1254,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-07-23T16:33:27+00:00" + "time": "2024-07-26T10:39:29+00:00" }, { "name": "laravel/prompts", @@ -2392,6 +2392,77 @@ ], "time": "2024-07-20T21:41:07+00:00" }, + { + "name": "predis/predis", + "version": "v2.0.0", + "source": { + "type": "git", + "url": "https://github.com/predis/predis.git", + "reference": "99c253733dee9447d26257dc669d33d5ac84713d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/predis/predis/zipball/99c253733dee9447d26257dc669d33d5ac84713d", + "reference": "99c253733dee9447d26257dc669d33d5ac84713d", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.0 || ~9.4.4" + }, + "suggest": { + "ext-curl": "Allows access to Webdis when paired with phpiredis", + "ext-phpiredis": "Allows faster serialization and deserialization of the Redis protocol" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "Predis\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniele Alessandri", + "email": "suppakilla@gmail.com", + "homepage": "http://clorophilla.net", + "role": "Creator & Maintainer" + }, + { + "name": "Till Krüss", + "homepage": "https://till.im", + "role": "Maintainer" + } + ], + "description": "A flexible and feature-complete Redis client for PHP.", + "homepage": "http://github.com/predis/predis", + "keywords": [ + "nosql", + "predis", + "redis" + ], + "support": { + "issues": "https://github.com/predis/predis/issues", + "source": "https://github.com/predis/predis/tree/v2.0.0" + }, + "funding": [ + { + "url": "https://github.com/sponsors/tillkruss", + "type": "github" + } + ], + "time": "2022-06-08T13:14:56+00:00" + }, { "name": "psr/clock", "version": "1.0.0", @@ -3184,16 +3255,16 @@ }, { "name": "symfony/console", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "0aa29ca177f432ab68533432db0de059f39c92ae" + "reference": "cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/0aa29ca177f432ab68533432db0de059f39c92ae", - "reference": "0aa29ca177f432ab68533432db0de059f39c92ae", + "url": "https://api.github.com/repos/symfony/console/zipball/cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9", + "reference": "cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9", "shasum": "" }, "require": { @@ -3257,7 +3328,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.1.2" + "source": "https://github.com/symfony/console/tree/v7.1.3" }, "funding": [ { @@ -3273,7 +3344,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T10:03:55+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "symfony/css-selector", @@ -3409,16 +3480,16 @@ }, { "name": "symfony/error-handler", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "2412d3dddb5c9ea51a39cfbff1c565fc9844ca32" + "reference": "432bb369952795c61ca1def65e078c4a80dad13c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/2412d3dddb5c9ea51a39cfbff1c565fc9844ca32", - "reference": "2412d3dddb5c9ea51a39cfbff1c565fc9844ca32", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/432bb369952795c61ca1def65e078c4a80dad13c", + "reference": "432bb369952795c61ca1def65e078c4a80dad13c", "shasum": "" }, "require": { @@ -3464,7 +3535,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v7.1.2" + "source": "https://github.com/symfony/error-handler/tree/v7.1.3" }, "funding": [ { @@ -3480,7 +3551,7 @@ "type": "tidelift" } ], - "time": "2024-06-25T19:55:06+00:00" + "time": "2024-07-26T13:02:51+00:00" }, { "name": "symfony/event-dispatcher", @@ -3640,16 +3711,16 @@ }, { "name": "symfony/finder", - "version": "v7.1.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "fbb0ba67688b780efbc886c1a0a0948dcf7205d6" + "reference": "717c6329886f32dc65e27461f80f2a465412fdca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/fbb0ba67688b780efbc886c1a0a0948dcf7205d6", - "reference": "fbb0ba67688b780efbc886c1a0a0948dcf7205d6", + "url": "https://api.github.com/repos/symfony/finder/zipball/717c6329886f32dc65e27461f80f2a465412fdca", + "reference": "717c6329886f32dc65e27461f80f2a465412fdca", "shasum": "" }, "require": { @@ -3684,7 +3755,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.1.1" + "source": "https://github.com/symfony/finder/tree/v7.1.3" }, "funding": [ { @@ -3700,20 +3771,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-07-24T07:08:44+00:00" }, { "name": "symfony/http-foundation", - "version": "v7.1.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "74d171d5b6a1d9e4bfee09a41937c17a7536acfa" + "reference": "f602d5c17d1fa02f8019ace2687d9d136b7f4a1a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/74d171d5b6a1d9e4bfee09a41937c17a7536acfa", - "reference": "74d171d5b6a1d9e4bfee09a41937c17a7536acfa", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f602d5c17d1fa02f8019ace2687d9d136b7f4a1a", + "reference": "f602d5c17d1fa02f8019ace2687d9d136b7f4a1a", "shasum": "" }, "require": { @@ -3761,7 +3832,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.1.1" + "source": "https://github.com/symfony/http-foundation/tree/v7.1.3" }, "funding": [ { @@ -3777,20 +3848,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "ae3fa717db4d41a55d14c2bd92399e37cf5bc0f6" + "reference": "db9702f3a04cc471ec8c70e881825db26ac5f186" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/ae3fa717db4d41a55d14c2bd92399e37cf5bc0f6", - "reference": "ae3fa717db4d41a55d14c2bd92399e37cf5bc0f6", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/db9702f3a04cc471ec8c70e881825db26ac5f186", + "reference": "db9702f3a04cc471ec8c70e881825db26ac5f186", "shasum": "" }, "require": { @@ -3875,7 +3946,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v7.1.2" + "source": "https://github.com/symfony/http-kernel/tree/v7.1.3" }, "funding": [ { @@ -3891,7 +3962,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T13:13:31+00:00" + "time": "2024-07-26T14:58:15+00:00" }, { "name": "symfony/mailer", @@ -4769,16 +4840,16 @@ }, { "name": "symfony/process", - "version": "v7.1.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "febf90124323a093c7ee06fdb30e765ca3c20028" + "reference": "7f2f542c668ad6c313dc4a5e9c3321f733197eca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/febf90124323a093c7ee06fdb30e765ca3c20028", - "reference": "febf90124323a093c7ee06fdb30e765ca3c20028", + "url": "https://api.github.com/repos/symfony/process/zipball/7f2f542c668ad6c313dc4a5e9c3321f733197eca", + "reference": "7f2f542c668ad6c313dc4a5e9c3321f733197eca", "shasum": "" }, "require": { @@ -4810,7 +4881,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.1.1" + "source": "https://github.com/symfony/process/tree/v7.1.3" }, "funding": [ { @@ -4826,20 +4897,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-07-26T12:44:47+00:00" }, { "name": "symfony/routing", - "version": "v7.1.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "60c31bab5c45af7f13091b87deb708830f3c96c0" + "reference": "8a908a3f22d5a1b5d297578c2ceb41b02fa916d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/60c31bab5c45af7f13091b87deb708830f3c96c0", - "reference": "60c31bab5c45af7f13091b87deb708830f3c96c0", + "url": "https://api.github.com/repos/symfony/routing/zipball/8a908a3f22d5a1b5d297578c2ceb41b02fa916d0", + "reference": "8a908a3f22d5a1b5d297578c2ceb41b02fa916d0", "shasum": "" }, "require": { @@ -4891,7 +4962,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.1.1" + "source": "https://github.com/symfony/routing/tree/v7.1.3" }, "funding": [ { @@ -4907,7 +4978,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-07-17T06:10:24+00:00" }, { "name": "symfony/service-contracts", @@ -4994,16 +5065,16 @@ }, { "name": "symfony/string", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "14221089ac66cf82e3cf3d1c1da65de305587ff8" + "reference": "ea272a882be7f20cad58d5d78c215001617b7f07" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/14221089ac66cf82e3cf3d1c1da65de305587ff8", - "reference": "14221089ac66cf82e3cf3d1c1da65de305587ff8", + "url": "https://api.github.com/repos/symfony/string/zipball/ea272a882be7f20cad58d5d78c215001617b7f07", + "reference": "ea272a882be7f20cad58d5d78c215001617b7f07", "shasum": "" }, "require": { @@ -5061,7 +5132,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.1.2" + "source": "https://github.com/symfony/string/tree/v7.1.3" }, "funding": [ { @@ -5077,20 +5148,20 @@ "type": "tidelift" } ], - "time": "2024-06-28T09:27:18+00:00" + "time": "2024-07-22T10:25:37+00:00" }, { "name": "symfony/translation", - "version": "v7.1.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "cf5ae136e124fc7681b34ce9fac9d5b9ae8ceee3" + "reference": "8d5e50c813ba2859a6dfc99a0765c550507934a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/cf5ae136e124fc7681b34ce9fac9d5b9ae8ceee3", - "reference": "cf5ae136e124fc7681b34ce9fac9d5b9ae8ceee3", + "url": "https://api.github.com/repos/symfony/translation/zipball/8d5e50c813ba2859a6dfc99a0765c550507934a1", + "reference": "8d5e50c813ba2859a6dfc99a0765c550507934a1", "shasum": "" }, "require": { @@ -5155,7 +5226,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v7.1.1" + "source": "https://github.com/symfony/translation/tree/v7.1.3" }, "funding": [ { @@ -5171,7 +5242,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "symfony/translation-contracts", @@ -5327,16 +5398,16 @@ }, { "name": "symfony/var-dumper", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "5857c57c6b4b86524c08cf4f4bc95327270a816d" + "reference": "86af4617cca75a6e28598f49ae0690f3b9d4591f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/5857c57c6b4b86524c08cf4f4bc95327270a816d", - "reference": "5857c57c6b4b86524c08cf4f4bc95327270a816d", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/86af4617cca75a6e28598f49ae0690f3b9d4591f", + "reference": "86af4617cca75a6e28598f49ae0690f3b9d4591f", "shasum": "" }, "require": { @@ -5390,7 +5461,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.1.2" + "source": "https://github.com/symfony/var-dumper/tree/v7.1.3" }, "funding": [ { @@ -5406,7 +5477,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T08:00:31+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -5679,6 +5750,90 @@ } ], "packages-dev": [ + { + "name": "barryvdh/laravel-debugbar", + "version": "v3.13.5", + "source": { + "type": "git", + "url": "https://github.com/barryvdh/laravel-debugbar.git", + "reference": "92d86be45ee54edff735e46856f64f14b6a8bb07" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/92d86be45ee54edff735e46856f64f14b6a8bb07", + "reference": "92d86be45ee54edff735e46856f64f14b6a8bb07", + "shasum": "" + }, + "require": { + "illuminate/routing": "^9|^10|^11", + "illuminate/session": "^9|^10|^11", + "illuminate/support": "^9|^10|^11", + "maximebf/debugbar": "~1.22.0", + "php": "^8.0", + "symfony/finder": "^6|^7" + }, + "require-dev": { + "mockery/mockery": "^1.3.3", + "orchestra/testbench-dusk": "^5|^6|^7|^8|^9", + "phpunit/phpunit": "^9.6|^10.5", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.13-dev" + }, + "laravel": { + "providers": [ + "Barryvdh\\Debugbar\\ServiceProvider" + ], + "aliases": { + "Debugbar": "Barryvdh\\Debugbar\\Facades\\Debugbar" + } + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Barryvdh\\Debugbar\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + } + ], + "description": "PHP Debugbar integration for Laravel", + "keywords": [ + "debug", + "debugbar", + "laravel", + "profiler", + "webprofiler" + ], + "support": { + "issues": "https://github.com/barryvdh/laravel-debugbar/issues", + "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.13.5" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2024-04-12T11:20:37+00:00" + }, { "name": "fakerphp/faker", "version": "v1.23.1", @@ -6053,6 +6208,74 @@ }, "time": "2024-07-22T14:36:50+00:00" }, + { + "name": "maximebf/debugbar", + "version": "v1.22.3", + "source": { + "type": "git", + "url": "https://github.com/maximebf/php-debugbar.git", + "reference": "7aa9a27a0b1158ed5ad4e7175e8d3aee9a818b96" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/7aa9a27a0b1158ed5ad4e7175e8d3aee9a818b96", + "reference": "7aa9a27a0b1158ed5ad4e7175e8d3aee9a818b96", + "shasum": "" + }, + "require": { + "php": "^7.2|^8", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^4|^5|^6|^7" + }, + "require-dev": { + "dbrekelmans/bdi": "^1", + "phpunit/phpunit": "^8|^9", + "symfony/panther": "^1|^2.1", + "twig/twig": "^1.38|^2.7|^3.0" + }, + "suggest": { + "kriswallsmith/assetic": "The best way to manage assets", + "monolog/monolog": "Log using Monolog", + "predis/predis": "Redis storage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.22-dev" + } + }, + "autoload": { + "psr-4": { + "DebugBar\\": "src/DebugBar/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Maxime Bouroumeau-Fuseau", + "email": "maxime.bouroumeau@gmail.com", + "homepage": "http://maximebf.com" + }, + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + } + ], + "description": "Debug bar in the browser for php application", + "homepage": "https://github.com/maximebf/php-debugbar", + "keywords": [ + "debug", + "debugbar" + ], + "support": { + "issues": "https://github.com/maximebf/php-debugbar/issues", + "source": "https://github.com/maximebf/php-debugbar/tree/v1.22.3" + }, + "time": "2024-04-03T19:39:26+00:00" + }, { "name": "mockery/mockery", "version": "1.6.12", @@ -6834,6 +7057,818 @@ ], "time": "2024-07-18T14:56:37+00:00" }, + { + "name": "roave/security-advisories", + "version": "dev-latest", + "source": { + "type": "git", + "url": "https://github.com/Roave/SecurityAdvisories.git", + "reference": "0816697098823477b1a95d07d2b94bf3cfe1a2f8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/0816697098823477b1a95d07d2b94bf3cfe1a2f8", + "reference": "0816697098823477b1a95d07d2b94bf3cfe1a2f8", + "shasum": "" + }, + "conflict": { + "3f/pygmentize": "<1.2", + "admidio/admidio": "<4.2.13", + "adodb/adodb-php": "<=5.20.20|>=5.21,<=5.21.3", + "aheinze/cockpit": "<2.2", + "aimeos/ai-admin-graphql": ">=2022.04.1,<2022.10.10|>=2023.04.1,<2023.10.6|>=2024.04.1,<2024.04.6", + "aimeos/ai-admin-jsonadm": "<2020.10.13|>=2021.04.1,<2021.10.6|>=2022.04.1,<2022.10.3|>=2023.04.1,<2023.10.4|==2024.04.1", + "aimeos/ai-client-html": ">=2020.04.1,<2020.10.27|>=2021.04.1,<2021.10.22|>=2022.04.1,<2022.10.13|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.04.7", + "aimeos/ai-controller-frontend": "<2020.10.15|>=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.8|>=2023.04.1,<2023.10.9", + "aimeos/aimeos-core": ">=2022.04.1,<2022.10.17|>=2023.04.1,<2023.10.17|>=2024.04.1,<2024.04.7", + "aimeos/aimeos-typo3": "<19.10.12|>=20,<20.10.5", + "airesvsg/acf-to-rest-api": "<=3.1", + "akaunting/akaunting": "<2.1.13", + "akeneo/pim-community-dev": "<5.0.119|>=6,<6.0.53", + "alextselegidis/easyappointments": "<1.5", + "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", + "amazing/media2click": ">=1,<1.3.3", + "amphp/artax": "<1.0.6|>=2,<2.0.6", + "amphp/http": "<=1.7.2|>=2,<=2.1", + "amphp/http-client": ">=4,<4.4", + "anchorcms/anchor-cms": "<=0.12.7", + "andreapollastri/cipi": "<=3.1.15", + "andrewhaine/silverstripe-form-capture": ">=0.2,<=0.2.3|>=1,<1.0.2|>=2,<2.2.5", + "apache-solr-for-typo3/solr": "<2.8.3", + "apereo/phpcas": "<1.6", + "api-platform/core": ">=2.2,<2.2.10|>=2.3,<2.3.6|>=2.6,<2.7.10|>=3,<3.0.12|>=3.1,<3.1.3", + "appwrite/server-ce": "<=1.2.1", + "arc/web": "<3", + "area17/twill": "<1.2.5|>=2,<2.5.3", + "artesaos/seotools": "<0.17.2", + "asymmetricrypt/asymmetricrypt": "<9.9.99", + "athlon1600/php-proxy": "<=5.1", + "athlon1600/php-proxy-app": "<=3", + "austintoddj/canvas": "<=3.4.2", + "auth0/wordpress": "<=4.6", + "automad/automad": "<=2.0.0.0-alpha5", + "automattic/jetpack": "<9.8", + "awesome-support/awesome-support": "<=6.0.7", + "aws/aws-sdk-php": "<3.288.1", + "azuracast/azuracast": "<0.18.3", + "backdrop/backdrop": "<1.27.3|>=1.28,<1.28.2", + "backpack/crud": "<3.4.9", + "bacula-web/bacula-web": "<8.0.0.0-RC2-dev", + "badaso/core": "<2.7", + "bagisto/bagisto": "<2.1", + "barrelstrength/sprout-base-email": "<1.2.7", + "barrelstrength/sprout-forms": "<3.9", + "barryvdh/laravel-translation-manager": "<0.6.2", + "barzahlen/barzahlen-php": "<2.0.1", + "baserproject/basercms": "<5.0.9", + "bassjobsen/bootstrap-3-typeahead": ">4.0.2", + "bbpress/bbpress": "<2.6.5", + "bcosca/fatfree": "<3.7.2", + "bedita/bedita": "<4", + "bigfork/silverstripe-form-capture": ">=3,<3.1.1", + "billz/raspap-webgui": "<2.9.5", + "bk2k/bootstrap-package": ">=7.1,<7.1.2|>=8,<8.0.8|>=9,<9.0.4|>=9.1,<9.1.3|>=10,<10.0.10|>=11,<11.0.3", + "blueimp/jquery-file-upload": "==6.4.4", + "bmarshall511/wordpress_zero_spam": "<5.2.13", + "bolt/bolt": "<3.7.2", + "bolt/core": "<=4.2", + "born05/craft-twofactorauthentication": "<3.3.4", + "bottelet/flarepoint": "<2.2.1", + "bref/bref": "<2.1.17", + "brightlocal/phpwhois": "<=4.2.5", + "brotkrueml/codehighlight": "<2.7", + "brotkrueml/schema": "<1.13.1|>=2,<2.5.1", + "brotkrueml/typo3-matomo-integration": "<1.3.2", + "buddypress/buddypress": "<7.2.1", + "bugsnag/bugsnag-laravel": ">=2,<2.0.2", + "bytefury/crater": "<6.0.2", + "cachethq/cachet": "<2.5.1", + "cakephp/cakephp": "<3.10.3|>=4,<4.0.10|>=4.1,<4.1.4|>=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10", + "cakephp/database": ">=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10", + "cardgate/magento2": "<2.0.33", + "cardgate/woocommerce": "<=3.1.15", + "cart2quote/module-quotation": ">=4.1.6,<=4.4.5|>=5,<5.4.4", + "cart2quote/module-quotation-encoded": ">=4.1.6,<=4.4.5|>=5,<5.4.4", + "cartalyst/sentry": "<=2.1.6", + "catfan/medoo": "<1.7.5", + "causal/oidc": "<2.1", + "cecil/cecil": "<7.47.1", + "centreon/centreon": "<22.10.15", + "cesnet/simplesamlphp-module-proxystatistics": "<3.1", + "chriskacerguis/codeigniter-restserver": "<=2.7.1", + "civicrm/civicrm-core": ">=4.2,<4.2.9|>=4.3,<4.3.3", + "ckeditor/ckeditor": "<4.24", + "cockpit-hq/cockpit": "<2.7|==2.7", + "codeception/codeception": "<3.1.3|>=4,<4.1.22", + "codeigniter/framework": "<3.1.9", + "codeigniter4/framework": "<4.4.7", + "codeigniter4/shield": "<1.0.0.0-beta8", + "codiad/codiad": "<=2.8.4", + "composer/composer": "<1.10.27|>=2,<2.2.24|>=2.3,<2.7.7", + "concrete5/concrete5": "<9.2.8", + "concrete5/core": "<8.5.8|>=9,<9.1", + "contao-components/mediaelement": ">=2.14.2,<2.21.1", + "contao/comments-bundle": ">=2,<4.13.40|>=5.0.0.0-RC1-dev,<5.3.4", + "contao/contao": ">=3,<3.5.37|>=4,<4.4.56|>=4.5,<4.9.40|>=4.10,<4.11.7|>=4.13,<4.13.21|>=5.1,<5.1.4", + "contao/core": "<3.5.39", + "contao/core-bundle": "<4.13.40|>=5,<5.3.4", + "contao/listing-bundle": ">=3,<=3.5.30|>=4,<4.4.8", + "contao/managed-edition": "<=1.5", + "corveda/phpsandbox": "<1.3.5", + "cosenary/instagram": "<=2.3", + "craftcms/cms": "<4.6.2|>=5.0.0.0-beta1,<=5.2.2", + "croogo/croogo": "<4", + "cuyz/valinor": "<0.12", + "czproject/git-php": "<4.0.3", + "dapphp/securimage": "<3.6.6", + "darylldoyle/safe-svg": "<1.9.10", + "datadog/dd-trace": ">=0.30,<0.30.2", + "datatables/datatables": "<1.10.10", + "david-garcia/phpwhois": "<=4.3.1", + "dbrisinajumi/d2files": "<1", + "dcat/laravel-admin": "<=2.1.3.0-beta", + "derhansen/fe_change_pwd": "<2.0.5|>=3,<3.0.3", + "derhansen/sf_event_mgt": "<4.3.1|>=5,<5.1.1|>=7,<7.4", + "desperado/xml-bundle": "<=0.1.7", + "devgroup/dotplant": "<2020.09.14-dev", + "directmailteam/direct-mail": "<6.0.3|>=7,<7.0.3|>=8,<9.5.2", + "doctrine/annotations": "<1.2.7", + "doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2", + "doctrine/common": "<2.4.3|>=2.5,<2.5.1", + "doctrine/dbal": ">=2,<2.0.8|>=2.1,<2.1.2|>=3,<3.1.4", + "doctrine/doctrine-bundle": "<1.5.2", + "doctrine/doctrine-module": "<0.7.2", + "doctrine/mongodb-odm": "<1.0.2", + "doctrine/mongodb-odm-bundle": "<3.0.1", + "doctrine/orm": ">=1,<1.2.4|>=2,<2.4.8|>=2.5,<2.5.1|>=2.8.3,<2.8.4", + "dolibarr/dolibarr": "<19.0.2", + "dompdf/dompdf": "<2.0.4", + "doublethreedigital/guest-entries": "<3.1.2", + "drupal/core": ">=6,<6.38|>=7,<7.96|>=8,<10.1.8|>=10.2,<10.2.2", + "drupal/drupal": ">=5,<5.11|>=6,<6.38|>=7,<7.80|>=8,<8.9.16|>=9,<9.1.12|>=9.2,<9.2.4", + "duncanmcclean/guest-entries": "<3.1.2", + "dweeves/magmi": "<=0.7.24", + "ec-cube/ec-cube": "<2.4.4|>=2.11,<=2.17.1|>=3,<=3.0.18.0-patch4|>=4,<=4.1.2", + "ecodev/newsletter": "<=4", + "ectouch/ectouch": "<=2.7.2", + "egroupware/egroupware": "<23.1.20240624", + "elefant/cms": "<2.0.7", + "elgg/elgg": "<3.3.24|>=4,<4.0.5", + "elijaa/phpmemcacheadmin": "<=1.3", + "encore/laravel-admin": "<=1.8.19", + "endroid/qr-code-bundle": "<3.4.2", + "enhavo/enhavo-app": "<=0.13.1", + "enshrined/svg-sanitize": "<0.15", + "erusev/parsedown": "<1.7.2", + "ether/logs": "<3.0.4", + "evolutioncms/evolution": "<=3.2.3", + "exceedone/exment": "<4.4.3|>=5,<5.0.3", + "exceedone/laravel-admin": "<2.2.3|==3", + "ezsystems/demobundle": ">=5.4,<5.4.6.1-dev", + "ezsystems/ez-support-tools": ">=2.2,<2.2.3", + "ezsystems/ezdemo-ls-extension": ">=5.4,<5.4.2.1-dev", + "ezsystems/ezfind-ls": ">=5.3,<5.3.6.1-dev|>=5.4,<5.4.11.1-dev|>=2017.12,<2017.12.0.1-dev", + "ezsystems/ezplatform": "<=1.13.6|>=2,<=2.5.24", + "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6|>=1.5,<1.5.29|>=2.3,<2.3.26", + "ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2.1|>=5,<5.0.1|>=5.1,<5.1.1", + "ezsystems/ezplatform-graphql": ">=1.0.0.0-RC1-dev,<1.0.13|>=2.0.0.0-beta1,<2.3.12", + "ezsystems/ezplatform-kernel": "<1.2.5.1-dev|>=1.3,<1.3.35", + "ezsystems/ezplatform-rest": ">=1.2,<=1.2.2|>=1.3,<1.3.8", + "ezsystems/ezplatform-richtext": ">=2.3,<2.3.7.1-dev", + "ezsystems/ezplatform-solr-search-engine": ">=1.7,<1.7.12|>=2,<2.0.2|>=3.3,<3.3.15", + "ezsystems/ezplatform-user": ">=1,<1.0.1", + "ezsystems/ezpublish-kernel": "<6.13.8.2-dev|>=7,<7.5.31", + "ezsystems/ezpublish-legacy": "<=2017.12.7.3|>=2018.6,<=2019.03.5.1", + "ezsystems/platform-ui-assets-bundle": ">=4.2,<4.2.3", + "ezsystems/repository-forms": ">=2.3,<2.3.2.1-dev|>=2.5,<2.5.15", + "ezyang/htmlpurifier": "<4.1.1", + "facade/ignition": "<1.16.15|>=2,<2.4.2|>=2.5,<2.5.2", + "facturascripts/facturascripts": "<=2022.08", + "fastly/magento2": "<1.2.26", + "feehi/cms": "<=2.1.1", + "feehi/feehicms": "<=2.1.1", + "fenom/fenom": "<=2.12.1", + "filegator/filegator": "<7.8", + "filp/whoops": "<2.1.13", + "fineuploader/php-traditional-server": "<=1.2.2", + "firebase/php-jwt": "<6", + "fixpunkt/fp-masterquiz": "<2.2.1|>=3,<3.5.2", + "fixpunkt/fp-newsletter": "<1.1.1|>=2,<2.1.2|>=2.2,<3.2.6", + "flarum/core": "<1.8.5", + "flarum/flarum": "<0.1.0.0-beta8", + "flarum/framework": "<1.8.5", + "flarum/mentions": "<1.6.3", + "flarum/sticky": ">=0.1.0.0-beta14,<=0.1.0.0-beta15", + "flarum/tags": "<=0.1.0.0-beta13", + "floriangaerber/magnesium": "<0.3.1", + "fluidtypo3/vhs": "<5.1.1", + "fof/byobu": ">=0.3.0.0-beta2,<1.1.7", + "fof/upload": "<1.2.3", + "foodcoopshop/foodcoopshop": ">=3.2,<3.6.1", + "fooman/tcpdf": "<6.2.22", + "forkcms/forkcms": "<5.11.1", + "fossar/tcpdf-parser": "<6.2.22", + "francoisjacquet/rosariosis": "<=11.5.1", + "frappant/frp-form-answers": "<3.1.2|>=4,<4.0.2", + "friendsofsymfony/oauth2-php": "<1.3", + "friendsofsymfony/rest-bundle": ">=1.2,<1.2.2", + "friendsofsymfony/user-bundle": ">=1,<1.3.5", + "friendsofsymfony1/swiftmailer": ">=4,<5.4.13|>=6,<6.2.5", + "friendsofsymfony1/symfony1": ">=1.1,<1.5.19", + "friendsoftypo3/mediace": ">=7.6.2,<7.6.5", + "friendsoftypo3/openid": ">=4.5,<4.5.31|>=4.7,<4.7.16|>=6,<6.0.11|>=6.1,<6.1.6", + "froala/wysiwyg-editor": "<3.2.7|>=4.0.1,<=4.1.3", + "froxlor/froxlor": "<2.1.9", + "frozennode/administrator": "<=5.0.12", + "fuel/core": "<1.8.1", + "funadmin/funadmin": "<=3.2|>=3.3.2,<=3.3.3", + "gaoming13/wechat-php-sdk": "<=1.10.2", + "genix/cms": "<=1.1.11", + "getformwork/formwork": "<1.13.1|==2.0.0.0-beta1", + "getgrav/grav": "<1.7.46", + "getkirby/cms": "<4.1.1", + "getkirby/kirby": "<=2.5.12", + "getkirby/panel": "<2.5.14", + "getkirby/starterkit": "<=3.7.0.2", + "gilacms/gila": "<=1.15.4", + "gleez/cms": "<=1.3|==2", + "globalpayments/php-sdk": "<2", + "gogentooss/samlbase": "<1.2.7", + "google/protobuf": "<3.15", + "gos/web-socket-bundle": "<1.10.4|>=2,<2.6.1|>=3,<3.3", + "gree/jose": "<2.2.1", + "gregwar/rst": "<1.0.3", + "grumpydictator/firefly-iii": "<6.1.17", + "gugoan/economizzer": "<=0.9.0.0-beta1", + "guzzlehttp/guzzle": "<6.5.8|>=7,<7.4.5", + "guzzlehttp/psr7": "<1.9.1|>=2,<2.4.5", + "haffner/jh_captcha": "<=2.1.3|>=3,<=3.0.2", + "harvesthq/chosen": "<1.8.7", + "helloxz/imgurl": "<=2.31", + "hhxsv5/laravel-s": "<3.7.36", + "hillelcoren/invoice-ninja": "<5.3.35", + "himiklab/yii2-jqgrid-widget": "<1.0.8", + "hjue/justwriting": "<=1", + "hov/jobfair": "<1.0.13|>=2,<2.0.2", + "httpsoft/http-message": "<1.0.12", + "hyn/multi-tenant": ">=5.6,<5.7.2", + "ibexa/admin-ui": ">=4.2,<4.2.3", + "ibexa/core": ">=4,<4.0.7|>=4.1,<4.1.4|>=4.2,<4.2.3|>=4.5,<4.5.6|>=4.6,<4.6.2", + "ibexa/graphql": ">=2.5,<2.5.31|>=3.3,<3.3.28|>=4.2,<4.2.3", + "ibexa/post-install": "<=1.0.4", + "ibexa/solr": ">=4.5,<4.5.4", + "ibexa/user": ">=4,<4.4.3", + "icecoder/icecoder": "<=8.1", + "idno/known": "<=1.3.1", + "ilicmiljan/secure-props": ">=1.2,<1.2.2", + "illuminate/auth": "<5.5.10", + "illuminate/cookie": ">=4,<=4.0.11|>=4.1,<6.18.31|>=7,<7.22.4", + "illuminate/database": "<6.20.26|>=7,<7.30.5|>=8,<8.40", + "illuminate/encryption": ">=4,<=4.0.11|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.40|>=5.6,<5.6.15", + "illuminate/view": "<6.20.42|>=7,<7.30.6|>=8,<8.75", + "imdbphp/imdbphp": "<=5.1.1", + "impresscms/impresscms": "<=1.4.5", + "impresspages/impresspages": "<=1.0.12", + "in2code/femanager": "<5.5.3|>=6,<6.3.4|>=7,<7.2.3", + "in2code/ipandlanguageredirect": "<5.1.2", + "in2code/lux": "<17.6.1|>=18,<24.0.2", + "innologi/typo3-appointments": "<2.0.6", + "intelliants/subrion": "<4.2.2", + "inter-mediator/inter-mediator": "==5.5", + "islandora/islandora": ">=2,<2.4.1", + "ivankristianto/phpwhois": "<=4.3", + "jackalope/jackalope-doctrine-dbal": "<1.7.4", + "james-heinrich/getid3": "<1.9.21", + "james-heinrich/phpthumb": "<1.7.12", + "jasig/phpcas": "<1.3.3", + "jcbrand/converse.js": "<3.3.3", + "johnbillion/wp-crontrol": "<1.16.2", + "joomla/application": "<1.0.13", + "joomla/archive": "<1.1.12|>=2,<2.0.1", + "joomla/filesystem": "<1.6.2|>=2,<2.0.1", + "joomla/filter": "<1.4.4|>=2,<2.0.1", + "joomla/framework": "<1.5.7|>=2.5.4,<=3.8.12", + "joomla/input": ">=2,<2.0.2", + "joomla/joomla-cms": ">=2.5,<3.9.12", + "joomla/session": "<1.3.1", + "joyqi/hyper-down": "<=2.4.27", + "jsdecena/laracom": "<2.0.9", + "jsmitty12/phpwhois": "<5.1", + "juzaweb/cms": "<=3.4", + "jweiland/events2": "<8.3.8|>=9,<9.0.6", + "kazist/phpwhois": "<=4.2.6", + "kelvinmo/simplexrd": "<3.1.1", + "kevinpapst/kimai2": "<1.16.7", + "khodakhah/nodcms": "<=3", + "kimai/kimai": "<2.16", + "kitodo/presentation": "<3.2.3|>=3.3,<3.3.4", + "klaviyo/magento2-extension": ">=1,<3", + "knplabs/knp-snappy": "<=1.4.2", + "kohana/core": "<3.3.3", + "krayin/laravel-crm": "<1.2.2", + "kreait/firebase-php": ">=3.2,<3.8.1", + "kumbiaphp/kumbiapp": "<=1.1.1", + "la-haute-societe/tcpdf": "<6.2.22", + "laminas/laminas-diactoros": "<2.18.1|==2.19|==2.20|==2.21|==2.22|==2.23|>=2.24,<2.24.2|>=2.25,<2.25.2", + "laminas/laminas-form": "<2.17.1|>=3,<3.0.2|>=3.1,<3.1.1", + "laminas/laminas-http": "<2.14.2", + "laravel/fortify": "<1.11.1", + "laravel/framework": "<6.20.44|>=7,<7.30.6|>=8,<8.75", + "laravel/laravel": ">=5.4,<5.4.22", + "laravel/socialite": ">=1,<2.0.10", + "latte/latte": "<2.10.8", + "lavalite/cms": "<=9|==10.1", + "lcobucci/jwt": ">=3.4,<3.4.6|>=4,<4.0.4|>=4.1,<4.1.5", + "league/commonmark": "<0.18.3", + "league/flysystem": "<1.1.4|>=2,<2.1.1", + "league/oauth2-server": ">=8.3.2,<8.4.2|>=8.5,<8.5.3", + "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", + "libreform/libreform": ">=2,<=2.0.8", + "librenms/librenms": "<2017.08.18", + "liftkit/database": "<2.13.2", + "lightsaml/lightsaml": "<1.3.5", + "limesurvey/limesurvey": "<3.27.19", + "livehelperchat/livehelperchat": "<=3.91", + "livewire/livewire": ">2.2.4,<2.2.6|>=3.3.5,<3.4.9", + "lms/routes": "<2.1.1", + "localizationteam/l10nmgr": "<7.4|>=8,<8.7|>=9,<9.2", + "luyadev/yii-helpers": "<1.2.1", + "magento/community-edition": "<2.4.5|==2.4.5|>=2.4.5.0-patch1,<2.4.5.0-patch8|==2.4.6|>=2.4.6.0-patch1,<2.4.6.0-patch6|==2.4.7", + "magento/core": "<=1.9.4.5", + "magento/magento1ce": "<1.9.4.3-dev", + "magento/magento1ee": ">=1,<1.14.4.3-dev", + "magento/product-community-edition": "<2.4.4.0-patch9|>=2.4.5,<2.4.5.0-patch8|>=2.4.6,<2.4.6.0-patch6|>=2.4.7,<2.4.7.0-patch1", + "magneto/core": "<1.9.4.4-dev", + "maikuolan/phpmussel": ">=1,<1.6", + "mainwp/mainwp": "<=4.4.3.3", + "mantisbt/mantisbt": "<2.26.2", + "marcwillmann/turn": "<0.3.3", + "matyhtf/framework": "<3.0.6", + "mautic/core": "<4.4.12|>=5.0.0.0-alpha,<5.0.4", + "mdanter/ecc": "<2", + "mediawiki/core": "<1.36.2", + "mediawiki/matomo": "<2.4.3", + "mediawiki/semantic-media-wiki": "<4.0.2", + "melisplatform/melis-asset-manager": "<5.0.1", + "melisplatform/melis-cms": "<5.0.1", + "melisplatform/melis-front": "<5.0.1", + "mezzio/mezzio-swoole": "<3.7|>=4,<4.3", + "mgallegos/laravel-jqgrid": "<=1.3", + "microsoft/microsoft-graph": ">=1.16,<1.109.1|>=2,<2.0.1", + "microsoft/microsoft-graph-beta": "<2.0.1", + "microsoft/microsoft-graph-core": "<2.0.2", + "microweber/microweber": "<=2.0.4", + "mikehaertl/php-shellcommand": "<1.6.1", + "miniorange/miniorange-saml": "<1.4.3", + "mittwald/typo3_forum": "<1.2.1", + "mobiledetect/mobiledetectlib": "<2.8.32", + "modx/revolution": "<=2.8.3.0-patch", + "mojo42/jirafeau": "<4.4", + "mongodb/mongodb": ">=1,<1.9.2", + "monolog/monolog": ">=1.8,<1.12", + "moodle/moodle": "<4.3.5|>=4.4.0.0-beta,<4.4.1", + "mos/cimage": "<0.7.19", + "movim/moxl": ">=0.8,<=0.10", + "movingbytes/social-network": "<=1.2.1", + "mpdf/mpdf": "<=7.1.7", + "munkireport/comment": "<4.1", + "munkireport/managedinstalls": "<2.6", + "munkireport/munki_facts": "<1.5", + "munkireport/munkireport": ">=2.5.3,<5.6.3", + "munkireport/reportdata": "<3.5", + "munkireport/softwareupdate": "<1.6", + "mustache/mustache": ">=2,<2.14.1", + "namshi/jose": "<2.2", + "neoan3-apps/template": "<1.1.1", + "neorazorx/facturascripts": "<2022.04", + "neos/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6", + "neos/form": ">=1.2,<4.3.3|>=5,<5.0.9|>=5.1,<5.1.3", + "neos/media-browser": "<7.3.19|>=8,<8.0.16|>=8.1,<8.1.11|>=8.2,<8.2.11|>=8.3,<8.3.9", + "neos/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<5.3.10|>=7,<7.0.9|>=7.1,<7.1.7|>=7.2,<7.2.6|>=7.3,<7.3.4|>=8,<8.0.2", + "neos/swiftmailer": "<5.4.5", + "netgen/tagsbundle": ">=3.4,<3.4.11|>=4,<4.0.15", + "nette/application": ">=2,<2.0.19|>=2.1,<2.1.13|>=2.2,<2.2.10|>=2.3,<2.3.14|>=2.4,<2.4.16|>=3,<3.0.6", + "nette/nette": ">=2,<2.0.19|>=2.1,<2.1.13", + "nilsteampassnet/teampass": "<3.0.10", + "nonfiction/nterchange": "<4.1.1", + "notrinos/notrinos-erp": "<=0.7", + "noumo/easyii": "<=0.9", + "novaksolutions/infusionsoft-php-sdk": "<1", + "nukeviet/nukeviet": "<4.5.02", + "nyholm/psr7": "<1.6.1", + "nystudio107/craft-seomatic": "<3.4.12", + "nzedb/nzedb": "<0.8", + "nzo/url-encryptor-bundle": ">=4,<4.3.2|>=5,<5.0.1", + "october/backend": "<1.1.2", + "october/cms": "<1.0.469|==1.0.469|==1.0.471|==1.1.1", + "october/october": "<=3.4.4", + "october/rain": "<1.0.472|>=1.1,<1.1.2", + "october/system": "<1.0.476|>=1.1,<1.1.12|>=2,<2.2.34|>=3,<3.5.15", + "omeka/omeka-s": "<4.0.3", + "onelogin/php-saml": "<2.10.4", + "oneup/uploader-bundle": ">=1,<1.9.3|>=2,<2.1.5", + "open-web-analytics/open-web-analytics": "<1.7.4", + "opencart/opencart": ">=0", + "openid/php-openid": "<2.3", + "openmage/magento-lts": "<20.5", + "opensolutions/vimbadmin": "<=3.0.15", + "opensource-workshop/connect-cms": "<1.7.2|>=2,<2.3.2", + "orchid/platform": ">=9,<9.4.4|>=14.0.0.0-alpha4,<14.5", + "oro/calendar-bundle": ">=4.2,<=4.2.6|>=5,<=5.0.6|>=5.1,<5.1.1", + "oro/commerce": ">=4.1,<5.0.11|>=5.1,<5.1.1", + "oro/crm": ">=1.7,<1.7.4|>=3.1,<4.1.17|>=4.2,<4.2.7", + "oro/crm-call-bundle": ">=4.2,<=4.2.5|>=5,<5.0.4|>=5.1,<5.1.1", + "oro/customer-portal": ">=4.1,<=4.1.13|>=4.2,<=4.2.10|>=5,<=5.0.11|>=5.1,<=5.1.3", + "oro/platform": ">=1.7,<1.7.4|>=3.1,<3.1.29|>=4.1,<4.1.17|>=4.2,<=4.2.10|>=5,<=5.0.12|>=5.1,<=5.1.3", + "oveleon/contao-cookiebar": "<1.16.3|>=2,<2.1.3", + "oxid-esales/oxideshop-ce": "<4.5", + "oxid-esales/paymorrow-module": ">=1,<1.0.2|>=2,<2.0.1", + "packbackbooks/lti-1-3-php-library": "<5", + "padraic/humbug_get_contents": "<1.1.2", + "pagarme/pagarme-php": "<3", + "pagekit/pagekit": "<=1.0.18", + "paragonie/ecc": "<2.0.1", + "paragonie/random_compat": "<2", + "passbolt/passbolt_api": "<4.6.2", + "paypal/adaptivepayments-sdk-php": "<=3.9.2", + "paypal/invoice-sdk-php": "<=3.9", + "paypal/merchant-sdk-php": "<3.12", + "paypal/permissions-sdk-php": "<=3.9.1", + "pear/archive_tar": "<1.4.14", + "pear/auth": "<1.2.4", + "pear/crypt_gpg": "<1.6.7", + "pear/pear": "<=1.10.1", + "pegasus/google-for-jobs": "<1.5.1|>=2,<2.1.1", + "personnummer/personnummer": "<3.0.2", + "phanan/koel": "<5.1.4", + "phenx/php-svg-lib": "<0.5.2", + "php-censor/php-censor": "<2.0.13|>=2.1,<2.1.5", + "php-mod/curl": "<2.3.2", + "phpbb/phpbb": "<3.2.10|>=3.3,<3.3.1", + "phpems/phpems": ">=6,<=6.1.3", + "phpfastcache/phpfastcache": "<6.1.5|>=7,<7.1.2|>=8,<8.0.7", + "phpmailer/phpmailer": "<6.5", + "phpmussel/phpmussel": ">=1,<1.6", + "phpmyadmin/phpmyadmin": "<5.2.1", + "phpmyfaq/phpmyfaq": "<3.2.5|==3.2.5", + "phpoffice/common": "<0.2.9", + "phpoffice/phpexcel": "<1.8", + "phpoffice/phpspreadsheet": "<1.16", + "phpseclib/phpseclib": "<2.0.47|>=3,<3.0.36", + "phpservermon/phpservermon": "<3.6", + "phpsysinfo/phpsysinfo": "<3.4.3", + "phpunit/phpunit": ">=4.8.19,<4.8.28|>=5.0.10,<5.6.3", + "phpwhois/phpwhois": "<=4.2.5", + "phpxmlrpc/extras": "<0.6.1", + "phpxmlrpc/phpxmlrpc": "<4.9.2", + "pi/pi": "<=2.5", + "pimcore/admin-ui-classic-bundle": "<=1.4.2", + "pimcore/customer-management-framework-bundle": "<4.0.6", + "pimcore/data-hub": "<1.2.4", + "pimcore/demo": "<10.3", + "pimcore/ecommerce-framework-bundle": "<1.0.10", + "pimcore/perspective-editor": "<1.5.1", + "pimcore/pimcore": "<11.2.4", + "pixelfed/pixelfed": "<0.11.11", + "plotly/plotly.js": "<2.25.2", + "pocketmine/bedrock-protocol": "<8.0.2", + "pocketmine/pocketmine-mp": "<5.11.2", + "pocketmine/raklib": ">=0.14,<0.14.6|>=0.15,<0.15.1", + "pressbooks/pressbooks": "<5.18", + "prestashop/autoupgrade": ">=4,<4.10.1", + "prestashop/blockreassurance": "<=5.1.3", + "prestashop/blockwishlist": ">=2,<2.1.1", + "prestashop/contactform": ">=1.0.1,<4.3", + "prestashop/gamification": "<2.3.2", + "prestashop/prestashop": "<8.1.6", + "prestashop/productcomments": "<5.0.2", + "prestashop/ps_emailsubscription": "<2.6.1", + "prestashop/ps_facetedsearch": "<3.4.1", + "prestashop/ps_linklist": "<3.1", + "privatebin/privatebin": "<1.4|>=1.5,<1.7.4", + "processwire/processwire": "<=3.0.229", + "propel/propel": ">=2.0.0.0-alpha1,<=2.0.0.0-alpha7", + "propel/propel1": ">=1,<=1.7.1", + "pterodactyl/panel": "<1.11.6", + "ptheofan/yii2-statemachine": ">=2.0.0.0-RC1-dev,<=2", + "ptrofimov/beanstalk_console": "<1.7.14", + "pubnub/pubnub": "<6.1", + "pusher/pusher-php-server": "<2.2.1", + "pwweb/laravel-core": "<=0.3.6.0-beta", + "pyrocms/pyrocms": "<=3.9.1", + "qcubed/qcubed": "<=3.1.1", + "quickapps/cms": "<=2.0.0.0-beta2", + "rainlab/blog-plugin": "<1.4.1", + "rainlab/debugbar-plugin": "<3.1", + "rainlab/user-plugin": "<=1.4.5", + "rankmath/seo-by-rank-math": "<=1.0.95", + "rap2hpoutre/laravel-log-viewer": "<0.13", + "react/http": ">=0.7,<1.9", + "really-simple-plugins/complianz-gdpr": "<6.4.2", + "redaxo/source": "<=5.15.1", + "remdex/livehelperchat": "<4.29", + "reportico-web/reportico": "<=8.1", + "rhukster/dom-sanitizer": "<1.0.7", + "rmccue/requests": ">=1.6,<1.8", + "robrichards/xmlseclibs": ">=1,<3.0.4", + "roots/soil": "<4.1", + "rudloff/alltube": "<3.0.3", + "s-cart/core": "<6.9", + "s-cart/s-cart": "<6.9", + "sabberworm/php-css-parser": ">=1,<1.0.1|>=2,<2.0.1|>=3,<3.0.1|>=4,<4.0.1|>=5,<5.0.9|>=5.1,<5.1.3|>=5.2,<5.2.1|>=6,<6.0.2|>=7,<7.0.4|>=8,<8.0.1|>=8.1,<8.1.1|>=8.2,<8.2.1|>=8.3,<8.3.1", + "sabre/dav": ">=1.6,<1.7.11|>=1.8,<1.8.9", + "scheb/two-factor-bundle": "<3.26|>=4,<4.11", + "sensiolabs/connect": "<4.2.3", + "serluck/phpwhois": "<=4.2.6", + "sfroemken/url_redirect": "<=1.2.1", + "sheng/yiicms": "<=1.2", + "shopware/core": "<6.5.8.8-dev|>=6.6.0.0-RC1-dev,<6.6.1", + "shopware/platform": "<6.5.8.8-dev|>=6.6.0.0-RC1-dev,<6.6.1", + "shopware/production": "<=6.3.5.2", + "shopware/shopware": "<=5.7.17", + "shopware/storefront": "<=6.4.8.1|>=6.5.8,<6.5.8.7-dev", + "shopxo/shopxo": "<=6.1", + "showdoc/showdoc": "<2.10.4", + "silverstripe-australia/advancedreports": ">=1,<=2", + "silverstripe/admin": "<1.13.19|>=2,<2.1.8", + "silverstripe/assets": ">=1,<1.11.1", + "silverstripe/cms": "<4.11.3", + "silverstripe/comments": ">=1.3,<3.1.1", + "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3", + "silverstripe/framework": "<5.2.16", + "silverstripe/graphql": ">=2,<2.0.5|>=3,<3.8.2|>=4,<4.3.7|>=5,<5.1.3", + "silverstripe/hybridsessions": ">=1,<2.4.1|>=2.5,<2.5.1", + "silverstripe/recipe-cms": ">=4.5,<4.5.3", + "silverstripe/registry": ">=2.1,<2.1.2|>=2.2,<2.2.1", + "silverstripe/reports": "<5.2.3", + "silverstripe/restfulserver": ">=1,<1.0.9|>=2,<2.0.4|>=2.1,<2.1.2", + "silverstripe/silverstripe-omnipay": "<2.5.2|>=3,<3.0.2|>=3.1,<3.1.4|>=3.2,<3.2.1", + "silverstripe/subsites": ">=2,<2.6.1", + "silverstripe/taxonomy": ">=1.3,<1.3.1|>=2,<2.0.1", + "silverstripe/userforms": "<3|>=5,<5.4.2", + "silverstripe/versioned-admin": ">=1,<1.11.1", + "simple-updates/phpwhois": "<=1", + "simplesamlphp/saml2": "<1.10.6|>=2,<2.3.8|>=3,<3.1.4|==5.0.0.0-alpha12", + "simplesamlphp/simplesamlphp": "<1.18.6", + "simplesamlphp/simplesamlphp-module-infocard": "<1.0.1", + "simplesamlphp/simplesamlphp-module-openid": "<1", + "simplesamlphp/simplesamlphp-module-openidprovider": "<0.9", + "simplesamlphp/xml-security": "==1.6.11", + "simplito/elliptic-php": "<1.0.6", + "sitegeist/fluid-components": "<3.5", + "sjbr/sr-freecap": "<2.4.6|>=2.5,<2.5.3", + "slim/psr7": "<1.4.1|>=1.5,<1.5.1|>=1.6,<1.6.1", + "slim/slim": "<2.6", + "slub/slub-events": "<3.0.3", + "smarty/smarty": "<4.5.3|>=5,<5.1.1", + "snipe/snipe-it": "<6.4.2", + "socalnick/scn-social-auth": "<1.15.2", + "socialiteproviders/steam": "<1.1", + "spatie/browsershot": "<3.57.4", + "spatie/image-optimizer": "<1.7.3", + "spipu/html2pdf": "<5.2.8", + "spoon/library": "<1.4.1", + "spoonity/tcpdf": "<6.2.22", + "squizlabs/php_codesniffer": ">=1,<2.8.1|>=3,<3.0.1", + "ssddanbrown/bookstack": "<24.05.1", + "statamic/cms": "<4.46|>=5.3,<5.6.2", + "stormpath/sdk": "<9.9.99", + "studio-42/elfinder": "<2.1.62", + "studiomitte/friendlycaptcha": "<0.1.4", + "subhh/libconnect": "<7.0.8|>=8,<8.1", + "sukohi/surpass": "<1", + "sulu/form-bundle": ">=2,<2.5.3", + "sulu/sulu": "<1.6.44|>=2,<2.4.17|>=2.5,<2.5.13", + "sumocoders/framework-user-bundle": "<1.4", + "superbig/craft-audit": "<3.0.2", + "swag/paypal": "<5.4.4", + "swiftmailer/swiftmailer": "<6.2.5", + "swiftyedit/swiftyedit": "<1.2", + "sylius/admin-bundle": ">=1,<1.0.17|>=1.1,<1.1.9|>=1.2,<1.2.2", + "sylius/grid": ">=1,<1.1.19|>=1.2,<1.2.18|>=1.3,<1.3.13|>=1.4,<1.4.5|>=1.5,<1.5.1", + "sylius/grid-bundle": "<1.10.1", + "sylius/paypal-plugin": ">=1,<1.2.4|>=1.3,<1.3.1", + "sylius/resource-bundle": ">=1,<1.3.14|>=1.4,<1.4.7|>=1.5,<1.5.2|>=1.6,<1.6.4", + "sylius/sylius": "<1.12.19|>=1.13.0.0-alpha1,<1.13.4", + "symbiote/silverstripe-multivaluefield": ">=3,<3.1", + "symbiote/silverstripe-queuedjobs": ">=3,<3.0.2|>=3.1,<3.1.4|>=4,<4.0.7|>=4.1,<4.1.2|>=4.2,<4.2.4|>=4.3,<4.3.3|>=4.4,<4.4.3|>=4.5,<4.5.1|>=4.6,<4.6.4", + "symbiote/silverstripe-seed": "<6.0.3", + "symbiote/silverstripe-versionedfiles": "<=2.0.3", + "symfont/process": ">=0", + "symfony/cache": ">=3.1,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8", + "symfony/dependency-injection": ">=2,<2.0.17|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", + "symfony/error-handler": ">=4.4,<4.4.4|>=5,<5.0.4", + "symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.20|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1", + "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7|>=5.3.14,<5.3.15|>=5.4.3,<5.4.4|>=6.0.3,<6.0.4", + "symfony/http-foundation": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7", + "symfony/http-kernel": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6", + "symfony/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13", + "symfony/maker-bundle": ">=1.27,<1.29.2|>=1.30,<1.31.1", + "symfony/mime": ">=4.3,<4.3.8", + "symfony/phpunit-bridge": ">=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", + "symfony/polyfill": ">=1,<1.10", + "symfony/polyfill-php55": ">=1,<1.10", + "symfony/proxy-manager-bridge": ">=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", + "symfony/routing": ">=2,<2.0.19", + "symfony/security": ">=2,<2.7.51|>=2.8,<3.4.49|>=4,<4.4.24|>=5,<5.2.8", + "symfony/security-bundle": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6", + "symfony/security-core": ">=2.4,<2.6.13|>=2.7,<2.7.9|>=2.7.30,<2.7.32|>=2.8,<3.4.49|>=4,<4.4.24|>=5,<5.2.9", + "symfony/security-csrf": ">=2.4,<2.7.48|>=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", + "symfony/security-guard": ">=2.8,<3.4.48|>=4,<4.4.23|>=5,<5.2.8", + "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7|>=5.1,<5.2.8|>=5.3,<5.3.2|>=5.4,<5.4.31|>=6,<6.3.8", + "symfony/serializer": ">=2,<2.0.11|>=4.1,<4.4.35|>=5,<5.3.12", + "symfony/symfony": ">=2,<4.4.51|>=5,<5.4.31|>=6,<6.3.8", + "symfony/translation": ">=2,<2.0.17", + "symfony/twig-bridge": ">=2,<4.4.51|>=5,<5.4.31|>=6,<6.3.8", + "symfony/ux-autocomplete": "<2.11.2", + "symfony/validator": ">=2,<2.0.24|>=2.1,<2.1.12|>=2.2,<2.2.5|>=2.3,<2.3.3", + "symfony/var-exporter": ">=4.2,<4.2.12|>=4.3,<4.3.8", + "symfony/web-profiler-bundle": ">=2,<2.3.19|>=2.4,<2.4.9|>=2.5,<2.5.4", + "symfony/webhook": ">=6.3,<6.3.8", + "symfony/yaml": ">=2,<2.0.22|>=2.1,<2.1.7|>=2.2.0.0-beta1,<2.2.0.0-beta2", + "symphonycms/symphony-2": "<2.6.4", + "t3/dce": "<0.11.5|>=2.2,<2.6.2", + "t3g/svg-sanitizer": "<1.0.3", + "t3s/content-consent": "<1.0.3|>=2,<2.0.2", + "tastyigniter/tastyigniter": "<3.3", + "tcg/voyager": "<=1.4", + "tecnickcom/tcpdf": "<=6.7.4", + "terminal42/contao-tablelookupwizard": "<3.3.5", + "thelia/backoffice-default-template": ">=2.1,<2.1.2", + "thelia/thelia": ">=2.1,<2.1.3", + "theonedemon/phpwhois": "<=4.2.5", + "thinkcmf/thinkcmf": "<6.0.8", + "thorsten/phpmyfaq": "<3.2.2", + "tikiwiki/tiki-manager": "<=17.1", + "timber/timber": ">=0.16.6,<1.23.1|>=1.24,<1.24.1|>=2,<2.1", + "tinymce/tinymce": "<7.2", + "tinymighty/wiki-seo": "<1.2.2", + "titon/framework": "<9.9.99", + "tobiasbg/tablepress": "<=2.0.0.0-RC1", + "topthink/framework": "<6.0.17|>=6.1,<6.1.5|>=8,<8.0.4", + "topthink/think": "<=6.1.1", + "topthink/thinkphp": "<=3.2.3", + "torrentpier/torrentpier": "<=2.4.3", + "tpwd/ke_search": "<4.0.3|>=4.1,<4.6.6|>=5,<5.0.2", + "tribalsystems/zenario": "<9.5.60602", + "truckersmp/phpwhois": "<=4.3.1", + "ttskch/pagination-service-provider": "<1", + "twig/twig": "<1.44.7|>=2,<2.15.3|>=3,<3.4.3", + "typo3/cms": "<9.5.29|>=10,<10.4.35|>=11,<11.5.23|>=12,<12.2", + "typo3/cms-backend": "<4.1.14|>=4.2,<4.2.15|>=4.3,<4.3.7|>=4.4,<4.4.4|>=7,<=7.6.50|>=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", + "typo3/cms-core": "<=8.7.56|>=9,<=9.5.47|>=10,<=10.4.44|>=11,<=11.5.36|>=12,<=12.4.14|>=13,<=13.1", + "typo3/cms-extbase": "<6.2.24|>=7,<7.6.8|==8.1.1", + "typo3/cms-fluid": "<4.3.4|>=4.4,<4.4.1", + "typo3/cms-form": ">=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", + "typo3/cms-frontend": "<4.3.9|>=4.4,<4.4.5", + "typo3/cms-install": "<4.1.14|>=4.2,<4.2.16|>=4.3,<4.3.9|>=4.4,<4.4.5|>=12.2,<12.4.8", + "typo3/cms-rte-ckeditor": ">=9.5,<9.5.42|>=10,<10.4.39|>=11,<11.5.30", + "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6", + "typo3/html-sanitizer": ">=1,<=1.5.2|>=2,<=2.1.3", + "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<2.3.99|>=3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<3.3.23|>=4,<4.0.17|>=4.1,<4.1.16|>=4.2,<4.2.12|>=4.3,<4.3.3", + "typo3/phar-stream-wrapper": ">=1,<2.1.1|>=3,<3.1.1", + "typo3/swiftmailer": ">=4.1,<4.1.99|>=5.4,<5.4.5", + "typo3fluid/fluid": ">=2,<2.0.8|>=2.1,<2.1.7|>=2.2,<2.2.4|>=2.3,<2.3.7|>=2.4,<2.4.4|>=2.5,<2.5.11|>=2.6,<2.6.10", + "ua-parser/uap-php": "<3.8", + "uasoft-indonesia/badaso": "<=2.9.7", + "unisharp/laravel-filemanager": "<2.6.4", + "userfrosting/userfrosting": ">=0.3.1,<4.6.3", + "usmanhalalit/pixie": "<1.0.3|>=2,<2.0.2", + "uvdesk/community-skeleton": "<=1.1.1", + "uvdesk/core-framework": "<=1.1.1", + "vanilla/safecurl": "<0.9.2", + "verbb/comments": "<1.5.5", + "verbb/formie": "<2.1.6", + "verbb/image-resizer": "<2.0.9", + "verbb/knock-knock": "<1.2.8", + "verot/class.upload.php": "<=2.1.6", + "villagedefrance/opencart-overclocked": "<=1.11.1", + "vova07/yii2-fileapi-widget": "<0.1.9", + "vrana/adminer": "<4.8.1", + "vufind/vufind": ">=2,<9.1.1", + "waldhacker/hcaptcha": "<2.1.2", + "wallabag/tcpdf": "<6.2.22", + "wallabag/wallabag": "<2.6.7", + "wanglelecc/laracms": "<=1.0.3", + "web-auth/webauthn-framework": ">=3.3,<3.3.4|>=4.5,<4.9", + "web-auth/webauthn-lib": ">=4.5,<4.9", + "web-feet/coastercms": "==5.5", + "webbuilders-group/silverstripe-kapost-bridge": "<0.4", + "webcoast/deferred-image-processing": "<1.0.2", + "webklex/laravel-imap": "<5.3", + "webklex/php-imap": "<5.3", + "webpa/webpa": "<3.1.2", + "wikibase/wikibase": "<=1.39.3", + "wikimedia/parsoid": "<0.12.2", + "willdurand/js-translation-bundle": "<2.1.1", + "winter/wn-backend-module": "<1.2.4", + "winter/wn-dusk-plugin": "<2.1", + "winter/wn-system-module": "<1.2.4", + "wintercms/winter": "<=1.2.3", + "woocommerce/woocommerce": "<6.6|>=8.8,<8.8.5|>=8.9,<8.9.3", + "wp-cli/wp-cli": ">=0.12,<2.5", + "wp-graphql/wp-graphql": "<=1.14.5", + "wp-premium/gravityforms": "<2.4.21", + "wpanel/wpanel4-cms": "<=4.3.1", + "wpcloud/wp-stateless": "<3.2", + "wpglobus/wpglobus": "<=1.9.6", + "wwbn/avideo": "<14.3", + "xataface/xataface": "<3", + "xpressengine/xpressengine": "<3.0.15", + "yab/quarx": "<2.4.5", + "yeswiki/yeswiki": "<4.1", + "yetiforce/yetiforce-crm": "<=6.4", + "yidashi/yii2cmf": "<=2", + "yii2mod/yii2-cms": "<1.9.2", + "yiisoft/yii": "<1.1.29", + "yiisoft/yii2": "<2.0.49.4-dev", + "yiisoft/yii2-authclient": "<2.2.15", + "yiisoft/yii2-bootstrap": "<2.0.4", + "yiisoft/yii2-dev": "<2.0.43", + "yiisoft/yii2-elasticsearch": "<2.0.5", + "yiisoft/yii2-gii": "<=2.2.4", + "yiisoft/yii2-jui": "<2.0.4", + "yiisoft/yii2-redis": "<2.0.8", + "yikesinc/yikes-inc-easy-mailchimp-extender": "<6.8.6", + "yoast-seo-for-typo3/yoast_seo": "<7.2.3", + "yourls/yourls": "<=1.8.2", + "yuan1994/tpadmin": "<=1.3.12", + "zencart/zencart": "<=1.5.7.0-beta", + "zendesk/zendesk_api_client_php": "<2.2.11", + "zendframework/zend-cache": ">=2.4,<2.4.8|>=2.5,<2.5.3", + "zendframework/zend-captcha": ">=2,<2.4.9|>=2.5,<2.5.2", + "zendframework/zend-crypt": ">=2,<2.4.9|>=2.5,<2.5.2", + "zendframework/zend-db": "<2.2.10|>=2.3,<2.3.5", + "zendframework/zend-developer-tools": ">=1.2.2,<1.2.3", + "zendframework/zend-diactoros": "<1.8.4", + "zendframework/zend-feed": "<2.10.3", + "zendframework/zend-form": ">=2,<2.2.7|>=2.3,<2.3.1", + "zendframework/zend-http": "<2.8.1", + "zendframework/zend-json": ">=2.1,<2.1.6|>=2.2,<2.2.6", + "zendframework/zend-ldap": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.8|>=2.3,<2.3.3", + "zendframework/zend-mail": "<2.4.11|>=2.5,<2.7.2", + "zendframework/zend-navigation": ">=2,<2.2.7|>=2.3,<2.3.1", + "zendframework/zend-session": ">=2,<2.2.9|>=2.3,<2.3.4", + "zendframework/zend-validator": ">=2.3,<2.3.6", + "zendframework/zend-view": ">=2,<2.2.7|>=2.3,<2.3.1", + "zendframework/zend-xmlrpc": ">=2.1,<2.1.6|>=2.2,<2.2.6", + "zendframework/zendframework": "<=3", + "zendframework/zendframework1": "<1.12.20", + "zendframework/zendopenid": "<2.0.2", + "zendframework/zendrest": "<2.0.2", + "zendframework/zendservice-amazon": "<2.0.3", + "zendframework/zendservice-api": "<1", + "zendframework/zendservice-audioscrobbler": "<2.0.2", + "zendframework/zendservice-nirvanix": "<2.0.2", + "zendframework/zendservice-slideshare": "<2.0.2", + "zendframework/zendservice-technorati": "<2.0.2", + "zendframework/zendservice-windowsazure": "<2.0.2", + "zendframework/zendxml": ">=1,<1.0.1", + "zenstruck/collection": "<0.2.1", + "zetacomponents/mail": "<1.8.2", + "zf-commons/zfc-user": "<1.2.2", + "zfcampus/zf-apigility-doctrine": ">=1,<1.0.3", + "zfr/zfr-oauth2-server-module": "<0.1.2", + "zoujingli/thinkadmin": "<=6.1.53" + }, + "default-branch": true, + "type": "metapackage", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "role": "maintainer" + }, + { + "name": "Ilya Tribusean", + "email": "slash3b@gmail.com", + "role": "maintainer" + } + ], + "description": "Prevents installation of composer packages with known security vulnerabilities: no API, simply require it", + "keywords": [ + "dev" + ], + "support": { + "issues": "https://github.com/Roave/SecurityAdvisories/issues", + "source": "https://github.com/Roave/SecurityAdvisories/tree/latest" + }, + "funding": [ + { + "url": "https://github.com/Ocramius", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/roave/security-advisories", + "type": "tidelift" + } + ], + "time": "2024-07-26T15:04:59+00:00" + }, { "name": "sebastian/cli-parser", "version": "3.0.2", @@ -7757,6 +8792,86 @@ ], "time": "2024-07-03T05:13:08+00:00" }, + { + "name": "squizlabs/php_codesniffer", + "version": "3.10.2", + "source": { + "type": "git", + "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", + "reference": "86e5f5dd9a840c46810ebe5ff1885581c42a3017" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/86e5f5dd9a840c46810ebe5ff1885581c42a3017", + "reference": "86e5f5dd9a840c46810ebe5ff1885581c42a3017", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4" + }, + "bin": [ + "bin/phpcbf", + "bin/phpcs" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "Former lead" + }, + { + "name": "Juliette Reinders Folmer", + "role": "Current lead" + }, + { + "name": "Contributors", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer", + "keywords": [ + "phpcs", + "standards", + "static analysis" + ], + "support": { + "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues", + "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy", + "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer", + "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki" + }, + "funding": [ + { + "url": "https://github.com/PHPCSStandards", + "type": "github" + }, + { + "url": "https://github.com/jrfnl", + "type": "github" + }, + { + "url": "https://opencollective.com/php_codesniffer", + "type": "open_collective" + } + ], + "time": "2024-07-21T23:26:44+00:00" + }, { "name": "symfony/yaml", "version": "v7.1.1", @@ -7881,11 +8996,16 @@ ], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": { + "roave/security-advisories": 20 + }, "prefer-stable": true, "prefer-lowest": false, "platform": { - "php": "^8.2" + "php": "^8.3", + "ext-fileinfo": "*", + "ext-gd": "*", + "ext-pdo": "*" }, "platform-dev": [], "plugin-api-version": "2.6.0" diff --git a/config/app.php b/config/app.php index f467267..dfeb5ac 100644 --- a/config/app.php +++ b/config/app.php @@ -1,5 +1,7 @@ env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache_'), + 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_') . '_cache_'), ]; diff --git a/config/common.php b/config/common.php new file mode 100644 index 0000000..062374f --- /dev/null +++ b/config/common.php @@ -0,0 +1,24 @@ + [ + 'flush_cache' => true, + 'model' => [ + 'venue' => [ + 'count' => 20, + ], + 'event' => [ + 'count' => 50, + ], + ], + ], +]; diff --git a/config/database.php b/config/database.php index 125949e..25e064c 100644 --- a/config/database.php +++ b/config/database.php @@ -147,7 +147,7 @@ return [ 'options' => [ 'cluster' => env('REDIS_CLUSTER', 'redis'), - 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'), + 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_') . '_database_'), ], 'default' => [ diff --git a/config/filesystems.php b/config/filesystems.php index c5f244d..8009a25 100644 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -39,7 +39,7 @@ return [ 'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), - 'url' => env('APP_URL').'/storage', + 'url' => env('APP_URL') . '/storage', 'visibility' => 'public', 'throw' => false, ], diff --git a/config/image.php b/config/image.php new file mode 100644 index 0000000..621839c --- /dev/null +++ b/config/image.php @@ -0,0 +1,39 @@ + [ + 'provider' => [ + 'loremflickr' => [ + "host" => "https://loremflickr.com/", + 'type' => FakerImageProviderType::LoremFlickr, + ], + ], + 'cropper' => [800], //see Image facade's method "cropAlign" for details + ], + 'storage' => [ + 'poster' => 'public/images/poster', + ], + 'verbosity' => true, + "log_path" => 'logs/image_facade.log', + 'meta' => [ + 'width' => 0, + 'height' => 1, + 'type' => 2, + 'tag' => 3, + 'bits' => 'bits', + 'channels' => 'channels', + 'mime' => 'mime', + ], + 'mime_allowed' => ["image/jpeg", "image/gif", "image/png"], +]; diff --git a/config/logging.php b/config/logging.php index 8d94292..2f95f73 100644 --- a/config/logging.php +++ b/config/logging.php @@ -89,7 +89,7 @@ return [ 'handler_with' => [ 'host' => env('PAPERTRAIL_URL'), 'port' => env('PAPERTRAIL_PORT'), - 'connectionString' => 'tls://'.env('PAPERTRAIL_URL').':'.env('PAPERTRAIL_PORT'), + 'connectionString' => 'tls://' . env('PAPERTRAIL_URL') . ':' . env('PAPERTRAIL_PORT'), ], 'processors' => [PsrLogMessageProcessor::class], ], @@ -122,9 +122,9 @@ return [ 'driver' => 'monolog', 'handler' => NullHandler::class, ], - - 'emergency' => [ - 'path' => storage_path('logs/laravel.log'), + 'app' => [ + 'driver' => 'single', + 'path' => storage_path('logs/app.log'), ], ], diff --git a/config/session.php b/config/session.php index f0b6541..4683a9b 100644 --- a/config/session.php +++ b/config/session.php @@ -129,7 +129,7 @@ return [ 'cookie' => env( 'SESSION_COOKIE', - Str::slug(env('APP_NAME', 'laravel'), '_').'_session' + Str::slug(env('APP_NAME', 'laravel'), '_') . '_session' ), /* diff --git a/database/factories/EventFactory.php b/database/factories/EventFactory.php new file mode 100644 index 0000000..e2b21c1 --- /dev/null +++ b/database/factories/EventFactory.php @@ -0,0 +1,56 @@ + + */ +class EventFactory extends Factory +{ + private const int NB_WORDS = 5; + + /** + * Define the model's default state. + * + * @return array + * @throws RandomException + */ + public function definition(): array + { + static $venuesCount = config('common.seeding.model.venue.count'); + static $counter = 1; + static $imageProvider = app(FakerImageProvider::class)->use(config('image.faker.provider.loremflickr.type')) + ->apply(); + + $image = new ImageStorage( + config('image.storage.poster'), + random_int(400, 1280), + random_int(400, 960), + ProviderInterface::KEYWORDS + ); + + $poster = $imageProvider->getImage($image); + + // Note: numberBetween method is unsafe if you need all `venues`.`id` values be used for constraining ¯\_(ツ)_/¯ + $venuesId = $counter > $venuesCount ? $this->faker->numberBetween(1, $venuesCount) : $counter++; + + return [ + 'venue_id' => $venuesId, + 'name' => Str::of($this->faker->sentence(self::NB_WORDS))->rtrim('.'), + 'event_date' => $this->faker->unique()->dateTimeBetween( + '-3 months', + '3 months', + env('APP_TIMEZONE', 'UTC') + ), + 'poster' => $poster, + ]; + } +} diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php index 584104c..be20797 100644 --- a/database/factories/UserFactory.php +++ b/database/factories/UserFactory.php @@ -27,7 +27,7 @@ class UserFactory extends Factory 'name' => fake()->name(), 'email' => fake()->unique()->safeEmail(), 'email_verified_at' => now(), - 'password' => static::$password ??= Hash::make('password'), + 'password' => static::$password ??= Hash::make('What_the_heck?'), 'remember_token' => Str::random(10), ]; } diff --git a/database/factories/VenueFactory.php b/database/factories/VenueFactory.php new file mode 100644 index 0000000..5bc8fa1 --- /dev/null +++ b/database/factories/VenueFactory.php @@ -0,0 +1,27 @@ + + */ +class VenueFactory extends Factory +{ + + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + 'name' => $this->faker->catchPhrase, + ]; + } +} diff --git a/database/migrations/0001_01_01_000000_create_users_table.php b/database/migrations/0001_01_01_000000_create_users_table.php index 05fb5d9..6bc697a 100644 --- a/database/migrations/0001_01_01_000000_create_users_table.php +++ b/database/migrations/0001_01_01_000000_create_users_table.php @@ -11,7 +11,7 @@ return new class extends Migration */ public function up(): void { - Schema::create('users', function (Blueprint $table) { + Schema::create('users', static function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('email')->unique(); @@ -21,13 +21,13 @@ return new class extends Migration $table->timestamps(); }); - Schema::create('password_reset_tokens', function (Blueprint $table) { + Schema::create('password_reset_tokens', static function (Blueprint $table) { $table->string('email')->primary(); $table->string('token'); $table->timestamp('created_at')->nullable(); }); - Schema::create('sessions', function (Blueprint $table) { + Schema::create('sessions', static function (Blueprint $table) { $table->string('id')->primary(); $table->foreignId('user_id')->nullable()->index(); $table->string('ip_address', 45)->nullable(); diff --git a/database/migrations/0001_01_01_000001_create_cache_table.php b/database/migrations/0001_01_01_000001_create_cache_table.php index b9c106b..f983eba 100644 --- a/database/migrations/0001_01_01_000001_create_cache_table.php +++ b/database/migrations/0001_01_01_000001_create_cache_table.php @@ -11,13 +11,13 @@ return new class extends Migration */ public function up(): void { - Schema::create('cache', function (Blueprint $table) { + Schema::create('cache', static function (Blueprint $table) { $table->string('key')->primary(); $table->mediumText('value'); $table->integer('expiration'); }); - Schema::create('cache_locks', function (Blueprint $table) { + Schema::create('cache_locks', static function (Blueprint $table) { $table->string('key')->primary(); $table->string('owner'); $table->integer('expiration'); diff --git a/database/migrations/0001_01_01_000002_create_jobs_table.php b/database/migrations/0001_01_01_000002_create_jobs_table.php index 425e705..b8083e1 100644 --- a/database/migrations/0001_01_01_000002_create_jobs_table.php +++ b/database/migrations/0001_01_01_000002_create_jobs_table.php @@ -11,7 +11,7 @@ return new class extends Migration */ public function up(): void { - Schema::create('jobs', function (Blueprint $table) { + Schema::create('jobs', static function (Blueprint $table) { $table->id(); $table->string('queue')->index(); $table->longText('payload'); @@ -21,7 +21,7 @@ return new class extends Migration $table->unsignedInteger('created_at'); }); - Schema::create('job_batches', function (Blueprint $table) { + Schema::create('job_batches', static function (Blueprint $table) { $table->string('id')->primary(); $table->string('name'); $table->integer('total_jobs'); diff --git a/database/migrations/2024_07_26_073099_create_venues_table.php b/database/migrations/2024_07_26_073099_create_venues_table.php new file mode 100644 index 0000000..aca6959 --- /dev/null +++ b/database/migrations/2024_07_26_073099_create_venues_table.php @@ -0,0 +1,27 @@ +id(); + $table->string('name', 255)->unique(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('venues'); + } +}; diff --git a/database/migrations/2024_07_26_073100_create_events_table.php b/database/migrations/2024_07_26_073100_create_events_table.php new file mode 100644 index 0000000..2285b10 --- /dev/null +++ b/database/migrations/2024_07_26_073100_create_events_table.php @@ -0,0 +1,30 @@ +id(); + $table->foreignId('venue_id')->nullable()->constrained()->nullOnDelete(); + $table->string('name', 255)->unique(); + $table->date('event_date'); + $table->string('poster', 255); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('events'); + } +}; diff --git a/database/migrations/2024_07_28_151158_drop_sessions_table.php b/database/migrations/2024_07_28_151158_drop_sessions_table.php new file mode 100644 index 0000000..e195cae --- /dev/null +++ b/database/migrations/2024_07_28_151158_drop_sessions_table.php @@ -0,0 +1,31 @@ +string('id')->primary(); + $table->foreignId('user_id')->nullable()->index(); + $table->string('ip_address', 45)->nullable(); + $table->text('user_agent')->nullable(); + $table->longText('payload'); + $table->integer('last_activity')->index(); + }); + } +}; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index d01a0ef..5db9003 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -1,10 +1,13 @@ create(); + if (config('common.seeding.flush_cache') ?? false) { + Cache::flush(); + } - User::factory()->create([ - 'name' => 'Test User', - 'email' => 'test@example.com', + + $this->call([ + UserSeeder::class, + VenueSeeder::class, + EventSeeder::class, ]); } } diff --git a/database/seeders/EventSeeder.php b/database/seeders/EventSeeder.php new file mode 100644 index 0000000..ec25d63 --- /dev/null +++ b/database/seeders/EventSeeder.php @@ -0,0 +1,20 @@ +create(); + } +} diff --git a/database/seeders/UserSeeder.php b/database/seeders/UserSeeder.php new file mode 100644 index 0000000..d8fb432 --- /dev/null +++ b/database/seeders/UserSeeder.php @@ -0,0 +1,24 @@ +create([ + 'name' => 'Jane Doe', + 'email' => 'jane.doe@example.com', + ]); + } +} diff --git a/database/seeders/VenueSeeder.php b/database/seeders/VenueSeeder.php new file mode 100644 index 0000000..89bbc88 --- /dev/null +++ b/database/seeders/VenueSeeder.php @@ -0,0 +1,23 @@ +create(); + //->hasEvents(3)->create(); //Impossible to count 50 events for 20 venues + } +} diff --git a/package-lock.json b/package-lock.json index bc78f50..f3350b1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,11 +7,12 @@ "devDependencies": { "@tailwindcss/forms": "^0.5.2", "alpinejs": "^3.4.2", - "autoprefixer": "^10.4.2", + "autoprefixer": "^10.4.19", "axios": "^1.6.4", "laravel-vite-plugin": "^1.0", - "postcss": "^8.4.31", - "tailwindcss": "^3.1.0", + "postcss": "^8.4.40", + "sass": "^1.77.8", + "tailwindcss": "^3.4.6", "vite": "^5.0" } }, @@ -1169,9 +1170,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.0.tgz", - "integrity": "sha512-Vb3xHHYnLseK8vlMJQKJYXJ++t4u1/qJ3vykuVrVjvdiOEhYyT1AuP4x03G8EnPmYvYOhe9T+dADTmthjRQMkA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.1.tgz", + "integrity": "sha512-FKbOCOQ5QRB3VlIbl1LZQefWIYwszlBloaXcY2rbfpu9ioJnNh3TK03YtIDKDo3WKBi8u+YV4+Fn2CkEozgf4w==", "dev": true, "license": "ISC" }, @@ -1423,6 +1424,13 @@ "node": ">= 0.4" } }, + "node_modules/immutable": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "dev": true, + "license": "MIT" + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -1815,9 +1823,9 @@ } }, "node_modules/postcss": { - "version": "8.4.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz", - "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==", + "version": "8.4.40", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.40.tgz", + "integrity": "sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==", "dev": true, "funding": [ { @@ -2117,6 +2125,24 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/sass": { + "version": "1.77.8", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.8.tgz", + "integrity": "sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", diff --git a/package.json b/package.json index e158669..207f977 100644 --- a/package.json +++ b/package.json @@ -3,16 +3,26 @@ "type": "module", "scripts": { "dev": "vite", - "build": "vite build" + "build": "vite build", + "serve": "php artisan serve", + "storage:link": "php artisan storage:link", + "browserslist:update": "npx browserslist@latest --update-db", + "browserslist": "npx browserslist", + "cache:clear": "php artisan optimize:clear", + "reseed": "php artisan migrate:fresh --seed" }, + "browserslist": [ + "cover 99.5%" + ], "devDependencies": { "@tailwindcss/forms": "^0.5.2", "alpinejs": "^3.4.2", - "autoprefixer": "^10.4.2", + "autoprefixer": "^10.4.19", "axios": "^1.6.4", "laravel-vite-plugin": "^1.0", - "postcss": "^8.4.31", - "tailwindcss": "^3.1.0", + "postcss": "^8.4.40", + "sass": "^1.77.8", + "tailwindcss": "^3.4.6", "vite": "^5.0" } } diff --git a/public/favicon.ico b/public/favicon.ico index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..67b8e32d1e9ab5c5208491c3fa5859f5a8a01215 100644 GIT binary patch literal 16958 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 ObAt}9m@Z-= + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/images/logo.png b/resources/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e2848fc0843b9dbc3b415c2c9908d706a8895e3a GIT binary patch literal 82715 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 IM6N<$g5{*{VE_OC literal 0 HcmV?d00001 diff --git a/resources/images/tiny_logo.png b/resources/images/tiny_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..2d92da422fad2ae1793574967318603b7550dc8b GIT binary patch literal 10214 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 -
- @if (Route::has('password.request')) - - {{ __('Forgot your password?') }} - - @endif +
+ + {{ __('Register') }} + - - {{ __('Log in') }} - +
+ @if (Route::has('password.request')) + + {{ __('Forgot your password?') }} + + @endif + + + {{ __('Log in') }} + +
diff --git a/resources/views/components/application-logo.blade.php b/resources/views/components/application-logo.blade.php index 46579cf..433e060 100644 --- a/resources/views/components/application-logo.blade.php +++ b/resources/views/components/application-logo.blade.php @@ -1,3 +1 @@ - - - +Logo \ No newline at end of file diff --git a/resources/views/errors/404.blade.php b/resources/views/errors/404.blade.php new file mode 100644 index 0000000..1df8468 --- /dev/null +++ b/resources/views/errors/404.blade.php @@ -0,0 +1,19 @@ + + + + + + + Page Not Found + + + + diff --git a/resources/views/model/event.blade.php b/resources/views/model/event.blade.php new file mode 100644 index 0000000..20d6688 --- /dev/null +++ b/resources/views/model/event.blade.php @@ -0,0 +1,13 @@ + + + + + + + Document + + + @dump($events) + + \ No newline at end of file diff --git a/resources/views/welcome.blade.php b/resources/views/welcome.blade.php index a9898e3..b45f527 100644 --- a/resources/views/welcome.blade.php +++ b/resources/views/welcome.blade.php @@ -1,172 +1,29 @@ - - - + + + - Laravel + Laravel - - - - - - - - -
- - + @vite('resources/scss/main.scss') + + + +
+ +
+@vite('resources/js/main.js') + diff --git a/routes/web.php b/routes/web.php index 74bb7ca..1c40622 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,20 +1,39 @@ group(callback: function () { + Route::get('/', static function () { + //return \App\Facades\Image::getName(); + return view('welcome'); + }); + + Route::get('/dashboard', static function () { + return view('dashboard'); + })->name('dashboard'); + + Route::resources([ + 'venues' => VenueController::class, + 'events' => EventController::class, + ]); + + Route::fallback(FallbackController::class)->name('not_found_fallback'); }); -Route::get('/dashboard', function () { - return view('dashboard'); -})->middleware(['auth', 'verified'])->name('dashboard'); - Route::middleware('auth')->group(function () { - Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit'); - Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update'); - Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy'); + Route::get('/profile', [ProfileController::class, 'edit'])->name( + 'profile.edit' + ); + Route::patch('/profile', [ProfileController::class, 'update'])->name( + 'profile.update' + ); + Route::delete('/profile', [ProfileController::class, 'destroy'])->name( + 'profile.destroy' + ); }); require __DIR__.'/auth.php'; + diff --git a/storage/debugbar/.gitignore b/storage/debugbar/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/debugbar/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/tailwind.config.js b/tailwind.config.js index c29eb1a..17c3db3 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -12,7 +12,7 @@ export default { theme: { extend: { fontFamily: { - sans: ['Figtree', ...defaultTheme.fontFamily.sans], + sans: ['-apple-system', 'BlinkMacSystemFont', 'Segoe UI', 'Roboto', 'Helvetica Neue', 'Arial', 'Noto Sans', 'sans-serif', "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji", ...defaultTheme.fontFamily.sans], }, }, }, diff --git a/vite.config.js b/vite.config.js index 89f26f5..c511811 100644 --- a/vite.config.js +++ b/vite.config.js @@ -6,7 +6,9 @@ export default defineConfig({ laravel({ input: [ 'resources/css/app.css', + 'resources/scss/main.scss', 'resources/js/app.js', + 'resources/js/main.js', ], refresh: true, }),