From 965917c87483c420d50d4f3472ad8f9db367d48b Mon Sep 17 00:00:00 2001
From: Seth Sharp
Date: Mon, 19 Feb 2024 13:45:36 +1000
Subject: [PATCH] wip
---
app/Domain/Blog/Actions/StoreBlogAction.php | 1 +
app/Domain/Blog/Actions/UpdateBlogAction.php | 1 +
app/Domain/Blog/Models/Blog.php | 3 ++-
app/Domain/Blog/Policies/BlogPolicy.php | 7 +------
.../Views/Blogs/ShowBlogController.php | 11 ++++++++++-
resources/js/Layouts/AuthenticatedLayout.vue | 18 +++++++++---------
resources/js/Layouts/ProfileLayout.vue | 8 ++++----
.../views/components/blogs/card.blade.php | 2 +-
.../views/livewire/blogs/show-blog.blade.php | 3 ++-
9 files changed, 31 insertions(+), 23 deletions(-)
diff --git a/app/Domain/Blog/Actions/StoreBlogAction.php b/app/Domain/Blog/Actions/StoreBlogAction.php
index d16a753a..8c07b16d 100644
--- a/app/Domain/Blog/Actions/StoreBlogAction.php
+++ b/app/Domain/Blog/Actions/StoreBlogAction.php
@@ -17,6 +17,7 @@ public function __invoke(StoreBlogRequest $storeBlogRequest): Blog
$blog = Blog::create([
'author_id' => auth()->user()->id,
...$storeBlogRequest->validated(),
+ 'published_at' => null
]);
$blog->tags()->sync($tags);
diff --git a/app/Domain/Blog/Actions/UpdateBlogAction.php b/app/Domain/Blog/Actions/UpdateBlogAction.php
index f376be77..92bdf933 100644
--- a/app/Domain/Blog/Actions/UpdateBlogAction.php
+++ b/app/Domain/Blog/Actions/UpdateBlogAction.php
@@ -18,6 +18,7 @@ public function __invoke(Blog $blog, UpdateBlogRequest $updateBlogRequest): Blog
$blog->update([
...$updateBlogRequest->validated(),
+ 'published_at' => null
]);
$blog->tags()->sync($tags);
diff --git a/app/Domain/Blog/Models/Blog.php b/app/Domain/Blog/Models/Blog.php
index 787040c0..8951f31c 100644
--- a/app/Domain/Blog/Models/Blog.php
+++ b/app/Domain/Blog/Models/Blog.php
@@ -21,7 +21,8 @@ class Blog extends Model
protected $guarded = [];
protected $casts = [
- 'is_draft' => 'bool'
+ 'is_draft' => 'bool',
+ 'published_at' => 'timestamp'
];
public function author(): BelongsTo
diff --git a/app/Domain/Blog/Policies/BlogPolicy.php b/app/Domain/Blog/Policies/BlogPolicy.php
index f056b911..3bb19ff6 100644
--- a/app/Domain/Blog/Policies/BlogPolicy.php
+++ b/app/Domain/Blog/Policies/BlogPolicy.php
@@ -7,7 +7,7 @@
class BlogPolicy
{
- public function before(User $user): ?bool
+ public function before(User $user, string $ability): ?bool
{
if ($user->hasRole(User::ROLE_ADMIN)) {
return true;
@@ -30,9 +30,4 @@ public function view(User $user): bool
{
return $user->hasRole(User::ROLE_AUTHOR);
}
-
- public function viewPublic(User $user, Blog $blog): bool
- {
- return ! $blog->isDraft();
- }
}
diff --git a/app/Http/Controllers/Views/Blogs/ShowBlogController.php b/app/Http/Controllers/Views/Blogs/ShowBlogController.php
index 358cca32..61ab3a39 100644
--- a/app/Http/Controllers/Views/Blogs/ShowBlogController.php
+++ b/app/Http/Controllers/Views/Blogs/ShowBlogController.php
@@ -3,6 +3,7 @@
namespace App\Http\Controllers\Views\Blogs;
use Illuminate\View\View;
+use App\Domain\Iam\Models\User;
use App\Domain\Blog\Models\Blog;
use App\Http\Controllers\Controller;
@@ -10,7 +11,15 @@ class ShowBlogController extends Controller
{
public function __invoke(Blog $blog): View
{
- $this->authorize('viewPublic', [Blog::class, $blog]);
+ if ($blog->isDraft()) {
+ if (auth()->check()) {
+ if (! auth()->user()->hasRole([User::ROLE_ADMIN])) {
+ abort(403, 'Blog is currently in a draft status');
+ }
+ } else {
+ abort(403, 'Blog is currently in a draft status');
+ }
+ }
return view('blogs.show', [
'blog' => $blog
diff --git a/resources/js/Layouts/AuthenticatedLayout.vue b/resources/js/Layouts/AuthenticatedLayout.vue
index 56ed515c..4910a250 100644
--- a/resources/js/Layouts/AuthenticatedLayout.vue
+++ b/resources/js/Layouts/AuthenticatedLayout.vue
@@ -1,11 +1,11 @@
-
+
@@ -43,7 +43,7 @@ const links = [
-
+
@@ -154,8 +154,8 @@ const links = [
>
Dashboard
@@ -187,18 +187,18 @@ const links = [
-
+
-
+
diff --git a/resources/js/Layouts/ProfileLayout.vue b/resources/js/Layouts/ProfileLayout.vue
index fc0c5db7..3e86837b 100644
--- a/resources/js/Layouts/ProfileLayout.vue
+++ b/resources/js/Layouts/ProfileLayout.vue
@@ -1,20 +1,20 @@
diff --git a/resources/views/components/blogs/card.blade.php b/resources/views/components/blogs/card.blade.php
index ab81077b..b6158941 100644
--- a/resources/views/components/blogs/card.blade.php
+++ b/resources/views/components/blogs/card.blade.php
@@ -17,7 +17,7 @@
- {{$blog->published_at}}
+ {{ Carbon\Carbon::parse($blog->published_at)->diffForHumans() }}
diff --git a/resources/views/livewire/blogs/show-blog.blade.php b/resources/views/livewire/blogs/show-blog.blade.php
index 188b80ab..cd922a04 100644
--- a/resources/views/livewire/blogs/show-blog.blade.php
+++ b/resources/views/livewire/blogs/show-blog.blade.php
@@ -16,7 +16,8 @@
@if($blog->published_at)
- Published by {{ $blog->author->name }} {{ $blog->published_at->diffForHumans() }}
+ Published
+ by {{ $blog->author->name }} {{ Carbon\Carbon::parse($blog->published_at)->diffForHumans() }}
@else
This blog is in a draft status
@endif