From 3c00270e02c72c1005f1b1ab7cd85eeabbee7750 Mon Sep 17 00:00:00 2001 From: Arthur Monney Date: Tue, 12 Nov 2024 00:16:56 +0100 Subject: [PATCH 1/2] chore: [LAR-110] run pint and phpstan --- app/Console/Commands/PublishArticles.php | 1 + app/Http/Controllers/DiscussionController.php | 23 --- app/Livewire/Discussions/Browse.php | 59 -------- app/Livewire/Pages/Discussions/Index.php | 76 ++++++++++ .../Pages/Discussions/SingleDiscussion.php | 37 +++++ app/Models/Feature.php | 2 +- app/Models/User.php | 2 +- app/Providers/AppServiceProvider.php | 4 +- app/Traits/HasSlug.php | 2 +- app/Traits/WithArticleAttributes.php | 73 --------- app/Traits/WithChannelsAssociation.php | 31 ---- app/Traits/WithTags.php | 29 ---- .../Composers/InactiveDiscussionsComposer.php | 6 +- app/View/Composers/ModeratorsComposer.php | 9 +- app/View/Composers/ProfileUsersComposer.php | 9 +- .../Composers/TopContributorsComposer.php | 10 +- app/View/Composers/TopMembersComposer.php | 9 +- app/Widgets/MostActiveUsersPerWeek.php | 9 +- app/Widgets/MostLikedPostsPerWeek.php | 9 +- app/Widgets/MostViewedPostsPerWeek.php | 11 +- app/Widgets/RecentNumbers.php | 9 +- app/Widgets/RecentPostsPerWeek.php | 5 +- composer.lock | 30 ++-- lang/en/global.php | 1 + lang/fr/global.php | 1 + lang/fr/pages/discussion.php | 23 +++ .../components/discussions/overview.blade.php | 85 +++++------ .../components/scrollable-content.blade.php | 87 +++++++++++ resources/views/components/tag.blade.php | 5 +- resources/views/components/tags.blade.php | 50 ------- .../views/components/user/status.blade.php | 4 +- .../discussions/_contributions.blade.php | 96 ------------ resources/views/discussions/index.blade.php | 5 - resources/views/discussions/show.blade.php | 141 ------------------ .../discussions/add-comment.blade.php | 39 +++-- .../livewire/discussions/browse.blade.php | 85 ----------- .../livewire/discussions/comment.blade.php | 2 +- .../livewire/discussions/comments.blade.php | 17 ++- .../pages/discussions/index.blade.php | 72 +++++++++ .../discussions/single-discussion.blade.php | 133 +++++++++++++++++ .../views/partials/_contributions.blade.php | 88 +++++++++++ .../views/partials/_leading-addons.blade.php | 17 --- routes/features/discussion.php | 12 ++ routes/web.php | 12 +- 44 files changed, 685 insertions(+), 745 deletions(-) delete mode 100644 app/Livewire/Discussions/Browse.php create mode 100644 app/Livewire/Pages/Discussions/Index.php create mode 100644 app/Livewire/Pages/Discussions/SingleDiscussion.php delete mode 100644 app/Traits/WithArticleAttributes.php delete mode 100644 app/Traits/WithChannelsAssociation.php delete mode 100644 app/Traits/WithTags.php create mode 100644 lang/fr/pages/discussion.php create mode 100644 resources/views/components/scrollable-content.blade.php delete mode 100644 resources/views/components/tags.blade.php delete mode 100644 resources/views/discussions/_contributions.blade.php delete mode 100644 resources/views/discussions/index.blade.php delete mode 100644 resources/views/discussions/show.blade.php delete mode 100644 resources/views/livewire/discussions/browse.blade.php create mode 100644 resources/views/livewire/pages/discussions/index.blade.php create mode 100644 resources/views/livewire/pages/discussions/single-discussion.blade.php create mode 100644 resources/views/partials/_contributions.blade.php delete mode 100644 resources/views/partials/_leading-addons.blade.php create mode 100644 routes/features/discussion.php diff --git a/app/Console/Commands/PublishArticles.php b/app/Console/Commands/PublishArticles.php index e1d190fe..e46e2401 100644 --- a/app/Console/Commands/PublishArticles.php +++ b/app/Console/Commands/PublishArticles.php @@ -20,6 +20,7 @@ public function handle(): void $articles = Article::submitted()->approved()->whereNull('published_at')->get(); foreach ($articles as $article) { + /** @var Article $article */ $article->published_at = $article->submitted_at; $article->save(); } diff --git a/app/Http/Controllers/DiscussionController.php b/app/Http/Controllers/DiscussionController.php index 24adbd70..93dcf0b0 100644 --- a/app/Http/Controllers/DiscussionController.php +++ b/app/Http/Controllers/DiscussionController.php @@ -15,29 +15,6 @@ public function __construct() $this->middleware(['auth', 'verified'], ['except' => ['index', 'show']]); } - public function index(): View - { - return view('discussions.index'); - } - - public function show(Discussion $discussion): View - { - views($discussion)->record(); - - // @phpstan-ignore-next-line - seo() - ->title($discussion->title) - ->description($discussion->excerpt(100)) - ->image(asset('images/socialcard.png')) - ->twitterTitle($discussion->title) - ->twitterDescription($discussion->excerpt(100)) - ->twitterImage(asset('images/socialcard.png')) - ->twitterSite('laravelcm') - ->withUrl(); - - return view('discussions.show', ['discussion' => $discussion->load('tags')]); - } - public function create(): View { return view('discussions.new'); diff --git a/app/Livewire/Discussions/Browse.php b/app/Livewire/Discussions/Browse.php deleted file mode 100644 index 79358ea7..00000000 --- a/app/Livewire/Discussions/Browse.php +++ /dev/null @@ -1,59 +0,0 @@ - ['except' => ''], - 'sortBy' => ['except' => 'recent'], - ]; - - public function validSort(string $sort): bool - { - return in_array($sort, [ - 'recent', - 'popular', - 'active', - ]); - } - - public function render(): View - { - $discussions = Discussion::with('tags') - ->withCount('replies') - ->notPinned(); - - $tags = Tag::whereJsonContains('concerns', ['discussion'])->orderBy('name')->get(); - - $selectedTag = Tag::where('name', $this->tag)->first(); - - if ($this->tag) { - $discussions->forTag($this->tag); - } - - $discussions->{$this->sortBy}(); - - return view('livewire.discussions.browse', [ - 'discussions' => $discussions->paginate($this->perPage), - 'tags' => $tags, - 'selectedTag' => $selectedTag, - 'selectedSortBy' => $this->sortBy, - ]); - } -} diff --git a/app/Livewire/Pages/Discussions/Index.php b/app/Livewire/Pages/Discussions/Index.php new file mode 100644 index 00000000..f0714781 --- /dev/null +++ b/app/Livewire/Pages/Discussions/Index.php @@ -0,0 +1,76 @@ +currentTag = $this->currentTag !== $tag && $this->tagExists($tag) ? $tag : ''; + } + + public function sort(string $sort): void + { + $this->sortBy = $this->validSort($sort) ? $sort : 'recent'; + } + + public function tagExists(string $tag): bool + { + return Tag::query()->where('slug', $tag)->exists(); + } + + public function render(): View + { + /** @var DiscussionQueryBuilder $query */ + $query = Discussion::with('tags') + ->withCount('replies') + ->notPinned(); + + $tags = Tag::query() + ->whereJsonContains('concerns', ['discussion']) + ->orderBy('name') + ->get(); + + if ($this->currentTag) { + $query->forTag($this->currentTag); // @phpstan-ignore-line + } + + $query->{$this->sortBy}(); + + $discussions = $query->simplePaginate(12); + + return view('livewire.pages.discussions.index', [ + 'discussions' => $discussions, + 'tags' => $tags, + 'selectedSortBy' => $this->sortBy, + ])->title(__('pages/discussion.title')); + } +} diff --git a/app/Livewire/Pages/Discussions/SingleDiscussion.php b/app/Livewire/Pages/Discussions/SingleDiscussion.php new file mode 100644 index 00000000..899bc315 --- /dev/null +++ b/app/Livewire/Pages/Discussions/SingleDiscussion.php @@ -0,0 +1,37 @@ +cooldown(now()->addHours(2))->record(); + + // @phpstan-ignore-next-line + seo() + ->title($discussion->title) + ->description($discussion->excerpt(100)) + ->image(asset('images/socialcard.png')) + ->twitterTitle($discussion->title) + ->twitterDescription($discussion->excerpt(100)) + ->twitterImage(asset('images/socialcard.png')) + ->twitterSite('laravelcm') + ->withUrl(); + + $this->discussion = $discussion->load('tags'); + } + + public function render(): View + { + return view('livewire.pages.discussions.single-discussion')->title($this->discussion->title); + } +} diff --git a/app/Models/Feature.php b/app/Models/Feature.php index 7281f65d..7eb8f1af 100644 --- a/app/Models/Feature.php +++ b/app/Models/Feature.php @@ -5,7 +5,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; -use LaravelFeature\Model\Feature as Model; +use Illuminate\Database\Eloquent\Model; final class Feature extends Model { diff --git a/app/Models/User.php b/app/Models/User.php index 29c018d4..480bf9bf 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -9,6 +9,7 @@ use App\Traits\HasSettings; use App\Traits\HasUsername; use App\Traits\Reacts; +use Carbon\Carbon; use Filament\Models\Contracts\FilamentUser; use Filament\Models\Contracts\HasAvatar; use Filament\Models\Contracts\HasName; @@ -21,7 +22,6 @@ use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Notifications\Notification; -use Illuminate\Support\Carbon; use Illuminate\Support\Facades\Auth; use Laravel\Sanctum\HasApiTokens; use Laravel\Socialite\Contracts\User as SocialUser; diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 749f738e..94c3d361 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -62,8 +62,8 @@ public function bootMacros(): void public function bootViewsComposer(): void { - View::composer('discussions._contributions', TopContributorsComposer::class); - View::composer('discussions._contributions', InactiveDiscussionsComposer::class); + View::composer('partials._contributions', TopContributorsComposer::class); + View::composer('partials._contributions', InactiveDiscussionsComposer::class); View::composer('components.profile-users', ProfileUsersComposer::class); } diff --git a/app/Traits/HasSlug.php b/app/Traits/HasSlug.php index 2cb24354..7211c9ad 100644 --- a/app/Traits/HasSlug.php +++ b/app/Traits/HasSlug.php @@ -18,7 +18,7 @@ public function setSlugAttribute(string $slug): void $this->attributes['slug'] = $this->generateUniqueSlug($slug); } - public static function findBySlug(string $slug): self + public static function findBySlug(string $slug): static { return static::where('slug', $slug)->firstOrFail(); } diff --git a/app/Traits/WithArticleAttributes.php b/app/Traits/WithArticleAttributes.php deleted file mode 100644 index 1192446c..00000000 --- a/app/Traits/WithArticleAttributes.php +++ /dev/null @@ -1,73 +0,0 @@ - 'required|max:150', - 'body' => 'required', - 'tags_selected' => 'nullable|array', - 'canonical_url' => 'nullable|url', - 'file' => 'nullable|image|max:2048', // 1MB Max - 'show_toc' => 'boolean', - ]; - - public function removeImage(): void - { - $this->file = null; - } - - /** - * @return array - */ - public function messages(): array - { - return [ - 'title.required' => __('Le titre de l\'article est requis'), - 'title.max' => __('Le titre ne peux pas dépasser 150 caractères'), - 'body.required' => __('Le contenu de l\'article est requis'), - 'file.required' => __('L\'image de couverture est requise (dans les paramètres avancées)'), - ]; - } - - public function updatedTitle(string $value): void - { - $this->slug = Str::slug($value); - } - - public function onMarkdownUpdate(string $content): void - { - $this->body = $content; - $this->reading_time = Str::readDuration($content); - } -} diff --git a/app/Traits/WithChannelsAssociation.php b/app/Traits/WithChannelsAssociation.php deleted file mode 100644 index d9493247..00000000 --- a/app/Traits/WithChannelsAssociation.php +++ /dev/null @@ -1,31 +0,0 @@ - - */ - public array $channels_selected = []; - - /** - * @var int[] - */ - public array $associateChannels = []; - - /** - * @param array{value: string} $choices - */ - public function updatedChannelsSelected(array $choices): void - { - if (! in_array($choices['value'], $this->associateChannels)) { - $this->associateChannels[] = (int) $choices['value']; - } else { - $key = array_search($choices['value'], $this->associateChannels); - unset($this->associateChannels[$key]); - } - } -} diff --git a/app/Traits/WithTags.php b/app/Traits/WithTags.php deleted file mode 100644 index 97bd2b5d..00000000 --- a/app/Traits/WithTags.php +++ /dev/null @@ -1,29 +0,0 @@ -tag = $this->tag !== $tag && $this->tagExists($tag) ? $tag : null; - } - - public function sortBy(string $sort): void - { - $this->sortBy = $this->validSort($sort) ? $sort : 'recent'; - } - - public function tagExists(string $tag): bool - { - return Tag::query()->where('slug', $tag)->exists(); - } -} diff --git a/app/View/Composers/InactiveDiscussionsComposer.php b/app/View/Composers/InactiveDiscussionsComposer.php index 0853aadd..943d09a4 100644 --- a/app/View/Composers/InactiveDiscussionsComposer.php +++ b/app/View/Composers/InactiveDiscussionsComposer.php @@ -12,7 +12,11 @@ final class InactiveDiscussionsComposer { public function compose(View $view): void { - $discussions = Cache::remember('inactive_discussions', now()->addDays(3), fn () => Discussion::noComments()->limit(5)->get()); + $discussions = Cache::remember( + key: 'inactive_discussions', + ttl: now()->addDays(3), + callback: fn () => Discussion::noComments()->limit(5)->get() + ); $view->with('discussions', $discussions); } diff --git a/app/View/Composers/ModeratorsComposer.php b/app/View/Composers/ModeratorsComposer.php index 7e6d8c44..8c57633c 100644 --- a/app/View/Composers/ModeratorsComposer.php +++ b/app/View/Composers/ModeratorsComposer.php @@ -12,6 +12,13 @@ final class ModeratorsComposer { public function compose(View $view): void { - $view->with('moderators', Cache::remember('moderators', now()->addYear(), fn () => User::moderators()->get())); + $view->with( + 'moderators', + Cache::remember( + key: 'moderators', + ttl: now()->addMonths(6), + callback: fn () => User::moderators()->get() + ) + ); } } diff --git a/app/View/Composers/ProfileUsersComposer.php b/app/View/Composers/ProfileUsersComposer.php index 22de2fff..d2b3a119 100644 --- a/app/View/Composers/ProfileUsersComposer.php +++ b/app/View/Composers/ProfileUsersComposer.php @@ -12,6 +12,13 @@ final class ProfileUsersComposer { public function compose(View $view): void { - $view->with('users', Cache::remember('avatar_users', now()->addWeek(), fn () => User::verifiedUsers()->inRandomOrder()->take(10)->get())); + $view->with( + 'users', + Cache::remember( + key: 'avatar_users', + ttl: now()->addWeek(), + callback: fn () => User::verifiedUsers()->inRandomOrder()->take(10)->get() + ) + ); } } diff --git a/app/View/Composers/TopContributorsComposer.php b/app/View/Composers/TopContributorsComposer.php index 24e0f475..e6ee1464 100644 --- a/app/View/Composers/TopContributorsComposer.php +++ b/app/View/Composers/TopContributorsComposer.php @@ -12,12 +12,14 @@ final class TopContributorsComposer { public function compose(View $view): void { - $topContributors = Cache::remember('contributors', now()->addWeek(), function () { - return User::topContributors() + $topContributors = Cache::remember( + key: 'contributors', + ttl: now()->addWeek(), + callback: fn () => User::topContributors() ->get() ->filter(fn (User $contributor) => $contributor->loadCount('discussions')->discussions_count >= 1) - ->take(5); - }); + ->take(5) + ); $view->with('topContributors', $topContributors); } diff --git a/app/View/Composers/TopMembersComposer.php b/app/View/Composers/TopMembersComposer.php index 3f4572ec..73a0f954 100644 --- a/app/View/Composers/TopMembersComposer.php +++ b/app/View/Composers/TopMembersComposer.php @@ -12,6 +12,13 @@ final class TopMembersComposer { public function compose(View $view): void { - $view->with('topMembers', Cache::remember('topMembers', now()->addWeek(), fn () => User::mostSolutionsInLastDays(365)->take(5)->get())); + $view->with( + 'topMembers', + Cache::remember( + key: 'topMembers', + ttl: now()->addWeek(), + callback: fn () => User::mostSolutionsInLastDays(365)->take(5)->get() + ) + ); } } diff --git a/app/Widgets/MostActiveUsersPerWeek.php b/app/Widgets/MostActiveUsersPerWeek.php index 47d748de..a464ffa6 100644 --- a/app/Widgets/MostActiveUsersPerWeek.php +++ b/app/Widgets/MostActiveUsersPerWeek.php @@ -5,25 +5,24 @@ namespace App\Widgets; use App\Models\User; -use Arrilot\Widgets\AbstractWidget; use Illuminate\Contracts\View\View; use Illuminate\Database\Eloquent\Builder; -final class MostActiveUsersPerWeek extends AbstractWidget +final class MostActiveUsersPerWeek { /** * The configuration array. * * @var array */ - protected $config = []; + protected array $config = []; /** * The number of seconds before each reload. * * @var int|float */ - public $reloadTimeout = 60 * 60 * 24 * 2; // 2 days + public int|float $reloadTimeout = 60 * 60 * 24 * 2; // 2 days /** * The number of minutes before cache expires. @@ -31,7 +30,7 @@ final class MostActiveUsersPerWeek extends AbstractWidget * * @var int|float|bool */ - public $cacheTime = 0; + public int|float|bool $cacheTime = 0; public function run(): View { diff --git a/app/Widgets/MostLikedPostsPerWeek.php b/app/Widgets/MostLikedPostsPerWeek.php index 0b2d9239..5b7030f4 100644 --- a/app/Widgets/MostLikedPostsPerWeek.php +++ b/app/Widgets/MostLikedPostsPerWeek.php @@ -5,24 +5,23 @@ namespace App\Widgets; use App\Models\Article; -use Arrilot\Widgets\AbstractWidget; use Illuminate\Contracts\View\View; -final class MostLikedPostsPerWeek extends AbstractWidget +final class MostLikedPostsPerWeek { /** * The configuration array. * * @var array */ - protected $config = []; + protected array $config = []; /** * The number of seconds before each reload. * * @var int|float */ - public $reloadTimeout = 172800; // 2 days + public int|float $reloadTimeout = 172800; // 2 days /** * The number of minutes before cache expires. @@ -30,7 +29,7 @@ final class MostLikedPostsPerWeek extends AbstractWidget * * @var int|float|bool */ - public $cacheTime = 0; + public int|float|bool $cacheTime = 0; /** * Treat this method as a controller action. diff --git a/app/Widgets/MostViewedPostsPerWeek.php b/app/Widgets/MostViewedPostsPerWeek.php index 9f36a631..e7f01bb5 100644 --- a/app/Widgets/MostViewedPostsPerWeek.php +++ b/app/Widgets/MostViewedPostsPerWeek.php @@ -5,25 +5,24 @@ namespace App\Widgets; use App\Models\Article; -use Arrilot\Widgets\AbstractWidget; use CyrildeWit\EloquentViewable\Support\Period; use Illuminate\Contracts\View\View; -final class MostViewedPostsPerWeek extends AbstractWidget +final class MostViewedPostsPerWeek { /** * The configuration array. * * @var array */ - protected $config = []; + protected array $config = []; /** * The number of seconds before each reload. * * @var int|float */ - public $reloadTimeout = 172800; // 2 days + public int|float $reloadTimeout = 172800; // 2 days /** * The number of minutes before cache expires. @@ -31,11 +30,11 @@ final class MostViewedPostsPerWeek extends AbstractWidget * * @var int|float|bool */ - public $cacheTime = 90; + public int|float|bool $cacheTime = 90; public function run(): View { - $articles = Article::withViewsCount(Period::create(now()->startOfWeek(), now()->endOfWeek())) + $articles = Article::withViewsCount(Period::create(now()->startOfWeek(), now()->endOfWeek())) // @phpstan-ignore-line ->published() ->orderByDesc('views_count') ->orderByDesc('published_at') diff --git a/app/Widgets/RecentNumbers.php b/app/Widgets/RecentNumbers.php index 4b8f6a59..45dddc30 100644 --- a/app/Widgets/RecentNumbers.php +++ b/app/Widgets/RecentNumbers.php @@ -6,20 +6,19 @@ use App\Models\Article; use App\Models\User; -use Arrilot\Widgets\AbstractWidget; use CyrildeWit\EloquentViewable\Support\Period; use Illuminate\Contracts\View\View; -final class RecentNumbers extends AbstractWidget +final class RecentNumbers { - protected $config = []; + protected array $config = []; /** * The number of seconds before each reload. * * @var int|float */ - public $reloadTimeout = 5400; + public int|float $reloadTimeout = 5400; /** * The number of minutes before cache expires. @@ -27,7 +26,7 @@ final class RecentNumbers extends AbstractWidget * * @var int|float|bool */ - public $cacheTime = 90; + public int|float|bool $cacheTime = 90; public function run(): View { diff --git a/app/Widgets/RecentPostsPerWeek.php b/app/Widgets/RecentPostsPerWeek.php index 7ebc20a6..4e4df0a3 100644 --- a/app/Widgets/RecentPostsPerWeek.php +++ b/app/Widgets/RecentPostsPerWeek.php @@ -5,15 +5,14 @@ namespace App\Widgets; use App\Models\Article; -use Arrilot\Widgets\AbstractWidget; use Illuminate\Contracts\View\View; -final class RecentPostsPerWeek extends AbstractWidget +final class RecentPostsPerWeek { /** * @var array */ - protected $config = []; + protected array $config = []; public function run(): View { diff --git a/composer.lock b/composer.lock index 7fa77d7c..0f0ce169 100644 --- a/composer.lock +++ b/composer.lock @@ -8874,16 +8874,16 @@ }, { "name": "socialiteproviders/manager", - "version": "v4.6.0", + "version": "v4.7.0", "source": { "type": "git", "url": "https://github.com/SocialiteProviders/Manager.git", - "reference": "dea5190981c31b89e52259da9ab1ca4e2b258b21" + "reference": "ab0691b82cec77efd90154c78f1854903455c82f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/SocialiteProviders/Manager/zipball/dea5190981c31b89e52259da9ab1ca4e2b258b21", - "reference": "dea5190981c31b89e52259da9ab1ca4e2b258b21", + "url": "https://api.github.com/repos/SocialiteProviders/Manager/zipball/ab0691b82cec77efd90154c78f1854903455c82f", + "reference": "ab0691b82cec77efd90154c78f1854903455c82f", "shasum": "" }, "require": { @@ -8944,7 +8944,7 @@ "issues": "https://github.com/socialiteproviders/manager/issues", "source": "https://github.com/socialiteproviders/manager" }, - "time": "2024-05-04T07:57:39+00:00" + "time": "2024-11-10T01:56:18+00:00" }, { "name": "socialiteproviders/twitter", @@ -15043,16 +15043,16 @@ }, { "name": "phpmyadmin/sql-parser", - "version": "5.10.0", + "version": "5.10.1", "source": { "type": "git", "url": "https://github.com/phpmyadmin/sql-parser.git", - "reference": "91d980ab76c3f152481e367f62b921adc38af451" + "reference": "b14fd66496a22d8dd7f7e2791edd9e8674422f17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/91d980ab76c3f152481e367f62b921adc38af451", - "reference": "91d980ab76c3f152481e367f62b921adc38af451", + "url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/b14fd66496a22d8dd7f7e2791edd9e8674422f17", + "reference": "b14fd66496a22d8dd7f7e2791edd9e8674422f17", "shasum": "" }, "require": { @@ -15126,20 +15126,20 @@ "type": "other" } ], - "time": "2024-08-29T20:56:34+00:00" + "time": "2024-11-10T04:10:31+00:00" }, { "name": "phpstan/phpstan", - "version": "1.12.8", + "version": "1.12.9", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "f6a60a4d66142b8156c9da923f1972657bc4748c" + "reference": "ceb937fb39a92deabc02d20709cf14b2c452502c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/f6a60a4d66142b8156c9da923f1972657bc4748c", - "reference": "f6a60a4d66142b8156c9da923f1972657bc4748c", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/ceb937fb39a92deabc02d20709cf14b2c452502c", + "reference": "ceb937fb39a92deabc02d20709cf14b2c452502c", "shasum": "" }, "require": { @@ -15184,7 +15184,7 @@ "type": "github" } ], - "time": "2024-11-06T19:06:49+00:00" + "time": "2024-11-10T17:10:04+00:00" }, { "name": "phpunit/php-code-coverage", diff --git a/lang/en/global.php b/lang/en/global.php index 2ba037da..2122078e 100644 --- a/lang/en/global.php +++ b/lang/en/global.php @@ -89,5 +89,6 @@ 'discussion_action' => 'Start a discussion', 'discussion_description' => 'Discuss and debate different themes and ideas', ], + 'moderator' => 'Moderator', ]; diff --git a/lang/fr/global.php b/lang/fr/global.php index 6c99a412..a4a4cc96 100644 --- a/lang/fr/global.php +++ b/lang/fr/global.php @@ -89,5 +89,6 @@ 'discussion_action' => 'Démarrer une discussion', 'discussion_description' => 'Échangez, débattez sur différentes thématiques et idées.', ], + 'moderator' => 'Modérateur', ]; diff --git a/lang/fr/pages/discussion.php b/lang/fr/pages/discussion.php new file mode 100644 index 00000000..cc1551b9 --- /dev/null +++ b/lang/fr/pages/discussion.php @@ -0,0 +1,23 @@ + 'Tous les sujets de discussion', + 'contributors' => [ + 'top' => 'Top Contributeurs', + 'description' => 'Les personnes qui ont lancé le plus de discussions sur le site.', + ], + 'empty' => 'Discussions sans commentaires', + 'empty_description' => 'Les discussions / sujets qui n’ont pas encore eu de commentaires. Soyez le premier à apporter votre contribution.', + 'total_answer' => 'total réponses', + 'new_discussion' => 'Nouveau discussion', + 'filter' => [ + 'recent' => 'Récent', + 'popular' => 'Populaire', + 'active' => 'Actif', + ], + 'comments_count' => 'Commentaires (:count)', + +]; diff --git a/resources/views/components/discussions/overview.blade.php b/resources/views/components/discussions/overview.blade.php index 754df38f..b5a44ec9 100644 --- a/resources/views/components/discussions/overview.blade.php +++ b/resources/views/components/discussions/overview.blade.php @@ -4,48 +4,50 @@ ])
-
-
-

- - {{ $discussion->title }} - -

+ @if ($discussion->tags->isNotEmpty()) +
+ @foreach ($discussion->tags as $tag) + + @endforeach
-
- @if (count($tags = $discussion->tags)) -
- @foreach ($tags as $tag) - - @endforeach -
- @endif -
-
-

+ @endif +

+ + {{ $discussion->title }} + +

+

{!! $discussion->excerpt(175) !!}

+ @if (! $hiddenAuthor) -
-
- - - - {{ __('Posté par') }} -
- +
+ + {{ __('global.posted_by') }} +
+ {{ $discussion->user->name }} - + - +
diff --git a/resources/views/components/scrollable-content.blade.php b/resources/views/components/scrollable-content.blade.php new file mode 100644 index 00000000..ce49c942 --- /dev/null +++ b/resources/views/components/scrollable-content.blade.php @@ -0,0 +1,87 @@ +
twMerge(['class' => 'relative overflow-hidden']) }} +> +
+ +
+ +
get('tab-class'), + ]) + x-ref="slider" + :id="$id(scrollableId)" + > + {{ $slot }} +
+ +
+ +
+
diff --git a/resources/views/components/tag.blade.php b/resources/views/components/tag.blade.php index dced0759..11094530 100644 --- a/resources/views/components/tag.blade.php +++ b/resources/views/components/tag.blade.php @@ -2,7 +2,10 @@ 'tag', ]) - +twMerge(['class' => 'inline-flex items-center text-sm gap-1.5 relative z-10 rounded-lg bg-gray-100 px-2 py-1 font-medium text-gray-600 hover:bg-gray-200/50 dark:bg-gray-800 dark:text-white']) }} +> diff --git a/resources/views/components/tags.blade.php b/resources/views/components/tags.blade.php deleted file mode 100644 index fb9ee921..00000000 --- a/resources/views/components/tags.blade.php +++ /dev/null @@ -1,50 +0,0 @@ -@props([ - 'tags', - 'isLowercase' => false, - 'showHashTag' => false, - 'showTagsIcon' => false, - 'showTagsColor' => true, -]) - -
- @foreach ($tags as $tag) - - @endforeach -
diff --git a/resources/views/components/user/status.blade.php b/resources/views/components/user/status.blade.php index 3eab6af0..766ade37 100644 --- a/resources/views/components/user/status.blade.php +++ b/resources/views/components/user/status.blade.php @@ -1,5 +1,5 @@ - Modérateur + {{ __('global.moderator') }} diff --git a/resources/views/discussions/_contributions.blade.php b/resources/views/discussions/_contributions.blade.php deleted file mode 100644 index da8c47f0..00000000 --- a/resources/views/discussions/_contributions.blade.php +++ /dev/null @@ -1,96 +0,0 @@ - -
-

