From 7e119ccd531c263c5f884336c19e10b3c2db0052 Mon Sep 17 00:00:00 2001 From: Duilio Palacios Date: Tue, 24 May 2016 11:19:23 +0100 Subject: [PATCH 1/4] Events and listeners --- app/Listeners/LogLastLogin.php | 32 ++++++++++++++++++ app/Listeners/UpdateLastLoggedAt.php | 33 +++++++++++++++++++ app/Providers/EventServiceProvider.php | 5 +++ .../2014_10_12_000000_create_users_table.php | 2 ++ 4 files changed, 72 insertions(+) create mode 100644 app/Listeners/LogLastLogin.php create mode 100644 app/Listeners/UpdateLastLoggedAt.php diff --git a/app/Listeners/LogLastLogin.php b/app/Listeners/LogLastLogin.php new file mode 100644 index 0000000..b1e023d --- /dev/null +++ b/app/Listeners/LogLastLogin.php @@ -0,0 +1,32 @@ +user->email} has logged in!"); + } +} diff --git a/app/Listeners/UpdateLastLoggedAt.php b/app/Listeners/UpdateLastLoggedAt.php new file mode 100644 index 0000000..c0943f6 --- /dev/null +++ b/app/Listeners/UpdateLastLoggedAt.php @@ -0,0 +1,33 @@ +user->last_logged_at = Carbon::now()->toDateTimeString(); + $event->user->save(['timestamps' => false]); + } +} diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index 58ce962..8835949 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -13,8 +13,13 @@ class EventServiceProvider extends ServiceProvider * @var array */ protected $listen = [ + /* 'App\Events\SomeEvent' => [ 'App\Listeners\EventListener', + ],*/ + 'Illuminate\Auth\Events\Login' => [ + 'App\Listeners\LogLastLogin', + 'App\Listeners\UpdateLastLoggedAt', ], ]; diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php index 3aba343..f9258c1 100644 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -22,7 +22,9 @@ public function up() $table->string('api_token', 60); $table->rememberToken(); + $table->timestamps(); + $table->timestamp('last_logged_at')->nullable(); }); } From d8c2bc768e31f05ec67d495b9e4a4f78c3a2e660 Mon Sep 17 00:00:00 2001 From: Duilio Palacios Date: Tue, 24 May 2016 16:15:57 +0100 Subject: [PATCH 2/4] Post module --- app/Http/Controllers/Admin/PostController.php | 11 +++++- app/Policies/PostPolicy.php | 5 +++ app/Post.php | 2 +- resources/views/admin/posts/create.blade.php | 37 +++++++++++++++++++ 4 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 resources/views/admin/posts/create.blade.php diff --git a/app/Http/Controllers/Admin/PostController.php b/app/Http/Controllers/Admin/PostController.php index 20711f4..284370c 100644 --- a/app/Http/Controllers/Admin/PostController.php +++ b/app/Http/Controllers/Admin/PostController.php @@ -32,7 +32,7 @@ public function index() */ public function create() { - return 'Create a posts [form]'; + return view('admin.posts.create'); } /** @@ -43,7 +43,14 @@ public function create() */ public function store(Request $request) { - return 'Store a post in the DB'; + $this->validate($request, [ + 'title' => 'required', + 'content' => 'required' + ]); + + Post::create($request->all()); + + return back(); } /** diff --git a/app/Policies/PostPolicy.php b/app/Policies/PostPolicy.php index 47f1b1a..18a6321 100644 --- a/app/Policies/PostPolicy.php +++ b/app/Policies/PostPolicy.php @@ -15,6 +15,11 @@ public function view() return true; } + public function create() + { + return true; + } + public function update(User $user, Post $post) { return $user->id == $post->author_id; diff --git a/app/Post.php b/app/Post.php index fc8524f..d6a74a7 100644 --- a/app/Post.php +++ b/app/Post.php @@ -6,5 +6,5 @@ class Post extends Model { - + protected $fillable = ['title', 'content']; } diff --git a/resources/views/admin/posts/create.blade.php b/resources/views/admin/posts/create.blade.php new file mode 100644 index 0000000..b548a56 --- /dev/null +++ b/resources/views/admin/posts/create.blade.php @@ -0,0 +1,37 @@ +@extends('layouts.app') + +@section('content') +
+
+
+
+
Crear post
+ + @include('partials/errors') + + @if (session('success')) +

