FEATURE: add events to comments

This commit is contained in:
Michal Kváček
2016-09-23 00:41:38 +02:00
parent 0d8e927b08
commit fbb59277b9
12 changed files with 218 additions and 4 deletions
@@ -0,0 +1,20 @@
<?php
namespace Modules\Blog\Article\Events;
use App\Events\Event;
use Illuminate\Queue\SerializesModels;
use Modules\Blog\Article\Entities\Comment;
class ApprovedComment extends Event
{
use SerializesModels;
/**
* @var Comment
*/
public $comment;
public function __construct(Comment $comment)
{
$this->comment = $comment;
}
}
@@ -0,0 +1,20 @@
<?php
namespace Modules\Blog\Article\Events;
use App\Events\Event;
use Illuminate\Queue\SerializesModels;
use Modules\Blog\Article\Entities\Comment;
class CreatedComment extends Event
{
use SerializesModels;
/**
* @var Comment
*/
public $comment;
public function __construct(Comment $comment)
{
$this->comment = $comment;
}
}
@@ -0,0 +1,20 @@
<?php
namespace Modules\Blog\Article\Events;
use App\Events\Event;
use Illuminate\Queue\SerializesModels;
use Modules\Blog\Article\Entities\Comment;
class DeletedComment extends Event
{
use SerializesModels;
/**
* @var Comment
*/
public $comment;
public function __construct(Comment $comment)
{
$this->comment = $comment;
}
}
@@ -8,6 +8,7 @@ use App\Http\Controllers\Controller;
use App\Http\Requests\Request;
use App\Models\Content;
use App\Models\User;
use Illuminate\Support\Facades\Artisan;
use Modules\Blog\Article\Entities\Comment;
class Article extends Handler
@@ -135,5 +136,7 @@ class Article extends Handler
*/
public static function install()
{
// seed action log types
// Artisan::call('')
}
}
@@ -1,7 +1,10 @@
<?php
namespace Modules\Blog\Article\Http\Controllers\Admin;
use Illuminate\Support\Facades\Event;
use Modules\Blog\Article\Entities\Comment;
use Modules\Blog\Article\Events\ApprovedComment;
use Modules\Blog\Article\Events\DeletedComment;
use Pingpong\Modules\Routing\Controller;
class EditComment extends Controller
@@ -12,7 +15,7 @@ class EditComment extends Controller
$comment->approved = 1;
$comment->save();
// Event::fire(ApprovedComment);
Event::fire(new ApprovedComment($comment));
return redirect()
->back()
@@ -22,9 +25,10 @@ class EditComment extends Controller
public function delete($id)
{
$comment = Comment::findOrFail($id);
$comment->delete();
// Event::fire(DeletedComment);
Event::fire(new DeletedComment($comment));
$comment->delete();
return redirect()
->back()
@@ -3,7 +3,9 @@ namespace Modules\Blog\Article\Http\Controllers\Visitor;
use App\Models\Content;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Event;
use Modules\Blog\Article\Entities\Comment;
use Modules\Blog\Article\Events\CreatedComment;
use Modules\Blog\Article\Handlers\Article;
use Pingpong\Modules\Routing\Controller;
@@ -33,7 +35,7 @@ class CreateNewComment extends Controller
$email = $request->email;
}
Comment::create([
$comment = Comment::create([
'user_id' => $user ? $user->id : null,
'content_id' => $article->id,
'name' => $name,
@@ -41,6 +43,9 @@ class CreateNewComment extends Controller
'content' => $content
]);
// fire event about new comment
Event::fire(new CreatedComment($comment));
return redirect()
->route('page.content', ['url' => $article->url])
->with('success', trans('article::comments.saved'));
@@ -0,0 +1,35 @@
<?php
namespace Modules\Blog\Article\Listeners;
use App\Listeners\Logger;
use Modules\Blog\Article\Events\ApprovedComment;
class LogCommentApproval extends Logger
{
/**
* Handle the event.
*
* @param ApprovedComment $event
*/
public function handle(ApprovedComment $event)
{
$parameters = [
'author' => $event->comment->name,
'email' => $event->comment->email,
'content' => $event->comment->content
];
$this->saveLog($parameters);
}
/**
* Getter for action name. Used only internally
*
* @return mixed
*/
protected function getName()
{
return 'commentApproved';
}
}
@@ -0,0 +1,36 @@
<?php
namespace Modules\Blog\Article\Listeners;
use App\Listeners\Logger;
use Modules\Blog\Article\Events\ApprovedComment;
use Modules\Blog\Article\Events\DeletedComment;
class LogDeletedComment extends Logger
{
/**
* Handle the event.
*
* @param DeletedComment $event
*/
public function handle(DeletedComment $event)
{
$parameters = [
'author' => $event->comment->name,
'email' => $event->comment->email,
'content' => $event->comment->content
];
$this->saveLog($parameters);
}
/**
* Getter for action name. Used only internally
*
* @return mixed
*/
protected function getName()
{
return 'commentDeleted';
}
}
@@ -0,0 +1,39 @@
<?php
namespace Modules\Blog\Article\Listeners;
use App\Listeners\Logger;
use Modules\Blog\Article\Events\CreatedComment;
class LogNewComment extends Logger
{
/**
* Handle the event.
*
* @param CreatedComment $event
*/
public function handle(CreatedComment $event)
{
// log only logged-in users
if (!$event->comment->user_id)
return;
$parameters = [
'author' => $event->comment->name,
'email' => $event->comment->email,
'content' => $event->comment->content
];
$this->saveLog($parameters);
}
/**
* Getter for action name. Used only internally
*
* @return mixed
*/
protected function getName()
{
return 'commentCreated';
}
}
@@ -0,0 +1,30 @@
<?php
namespace Modules\Blog\Article\Providers;
use Illuminate\Contracts\Events\Dispatcher as DispatcherContract;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
use Modules\Blog\Article\Events\ApprovedComment;
use Modules\Blog\Article\Events\CreatedComment;
use Modules\Blog\Article\Events\DeletedComment;
use Modules\Blog\Article\Listeners\LogCommentApproval;
use Modules\Blog\Article\Listeners\LogDeletedComment;
class ArticleEventServiceProvider extends ServiceProvider
{
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
ApprovedComment::class => [LogCommentApproval::class],
DeletedComment::class => [LogDeletedComment::class],
CreatedComment::class => [LogNewComment::class],
];
public function boot(DispatcherContract $events)
{
parent::boot($events); // TODO: Change the autogenerated stub
}
}
@@ -25,6 +25,8 @@ class ArticleServiceProvider extends ServiceProvider {
$this->registerTranslations();
$this->registerConfig();
$this->registerViews();
$this->app->register(ArticleEventServiceProvider::class);
}
/**