From dfd59e0b3b32f86eefd7a6b46106387959bbf541 Mon Sep 17 00:00:00 2001 From: Arthur Monney Date: Mon, 4 Nov 2024 02:51:21 +0100 Subject: [PATCH] feat: [LAR-28] add reply form to create and update reply to thread --- app/Actions/Forum/CreateReplyAction.php | 29 ++ app/Gamify/Points/ArticleCreated.php | 9 +- app/Gamify/Points/BestReply.php | 5 +- app/Gamify/Points/DiscussionCreated.php | 9 +- app/Gamify/Points/PostCreated.php | 11 +- app/Gamify/Points/ThreadCreated.php | 11 +- app/Livewire/Forum/CreateReply.php | 66 --- app/Livewire/Forum/Reply.php | 94 ++-- app/Livewire/Forum/ReplyForm.php | 121 +++++ app/Livewire/Pages/Forum/DetailThread.php | 3 +- app/Models/Reply.php | 4 +- app/Models/Thread.php | 1 + app/helpers.php | 6 +- composer.json | 7 +- composer.lock | 449 ++++++++---------- config/markdown.php | 4 +- lang/en/notifications.php | 5 + lang/en/pages/forum.php | 1 + lang/fr/notifications.php | 5 + lang/fr/pages/forum.php | 1 + resources/views/forum/_channels.blade.php | 78 --- resources/views/forum/edit.blade.php | 18 - .../views/livewire/articles/_form.blade.php | 16 +- .../livewire/discussions/_form.blade.php | 14 +- .../livewire/forum/create-reply.blade.php | 25 - .../views/livewire/forum/reply-form.blade.php | 78 +++ .../views/livewire/forum/reply.blade.php | 44 +- .../pages/forum/detail-thread.blade.php | 24 +- .../most_active_users_per_week.blade.php | 2 +- routes/forum.php | 2 - routes/web.php | 1 - .../Article/SendTelegramNotificationTest.php | 2 +- tests/Feature/Forum/ChannelTest.php | 1 - tests/Feature/Forum/DiscussionTest.php | 11 +- tests/Feature/Forum/ReplyTest.php | 15 +- tests/Feature/Forum/ThreadTest.php | 5 +- .../Livewire/Pages/Forum/DetailThreadTest.php | 27 ++ .../Livewire/Pages/Forum/IndexTest.php | 1 - tests/Feature/UserActivitiesTest.php | 34 +- tests/Pest.php | 2 +- 40 files changed, 603 insertions(+), 638 deletions(-) create mode 100644 app/Actions/Forum/CreateReplyAction.php delete mode 100644 app/Livewire/Forum/CreateReply.php create mode 100644 app/Livewire/Forum/ReplyForm.php delete mode 100644 resources/views/forum/_channels.blade.php delete mode 100644 resources/views/forum/edit.blade.php delete mode 100644 resources/views/livewire/forum/create-reply.blade.php create mode 100644 resources/views/livewire/forum/reply-form.blade.php diff --git a/app/Actions/Forum/CreateReplyAction.php b/app/Actions/Forum/CreateReplyAction.php new file mode 100644 index 00000000..ee55249a --- /dev/null +++ b/app/Actions/Forum/CreateReplyAction.php @@ -0,0 +1,29 @@ + $body]); + $reply->authoredBy($user); + $reply->to($model); + $reply->save(); + + givePoint(new ReplyCreated($model, $user)); + event(new ReplyWasCreated($reply)); + } +} diff --git a/app/Gamify/Points/ArticleCreated.php b/app/Gamify/Points/ArticleCreated.php index 8e455ed5..b37c5777 100644 --- a/app/Gamify/Points/ArticleCreated.php +++ b/app/Gamify/Points/ArticleCreated.php @@ -5,21 +5,16 @@ namespace App\Gamify\Points; use App\Models\Article; -use App\Models\User; use QCod\Gamify\PointType; final class ArticleCreated extends PointType { public int $points = 50; + protected string $payee = 'user'; + public function __construct(Article $subject) { $this->subject = $subject; } - - public function payee(): User - { - // @phpstan-ignore-next-line - return $this->getSubject()->user; - } } diff --git a/app/Gamify/Points/BestReply.php b/app/Gamify/Points/BestReply.php index e7b41703..cd643c43 100644 --- a/app/Gamify/Points/BestReply.php +++ b/app/Gamify/Points/BestReply.php @@ -4,15 +4,16 @@ namespace App\Gamify\Points; +use App\Models\Reply; use QCod\Gamify\PointType; final class BestReply extends PointType { public int $points = 20; - protected string $payee = 'author'; + protected string $payee = 'user'; - public function __construct(mixed $subject) + public function __construct(Reply $subject) { $this->subject = $subject; } diff --git a/app/Gamify/Points/DiscussionCreated.php b/app/Gamify/Points/DiscussionCreated.php index 04083e9c..66e94afc 100644 --- a/app/Gamify/Points/DiscussionCreated.php +++ b/app/Gamify/Points/DiscussionCreated.php @@ -5,21 +5,16 @@ namespace App\Gamify\Points; use App\Models\Discussion; -use App\Models\User; use QCod\Gamify\PointType; final class DiscussionCreated extends PointType { public int $points = 20; + protected string $payee = 'user'; + public function __construct(Discussion $subject) { $this->subject = $subject; } - - public function payee(): User - { - // @phpstan-ignore-next-line - return $this->getSubject()->user; - } } diff --git a/app/Gamify/Points/PostCreated.php b/app/Gamify/Points/PostCreated.php index f28c5975..5ec37b35 100644 --- a/app/Gamify/Points/PostCreated.php +++ b/app/Gamify/Points/PostCreated.php @@ -5,23 +5,16 @@ namespace App\Gamify\Points; use App\Models\Article; -use App\Models\User; use QCod\Gamify\PointType; -/** - * @method Article getSubject() - */ final class PostCreated extends PointType { public int $points = 50; + protected string $payee = 'user'; + public function __construct(Article $subject) { $this->subject = $subject; } - - public function payee(): User - { - return $this->getSubject()->user; - } } diff --git a/app/Gamify/Points/ThreadCreated.php b/app/Gamify/Points/ThreadCreated.php index 70cf2809..d84f0204 100644 --- a/app/Gamify/Points/ThreadCreated.php +++ b/app/Gamify/Points/ThreadCreated.php @@ -5,23 +5,16 @@ namespace App\Gamify\Points; use App\Models\Thread; -use App\Models\User; use QCod\Gamify\PointType; -/** - * @method Thread getSubject() - */ final class ThreadCreated extends PointType { public int $points = 55; + protected string $payee = 'user'; + public function __construct(Thread $subject) { $this->subject = $subject; } - - public function payee(): User - { - return $this->getSubject()->user; - } } diff --git a/app/Livewire/Forum/CreateReply.php b/app/Livewire/Forum/CreateReply.php deleted file mode 100644 index fa5db7a0..00000000 --- a/app/Livewire/Forum/CreateReply.php +++ /dev/null @@ -1,66 +0,0 @@ - 'onMarkdownUpdate']; - - /** - * @var string[] - */ - protected $rules = [ - 'body' => 'required', - ]; - - public function onMarkdownUpdate(string $content): void - { - $this->body = $content; - } - - public function save(): void - { - $this->authorize('create', Reply::class); - - $this->validate(); - - $reply = new Reply(['body' => $this->body]); - $reply->authoredBy(Auth::user()); // @phpstan-ignore-line - $reply->to($this->thread); - $reply->save(); - - givePoint(new ReplyCreated($this->thread, Auth::user())); - - event(new ReplyWasCreated($reply)); - - session()->flash('status', 'Réponse ajoutée avec succès!'); - - $this->redirectRoute('forum.show', $this->thread); - } - - public function render(): View - { - return view('livewire.forum.create-reply'); - } -} diff --git a/app/Livewire/Forum/Reply.php b/app/Livewire/Forum/Reply.php index 3420bdbb..33c1f8c2 100644 --- a/app/Livewire/Forum/Reply.php +++ b/app/Livewire/Forum/Reply.php @@ -4,65 +4,83 @@ namespace App\Livewire\Forum; -use App\Exceptions\CouldNotMarkReplyAsSolution; use App\Gamify\Points\BestReply; use App\Models\Reply as ReplyModel; use App\Models\Thread; +use Filament\Actions\Action; +use Filament\Actions\Concerns\InteractsWithActions; +use Filament\Actions\Contracts\HasActions; +use Filament\Forms\Concerns\InteractsWithForms; +use Filament\Forms\Contracts\HasForms; use Filament\Notifications\Notification; use Illuminate\Contracts\View\View; use Illuminate\Support\Facades\Auth; use Livewire\Attributes\On; use Livewire\Component; -final class Reply extends Component +final class Reply extends Component implements HasActions, HasForms { + use InteractsWithActions; + use InteractsWithForms; + public ReplyModel $reply; public Thread $thread; - public function edit(): void + public function editAction(): Action { - $this->authorize('update', $this->reply); - - $this->validate(); - - // $this->reply->update(['body' => $this->body]); - - Notification::make() - ->title(__('Réponse modifiée')) - ->body(__('Vous avez modifié cette solution avec succès.')) - ->success() - ->duration(5000) - ->send(); - - $this->dispatch('reply.updated'); + return Action::make('edit') + ->label(__('actions.edit')) + ->color('gray') + ->authorize('update', $this->reply) + ->action( + fn () => $this->dispatch( + 'replyForm', + replyId: $this->reply->id + )->to(ReplyForm::class) + ); } - /** - * @throws CouldNotMarkReplyAsSolution - */ - public function markAsSolution(): void + public function deleteAction(): Action { - $this->authorize('manage', $this->thread); - - if ($this->thread->isSolved()) { - undoPoint(new BestReply($this->thread->solutionReply)); - } - - $this->thread->markSolution($this->reply, Auth::user()); // @phpstan-ignore-line - - givePoint(new BestReply($this->reply)); - - Notification::make() - ->title(__('notifications.thread.best_reply')) - ->success() - ->duration(5000) - ->send(); + return Action::make('delete') + ->label(__('actions.delete')) + ->color('danger') + ->authorize('delete', $this->reply) + ->requiresConfirmation() + ->action(function (): void { + $this->reply->delete(); + + $this->redirectRoute('forum.show', $this->thread, navigate: true); + }); + } - $this->dispatch('thread.save.{$thread->id}'); + public function solutionAction(): Action + { + return Action::make('solution') + ->label(__('pages/forum.mark_answer')) + ->color('success') + ->authorize('manage', $this->thread) + ->action(function (): void { + if ($this->thread->isSolved()) { + undoPoint(new BestReply($this->thread->solutionReply)); + } + + $this->thread->markSolution($this->reply, Auth::user()); // @phpstan-ignore-line + + givePoint(new BestReply($this->reply)); + + Notification::make() + ->title(__('notifications.thread.best_reply')) + ->success() + ->duration(5000) + ->send(); + + $this->redirect(route('forum.show', $this->thread).$this->reply->getPathUrl(), navigate: true); + }); } - #[On('reply.updated')] + #[On('reply.save.{reply.id}')] public function render(): View { return view('livewire.forum.reply'); diff --git a/app/Livewire/Forum/ReplyForm.php b/app/Livewire/Forum/ReplyForm.php new file mode 100644 index 00000000..943d5a58 --- /dev/null +++ b/app/Livewire/Forum/ReplyForm.php @@ -0,0 +1,121 @@ +form->fill(); + } + + #[On('replyForm')] + public function open(?int $replyId = null): void + { + $this->reply = Reply::query()->find($replyId); + + $this->form->fill(['body' => $this->reply?->body ?? '']); + + $this->show = true; + } + + public function close(): void + { + $this->show = false; + $this->body = null; + $this->reply = null; + } + + public function form(Form $form): Form + { + return $form + ->schema([ + Forms\Components\MarkdownEditor::make('body') + ->hiddenLabel() + ->fileAttachmentsDisk('public') + ->autofocus() + ->toolbarButtons([ + 'attachFiles', + 'blockquote', + 'bold', + 'bulletList', + 'codeBlock', + 'link', + ]), + ]); + } + + public function save(): void + { + $this->validate(); + + if ($this->reply) { + $this->updateReply(); + } else { + $this->createReply(); + } + + $this->redirectRoute('forum.show', $this->thread, navigate: true); + } + + public function createReply(): void + { + $this->authorize('create', Reply::class); + + app(CreateReplyAction::class)->execute( + body: (string) $this->body, + model: $this->thread, + ); + + Notification::make() + ->title(__('notifications.reply.created')) + ->success() + ->duration(5000) + ->send(); + } + + public function updateReply(): void + { + $this->authorize('update', $this->reply); + + $this->reply?->update(['body' => $this->body]); + + Notification::make() + ->title(__('notifications.reply.updated')) + ->success() + ->duration(5000) + ->send(); + } + + public function render(): View + { + return view('livewire.forum.reply-form'); + } +} diff --git a/app/Livewire/Pages/Forum/DetailThread.php b/app/Livewire/Pages/Forum/DetailThread.php index d91bb2ed..cd0b2df5 100644 --- a/app/Livewire/Pages/Forum/DetailThread.php +++ b/app/Livewire/Pages/Forum/DetailThread.php @@ -11,7 +11,6 @@ use Filament\Forms\Concerns\InteractsWithForms; use Filament\Forms\Contracts\HasForms; use Illuminate\Contracts\View\View; -use Illuminate\Support\Facades\Auth; use Livewire\Attributes\Layout; use Livewire\Attributes\On; use Livewire\Component; @@ -51,8 +50,8 @@ public function deleteAction(): Action return Action::make('delete') ->label(__('actions.delete')) ->color('danger') - ->requiresConfirmation() ->authorize('delete', $this->thread) + ->requiresConfirmation() ->action(function (): void { $this->thread->delete(); diff --git a/app/Models/Reply.php b/app/Models/Reply.php index b219bff0..2048b7f9 100644 --- a/app/Models/Reply.php +++ b/app/Models/Reply.php @@ -85,7 +85,9 @@ public function to(ReplyInterface $replyable): void public function allChildReplies(): MorphMany { - return $this->replies()->with('allChildReplies')->where('replyable_type', 'reply'); + return $this->replies() + ->with('allChildReplies') + ->where('replyable_type', 'reply'); } /** diff --git a/app/Models/Thread.php b/app/Models/Thread.php index 6b0e91f2..91617bb1 100644 --- a/app/Models/Thread.php +++ b/app/Models/Thread.php @@ -46,6 +46,7 @@ * @property int | null $resolved_by * @property User | null $resolvedBy * @property User $user + * @property Reply $solutionReply * @property \Illuminate\Database\Eloquent\Collection | Channel[] $channels */ final class Thread extends Model implements Feedable, ReactableInterface, ReplyInterface, SubscribeInterface, Viewable diff --git a/app/helpers.php b/app/helpers.php index e610f6b2..19f7ec8f 100644 --- a/app/helpers.php +++ b/app/helpers.php @@ -86,8 +86,8 @@ function getFilter(string $key, array $filters = [], string $default = 'recent') */ function route_to_reply_able(mixed $replyAble): string { - return $replyAble instanceof \App\Models\Thread ? - route('forum.show', $replyAble->slug()) : - route('discussions.show', $replyAble->slug()); + $routeName = $replyAble instanceof \App\Models\Thread ? 'forum.show' : 'discussions.show'; + + return route($routeName, $replyAble->slug()); } } diff --git a/composer.json b/composer.json index 6e404597..65066a11 100644 --- a/composer.json +++ b/composer.json @@ -11,14 +11,13 @@ "archtechx/laravel-seo": "^0.9", "arrilot/laravel-widgets": "^3.13.2", "blade-ui-kit/blade-heroicons": "^2.0", - "blade-ui-kit/blade-ui-kit": "^0.4", "cyrildewit/eloquent-viewable": "^7.0", "doctrine/dbal": "^3.6.4", "filament/filament": "^3.0", "filament/notifications": "^3.0", "francescomalatesta/laravel-feature": "dev-l10-compatibility", "gehrisandro/tailwind-merge-laravel": "^1.1", - "graham-campbell/markdown": "^15.0", + "graham-campbell/markdown": "^15.2", "guzzlehttp/guzzle": "^7.7.0", "jenssegers/agent": "^2.6.4", "laravel-notification-channels/telegram": "^4.0", @@ -29,11 +28,11 @@ "laravel/slack-notification-channel": "^2.5", "laravel/socialite": "^5.6.3", "laravel/tinker": "^2.8.1", - "laravelcm/laravel-subscriptions": "^1.0", + "laravelcm/laravel-subscriptions": "^1.3", "laravelcm/livewire-slide-overs": "^1.0", "livewire/livewire": "^3.0", "mckenziearts/blade-untitledui-icons": "^1.3", - "notchpay/notchpay-php": "^1.3", + "notchpay/notchpay-php": "^1.6", "qcod/laravel-gamify": "1.0.7", "ramsey/uuid": "^4.7.4", "sentry/sentry-laravel": "^3.7", diff --git a/composer.lock b/composer.lock index c4daf8c5..fda0c1b8 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": "2f61037f9a5ce54e25cb939458b800e0", + "content-hash": "0efc9d1d67bfc842186d5b7a908935c4", "packages": [ { "name": "abraham/twitteroauth", @@ -1323,86 +1323,6 @@ ], "time": "2024-10-17T17:38:00+00:00" }, - { - "name": "blade-ui-kit/blade-ui-kit", - "version": "0.4.0", - "source": { - "type": "git", - "url": "https://github.com/blade-ui-kit/blade-ui-kit.git", - "reference": "bfb5beb26e1347e0f2be6f245a22388410fe53ce" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/blade-ui-kit/blade-ui-kit/zipball/bfb5beb26e1347e0f2be6f245a22388410fe53ce", - "reference": "bfb5beb26e1347e0f2be6f245a22388410fe53ce", - "shasum": "" - }, - "require": { - "ext-json": "*", - "illuminate/filesystem": "^9.0|^10.0", - "illuminate/support": "^9.0|^10.0", - "illuminate/view": "^9.0|^10.0", - "nesbot/carbon": "^2.38", - "php": "^8.0" - }, - "require-dev": { - "gajus/dindent": "^2.0", - "guzzlehttp/guzzle": "^7.4", - "league/commonmark": "^1.4|^2.0", - "lorisleiva/cron-translator": "^0.1.1", - "orchestra/testbench": "^7.1|^8.0", - "phpunit/phpunit": "^9.0" - }, - "suggest": { - "league/commonmark": "Required to use the markdown component (^1.4).", - "lorisleiva/cron-translator": "Required to use the cron component (^0.1.1)." - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "BladeUIKit\\BladeUIKitServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "BladeUIKit\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Dries Vints", - "homepage": "https://driesvints.com" - } - ], - "description": "A set of renderless components to utilise in your Laravel Blade views.", - "homepage": "https://github.com/blade-ui-kit/blade-ui-kit", - "keywords": [ - "blade", - "laravel", - "ui" - ], - "support": { - "issues": "https://github.com/blade-ui-kit/blade-ui-kit/issues", - "source": "https://github.com/blade-ui-kit/blade-ui-kit" - }, - "funding": [ - { - "url": "https://github.com/caneco", - "type": "github" - }, - { - "url": "https://github.com/driesvints", - "type": "github" - } - ], - "time": "2023-02-13T16:56:05+00:00" - }, { "name": "brick/math", "version": "0.12.1", @@ -2672,16 +2592,16 @@ }, { "name": "filament/actions", - "version": "v3.2.121", + "version": "v3.2.122", "source": { "type": "git", "url": "https://github.com/filamentphp/actions.git", - "reference": "1c79f2ffefdee6a21995717a52f006a541b971bc" + "reference": "3badf1a1589bf70fdc625130f6dfc1ca2146a32f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/actions/zipball/1c79f2ffefdee6a21995717a52f006a541b971bc", - "reference": "1c79f2ffefdee6a21995717a52f006a541b971bc", + "url": "https://api.github.com/repos/filamentphp/actions/zipball/3badf1a1589bf70fdc625130f6dfc1ca2146a32f", + "reference": "3badf1a1589bf70fdc625130f6dfc1ca2146a32f", "shasum": "" }, "require": { @@ -2721,20 +2641,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2024-10-24T13:46:52+00:00" + "time": "2024-10-31T13:38:12+00:00" }, { "name": "filament/filament", - "version": "v3.2.121", + "version": "v3.2.122", "source": { "type": "git", "url": "https://github.com/filamentphp/panels.git", - "reference": "5e9a946d0b64c1ef9a7ef1cb256a427f2838dbc2" + "reference": "076f5367a3dfe5f6864d117f6826ca7821586931" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/panels/zipball/5e9a946d0b64c1ef9a7ef1cb256a427f2838dbc2", - "reference": "5e9a946d0b64c1ef9a7ef1cb256a427f2838dbc2", + "url": "https://api.github.com/repos/filamentphp/panels/zipball/076f5367a3dfe5f6864d117f6826ca7821586931", + "reference": "076f5367a3dfe5f6864d117f6826ca7821586931", "shasum": "" }, "require": { @@ -2786,20 +2706,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2024-10-24T13:47:13+00:00" + "time": "2024-10-31T13:38:14+00:00" }, { "name": "filament/forms", - "version": "v3.2.121", + "version": "v3.2.122", "source": { "type": "git", "url": "https://github.com/filamentphp/forms.git", - "reference": "68c9f7f4bd9677f6f99d21396dfbe69cfa142584" + "reference": "c863b5765b871485a2c624c43a0eb6e957a04b54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/forms/zipball/68c9f7f4bd9677f6f99d21396dfbe69cfa142584", - "reference": "68c9f7f4bd9677f6f99d21396dfbe69cfa142584", + "url": "https://api.github.com/repos/filamentphp/forms/zipball/c863b5765b871485a2c624c43a0eb6e957a04b54", + "reference": "c863b5765b871485a2c624c43a0eb6e957a04b54", "shasum": "" }, "require": { @@ -2842,11 +2762,11 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2024-10-24T13:47:01+00:00" + "time": "2024-10-31T13:38:16+00:00" }, { "name": "filament/infolists", - "version": "v3.2.121", + "version": "v3.2.122", "source": { "type": "git", "url": "https://github.com/filamentphp/infolists.git", @@ -2897,7 +2817,7 @@ }, { "name": "filament/notifications", - "version": "v3.2.121", + "version": "v3.2.122", "source": { "type": "git", "url": "https://github.com/filamentphp/notifications.git", @@ -2949,16 +2869,16 @@ }, { "name": "filament/support", - "version": "v3.2.121", + "version": "v3.2.122", "source": { "type": "git", "url": "https://github.com/filamentphp/support.git", - "reference": "fa8ada5101be964daa8f112616945a8f2ca5929e" + "reference": "e7174cee7e1d08205f7120d0dcc0d00d9bdd4d32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/support/zipball/fa8ada5101be964daa8f112616945a8f2ca5929e", - "reference": "fa8ada5101be964daa8f112616945a8f2ca5929e", + "url": "https://api.github.com/repos/filamentphp/support/zipball/e7174cee7e1d08205f7120d0dcc0d00d9bdd4d32", + "reference": "e7174cee7e1d08205f7120d0dcc0d00d9bdd4d32", "shasum": "" }, "require": { @@ -3004,20 +2924,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2024-10-24T13:47:33+00:00" + "time": "2024-10-31T13:38:25+00:00" }, { "name": "filament/tables", - "version": "v3.2.121", + "version": "v3.2.122", "source": { "type": "git", "url": "https://github.com/filamentphp/tables.git", - "reference": "7800832d8507a418787c5f05bd562b65d4601827" + "reference": "56a852f7992a01ad8d7b85034cdbb2ae8a21086a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/tables/zipball/7800832d8507a418787c5f05bd562b65d4601827", - "reference": "7800832d8507a418787c5f05bd562b65d4601827", + "url": "https://api.github.com/repos/filamentphp/tables/zipball/56a852f7992a01ad8d7b85034cdbb2ae8a21086a", + "reference": "56a852f7992a01ad8d7b85034cdbb2ae8a21086a", "shasum": "" }, "require": { @@ -3056,11 +2976,11 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2024-10-24T13:47:33+00:00" + "time": "2024-10-31T13:38:27+00:00" }, { "name": "filament/widgets", - "version": "v3.2.121", + "version": "v3.2.122", "source": { "type": "git", "url": "https://github.com/filamentphp/widgets.git", @@ -4705,16 +4625,16 @@ }, { "name": "laravel/fortify", - "version": "v1.24.3", + "version": "v1.24.4", "source": { "type": "git", "url": "https://github.com/laravel/fortify.git", - "reference": "0e9c9ec6f9c36f4d8a4b7b5df78e4dfccec47797" + "reference": "5bd3bdd535acf4054865c64eec6d8bb8c60cc127" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/fortify/zipball/0e9c9ec6f9c36f4d8a4b7b5df78e4dfccec47797", - "reference": "0e9c9ec6f9c36f4d8a4b7b5df78e4dfccec47797", + "url": "https://api.github.com/repos/laravel/fortify/zipball/5bd3bdd535acf4054865c64eec6d8bb8c60cc127", + "reference": "5bd3bdd535acf4054865c64eec6d8bb8c60cc127", "shasum": "" }, "require": { @@ -4766,7 +4686,7 @@ "issues": "https://github.com/laravel/fortify/issues", "source": "https://github.com/laravel/fortify" }, - "time": "2024-10-18T13:43:00+00:00" + "time": "2024-10-29T13:59:23+00:00" }, { "name": "laravel/framework", @@ -5361,16 +5281,16 @@ }, { "name": "laravelcm/laravel-subscriptions", - "version": "v1.3.1", + "version": "v1.3.2", "source": { "type": "git", "url": "https://github.com/laravelcm/laravel-subscriptions.git", - "reference": "0fb781ac067a769a7653c6580aef68e1ace351fc" + "reference": "fbde435db5488b33a181e76d6719acd4db74e5d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravelcm/laravel-subscriptions/zipball/0fb781ac067a769a7653c6580aef68e1ace351fc", - "reference": "0fb781ac067a769a7653c6580aef68e1ace351fc", + "url": "https://api.github.com/repos/laravelcm/laravel-subscriptions/zipball/fbde435db5488b33a181e76d6719acd4db74e5d9", + "reference": "fbde435db5488b33a181e76d6719acd4db74e5d9", "shasum": "" }, "require": { @@ -5388,7 +5308,8 @@ "larastan/larastan": "^2.0", "laravel/pint": "^1.13", "orchestra/testbench": "^8.0|^9.0", - "pestphp/pest": "^2.18" + "pestphp/pest": "^2.18", + "spatie/test-time": "^1.3" }, "type": "library", "extra": { @@ -5441,7 +5362,7 @@ "type": "github" } ], - "time": "2024-07-24T04:08:22+00:00" + "time": "2024-11-01T20:48:24+00:00" }, { "name": "laravelcm/livewire-slide-overs", @@ -8219,23 +8140,23 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.8.2", + "version": "1.9.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "153ae662783729388a584b4361f2545e4d841e3c" + "reference": "1fb5ba8d045f5dd984ebded5b1cc66f29459422d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/153ae662783729388a584b4361f2545e4d841e3c", - "reference": "153ae662783729388a584b4361f2545e4d841e3c", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/1fb5ba8d045f5dd984ebded5b1cc66f29459422d", + "reference": "1fb5ba8d045f5dd984ebded5b1cc66f29459422d", "shasum": "" }, "require": { "doctrine/deprecations": "^1.0", "php": "^7.3 || ^8.0", "phpdocumentor/reflection-common": "^2.0", - "phpstan/phpdoc-parser": "^1.13" + "phpstan/phpdoc-parser": "^1.18" }, "require-dev": { "ext-tokenizer": "*", @@ -8271,9 +8192,9 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.2" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.9.0" }, - "time": "2024-02-23T11:10:43+00:00" + "time": "2024-11-03T20:11:34+00:00" }, { "name": "phpoption/phpoption", @@ -11359,16 +11280,16 @@ }, { "name": "symfony/console", - "version": "v6.4.12", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "72d080eb9edf80e36c19be61f72c98ed8273b765" + "reference": "f793dd5a7d9ae9923e35d0503d08ba734cec1d79" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/72d080eb9edf80e36c19be61f72c98ed8273b765", - "reference": "72d080eb9edf80e36c19be61f72c98ed8273b765", + "url": "https://api.github.com/repos/symfony/console/zipball/f793dd5a7d9ae9923e35d0503d08ba734cec1d79", + "reference": "f793dd5a7d9ae9923e35d0503d08ba734cec1d79", "shasum": "" }, "require": { @@ -11433,7 +11354,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.12" + "source": "https://github.com/symfony/console/tree/v6.4.13" }, "funding": [ { @@ -11449,20 +11370,20 @@ "type": "tidelift" } ], - "time": "2024-09-20T08:15:52+00:00" + "time": "2024-10-09T08:40:40+00:00" }, { "name": "symfony/css-selector", - "version": "v7.1.1", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "1c7cee86c6f812896af54434f8ce29c8d94f9ff4" + "reference": "4aa4f6b3d6749c14d3aa815eef8226632e7bbc66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/1c7cee86c6f812896af54434f8ce29c8d94f9ff4", - "reference": "1c7cee86c6f812896af54434f8ce29c8d94f9ff4", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/4aa4f6b3d6749c14d3aa815eef8226632e7bbc66", + "reference": "4aa4f6b3d6749c14d3aa815eef8226632e7bbc66", "shasum": "" }, "require": { @@ -11498,7 +11419,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v7.1.1" + "source": "https://github.com/symfony/css-selector/tree/v7.1.6" }, "funding": [ { @@ -11514,7 +11435,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/deprecation-contracts", @@ -11585,16 +11506,16 @@ }, { "name": "symfony/dom-crawler", - "version": "v6.4.12", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "9d307ecbcb917001692be333cdc58f474fdb37f0" + "reference": "ae074dffb018c37a57071990d16e6152728dd972" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/9d307ecbcb917001692be333cdc58f474fdb37f0", - "reference": "9d307ecbcb917001692be333cdc58f474fdb37f0", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/ae074dffb018c37a57071990d16e6152728dd972", + "reference": "ae074dffb018c37a57071990d16e6152728dd972", "shasum": "" }, "require": { @@ -11632,7 +11553,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v6.4.12" + "source": "https://github.com/symfony/dom-crawler/tree/v6.4.13" }, "funding": [ { @@ -11648,20 +11569,20 @@ "type": "tidelift" } ], - "time": "2024-09-15T06:35:36+00:00" + "time": "2024-10-25T15:07:50+00:00" }, { "name": "symfony/error-handler", - "version": "v6.4.10", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "231f1b2ee80f72daa1972f7340297d67439224f0" + "reference": "e3c78742f86a5b65fe2ac4c4b6b776d92fd7ca0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/231f1b2ee80f72daa1972f7340297d67439224f0", - "reference": "231f1b2ee80f72daa1972f7340297d67439224f0", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/e3c78742f86a5b65fe2ac4c4b6b776d92fd7ca0c", + "reference": "e3c78742f86a5b65fe2ac4c4b6b776d92fd7ca0c", "shasum": "" }, "require": { @@ -11707,7 +11628,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.10" + "source": "https://github.com/symfony/error-handler/tree/v6.4.13" }, "funding": [ { @@ -11723,20 +11644,20 @@ "type": "tidelift" } ], - "time": "2024-07-26T12:30:32+00:00" + "time": "2024-09-25T14:18:03+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v7.1.1", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7" + "reference": "87254c78dd50721cfd015b62277a8281c5589702" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", - "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/87254c78dd50721cfd015b62277a8281c5589702", + "reference": "87254c78dd50721cfd015b62277a8281c5589702", "shasum": "" }, "require": { @@ -11787,7 +11708,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v7.1.1" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.1.6" }, "funding": [ { @@ -11803,7 +11724,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -11883,16 +11804,16 @@ }, { "name": "symfony/finder", - "version": "v6.4.11", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "d7eb6daf8cd7e9ac4976e9576b32042ef7253453" + "reference": "daea9eca0b08d0ed1dc9ab702a46128fd1be4958" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/d7eb6daf8cd7e9ac4976e9576b32042ef7253453", - "reference": "d7eb6daf8cd7e9ac4976e9576b32042ef7253453", + "url": "https://api.github.com/repos/symfony/finder/zipball/daea9eca0b08d0ed1dc9ab702a46128fd1be4958", + "reference": "daea9eca0b08d0ed1dc9ab702a46128fd1be4958", "shasum": "" }, "require": { @@ -11927,7 +11848,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.11" + "source": "https://github.com/symfony/finder/tree/v6.4.13" }, "funding": [ { @@ -11943,20 +11864,20 @@ "type": "tidelift" } ], - "time": "2024-08-13T14:27:37+00:00" + "time": "2024-10-01T08:30:56+00:00" }, { "name": "symfony/html-sanitizer", - "version": "v7.1.5", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/html-sanitizer.git", - "reference": "89bf376c056926bd7fe8a81c0f486a060e20fdbc" + "reference": "a25620fc6407e14331f3c0c5668eb4f35c392d4a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/html-sanitizer/zipball/89bf376c056926bd7fe8a81c0f486a060e20fdbc", - "reference": "89bf376c056926bd7fe8a81c0f486a060e20fdbc", + "url": "https://api.github.com/repos/symfony/html-sanitizer/zipball/a25620fc6407e14331f3c0c5668eb4f35c392d4a", + "reference": "a25620fc6407e14331f3c0c5668eb4f35c392d4a", "shasum": "" }, "require": { @@ -11996,7 +11917,7 @@ "sanitizer" ], "support": { - "source": "https://github.com/symfony/html-sanitizer/tree/v7.1.5" + "source": "https://github.com/symfony/html-sanitizer/tree/v7.1.6" }, "funding": [ { @@ -12012,20 +11933,20 @@ "type": "tidelift" } ], - "time": "2024-09-20T13:35:23+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/http-client", - "version": "v6.4.12", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "fbebfcce21084d3e91ea987ae5bdd8c71ff0fd56" + "reference": "509d0e8a798bf5e41e0b6317e9bce1140af47376" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/fbebfcce21084d3e91ea987ae5bdd8c71ff0fd56", - "reference": "fbebfcce21084d3e91ea987ae5bdd8c71ff0fd56", + "url": "https://api.github.com/repos/symfony/http-client/zipball/509d0e8a798bf5e41e0b6317e9bce1140af47376", + "reference": "509d0e8a798bf5e41e0b6317e9bce1140af47376", "shasum": "" }, "require": { @@ -12089,7 +12010,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v6.4.12" + "source": "https://github.com/symfony/http-client/tree/v6.4.13" }, "funding": [ { @@ -12105,7 +12026,7 @@ "type": "tidelift" } ], - "time": "2024-09-20T08:21:33+00:00" + "time": "2024-10-14T18:15:01+00:00" }, { "name": "symfony/http-client-contracts", @@ -12187,16 +12108,16 @@ }, { "name": "symfony/http-foundation", - "version": "v6.4.12", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "133ac043875f59c26c55e79cf074562127cce4d2" + "reference": "4c0341b3e0a7291e752c69d2a1ed9a84b68d604c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/133ac043875f59c26c55e79cf074562127cce4d2", - "reference": "133ac043875f59c26c55e79cf074562127cce4d2", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/4c0341b3e0a7291e752c69d2a1ed9a84b68d604c", + "reference": "4c0341b3e0a7291e752c69d2a1ed9a84b68d604c", "shasum": "" }, "require": { @@ -12244,7 +12165,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.12" + "source": "https://github.com/symfony/http-foundation/tree/v6.4.13" }, "funding": [ { @@ -12260,20 +12181,20 @@ "type": "tidelift" } ], - "time": "2024-09-20T08:18:25+00:00" + "time": "2024-10-11T19:20:58+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.4.12", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "96df83d51b5f78804f70c093b97310794fd6257b" + "reference": "4474015c363ec0cd3bf47d55657e68630dbae66e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/96df83d51b5f78804f70c093b97310794fd6257b", - "reference": "96df83d51b5f78804f70c093b97310794fd6257b", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/4474015c363ec0cd3bf47d55657e68630dbae66e", + "reference": "4474015c363ec0cd3bf47d55657e68630dbae66e", "shasum": "" }, "require": { @@ -12358,7 +12279,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.12" + "source": "https://github.com/symfony/http-kernel/tree/v6.4.13" }, "funding": [ { @@ -12374,20 +12295,20 @@ "type": "tidelift" } ], - "time": "2024-09-21T06:02:57+00:00" + "time": "2024-10-27T13:00:29+00:00" }, { "name": "symfony/mailer", - "version": "v6.4.12", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "b6a25408c569ae2366b3f663a4edad19420a9c26" + "reference": "c2f7e0d8d7ac8fe25faccf5d8cac462805db2663" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/b6a25408c569ae2366b3f663a4edad19420a9c26", - "reference": "b6a25408c569ae2366b3f663a4edad19420a9c26", + "url": "https://api.github.com/repos/symfony/mailer/zipball/c2f7e0d8d7ac8fe25faccf5d8cac462805db2663", + "reference": "c2f7e0d8d7ac8fe25faccf5d8cac462805db2663", "shasum": "" }, "require": { @@ -12438,7 +12359,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.4.12" + "source": "https://github.com/symfony/mailer/tree/v6.4.13" }, "funding": [ { @@ -12454,20 +12375,20 @@ "type": "tidelift" } ], - "time": "2024-09-08T12:30:05+00:00" + "time": "2024-09-25T14:18:03+00:00" }, { "name": "symfony/mailgun-mailer", - "version": "v6.4.10", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/mailgun-mailer.git", - "reference": "3eb7c7b644179a766f5d816620b7b6d4a4e7ec43" + "reference": "ad4e79798a5eb80af99004a4871b4fe5effe33a3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailgun-mailer/zipball/3eb7c7b644179a766f5d816620b7b6d4a4e7ec43", - "reference": "3eb7c7b644179a766f5d816620b7b6d4a4e7ec43", + "url": "https://api.github.com/repos/symfony/mailgun-mailer/zipball/ad4e79798a5eb80af99004a4871b4fe5effe33a3", + "reference": "ad4e79798a5eb80af99004a4871b4fe5effe33a3", "shasum": "" }, "require": { @@ -12507,7 +12428,7 @@ "description": "Symfony Mailgun Mailer Bridge", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailgun-mailer/tree/v6.4.10" + "source": "https://github.com/symfony/mailgun-mailer/tree/v6.4.13" }, "funding": [ { @@ -12523,20 +12444,20 @@ "type": "tidelift" } ], - "time": "2024-07-04T11:16:22+00:00" + "time": "2024-09-25T14:18:03+00:00" }, { "name": "symfony/mime", - "version": "v6.4.12", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "abe16ee7790b16aa525877419deb0f113953f0e1" + "reference": "1de1cf14d99b12c7ebbb850491ec6ae3ed468855" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/abe16ee7790b16aa525877419deb0f113953f0e1", - "reference": "abe16ee7790b16aa525877419deb0f113953f0e1", + "url": "https://api.github.com/repos/symfony/mime/zipball/1de1cf14d99b12c7ebbb850491ec6ae3ed468855", + "reference": "1de1cf14d99b12c7ebbb850491ec6ae3ed468855", "shasum": "" }, "require": { @@ -12592,7 +12513,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.4.12" + "source": "https://github.com/symfony/mime/tree/v6.4.13" }, "funding": [ { @@ -12608,20 +12529,20 @@ "type": "tidelift" } ], - "time": "2024-09-20T08:18:25+00:00" + "time": "2024-10-25T15:07:50+00:00" }, { "name": "symfony/options-resolver", - "version": "v7.1.1", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "47aa818121ed3950acd2b58d1d37d08a94f9bf55" + "reference": "85e95eeede2d41cd146146e98c9c81d9214cae85" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/47aa818121ed3950acd2b58d1d37d08a94f9bf55", - "reference": "47aa818121ed3950acd2b58d1d37d08a94f9bf55", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/85e95eeede2d41cd146146e98c9c81d9214cae85", + "reference": "85e95eeede2d41cd146146e98c9c81d9214cae85", "shasum": "" }, "require": { @@ -12659,7 +12580,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v7.1.1" + "source": "https://github.com/symfony/options-resolver/tree/v7.1.6" }, "funding": [ { @@ -12675,7 +12596,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/polyfill-ctype", @@ -13315,16 +13236,16 @@ }, { "name": "symfony/process", - "version": "v6.4.12", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "3f94e5f13ff58df371a7ead461b6e8068900fbb3" + "reference": "1f9f59b46880201629df3bd950fc5ae8c55b960f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/3f94e5f13ff58df371a7ead461b6e8068900fbb3", - "reference": "3f94e5f13ff58df371a7ead461b6e8068900fbb3", + "url": "https://api.github.com/repos/symfony/process/zipball/1f9f59b46880201629df3bd950fc5ae8c55b960f", + "reference": "1f9f59b46880201629df3bd950fc5ae8c55b960f", "shasum": "" }, "require": { @@ -13356,7 +13277,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.4.12" + "source": "https://github.com/symfony/process/tree/v6.4.13" }, "funding": [ { @@ -13372,7 +13293,7 @@ "type": "tidelift" } ], - "time": "2024-09-17T12:47:12+00:00" + "time": "2024-09-25T14:18:03+00:00" }, { "name": "symfony/psr-http-message-bridge", @@ -13465,16 +13386,16 @@ }, { "name": "symfony/routing", - "version": "v6.4.12", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "a7c8036bd159486228dc9be3e846a00a0dda9f9f" + "reference": "640a74250d13f9c30d5ca045b6aaaabcc8215278" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/a7c8036bd159486228dc9be3e846a00a0dda9f9f", - "reference": "a7c8036bd159486228dc9be3e846a00a0dda9f9f", + "url": "https://api.github.com/repos/symfony/routing/zipball/640a74250d13f9c30d5ca045b6aaaabcc8215278", + "reference": "640a74250d13f9c30d5ca045b6aaaabcc8215278", "shasum": "" }, "require": { @@ -13528,7 +13449,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.4.12" + "source": "https://github.com/symfony/routing/tree/v6.4.13" }, "funding": [ { @@ -13544,7 +13465,7 @@ "type": "tidelift" } ], - "time": "2024-09-20T08:32:26+00:00" + "time": "2024-10-01T08:30:56+00:00" }, { "name": "symfony/service-contracts", @@ -13631,16 +13552,16 @@ }, { "name": "symfony/string", - "version": "v7.1.5", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "d66f9c343fa894ec2037cc928381df90a7ad4306" + "reference": "61b72d66bf96c360a727ae6232df5ac83c71f626" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/d66f9c343fa894ec2037cc928381df90a7ad4306", - "reference": "d66f9c343fa894ec2037cc928381df90a7ad4306", + "url": "https://api.github.com/repos/symfony/string/zipball/61b72d66bf96c360a727ae6232df5ac83c71f626", + "reference": "61b72d66bf96c360a727ae6232df5ac83c71f626", "shasum": "" }, "require": { @@ -13698,7 +13619,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.1.5" + "source": "https://github.com/symfony/string/tree/v7.1.6" }, "funding": [ { @@ -13714,20 +13635,20 @@ "type": "tidelift" } ], - "time": "2024-09-20T08:28:38+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/translation", - "version": "v6.4.12", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "cf8360b8352b086be620fae8342c4d96e391a489" + "reference": "bee9bfabfa8b4045a66bf82520e492cddbaffa66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/cf8360b8352b086be620fae8342c4d96e391a489", - "reference": "cf8360b8352b086be620fae8342c4d96e391a489", + "url": "https://api.github.com/repos/symfony/translation/zipball/bee9bfabfa8b4045a66bf82520e492cddbaffa66", + "reference": "bee9bfabfa8b4045a66bf82520e492cddbaffa66", "shasum": "" }, "require": { @@ -13793,7 +13714,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.4.12" + "source": "https://github.com/symfony/translation/tree/v6.4.13" }, "funding": [ { @@ -13809,7 +13730,7 @@ "type": "tidelift" } ], - "time": "2024-09-16T06:02:54+00:00" + "time": "2024-09-27T18:14:25+00:00" }, { "name": "symfony/translation-contracts", @@ -13891,16 +13812,16 @@ }, { "name": "symfony/uid", - "version": "v6.4.12", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "2f16054e0a9b194b8ca581d4a64eee3f7d4a9d4d" + "reference": "18eb207f0436a993fffbdd811b5b8fa35fa5e007" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/2f16054e0a9b194b8ca581d4a64eee3f7d4a9d4d", - "reference": "2f16054e0a9b194b8ca581d4a64eee3f7d4a9d4d", + "url": "https://api.github.com/repos/symfony/uid/zipball/18eb207f0436a993fffbdd811b5b8fa35fa5e007", + "reference": "18eb207f0436a993fffbdd811b5b8fa35fa5e007", "shasum": "" }, "require": { @@ -13945,7 +13866,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v6.4.12" + "source": "https://github.com/symfony/uid/tree/v6.4.13" }, "funding": [ { @@ -13961,20 +13882,20 @@ "type": "tidelift" } ], - "time": "2024-09-20T08:32:26+00:00" + "time": "2024-09-25T14:18:03+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.4.11", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "ee14c8254a480913268b1e3b1cba8045ed122694" + "reference": "2acb151474ed8cb43624e3f41a0bf7c4c8ce4f41" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/ee14c8254a480913268b1e3b1cba8045ed122694", - "reference": "ee14c8254a480913268b1e3b1cba8045ed122694", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/2acb151474ed8cb43624e3f41a0bf7c4c8ce4f41", + "reference": "2acb151474ed8cb43624e3f41a0bf7c4c8ce4f41", "shasum": "" }, "require": { @@ -14030,7 +13951,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.4.11" + "source": "https://github.com/symfony/var-dumper/tree/v6.4.13" }, "funding": [ { @@ -14046,7 +13967,7 @@ "type": "tidelift" } ], - "time": "2024-08-30T16:03:21+00:00" + "time": "2024-09-25T14:18:03+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -14971,16 +14892,16 @@ }, { "name": "larastan/larastan", - "version": "v2.9.9", + "version": "v2.9.10", "source": { "type": "git", "url": "https://github.com/larastan/larastan.git", - "reference": "148faa138f0d8acb7d85f4a55693d3e13b6048d2" + "reference": "9e7233d88f4f10796fadb8a2d85c5f2b55277c76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/larastan/larastan/zipball/148faa138f0d8acb7d85f4a55693d3e13b6048d2", - "reference": "148faa138f0d8acb7d85f4a55693d3e13b6048d2", + "url": "https://api.github.com/repos/larastan/larastan/zipball/9e7233d88f4f10796fadb8a2d85c5f2b55277c76", + "reference": "9e7233d88f4f10796fadb8a2d85c5f2b55277c76", "shasum": "" }, "require": { @@ -15050,7 +14971,7 @@ ], "support": { "issues": "https://github.com/larastan/larastan/issues", - "source": "https://github.com/larastan/larastan/tree/v2.9.9" + "source": "https://github.com/larastan/larastan/tree/v2.9.10" }, "funding": [ { @@ -15070,7 +14991,7 @@ "type": "patreon" } ], - "time": "2024-10-15T19:41:22+00:00" + "time": "2024-10-19T23:04:40+00:00" }, { "name": "laravel/pint", @@ -15140,16 +15061,16 @@ }, { "name": "laravel/sail", - "version": "v1.37.0", + "version": "v1.37.1", "source": { "type": "git", "url": "https://github.com/laravel/sail.git", - "reference": "5d385f2e698f0f774cdead82aff5d989fb95309b" + "reference": "7efa151ea0d16f48233d6a6cd69f81270acc6e93" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/5d385f2e698f0f774cdead82aff5d989fb95309b", - "reference": "5d385f2e698f0f774cdead82aff5d989fb95309b", + "url": "https://api.github.com/repos/laravel/sail/zipball/7efa151ea0d16f48233d6a6cd69f81270acc6e93", + "reference": "7efa151ea0d16f48233d6a6cd69f81270acc6e93", "shasum": "" }, "require": { @@ -15199,7 +15120,7 @@ "issues": "https://github.com/laravel/sail/issues", "source": "https://github.com/laravel/sail" }, - "time": "2024-10-21T17:13:38+00:00" + "time": "2024-10-29T20:18:14+00:00" }, { "name": "mockery/mockery", @@ -17880,16 +17801,16 @@ }, { "name": "symfony/yaml", - "version": "v7.1.5", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "4e561c316e135e053bd758bf3b3eb291d9919de4" + "reference": "3ced3f29e4f0d6bce2170ff26719f1fe9aacc671" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/4e561c316e135e053bd758bf3b3eb291d9919de4", - "reference": "4e561c316e135e053bd758bf3b3eb291d9919de4", + "url": "https://api.github.com/repos/symfony/yaml/zipball/3ced3f29e4f0d6bce2170ff26719f1fe9aacc671", + "reference": "3ced3f29e4f0d6bce2170ff26719f1fe9aacc671", "shasum": "" }, "require": { @@ -17931,7 +17852,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v7.1.5" + "source": "https://github.com/symfony/yaml/tree/v7.1.6" }, "funding": [ { @@ -17947,7 +17868,7 @@ "type": "tidelift" } ], - "time": "2024-09-17T12:49:58+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "ta-tikoma/phpunit-architecture-test", diff --git a/config/markdown.php b/config/markdown.php index 60df990b..89d021e5 100644 --- a/config/markdown.php +++ b/config/markdown.php @@ -56,7 +56,7 @@ ], 'heading_permalink' => [ - 'html_class' => 'anchor mr-2 !text-skin-primary !no-underline hover:!text-skin-primary-hover focus:!text-skin-primary-hover focus:outline-none', + 'html_class' => 'anchor mr-2 !text-primary-500 !no-underline hover:!text-primary-500 focus:outline-none', 'fragment_prefix' => '', 'id_prefix' => '', 'symbol' => '#', @@ -127,7 +127,7 @@ | */ - 'html_input' => 'allow', + 'html_input' => 'strip', /* |-------------------------------------------------------------------------- diff --git a/lang/en/notifications.php b/lang/en/notifications.php index 2106cddb..0dcf61d5 100644 --- a/lang/en/notifications.php +++ b/lang/en/notifications.php @@ -19,4 +19,9 @@ 'unverified_user' => 'You are not authorized to do this. Your e-mail is not verified', ], + 'reply' => [ + 'created' => 'Answer successfully added.', + 'updated' => 'Successfully updated answer.', + ], + ]; diff --git a/lang/en/pages/forum.php b/lang/en/pages/forum.php index f6fe1e74..dd7824ab 100644 --- a/lang/en/pages/forum.php +++ b/lang/en/pages/forum.php @@ -38,5 +38,6 @@ 'mark_answer' => 'Mark as solution', 'report_spam' => 'Report spam', 'max_thread_length' => '100 characters maximum', + 'answer_reply' => 'Answer to', ]; diff --git a/lang/fr/notifications.php b/lang/fr/notifications.php index 91453e8d..f2f925ef 100644 --- a/lang/fr/notifications.php +++ b/lang/fr/notifications.php @@ -19,4 +19,9 @@ 'unverified_user' => "Vous n'êtes pas autorisé à effectuer cette. Votre e-mail n'est pas vérifiée", ], + 'reply' => [ + 'created' => 'Réponse ajoutée avec succès!', + 'updated' => 'Réponse modifiée avec succès.', + ], + ]; diff --git a/lang/fr/pages/forum.php b/lang/fr/pages/forum.php index 73c41ce5..fb22b526 100644 --- a/lang/fr/pages/forum.php +++ b/lang/fr/pages/forum.php @@ -38,5 +38,6 @@ 'mark_answer' => 'Marquer comme réponse', 'report_spam' => 'Signaler un spam', 'max_thread_length' => 'Maximum de 100 caractères.', + 'answer_reply' => 'Répondre au sujet', ]; diff --git a/resources/views/forum/_channels.blade.php b/resources/views/forum/_channels.blade.php deleted file mode 100644 index 22fe54d9..00000000 --- a/resources/views/forum/_channels.blade.php +++ /dev/null @@ -1,78 +0,0 @@ - diff --git a/resources/views/forum/edit.blade.php b/resources/views/forum/edit.blade.php deleted file mode 100644 index 2f0ee170..00000000 --- a/resources/views/forum/edit.blade.php +++ /dev/null @@ -1,18 +0,0 @@ - -
-
-
-

Modifier mon sujet

-

- Assurez-vous d'avoir lu nos - - règles de conduite - - avant de continuer. -

-
- - -
-
-
diff --git a/resources/views/livewire/articles/_form.blade.php b/resources/views/livewire/articles/_form.blade.php index da0239d5..261089c1 100644 --- a/resources/views/livewire/articles/_form.blade.php +++ b/resources/views/livewire/articles/_form.blade.php @@ -170,9 +170,9 @@ class="size-6"