From ee55715093eae2041dbec427fc0ab010bd72d893 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Fri, 29 Jan 2016 01:57:12 +0100 Subject: [PATCH] FEATURE #1374: add logging for static pages --- app/Models/ActionLogType.php | 1 + app/Models/Content.php | 24 +++--- .../Events/CreateNewStaticPage.php | 25 +++++++ .../StaticPages/Events/DeleteStaticPage.php | 27 +++++++ modules/StaticPages/Events/EditStaticPage.php | 28 +++++++ .../Events/MakeDraftFromStaticPage.php | 28 +++++++ .../StaticPages/Events/PublishStaticPage.php | 29 +++++++ .../Controllers/Admin/CreateNewStaticPage.php | 3 + .../Http/Controllers/Admin/EditStaticPage.php | 75 +++++++++++++------ .../Listeners/LogCreateNewStaticPage.php | 27 +++++++ .../Listeners/LogDeleteStaticPage.php | 30 ++++++++ .../Listeners/LogEditStaticPage.php | 30 ++++++++ .../Listeners/LogMakeDraftFromStaticPage.php | 30 ++++++++ .../Listeners/LogPublishStaticPage.php | 30 ++++++++ .../Providers/EventServiceProvider.php | 40 ++++++++++ .../Providers/StaticPagesServiceProvider.php | 32 +++++++- 16 files changed, 424 insertions(+), 35 deletions(-) create mode 100644 modules/StaticPages/Events/CreateNewStaticPage.php create mode 100644 modules/StaticPages/Events/DeleteStaticPage.php create mode 100644 modules/StaticPages/Events/EditStaticPage.php create mode 100644 modules/StaticPages/Events/MakeDraftFromStaticPage.php create mode 100644 modules/StaticPages/Events/PublishStaticPage.php create mode 100644 modules/StaticPages/Listeners/LogCreateNewStaticPage.php create mode 100644 modules/StaticPages/Listeners/LogDeleteStaticPage.php create mode 100644 modules/StaticPages/Listeners/LogEditStaticPage.php create mode 100644 modules/StaticPages/Listeners/LogMakeDraftFromStaticPage.php create mode 100644 modules/StaticPages/Listeners/LogPublishStaticPage.php create mode 100644 modules/StaticPages/Providers/EventServiceProvider.php diff --git a/app/Models/ActionLogType.php b/app/Models/ActionLogType.php index 420e4d70..a7a0570f 100644 --- a/app/Models/ActionLogType.php +++ b/app/Models/ActionLogType.php @@ -14,6 +14,7 @@ class ActionLogType extends Model protected $fillable = [ 'name', + 'string_id', 'value' ]; diff --git a/app/Models/Content.php b/app/Models/Content.php index c4224f31..b86249cc 100644 --- a/app/Models/Content.php +++ b/app/Models/Content.php @@ -2,7 +2,6 @@ namespace App\Models; -use App\Http\Requests\Request; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Facades\DB; @@ -59,21 +58,26 @@ class Content extends Model /** * Updates current model with information about changed columns * - * @param array $fields - * @param Request $request + * @param array $fields + * @param array $request * * @return int number of changed columns */ - public function updateWithHistory(array $fields, Request $request) + public function updateWithHistory(array $fields, array $request) { $editBatch = uniqid(); $changed = 0; foreach ($fields as $fieldDB => $fieldRequest) { - // remove any whitespaces around real content - $request->$fieldRequest = trim($request->$fieldRequest); + // ignore non-existing fields + if (!isset($this->$fieldDB) || !isset($request[$fieldRequest])) { + continue; + } - if ($this->$fieldDB != $request->$fieldRequest) { + // remove any whitespaces around real content + $request[$fieldRequest] = trim($request[$fieldRequest]); + + if ($this->$fieldDB != $request[$fieldRequest]) { // setup history object $history = [ @@ -82,14 +86,14 @@ class Content extends Model 'edit_batch' => $editBatch, 'column' => $fieldRequest, 'old_value' => $this->$fieldDB, - 'new_value' => $request->$fieldRequest + 'new_value' => $request[$fieldRequest] ]; // save history ContentHistory::create($history); // save change into database - $this->$fieldDB = $request->$fieldRequest; + $this->$fieldDB = $request[$fieldRequest]; $changed++; } @@ -97,7 +101,7 @@ class Content extends Model $this->save(); - return $changed; + return [$editBatch, $changed]; } /** diff --git a/modules/StaticPages/Events/CreateNewStaticPage.php b/modules/StaticPages/Events/CreateNewStaticPage.php new file mode 100644 index 00000000..72b2ec7f --- /dev/null +++ b/modules/StaticPages/Events/CreateNewStaticPage.php @@ -0,0 +1,25 @@ +page = $page; + } +} \ No newline at end of file diff --git a/modules/StaticPages/Events/DeleteStaticPage.php b/modules/StaticPages/Events/DeleteStaticPage.php new file mode 100644 index 00000000..4df44630 --- /dev/null +++ b/modules/StaticPages/Events/DeleteStaticPage.php @@ -0,0 +1,27 @@ +page = $page; + $this->revision = $revision; + } +} \ No newline at end of file diff --git a/modules/StaticPages/Events/EditStaticPage.php b/modules/StaticPages/Events/EditStaticPage.php new file mode 100644 index 00000000..ebfc4f29 --- /dev/null +++ b/modules/StaticPages/Events/EditStaticPage.php @@ -0,0 +1,28 @@ +page = $page; + $this->revision = $revision; + } +} \ No newline at end of file diff --git a/modules/StaticPages/Events/MakeDraftFromStaticPage.php b/modules/StaticPages/Events/MakeDraftFromStaticPage.php new file mode 100644 index 00000000..fabed846 --- /dev/null +++ b/modules/StaticPages/Events/MakeDraftFromStaticPage.php @@ -0,0 +1,28 @@ +page = $page; + $this->revision = $revision; + } +} \ No newline at end of file diff --git a/modules/StaticPages/Events/PublishStaticPage.php b/modules/StaticPages/Events/PublishStaticPage.php new file mode 100644 index 00000000..8e1b6109 --- /dev/null +++ b/modules/StaticPages/Events/PublishStaticPage.php @@ -0,0 +1,29 @@ +page = $page; + $this->revision = $revision; + } +} \ No newline at end of file diff --git a/modules/StaticPages/Http/Controllers/Admin/CreateNewStaticPage.php b/modules/StaticPages/Http/Controllers/Admin/CreateNewStaticPage.php index c0ba70d7..75a6fb05 100644 --- a/modules/StaticPages/Http/Controllers/Admin/CreateNewStaticPage.php +++ b/modules/StaticPages/Http/Controllers/Admin/CreateNewStaticPage.php @@ -3,6 +3,7 @@ namespace Modules\StaticPages\Http\Controllers\Admin; use App\Enumerations\ContentStatuses; use App\Models\Content; +use Illuminate\Support\Facades\Event; use Modules\StaticPages\Http\Requests\CreateNewStaticPageRequest; class CreateNewStaticPage extends Controller @@ -50,6 +51,8 @@ class CreateNewStaticPage extends Controller $page->save(); + Event::fire(new \Modules\StaticPages\Events\CreateNewStaticPage($page)); + return redirect() ->route('staticpage.new') ->with('success', trans('staticpages::admin.successfullyCreated')); diff --git a/modules/StaticPages/Http/Controllers/Admin/EditStaticPage.php b/modules/StaticPages/Http/Controllers/Admin/EditStaticPage.php index 826eea47..412be1dd 100644 --- a/modules/StaticPages/Http/Controllers/Admin/EditStaticPage.php +++ b/modules/StaticPages/Http/Controllers/Admin/EditStaticPage.php @@ -3,6 +3,11 @@ namespace Modules\StaticPages\Http\Controllers\Admin; use App\Enumerations\ContentStatuses; use App\Models\Content; +use Illuminate\Support\Facades\Event; +use Modules\StaticPages\Events\DeleteStaticPage; +use Modules\StaticPages\Events\EditStaticPage as EditStaticPageEvent; +use Modules\StaticPages\Events\MakeDraftFromStaticPage; +use Modules\StaticPages\Events\PublishStaticPage; use Modules\StaticPages\Http\Requests\EditStaticPageRequest; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; @@ -65,7 +70,7 @@ class EditStaticPage extends Controller ]; // save new values with history - $changedColumns = $page->updateWithHistory($fields, $request); + list($revision, $changedColumns) = $page->updateWithHistory($fields, $request->all()); // was something changed? if ($changedColumns == 0) { @@ -74,6 +79,9 @@ class EditStaticPage extends Controller ->with('error', trans('staticpages::admin.nothingToEdit')); } + // fire event with + Event::fire(new EditStaticPageEvent($page, $revision)); + // something was changed, inform user return redirect() ->route('staticpage.edit', ['id' => $page->id]) @@ -108,22 +116,34 @@ class EditStaticPage extends Controller // try to find this page $page = Content::where('module_handler', config('staticpages.handler')) ->findOrFail($id); - - // page found, save status - $page->status = $status; - - $page->save(); - - // redirect back to overview with info for user - return redirect() - ->route('staticpage.overview') - ->with('success', trans('staticpages::admin.statusChanged')); } catch (NotFoundHttpException $e) { // page not found return redirect() ->route('staticpage.overview') ->with('error', trans('staticpages::admin.invalidPage')); } + + // try to change the page + list ($revision, $changedColumns) = $page->updateWithHistory(['status' => 'status'], ['status' => $status]); + + // was something changed? + if ($changedColumns == 0) { + return redirect() + ->route('staticpage.edit', ['id' => $page->id]) + ->with('error', trans('staticpages::admin.nothingToEdit')); + } + + // fire events + if ($status != Content::STATUS_DRAFT) { + Event::fire(new PublishStaticPage($page, $revision)); + } else { + Event::fire(new MakeDraftFromStaticPage($page, $revision)); + } + + // redirect back to overview with info for user + return redirect() + ->route('staticpage.overview') + ->with('success', trans('staticpages::admin.statusChanged')); } /** @@ -139,24 +159,31 @@ class EditStaticPage extends Controller // try to find this page $page = Content::where('module_handler', config('staticpages.handler')) ->findOrFail($id); - - // page found, save status - $page->status = Content::STATUS_DELETED; - - $page->save(); - - // redirect back to overview with info for user - return redirect() - ->route('staticpage.overview') - ->with('success', trans('staticpages::admin.pageDeleted', [ - 'name' => $page->title, - 'url' => $page->url - ])); } catch (NotFoundHttpException $e) { // page not found return redirect() ->route('staticpage.overview') ->with('error', trans('staticpages::admin.invalidPage')); } + + list ($revision, $changedColumns) = $page->updateWithHistory(['status' => 'status'], ['status' => Content::STATUS_DELETED]); + + // was something changed? + if ($changedColumns == 0) { + return redirect() + ->route('staticpage.edit', ['id' => $page->id]) + ->with('error', trans('staticpages::admin.nothingToEdit')); + } + + // trigger delete event + Event::fire(new DeleteStaticPage($page, $revision)); + + // redirect back to overview with info for user + return redirect() + ->route('staticpage.overview') + ->with('success', trans('staticpages::admin.pageDeleted', [ + 'name' => $page->title, + 'url' => $page->url + ])); } } \ No newline at end of file diff --git a/modules/StaticPages/Listeners/LogCreateNewStaticPage.php b/modules/StaticPages/Listeners/LogCreateNewStaticPage.php new file mode 100644 index 00000000..f85c7a1f --- /dev/null +++ b/modules/StaticPages/Listeners/LogCreateNewStaticPage.php @@ -0,0 +1,27 @@ + $event->page->id, + 'url' => $event->page->url, + 'title' => $event->page->title + ]; + + $this->saveLog($parameters); + } +} diff --git a/modules/StaticPages/Listeners/LogDeleteStaticPage.php b/modules/StaticPages/Listeners/LogDeleteStaticPage.php new file mode 100644 index 00000000..ee2b09ec --- /dev/null +++ b/modules/StaticPages/Listeners/LogDeleteStaticPage.php @@ -0,0 +1,30 @@ + $event->page->id, + 'url' => $event->page->url, + 'title' => $event->page->title, + 'revision' => $event->revision + ]; + + $this->saveLog($parameters); + } +} diff --git a/modules/StaticPages/Listeners/LogEditStaticPage.php b/modules/StaticPages/Listeners/LogEditStaticPage.php new file mode 100644 index 00000000..d70a3d37 --- /dev/null +++ b/modules/StaticPages/Listeners/LogEditStaticPage.php @@ -0,0 +1,30 @@ + $event->page->id, + 'url' => $event->page->url, + 'title' => $event->page->title, + 'revision' => $event->revision + ]; + + $this->saveLog($parameters); + } +} diff --git a/modules/StaticPages/Listeners/LogMakeDraftFromStaticPage.php b/modules/StaticPages/Listeners/LogMakeDraftFromStaticPage.php new file mode 100644 index 00000000..7b6eeb4c --- /dev/null +++ b/modules/StaticPages/Listeners/LogMakeDraftFromStaticPage.php @@ -0,0 +1,30 @@ + $event->page->id, + 'url' => $event->page->url, + 'title' => $event->page->title, + 'revision' => $event->revision + ]; + + $this->saveLog($parameters); + } +} diff --git a/modules/StaticPages/Listeners/LogPublishStaticPage.php b/modules/StaticPages/Listeners/LogPublishStaticPage.php new file mode 100644 index 00000000..2afd9e55 --- /dev/null +++ b/modules/StaticPages/Listeners/LogPublishStaticPage.php @@ -0,0 +1,30 @@ + $event->page->id, + 'url' => $event->page->url, + 'title' => $event->page->title, + 'revision' => $event->revision + ]; + + $this->saveLog($parameters); + } +} diff --git a/modules/StaticPages/Providers/EventServiceProvider.php b/modules/StaticPages/Providers/EventServiceProvider.php new file mode 100644 index 00000000..c97fbec5 --- /dev/null +++ b/modules/StaticPages/Providers/EventServiceProvider.php @@ -0,0 +1,40 @@ + [ + 'Modules\StaticPages\Listeners\LogCreateNewStaticPage' + ], + 'Modules\StaticPages\Events\EditStaticPage' => [ + 'Modules\StaticPages\Listeners\LogEditStaticPage' + ], + 'Modules\StaticPages\Events\PublishStaticPage' => [ + 'Modules\StaticPages\Listeners\LogPublishStaticPage' + ], + 'Modules\StaticPages\Events\DeleteStaticPage' => [ + 'Modules\StaticPages\Listeners\LogDeleteStaticPage' + ], + ]; + + /** + * Register any other events for your application. + * + * @param \Illuminate\Contracts\Events\Dispatcher $events + * @return void + */ + public function boot(DispatcherContract $events) + { + parent::boot($events); + } +} diff --git a/modules/StaticPages/Providers/StaticPagesServiceProvider.php b/modules/StaticPages/Providers/StaticPagesServiceProvider.php index 7429becf..403c222b 100644 --- a/modules/StaticPages/Providers/StaticPagesServiceProvider.php +++ b/modules/StaticPages/Providers/StaticPagesServiceProvider.php @@ -1,6 +1,7 @@ app->register('Modules\StaticPages\Providers\EventServiceProvider'); } /** @@ -58,6 +60,34 @@ class StaticPagesServiceProvider extends ServiceProvider 'name' => 'staticpages::module.name', 'description' => 'staticpages::module.description' ]); + + // insert action log types into database + ActionLogType::create([ + 'string_id' => 'staticpages::createNew', + 'name' => 'staticpages::log.nameCreateNew', + 'value' => 'staticpages::log.nameCreateNew' + ]); + ActionLogType::create([ + 'string_id' => 'staticpages::edit', + 'name' => 'staticpages::log.nameEdit', + 'value' => 'staticpages::log.edit' + ]); + ActionLogType::create([ + 'string_id' => 'staticpages::delete', + 'name' => 'staticpages::log.nameDelete', + 'value' => 'staticpages::log.delete' + ]); + ActionLogType::create([ + 'string_id' => 'staticpages::makeDraft', + 'name' => 'staticpages::log.nameMakeDraft', + 'value' => 'staticpages::log.makeDraft' + ]); + + ActionLogType::create([ + 'string_id' => 'staticpages::publish', + 'name' => 'staticpages::log.namePublish', + 'value' => 'staticpages::log.publish' + ]); } }