Top Contributeurs

-

Les personnes qui ont lancé le plus de discussions sur le site.

-
- -
-
- -
-

Discussions sans commentaires

-

- Les discussions / sujets qui n’ont pas encore eu de commentaires. Soyez le premier à apporter votre - contribution. -

- -
- -
-
-
diff --git a/resources/views/discussions/index.blade.php b/resources/views/discussions/index.blade.php deleted file mode 100644 index ae7751bc..00000000 --- a/resources/views/discussions/index.blade.php +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/resources/views/discussions/show.blade.php b/resources/views/discussions/show.blade.php deleted file mode 100644 index 37ee5590..00000000 --- a/resources/views/discussions/show.blade.php +++ /dev/null @@ -1,141 +0,0 @@ - - -
-
-
-
-

- {{ $discussion->title }} -

-
- - - - @if ($discussion->tags->isNotEmpty()) -
- @foreach ($discussion->tags as $tag) - - @endforeach -
- @endif -
-
-
-
-
-
- {{ $discussion->user->name }} - - - - - -
- -
-
- - -
- -
- @can(App\Policies\DiscussionPolicy::UPDATE, $discussion) -
- - {{ __('Éditer') }} - - · - -
- @endcan -
-
-
-
-
-

- {{ __('Commentaires (:count)', ['count' => $discussion->count_all_replies_with_child]) }} -

