From 9ce9f62a450f7ddebb46812de07be66ecd3000fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Mon, 5 Sep 2016 12:50:04 +0200 Subject: [PATCH] FEATURE: add creating comments --- modules/Blog/Article/Entities/Comment.php | 26 ++++++++++ .../Controllers/Admin/CommentsOverview.php | 15 ++++++ .../Controllers/Visitor/CreateNewComment.php | 48 +++++++++++++++++ .../Http/Requests/CreateNewComment.php | 28 ++++++++++ modules/Blog/Article/Http/routes.php | 38 +++++--------- .../2016_09_05_085644_create_comments.php | 51 +++++++++++++++++++ .../cwbs/modules/Article/content.blade.php | 12 +++++ 7 files changed, 192 insertions(+), 26 deletions(-) create mode 100644 modules/Blog/Article/Entities/Comment.php create mode 100644 modules/Blog/Article/Http/Controllers/Admin/CommentsOverview.php create mode 100644 modules/Blog/Article/Http/Controllers/Visitor/CreateNewComment.php create mode 100644 modules/Blog/Article/Http/Requests/CreateNewComment.php create mode 100644 modules/Blog/Database/Migrations/2016_09_05_085644_create_comments.php diff --git a/modules/Blog/Article/Entities/Comment.php b/modules/Blog/Article/Entities/Comment.php new file mode 100644 index 00000000..2c10a3ab --- /dev/null +++ b/modules/Blog/Article/Entities/Comment.php @@ -0,0 +1,26 @@ +belongsTo(User::class); + } + + public function article() + { + return $this->belongsTo(Content::class); + } +} \ No newline at end of file diff --git a/modules/Blog/Article/Http/Controllers/Admin/CommentsOverview.php b/modules/Blog/Article/Http/Controllers/Admin/CommentsOverview.php new file mode 100644 index 00000000..750ba0ea --- /dev/null +++ b/modules/Blog/Article/Http/Controllers/Admin/CommentsOverview.php @@ -0,0 +1,15 @@ +where('module_handler', Article::class) + ->firstOrFail(); + + $article->module_settings = json_decode($article->module_settings); + + if (!isset($article->module_settings->allowComments) || !$article->module_settings->allowComments) { + return redirect() + ->route('page.content', ['url' => $article->url]) + ->with('error', trans('article::comments.disabledComments')); + } + + $content = $request->message; + $user = Auth::user(); + if ($user) { + $name = $user->name; + $email = $user->email; + } else { + $name = $request->name; + $email = $request->email; + } + + Comment::create([ + 'user_id' => $user ? $user->id : null, + 'content_id' => $article->id, + 'name' => $name, + 'email' => $email, + 'content' => $content + ]); + + return redirect() + ->route('page.content', ['url' => $article->url]) + ->with('success', trans('article::comments.saved')); + } +} \ No newline at end of file diff --git a/modules/Blog/Article/Http/Requests/CreateNewComment.php b/modules/Blog/Article/Http/Requests/CreateNewComment.php new file mode 100644 index 00000000..18044f43 --- /dev/null +++ b/modules/Blog/Article/Http/Requests/CreateNewComment.php @@ -0,0 +1,28 @@ + 'required']; + + if (!$user) { + $required['name'] = 'required'; + $required['email'] = 'required|email'; + } + + return $required; + } +} diff --git a/modules/Blog/Article/Http/routes.php b/modules/Blog/Article/Http/routes.php index 46c55155..0cb5d5c0 100644 --- a/modules/Blog/Article/Http/routes.php +++ b/modules/Blog/Article/Http/routes.php @@ -1,36 +1,22 @@ 'web', - 'prefix' => 'article', - 'namespace' => 'Modules\Blog\Article\Http\Controllers' - ], function () { - Route::get('/', 'CategoriesOverview@getOverview') - ->name('article.overview'); - - Route::get('/new', 'CreateNewCategory@getNew') - ->name('article.new'); - - Route::post('/new', 'CreateNewCategory@postNew') - ->name('article.postNew'); - - Route::get('/edit/{id}', 'EditCategory@getEdit') - ->name('article.edit'); - - Route::post('/edit/{id}', 'EditCategory@postEdit') - ->name('article.postEdit'); - - Route::get('/delete/{id}', 'EditCategory@delete') - ->name('article.delete'); -}); - // routes for comments Route::group([ - 'middleware' => 'web', + 'middleware' => ['web', 'auth'], 'prefix' => 'comments', - 'namespace' => 'Modules\Blog\Article\Http\Controllers' + 'namespace' => 'Modules\Blog\Article\Http\Controllers\Admin' ], function () { Route::get('/', 'CommentsOverview@getOverview') ->name('comments.overview'); +}); + +Route::group([ + 'middleware' => ['web'], + 'prefix' => 'comments', + 'namespace' => 'Modules\Blog\Article\Http\Controllers\Visitor' + ], function () { + + Route::post('/new/{id}', 'CreateNewComment@postNew') + ->name('comments.new'); }); \ No newline at end of file diff --git a/modules/Blog/Database/Migrations/2016_09_05_085644_create_comments.php b/modules/Blog/Database/Migrations/2016_09_05_085644_create_comments.php new file mode 100644 index 00000000..172a349b --- /dev/null +++ b/modules/Blog/Database/Migrations/2016_09_05_085644_create_comments.php @@ -0,0 +1,51 @@ +increments('id'); + $table->timestamps(); + $table->integer('user_id') + ->nullable(true) + ->default(null) + ->comment('When comment was inserted by logged user, save his ID here'); + $table->integer('content_id'); + $table->string('email'); + $table->string('name'); + $table->text('content'); + $table->boolean('approved'); + + $table->foreign('content_id') + ->references('id') + ->on('contents') + ->onDelete('cascade') + ->onUpdate('cascade'); + + $table->foreign('user_id') + ->references('id') + ->on('users') + ->onDelete('set null') + ->onUpdate('cascade'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('comments'); + } +} diff --git a/resources/views/visitor/cwbs/modules/Article/content.blade.php b/resources/views/visitor/cwbs/modules/Article/content.blade.php index 89afaab1..30f16ba7 100644 --- a/resources/views/visitor/cwbs/modules/Article/content.blade.php +++ b/resources/views/visitor/cwbs/modules/Article/content.blade.php @@ -6,4 +6,16 @@
{!! $page->content !!} + +
+ {!! csrf_field() !!} + + + + + + +
@endsection \ No newline at end of file