added audit trails

This commit is contained in:
Jagad R R
2025-01-01 17:14:46 +07:00
parent 9b1ca9f58d
commit d4bbe3a602
20 changed files with 287 additions and 34 deletions
+32
View File
@@ -0,0 +1,32 @@
<?php
namespace App\Helpers;
use Illuminate\Support\Facades\Auth;
use App\Models\AuditTrail;
class AuditTrailHelper
{
public static function AddAuditTrail($activity, $action)
{
$audit = new AuditTrail();
$audit->user_id = Auth::user()->id;
$audit->ip_address = request()->ip();
$audit->activity = $activity;
$audit->action = $action;
$audit->user_agent = request()->userAgent();
$audit->browser = substr($audit->user_agent, 0, strpos($audit->user_agent, '/'));
$audit->save();
}
public static function AuthAttempt($activity, $action)
{
$audit = new AuditTrail();
$audit->ip_address = request()->ip();
$audit->activity = $activity;
$audit->action = $action;
$audit->user_agent = request()->userAgent();
$audit->browser = substr($audit->user_agent, 0, strpos($audit->user_agent, '/'));
$audit->save();
}
}
-2
View File
@@ -6,8 +6,6 @@ use Illuminate\Support\Facades\Auth;
class AuthenticationHelper
{
public static function CurrentLogin()
{
$auth = Auth::user()->username;
@@ -19,6 +19,7 @@ use App\Models\FormOthers;
use App\Models\FormMeetingSeminar;
use App\Models\UserHasCabang;
use App\Models\Cabang;
use App\Helpers\AuditTrailHelper;
class AdminsController extends Controller
{
@@ -92,6 +93,7 @@ class AdminsController extends Controller
// return redirect()->route('admin.admins.index');
// }
AuditTrailHelper::AddAuditTrail('Insert', 'Added New User (' . $request->email . ') to the User Table');
session()->flash('success', 'Admin has been created.');
return redirect()->back();
}
@@ -141,6 +143,7 @@ class AdminsController extends Controller
$userHasCabang ? $userHasCabang->update(['cabang_id' => $request->cabang_id]) : UserHasCabang::create(['user_id' => $admin->id, 'cabang_id' => $request->cabang_id]);
}
AuditTrailHelper::AddAuditTrail('Update', 'Update User Data (' . $request->email . ') in the User Table');
session()->flash('success', 'Admin has been updated.');
return redirect()->back();
}
@@ -179,7 +182,10 @@ class AdminsController extends Controller
$this->checkAuthorization(auth()->user(), ['admin.delete']);
$admin = Admin::findOrFail($id);
AuditTrailHelper::AddAuditTrail('Delete', 'Deleted User (' . $admin->email . ') from the User Table');
$admin->delete();
session()->flash('success', 'Admin has been deleted.');
return redirect()->back();
}
@@ -0,0 +1,30 @@
<?php
declare(strict_types=1);
namespace App\Http\Controllers\Backend;
use App\Http\Controllers\Controller;
use App\Models\AuditTrail;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
class AuditTrailController extends Controller
{
public function index()
{
$pageInfo = [
'title' => 'Audit Trails',
'sub_title' => 'List of Audit Trails System',
'path' => url()->current()
];
return view(
'backend.pages.audit_trail.index',
[
'data' => AuditTrail::orderBy('id', 'desc')->get(),
'pageInfo' => $pageInfo,
]
);
}
}
@@ -9,6 +9,7 @@ use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Session;
use App\Helpers\AuditTrailHelper;
class LoginController extends Controller
{
@@ -78,28 +79,36 @@ class LoginController extends Controller
if (Auth::guard('admin')->attempt(['email' => $request->email, 'password' => $request->password], $request->remember)) {
session()->flash('success', 'Successully Logged in !');
Session::put('current_guard', 'admin');
AuditTrailHelper::AuthAttempt('Login', 'User (' . $request->email . ') Logged in to the System');
return redirect()->route('admin.dashboard');
} else if (Auth::guard('admin')->attempt(['username' => $request->email, 'password' => $request->password], $request->remember)) {
session()->flash('success', 'Successully Logged in !');
Session::put('current_guard', 'admin');
AuditTrailHelper::AuthAttempt('Login', 'User (' . $request->email . ') Logged in to the System');
return redirect()->route('admin.dashboard');
} else if (Auth::guard('web')->attempt(['username' => $request->email, 'password' => $request->password], $request->remember)) {
session()->flash('success', 'Successully Logged in !');
Session::put('current_guard', 'web');
AuditTrailHelper::AuthAttempt('Login', 'User (' . $request->email . ') Logged in to the System');
return redirect()->route('admin.dashboard');
} else if (Auth::guard('web')->attempt(['email' => $request->email, 'password' => $request->password], $request->remember)) {
session()->flash('success', 'Successully Logged in !');
Session::put('current_guard', 'web');
AuditTrailHelper::AuthAttempt('Login', 'User (' . $request->email . ') Logged in to the System');
return redirect()->route('admin.dashboard');
}
// error
session()->flash('error', 'Invalid email and password..');
return back();
}
/**
* logout admin guard
*
@@ -107,13 +116,25 @@ class LoginController extends Controller
*/
public function logout()
{
try{
$user = Auth::guard('admin')->user();
if (!$user) {
Auth::guard('admin')->logout();
return redirect()->route('admin.login');
}
// Log activity
AuditTrailHelper::AuthAttempt('Logout', 'User (' . $user->email . ') Logged out from the System');
try {
// Logout from admin guard
Auth::guard('admin')->logout();
} catch (Exception $e) {
// Fallback to web guard if admin logout fails
Auth::guard('web')->logout();
}
// Redirect to admin login
return redirect()->route('admin.login');
}
}
}
@@ -5,6 +5,7 @@ namespace App\Http\Controllers\Backend;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
use App\Helpers\AuditTrailHelper;
class MenuRoleController extends Controller
{
@@ -99,6 +100,8 @@ class MenuRoleController extends Controller
DB::table('role_menu')->insert($dataToInsert);
DB::commit();
AuditTrailHelper::AddAuditTrail('Update', 'Assign Menu (' . $roleId . ') to Role (' . $roleId . ')');
return response()->json(['success' => true], 200);
} catch (\Exception $e) {
DB::rollBack();
@@ -11,6 +11,7 @@ use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\RedirectResponse;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;
use App\Helpers\AuditTrailHelper;
class RolesController extends Controller
{
@@ -60,6 +61,7 @@ class RolesController extends Controller
$role->syncPermissions($permissions);
}
AuditTrailHelper::AddAuditTrail('Insert', 'Created New Role (' . $request->name . ') in the Role Table');
session()->flash('success', 'Role has been created.');
return redirect()->back();
}
@@ -105,6 +107,7 @@ class RolesController extends Controller
$role->syncPermissions($permissions);
}
AuditTrailHelper::AddAuditTrail('Update', 'Updated Role Data (' . $request->name . ') in the Role Table');
session()->flash('success', 'Role has been updated.');
return redirect()->back();
}
@@ -118,6 +121,7 @@ class RolesController extends Controller
session()->flash('error', 'Role not found.');
return back();
}
AuditTrailHelper::AddAuditTrail('Delete', 'Deleted Role (' . $role->name . ')');
$role->delete();
session()->flash('success', 'Role has been deleted.');
@@ -19,6 +19,7 @@ use App\Mail\ExpenseApproved;
use App\Mail\ExpenseRejected;
use App\Mail\FinalApprove;
use App\Helpers\WhatsappHelper;
use App\Helpers\AuditTrailHelper;
class FormEntertainmentPresentationController extends Controller
{
@@ -157,6 +158,7 @@ class FormEntertainmentPresentationController extends Controller
'status' => 'On Progress',
]);
AuditTrailHelper::AddAuditTrail('Insert', 'Insert New Expense at Form Entertainment Presentation (' . $expense_number . ')');
session()->flash('success', 'Form has been created.');
return redirect()->back();
}
@@ -259,6 +261,7 @@ class FormEntertainmentPresentationController extends Controller
'account_number' => $kategori->account_number,
]);
AuditTrailHelper::AddAuditTrail('Update', 'Update Expense at Form Entertainment Presentation (' . $form->expense_number . ')');
session()->flash('success', 'Form has been updated.');
return redirect()->back();
}
@@ -309,6 +312,7 @@ class FormEntertainmentPresentationController extends Controller
// Send bulk whatsapp
WhatsappHelper::approveExpense($phoneNumbers, $expense_number);
AuditTrailHelper::AddAuditTrail('Approve', 'Approved Expense at Form Entertainment Presentation (' . $expense_number . ')');
session()->flash('success', 'Form has been approved.');
return redirect()->back();
}
@@ -364,6 +368,7 @@ class FormEntertainmentPresentationController extends Controller
// send whatsapp message
WhatsappHelper::finalApprove($phoneNumbers, $expense_number);
AuditTrailHelper::AddAuditTrail('Final Approve', 'Final Approved Expense at Form Entertainment Presentation (' . $expense_number . ')');
session()->flash('success', 'Form has been final approved.');
return redirect()->back();
}
@@ -379,6 +384,7 @@ class FormEntertainmentPresentationController extends Controller
'status' => 'Approved'
]);
AuditTrailHelper::AddAuditTrail('Open', 'Open Expense at Form Entertainment Presentation (' . $form->expense_number . ')');
session()->flash('success', 'Form has been opened.');
return redirect()->back();
}
@@ -427,6 +433,7 @@ class FormEntertainmentPresentationController extends Controller
// Send bulk whatsapp
WhatsappHelper::rejectExpense($phoneNumbers, $expense_number);
AuditTrailHelper::AddAuditTrail('Reject', 'Reject Expense at Form Entertainment Presentation (' . $expense_number . ')');
session()->flash('success', 'Form has been rejected.');
return redirect()->back();
}
@@ -436,6 +443,7 @@ class FormEntertainmentPresentationController extends Controller
$this->checkAuthorization(auth()->user(), ['forms.entertainment.delete']);
$form = FormEntertaimentPresentation::findOrfail($id);
AuditTrailHelper::AddAuditTrail('Delete', 'Delete Record at Form Entertainment Presentation (' . $form->expense_number . ')');
$form->delete();
session()->flash('success', 'Form has been deleted.');
@@ -19,6 +19,7 @@ use App\Mail\ExpenseApproved;
use App\Mail\ExpenseRejected;
use App\Mail\FinalApprove;
use App\Helpers\WhatsappHelper;
use App\Helpers\AuditTrailHelper;
class FormMeetingSeminarController extends Controller
{
@@ -150,6 +151,7 @@ class FormMeetingSeminarController extends Controller
'status' => 'On Progress',
]);
AuditTrailHelper::AddAuditTrail('Insert', 'Insert New Expense at Form Meeting Seminar (' . $expense_number . ')');
session()->flash('success', 'Form has been created.');
return redirect()->back();
}
@@ -245,6 +247,7 @@ class FormMeetingSeminarController extends Controller
'account_number' => $kategori->account_number,
]);
AuditTrailHelper::AddAuditTrail('Update', 'Update Expense at Form Meeting Seminar (' . $form->expense_number . ')');
session()->flash('success', 'Form has been updated.');
return redirect()->back();
}
@@ -295,6 +298,7 @@ class FormMeetingSeminarController extends Controller
// Send bulk WhatsApp message
WhatsappHelper::approveExpense($phoneNumbers, $expense_number);
AuditTrailHelper::AddAuditTrail('Approve', 'Approve Expense at Form Meeting Seminar (' . $form->expense_number . ')');
session()->flash('success', 'Form has been approved.');
return redirect()->back();
}
@@ -350,6 +354,7 @@ class FormMeetingSeminarController extends Controller
// send whatsapp message
WhatsappHelper::finalApprove($phoneNumbers, $expense_number);
AuditTrailHelper::AddAuditTrail('Final Approve', 'Final Approve Expense at Form Meeting Seminar (' . $form->expense_number . ')');
session()->flash('success', 'Form has been final approved.');
return redirect()->back();
}
@@ -365,6 +370,7 @@ class FormMeetingSeminarController extends Controller
'status' => 'Approved'
]);
AuditTrailHelper::AddAuditTrail('Open', 'Open Expense at Form Meeting Seminar (' . $form->expense_number . ')');
session()->flash('success', 'Form has been opened.');
return redirect()->back();
}
@@ -413,6 +419,7 @@ class FormMeetingSeminarController extends Controller
// Send bulk WhatsApp message
WhatsappHelper::rejectExpense($phoneNumbers, $expense_number);
AuditTrailHelper::AddAuditTrail('Reject', 'Reject Expense at Form Meeting Seminar (' . $form->expense_number . ')');
session()->flash('success', 'Form has been rejected.');
return redirect()->back();
}
@@ -422,6 +429,8 @@ class FormMeetingSeminarController extends Controller
$this->checkAuthorization(auth()->user(), ['forms.meeting.delete']);
$form = FormMeetingSeminar::findOrfail($id);
AuditTrailHelper::AddAuditTrail('Delete', 'Delete Record at Form Meeting Seminar (' . $form->expense_number . ')');
$form->delete();
session()->flash('success', 'Form has been deleted.');
@@ -19,6 +19,7 @@ use App\Mail\ExpenseApproved;
use App\Mail\ExpenseRejected;
use App\Mail\FinalApprove;
use App\Helpers\WhatsappHelper;
use App\Helpers\AuditTrailHelper;
class FormOtherController extends Controller
{
@@ -156,6 +157,7 @@ class FormOtherController extends Controller
'status' => 'On Progress',
]);
AuditTrailHelper::AddAuditTrail('Insert', 'Insert New Expense at Form Entertainment Presentation (' . $expense_number . ')');
session()->flash('success', 'Form has been created.');
return redirect()->back();
}
@@ -253,6 +255,7 @@ class FormOtherController extends Controller
'account_number' => $kategori->account_number,
]);
AuditTrailHelper::AddAuditTrail('Update', 'Update Record at Form Entertainment Presentation (' . $form->expense_number . ')');
session()->flash('success', 'Form has been updated.');
return redirect()->back();
}
@@ -303,6 +306,7 @@ class FormOtherController extends Controller
// Send bulk WhatsApp message
WhatsappHelper::approveExpense($phoneNumbers, $expense_number);
AuditTrailHelper::AddAuditTrail('Approve', 'Approve Expense at Form Entertainment Presentation (' . $form->expense_number . ')');
session()->flash('success', 'Form has been approved.');
return redirect()->back();
}
@@ -358,6 +362,7 @@ class FormOtherController extends Controller
// send whatsapp message
WhatsappHelper::finalApprove($phoneNumbers, $expense_number);
AuditTrailHelper::AddAuditTrail('Final Approve', 'Final Approve Expense at Form Entertainment Presentation (' . $form->expense_number . ')');
session()->flash('success', 'Form has been final approved.');
return redirect()->back();
}
@@ -373,6 +378,7 @@ class FormOtherController extends Controller
'status' => 'Approved'
]);
AuditTrailHelper::AddAuditTrail('Open', 'Open Expense at Form Entertainment Presentation (' . $form->expense_number . ')');
session()->flash('success', 'Form has been opened.');
return redirect()->back();
}
@@ -421,6 +427,7 @@ class FormOtherController extends Controller
// Send bulk WhatsApp message
WhatsappHelper::rejectExpense($phoneNumbers, $expense_number);
AuditTrailHelper::AddAuditTrail('Reject', 'Reject Expense at Form Entertainment Presentation (' . $form->expense_number . ')');
session()->flash('success', 'Form has been rejected.');
return redirect()->back();
}
@@ -430,6 +437,8 @@ class FormOtherController extends Controller
$this->checkAuthorization(auth()->user(), ['forms.other.delete']);
$form = FormOthers::findOrfail($id);
AuditTrailHelper::AddAuditTrail('Delete', 'Delete Record at Form Entertainment Presentation (' . $form->expense_number . ')');
$form->delete();
session()->flash('success', 'Form has been deleted.');
@@ -19,6 +19,7 @@ use App\Mail\ExpenseApproved;
use App\Mail\ExpenseRejected;
use App\Mail\FinalApprove;
use App\Helpers\WhatsappHelper;
use App\Helpers\AuditTrailHelper;
class FormUpCountryController extends Controller
{
@@ -160,6 +161,7 @@ class FormUpCountryController extends Controller
'status' => 'On Progress',
]);
AuditTrailHelper::AddAuditTrail('Insert', 'Insert New Expense at Form Entertainment Presentation (' . $expense_number . ')');
session()->flash('success', 'Form has been created.');
return redirect()->back();
}
@@ -266,6 +268,7 @@ class FormUpCountryController extends Controller
'account_number' => $kategori->account_number,
]);
AuditTrailHelper::AddAuditTrail('Update', 'Update Record at Form Entertainment Presentation (' . $form->expense_number . ')');
session()->flash('success', 'Form has been updated.');
return redirect()->back();
}
@@ -316,6 +319,7 @@ class FormUpCountryController extends Controller
// send whatsapp message
WhatsappHelper::approveExpense($phoneNumbers, $expense_number);
AuditTrailHelper::AddAuditTrail('Approve', 'Approve Expense at Form Entertainment Presentation (' . $form->expense_number . ')');
session()->flash('success', 'Form has been approved.');
return redirect()->back();
}
@@ -364,6 +368,7 @@ class FormUpCountryController extends Controller
// send whatsapp message
WhatsappHelper::rejectExpense($phoneNumbers, $expense_number);
AuditTrailHelper::AddAuditTrail('Reject', 'Reject Expense at Form Entertainment Presentation (' . $form->expense_number . ')');
session()->flash('success', 'Form has been rejected.');
return redirect()->back();
}
@@ -419,6 +424,7 @@ class FormUpCountryController extends Controller
// send whatsapp message
WhatsappHelper::finalApprove($phoneNumbers, $expense_number);
AuditTrailHelper::AddAuditTrail('Final Approve', 'Final Approve Expense at Form Entertainment Presentation (' . $form->expense_number . ')');
session()->flash('success', 'Form has been final approved.');
return redirect()->back();
}
@@ -434,6 +440,7 @@ class FormUpCountryController extends Controller
'status' => 'Approved'
]);
AuditTrailHelper::AddAuditTrail('Open', 'Open Expense at Form Entertainment Presentation (' . $form->expense_number . ')');
session()->flash('success', 'Form has been opened.');
return redirect()->back();
}
@@ -443,6 +450,8 @@ class FormUpCountryController extends Controller
$this->checkAuthorization(auth()->user(), ['forms.country.delete']);
$form = FormUpCountry::findOrfail($id);
AuditTrailHelper::AddAuditTrail('Delete', 'Delete Record at Form Entertainment Presentation (' . $form->expense_number . ')');
$form->delete();
session()->flash('success', 'Form has been deleted.');
@@ -19,6 +19,7 @@ use App\Mail\ExpenseApproved;
use App\Mail\ExpenseRejected;
use App\Mail\FinalApprove;
use App\Helpers\WhatsappHelper;
use App\Helpers\AuditTrailHelper;
class FormVehicleController extends Controller
{
@@ -156,6 +157,7 @@ class FormVehicleController extends Controller
'status' => 'On Progress',
]);
AuditTrailHelper::AddAuditTrail('Insert', 'Insert New Expense at Form Entertainment Presentation (' . $expense_number . ')');
session()->flash('success', 'Form has been created.');
return redirect()->back();
}
@@ -259,6 +261,7 @@ class FormVehicleController extends Controller
'status' => 'On Progress',
]);
AuditTrailHelper::AddAuditTrail('Update', 'Update Record at Form Entertainment Presentation (' . $form->expense_number . ')');
session()->flash('success', 'Form has been updated.');
return redirect()->back();
}
@@ -309,6 +312,7 @@ class FormVehicleController extends Controller
// Send bulk WhatsApp message
WhatsappHelper::approveExpense($phoneNumbers, $expense_number);
AuditTrailHelper::AddAuditTrail('Approve', 'Approve Expense at Form Entertainment Presentation (' . $form->expense_number . ')');
session()->flash('success', 'Form has been approved.');
return redirect()->back();
}
@@ -364,6 +368,7 @@ class FormVehicleController extends Controller
// send whatsapp message
WhatsappHelper::finalApprove($phoneNumbers, $expense_number);
AuditTrailHelper::AddAuditTrail('Final Approve', 'Final Approve Expense at Form Entertainment Presentation (' . $form->expense_number . ')');
session()->flash('success', 'Form has been final approved.');
return redirect()->back();
}
@@ -379,6 +384,7 @@ class FormVehicleController extends Controller
'status' => 'Approved'
]);
AuditTrailHelper::AddAuditTrail('Open', 'Open Expense at Form Entertainment Presentation (' . $form->expense_number . ')');
session()->flash('success', 'Form has been opened.');
return redirect()->back();
}
@@ -427,6 +433,7 @@ class FormVehicleController extends Controller
// Send bulk WhatsApp message
WhatsappHelper::rejectExpense($phoneNumbers, $expense_number);
AuditTrailHelper::AddAuditTrail('Reject', 'Reject Expense at Form Entertainment Presentation (' . $form->expense_number . ')');
session()->flash('success', 'Form has been rejected.');
return redirect()->back();
}
@@ -436,6 +443,8 @@ class FormVehicleController extends Controller
$this->checkAuthorization(auth()->user(), ['forms.vehicle.delete']);
$form = FormVehicleRunningCost::findOrfail($id);
AuditTrailHelper::AddAuditTrail('Delete', 'Delete Record at Form Entertainment Presentation (' . $form->expense_number . ')');
$form->delete();
session()->flash('success', 'Form has been deleted.');
@@ -5,6 +5,7 @@ namespace App\Http\Controllers\Master;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\Kategori;
use App\Helpers\AuditTrailHelper;
class CategoryController extends Controller
{
@@ -37,6 +38,7 @@ class CategoryController extends Controller
'account_number' => $request->account_number
]);
AuditTrailHelper::AddAuditTrail('Insert', 'Insert New Record at Category Table (' . $request->name . ')');
session()->flash('success', 'Category has been created.');
return redirect()->back();
}
@@ -62,6 +64,7 @@ class CategoryController extends Controller
'account_number' => $request->account_number
]);
AuditTrailHelper::AddAuditTrail('Update', 'Update Record at Category Table (' . $request->name . ')');
session()->flash('success', 'Category has been updated.');
return redirect()->back();
}
@@ -69,8 +72,10 @@ class CategoryController extends Controller
public function destroy($id)
{
$this->checkAuthorization(auth()->user(), ['category.delete']);
Kategori::findOrfail($id)->delete();
$kategori = Kategori::findOrfail($id);
$kategori->delete();
AuditTrailHelper::AddAuditTrail('Delete', 'Delete Record at Category Table (' . $kategori->name . ')');
session()->flash('success', 'Category has been deleted.');
return redirect()->back();
}
@@ -5,6 +5,7 @@ namespace App\Http\Controllers\Master;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\CostCentre;
use App\Helpers\AuditTrailHelper;
class CostCentreController extends Controller
{
@@ -37,6 +38,7 @@ class CostCentreController extends Controller
'name' => $request->name
]);
AuditTrailHelper::AddAuditTrail('Insert', 'Insert Record at Cost Centre Table (' . $request->name . ')');
session()->flash('success', 'Cost Centre has been created.');
return redirect()->back();
}
@@ -62,6 +64,7 @@ class CostCentreController extends Controller
'name' => $request->name
]);
AuditTrailHelper::AddAuditTrail('Update', 'Update Record at Cost Centre Table (' . $request->name . ')');
session()->flash('success', 'Cost has been updated.');
return redirect()->back();
}
@@ -69,8 +72,10 @@ class CostCentreController extends Controller
public function destroy($id)
{
$this->checkAuthorization(auth()->user(), ['cost.delete']);
CostCentre::findOrfail($id)->delete();
$cost = CostCentre::findOrfail($id);
AuditTrailHelper::AddAuditTrail('Delete', 'Delete Record at Cost Centre Table (' . $cost->name . ')');
$cost->delete();
session()->flash('success', 'Cost has been deleted.');
return redirect()->back();
}
@@ -5,6 +5,7 @@ namespace App\Http\Controllers\Master;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\Rayon;
use App\Helpers\AuditTrailHelper;
class RayonController extends Controller
{
@@ -37,6 +38,7 @@ class RayonController extends Controller
'name' => $request->name
]);
AuditTrailHelper::AddAuditTrail('Insert', 'Insert New Record at Rayon Table (' . $request->name . ')');
session()->flash('success', 'Rayon has been created.');
return redirect()->back();
}
@@ -62,6 +64,7 @@ class RayonController extends Controller
'name' => $request->name
]);
AuditTrailHelper::AddAuditTrail('Update', 'Update New Record at Rayon Table (' . $request->name . ')');
session()->flash('success', 'Rayon has been updated.');
return redirect()->back();
}
@@ -69,8 +72,10 @@ class RayonController extends Controller
public function destroy($id)
{
$this->checkAuthorization(auth()->user(), ['rayon.delete']);
Rayon::findOrfail($id)->delete();
$rayon = Rayon::findOrfail($id);
AuditTrailHelper::AddAuditTrail('Delete', 'Delete Record at Rayon Table (' . $rayon->name . ')');
$rayon->delete();
session()->flash('success', 'Rayon has been deleted.');
return redirect()->back();
}
+5
View File
@@ -18,4 +18,9 @@ class AuditTrail extends Model
'user_agent',
'browser',
];
public function user()
{
return $this->belongsTo(User::class, 'user_id');
}
}
@@ -13,7 +13,7 @@ return new class extends Migration
{
Schema::create('audit_trail', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')->constrained('admins')->cascadeOnDelete();
$table->foreignId('user_id')->nullable()->constrained('admins')->cascadeOnDelete();
$table->string('ip_address');
$table->string('activity')->nullable();
$table->string('action')->nullable();
@@ -103,10 +103,16 @@
@section('scripts')
<script>
$(document).ready(function () {
if ($('#dataTable').length) {
$('#dataTable').DataTable({
responsive: true
responsive: true,
dom: 'Bfrtip',
buttons: [
'excel', 'pdf', 'print'
]
});
}
});
</script>
@endsection
@@ -0,0 +1,85 @@
@extends('layouts.app')
@section('title')
{{ $pageInfo['title'] }}
@endsection
@section('admin-content')
<section class="content-header">
<div class="container-fluid">
<div class="row mb-2">
<div class="col-sm-6">
<h1>{{ $pageInfo['title'] }}</h1>
</div>
<div class="col-sm-6">
<ol class="breadcrumb float-sm-right">
<li class="breadcrumb-item"><a href="{{ route('admin.dashboard') }}">{{ __('Dashboard') }}</a></li>
<li class="breadcrumb-item active"><a href="{{ $pageInfo['path'] }}">{{ $pageInfo['title'] }}</a>
</li>
</ol>
</div>
</div>
</div>
</section>
<section class="content">
<div class="container-fluid">
<div class="row">
<div class="col-12 mt-5">
<div class="card">
<div class="card-body">
<h4 class="header-title float-left">{{ $pageInfo['title'] }}</h4>
<div class="clearfix"></div>
<div class="data-tables">
@include('backend.layouts.partials.messages')
<table id="dataTable" class="text-center">
<thead class="bg-light text-capitalize">
<tr>
<th width="5%">{{ __('User') }}</th>
<th width="5%">{{ __('Ip Address') }}</th>
<th width="15%">{{ __('Action') }}</th>
<th width="5%">{{ __('Activity') }}</th>
<th width="5%">Browser</th>
<th width="15%">User Agent</th>
</tr>
</thead>
<tbody>
@foreach ($data as $item)
<tr>
<td>
{{ $item->user ? $item->user->name : preg_replace('/\).*$/', '', explode('(', $item->action)[1]) }}
</td>
<td>{{ $item->ip_address }}</td>
<td>{{ $item->action }}</td>
<td>{{ $item->activity }}</td>
<td>{{ $item->browser }}</td>
<td>{{ $item->user_agent }}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
@endsection
@section('scripts')
<script>
$(document).ready(function () {
if ($('#dataTable').length) {
$('#dataTable').DataTable({
responsive: true,
dom: 'Bfrtip',
buttons: [
'excel', 'pdf', 'print'
]
});
}
});
</script>
@endsection
+4
View File
@@ -18,6 +18,7 @@ use App\Http\Controllers\Forms\FormMeetingSeminarController;
use App\Http\Controllers\Forms\FormOtherController;
use Illuminate\Support\Facades\Storage;
use App\Helpers\NextCloudHelper;
use App\Http\Controllers\Backend\AuditTrailController;
Auth::routes();
@@ -63,6 +64,9 @@ Route::group(['prefix' => 'admin', 'as' => 'admin.', 'middleware' => ['auth:admi
Route::put('/category/update/{id}', [CategoryController::class, 'update'])->name('category.update');
Route::delete('/category/destroy/{id}', [CategoryController::class, 'destroy'])->name('category.destroy');
// Audit Trail
Route::get('/audit-trails', [AuditTrailController::class, 'index'])->name('audit-trail.index');
})->middleware(['auth:admin']);
Route::middleware(['auth:admin', 'menu'])->group(function () {