- @auth - - @endauth -
- - -
- -
-
-
diff --git a/resources/views/livewire/discussions/add-comment.blade.php b/resources/views/livewire/discussions/add-comment.blade.php index 51b79dbc..0456a49a 100644 --- a/resources/views/livewire/discussions/add-comment.blade.php +++ b/resources/views/livewire/discussions/add-comment.blade.php @@ -1,13 +1,16 @@ +@php + $user = \Illuminate\Support\Facades\Auth::user(); +@endphp +
- @auth -
-
- {{ $authenticate->name }} - +
+
+ {{ $authenticate->name }} + -
- @endauth +
-
! $authenticate, - ])> +
- + >
@if ($isRoot)

@@ -53,13 +52,13 @@ class="size-5 text-skin-muted"

@if ($isReply) - {{ __('Annuler') }} + {{ __('Annuler') }} @endif - + {{ __('Commenter') }} - +
diff --git a/resources/views/livewire/discussions/browse.blade.php b/resources/views/livewire/discussions/browse.blade.php deleted file mode 100644 index 47338e53..00000000 --- a/resources/views/livewire/discussions/browse.blade.php +++ /dev/null @@ -1,85 +0,0 @@ -
- -
-
- -
-
- @foreach ($discussions as $discussion) - - @endforeach -
- - @if ($discussions->hasMorePages()) -
-

