Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 22 additions & 14 deletions app/Http/Controllers/PostsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,8 @@
use App\Notifications\PostDeleted;
use App\Notifications\PostEdited;
use App\Post;
use App\Post_tag;
use App\PostTag;
use App\Tag;
use App\User;
use Illuminate\Http\Request;

class PostsController extends Controller
Expand All @@ -19,6 +18,16 @@ public function __construct()
$this->middleware('can:update,post')->except(['index', 'userPosts', 'adminIndex', 'create', 'store']);
}

public function validateRequest(Request $request)
{
return $request->validate([
'code' => 'required|unique:posts|regex:/[a-zA-Z0-9_-]+/',
'name' => 'required|min:5|max:100',
'description' => 'required|max:255',
'text' => 'required'
]);
}

public function index()
{
$posts = Post::with('tags')->latest()->get();
Expand All @@ -43,12 +52,7 @@ public function create()

public function store(Request $request)
{
$attr = $request->validate([
'code' => 'required|unique:posts|regex:/[a-zA-Z0-9_-]+/',
'name' => 'required|min:5|max:100',
'description' => 'required|max:255',
'text' => 'required'
]);
$attr = $this->validateRequest($request);

if ($request->has('published')) {
$attr['published'] = 1;
Expand All @@ -58,6 +62,14 @@ public function store(Request $request)

$post = Post::create($attr);

if ($request->has('tags')) {
$requestTags = explode(', ', $request['tags']);
foreach ($requestTags as $tag) {
$tag = Tag::firstOrCreate(['name' => $tag]);
$post->tags()->attach($tag);
}
}

sendMailNotifyToAdmin(new PostCreated($post));
flash( 'Post created successfully');

Expand All @@ -76,11 +88,7 @@ public function edit(Post $post)

public function update(Request $request, Post $post)
{
$values = $request->validate([
'name' => 'required|min:5|max:100',
'description' => 'required|max:255',
'text' => 'required'
]);
$values = $this->validateRequest($request);

$post->update($values);

Expand All @@ -105,7 +113,7 @@ public function update(Request $request, Post $post)
if ($deleteTags->isNotEmpty()) {
foreach ($deleteTags as $tag) {
$post->tags()->detach($tag);
$isLastTag = Post_tag::where('tag_id', $tag->id)->first();
$isLastTag = PostTag::where('tag_id', $tag->id)->first();
if (!$isLastTag) $tag->delete();
};
}
Expand Down
10 changes: 10 additions & 0 deletions app/PostTag.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?php

namespace App;

use Illuminate\Database\Eloquent\Relations\Pivot;

class PostTag extends Pivot
{
protected $table = 'post_tag';
}
11 changes: 0 additions & 11 deletions app/Post_tag.php

This file was deleted.

3 changes: 2 additions & 1 deletion app/User.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,8 @@ class User extends Authenticatable
'email_verified_at' => 'datetime',
];

public function posts() {
public function posts()
{
return $this->hasMany(Post::class, 'owner_id');
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public function up()
$table->string('name', 100);
$table->string('description', 255);
$table->text('text');
$table->boolean('published')->default(0);
$table->boolean('published')->default(false);
$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));
$table->timestamp('updated_at')->default(DB::raw('CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP'));

Expand Down
11 changes: 11 additions & 0 deletions resources/views/posts/create.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,17 @@ class="form-control @error('text') is-invalid @enderror"
@enderror
</div>

<div class="form__field col-6 mb-3">
<label for="form-tags">Tags</label>
<input type="text"
class="form-control"
id="form-tags"
name="tags"
placeholder="tag1, tag2"
value="{{ old('tags') }}"
>
</div>

<div class="form__field form-check mb-2">
<input class="form__checkbox"
id="form-checkbox"
Expand Down
37 changes: 24 additions & 13 deletions resources/views/posts/edit.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,28 @@
@method('patch')

<div class="form__fields row d-flex flex-column">
<div class="form__field col-6 mb-3">
<label for="form-code">Code</label>
<input type="text"
class="form-control @error('code') is-invalid @enderror"
id="form-code"
name="code"
value="{{ old('code', $post->code) }}"
placeholder=""
required=""
>

<div class="invalid-feedback">
Code is required.
</div>

@error('code')
<div class="alert alert-danger">
{{ $message }}
</div>
@enderror
</div>

<div class="form__field col-6 mb-3">
<label for="form-name">Post Name</label>
<input type="text"
Expand Down Expand Up @@ -81,22 +103,11 @@ class="form-control @error('text') is-invalid @enderror"
<div class="form__field col-6 mb-3">
<label for="form-tags">Tags</label>
<input type="text"
class="form-control @error('description') is-invalid @enderror"
class="form-control"
id="form-tags"
name="tags"
value="{{ old('tags', $post->tags->pluck('name'))->implode(', ') }}"
required=""
value="{{ old('tags', $post->tags->pluck('name')->implode(', ')) }}"
>

<div class="invalid-feedback">
Post Description is required.
</div>

@error('description')
<div class="alert alert-danger">
{{ $message }}
</div>
@enderror
</div>

<div class="form__field form-check mb-2">
Expand Down
8 changes: 8 additions & 0 deletions resources/views/posts/index.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,14 @@

<p class="post__preview card-text mb-auto text-justify" style="height: 115px"> {{ str_limit($post->text, $limit = 100, $end = '...') }} </p>

@if($post->tags->isNotEmpty())
<div class="post__tags mb-2">
@foreach($post->tags as $tag)
<span class="badge badge-info text-white">{{ $tag->name }}</span>
@endforeach
</div>
@endif

<a href="{{ route('post-show', $post->id) }}" class="post__view">Continue reading</a>
</div>

Expand Down
1 change: 0 additions & 1 deletion resources/views/tags/index.blade.php

This file was deleted.