¡Post creado!

+ @endif + +
+
+ {{ csrf_field() }} + +
+ + +
+ +
+ + +
+ + +
+
+
+
+
+
+@endsection From 9ce791376677c13a2a7bffb2a2b855c06e1d8426 Mon Sep 17 00:00:00 2001 From: Duilio Palacios Date: Wed, 25 May 2016 10:57:28 +0100 Subject: [PATCH 3/4] Notify the view a post has been created --- app/Http/Controllers/Admin/PostController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/Admin/PostController.php b/app/Http/Controllers/Admin/PostController.php index 284370c..d4790ed 100644 --- a/app/Http/Controllers/Admin/PostController.php +++ b/app/Http/Controllers/Admin/PostController.php @@ -50,7 +50,7 @@ public function store(Request $request) Post::create($request->all()); - return back(); + return back()->with('success', true); } /** From 39f2c235c089c60053c451a35c5e2ccad80f5031 Mon Sep 17 00:00:00 2001 From: Duilio Palacios Date: Wed, 25 May 2016 15:33:25 +0100 Subject: [PATCH 4/4] Record Eloquent activities --- app/Activity.php | 25 +++++++++++++ app/Http/Controllers/Admin/PostController.php | 2 +- app/Post.php | 18 +++++++++- app/Providers/EventServiceProvider.php | 5 ++- app/User.php | 5 +++ ...6_05_25_113800_create_activities_table.php | 36 +++++++++++++++++++ 6 files changed, 88 insertions(+), 3 deletions(-) create mode 100644 app/Activity.php create mode 100644 database/migrations/2016_05_25_113800_create_activities_table.php diff --git a/app/Activity.php b/app/Activity.php new file mode 100644 index 0000000..fc648f9 --- /dev/null +++ b/app/Activity.php @@ -0,0 +1,25 @@ +guest()) { + return null; + } + + $activity = new Activity(); + $activity->action = $action; + + if ($model) { + $activity->model_class = get_class($model); + $activity->model_id = $model->id; + } + + auth()->user()->activities()->save($activity); + } +} diff --git a/app/Http/Controllers/Admin/PostController.php b/app/Http/Controllers/Admin/PostController.php index d4790ed..93b94e3 100644 --- a/app/Http/Controllers/Admin/PostController.php +++ b/app/Http/Controllers/Admin/PostController.php @@ -48,7 +48,7 @@ public function store(Request $request) 'content' => 'required' ]); - Post::create($request->all()); + Post::submit($request->all()); return back()->with('success', true); } diff --git a/app/Post.php b/app/Post.php index d6a74a7..936f80e 100644 --- a/app/Post.php +++ b/app/Post.php @@ -3,8 +3,24 @@ namespace App; use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\Str; class Post extends Model { protected $fillable = ['title', 'content']; -} + + public static function submit(array $data) + { + $post = new Post($data); + + if (empty($post->slug)) { + $post->slug = Str::slug($post->title); + } + + $post->author_id = auth()->user()->id; + + $post->save(); + + return $post; + } +} \ No newline at end of file diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index 8835949..7ee0e61 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -2,6 +2,7 @@ namespace App\Providers; +use App\Activity; use Illuminate\Contracts\Events\Dispatcher as DispatcherContract; use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; @@ -33,6 +34,8 @@ public function boot(DispatcherContract $events) { parent::boot($events); - // + $events->listen('eloquent.created: *', function ($model) { + Activity::record('create', $model); + }); } } diff --git a/app/User.php b/app/User.php index a0a44fb..8b7c4ad 100644 --- a/app/User.php +++ b/app/User.php @@ -24,6 +24,11 @@ class User extends Authenticatable 'password', 'remember_token', 'api_token' ]; + public function activities() + { + return $this->hasMany(Activity::class, 'author_id'); + } + public function getNameAttribute() { return $this->first_name . ' ' . $this->last_name; diff --git a/database/migrations/2016_05_25_113800_create_activities_table.php b/database/migrations/2016_05_25_113800_create_activities_table.php new file mode 100644 index 0000000..7ad001e --- /dev/null +++ b/database/migrations/2016_05_25_113800_create_activities_table.php @@ -0,0 +1,36 @@ +increments('id'); + + $table->string('action'); + $table->string('model_class')->nullable(); + $table->string('model_id')->nullable(); + $table->integer('author_id')->unsigned()->index(); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('activities'); + } +}