- - Chargement... -

-
- @endif -
- -
diff --git a/resources/views/livewire/discussions/comment.blade.php b/resources/views/livewire/discussions/comment.blade.php index 9affb264..1ed73302 100644 --- a/resources/views/livewire/discussions/comment.blade.php +++ b/resources/views/livewire/discussions/comment.blade.php @@ -24,7 +24,7 @@ class="mx-1.5 inline-flex items-center rounded-md bg-skin-card-gray px-2.5 py-0. - @can(App\Policies\ReplyPolicy::UPDATE, $comment) + @can('update', $comment)
diff --git a/resources/views/livewire/discussions/comments.blade.php b/resources/views/livewire/discussions/comments.blade.php index 01395ad5..a597b5ed 100644 --- a/resources/views/livewire/discussions/comments.blade.php +++ b/resources/views/livewire/discussions/comments.blade.php @@ -1,5 +1,4 @@
- @if ($this->comments->isNotEmpty())
    @@ -9,4 +8,20 @@
@endif + + @auth + + @else +

+ {{ __('global.need') }} + + {{ __('pages/auth.login.page_title') }} + + {{ __('global.or') }} + + {{ __('pages/auth.register.page_title') }} + + {{ __('pages/forum.collaborate_thread') }} +

+ @endauth
diff --git a/resources/views/livewire/pages/discussions/index.blade.php b/resources/views/livewire/pages/discussions/index.blade.php new file mode 100644 index 00000000..086029b4 --- /dev/null +++ b/resources/views/livewire/pages/discussions/index.blade.php @@ -0,0 +1,72 @@ + +
+
+
+ +
+ +
+
+
+ + + + + + + + {{ __('pages/discussion.filter.recent') }} + + + {{ __('pages/discussion.filter.popular') }} + + + {{ __('pages/discussion.filter.active') }} + + + + + @can('create', \App\Models\Discussion::class) + + {{ __('pages/discussion.new_discussion') }} + + @endcan +
+
+ +
+ @foreach ($discussions as $discussion) + + @endforeach +
+ + {{ $discussions->links() }} +
+ + +
+
diff --git a/resources/views/livewire/pages/discussions/single-discussion.blade.php b/resources/views/livewire/pages/discussions/single-discussion.blade.php new file mode 100644 index 00000000..e44bec21 --- /dev/null +++ b/resources/views/livewire/pages/discussions/single-discussion.blade.php @@ -0,0 +1,133 @@ + +
+
+ + +
+
+

