- {{ $thread->subject() }} -
-- - {{ count($thread->replies) }} - {{ __('réponses') }} -
-- @if ($thread->isSolved()) - - - {{ __('Résolu') }} - - @endif -
-diff --git a/app/Filament/Resources/ArticleResource.php b/app/Filament/Resources/ArticleResource.php index b1e308df..a5ea0ba5 100644 --- a/app/Filament/Resources/ArticleResource.php +++ b/app/Filament/Resources/ArticleResource.php @@ -17,6 +17,7 @@ use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Collection; +use Illuminate\Support\Facades\Gate; final class ArticleResource extends Resource { @@ -86,6 +87,8 @@ public static function table(Table $table): Table ->requiresConfirmation() ->modalIcon('heroicon-s-check') ->action(function ($record): void { + Gate::authorize('approve', $record); + $record->approved_at = now(); $record->save(); @@ -101,6 +104,8 @@ public static function table(Table $table): Table ->requiresConfirmation() ->modalIcon('heroicon-s-x-mark') ->action(function ($record): void { + Gate::authorize('decline', $record); + $record->declined_at = now(); $record->save(); }), diff --git a/app/Http/Requests/UpdatePasswordRequest.php b/app/Http/Requests/UpdatePasswordRequest.php index 3a83b90f..155c530d 100644 --- a/app/Http/Requests/UpdatePasswordRequest.php +++ b/app/Http/Requests/UpdatePasswordRequest.php @@ -4,7 +4,6 @@ namespace App\Http\Requests; -use App\Rules\PasswordCheck; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Rules\Password; @@ -18,7 +17,7 @@ public function authorize(): bool public function rules(): array { return [ - 'current_password' => ['sometimes', 'required', new PasswordCheck], + 'current_password' => ['sometimes', 'required'], 'password' => ['required', 'confirmed', Password::min(8)->uncompromised()], ]; } diff --git a/app/Livewire/Components/Forum/Reply.php b/app/Livewire/Components/Forum/Reply.php index b63ecd57..8bc22535 100644 --- a/app/Livewire/Components/Forum/Reply.php +++ b/app/Livewire/Components/Forum/Reply.php @@ -63,7 +63,7 @@ public function solutionAction(): Action ->authorize('manage', $this->thread) ->action(function (): void { if ($this->thread->isSolved()) { - undoPoint(new BestReply($this->thread->solutionReply)); + undoPoint(new BestReply($this->thread->solutionReply)); // @phpstan-ignore-line } $this->thread->markSolution($this->reply, Auth::user()); // @phpstan-ignore-line diff --git a/app/Livewire/Components/Slideovers/ArticleForm.php b/app/Livewire/Components/Slideovers/ArticleForm.php index 8a4a232d..452de860 100644 --- a/app/Livewire/Components/Slideovers/ArticleForm.php +++ b/app/Livewire/Components/Slideovers/ArticleForm.php @@ -37,14 +37,17 @@ final class ArticleForm extends SlideOverComponent implements HasForms public function mount(?int $articleId = null): void { - $this->article = $articleId + /** @var Article $article */ + $article = $articleId ? Article::query()->findOrFail($articleId) : new Article; - $this->form->fill(array_merge($this->article->toArray(), [ - 'is_draft' => ! $this->article->published_at, - 'published_at' => $this->article->published_at, + $this->form->fill(array_merge($article->toArray(), [ + 'is_draft' => ! $article->published_at, + 'published_at' => $article->published_at, ])); + + $this->article = $article; } public static function panelMaxWidth(): string diff --git a/app/Livewire/Modals/ApprovedArticle.php b/app/Livewire/Modals/ApprovedArticle.php deleted file mode 100644 index 2a0f9f7a..00000000 --- a/app/Livewire/Modals/ApprovedArticle.php +++ /dev/null @@ -1,53 +0,0 @@ -article = Article::find($id); - } - - public static function modalMaxWidth(): string - { - return 'xl'; - } - - public function approved(): void - { - $this->authorize(ArticlePolicy::UPDATE, $this->article); - - $this->article->update(['approved_at' => now()]); // @phpstan-ignore-line - - givePoint(new PostCreated($this->article)); // @phpstan-ignore-line - - Cache::forget('post-'.$this->article->id); // @phpstan-ignore-line - - $this->article->user->notify(new SendApprovedArticle($this->article)); // @phpstan-ignore-line - - session()->flash('status', __('L\'article a été approuvé et le mail a été envoyé à l\'auteur pour le notifier.')); - - $this->redirectRoute('articles'); - } - - public function render(): View - { - return view('livewire.modals.approved-article'); - } -} diff --git a/app/Livewire/Modals/DeleteArticle.php b/app/Livewire/Modals/DeleteArticle.php deleted file mode 100644 index f928c7ca..00000000 --- a/app/Livewire/Modals/DeleteArticle.php +++ /dev/null @@ -1,44 +0,0 @@ -article = Article::find($id); - } - - public static function modalMaxWidth(): string - { - return 'xl'; - } - - public function delete(): void - { - $this->authorize(ArticlePolicy::DELETE, $this->article); - - $this->article->delete(); // @phpstan-ignore-line - - session()->flash('status', __('La discussion a été supprimé avec tous ses commentaires.')); - - $this->redirectRoute('articles'); - } - - public function render(): View - { - return view('livewire.modals.delete-article'); - } -} diff --git a/app/Livewire/Modals/DeleteDiscussion.php b/app/Livewire/Modals/DeleteDiscussion.php deleted file mode 100644 index 2caadfd8..00000000 --- a/app/Livewire/Modals/DeleteDiscussion.php +++ /dev/null @@ -1,44 +0,0 @@ -discussion = Discussion::find($id); - } - - public static function modalMaxWidth(): string - { - return 'xl'; - } - - public function delete(): void - { - $this->authorize(DiscussionPolicy::DELETE, $this->discussion); - - $this->discussion->delete(); // @phpstan-ignore-line - - session()->flash('status', __('La discussion a été supprimé avec tous ses commentaires.')); - - $this->redirectRoute('discussions.index'); - } - - public function render(): View - { - return view('livewire.modals.delete-discussion'); - } -} diff --git a/app/Livewire/Pages/Forum/Index.php b/app/Livewire/Pages/Forum/Index.php index 1ccdcd24..1c1987ec 100644 --- a/app/Livewire/Pages/Forum/Index.php +++ b/app/Livewire/Pages/Forum/Index.php @@ -77,6 +77,7 @@ protected function applySearch(Builder $query): Builder protected function applySolved(Builder $query): Builder { if ($this->solved) { + // @phpstan-ignore-next-line return match ($this->solved) { 'no' => $query->scopes('unresolved'), 'yes' => $query->scopes('resolved'), diff --git a/app/Models/Reply.php b/app/Models/Reply.php index 2048b7f9..2ed82703 100644 --- a/app/Models/Reply.php +++ b/app/Models/Reply.php @@ -80,7 +80,7 @@ public function mentionedUsers(): array public function to(ReplyInterface $replyable): void { - $this->replyAble()->associate($replyable); + $this->replyAble()->associate($replyable); // @phpstan-ignore-line } public function allChildReplies(): MorphMany diff --git a/app/Notifications/SendApprovedArticle.php b/app/Notifications/SendApprovedArticle.php deleted file mode 100644 index 4aef6f3a..00000000 --- a/app/Notifications/SendApprovedArticle.php +++ /dev/null @@ -1,33 +0,0 @@ -subject(__('Article Approuvé 🎉.')) - ->greeting(__('Article Approuvé 🎉.')) - ->line(__('Merci d\'avoir soumis votre article pour créer du contenu au sein de Laravel Cameroun.')) - ->action(__('Voir mon article'), route('articles.show', $this->article)) - ->line(__('Merci d\'avoir utilisé Laravel Cameroun.!')); - } -} diff --git a/app/Policies/ArticlePolicy.php b/app/Policies/ArticlePolicy.php index 78dd17b5..5dfa732f 100644 --- a/app/Policies/ArticlePolicy.php +++ b/app/Policies/ArticlePolicy.php @@ -32,7 +32,7 @@ public function approve(User $user, Article $article): bool return $user->isModerator() || $user->isAdmin(); } - public function disapprove(User $user, Article $article): bool + public function decline(User $user, Article $article): bool { return $user->isModerator() || $user->isAdmin(); } diff --git a/app/Spotlight/Discussion.php b/app/Spotlight/Discussion.php index 3e8485de..5d1ab8f3 100644 --- a/app/Spotlight/Discussion.php +++ b/app/Spotlight/Discussion.php @@ -34,6 +34,7 @@ public function searchDiscussion(string $query): Collection return DiscussionModel::with('user') ->where('title', 'like', "%{$query}%") ->get() + // @phpstan-ignore-next-line ->map(fn (DiscussionModel $discussion) => new SpotlightSearchResult( $discussion->slug(), $discussion->title, diff --git a/phpstan.neon b/phpstan.neon index 7d917216..09274c7e 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -7,12 +7,12 @@ parameters: level: 8 excludePaths: - app/Http/Resources/ - - app/Http/Middleware/ - app/Actions/ - app/Notifications/ - - app/Http/Controllers/OAuthController.php - - app/Http/Controllers/Api/Auth/LoginController.php - - app/Markdown/MarkdownHelper.php +# Remove this config after migrate everything to livewire + - app/Http/Controllers/* + - app/Markdown/* + - app/Traits/HasSlug ignoreErrors: - "#^Cannot access property \\$transaction on array\\|object\\.$#" - identifier: missingType.iterableValue diff --git a/resources/views/components/forum/filters.blade.php b/resources/views/components/forum/filters.blade.php deleted file mode 100644 index 7020e31e..00000000 --- a/resources/views/components/forum/filters.blade.php +++ /dev/null @@ -1,37 +0,0 @@ - diff --git a/resources/views/components/forum/thread-author.blade.php b/resources/views/components/forum/thread-author.blade.php deleted file mode 100644 index eda332b4..00000000 --- a/resources/views/components/forum/thread-author.blade.php +++ /dev/null @@ -1,47 +0,0 @@ -{{-- @deprecated: A supprimer --}} - -@props([ - 'author', -]) - -
{{ '@' . $author->username }}
-{{ $author->bio }}
- @endif - - @if ($author->location) -- - {{ count($thread->replies) }} - {{ __('réponses') }} -
-- @if ($thread->isSolved()) - - - {{ __('Résolu') }} - - @endif -
-{{ $user->name }} n'a pas encore posté d'articles
@if ($user->isLoggedInUser()) -{{ $user->name }} n'a pas encore posté de sujets
@if ($user->isLoggedInUser()) -- Voulez-vous cet article ? Il paraitra dans la liste des articles et un mail sera envoyé à - l'auteur pour lui signaler. -
-- Voulez-vous vraiment cet article ? Cette action est irréversible. -
-- Voulez-vous vraiment supprimer cette discussion ? Tous les commentaires seront supprimés cette - action est irréversible. -
-