diff --git a/app/Console/Commands/CreateModelAndMigrationCommand.php b/app/Console/Commands/CreateModelAndMigrationCommand.php new file mode 100644 index 0000000..af6c4d3 --- /dev/null +++ b/app/Console/Commands/CreateModelAndMigrationCommand.php @@ -0,0 +1,100 @@ +option('momi')) { + $this->input->setOption('create_model', $this->option('momi')); + $this->input->setOption('create_migration', $this->option('momi')); + } + if ($this->option('create_model')) { + $this->createModel(); + } + if ($this->option('create_migration')) { + $this->createMigration(); + } + if ($this->option('add_migration')) { + $this->addMigration(); + } + } + + private function createModel() + { + try + { + $path = trim($this->argument('name')); + $model = Str::singular(class_basename($this->option('create_model'))); + $this->call('make:model', [ + 'name' => 'App\\Modules\\' . $path . '\\Models\\' . $model + ]); + } + catch (\Exception $e) + { + $e->getMessage(); + } + + } + + private function createMigration() + { + $path = trim($this->argument('name')); + $table = Str::plural(Str::snake(class_basename($this->option('create_migration')))); + try + { + $this->call('make:migration', [ + 'name' => 'create_' . $table . '_table', + '--create' => $table, + '--path' => 'app/Modules/' . $path . '/Database/Migrations' + ]); + } + catch (\Exception $e) + { + $e->getMessage(); + } + } + + private function addMigration() + { + $path = trim($this->argument('name')); + $table = $this->option('add_migration'); + try + { + $this->call('make:migration', [ + 'name' => $table, + '--path' => 'app/Modules/' . $path . '/Database/Migrations' + ]); + } + catch (\Exception $e) + { + $e->getMessage(); + } + } +} diff --git a/app/Console/Commands/CreateModuleCommand.php b/app/Console/Commands/CreateModuleCommand.php new file mode 100644 index 0000000..fe75004 --- /dev/null +++ b/app/Console/Commands/CreateModuleCommand.php @@ -0,0 +1,389 @@ +files = $files; + } + + /** + * Execute the console command. + */ + public function handle() + { + if ($this->option('all')) + { + $directory = $this->getDirectory($this->argument('name')); + if ($this->files->isDirectory($directory)) + { + $this->error('Module already exists!'); + } + else + { + $this->createProviders(); + $this->createConfig(); + + $this->createModel(); + $this->createMigration(); + + $this->createController(); + $this->createView(); + } + } + } + + private function getDirectory($directory) + { + return $this->laravel['path'] . + '/Modules/' . str_replace('\\', '/', $directory); + } + + private function createModel() + { + try + { + $model = Str::singular(class_basename($this->argument('name'))); + $this->call('make:model', [ + 'name' => 'App\\Modules\\' . trim($this->argument('name')) . '\\Models\\' . $model + ]); + } + catch (\Exception $e) + { + $e->getMessage(); + } + + } + + private function createView() + { + $directoryName = Str::singular(Str::studly(class_basename($this->argument('name')))); + $path = $this->getViewsPath($this->argument('name')); + if ($this->alreadyExists($path)) + { + $this->error('View already exists!'); + } + else + { + $this->makeDirectory($path); + + $stub = $this->files->get(base_path('resources/stubs/view.stub')); + $this->files->put($path, $stub); + $this->info('Views created'); + + //livewire + $path = $this->getLivewireViewsPath($this->argument('name')); + $this->makeDirectory($path); + $this->info('Views - livewire folder created'); + + //components + $path = $this->getComponentsViewsPath($this->argument('name')); + $this->makeDirectory($path); + $this->info('Views - components folder created'); + } + } + + private function getViewsPath($argument) + { + return $this->laravel['path'] . + '/Modules/' . str_replace('\\', '/', $argument) . '/Views/index.blade.php'; + } + + private function getLivewireViewsPath($argument) + { + return $this->laravel['path'] . + '/Modules/' . str_replace('\\', '/', $argument) . '/Views/livewire/example.php'; + } + + private function getComponentsViewsPath($argument) + { + return $this->laravel['path'] . + '/Modules/' . str_replace('\\', '/', $argument) . '/Views/components/example.php'; + } + + private function createConfig() + { + $directoryName = Str::singular(Str::studly(class_basename($this->argument('name')))); + $path = $this->getConfigPath($this->argument('name')); + if ($this->alreadyExists($path)) + { + $this->error('Config already exists!'); + } + else + { + $this->makeDirectory($path); + + $stub = $this->files->get(base_path('resources/stubs/config.stub')); + $this->files->put($path, $stub); + $this->info('Config created'); + } + } + + private function getConfigPath($argument) + { + return $this->laravel['path'] . + '/Modules/' . str_replace('\\', '/', $argument) . '/Config/config.php'; + } + + private function createProviders() + { + //Create ModuleServiceProvider + $directoryName = Str::singular(Str::studly(class_basename($this->argument('name')))); + $path = $this->getModuleServiceProviderPath($this->argument('name')); + if ($this->alreadyExists($path)) + { + $this->error('ModuleServiceProvider already exists!'); + } + else + { + $this->makeDirectory($path); + $stub = $this->files->get(base_path('resources/stubs/module_service_provider.stub')); + $stub = str_replace( + [ + 'TeamplateDirectoryName', + ], + [ + $directoryName + ], + $stub + ); + + $this->files->put($path, $stub); + $this->info('ModuleServiceProvider created'); + } + + //Create RouteServiceProvider + $path = $this->getRouteServiceProviderPath($this->argument('name')); + if ($this->alreadyExists($path)) + { + $this->error('RouteServiceProvider already exists!'); + } + else + { + $this->makeDirectory($path); + $stub = $this->files->get(base_path('resources/stubs/route_service_provider.stub')); + $stub = str_replace( + [ + 'TeamplateDirectoryName', + ], + [ + $directoryName + ], + $stub + ); + + $this->files->put($path, $stub); + $this->info('RouteServiceProvider created'); + } + } + + private function getModuleServiceProviderPath($argument) + { + return $this->laravel['path'] . + '/Modules/' . str_replace('\\', '/', $argument) . '/Providers/ModuleServiceProvider.php'; + } + + private function getRouteServiceProviderPath($argument) + { + return $this->laravel['path'] . + '/Modules/' . str_replace('\\', '/', $argument) . '/Providers/RouteServiceProvider.php'; + } + + private function createController() + { + $controller = Str::studly(class_basename($this->argument('name'))); + $modelName = Str::singular(Str::studly(class_basename($this->argument('name')))); + + $path = $this->getControllerPath($this->argument('name')); + + if ($this->alreadyExists($path)) + { + $this->error('Controller already exists!'); + } + else + { + $this->makeDirectory($path); + + $stub = $this->files->get(base_path('resources/stubs/controller.model.stub')); + + $stub = str_replace( + [ + 'TeamplateNamespace', + 'TeamplateFullModelClass', + 'TeamplateClass', + 'TeamplateDirectoryName' + ], + [ + 'Modules\\' . trim($this->argument('name')) . '\\Http\\Controllers', + 'Modules\\' . trim($this->argument('name')) . '\\Models\\' . $modelName, + $controller . 'Controller', + lcfirst($controller) + + ], + $stub + ); + + $this->files->put($path, $stub); + $this->info('Controller created'); + + //Livewire Http + $path = $this->getLivewireHttpPath($this->argument('name')); + $this->makeDirectory($path); + $this->info('Http - Livewire folder created'); + + //Components Http + $path = $this->getComponentsHttpPath($this->argument('name')); + $this->makeDirectory($path); + $this->info('Http - Components folder created'); + + //Policies Http + $path = $this->getPoliciesHttpPath($this->argument('name')); + $this->makeDirectory($path); + $this->info('Http - Policies folder created'); + + //Requests Http + $path = $this->getRequestsHttpPath($this->argument('name')); + $this->makeDirectory($path); + $this->info('Http - Requests folder created'); + + //Routes create + $this->createRoutes($controller, $modelName); + } + } + + private function getLivewireHttpPath($argument) + { + return $this->laravel['path'] . + '/Modules/' . str_replace('\\', '/', $argument) . '/Http/Livewire/example.php'; + } + + private function getComponentsHttpPath($argument) + { + return $this->laravel['path'] . + '/Modules/' . str_replace('\\', '/', $argument) . '/Http/Components/example.php'; + } + + private function getPoliciesHttpPath($argument) + { + return $this->laravel['path'] . + '/Modules/' . str_replace('\\', '/', $argument) . '/Http/Policies/example.php'; + } + + private function getRequestsHttpPath($argument) + { + return $this->laravel['path'] . + '/Modules/' . str_replace('\\', '/', $argument) . '/Http/Requests/example.php'; + } + + private function createRoutes($controller, $modelName) + { + $routePath = $this->getRoutesPath($this->argument('name')); + + if ($this->alreadyExists($routePath)) + { + $this->error('Routes already exists!'); + } + else + { + $this->makeDirectory($routePath); + + $stub = $this->files->get(base_path('resources/stubs/routes.web.stub')); + + $stub = str_replace( + [ + 'TeamplateDirectoryName', + 'TeamplateRoutePrefix', + 'TeamplateClass' + ], + [ + $controller, + lcfirst($modelName), + $controller . 'Controller' + ], + $stub + ); + + $this->files->put($routePath, $stub); + $this->info('Routes created successfully'); + } + } + + private function alreadyExists($valuePath) + { + return $this->files->exists($valuePath); + } + + private function getRoutesPath($argument) + { + return $this->laravel['path'] . + '/Modules/' . + str_replace('\\', '/', $argument) . + '/Routes/web.php'; + } + + private function getControllerPath($argument) + { + $controller = Str::studly(class_basename($argument)); + return $this->laravel['path'] . + '/Modules/' . + str_replace('\\', '/', $argument) . + '/Http/Controllers/' . + $controller . + 'Controller.php'; + } + + private function makeDirectory($path) + { + $this->files->makeDirectory(dirname($path), 0777, true, true); + //$this->files->makeDirectory(dirname($path)); + } + + private function createMigration() + { + $name = trim($this->argument('name')); + $table = Str::plural(Str::snake(class_basename($this->argument('name')))); + try + { + $this->call('make:migration', [ + 'name' => 'create_' . $table . '_table', + '--create' => $table, + '--path' => 'app/Modules/' . $name . '/Database/Migrations' + ]); + } + catch (\Exception $e) + { + $e->getMessage(); + } + } +} diff --git a/app/Modules/Admin/Config/config.php b/app/Modules/Admin/Config/config.php new file mode 100644 index 0000000..ce09543 --- /dev/null +++ b/app/Modules/Admin/Config/config.php @@ -0,0 +1,5 @@ +id(); + $table->timestamps(); + });*/ + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('admins'); + } +}; diff --git a/app/Modules/Admin/Http/Controllers/AdminController.php b/app/Modules/Admin/Http/Controllers/AdminController.php new file mode 100644 index 0000000..d826415 --- /dev/null +++ b/app/Modules/Admin/Http/Controllers/AdminController.php @@ -0,0 +1,68 @@ +superAdminExists()) + { + return $this->goToSuperAdminCreator(); + } + return view('admin::index'); + } + + public function superAdminExists() + { + $count = UserRole::where('role_id', Role::SUPER_ADMIN)->count(); + if ($count == 0) + { + return false; + } + return true; + } + + public function goToSuperAdminCreator() + { + return view('admin::setAdmin.index', [ + 'users' => User::orderBy('name')->get() + ]); + } + + public function setSuperAdmin(Request $request) + { + if (!$this->superAdminExists()) + { + $userId = false; + $user = User::where('email', $request->email)->orWhere('phone', $request->phone); + if ($user->count() == 1) + { + $user = $user->first(); + $userId = $user->id; + } + elseif ($user->count() > 1) + { + return to_route('admin.index'); + } + else + { + $user = User::create($request->all()); + $userId = $user->id; + $user->setForcedPassword(); + } + UserRole::create([ + 'user_id' => $userId, + 'role_id' => Role::SUPER_ADMIN + ]); + } + return to_route('admin.index'); + } +} \ No newline at end of file diff --git a/app/Modules/Admin/Http/Controllers/AdminPostsController.php b/app/Modules/Admin/Http/Controllers/AdminPostsController.php new file mode 100644 index 0000000..bdb1504 --- /dev/null +++ b/app/Modules/Admin/Http/Controllers/AdminPostsController.php @@ -0,0 +1,83 @@ +get(); + return view('admin::posts.index', [ + 'posts' => $posts + ]); + } + + public function create() + { + return view('admin::posts.create', [ + 'categories' => PostCategory::cases() + ]); + } + + public function store(Request $request) + { + $validated = $request->validate([ + 'name' => 'required', + 'category' => 'required', + 'short_text' => 'max:500', + 'text' => 'required', + 'imageFile' => 'required|mimes:jpg,bmp,png' + ]); + $path = $request->file('imageFile')->store('posts', ['disk' => 'public']); + $request['image'] = $path; + $post = Post::create( + $request->only(['name', 'short_text', 'text', 'category', 'image']) + ); + return to_route('admin.posts'); + } + + public function edit(Post $post) + { + return view('admin::posts.edit', [ + 'categories' => PostCategory::cases(), + 'post' => $post + ]); + } + + public function update(Request $request, Post $post) + { + $validated = $request->validate([ + 'name' => 'required', + 'category' => 'required', + 'short_text' => 'max:500', + 'text' => 'required', + ]); + + if ($request->file('imageFile')) + { + $path = $request->file('imageFile')->store('posts', ['disk' => 'public']); + $request['image'] = $path; + } + else + { + $reuqest['image'] = $post->image; + } + $post = $post->update( + $request->only(['name', 'short_text', 'text', 'category', 'image']) + ); + return to_route('admin.posts'); + } + + public function delete(Post $post) + { + $post->delete(); + return to_route('admin.posts'); + } +} diff --git a/app/Modules/Admin/Http/Livewire/AdminMenu.php b/app/Modules/Admin/Http/Livewire/AdminMenu.php new file mode 100644 index 0000000..4be60cc --- /dev/null +++ b/app/Modules/Admin/Http/Livewire/AdminMenu.php @@ -0,0 +1,25 @@ +userId = auth()->user()->id; + } + public function render() + { + return view('admin::menu.index', [ + 'userRoles' => UserRole::where('user_id', $this->userId)->pluck('role_id')->toArray(), + 'roles' => Role::class + ]); + } +} \ No newline at end of file diff --git a/app/Modules/Admin/Http/Livewire/Posts.php b/app/Modules/Admin/Http/Livewire/Posts.php new file mode 100644 index 0000000..7ecdcdd --- /dev/null +++ b/app/Modules/Admin/Http/Livewire/Posts.php @@ -0,0 +1,27 @@ +userId = auth()->user()->id; + } + + public function open($id) + { + $this->dispatch('showPostCardInModal', id: $id); + } + public function render() + { + $posts = Post::all(); + return view('admin::posts.list', [ + 'posts' => $posts + ]); + } +} \ No newline at end of file diff --git a/app/Modules/Admin/Models/Admin.php b/app/Modules/Admin/Models/Admin.php new file mode 100644 index 0000000..345e1a8 --- /dev/null +++ b/app/Modules/Admin/Models/Admin.php @@ -0,0 +1,11 @@ +app->register(RouteServiceProvider::class); + } + + public function boot() + { + $this->registerViews(); + $this->registerLivewireViews(); + $this->registerMigrations(); + $this->registerConfig(); + $this->registerComponent(); + $this->registerLivewire(); + } + + protected function registerViews() + { + $moduleViewsPath = __DIR__ . '/../Views'; + $this->loadViewsFrom( + $moduleViewsPath, + strtolower($this->moduleName) + ); + } + + protected function registerLivewireViews() + { + $moduleViewsPath = __DIR__ . '/../Views/livewire'; + $this->loadViewsFrom( + $moduleViewsPath, + strtolower($this->moduleName) + ); + } + + protected function registerMigrations() + { + $this->loadMigrationsFrom( + app_path('Modules/' . $this->moduleName . '/Database/Migrations') + ); + } + + protected function registerConfig() + { + $path = app_path('Modules/' . $this->moduleName . '/Config/config.php'); + $this->mergeConfigFrom( + $path, + strtolower($this->moduleName) + ); + } + + protected function registerLivewire() + { + Livewire::component('admin.menu', \Modules\Admin\Http\Livewire\AdminMenu::class); + Livewire::component('admin.posts', \Modules\Admin\Http\Livewire\Posts::class); + } + + protected function registerComponent() + { + //Blade::component('', \Modules\\Http\Components\::class); + } +} \ No newline at end of file diff --git a/app/Modules/Admin/Providers/RouteServiceProvider.php b/app/Modules/Admin/Providers/RouteServiceProvider.php new file mode 100644 index 0000000..d6b3963 --- /dev/null +++ b/app/Modules/Admin/Providers/RouteServiceProvider.php @@ -0,0 +1,24 @@ +registerWebRoutes(); + } + + protected function registerWebRoutes() + { + //Add Web Routes with web Guard + Route::middleware('web') + //Set Default Controllers Namespace + ->namespace('Modules\\Admin\\Http\\Controllers') + ->group(app_path('Modules/Admin/Routes/web.php')); + } +} \ No newline at end of file diff --git a/app/Modules/Admin/Routes/web.php b/app/Modules/Admin/Routes/web.php new file mode 100644 index 0000000..3d81066 --- /dev/null +++ b/app/Modules/Admin/Routes/web.php @@ -0,0 +1,26 @@ +group(function () +{ + + Route::get('/admin', [AdminController::class, 'index']); + + Route::middleware(['hasAccess'])->group(function () + { + /** Routes that need to be protected - Маршруты которые нужно защитить */ + }); + Route::post('/admin/set', [Modules\Admin\Http\Controllers\AdminController::class, 'setSuperAdmin'])->name('admin.setSuperAdmin'); + + + Route::get('/admin', [Modules\Admin\Http\Controllers\AdminController::class, 'index'])->name('admin.index'); + Route::get('/admin/posts', [Modules\Admin\Http\Controllers\AdminPostsController::class, 'index'])->name('admin.posts'); + Route::get('/admin/posts/create', [Modules\Admin\Http\Controllers\AdminPostsController::class, 'create'])->name('admin.posts.create'); + Route::post('/admin/posts/store', [Modules\Admin\Http\Controllers\AdminPostsController::class, 'store'])->name('admin.posts.store'); + Route::get('/admin/post/{post}/edit', [Modules\Admin\Http\Controllers\AdminPostsController::class, 'edit'])->name('admin.posts.edit'); + Route::post('/admin/post/{post}/update', [Modules\Admin\Http\Controllers\AdminPostsController::class, 'update'])->name('admin.posts.update'); + Route::post('/admin/post/{post}/delete', [Modules\Admin\Http\Controllers\AdminPostsController::class, 'delete'])->name('admin.posts.delete'); + +}); \ No newline at end of file diff --git a/app/Modules/Admin/Views/index.blade.php b/app/Modules/Admin/Views/index.blade.php new file mode 100644 index 0000000..009c20a --- /dev/null +++ b/app/Modules/Admin/Views/index.blade.php @@ -0,0 +1,4 @@ +@extends('layouts.admin') +@section('content') +

Дашборд

+@endsection diff --git a/app/Modules/Admin/Views/menu/index.blade.php b/app/Modules/Admin/Views/menu/index.blade.php new file mode 100644 index 0000000..02a69ae --- /dev/null +++ b/app/Modules/Admin/Views/menu/index.blade.php @@ -0,0 +1,44 @@ +
+ @if (in_array($roles::SUPER_ADMIN, $userRoles)) + + @endif +
diff --git a/app/Modules/Admin/Views/posts/create.blade.php b/app/Modules/Admin/Views/posts/create.blade.php new file mode 100644 index 0000000..ec0e96b --- /dev/null +++ b/app/Modules/Admin/Views/posts/create.blade.php @@ -0,0 +1,53 @@ +@extends('layouts.admin') +@section('content') + + + +

Добавить новость

+
+ @csrf +
+ + + @error('name') +
{{ $message }}
+ @enderror +
+
+
+ + + @error('category') +
{{ $message }}
+ @enderror +
+
+ + + @error('imageFile') +
{{ $message }}
+ @enderror +
+
+
+ + + @error('short_text') +
{{ $message }}
+ @enderror +
+
+ + + + @error('text') +
{{ $message }}
+ @enderror +
+ +
+@endsection diff --git a/app/Modules/Admin/Views/posts/edit.blade.php b/app/Modules/Admin/Views/posts/edit.blade.php new file mode 100644 index 0000000..8bf8053 --- /dev/null +++ b/app/Modules/Admin/Views/posts/edit.blade.php @@ -0,0 +1,54 @@ +@extends('layouts.admin') +@section('content') + + + +

Добавить новость

+
+ @csrf +
+ + + @error('name') +
{{ $message }}
+ @enderror +
+
+
+ + + @error('category') +
{{ $message }}
+ @enderror +
+
+ + + @error('imageFile') +
{{ $message }}
+ @enderror +
+
+
+ + + @error('short_text') +
{{ $message }}
+ @enderror +
+
+ + + + @error('text') +
{{ $message }}
+ @enderror +
+ +
+@endsection diff --git a/app/Modules/Admin/Views/posts/index.blade.php b/app/Modules/Admin/Views/posts/index.blade.php new file mode 100644 index 0000000..83b8445 --- /dev/null +++ b/app/Modules/Admin/Views/posts/index.blade.php @@ -0,0 +1,14 @@ +@extends('layouts.admin') +@section('content') +
+ + +
+ + + +
+
+ + @livewire('admin.posts') +@endsection diff --git a/app/Modules/Admin/Views/posts/list.blade.php b/app/Modules/Admin/Views/posts/list.blade.php new file mode 100644 index 0000000..014f25f --- /dev/null +++ b/app/Modules/Admin/Views/posts/list.blade.php @@ -0,0 +1,53 @@ +
+ @if ($posts->count() == 0) +
Нет данных для отображения
+ @else +
+ + + + + + + @foreach ($posts as $post) + + + + + + + @endforeach + +
ID + Название + Дата создания + +
+ {{ $post->id }} + + {{ $post->name }} + + {{ $post->created_at->diffForHumans() }} + + +
+
+ @endif + @livewire('post.card') +
diff --git a/app/Modules/Admin/Views/setAdmin/index.blade.php b/app/Modules/Admin/Views/setAdmin/index.blade.php new file mode 100644 index 0000000..86796d2 --- /dev/null +++ b/app/Modules/Admin/Views/setAdmin/index.blade.php @@ -0,0 +1,29 @@ +@extends('layouts.admin') +@section('content') +

Установить глобального администратора

+
+ @csrf +
+ + + @error('name') +
{{ $message }}
+ @enderror +
+
+ + + @error('name') +
{{ $message }}
+ @enderror +
+
+ + + @error('name') +
{{ $message }}
+ @enderror +
+ +
+@endsection diff --git a/app/Modules/Post/Config/config.php b/app/Modules/Post/Config/config.php new file mode 100644 index 0000000..ce09543 --- /dev/null +++ b/app/Modules/Post/Config/config.php @@ -0,0 +1,5 @@ +id(); + $table->string('name'); + $table->text('short_text'); + $table->text('text'); + $table->string('image'); + $table->enum('category', ['News', 'Projects', 'Credits', 'Sale'])->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('news'); + } +}; diff --git a/app/Modules/Post/Database/Migrations/2025_04_04_063455_create_post_cities_table.php b/app/Modules/Post/Database/Migrations/2025_04_04_063455_create_post_cities_table.php new file mode 100644 index 0000000..1a82de6 --- /dev/null +++ b/app/Modules/Post/Database/Migrations/2025_04_04_063455_create_post_cities_table.php @@ -0,0 +1,30 @@ +id(); + $table->foreignId('post_id')->references('id')->on('posts')->onDelete('cascade'); + $table->foreignId('city_id')->references('id')->on('cities')->onDelete('cascade'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('news'); + } +}; diff --git a/app/Modules/Post/Http/Controllers/PostController.php b/app/Modules/Post/Http/Controllers/PostController.php new file mode 100644 index 0000000..89415ac --- /dev/null +++ b/app/Modules/Post/Http/Controllers/PostController.php @@ -0,0 +1,20 @@ + $post + ]); + } + +} diff --git a/app/Modules/Post/Http/Livewire/PostCard.php b/app/Modules/Post/Http/Livewire/PostCard.php new file mode 100644 index 0000000..ff41fbe --- /dev/null +++ b/app/Modules/Post/Http/Livewire/PostCard.php @@ -0,0 +1,51 @@ +id = $id; + } + + #[On('showPostCardInModal')] + public function open($id) + { + $this->id = $id; + } + + public function close() + { + $this->id = null; + } + public function render() + { + if ($this->id) + { + $post = Post::find($this->id); + if (Storage::disk('public')->exists($post->image)) + { + $post->image = Storage::url($post->image); + } + else + { + $post->image = false; + } + return view('post::list.card', [ + 'post' => $post + ]); + } + else + { + return view('post::list.card', [ + + ]); + } + } +} \ No newline at end of file diff --git a/app/Modules/Post/Http/Livewire/PostsList.php b/app/Modules/Post/Http/Livewire/PostsList.php new file mode 100644 index 0000000..8bf507c --- /dev/null +++ b/app/Modules/Post/Http/Livewire/PostsList.php @@ -0,0 +1,30 @@ +dispatch('showPostCardInModal', id: $id); + } + public function render() + { + $posts = Post::all(); + return view('post::list.cards', [ + 'posts' => $posts + ]); + } +} \ No newline at end of file diff --git a/app/Modules/Post/Models/Post.php b/app/Modules/Post/Models/Post.php new file mode 100644 index 0000000..661e3f4 --- /dev/null +++ b/app/Modules/Post/Models/Post.php @@ -0,0 +1,18 @@ +app->register(RouteServiceProvider::class); + } + + public function boot() + { + $this->registerViews(); + $this->registerLivewireViews(); + $this->registerMigrations(); + $this->registerConfig(); + $this->registerComponent(); + $this->registerLivewire(); + } + + protected function registerViews() + { + $moduleViewsPath = __DIR__ . '/../Views'; + $this->loadViewsFrom( + $moduleViewsPath, + strtolower($this->moduleName) + ); + } + + protected function registerLivewireViews() + { + $moduleViewsPath = __DIR__ . '/../Views/livewire'; + $this->loadViewsFrom( + $moduleViewsPath, + strtolower($this->moduleName) + ); + } + + protected function registerMigrations() + { + $this->loadMigrationsFrom( + app_path('Modules/' . $this->moduleName . '/Database/Migrations') + ); + } + + protected function registerConfig() + { + $path = app_path('Modules/' . $this->moduleName . '/Config/config.php'); + $this->mergeConfigFrom( + $path, + strtolower($this->moduleName) + ); + } + + protected function registerLivewire() + { + Livewire::component('posts.list', \Modules\Post\Http\Livewire\PostsList::class); + Livewire::component('post.card', \Modules\Post\Http\Livewire\PostCard::class); + + } + + protected function registerComponent() + { + //Blade::component('', \Modules\\Http\Components\::class); + } +} \ No newline at end of file diff --git a/app/Modules/Post/Providers/RouteServiceProvider.php b/app/Modules/Post/Providers/RouteServiceProvider.php new file mode 100644 index 0000000..59ad43b --- /dev/null +++ b/app/Modules/Post/Providers/RouteServiceProvider.php @@ -0,0 +1,24 @@ +registerWebRoutes(); + } + + protected function registerWebRoutes() + { + //Add Web Routes with web Guard + Route::middleware('web') + //Set Default Controllers Namespace + ->namespace('Modules\\Post\\Http\\Controllers') + ->group(app_path('Modules/Post/Routes/web.php')); + } +} \ No newline at end of file diff --git a/app/Modules/Post/Routes/web.php b/app/Modules/Post/Routes/web.php new file mode 100644 index 0000000..50ce40a --- /dev/null +++ b/app/Modules/Post/Routes/web.php @@ -0,0 +1,11 @@ +group(function () +{ + + Route::get('/post/{post}', [Modules\Post\Http\Controllers\PostController::class, 'open'])->name('post.open'); + + +}); \ No newline at end of file diff --git a/app/Modules/Post/Views/index.blade.php b/app/Modules/Post/Views/index.blade.php new file mode 100644 index 0000000..f8198cf --- /dev/null +++ b/app/Modules/Post/Views/index.blade.php @@ -0,0 +1,4 @@ +@extends('layouts.app') + @section('content') +