+ {{ $discussion->title }} +

+
+ + + @if ($discussion->tags->isNotEmpty()) +
+ @foreach ($discussion->tags as $tag) + + @endforeach +
+ @endif +
+
+
+
+
+
+ +
+
+ +

+ {{ $discussion->user->name }} + @if ($discussion->user->isAdmin() || $discussion->user->isModerator()) + + @endif +

+
+
+ +
+
+
+
+ + + + +
+ +
+ + @can('update', $discussion) +
+ + {{ __('Éditer') }} + + · + +
+ @endcan +
+
+
+
+ +
+

+ {{ __('pages/discussion.comments_count', ['count' => $discussion->count_all_replies_with_child]) }} +

+ @auth + + @endauth +
+ + +
+ + +
+
diff --git a/resources/views/partials/_contributions.blade.php b/resources/views/partials/_contributions.blade.php new file mode 100644 index 00000000..62c8e3ae --- /dev/null +++ b/resources/views/partials/_contributions.blade.php @@ -0,0 +1,88 @@ +@php + /** + * This files load variables from ViewComposer in AppServiceProvider + * + * @see \App\View\Composers\TopContributorsComposer + * @see \App\View\Composers\InactiveDiscussionsComposer + */ +@endphp + + +
+

+ {{ __('pages/discussion.contributors.top') }} +

