diff --git a/app/Livewire/Pages/Articles/SinglePost.php b/app/Livewire/Pages/Articles/SinglePost.php index 2d0d03fb..71c112f7 100644 --- a/app/Livewire/Pages/Articles/SinglePost.php +++ b/app/Livewire/Pages/Articles/SinglePost.php @@ -14,12 +14,12 @@ final class SinglePost extends Component { public Article $article; - public function mount(Article $article): void + public function mount(): void { /** @var User $user */ $user = Auth::user(); - $article = $article->load(['media', 'user'])->loadCount('views'); + $article = $this->article->load(['media', 'user'])->loadCount('views'); abort_unless( $article->isPublished() || ($user && $article->isAuthoredBy($user)) || ($user && $user->hasAnyRole(['admin', 'moderator'])), // @phpstan-ignore-line @@ -42,7 +42,6 @@ public function mount(Article $article): void ->twitterTitle($article->title) ->twitterDescription($article->excerpt(150)) ->twitterImage($image) - ->twitterSite('laravelcm') ->url($article->canonicalUrl()); $this->article = $article; diff --git a/app/Livewire/Pages/Discussions/SingleDiscussion.php b/app/Livewire/Pages/Discussions/SingleDiscussion.php index 5bde2432..47da73e5 100644 --- a/app/Livewire/Pages/Discussions/SingleDiscussion.php +++ b/app/Livewire/Pages/Discussions/SingleDiscussion.php @@ -23,22 +23,20 @@ final class SingleDiscussion extends Component implements HasActions, HasForms public Discussion $discussion; - public function mount(Discussion $discussion): void + public function mount(): void { - views($discussion)->cooldown(now()->addHours(2))->record(); + views($this->discussion)->cooldown(now()->addHours(2))->record(); // @phpstan-ignore-next-line seo() - ->title($discussion->title) - ->description($discussion->excerpt(100)) + ->title($this->discussion->title) + ->description($this->discussion->excerpt(100)) ->image(asset('images/socialcard.png')) - ->twitterTitle($discussion->title) - ->twitterDescription($discussion->excerpt(100)) - ->twitterImage(asset('images/socialcard.png')) - ->twitterSite('laravelcm') + ->twitterTitle($this->discussion->title) + ->twitterDescription($this->discussion->excerpt(100)) ->withUrl(); - $this->discussion = $discussion->load('tags', 'replies', 'reactions', 'replies.user'); + $this->discussion->load('tags', 'replies', 'reactions', 'replies.user', 'user'); } public function editAction(): Action diff --git a/app/Livewire/Pages/Home.php b/app/Livewire/Pages/Home.php index c8f994b5..f4a25232 100644 --- a/app/Livewire/Pages/Home.php +++ b/app/Livewire/Pages/Home.php @@ -19,14 +19,6 @@ public function render(): View { $ttl = now()->addDays(2); - // @phpstan-ignore-next-line - seo() - ->description(__('pages/home.description')) - ->twitterDescription(__('pages/home.description')) - ->image(asset('/images/socialcard.png')) - ->twitterSite('laravelcm') - ->withUrl(); - return view('livewire.pages.home', [ 'plans' => Cache::remember( key: 'plans', diff --git a/app/Models/User.php b/app/Models/User.php index f9b206ec..e3e368c0 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -117,6 +117,10 @@ final class User extends Authenticatable implements FilamentUser, HasAvatar, Has 'last_active_at' => 'datetime', ]; + protected $with = [ + 'providers', + ]; + public function hasProvider(string $provider): bool { foreach ($this->providers as $p) { diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index ac5bb1d8..ee25d4e9 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -40,6 +40,16 @@ public function boot(): void $this->bootEloquentMorphs(); $this->bootFilament(); + // @phpstan-ignore-next-line + seo() + ->title( + default: __('pages/home.title'), + modify: fn (string $title) => $title.' | '.__('global.site_name') + ) + ->description(default: __('global.site_description')) + ->image(default: fn () => asset('images/socialcard.png')) + ->twitterSite('@laravelcm'); + FilamentColor::register([ 'primary' => Color::Emerald, 'danger' => Color::Red, diff --git a/app/View/Composers/InactiveDiscussionsComposer.php b/app/View/Composers/InactiveDiscussionsComposer.php index 943d09a4..9b316ca8 100644 --- a/app/View/Composers/InactiveDiscussionsComposer.php +++ b/app/View/Composers/InactiveDiscussionsComposer.php @@ -14,8 +14,8 @@ public function compose(View $view): void { $discussions = Cache::remember( key: 'inactive_discussions', - ttl: now()->addDays(3), - callback: fn () => Discussion::noComments()->limit(5)->get() + ttl: now()->addWeek(), + callback: fn () => Discussion::with('user')->noComments()->limit(5)->get() ); $view->with('discussions', $discussions); diff --git a/app/View/Composers/TopContributorsComposer.php b/app/View/Composers/TopContributorsComposer.php index e6ee1464..c0855415 100644 --- a/app/View/Composers/TopContributorsComposer.php +++ b/app/View/Composers/TopContributorsComposer.php @@ -15,9 +15,9 @@ public function compose(View $view): void $topContributors = Cache::remember( key: 'contributors', ttl: now()->addWeek(), - callback: fn () => User::topContributors() + callback: fn () => User::query()->scopes('topContributors') ->get() - ->filter(fn (User $contributor) => $contributor->loadCount('discussions')->discussions_count >= 1) + ->filter(fn (User $contributor) => $contributor->discussions_count >= 1) ->take(5) ); diff --git a/composer.json b/composer.json index 1128de76..a90ded22 100644 --- a/composer.json +++ b/composer.json @@ -10,6 +10,7 @@ "ext-json": "*", "archtechx/laravel-seo": "^0.10", "awcodes/filament-badgeable-column": "^2.3", + "barryvdh/laravel-debugbar": "^3.14", "blade-ui-kit/blade-heroicons": "^2.4", "codeat3/blade-phosphor-icons": "^2.0", "cyrildewit/eloquent-viewable": "^7.0", diff --git a/composer.lock b/composer.lock index cec5c7c1..12bb7775 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": "255123bf274b713735b09291084080af", + "content-hash": "6b11f598bdc899a012175d5a089c602c", "packages": [ { "name": "abraham/twitteroauth", @@ -1068,6 +1068,90 @@ ], "time": "2024-03-07T20:37:19+00:00" }, + { + "name": "barryvdh/laravel-debugbar", + "version": "v3.14.10", + "source": { + "type": "git", + "url": "https://github.com/barryvdh/laravel-debugbar.git", + "reference": "56b9bd235e3fe62e250124804009ce5bab97cc63" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/56b9bd235e3fe62e250124804009ce5bab97cc63", + "reference": "56b9bd235e3fe62e250124804009ce5bab97cc63", + "shasum": "" + }, + "require": { + "illuminate/routing": "^9|^10|^11", + "illuminate/session": "^9|^10|^11", + "illuminate/support": "^9|^10|^11", + "maximebf/debugbar": "~1.23.0", + "php": "^8.0", + "symfony/finder": "^6|^7" + }, + "require-dev": { + "mockery/mockery": "^1.3.3", + "orchestra/testbench-dusk": "^5|^6|^7|^8|^9", + "phpunit/phpunit": "^9.6|^10.5", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "laravel": { + "aliases": { + "Debugbar": "Barryvdh\\Debugbar\\Facades\\Debugbar" + }, + "providers": [ + "Barryvdh\\Debugbar\\ServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "3.14-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Barryvdh\\Debugbar\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + } + ], + "description": "PHP Debugbar integration for Laravel", + "keywords": [ + "debug", + "debugbar", + "laravel", + "profiler", + "webprofiler" + ], + "support": { + "issues": "https://github.com/barryvdh/laravel-debugbar/issues", + "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.14.10" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2024-12-23T10:10:42+00:00" + }, { "name": "blade-ui-kit/blade-heroicons", "version": "2.5.0", @@ -6428,6 +6512,74 @@ }, "time": "2024-03-31T07:05:07+00:00" }, + { + "name": "maximebf/debugbar", + "version": "v1.23.5", + "source": { + "type": "git", + "url": "https://github.com/php-debugbar/php-debugbar.git", + "reference": "eeabd61a1f19ba5dcd5ac4585a477130ee03ce25" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-debugbar/php-debugbar/zipball/eeabd61a1f19ba5dcd5ac4585a477130ee03ce25", + "reference": "eeabd61a1f19ba5dcd5ac4585a477130ee03ce25", + "shasum": "" + }, + "require": { + "php": "^7.2|^8", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^4|^5|^6|^7" + }, + "require-dev": { + "dbrekelmans/bdi": "^1", + "phpunit/phpunit": "^8|^9", + "symfony/panther": "^1|^2.1", + "twig/twig": "^1.38|^2.7|^3.0" + }, + "suggest": { + "kriswallsmith/assetic": "The best way to manage assets", + "monolog/monolog": "Log using Monolog", + "predis/predis": "Redis storage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.23-dev" + } + }, + "autoload": { + "psr-4": { + "DebugBar\\": "src/DebugBar/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Maxime Bouroumeau-Fuseau", + "email": "maxime.bouroumeau@gmail.com", + "homepage": "http://maximebf.com" + }, + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + } + ], + "description": "Debug bar in the browser for php application", + "homepage": "https://github.com/maximebf/php-debugbar", + "keywords": [ + "debug", + "debugbar" + ], + "support": { + "issues": "https://github.com/php-debugbar/php-debugbar/issues", + "source": "https://github.com/php-debugbar/php-debugbar/tree/v1.23.5" + }, + "time": "2024-12-15T19:20:42+00:00" + }, { "name": "maxmind-db/reader", "version": "v1.12.0", diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index 7d9ebe7a..314d949f 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -13,12 +13,9 @@ {{ isset($title) ? $title . ' | ' : '' }} {{ config('app.name') }} {{ is_active('home') ? '- '. __('pages/home.title') : '' }} - + - - - - @include('partials._og') +