Example views

+ @endsection \ No newline at end of file diff --git a/app/Modules/Post/Views/list/card.blade.php b/app/Modules/Post/Views/list/card.blade.php new file mode 100644 index 0000000..ab3f094 --- /dev/null +++ b/app/Modules/Post/Views/list/card.blade.php @@ -0,0 +1,31 @@ +
+ @isset($post) + + @endisset +
diff --git a/app/Modules/Post/Views/list/cards.blade.php b/app/Modules/Post/Views/list/cards.blade.php new file mode 100644 index 0000000..6a79303 --- /dev/null +++ b/app/Modules/Post/Views/list/cards.blade.php @@ -0,0 +1,28 @@ +
+ @foreach ($posts as $post) +
+
+
+
+
+
+ {{ __($post->category) }} +
+

{{ $post->name }}

+
+
+
+ + + +
+
+
+
+ @endforeach + + @livewire('post.card') +
diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index abd395f..af85851 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -5,22 +5,40 @@ use Illuminate\Support\ServiceProvider; use Illuminate\Pagination\Paginator; +use Illuminate\Support\Facades\File; + + class AppServiceProvider extends ServiceProvider - { +{ /** * Register any application services. */ public function register(): void + { + + //$this->app->register('\\Modules\\Post\\Providers\\ModuleServiceProvider'); + + //Поиск модулей + $modulesBasePath = app_path('Modules'); + foreach (File::directories($modulesBasePath) as $moduleDirectory) { - // + //Получить имя модуля из имени каталога + $moduleName = basename($moduleDirectory); + $providerClassName = '\\Modules\\' . $moduleName . '\\Providers\\ModuleServiceProvider'; + if (class_exists($providerClassName)) + { + //Зарегистрировать поставщика услуг модуля, если он существует + $this->app->register($providerClassName); + } } + } /** * Bootstrap any application services. */ public function boot(): void - { + { Paginator::useBootstrapFive(); Paginator::useBootstrapFour(); - } } +} diff --git a/composer.json b/composer.json index b0ab5a7..3f70498 100644 --- a/composer.json +++ b/composer.json @@ -2,7 +2,10 @@ "name": "laravel/laravel", "type": "project", "description": "The skeleton application for the Laravel framework.", - "keywords": ["laravel", "framework"], + "keywords": [ + "laravel", + "framework" + ], "license": "MIT", "require": { "php": "^8.1", @@ -27,7 +30,8 @@ "psr-4": { "App\\": "app/", "Database\\Factories\\": "database/factories/", - "Database\\Seeders\\": "database/seeders/" + "Database\\Seeders\\": "database/seeders/", + "Modules\\": "app/Modules/" } }, "autoload-dev": { @@ -66,4 +70,4 @@ }, "minimum-stability": "stable", "prefer-stable": true -} +} \ No newline at end of file diff --git a/composer.lock b/composer.lock index 9c77f9e..28959c0 100644 --- a/composer.lock +++ b/composer.lock @@ -62,16 +62,16 @@ }, { "name": "brick/math", - "version": "0.12.1", + "version": "0.12.3", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "f510c0a40911935b77b86859eb5223d58d660df1" + "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/f510c0a40911935b77b86859eb5223d58d660df1", - "reference": "f510c0a40911935b77b86859eb5223d58d660df1", + "url": "https://api.github.com/repos/brick/math/zipball/866551da34e9a618e64a819ee1e01c20d8a588ba", + "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba", "shasum": "" }, "require": { @@ -80,7 +80,7 @@ "require-dev": { "php-coveralls/php-coveralls": "^2.2", "phpunit/phpunit": "^10.1", - "vimeo/psalm": "5.16.0" + "vimeo/psalm": "6.8.8" }, "type": "library", "autoload": { @@ -110,7 +110,7 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.12.1" + "source": "https://github.com/brick/math/tree/0.12.3" }, "funding": [ { @@ -118,7 +118,7 @@ "type": "github" } ], - "time": "2023-11-29T23:19:16+00:00" + "time": "2025-02-28T13:11:00+00:00" }, { "name": "carbonphp/carbon-doctrine-types", @@ -549,16 +549,16 @@ }, { "name": "egulias/email-validator", - "version": "4.0.2", + "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e" + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ebaaf5be6c0286928352e054f2d5125608e5405e", - "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", "shasum": "" }, "require": { @@ -604,7 +604,7 @@ ], "support": { "issues": "https://github.com/egulias/EmailValidator/issues", - "source": "https://github.com/egulias/EmailValidator/tree/4.0.2" + "source": "https://github.com/egulias/EmailValidator/tree/4.0.4" }, "funding": [ { @@ -612,7 +612,7 @@ "type": "github" } ], - "time": "2023-10-06T06:47:41+00:00" + "time": "2025-03-06T22:45:56+00:00" }, { "name": "fruitcake/php-cors", @@ -749,16 +749,16 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.9.2", + "version": "7.9.3", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "d281ed313b989f213357e3be1a179f02196ac99b" + "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b", - "reference": "d281ed313b989f213357e3be1a179f02196ac99b", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7b2f29fe81dc4da0ca0ea7d42107a0845946ea77", + "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77", "shasum": "" }, "require": { @@ -855,7 +855,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.9.2" + "source": "https://github.com/guzzle/guzzle/tree/7.9.3" }, "funding": [ { @@ -871,20 +871,20 @@ "type": "tidelift" } ], - "time": "2024-07-24T11:22:20+00:00" + "time": "2025-03-27T13:37:11+00:00" }, { "name": "guzzlehttp/promises", - "version": "2.0.4", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455" + "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/f9c436286ab2892c7db7be8c8da4ef61ccf7b455", - "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455", + "url": "https://api.github.com/repos/guzzle/promises/zipball/7c69f28996b0a6920945dd20b3857e499d9ca96c", + "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c", "shasum": "" }, "require": { @@ -938,7 +938,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.0.4" + "source": "https://github.com/guzzle/promises/tree/2.2.0" }, "funding": [ { @@ -954,20 +954,20 @@ "type": "tidelift" } ], - "time": "2024-10-17T10:06:22+00:00" + "time": "2025-03-27T13:27:01+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.7.0", + "version": "2.7.1", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201" + "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201", - "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/c2270caaabe631b3b44c85f99e5a04bbb8060d16", + "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16", "shasum": "" }, "require": { @@ -1054,7 +1054,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.7.0" + "source": "https://github.com/guzzle/psr7/tree/2.7.1" }, "funding": [ { @@ -1070,20 +1070,20 @@ "type": "tidelift" } ], - "time": "2024-07-18T11:15:46+00:00" + "time": "2025-03-27T12:30:47+00:00" }, { "name": "guzzlehttp/uri-template", - "version": "v1.0.3", + "version": "v1.0.4", "source": { "type": "git", "url": "https://github.com/guzzle/uri-template.git", - "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c" + "reference": "30e286560c137526eccd4ce21b2de477ab0676d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/uri-template/zipball/ecea8feef63bd4fef1f037ecb288386999ecc11c", - "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/30e286560c137526eccd4ce21b2de477ab0676d2", + "reference": "30e286560c137526eccd4ce21b2de477ab0676d2", "shasum": "" }, "require": { @@ -1140,7 +1140,7 @@ ], "support": { "issues": "https://github.com/guzzle/uri-template/issues", - "source": "https://github.com/guzzle/uri-template/tree/v1.0.3" + "source": "https://github.com/guzzle/uri-template/tree/v1.0.4" }, "funding": [ { @@ -1156,35 +1156,35 @@ "type": "tidelift" } ], - "time": "2023-12-03T19:50:20+00:00" + "time": "2025-02-03T10:55:03+00:00" }, { "name": "laravel/fortify", - "version": "v1.25.1", + "version": "v1.25.4", "source": { "type": "git", "url": "https://github.com/laravel/fortify.git", - "reference": "5022e7c01385fd6edcef91c12b19071f8f20d6d8" + "reference": "f185600e2d3a861834ad00ee3b7863f26ac25d3f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/fortify/zipball/5022e7c01385fd6edcef91c12b19071f8f20d6d8", - "reference": "5022e7c01385fd6edcef91c12b19071f8f20d6d8", + "url": "https://api.github.com/repos/laravel/fortify/zipball/f185600e2d3a861834ad00ee3b7863f26ac25d3f", + "reference": "f185600e2d3a861834ad00ee3b7863f26ac25d3f", "shasum": "" }, "require": { "bacon/bacon-qr-code": "^3.0", "ext-json": "*", - "illuminate/support": "^10.0|^11.0", + "illuminate/support": "^10.0|^11.0|^12.0", "php": "^8.1", "pragmarx/google2fa": "^8.0", "symfony/console": "^6.0|^7.0" }, "require-dev": { "mockery/mockery": "^1.0", - "orchestra/testbench": "^8.16|^9.0", + "orchestra/testbench": "^8.16|^9.0|^10.0", "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^10.4" + "phpunit/phpunit": "^10.4|^11.3" }, "type": "library", "extra": { @@ -1221,20 +1221,20 @@ "issues": "https://github.com/laravel/fortify/issues", "source": "https://github.com/laravel/fortify" }, - "time": "2024-11-27T14:51:15+00:00" + "time": "2025-01-26T19:34:46+00:00" }, { "name": "laravel/framework", - "version": "v10.48.25", + "version": "v10.48.29", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "f132b23b13909cc22c615c01b0c5640541c3da0c" + "reference": "8f7f9247cb8aad1a769d6b9815a6623d89b46b47" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/f132b23b13909cc22c615c01b0c5640541c3da0c", - "reference": "f132b23b13909cc22c615c01b0c5640541c3da0c", + "url": "https://api.github.com/repos/laravel/framework/zipball/8f7f9247cb8aad1a769d6b9815a6623d89b46b47", + "reference": "8f7f9247cb8aad1a769d6b9815a6623d89b46b47", "shasum": "" }, "require": { @@ -1428,7 +1428,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-11-26T15:32:57+00:00" + "time": "2025-03-12T14:42:01+00:00" }, { "name": "laravel/prompts", @@ -1617,22 +1617,22 @@ }, { "name": "laravel/tinker", - "version": "v2.10.0", + "version": "v2.10.1", "source": { "type": "git", "url": "https://github.com/laravel/tinker.git", - "reference": "ba4d51eb56de7711b3a37d63aa0643e99a339ae5" + "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/ba4d51eb56de7711b3a37d63aa0643e99a339ae5", - "reference": "ba4d51eb56de7711b3a37d63aa0643e99a339ae5", + "url": "https://api.github.com/repos/laravel/tinker/zipball/22177cc71807d38f2810c6204d8f7183d88a57d3", + "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3", "shasum": "" }, "require": { - "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", - "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", - "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", + "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", "php": "^7.2.5|^8.0", "psy/psysh": "^0.11.1|^0.12.0", "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0" @@ -1640,10 +1640,10 @@ "require-dev": { "mockery/mockery": "~1.3.3|^1.4.2", "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^8.5.8|^9.3.3" + "phpunit/phpunit": "^8.5.8|^9.3.3|^10.0" }, "suggest": { - "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0)." + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0)." }, "type": "library", "extra": { @@ -1677,45 +1677,45 @@ ], "support": { "issues": "https://github.com/laravel/tinker/issues", - "source": "https://github.com/laravel/tinker/tree/v2.10.0" + "source": "https://github.com/laravel/tinker/tree/v2.10.1" }, - "time": "2024-09-23T13:32:56+00:00" + "time": "2025-01-27T14:24:01+00:00" }, { "name": "laravel/ui", - "version": "v4.6.0", + "version": "v4.6.1", "source": { "type": "git", "url": "https://github.com/laravel/ui.git", - "reference": "a34609b15ae0c0512a0cf47a21695a2729cb7f93" + "reference": "7d6ffa38d79f19c9b3e70a751a9af845e8f41d88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/ui/zipball/a34609b15ae0c0512a0cf47a21695a2729cb7f93", - "reference": "a34609b15ae0c0512a0cf47a21695a2729cb7f93", + "url": "https://api.github.com/repos/laravel/ui/zipball/7d6ffa38d79f19c9b3e70a751a9af845e8f41d88", + "reference": "7d6ffa38d79f19c9b3e70a751a9af845e8f41d88", "shasum": "" }, "require": { - "illuminate/console": "^9.21|^10.0|^11.0", - "illuminate/filesystem": "^9.21|^10.0|^11.0", - "illuminate/support": "^9.21|^10.0|^11.0", - "illuminate/validation": "^9.21|^10.0|^11.0", + "illuminate/console": "^9.21|^10.0|^11.0|^12.0", + "illuminate/filesystem": "^9.21|^10.0|^11.0|^12.0", + "illuminate/support": "^9.21|^10.0|^11.0|^12.0", + "illuminate/validation": "^9.21|^10.0|^11.0|^12.0", "php": "^8.0", "symfony/console": "^6.0|^7.0" }, "require-dev": { - "orchestra/testbench": "^7.35|^8.15|^9.0", - "phpunit/phpunit": "^9.3|^10.4|^11.0" + "orchestra/testbench": "^7.35|^8.15|^9.0|^10.0", + "phpunit/phpunit": "^9.3|^10.4|^11.5" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "4.x-dev" - }, "laravel": { "providers": [ "Laravel\\Ui\\UiServiceProvider" ] + }, + "branch-alias": { + "dev-master": "4.x-dev" } }, "autoload": { @@ -1740,22 +1740,22 @@ "ui" ], "support": { - "source": "https://github.com/laravel/ui/tree/v4.6.0" + "source": "https://github.com/laravel/ui/tree/v4.6.1" }, - "time": "2024-11-21T15:06:41+00:00" + "time": "2025-01-28T15:15:29+00:00" }, { "name": "league/commonmark", - "version": "2.6.0", + "version": "2.6.1", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "d150f911e0079e90ae3c106734c93137c184f932" + "reference": "d990688c91cedfb69753ffc2512727ec646df2ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/d150f911e0079e90ae3c106734c93137c184f932", - "reference": "d150f911e0079e90ae3c106734c93137c184f932", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/d990688c91cedfb69753ffc2512727ec646df2ad", + "reference": "d990688c91cedfb69753ffc2512727ec646df2ad", "shasum": "" }, "require": { @@ -1849,7 +1849,7 @@ "type": "tidelift" } ], - "time": "2024-12-07T15:34:16+00:00" + "time": "2024-12-29T14:10:59+00:00" }, { "name": "league/config", @@ -2123,23 +2123,23 @@ }, { "name": "livewire/livewire", - "version": "v3.5.17", + "version": "v3.6.2", "source": { "type": "git", "url": "https://github.com/livewire/livewire.git", - "reference": "7bbf80d93db9b866776bf957ca6229364bca8d87" + "reference": "8f8914731f5eb43b6bb145d87c8d5a9edfc89313" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/livewire/livewire/zipball/7bbf80d93db9b866776bf957ca6229364bca8d87", - "reference": "7bbf80d93db9b866776bf957ca6229364bca8d87", + "url": "https://api.github.com/repos/livewire/livewire/zipball/8f8914731f5eb43b6bb145d87c8d5a9edfc89313", + "reference": "8f8914731f5eb43b6bb145d87c8d5a9edfc89313", "shasum": "" }, "require": { - "illuminate/database": "^10.0|^11.0", - "illuminate/routing": "^10.0|^11.0", - "illuminate/support": "^10.0|^11.0", - "illuminate/validation": "^10.0|^11.0", + "illuminate/database": "^10.0|^11.0|^12.0", + "illuminate/routing": "^10.0|^11.0|^12.0", + "illuminate/support": "^10.0|^11.0|^12.0", + "illuminate/validation": "^10.0|^11.0|^12.0", "laravel/prompts": "^0.1.24|^0.2|^0.3", "league/mime-type-detection": "^1.9", "php": "^8.1", @@ -2148,11 +2148,11 @@ }, "require-dev": { "calebporzio/sushi": "^2.1", - "laravel/framework": "^10.15.0|^11.0", + "laravel/framework": "^10.15.0|^11.0|^12.0", "mockery/mockery": "^1.3.1", - "orchestra/testbench": "^8.21.0|^9.0", - "orchestra/testbench-dusk": "^8.24|^9.1", - "phpunit/phpunit": "^10.4", + "orchestra/testbench": "^8.21.0|^9.0|^10.0", + "orchestra/testbench-dusk": "^8.24|^9.1|^10.0", + "phpunit/phpunit": "^10.4|^11.5", "psy/psysh": "^0.11.22|^0.12" }, "type": "library", @@ -2187,7 +2187,7 @@ "description": "A front-end framework for Laravel.", "support": { "issues": "https://github.com/livewire/livewire/issues", - "source": "https://github.com/livewire/livewire/tree/v3.5.17" + "source": "https://github.com/livewire/livewire/tree/v3.6.2" }, "funding": [ { @@ -2195,20 +2195,20 @@ "type": "github" } ], - "time": "2024-12-06T13:41:21+00:00" + "time": "2025-03-12T20:24:15+00:00" }, { "name": "monolog/monolog", - "version": "3.8.1", + "version": "3.9.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "aef6ee73a77a66e404dd6540934a9ef1b3c855b4" + "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/aef6ee73a77a66e404dd6540934a9ef1b3c855b4", - "reference": "aef6ee73a77a66e404dd6540934a9ef1b3c855b4", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/10d85740180ecba7896c87e06a166e0c95a0e3b6", + "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6", "shasum": "" }, "require": { @@ -2286,7 +2286,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.8.1" + "source": "https://github.com/Seldaek/monolog/tree/3.9.0" }, "funding": [ { @@ -2298,20 +2298,20 @@ "type": "tidelift" } ], - "time": "2024-12-05T17:15:07+00:00" + "time": "2025-03-24T10:02:05+00:00" }, { "name": "nesbot/carbon", - "version": "2.72.5", + "version": "2.73.0", "source": { "type": "git", - "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "afd46589c216118ecd48ff2b95d77596af1e57ed" + "url": "https://github.com/CarbonPHP/carbon.git", + "reference": "9228ce90e1035ff2f0db84b40ec2e023ed802075" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/afd46589c216118ecd48ff2b95d77596af1e57ed", - "reference": "afd46589c216118ecd48ff2b95d77596af1e57ed", + "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/9228ce90e1035ff2f0db84b40ec2e023ed802075", + "reference": "9228ce90e1035ff2f0db84b40ec2e023ed802075", "shasum": "" }, "require": { @@ -2331,7 +2331,7 @@ "doctrine/orm": "^2.7 || ^3.0", "friendsofphp/php-cs-fixer": "^3.0", "kylekatarnls/multi-tester": "^2.0", - "ondrejmirtes/better-reflection": "*", + "ondrejmirtes/better-reflection": "<6", "phpmd/phpmd": "^2.9", "phpstan/extension-installer": "^1.0", "phpstan/phpstan": "^0.12.99 || ^1.7.14", @@ -2344,10 +2344,6 @@ ], "type": "library", "extra": { - "branch-alias": { - "dev-master": "3.x-dev", - "dev-2.x": "2.x-dev" - }, "laravel": { "providers": [ "Carbon\\Laravel\\ServiceProvider" @@ -2357,6 +2353,10 @@ "includes": [ "extension.neon" ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev", + "dev-master": "3.x-dev" } }, "autoload": { @@ -2405,7 +2405,7 @@ "type": "tidelift" } ], - "time": "2024-06-03T19:18:41+00:00" + "time": "2025-01-08T20:10:23+00:00" }, { "name": "nette/schema", @@ -2471,16 +2471,16 @@ }, { "name": "nette/utils", - "version": "v4.0.5", + "version": "v4.0.6", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96" + "reference": "ce708655043c7050eb050df361c5e313cf708309" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", - "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", + "url": "https://api.github.com/repos/nette/utils/zipball/ce708655043c7050eb050df361c5e313cf708309", + "reference": "ce708655043c7050eb050df361c5e313cf708309", "shasum": "" }, "require": { @@ -2551,22 +2551,22 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v4.0.5" + "source": "https://github.com/nette/utils/tree/v4.0.6" }, - "time": "2024-08-07T15:39:19+00:00" + "time": "2025-03-30T21:06:30+00:00" }, { "name": "nikic/php-parser", - "version": "v5.3.1", + "version": "v5.4.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b" + "reference": "447a020a1f875a434d62f2a401f53b82a396e494" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/8eea230464783aa9671db8eea6f8c6ac5285794b", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", + "reference": "447a020a1f875a434d62f2a401f53b82a396e494", "shasum": "" }, "require": { @@ -2609,9 +2609,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" }, - "time": "2024-10-08T18:51:32+00:00" + "time": "2024-12-30T11:07:19+00:00" }, { "name": "nunomaduro/termwind", @@ -3306,16 +3306,16 @@ }, { "name": "psy/psysh", - "version": "v0.12.7", + "version": "v0.12.8", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "d73fa3c74918ef4522bb8a3bf9cab39161c4b57c" + "reference": "85057ceedee50c49d4f6ecaff73ee96adb3b3625" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/d73fa3c74918ef4522bb8a3bf9cab39161c4b57c", - "reference": "d73fa3c74918ef4522bb8a3bf9cab39161c4b57c", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/85057ceedee50c49d4f6ecaff73ee96adb3b3625", + "reference": "85057ceedee50c49d4f6ecaff73ee96adb3b3625", "shasum": "" }, "require": { @@ -3379,9 +3379,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.12.7" + "source": "https://github.com/bobthecow/psysh/tree/v0.12.8" }, - "time": "2024-12-10T01:58:33+00:00" + "time": "2025-03-16T03:05:19+00:00" }, { "name": "ralouphie/getallheaders", @@ -3429,16 +3429,16 @@ }, { "name": "ramsey/collection", - "version": "2.0.0", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/ramsey/collection.git", - "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5" + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", - "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", + "url": "https://api.github.com/repos/ramsey/collection/zipball/344572933ad0181accbf4ba763e85a0306a8c5e2", + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2", "shasum": "" }, "require": { @@ -3446,25 +3446,22 @@ }, "require-dev": { "captainhook/plugin-composer": "^5.3", - "ergebnis/composer-normalize": "^2.28.3", - "fakerphp/faker": "^1.21", + "ergebnis/composer-normalize": "^2.45", + "fakerphp/faker": "^1.24", "hamcrest/hamcrest-php": "^2.0", - "jangregor/phpstan-prophecy": "^1.0", - "mockery/mockery": "^1.5", + "jangregor/phpstan-prophecy": "^2.1", + "mockery/mockery": "^1.6", "php-parallel-lint/php-console-highlighter": "^1.0", - "php-parallel-lint/php-parallel-lint": "^1.3", - "phpcsstandards/phpcsutils": "^1.0.0-rc1", - "phpspec/prophecy-phpunit": "^2.0", - "phpstan/extension-installer": "^1.2", - "phpstan/phpstan": "^1.9", - "phpstan/phpstan-mockery": "^1.1", - "phpstan/phpstan-phpunit": "^1.3", - "phpunit/phpunit": "^9.5", - "psalm/plugin-mockery": "^1.1", - "psalm/plugin-phpunit": "^0.18.4", - "ramsey/coding-standard": "^2.0.3", - "ramsey/conventional-commits": "^1.3", - "vimeo/psalm": "^5.4" + "php-parallel-lint/php-parallel-lint": "^1.4", + "phpspec/prophecy-phpunit": "^2.3", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^10.5", + "ramsey/coding-standard": "^2.3", + "ramsey/conventional-commits": "^1.6", + "roave/security-advisories": "dev-latest" }, "type": "library", "extra": { @@ -3502,19 +3499,9 @@ ], "support": { "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/2.0.0" + "source": "https://github.com/ramsey/collection/tree/2.1.1" }, - "funding": [ - { - "url": "https://github.com/ramsey", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", - "type": "tidelift" - } - ], - "time": "2022-12-31T21:50:55+00:00" + "time": "2025-03-22T05:38:12+00:00" }, { "name": "ramsey/uuid", @@ -3610,16 +3597,16 @@ }, { "name": "symfony/console", - "version": "v6.4.15", + "version": "v6.4.20", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "f1fc6f47283e27336e7cebb9e8946c8de7bff9bd" + "reference": "2e4af9c952617cc3f9559ff706aee420a8464c36" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/f1fc6f47283e27336e7cebb9e8946c8de7bff9bd", - "reference": "f1fc6f47283e27336e7cebb9e8946c8de7bff9bd", + "url": "https://api.github.com/repos/symfony/console/zipball/2e4af9c952617cc3f9559ff706aee420a8464c36", + "reference": "2e4af9c952617cc3f9559ff706aee420a8464c36", "shasum": "" }, "require": { @@ -3684,7 +3671,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.15" + "source": "https://github.com/symfony/console/tree/v6.4.20" }, "funding": [ { @@ -3700,7 +3687,7 @@ "type": "tidelift" } ], - "time": "2024-11-06T14:19:14+00:00" + "time": "2025-03-03T17:16:38+00:00" }, { "name": "symfony/css-selector", @@ -3786,12 +3773,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -3836,16 +3823,16 @@ }, { "name": "symfony/error-handler", - "version": "v6.4.14", + "version": "v6.4.20", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "9e024324511eeb00983ee76b9aedc3e6ecd993d9" + "reference": "aa3bcf4f7674719df078e61cc8062e5b7f752031" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/9e024324511eeb00983ee76b9aedc3e6ecd993d9", - "reference": "9e024324511eeb00983ee76b9aedc3e6ecd993d9", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/aa3bcf4f7674719df078e61cc8062e5b7f752031", + "reference": "aa3bcf4f7674719df078e61cc8062e5b7f752031", "shasum": "" }, "require": { @@ -3891,7 +3878,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/v6.4.14" + "source": "https://github.com/symfony/error-handler/tree/v6.4.20" }, "funding": [ { @@ -3907,7 +3894,7 @@ "type": "tidelift" } ], - "time": "2024-11-05T15:34:40+00:00" + "time": "2025-03-01T13:00:38+00:00" }, { "name": "symfony/event-dispatcher", @@ -4009,12 +3996,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -4067,16 +4054,16 @@ }, { "name": "symfony/finder", - "version": "v6.4.13", + "version": "v6.4.17", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "daea9eca0b08d0ed1dc9ab702a46128fd1be4958" + "reference": "1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/daea9eca0b08d0ed1dc9ab702a46128fd1be4958", - "reference": "daea9eca0b08d0ed1dc9ab702a46128fd1be4958", + "url": "https://api.github.com/repos/symfony/finder/zipball/1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7", + "reference": "1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7", "shasum": "" }, "require": { @@ -4111,7 +4098,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.4.13" + "source": "https://github.com/symfony/finder/tree/v6.4.17" }, "funding": [ { @@ -4127,20 +4114,20 @@ "type": "tidelift" } ], - "time": "2024-10-01T08:30:56+00:00" + "time": "2024-12-29T13:51:37+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.4.16", + "version": "v6.4.18", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "431771b7a6f662f1575b3cfc8fd7617aa9864d57" + "reference": "d0492d6217e5ab48f51fca76f64cf8e78919d0db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/431771b7a6f662f1575b3cfc8fd7617aa9864d57", - "reference": "431771b7a6f662f1575b3cfc8fd7617aa9864d57", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/d0492d6217e5ab48f51fca76f64cf8e78919d0db", + "reference": "d0492d6217e5ab48f51fca76f64cf8e78919d0db", "shasum": "" }, "require": { @@ -4188,7 +4175,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.4.16" + "source": "https://github.com/symfony/http-foundation/tree/v6.4.18" }, "funding": [ { @@ -4204,20 +4191,20 @@ "type": "tidelift" } ], - "time": "2024-11-13T18:58:10+00:00" + "time": "2025-01-09T15:48:56+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.4.16", + "version": "v6.4.20", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "8838b5b21d807923b893ccbfc2cbeda0f1bc00f0" + "reference": "6be6db31bc74693ce5516e1fd5e5ff1171005e37" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/8838b5b21d807923b893ccbfc2cbeda0f1bc00f0", - "reference": "8838b5b21d807923b893ccbfc2cbeda0f1bc00f0", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6be6db31bc74693ce5516e1fd5e5ff1171005e37", + "reference": "6be6db31bc74693ce5516e1fd5e5ff1171005e37", "shasum": "" }, "require": { @@ -4302,7 +4289,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/v6.4.16" + "source": "https://github.com/symfony/http-kernel/tree/v6.4.20" }, "funding": [ { @@ -4318,20 +4305,20 @@ "type": "tidelift" } ], - "time": "2024-11-27T12:49:36+00:00" + "time": "2025-03-28T13:27:10+00:00" }, { "name": "symfony/mailer", - "version": "v6.4.13", + "version": "v6.4.18", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "c2f7e0d8d7ac8fe25faccf5d8cac462805db2663" + "reference": "e93a6ae2767d7f7578c2b7961d9d8e27580b2b11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/c2f7e0d8d7ac8fe25faccf5d8cac462805db2663", - "reference": "c2f7e0d8d7ac8fe25faccf5d8cac462805db2663", + "url": "https://api.github.com/repos/symfony/mailer/zipball/e93a6ae2767d7f7578c2b7961d9d8e27580b2b11", + "reference": "e93a6ae2767d7f7578c2b7961d9d8e27580b2b11", "shasum": "" }, "require": { @@ -4382,7 +4369,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.4.13" + "source": "https://github.com/symfony/mailer/tree/v6.4.18" }, "funding": [ { @@ -4398,20 +4385,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:18:03+00:00" + "time": "2025-01-24T15:27:15+00:00" }, { "name": "symfony/mime", - "version": "v6.4.13", + "version": "v6.4.19", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "1de1cf14d99b12c7ebbb850491ec6ae3ed468855" + "reference": "ac537b6c55ccc2c749f3c979edfa9ec14aaed4f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/1de1cf14d99b12c7ebbb850491ec6ae3ed468855", - "reference": "1de1cf14d99b12c7ebbb850491ec6ae3ed468855", + "url": "https://api.github.com/repos/symfony/mime/zipball/ac537b6c55ccc2c749f3c979edfa9ec14aaed4f3", + "reference": "ac537b6c55ccc2c749f3c979edfa9ec14aaed4f3", "shasum": "" }, "require": { @@ -4467,7 +4454,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.4.13" + "source": "https://github.com/symfony/mime/tree/v6.4.19" }, "funding": [ { @@ -4483,7 +4470,7 @@ "type": "tidelift" } ], - "time": "2024-10-25T15:07:50+00:00" + "time": "2025-02-17T21:23:52+00:00" }, { "name": "symfony/polyfill-ctype", @@ -5123,16 +5110,16 @@ }, { "name": "symfony/process", - "version": "v6.4.15", + "version": "v6.4.20", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "3cb242f059c14ae08591c5c4087d1fe443564392" + "reference": "e2a61c16af36c9a07e5c9906498b73e091949a20" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/3cb242f059c14ae08591c5c4087d1fe443564392", - "reference": "3cb242f059c14ae08591c5c4087d1fe443564392", + "url": "https://api.github.com/repos/symfony/process/zipball/e2a61c16af36c9a07e5c9906498b73e091949a20", + "reference": "e2a61c16af36c9a07e5c9906498b73e091949a20", "shasum": "" }, "require": { @@ -5164,7 +5151,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.4.15" + "source": "https://github.com/symfony/process/tree/v6.4.20" }, "funding": [ { @@ -5180,20 +5167,20 @@ "type": "tidelift" } ], - "time": "2024-11-06T14:19:14+00:00" + "time": "2025-03-10T17:11:00+00:00" }, { "name": "symfony/routing", - "version": "v6.4.16", + "version": "v6.4.18", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "91e02e606b4b705c2f4fb42f7e7708b7923a3220" + "reference": "e9bfc94953019089acdfb9be51c1b9142c4afa68" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/91e02e606b4b705c2f4fb42f7e7708b7923a3220", - "reference": "91e02e606b4b705c2f4fb42f7e7708b7923a3220", + "url": "https://api.github.com/repos/symfony/routing/zipball/e9bfc94953019089acdfb9be51c1b9142c4afa68", + "reference": "e9bfc94953019089acdfb9be51c1b9142c4afa68", "shasum": "" }, "require": { @@ -5247,7 +5234,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.4.16" + "source": "https://github.com/symfony/routing/tree/v6.4.18" }, "funding": [ { @@ -5263,7 +5250,7 @@ "type": "tidelift" } ], - "time": "2024-11-13T15:31:34+00:00" + "time": "2025-01-09T08:51:02+00:00" }, { "name": "symfony/service-contracts", @@ -5289,12 +5276,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -5436,16 +5423,16 @@ }, { "name": "symfony/translation", - "version": "v6.4.13", + "version": "v6.4.19", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "bee9bfabfa8b4045a66bf82520e492cddbaffa66" + "reference": "3b9bf9f33997c064885a7bfc126c14b9daa0e00e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/bee9bfabfa8b4045a66bf82520e492cddbaffa66", - "reference": "bee9bfabfa8b4045a66bf82520e492cddbaffa66", + "url": "https://api.github.com/repos/symfony/translation/zipball/3b9bf9f33997c064885a7bfc126c14b9daa0e00e", + "reference": "3b9bf9f33997c064885a7bfc126c14b9daa0e00e", "shasum": "" }, "require": { @@ -5511,7 +5498,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.4.13" + "source": "https://github.com/symfony/translation/tree/v6.4.19" }, "funding": [ { @@ -5527,7 +5514,7 @@ "type": "tidelift" } ], - "time": "2024-09-27T18:14:25+00:00" + "time": "2025-02-13T10:18:43+00:00" }, { "name": "symfony/translation-contracts", @@ -5548,12 +5535,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -5683,16 +5670,16 @@ }, { "name": "symfony/var-dumper", - "version": "v6.4.15", + "version": "v6.4.18", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "38254d5a5ac2e61f2b52f9caf54e7aa3c9d36b80" + "reference": "4ad10cf8b020e77ba665305bb7804389884b4837" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/38254d5a5ac2e61f2b52f9caf54e7aa3c9d36b80", - "reference": "38254d5a5ac2e61f2b52f9caf54e7aa3c9d36b80", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/4ad10cf8b020e77ba665305bb7804389884b4837", + "reference": "4ad10cf8b020e77ba665305bb7804389884b4837", "shasum": "" }, "require": { @@ -5748,7 +5735,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.4.15" + "source": "https://github.com/symfony/var-dumper/tree/v6.4.18" }, "funding": [ { @@ -5764,35 +5751,37 @@ "type": "tidelift" } ], - "time": "2024-11-08T15:28:48+00:00" + "time": "2025-01-17T11:26:11+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", - "version": "v2.2.7", + "version": "v2.3.0", "source": { "type": "git", "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb" + "reference": "0d72ac1c00084279c1816675284073c5a337c20d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/83ee6f38df0a63106a9e4536e3060458b74ccedb", - "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/0d72ac1c00084279c1816675284073c5a337c20d", + "reference": "0d72ac1c00084279c1816675284073c5a337c20d", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", - "php": "^5.5 || ^7.0 || ^8.0", - "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0" + "php": "^7.4 || ^8.0", + "symfony/css-selector": "^5.4 || ^6.0 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^8.5.21 || ^9.5.10" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2.x-dev" + "dev-master": "2.x-dev" } }, "autoload": { @@ -5815,9 +5804,9 @@ "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", "support": { "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", - "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.2.7" + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.3.0" }, - "time": "2023-12-08T13:03:43+00:00" + "time": "2024-12-21T16:25:41+00:00" }, { "name": "vlucas/phpdotenv", @@ -6102,16 +6091,16 @@ }, { "name": "filp/whoops", - "version": "2.16.0", + "version": "2.18.0", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "befcdc0e5dce67252aa6322d82424be928214fa2" + "reference": "a7de6c3c6c3c022f5cfc337f8ede6a14460cf77e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/befcdc0e5dce67252aa6322d82424be928214fa2", - "reference": "befcdc0e5dce67252aa6322d82424be928214fa2", + "url": "https://api.github.com/repos/filp/whoops/zipball/a7de6c3c6c3c022f5cfc337f8ede6a14460cf77e", + "reference": "a7de6c3c6c3c022f5cfc337f8ede6a14460cf77e", "shasum": "" }, "require": { @@ -6161,7 +6150,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.16.0" + "source": "https://github.com/filp/whoops/tree/2.18.0" }, "funding": [ { @@ -6169,7 +6158,7 @@ "type": "github" } ], - "time": "2024-09-25T12:00:00+00:00" + "time": "2025-03-15T12:00:00+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -6224,16 +6213,16 @@ }, { "name": "laravel/pint", - "version": "v1.18.3", + "version": "v1.20.0", "source": { "type": "git", "url": "https://github.com/laravel/pint.git", - "reference": "cef51821608239040ab841ad6e1c6ae502ae3026" + "reference": "53072e8ea22213a7ed168a8a15b96fbb8b82d44b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pint/zipball/cef51821608239040ab841ad6e1c6ae502ae3026", - "reference": "cef51821608239040ab841ad6e1c6ae502ae3026", + "url": "https://api.github.com/repos/laravel/pint/zipball/53072e8ea22213a7ed168a8a15b96fbb8b82d44b", + "reference": "53072e8ea22213a7ed168a8a15b96fbb8b82d44b", "shasum": "" }, "require": { @@ -6244,10 +6233,10 @@ "php": "^8.1.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^3.65.0", - "illuminate/view": "^10.48.24", - "larastan/larastan": "^2.9.11", - "laravel-zero/framework": "^10.4.0", + "friendsofphp/php-cs-fixer": "^3.66.0", + "illuminate/view": "^10.48.25", + "larastan/larastan": "^2.9.12", + "laravel-zero/framework": "^10.48.25", "mockery/mockery": "^1.6.12", "nunomaduro/termwind": "^1.17.0", "pestphp/pest": "^2.36.0" @@ -6286,32 +6275,32 @@ "issues": "https://github.com/laravel/pint/issues", "source": "https://github.com/laravel/pint" }, - "time": "2024-11-26T15:34:00+00:00" + "time": "2025-01-14T16:20:53+00:00" }, { "name": "laravel/sail", - "version": "v1.39.1", + "version": "v1.41.0", "source": { "type": "git", "url": "https://github.com/laravel/sail.git", - "reference": "1a3c7291bc88de983b66688919a4d298d68ddec7" + "reference": "fe1a4ada0abb5e4bd99eb4e4b0d87906c00cdeec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/1a3c7291bc88de983b66688919a4d298d68ddec7", - "reference": "1a3c7291bc88de983b66688919a4d298d68ddec7", + "url": "https://api.github.com/repos/laravel/sail/zipball/fe1a4ada0abb5e4bd99eb4e4b0d87906c00cdeec", + "reference": "fe1a4ada0abb5e4bd99eb4e4b0d87906c00cdeec", "shasum": "" }, "require": { - "illuminate/console": "^9.52.16|^10.0|^11.0", - "illuminate/contracts": "^9.52.16|^10.0|^11.0", - "illuminate/support": "^9.52.16|^10.0|^11.0", + "illuminate/console": "^9.52.16|^10.0|^11.0|^12.0", + "illuminate/contracts": "^9.52.16|^10.0|^11.0|^12.0", + "illuminate/support": "^9.52.16|^10.0|^11.0|^12.0", "php": "^8.0", "symfony/console": "^6.0|^7.0", "symfony/yaml": "^6.0|^7.0" }, "require-dev": { - "orchestra/testbench": "^7.0|^8.0|^9.0", + "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0", "phpstan/phpstan": "^1.10" }, "bin": [ @@ -6349,7 +6338,7 @@ "issues": "https://github.com/laravel/sail/issues", "source": "https://github.com/laravel/sail" }, - "time": "2024-11-27T15:42:28+00:00" + "time": "2025-01-24T15:45:36+00:00" }, { "name": "mockery/mockery", @@ -6436,16 +6425,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.12.1", + "version": "1.13.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845" + "reference": "024473a478be9df5fdaca2c793f2232fe788e414" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/123267b2c49fbf30d78a7b2d333f6be754b94845", - "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/024473a478be9df5fdaca2c793f2232fe788e414", + "reference": "024473a478be9df5fdaca2c793f2232fe788e414", "shasum": "" }, "require": { @@ -6484,7 +6473,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.12.1" + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.0" }, "funding": [ { @@ -6492,44 +6481,44 @@ "type": "tidelift" } ], - "time": "2024-11-08T17:47:46+00:00" + "time": "2025-02-12T12:17:51+00:00" }, { "name": "nunomaduro/collision", - "version": "v7.11.0", + "version": "v7.12.0", "source": { "type": "git", "url": "https://github.com/nunomaduro/collision.git", - "reference": "994ea93df5d4132f69d3f1bd74730509df6e8a05" + "reference": "995245421d3d7593a6960822063bdba4f5d7cf1a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/994ea93df5d4132f69d3f1bd74730509df6e8a05", - "reference": "994ea93df5d4132f69d3f1bd74730509df6e8a05", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/995245421d3d7593a6960822063bdba4f5d7cf1a", + "reference": "995245421d3d7593a6960822063bdba4f5d7cf1a", "shasum": "" }, "require": { - "filp/whoops": "^2.16.0", - "nunomaduro/termwind": "^1.15.1", + "filp/whoops": "^2.17.0", + "nunomaduro/termwind": "^1.17.0", "php": "^8.1.0", - "symfony/console": "^6.4.12" + "symfony/console": "^6.4.17" }, "conflict": { "laravel/framework": ">=11.0.0" }, "require-dev": { - "brianium/paratest": "^7.3.1", - "laravel/framework": "^10.48.22", - "laravel/pint": "^1.18.1", - "laravel/sail": "^1.36.0", + "brianium/paratest": "^7.4.8", + "laravel/framework": "^10.48.29", + "laravel/pint": "^1.21.2", + "laravel/sail": "^1.41.0", "laravel/sanctum": "^3.3.3", - "laravel/tinker": "^2.10.0", - "nunomaduro/larastan": "^2.9.8", - "orchestra/testbench-core": "^8.28.3", - "pestphp/pest": "^2.35.1", + "laravel/tinker": "^2.10.1", + "nunomaduro/larastan": "^2.10.0", + "orchestra/testbench-core": "^8.35.0", + "pestphp/pest": "^2.36.0", "phpunit/phpunit": "^10.5.36", "sebastian/environment": "^6.1.0", - "spatie/laravel-ignition": "^2.8.0" + "spatie/laravel-ignition": "^2.9.1" }, "type": "library", "extra": { @@ -6588,7 +6577,7 @@ "type": "patreon" } ], - "time": "2024-10-15T15:12:40+00:00" + "time": "2025-03-14T22:35:49+00:00" }, { "name": "phar-io/manifest", @@ -7031,16 +7020,16 @@ }, { "name": "phpunit/phpunit", - "version": "10.5.39", + "version": "10.5.45", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "4e89eff200b801db58f3d580ad7426431949eaa9" + "reference": "bd68a781d8e30348bc297449f5234b3458267ae8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/4e89eff200b801db58f3d580ad7426431949eaa9", - "reference": "4e89eff200b801db58f3d580ad7426431949eaa9", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/bd68a781d8e30348bc297449f5234b3458267ae8", + "reference": "bd68a781d8e30348bc297449f5234b3458267ae8", "shasum": "" }, "require": { @@ -7112,7 +7101,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.39" + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.45" }, "funding": [ { @@ -7128,7 +7117,7 @@ "type": "tidelift" } ], - "time": "2024-12-11T10:51:07+00:00" + "time": "2025-02-06T16:08:12+00:00" }, { "name": "sebastian/cli-parser", @@ -8111,30 +8100,30 @@ }, { "name": "spatie/error-solutions", - "version": "1.1.2", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/spatie/error-solutions.git", - "reference": "d239a65235a1eb128dfa0a4e4c4ef032ea11b541" + "reference": "e495d7178ca524f2dd0fe6a1d99a1e608e1c9936" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/error-solutions/zipball/d239a65235a1eb128dfa0a4e4c4ef032ea11b541", - "reference": "d239a65235a1eb128dfa0a4e4c4ef032ea11b541", + "url": "https://api.github.com/repos/spatie/error-solutions/zipball/e495d7178ca524f2dd0fe6a1d99a1e608e1c9936", + "reference": "e495d7178ca524f2dd0fe6a1d99a1e608e1c9936", "shasum": "" }, "require": { "php": "^8.0" }, "require-dev": { - "illuminate/broadcasting": "^10.0|^11.0", - "illuminate/cache": "^10.0|^11.0", - "illuminate/support": "^10.0|^11.0", - "livewire/livewire": "^2.11|^3.3.5", + "illuminate/broadcasting": "^10.0|^11.0|^12.0", + "illuminate/cache": "^10.0|^11.0|^12.0", + "illuminate/support": "^10.0|^11.0|^12.0", + "livewire/livewire": "^2.11|^3.5.20", "openai-php/client": "^0.10.1", - "orchestra/testbench": "^7.0|8.22.3|^9.0", - "pestphp/pest": "^2.20", - "phpstan/phpstan": "^1.11", + "orchestra/testbench": "8.22.3|^9.0|^10.0", + "pestphp/pest": "^2.20|^3.0", + "phpstan/phpstan": "^2.1", "psr/simple-cache": "^3.0", "psr/simple-cache-implementation": "^3.0", "spatie/ray": "^1.28", @@ -8173,7 +8162,7 @@ ], "support": { "issues": "https://github.com/spatie/error-solutions/issues", - "source": "https://github.com/spatie/error-solutions/tree/1.1.2" + "source": "https://github.com/spatie/error-solutions/tree/1.1.3" }, "funding": [ { @@ -8181,24 +8170,24 @@ "type": "github" } ], - "time": "2024-12-11T09:51:56+00:00" + "time": "2025-02-14T12:29:50+00:00" }, { "name": "spatie/flare-client-php", - "version": "1.10.0", + "version": "1.10.1", "source": { "type": "git", "url": "https://github.com/spatie/flare-client-php.git", - "reference": "140a42b2c5d59ac4ecf8f5b493386a4f2eb28272" + "reference": "bf1716eb98bd689451b071548ae9e70738dce62f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/140a42b2c5d59ac4ecf8f5b493386a4f2eb28272", - "reference": "140a42b2c5d59ac4ecf8f5b493386a4f2eb28272", + "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/bf1716eb98bd689451b071548ae9e70738dce62f", + "reference": "bf1716eb98bd689451b071548ae9e70738dce62f", "shasum": "" }, "require": { - "illuminate/pipeline": "^8.0|^9.0|^10.0|^11.0", + "illuminate/pipeline": "^8.0|^9.0|^10.0|^11.0|^12.0", "php": "^8.0", "spatie/backtrace": "^1.6.1", "symfony/http-foundation": "^5.2|^6.0|^7.0", @@ -8242,7 +8231,7 @@ ], "support": { "issues": "https://github.com/spatie/flare-client-php/issues", - "source": "https://github.com/spatie/flare-client-php/tree/1.10.0" + "source": "https://github.com/spatie/flare-client-php/tree/1.10.1" }, "funding": [ { @@ -8250,20 +8239,20 @@ "type": "github" } ], - "time": "2024-12-02T14:30:06+00:00" + "time": "2025-02-14T13:42:06+00:00" }, { "name": "spatie/ignition", - "version": "1.15.0", + "version": "1.15.1", "source": { "type": "git", "url": "https://github.com/spatie/ignition.git", - "reference": "e3a68e137371e1eb9edc7f78ffa733f3b98991d2" + "reference": "31f314153020aee5af3537e507fef892ffbf8c85" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/ignition/zipball/e3a68e137371e1eb9edc7f78ffa733f3b98991d2", - "reference": "e3a68e137371e1eb9edc7f78ffa733f3b98991d2", + "url": "https://api.github.com/repos/spatie/ignition/zipball/31f314153020aee5af3537e507fef892ffbf8c85", + "reference": "31f314153020aee5af3537e507fef892ffbf8c85", "shasum": "" }, "require": { @@ -8276,7 +8265,7 @@ "symfony/var-dumper": "^5.4|^6.0|^7.0" }, "require-dev": { - "illuminate/cache": "^9.52|^10.0|^11.0", + "illuminate/cache": "^9.52|^10.0|^11.0|^12.0", "mockery/mockery": "^1.4", "pestphp/pest": "^1.20|^2.0", "phpstan/extension-installer": "^1.1", @@ -8333,27 +8322,27 @@ "type": "github" } ], - "time": "2024-06-12T14:55:22+00:00" + "time": "2025-02-21T14:31:39+00:00" }, { "name": "spatie/laravel-ignition", - "version": "2.9.0", + "version": "2.9.1", "source": { "type": "git", "url": "https://github.com/spatie/laravel-ignition.git", - "reference": "62042df15314b829d0f26e02108f559018e2aad0" + "reference": "1baee07216d6748ebd3a65ba97381b051838707a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/62042df15314b829d0f26e02108f559018e2aad0", - "reference": "62042df15314b829d0f26e02108f559018e2aad0", + "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/1baee07216d6748ebd3a65ba97381b051838707a", + "reference": "1baee07216d6748ebd3a65ba97381b051838707a", "shasum": "" }, "require": { "ext-curl": "*", "ext-json": "*", "ext-mbstring": "*", - "illuminate/support": "^10.0|^11.0", + "illuminate/support": "^10.0|^11.0|^12.0", "php": "^8.1", "spatie/ignition": "^1.15", "symfony/console": "^6.2.3|^7.0", @@ -8362,12 +8351,12 @@ "require-dev": { "livewire/livewire": "^2.11|^3.3.5", "mockery/mockery": "^1.5.1", - "openai-php/client": "^0.8.1", - "orchestra/testbench": "8.22.3|^9.0", - "pestphp/pest": "^2.34", + "openai-php/client": "^0.8.1|^0.10", + "orchestra/testbench": "8.22.3|^9.0|^10.0", + "pestphp/pest": "^2.34|^3.7", "phpstan/extension-installer": "^1.3.1", - "phpstan/phpstan-deprecation-rules": "^1.1.1", - "phpstan/phpstan-phpunit": "^1.3.16", + "phpstan/phpstan-deprecation-rules": "^1.1.1|^2.0", + "phpstan/phpstan-phpunit": "^1.3.16|^2.0", "vlucas/phpdotenv": "^5.5" }, "suggest": { @@ -8424,20 +8413,20 @@ "type": "github" } ], - "time": "2024-12-02T08:43:31+00:00" + "time": "2025-02-20T13:13:55+00:00" }, { "name": "symfony/yaml", - "version": "v6.4.13", + "version": "v6.4.20", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "e99b4e94d124b29ee4cf3140e1b537d2dad8cec9" + "reference": "28ee818fce4a73ac1474346b94e4b966f665c53f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/e99b4e94d124b29ee4cf3140e1b537d2dad8cec9", - "reference": "e99b4e94d124b29ee4cf3140e1b537d2dad8cec9", + "url": "https://api.github.com/repos/symfony/yaml/zipball/28ee818fce4a73ac1474346b94e4b966f665c53f", + "reference": "28ee818fce4a73ac1474346b94e4b966f665c53f", "shasum": "" }, "require": { @@ -8480,7 +8469,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.4.13" + "source": "https://github.com/symfony/yaml/tree/v6.4.20" }, "funding": [ { @@ -8496,7 +8485,7 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:18:03+00:00" + "time": "2025-02-27T20:15:30+00:00" }, { "name": "theseer/tokenizer", diff --git a/config/filesystems.php b/config/filesystems.php index dcf6bed..773590f 100644 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -28,32 +28,32 @@ | */ - 'disks' => [ + 'disks' => [ - 'local' => [ + 'local' => [ 'driver' => 'local', - 'root' => storage_path('app'), - 'throw' => false, + 'root' => storage_path('app'), + 'throw' => false, ], 'public' => [ - 'driver' => 'local', - 'root' => storage_path('app/public'), - 'url' => env('APP_URL').'/storage', + 'driver' => 'local', + 'root' => storage_path('app/public'), + 'url' => env('APP_URL') . '/storage/app', 'visibility' => 'public', - 'throw' => false, + 'throw' => false, ], - 's3' => [ - 'driver' => 's3', - 'key' => env('AWS_ACCESS_KEY_ID'), - 'secret' => env('AWS_SECRET_ACCESS_KEY'), - 'region' => env('AWS_DEFAULT_REGION'), - 'bucket' => env('AWS_BUCKET'), - 'url' => env('AWS_URL'), - 'endpoint' => env('AWS_ENDPOINT'), + 's3' => [ + 'driver' => 's3', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION'), + 'bucket' => env('AWS_BUCKET'), + 'url' => env('AWS_URL'), + 'endpoint' => env('AWS_ENDPOINT'), 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), - 'throw' => false, + 'throw' => false, ], ], @@ -69,9 +69,9 @@ | */ - 'links' => [ + 'links' => [ public_path('storage') => storage_path('app/public'), - public_path('lk') => storage_path('public'), + public_path('lk') => storage_path('public'), ], ]; diff --git a/lang/ru.json b/lang/ru.json index cb018a6..3755f2d 100644 --- a/lang/ru.json +++ b/lang/ru.json @@ -32,5 +32,9 @@ "SoleProperty name": "ФИО полностью", "contract status new": "Новый", "Agent was created": "Создана новая учетная запись агента", - "Your account was attached as agent": "Ваша учетная запись была привязана в качестве агента в" + "Your account was attached as agent": "Ваша учетная запись была привязана в качестве агента в", + "Credits": "Ипотека", + "News": "Новости", + "Projects": "Проекты", + "Sale": "Акции" } \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index f6d5274..bd8dd38 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,7 +4,9 @@ "requires": true, "packages": { "": { + "name": "lk.zachem.info", "dependencies": { + "@editorjs/editorjs": "^2.30.8", "bootstrap": "^5.3.3" }, "devDependencies": { @@ -16,6 +18,11 @@ "vite": "^5.0.0" } }, + "node_modules/@editorjs/editorjs": { + "version": "2.30.8", + "resolved": "https://registry.npmjs.org/@editorjs/editorjs/-/editorjs-2.30.8.tgz", + "integrity": "sha512-ClFuxI1qZTfXPJTacQfsJtOUP6bKoIe6BQNdAvGsDTDVwMnZEzoaSOwvUpdZEE56xppVfQueNK/1MElV9SJKHg==" + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", @@ -888,9 +895,9 @@ "dev": true }, "node_modules/axios": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", - "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz", + "integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==", "dev": true, "dependencies": { "follow-redirects": "^1.15.6", @@ -1165,9 +1172,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "dev": true, "funding": [ { @@ -1328,9 +1335,9 @@ } }, "node_modules/vite": { - "version": "5.4.10", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.10.tgz", - "integrity": "sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==", + "version": "5.4.17", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.17.tgz", + "integrity": "sha512-5+VqZryDj4wgCs55o9Lp+p8GE78TLVg0lasCH5xFZ4jacZjtqZa6JUw9/p0WeAojaOfncSM6v77InkFPGnvPvg==", "dev": true, "dependencies": { "esbuild": "^0.21.3", diff --git a/package.json b/package.json index 6136f82..aa0697d 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "vite": "^5.0.0" }, "dependencies": { + "@editorjs/editorjs": "^2.30.8", "bootstrap": "^5.3.3" } } diff --git a/public/lk b/public/lk new file mode 120000 index 0000000..7f0d0fa --- /dev/null +++ b/public/lk @@ -0,0 +1 @@ +/home/thekindbull/Рабочий стол/laravel_projects/gitea_alfa/lk.zachem.info/storage/public \ No newline at end of file diff --git a/resources/js/app.js b/resources/js/app.js index e59d6a0..6a9521e 100644 --- a/resources/js/app.js +++ b/resources/js/app.js @@ -1 +1 @@ -import './bootstrap'; +import './bootstrap' \ No newline at end of file diff --git a/resources/stubs/config.stub b/resources/stubs/config.stub new file mode 100644 index 0000000..ce09543 --- /dev/null +++ b/resources/stubs/config.stub @@ -0,0 +1,5 @@ +app->register(RouteServiceProvider::class); + } + + public function boot() + { + $this->registerViews(); + $this->registerLivewireViews(); + $this->registerMigrations(); + $this->registerConfig(); + $this->registerComponent(); + $this->registerLivewire(); + } + + protected function registerViews() + { + $moduleViewsPath = __DIR__.'/../Views'; + $this->loadViewsFrom( + $moduleViewsPath, strtolower($this->moduleName) + ); + } + + protected function registerLivewireViews() + { + $moduleViewsPath = __DIR__.'/../Views/livewire'; + $this->loadViewsFrom( + $moduleViewsPath, strtolower($this->moduleName) + ); + } + + protected function registerMigrations() + { + $this->loadMigrationsFrom( + app_path('Modules/'.$this->moduleName.'/Database/Migrations') + ); + } + + protected function registerConfig() + { + $path = app_path('Modules/'.$this->moduleName.'/Config/config.php'); + $this->mergeConfigFrom( + $path, strtolower($this->moduleName) + ); + } + + protected function registerLivewire() + { + //Livewire::component('', \Modules\\Http\Livewire\::class); + } + + protected function registerComponent() + { + //Blade::component('', \Modules\\Http\Components\::class); + } +} \ No newline at end of file diff --git a/resources/stubs/route_service_provider.stub b/resources/stubs/route_service_provider.stub new file mode 100644 index 0000000..7cca74e --- /dev/null +++ b/resources/stubs/route_service_provider.stub @@ -0,0 +1,24 @@ +registerWebRoutes(); + } + + protected function registerWebRoutes() + { + //Add Web Routes with web Guard + Route::middleware('web') + //Set Default Controllers Namespace + ->namespace('Modules\\TeamplateDirectoryName\\Http\\Controllers') + ->group(app_path('Modules/TeamplateDirectoryName/Routes/web.php')); + } +} \ No newline at end of file diff --git a/resources/stubs/routes.web.stub b/resources/stubs/routes.web.stub new file mode 100644 index 0000000..6b01180 --- /dev/null +++ b/resources/stubs/routes.web.stub @@ -0,0 +1,13 @@ +group(function() { + + Route::get('/TeamplateRoutePrefix', [TeamplateClass::class, 'index']); + + Route::middleware(['hasAccess'])->group(function() { + /** Routes that need to be protected - Маршруты которые нужно защитить */ + }); +}); \ No newline at end of file diff --git a/resources/stubs/view.stub b/resources/stubs/view.stub new file mode 100644 index 0000000..f8198cf --- /dev/null +++ b/resources/stubs/view.stub @@ -0,0 +1,4 @@ +@extends('layouts.app') + @section('content') +

Example views

+ @endsection \ No newline at end of file diff --git a/resources/views/layouts/admin.blade.php b/resources/views/layouts/admin.blade.php new file mode 100644 index 0000000..93c8787 --- /dev/null +++ b/resources/views/layouts/admin.blade.php @@ -0,0 +1,103 @@ + + + + + + + + + + + {{ config('app.name', 'Laravel') }} + + + + + + + @vite(['resources/sass/app.scss', 'resources/js/app.js', 'resources/css/app.css']) + + + +
+ + +
+
+
+
+ @livewire('admin.menu') +
+
+ @foreach ($errors->all() as $error) + {{ $error }} + @endforeach + @yield('content') +
+
+
+ +
+
+ + + diff --git a/resources/views/left-panel.blade.php b/resources/views/left-panel.blade.php index 86e6641..0ec9ccd 100644 --- a/resources/views/left-panel.blade.php +++ b/resources/views/left-panel.blade.php @@ -1,45 +1 @@ - - +@livewire('mainMenu') diff --git a/resources/views/livewire/main-menu.blade.php b/resources/views/livewire/main-menu.blade.php index 7c14ef8..d1b5d95 100644 --- a/resources/views/livewire/main-menu.blade.php +++ b/resources/views/livewire/main-menu.blade.php @@ -51,6 +51,15 @@ class="nav-link d-flex align-items-center gap-2 fs-5 border rounded-4 active" ar @endif + @if (in_array($roles::SUPER_ADMIN, $userRoles)) + + @endif + diff --git a/resources/views/user/dashboard.blade.php b/resources/views/user/dashboard.blade.php index 8170cac..6c3b853 100644 --- a/resources/views/user/dashboard.blade.php +++ b/resources/views/user/dashboard.blade.php @@ -45,65 +45,7 @@ class="list-group-item list-group-item-action p-3 bg-white rounded border border
Новости
Смотреть все
-
-
-
-
-
-
- Акция -
-

Скидка 30% на апартаменты

-
-
-
- - - -
-
-
-
-
-
-
-
- Акция -
-

Скидка 30% на апартаменты

-
-
-
- - - -
-
-
-
-
-
-
-
- Акция -
-

Скидка 30% на апартаменты

-
-
-
- - - -
-
-
-
+ @livewire(name: 'posts.list')