+

+ {{ __('pages/discussion.contributors.description') }} +

+
+
    + @foreach ($topContributors as $contributor) +
  • +
    + +
    + +
    +
    +

    + {{ $contributor->name }} +

    +

    + {{ '@' . $contributor->username }} +

    +
    +
    +

    +

    +
    +
  • + @endforeach +
+
+
+ +
+

+ {{ __('pages/discussion.empty') }} +

+

+ {{ __('pages/discussion.empty_description') }} +

+ +
+
    + @foreach ($discussions as $discussion) +
  • +
    + +
    +
    +

    + + {{ $discussion->user->name }} + +

    + +
    + + {{ $discussion->title }} + +
    +
    +
  • + @endforeach +
+
+
+
diff --git a/resources/views/partials/_leading-addons.blade.php b/resources/views/partials/_leading-addons.blade.php deleted file mode 100644 index 5636a38c..00000000 --- a/resources/views/partials/_leading-addons.blade.php +++ /dev/null @@ -1,17 +0,0 @@ -@if ($attributes->get('leading-addon')) - - {!! $attributes->get('leading-addon') !!} - -@elseif ($attributes->get('inline-addon')) -
- - {!! $attributes->get('inline-addon') !!} - -
-@elseif ($attributes->get('leading-icon')) -
- @svg($attributes->get('leading-icon'), ['class' => 'size-5 text-skin-muted']) -
-@endif diff --git a/routes/features/discussion.php b/routes/features/discussion.php new file mode 100644 index 00000000..ebd2c34d --- /dev/null +++ b/routes/features/discussion.php @@ -0,0 +1,12 @@ +name('index'); +Route::get('/new', [DiscussionController::class, 'create'])->name('new'); +Route::get('/{discussion}', Discussions\SingleDiscussion::class)->name('show'); +Route::get('/{discussion}/edit', [DiscussionController::class, 'edit'])->name('edit'); diff --git a/routes/web.php b/routes/web.php index 1a7edfcc..50a62c22 100644 --- a/routes/web.php +++ b/routes/web.php @@ -2,7 +2,6 @@ declare(strict_types=1); -use App\Http\Controllers\DiscussionController; use App\Http\Controllers\FileUploadController; use App\Http\Controllers\HomeController; use App\Http\Controllers\NotchPayCallBackController; @@ -33,16 +32,7 @@ // Articles Route::prefix('articles')->as('articles.')->group(base_path('routes/features/article.php')); - -// Discussions -Route::prefix('discussions')->as('discussions.')->group(function (): void { - Route::get('/', [DiscussionController::class, 'index'])->name('index'); - Route::get('/new', [DiscussionController::class, 'create'])->name('new'); - Route::get('/{discussion}', [DiscussionController::class, 'show'])->name('show'); - Route::get('/{discussion}/edit', [DiscussionController::class, 'edit'])->name('edit'); -}); - -// Forum +Route::prefix('discussions')->as('discussions.')->group(base_path('routes/features/discussion.php')); Route::prefix('forum')->as('forum.')->group(base_path('routes/features/forum.php')); // Replies From 8286bc8a19c7423d546e507ae7b98954da57494d Mon Sep 17 00:00:00 2001 From: Arthur Monney Date: Tue, 12 Nov 2024 00:19:16 +0100 Subject: [PATCH 2/2] chore: run composer lint --- app/Widgets/MostActiveUsersPerWeek.php | 4 ---- app/Widgets/MostLikedPostsPerWeek.php | 4 ---- app/Widgets/MostViewedPostsPerWeek.php | 4 ---- app/Widgets/RecentNumbers.php | 4 ---- 4 files changed, 16 deletions(-) diff --git a/app/Widgets/MostActiveUsersPerWeek.php b/app/Widgets/MostActiveUsersPerWeek.php index a464ffa6..7d37dffc 100644 --- a/app/Widgets/MostActiveUsersPerWeek.php +++ b/app/Widgets/MostActiveUsersPerWeek.php @@ -19,16 +19,12 @@ final class MostActiveUsersPerWeek /** * The number of seconds before each reload. - * - * @var int|float */ public int|float $reloadTimeout = 60 * 60 * 24 * 2; // 2 days /** * The number of minutes before cache expires. * False means no caching at all. - * - * @var int|float|bool */ public int|float|bool $cacheTime = 0; diff --git a/app/Widgets/MostLikedPostsPerWeek.php b/app/Widgets/MostLikedPostsPerWeek.php index 5b7030f4..7bb4796c 100644 --- a/app/Widgets/MostLikedPostsPerWeek.php +++ b/app/Widgets/MostLikedPostsPerWeek.php @@ -18,16 +18,12 @@ final class MostLikedPostsPerWeek /** * The number of seconds before each reload. - * - * @var int|float */ public int|float $reloadTimeout = 172800; // 2 days /** * The number of minutes before cache expires. * False means no caching at all. - * - * @var int|float|bool */ public int|float|bool $cacheTime = 0; diff --git a/app/Widgets/MostViewedPostsPerWeek.php b/app/Widgets/MostViewedPostsPerWeek.php index e7f01bb5..98b4e064 100644 --- a/app/Widgets/MostViewedPostsPerWeek.php +++ b/app/Widgets/MostViewedPostsPerWeek.php @@ -19,16 +19,12 @@ final class MostViewedPostsPerWeek /** * The number of seconds before each reload. - * - * @var int|float */ public int|float $reloadTimeout = 172800; // 2 days /** * The number of minutes before cache expires. * False means no caching at all. - * - * @var int|float|bool */ public int|float|bool $cacheTime = 90; diff --git a/app/Widgets/RecentNumbers.php b/app/Widgets/RecentNumbers.php index 45dddc30..38d59b97 100644 --- a/app/Widgets/RecentNumbers.php +++ b/app/Widgets/RecentNumbers.php @@ -15,16 +15,12 @@ final class RecentNumbers /** * The number of seconds before each reload. - * - * @var int|float */ public int|float $reloadTimeout = 5400; /** * The number of minutes before cache expires. * False means no caching at all. - * - * @var int|float|bool */ public int|float|bool $cacheTime = 90;