diff --git a/app/Listeners/Logger.php b/app/Listeners/Logger.php index e1b75628..0bb3df89 100644 --- a/app/Listeners/Logger.php +++ b/app/Listeners/Logger.php @@ -3,9 +3,9 @@ namespace App\Listeners; use App\Enumerations\ActionLogTypesForLogger; -use App\Events\Event; use App\Models\ActionLog; use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Request; abstract class Logger { @@ -43,6 +43,8 @@ abstract class Logger $data = [ 'user_id' => $userId, 'type_id' => $typeId, + 'ip' => request()->ip(), + 'user_agent' => request()->header('User-agent'), 'parameters' => json_encode((array)$parameters) ]; diff --git a/app/Models/ActionLog.php b/app/Models/ActionLog.php index 062879e2..4a39ed56 100644 --- a/app/Models/ActionLog.php +++ b/app/Models/ActionLog.php @@ -15,6 +15,8 @@ class ActionLog extends Model protected $fillable = [ 'type_id', 'user_id', + 'ip', + 'user_agent', 'parameters' ]; protected $guarded = []; diff --git a/database/migrations/2016_04_02_233316_AddIpAndUserAgentIntoLog.php b/database/migrations/2016_04_02_233316_AddIpAndUserAgentIntoLog.php new file mode 100644 index 00000000..c7c69601 --- /dev/null +++ b/database/migrations/2016_04_02_233316_AddIpAndUserAgentIntoLog.php @@ -0,0 +1,38 @@ +string('ip') + ->after('user_id') + ->comment('User\'s IP Address'); + $table->mediumText('user_agent') + ->after('ip') + ->comment('Browser string of client, who performed some action.'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('action_log', function (Blueprint $table) { + $table->dropColumn('ip'); + $table->dropColumn('user_agent'); + }); + } +} diff --git a/database/seeds/SeedActionLogTypes.php b/database/seeds/SeedActionLogTypes.php index 819ff8e3..2dce03b3 100644 --- a/database/seeds/SeedActionLogTypes.php +++ b/database/seeds/SeedActionLogTypes.php @@ -27,15 +27,27 @@ class SeedActionLogTypes extends Seeder 'removeWidgetFromArea', 'editWidget', 'editWidgetArea', + 'invalidEditContentAttempt', + 'createNewContent', + 'deleteContent', + 'publishContent', + 'draftFromContent', + 'editContent', + 'setHomepage', ]; foreach ($types as $type) { - \DB::table('action_log_types') - ->insert([ - 'string_id' => $type, - 'name' => 'admin/actionLog.name' . ucfirst($type), - 'value' => 'admin/actionLog.' . $type - ]); + try { + \DB::table('action_log_types') + ->insert([ + 'string_id' => $type, + 'name' => 'admin/actionLog.name' . ucfirst($type), + 'value' => 'admin/actionLog.' . $type + ]); + } catch (Exception $e) { + // ignore exception + echo $type . ' already seeded' . "\n"; + } } } } diff --git a/resources/lang/en/admin/actionLog.php b/resources/lang/en/admin/actionLog.php index 6fa344ec..58b02a8b 100644 --- a/resources/lang/en/admin/actionLog.php +++ b/resources/lang/en/admin/actionLog.php @@ -1,33 +1,50 @@ 'List of all actions', - 'login' => 'Logged in', - 'logout' => 'Logged out', - 'userEdit' => 'Updated user :name (:email)', - 'newCustomField' => 'Added new custom field with ID #:id and name ":name"', - 'editCustomField' => 'Edited custom field with ID #:id and name ":name"', - 'deleteCustomField' => 'Deleted custom field ID #:id and name ":name"', - 'changeSettings' => 'Changes settings', - 'assignWidget' => 'Assigned widget :widgetName (#:widgetId) into widget area :widgetAreaName (#:widgetAreaId)', - 'deleteWidgetArea' => 'Deleted widget area :name', - 'newWidgetArea' => 'Created new widget area :name (#:id) with description ":description"', - 'newWidget' => 'Created new widget of type :type with :name (#:id) and description ":description".', - 'removeWidgetFromArea' => 'Removed widget :widgetName (#:widgetId) from widget area :widgetAreaName (#:widgetAreaId)', - 'editWidget' => 'Edited widget :name (#:id)', - 'editWidgetArea' => 'Edited widget area :name (#:id) with description ":description"', + 'ip' => 'IP address', + 'userAgent' => 'Browser identification', + 'overview' => 'List of all actions', + 'login' => 'Logged in', + 'logout' => 'Logged out', + 'userEdit' => 'Updated user :name (:email)', + 'newCustomField' => 'Added new custom field with ID #:id and name ":name"', + 'editCustomField' => 'Edited custom field with ID #:id and name ":name"', + 'deleteCustomField' => 'Deleted custom field ID #:id and name ":name"', + 'changeSettings' => 'Changes settings', + 'assignWidget' => 'Assigned widget :widgetName (#:widgetId) into widget area :widgetAreaName (#:widgetAreaId)', + 'deleteWidgetArea' => 'Deleted widget area :name', + 'newWidgetArea' => 'Created new widget area :name (#:id) with description ":description"', + 'newWidget' => 'Created new widget of type :type with :name (#:id) and description ":description".', + 'removeWidgetFromArea' => 'Removed widget :widgetName (#:widgetId) from widget area :widgetAreaName (#:widgetAreaId)', + 'editWidget' => 'Edited widget :name (#:id)', + 'editWidgetArea' => 'Edited widget area :name (#:id) with description ":description"', + 'invalidEditContentAttempt' => 'Tried to edit content with ID :contentId', + 'createNewContent' => 'Created new content page. Title :title, url :url, ID: #:id', + 'deleteContent' => 'Deleted page ":title", url :url, ID #:id. This change is recorded in revision :revision.', + 'publishContent' => 'Published page ":title" (url :url, ID #:id). Change revision: :revision.', + 'draftFromContent' => 'Made draft from page ":title" (url :url, ID #:id). Change revision: :revision.', + 'editContent' => 'Edited page - new title is ":title", url :url and ID #:id. Change revision: :revision.', + 'setHomepage' => 'New homepage: page :title, url: :url and ID #:id. Change revision: :revision.', + // list of names - 'nameLogin' => 'Login', - 'nameLogout' => 'Log out', - 'nameUserEdit' => 'Edit user', - 'nameNewCustomField' => 'New custom field', - 'nameEditCustomField' => 'Edit custom field', - 'nameDeleteCustomField' => 'Delete custom field', - 'nameChangeSettings' => 'Change settings', - 'nameAssignWidget' => 'Assign widget', - 'nameDeleteWidgetArea' => 'Delete widget area', - 'nameNewWidgetArea' => 'Create widget area', - 'nameNewWidget' => 'New widget', - 'nameRemoveWidgetFromArea' => 'Remove widget from area', - 'nameEditWidget' => 'Edit widget', - 'nameEditWidgetArea' => 'Edit widget area', + 'nameLogin' => 'Login', + 'nameLogout' => 'Log out', + 'nameUserEdit' => 'Edit user', + 'nameNewCustomField' => 'New custom field', + 'nameEditCustomField' => 'Edit custom field', + 'nameDeleteCustomField' => 'Delete custom field', + 'nameChangeSettings' => 'Change settings', + 'nameAssignWidget' => 'Assign widget', + 'nameDeleteWidgetArea' => 'Delete widget area', + 'nameNewWidgetArea' => 'Create widget area', + 'nameNewWidget' => 'New widget', + 'nameRemoveWidgetFromArea' => 'Remove widget from area', + 'nameEditWidget' => 'Edit widget', + 'nameEditWidgetArea' => 'Edit widget area', + 'nameInvalidEditContentAttempt' => 'Tried to edit invalid page', + 'nameCreateNewContent' => 'Created new page', + 'nameDeleteContent' => 'Deleted page', + 'namePublishContent' => 'Published page', + 'nameDraftFromContent' => 'Made draft from published page', + 'nameEditContent' => 'Edited content', + 'nameSetHomepage' => 'Set homepage', ]; \ No newline at end of file diff --git a/resources/views/admin/actionLog/overview.blade.php b/resources/views/admin/actionLog/overview.blade.php index f76898fe..8e34ff66 100644 --- a/resources/views/admin/actionLog/overview.blade.php +++ b/resources/views/admin/actionLog/overview.blade.php @@ -21,13 +21,25 @@
- {{$action->email}} + {{$action->email}}

{{$action->user_name}}
{{date('G:i', strtotime($action->created_at))}}

- {{$action->value}} +
+ {{$action->value}} +
+
+
+

+ @lang('admin/actionLog.ip'): {{$action->ip}}, +
+ @lang('admin/actionLog.userAgent'): {{$action->user_agent}} +

+ +