All In
This commit is contained in:
parent
0d7e25df6e
commit
15b1e8af19
1
.gitignore
vendored
1
.gitignore
vendored
@ -29,3 +29,4 @@ yarn-error.log
|
||||
!/storage/logs/
|
||||
public/assets/homepage/*Zone.Identifier
|
||||
Zone.Identifier
|
||||
*Zone.Identifier
|
||||
|
||||
@ -434,3 +434,106 @@ function titlefy($text) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('get_activity_log_name')) {
|
||||
function get_activity_log_name($name) {
|
||||
|
||||
switch($name) {
|
||||
case 'airing_proof_theme':
|
||||
return [
|
||||
'name' => 'Tema Bukti Tayang',
|
||||
'route' => 'dashboard.airing.proof.themes.show'
|
||||
];
|
||||
case 'announcement':
|
||||
return [
|
||||
'name' => 'Pengumuman',
|
||||
'route' => 'dashboard.announcements.show'
|
||||
];
|
||||
case 'classification':
|
||||
return [
|
||||
'name' => 'Klasifikasi',
|
||||
'route' => 'dashboard.classifications.show'
|
||||
];
|
||||
case 'content_recap':
|
||||
return [
|
||||
'name' => 'Rekap Konten',
|
||||
'route' => 'dashboard.content.recaps.show'
|
||||
];
|
||||
case 'content_recap_classification':
|
||||
return [
|
||||
'name' => 'Klasifikasi Rekap Konten',
|
||||
'route' => 'dashboard.content.recap.classifications.show'
|
||||
];
|
||||
case 'cooperation':
|
||||
return [
|
||||
'name' => 'Kerja Sama',
|
||||
'route' => 'dashboard.cooperations.show'
|
||||
];
|
||||
case 'cooperation_completion':
|
||||
return [
|
||||
'name' => 'Penyelesaian Kerja Sama',
|
||||
'route' => 'dashboard.cooperation.completions.show'
|
||||
];
|
||||
case 'cooperation_proposal':
|
||||
return [
|
||||
'name' => 'Pengajuan Kerja Sama',
|
||||
'route' => 'dashboard.cooperations.media.proposal.show'
|
||||
];
|
||||
case 'government_agency':
|
||||
return [
|
||||
'name' => 'OPD',
|
||||
'route' => 'dashboard.government.agencies.show'
|
||||
];
|
||||
case 'issue_management':
|
||||
return [
|
||||
'name' => 'Manajemen Isu',
|
||||
'route' => 'dashboard.issue.managements.show'
|
||||
];
|
||||
case 'location':
|
||||
return [
|
||||
'name' => 'Location',
|
||||
'route' => 'dashboard.locations.show'
|
||||
];
|
||||
case 'media_monitoring':
|
||||
return [
|
||||
'name' => 'Monitoring Media',
|
||||
'route' => 'dashboard.media.monitorings.show'
|
||||
];
|
||||
case 'news':
|
||||
return [
|
||||
'name' => 'Berita',
|
||||
'route' => 'dashboard.news.show'
|
||||
];
|
||||
case 'order':
|
||||
return [
|
||||
'name' => 'Media Order',
|
||||
'route' => 'dashboard.media.orders.show'
|
||||
];
|
||||
case 'airing_proof_report':
|
||||
return [
|
||||
'name' => 'Laporan Bukti Tayang',
|
||||
'route' => 'dashboard.reports.show'
|
||||
];
|
||||
case 'user_role':
|
||||
return [
|
||||
'name' => 'Hak Akses',
|
||||
'route' => 'dashboard.role.index'
|
||||
];
|
||||
case 'sub_classification':
|
||||
return [
|
||||
'name' => 'Sub Klasifikasi',
|
||||
'route' => 'dashboard.sub.classifications.show'
|
||||
];
|
||||
case 'sub_location':
|
||||
return [
|
||||
'name' => 'Sub Lokasi',
|
||||
'route' => 'dashboard.sub.locations.show'
|
||||
];
|
||||
default:
|
||||
return [
|
||||
'name' => 'Tidak Valid',
|
||||
'route' => null
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -36,6 +36,7 @@
|
||||
use SebastianBergmann\Type\TrueType;
|
||||
use Yajra\DataTables\DataTables;
|
||||
use Illuminate\Support\Str;
|
||||
use Spatie\Activitylog\Models\Activity;
|
||||
|
||||
class DatatableController extends Controller
|
||||
{
|
||||
@ -3191,4 +3192,63 @@ public function loginHistory(Request $request){
|
||||
return response()->json(['error' => 'Unauthorized'], 401);
|
||||
|
||||
}
|
||||
|
||||
public function logActivity(Request $request){
|
||||
if ($request->ajax()) {
|
||||
|
||||
$year = $request->input('year', null);
|
||||
$from_month = $request->input('from_month', null);
|
||||
$to_month = $request->input('to_month', null);
|
||||
$date = $request->input('date', null);
|
||||
|
||||
$query = Activity::query();
|
||||
|
||||
if ($year) {
|
||||
$query->whereYear('created_at', $year);
|
||||
}
|
||||
|
||||
if ($from_month && $to_month) {
|
||||
$start = Carbon::parse($from_month)->startOfMonth();
|
||||
$end = Carbon::parse($to_month)->endOfMonth();
|
||||
|
||||
$query->whereBetween('created_at', [$start, $end]);
|
||||
}
|
||||
|
||||
if ($date) {
|
||||
$query->whereDate('created_at', $date);
|
||||
}
|
||||
|
||||
$data = $query->get();
|
||||
|
||||
return DataTables::of($data)
|
||||
->addIndexColumn()
|
||||
->addColumn('causer', function ($data) {
|
||||
return $data->causer->name;
|
||||
})
|
||||
->addColumn('action_type', function ($data) {
|
||||
switch($data->event){
|
||||
case 'created':
|
||||
return '<span class="profile-ud-value"><span class="badge bg-primary">Membuat</span></span>';
|
||||
case 'updated':
|
||||
return '<span class="profile-ud-value"><span class="badge bg-warning">Mengedit</span></span>';
|
||||
case 'deleted':
|
||||
return '<span class="profile-ud-value"><span class="badge bg-danger">Menghapus</span></span>';
|
||||
default:
|
||||
return '<i>Tidak Diketahui</i>';
|
||||
}
|
||||
})
|
||||
->addColumn('time', function ($data) {
|
||||
return '<span class="text-warning">['.idn_date($data->created_at, 'H:i').']</span>'. '<span class="text-primary"><span class="text-dark"> </span> '.idn_date($data->created_at, 'd F Y').'</span>';
|
||||
})
|
||||
->addColumn('action', function ($data) {
|
||||
$route = route('dashboard.log.activity.show', ['id' => encrypt_id($data->id)]);
|
||||
return '<a href="'.$route.'"><em class="icon ni ni-eye"></em> Lihat</a>';
|
||||
})
|
||||
->rawColumns(['time', 'action_type', 'action'])
|
||||
->make(true);
|
||||
}
|
||||
|
||||
return response()->json(['error' => 'Unauthorized'], 401);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
31
app/Http/Controllers/Dashboard/LogActivityController.php
Normal file
31
app/Http/Controllers/Dashboard/LogActivityController.php
Normal file
@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Dashboard;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use Spatie\Activitylog\Models\Activity;
|
||||
|
||||
class LogActivityController extends Controller
|
||||
{
|
||||
public function index(Request $request){
|
||||
return view('dashboard.log-activities.index', [
|
||||
'title' => 'Log',
|
||||
'year' => $request->input('year', null),
|
||||
'from_month' => $request->input('from_month', null),
|
||||
'to_month' => $request->input('to_month', null),
|
||||
'date' => $request->input('date', null),
|
||||
'event' => $request->input('event', null),
|
||||
]);
|
||||
}
|
||||
|
||||
public function show($id){
|
||||
$log = Activity::findOrFail(decrypt_id($id));
|
||||
|
||||
// dd($log);
|
||||
return view('dashboard.log-activities.show', [
|
||||
'title' => 'Log',
|
||||
'log' => $log
|
||||
]);
|
||||
}
|
||||
}
|
||||
@ -26,6 +26,7 @@ public function rules(): array
|
||||
return [
|
||||
'name' => ['required', 'max:100'],
|
||||
'description' => ['nullable'],
|
||||
'year' => ['required'],
|
||||
'slug' => ['required'],
|
||||
'enhancer_id' => ['required'],
|
||||
];
|
||||
@ -36,6 +37,7 @@ public function messages(): array
|
||||
return [
|
||||
'name.required' => 'Nama harus diisi.',
|
||||
'name.max' => 'Nama tidak boleh lebih dari 100 karakter.',
|
||||
'year.required' => 'Tahun harus diisi.',
|
||||
'description.nullable' => 'Deskripsi bersifat opsional.',
|
||||
];
|
||||
}
|
||||
|
||||
@ -4,10 +4,12 @@
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
use Spatie\Activitylog\Traits\LogsActivity;
|
||||
use Spatie\Activitylog\LogOptions;
|
||||
|
||||
class AiringProofTheme extends Model
|
||||
{
|
||||
use SoftDeletes;
|
||||
use SoftDeletes, LogsActivity;
|
||||
protected $table = 'airing_proof_themes';
|
||||
|
||||
protected $fillable = [
|
||||
@ -21,4 +23,29 @@ class AiringProofTheme extends Model
|
||||
public function enhancer(){
|
||||
return $this->belongsTo(User::class, 'enhancer_id', 'id');
|
||||
}
|
||||
|
||||
public function getActivitylogOptions(): LogOptions
|
||||
{
|
||||
return LogOptions::defaults()
|
||||
->logOnly(['name', 'slug', 'year', 'description', 'enhancer_id']) // kolom yang dicatat
|
||||
->useLogName('airing_proof_theme') // nama log
|
||||
->logOnlyDirty(); // hanya log kalau ada perubahan
|
||||
}
|
||||
|
||||
public function getDescriptionForEvent(string $eventName): string
|
||||
{
|
||||
switch($eventName){
|
||||
case 'created':
|
||||
$eventName = 'dibuat';
|
||||
break;
|
||||
case 'updated':
|
||||
$eventName = 'diubah';
|
||||
break;
|
||||
case 'deleted':
|
||||
$eventName = 'dihapus';
|
||||
break;
|
||||
}
|
||||
|
||||
return "Tema bukti tayang '{$this->name}' telah {$eventName}";
|
||||
}
|
||||
}
|
||||
|
||||
@ -4,10 +4,12 @@
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
use Spatie\Activitylog\Traits\LogsActivity;
|
||||
use Spatie\Activitylog\LogOptions;
|
||||
|
||||
class ContentRecap extends Model
|
||||
{
|
||||
use SoftDeletes;
|
||||
use SoftDeletes, LogsActivity;
|
||||
protected $table = 'content_recaps';
|
||||
|
||||
protected $fillable = [
|
||||
@ -31,4 +33,39 @@ public function enhancer()
|
||||
public function classification(){
|
||||
return $this->belongsTo(ContentRecapClassification::class, 'classification_id', 'id');
|
||||
}
|
||||
|
||||
public function getActivitylogOptions(): LogOptions
|
||||
{
|
||||
return LogOptions::defaults()
|
||||
->logOnly([
|
||||
'content_theme',
|
||||
'posted_date',
|
||||
'channel',
|
||||
'link',
|
||||
'classification_id',
|
||||
'social_media',
|
||||
'image',
|
||||
'content_type',
|
||||
'description',
|
||||
'enhancer_id',]) // kolom yang dicatat
|
||||
->useLogName('content_recap') // nama log
|
||||
->logOnlyDirty(); // hanya log kalau ada perubahan
|
||||
}
|
||||
|
||||
public function getDescriptionForEvent(string $eventName): string
|
||||
{
|
||||
switch($eventName){
|
||||
case 'created':
|
||||
$eventName = 'dibuat';
|
||||
break;
|
||||
case 'updated':
|
||||
$eventName = 'diubah';
|
||||
break;
|
||||
case 'deleted':
|
||||
$eventName = 'dihapus';
|
||||
break;
|
||||
}
|
||||
|
||||
return "Rekap Konten '{$this->content_theme}' telah {$eventName}";
|
||||
}
|
||||
}
|
||||
|
||||
@ -4,10 +4,12 @@
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
use Spatie\Activitylog\Traits\LogsActivity;
|
||||
use Spatie\Activitylog\LogOptions;
|
||||
|
||||
class ContentRecapClassification extends Model
|
||||
{
|
||||
use SoftDeletes;
|
||||
use SoftDeletes, LogsActivity;
|
||||
protected $table = 'content_recap_classifications';
|
||||
|
||||
protected $fillable = [
|
||||
@ -25,4 +27,29 @@ public function contentRecaps(){
|
||||
public function enhancer(){
|
||||
return $this->belongsTo(User::class, 'enhancer_id', 'id');
|
||||
}
|
||||
|
||||
public function getActivitylogOptions(): LogOptions
|
||||
{
|
||||
return LogOptions::defaults()
|
||||
->logOnly(['name', 'slug', 'year', 'description', 'enhancer_id']) // kolom yang dicatat
|
||||
->useLogName('content_recap_classification') // nama log
|
||||
->logOnlyDirty(); // hanya log kalau ada perubahan
|
||||
}
|
||||
|
||||
public function getDescriptionForEvent(string $eventName): string
|
||||
{
|
||||
switch($eventName){
|
||||
case 'created':
|
||||
$eventName = 'dibuat';
|
||||
break;
|
||||
case 'updated':
|
||||
$eventName = 'diubah';
|
||||
break;
|
||||
case 'deleted':
|
||||
$eventName = 'dihapus';
|
||||
break;
|
||||
}
|
||||
|
||||
return "Klasifikasi Rekap Konten '{$this->name}' telah {$eventName}";
|
||||
}
|
||||
}
|
||||
|
||||
@ -4,10 +4,12 @@
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
use Spatie\Activitylog\Traits\LogsActivity;
|
||||
use Spatie\Activitylog\LogOptions;
|
||||
|
||||
class Cooperation extends Model
|
||||
{
|
||||
use SoftDeletes;
|
||||
use SoftDeletes, LogsActivity;
|
||||
|
||||
protected $table = 'cooperations';
|
||||
|
||||
@ -36,4 +38,37 @@ public function proposals(){
|
||||
public function mediaOrder(){
|
||||
return $this->hasOne(Order::class, 'cooperation_id', 'id');
|
||||
}
|
||||
|
||||
public function getActivitylogOptions(): LogOptions
|
||||
{
|
||||
return LogOptions::defaults()
|
||||
->logOnly([
|
||||
'name',
|
||||
'start_date',
|
||||
'end_date',
|
||||
'banner',
|
||||
'offer_file_template',
|
||||
'description',
|
||||
'enhancer_id',
|
||||
]) // kolom yang dicatat
|
||||
->useLogName('cooperation') // nama log
|
||||
->logOnlyDirty(); // hanya log kalau ada perubahan
|
||||
}
|
||||
|
||||
public function getDescriptionForEvent(string $eventName): string
|
||||
{
|
||||
switch($eventName){
|
||||
case 'created':
|
||||
$eventName = 'dibuat';
|
||||
break;
|
||||
case 'updated':
|
||||
$eventName = 'diubah';
|
||||
break;
|
||||
case 'deleted':
|
||||
$eventName = 'dihapus';
|
||||
break;
|
||||
}
|
||||
|
||||
return "Kerja Sama '{$this->name}' telah {$eventName}";
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,9 +3,12 @@
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Spatie\Activitylog\Traits\LogsActivity;
|
||||
use Spatie\Activitylog\LogOptions;
|
||||
|
||||
class CooperationCompletion extends Model
|
||||
{
|
||||
use LogsActivity;
|
||||
protected $table = 'cooperation_completions';
|
||||
|
||||
protected $fillable = [
|
||||
@ -28,4 +31,40 @@ public function order(){
|
||||
public function media(){
|
||||
return $this->belongsTo(Media::class, 'media_id', 'id');
|
||||
}
|
||||
|
||||
public function getActivitylogOptions(): LogOptions
|
||||
{
|
||||
return LogOptions::defaults()
|
||||
->logOnly([
|
||||
'payment_request_letter',
|
||||
'invoice',
|
||||
'bank_reference',
|
||||
'electronic_tax_invoice',
|
||||
'other_document',
|
||||
'description',
|
||||
'status',
|
||||
'rejection_reason',
|
||||
'media_id',
|
||||
'order_id',
|
||||
])
|
||||
->useLogName('cooperation_completion') // nama log
|
||||
->logOnlyDirty(); // hanya log kalau ada perubahan
|
||||
}
|
||||
|
||||
public function getDescriptionForEvent(string $eventName): string
|
||||
{
|
||||
switch($eventName){
|
||||
case 'created':
|
||||
$eventName = 'dibuat';
|
||||
break;
|
||||
case 'updated':
|
||||
$eventName = 'diubah';
|
||||
break;
|
||||
case 'deleted':
|
||||
$eventName = 'dihapus';
|
||||
break;
|
||||
}
|
||||
|
||||
return "Penyelesaian kerja sama telah {$eventName}";
|
||||
}
|
||||
}
|
||||
|
||||
@ -4,9 +4,12 @@
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
use Spatie\Activitylog\Traits\LogsActivity;
|
||||
use Spatie\Activitylog\LogOptions;
|
||||
|
||||
class CooperationProposal extends Model
|
||||
{
|
||||
use LogsActivity;
|
||||
|
||||
protected $table = 'cooperation_proposals';
|
||||
|
||||
@ -34,4 +37,37 @@ public function journalists()
|
||||
->using(JournalistCooperationProposal::class)
|
||||
->withTimestamps();
|
||||
}
|
||||
|
||||
public function getActivitylogOptions(): LogOptions
|
||||
{
|
||||
return LogOptions::defaults()
|
||||
->logOnly([
|
||||
'attachment',
|
||||
'status',
|
||||
'e_catalog',
|
||||
'description',
|
||||
'rejection_reason',
|
||||
'cooperation_id',
|
||||
'media_id',
|
||||
])
|
||||
->useLogName('cooperation_proposal') // nama log
|
||||
->logOnlyDirty(); // hanya log kalau ada perubahan
|
||||
}
|
||||
|
||||
public function getDescriptionForEvent(string $eventName): string
|
||||
{
|
||||
switch($eventName){
|
||||
case 'created':
|
||||
$eventName = 'dibuat';
|
||||
break;
|
||||
case 'updated':
|
||||
$eventName = 'diubah';
|
||||
break;
|
||||
case 'deleted':
|
||||
$eventName = 'dihapus';
|
||||
break;
|
||||
}
|
||||
|
||||
return "Pengajuan kerja sama telah {$eventName}";
|
||||
}
|
||||
}
|
||||
|
||||
@ -4,10 +4,12 @@
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
use Spatie\Activitylog\Traits\LogsActivity;
|
||||
use Spatie\Activitylog\LogOptions;
|
||||
|
||||
class GovernmentAgency extends Model
|
||||
{
|
||||
use SoftDeletes;
|
||||
use SoftDeletes, LogsActivity;
|
||||
|
||||
protected $table = 'government_agencies';
|
||||
|
||||
@ -29,4 +31,29 @@ public function issues()
|
||||
public function enhancer(){
|
||||
return $this->belongsTo(User::class, 'enhancer_id', 'id');
|
||||
}
|
||||
|
||||
public function getActivitylogOptions(): LogOptions
|
||||
{
|
||||
return LogOptions::defaults()
|
||||
->logOnly(['name', 'short_name', 'location', 'description', 'enhancer_id']) // kolom yang dicatat
|
||||
->useLogName('government_agency') // nama log
|
||||
->logOnlyDirty(); // hanya log kalau ada perubahan
|
||||
}
|
||||
|
||||
public function getDescriptionForEvent(string $eventName): string
|
||||
{
|
||||
switch($eventName){
|
||||
case 'created':
|
||||
$eventName = 'dibuat';
|
||||
break;
|
||||
case 'updated':
|
||||
$eventName = 'diubah';
|
||||
break;
|
||||
case 'deleted':
|
||||
$eventName = 'dihapus';
|
||||
break;
|
||||
}
|
||||
|
||||
return "OPD '{$this->name}' telah {$eventName}";
|
||||
}
|
||||
}
|
||||
|
||||
@ -5,10 +5,12 @@
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Model\Pivot;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
use Spatie\Activitylog\Traits\LogsActivity;
|
||||
use Spatie\Activitylog\LogOptions;
|
||||
|
||||
class IssueManagement extends Model
|
||||
{
|
||||
use SoftDeletes;
|
||||
use SoftDeletes, LogsActivity;
|
||||
|
||||
protected $table = 'issue_managements';
|
||||
|
||||
@ -52,4 +54,39 @@ public function enhancer(){
|
||||
return $this->belongsTo(User::class, 'enhancer_id', 'id');
|
||||
}
|
||||
|
||||
public function getActivitylogOptions(): LogOptions
|
||||
{
|
||||
return LogOptions::defaults()
|
||||
->logOnly([
|
||||
'location_id',
|
||||
'sub_location_id',
|
||||
'classification_id',
|
||||
'sub_classification_id',
|
||||
'media_monitoring_id',
|
||||
'issue',
|
||||
'response',
|
||||
'description',
|
||||
'enhancer_id',
|
||||
]) // kolom yang dicatat
|
||||
->useLogName('issue_management') // nama log
|
||||
->logOnlyDirty(); // hanya log kalau ada perubahan
|
||||
}
|
||||
|
||||
public function getDescriptionForEvent(string $eventName): string
|
||||
{
|
||||
switch($eventName){
|
||||
case 'created':
|
||||
$eventName = 'dibuat';
|
||||
break;
|
||||
case 'updated':
|
||||
$eventName = 'diubah';
|
||||
break;
|
||||
case 'deleted':
|
||||
$eventName = 'dihapus';
|
||||
break;
|
||||
}
|
||||
|
||||
return "Manajemen Isu telah {$eventName}";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -4,10 +4,12 @@
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
use Spatie\Activitylog\Traits\LogsActivity;
|
||||
use Spatie\Activitylog\LogOptions;
|
||||
|
||||
class MediaMonitoring extends Model
|
||||
{
|
||||
use SoftDeletes;
|
||||
use SoftDeletes, LogsActivity;
|
||||
|
||||
protected $table = 'media_monitorings';
|
||||
|
||||
@ -38,4 +40,45 @@ public function enhancer()
|
||||
return $this->belongsTo(User::class, 'enhancer_id', 'id');
|
||||
}
|
||||
|
||||
public function getActivitylogOptions(): LogOptions
|
||||
{
|
||||
return LogOptions::defaults()
|
||||
->logOnly([
|
||||
'code',
|
||||
'media_name',
|
||||
'theme',
|
||||
'title',
|
||||
'channel',
|
||||
'writter',
|
||||
'link',
|
||||
'news_page',
|
||||
'quote',
|
||||
'content',
|
||||
'influencer',
|
||||
'keyword',
|
||||
'image',
|
||||
'release_date',
|
||||
'enhancer_id',
|
||||
]) // kolom yang dicatat
|
||||
->useLogName('media_monitoring') // nama log
|
||||
->logOnlyDirty(); // hanya log kalau ada perubahan
|
||||
}
|
||||
|
||||
public function getDescriptionForEvent(string $eventName): string
|
||||
{
|
||||
switch($eventName){
|
||||
case 'created':
|
||||
$eventName = 'dibuat';
|
||||
break;
|
||||
case 'updated':
|
||||
$eventName = 'diubah';
|
||||
break;
|
||||
case 'deleted':
|
||||
$eventName = 'dihapus';
|
||||
break;
|
||||
}
|
||||
|
||||
return "Monitoring Media '{$this->title}' telah {$eventName}";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -4,10 +4,13 @@
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
use Spatie\Activitylog\Traits\LogsActivity;
|
||||
use Spatie\Activitylog\LogOptions;
|
||||
|
||||
|
||||
class Order extends Model
|
||||
{
|
||||
use SoftDeletes;
|
||||
use SoftDeletes, LogsActivity;
|
||||
|
||||
protected $table = 'orders';
|
||||
|
||||
@ -40,4 +43,37 @@ public function reports(){
|
||||
public function completions(){
|
||||
return $this->hasMany(CooperationCompletion::class, 'order_id', 'id');
|
||||
}
|
||||
|
||||
public function getActivitylogOptions(): LogOptions
|
||||
{
|
||||
return LogOptions::defaults()
|
||||
->logOnly([
|
||||
'start_date',
|
||||
'end_date',
|
||||
'image',
|
||||
'task_description',
|
||||
'required_reports',
|
||||
'cooperation_id',
|
||||
'enhancer_id',
|
||||
]) // kolom yang dicatat
|
||||
->useLogName('order') // nama log
|
||||
->logOnlyDirty(); // hanya log kalau ada perubahan
|
||||
}
|
||||
|
||||
public function getDescriptionForEvent(string $eventName): string
|
||||
{
|
||||
switch($eventName){
|
||||
case 'created':
|
||||
$eventName = 'dibuat';
|
||||
break;
|
||||
case 'updated':
|
||||
$eventName = 'diubah';
|
||||
break;
|
||||
case 'deleted':
|
||||
$eventName = 'dihapus';
|
||||
break;
|
||||
}
|
||||
|
||||
return "Media Order telah {$eventName}";
|
||||
}
|
||||
}
|
||||
|
||||
@ -4,10 +4,12 @@
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
use Spatie\Activitylog\Traits\LogsActivity;
|
||||
use Spatie\Activitylog\LogOptions;
|
||||
|
||||
class Report extends Model
|
||||
{
|
||||
use SoftDeletes;
|
||||
use SoftDeletes, LogsActivity;
|
||||
|
||||
protected $table = 'reports';
|
||||
|
||||
@ -30,4 +32,39 @@ public function order(){
|
||||
public function media(){
|
||||
return $this->belongsTo(Media::class, 'media_id', 'id');
|
||||
}
|
||||
|
||||
public function getActivitylogOptions(): LogOptions
|
||||
{
|
||||
return LogOptions::defaults()
|
||||
->logOnly([
|
||||
'title',
|
||||
'publication_date',
|
||||
'link',
|
||||
'proof',
|
||||
'description',
|
||||
'status',
|
||||
'rejection_reason',
|
||||
'media_id',
|
||||
'order_id',
|
||||
]) // kolom yang dicatat
|
||||
->useLogName('airing_proof_report') // nama log
|
||||
->logOnlyDirty(); // hanya log kalau ada perubahan
|
||||
}
|
||||
|
||||
public function getDescriptionForEvent(string $eventName): string
|
||||
{
|
||||
switch($eventName){
|
||||
case 'created':
|
||||
$eventName = 'dibuat';
|
||||
break;
|
||||
case 'updated':
|
||||
$eventName = 'diubah';
|
||||
break;
|
||||
case 'deleted':
|
||||
$eventName = 'dihapus';
|
||||
break;
|
||||
}
|
||||
|
||||
return "Penyelesaian kerja sama '{$this->title}' telah {$eventName}";
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,9 +3,12 @@
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Spatie\Activitylog\Traits\LogsActivity;
|
||||
use Spatie\Activitylog\LogOptions;
|
||||
|
||||
class Role extends Model
|
||||
{
|
||||
use LogsActivity;
|
||||
protected $table = 'user_roles';
|
||||
|
||||
protected $fillable = [
|
||||
@ -16,4 +19,32 @@ class Role extends Model
|
||||
public function user(){
|
||||
return $this->hasMany(User::class, 'role_id', 'id');
|
||||
}
|
||||
|
||||
public function getActivitylogOptions(): LogOptions
|
||||
{
|
||||
return LogOptions::defaults()
|
||||
->logOnly([
|
||||
'name',
|
||||
'description'
|
||||
]) // kolom yang dicatat
|
||||
->useLogName('user_role') // nama log
|
||||
->logOnlyDirty(); // hanya log kalau ada perubahan
|
||||
}
|
||||
|
||||
public function getDescriptionForEvent(string $eventName): string
|
||||
{
|
||||
switch($eventName){
|
||||
case 'created':
|
||||
$eventName = 'dibuat';
|
||||
break;
|
||||
case 'updated':
|
||||
$eventName = 'diubah';
|
||||
break;
|
||||
case 'deleted':
|
||||
$eventName = 'dihapus';
|
||||
break;
|
||||
}
|
||||
|
||||
return "Hak Akses (role) telah {$eventName}";
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,9 +3,13 @@
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Spatie\Activitylog\Traits\LogsActivity;
|
||||
use Spatie\Activitylog\LogOptions;
|
||||
|
||||
class SubLocation extends Model
|
||||
{
|
||||
use LogsActivity;
|
||||
|
||||
protected $table = 'sub_locations';
|
||||
|
||||
protected $fillable = [
|
||||
@ -27,4 +31,29 @@ public function issues(){
|
||||
public function enhancer(){
|
||||
return $this->belongsTo(User::class, 'enhancer_id', 'id');
|
||||
}
|
||||
|
||||
public function getActivitylogOptions(): LogOptions
|
||||
{
|
||||
return LogOptions::defaults()
|
||||
->logOnly([ 'name', 'status', 'description', 'location_id', 'enhancer_id']) // kolom yang dicatat
|
||||
->useLogName('sub_location') // nama log
|
||||
->logOnlyDirty(); // hanya log kalau ada perubahan
|
||||
}
|
||||
|
||||
public function getDescriptionForEvent(string $eventName): string
|
||||
{
|
||||
switch($eventName){
|
||||
case 'created':
|
||||
$eventName = 'dibuat';
|
||||
break;
|
||||
case 'updated':
|
||||
$eventName = 'diubah';
|
||||
break;
|
||||
case 'deleted':
|
||||
$eventName = 'dihapus';
|
||||
break;
|
||||
}
|
||||
|
||||
return "Sub Lokus '{$this->name}' telah {$eventName}";
|
||||
}
|
||||
}
|
||||
|
||||
@ -44,7 +44,7 @@
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="year">Tahun<span class="required-input">*</span></label>
|
||||
<div class="form-control-wrap">
|
||||
<input type="text" class="form-control @error('year') border-danger @enderror" id="year" year="year" placeholder="Contoh: 2024, 2025" value="{{old('year')}}">
|
||||
<input type="text" class="form-control @error('year') border-danger @enderror" id="year" name="year" placeholder="Contoh: 2024, 2025" value="{{old('year')}}">
|
||||
</div>
|
||||
@error('year')
|
||||
<span class="validation-error">{{$message}}</span>
|
||||
|
||||
120
resources/views/dashboard/log-activities/index.blade.php
Normal file
120
resources/views/dashboard/log-activities/index.blade.php
Normal file
@ -0,0 +1,120 @@
|
||||
@include('partials.dashboard.head')
|
||||
@include('partials.dashboard.sidebar', ['page' => 'log_activities'])
|
||||
@include('partials.dashboard.header')
|
||||
<!-- content @s -->
|
||||
<div class="nk-content ">
|
||||
<div class="container-fluid">
|
||||
<div class="nk-content-inner">
|
||||
<div class="nk-content-body">
|
||||
<div class="nk-block-head nk-block-head-sm">
|
||||
<div class="nk-block-between">
|
||||
<div class="nk-block-head-content">
|
||||
<h3 class="nk-block-title page-title">{{$title}}</h3>
|
||||
</div><!-- .nk-block-head-content -->
|
||||
<div class="nk-block-head-content">
|
||||
<div class="toggle-wrap nk-block-tools-toggle">
|
||||
<a href="#" class="btn btn-icon btn-trigger toggle-expand me-n1" data-target="pageMenu"><em class="icon ni ni-more-v"></em></a>
|
||||
<div class="toggle-expand-content" data-content="pageMenu">
|
||||
<ul class="nk-block-tools g-3">
|
||||
<li>
|
||||
@if (filled(value: $date) || (filled(value: $from_month) && filled(value: $to_month)) ||filled(value: $year))
|
||||
<span class="mx-1">
|
||||
<a href="{{route('dashboard.log.activity.index')}}" class="text-secondary">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor" class="icon icon-tabler icons-tabler-filled icon-tabler-xbox-x"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M12 2c5.523 0 10 4.477 10 10s-4.477 10 -10 10s-10 -4.477 -10 -10s4.477 -10 10 -10m3.6 5.2a1 1 0 0 0 -1.4 .2l-2.2 2.933l-2.2 -2.933a1 1 0 1 0 -1.6 1.2l2.55 3.4l-2.55 3.4a1 1 0 1 0 1.6 1.2l2.2 -2.933l2.2 2.933a1 1 0 0 0 1.6 -1.2l-2.55 -3.4l2.55 -3.4a1 1 0 0 0 -.2 -1.4" /></svg>
|
||||
</a>
|
||||
</span>
|
||||
@endif
|
||||
<div class="drodown">
|
||||
<a href="javascript: void(0);" class="btn btn-white btn-dim btn-outline-light" data-bs-toggle="modal" data-bs-target="#modalFilter"><em class="d-none d-sm-inline icon ni ni-filter"></em><span><span class="d-none d-md-inline">Filter</a>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- .nk-block-between -->
|
||||
</div><!-- .nk-block-head -->
|
||||
<div class="nk-block nk-block-lg">
|
||||
<div class="card card-bordered card-preview">
|
||||
<div class="card-inner">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped table-bordered nowrap" id="logActivitiesTable" border="1">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 10% !important;">No</th>
|
||||
<th>Aktivitas</th>
|
||||
<th>Pengguna</th>
|
||||
<th>Aksi</th>
|
||||
<th>Waktu</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal fade" id="modalFilter">
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">Filter</h5>
|
||||
<a href="javascript:void(0);" class="close" data-bs-dismiss="modal" aria-label="Close">
|
||||
<em class="icon ni ni-cross"></em>
|
||||
</a>
|
||||
</div>
|
||||
<form action="{{route('dashboard.log.activity.index')}}" class="form-validate is-alter" method="get">
|
||||
<div class="modal-body">
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="year">Tahun</label>
|
||||
<div class="form-control-wrap">
|
||||
<input type="number" class="form-control" id="year" placeholder="Contoh: 2025" name="year" value="{{ old('year', $year ?? '') }}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group col-md-6">
|
||||
<label class="form-label" for="from_month">Dari Bulan</label>
|
||||
<div class="form-control-wrap">
|
||||
<input type="month" class="form-control" id="from_month" placeholder="Data berita pada bulan dan tahun" name="from_month" value="{{ old('from_month', $from_month ?? '') }}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group col-md-6">
|
||||
<label class="form-label" for="to_month">Sampai Bulan</label>
|
||||
<div class="form-control-wrap">
|
||||
<input type="month" class="form-control" id="to_month" placeholder="Data berita pada bulan dan tahun" name="to_month" value="{{ old('to_month', $to_month ?? '') }}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="date">Tanggal</label>
|
||||
<div class="form-control-wrap">
|
||||
<input type="date" class="form-control" id="date" placeholder="Data berita pada bulan dan tahun" name="date" value="{{ old('date', $date ?? '') }}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-label">Aksi</label>
|
||||
<div class="form-control-wrap">
|
||||
<select class="form-select js-select2" name="status">
|
||||
<option value="all" selected>Semua</option>
|
||||
<option value="created" @selected($event === 'created')>Menambahkan</option>
|
||||
<option value="updated" @selected($event === 'updated')>Mengedit</option>
|
||||
<option value="deleted" @selected($event === 'deleted')>Menghapus</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer bg-light">
|
||||
<span class="sub-text">
|
||||
<button type="submit" class="btn btn-sm btn-primary">Filter</button>
|
||||
</span>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- content @e -->
|
||||
@include('partials.dashboard.footer' ,['datatable' => 'log_activity'])
|
||||
98
resources/views/dashboard/log-activities/show.blade.php
Normal file
98
resources/views/dashboard/log-activities/show.blade.php
Normal file
@ -0,0 +1,98 @@
|
||||
@include('partials.dashboard.head')
|
||||
@include('partials.dashboard.sidebar', ['page' => 'log_activities'])
|
||||
@include('partials.dashboard.header')
|
||||
<!-- content @s -->
|
||||
<div class="nk-content ">
|
||||
<div class="container-fluid">
|
||||
<div class="nk-content-inner">
|
||||
<div class="nk-content-body">
|
||||
<div class="nk-block-head nk-block-head-sm">
|
||||
<div class="nk-block-between g-3">
|
||||
<div class="nk-block-head-content">
|
||||
<h3 class="nk-block-title page-title">Detail Log Aktivitas</h3>
|
||||
<div class="nk-block-des text-soft">
|
||||
<ul class="list-inline">
|
||||
<li>Detail log dapat dilihat di sini.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="nk-block-head-content">
|
||||
<a href="{{route('dashboard.log.activity.index')}}" class="btn btn-outline-light bg-white d-none d-sm-inline-flex"><em class="icon ni ni-arrow-left"></em><span>Kembali</span></a>
|
||||
<a href="{{route('dashboard.log.activity.index')}}" class="btn btn-icon btn-outline-light bg-white d-inline-flex d-sm-none"><em class="icon ni ni-arrow-left"></em></a>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- .nk-block-head -->
|
||||
<div class="nk-block nk-block-lg">
|
||||
<div class="card">
|
||||
<div class="card-aside-wrap">
|
||||
<div class="card-content">
|
||||
<ul class="nav nav-tabs nav-tabs-mb-icon nav-tabs-card">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link text-primary" href="javascript:void(0);"><em class="icon ni ni-info"></em><span>Detail Informasi</span></a>
|
||||
</li>
|
||||
</ul><!-- .nav-tabs -->
|
||||
<div class="card-inner">
|
||||
<div class="nk-block">
|
||||
{{-- <div class="nk-block-head">
|
||||
<h5 class="title">Personal Information</h5>
|
||||
<p>Basic info, like your name and address, that you use on Nio Platform.</p>
|
||||
</div> --}}
|
||||
<div class="profile-ud-list">
|
||||
<div class="profile-ud-item">
|
||||
<div class="profile-ud wider">
|
||||
<span class="profile-ud-label">Aksi</span>
|
||||
@if ($log->event === 'created')
|
||||
<span class="profile-ud-value"><span class="badge bg-primary">Membuat</span></span>
|
||||
@elseif ($log->event === 'updated')
|
||||
<span class="profile-ud-value"><span class="badge bg-warning">Mengubah</span></span>
|
||||
@elseif ($log->event === 'deleted')
|
||||
<span class="profile-ud-value"><span class="badge bg-danger">Menghapus</span></span>
|
||||
@else
|
||||
<span class="profile-ud-value"><span class="badge bg-secondary">Tidak Diketahui</span></span>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
<div class="profile-ud-item">
|
||||
<div class="profile-ud wider">
|
||||
<span class="profile-ud-label">Tanggal</span>
|
||||
<span class="profile-ud-value">{{idn_date($log->created_at, 'l, d F Y')}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="profile-ud-item">
|
||||
<div class="profile-ud wider">
|
||||
<span class="profile-ud-label">Fitur/Data</span>
|
||||
<span class="profile-ud-value">{{get_activity_log_name($log->log_name)['name']}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="profile-ud-item">
|
||||
<div class="profile-ud wider">
|
||||
<span class="profile-ud-label">Oleh Pengguna</span>
|
||||
<span class="profile-ud-value">{{$log->causer->name}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- .profile-ud-list -->
|
||||
</div><!-- .nk-block -->
|
||||
{{-- <div class="nk-divider divider md"></div> --}}
|
||||
<div class="nk-block">
|
||||
<div class="nk-block-head nk-block-head-sm nk-block-between">
|
||||
<span class="profile-ud-label">Deskripsi</span>
|
||||
</div><!-- .nk-block-head -->
|
||||
<div class="bq-note">
|
||||
<div class="bq-note-item">
|
||||
<div class="bq-note-text">
|
||||
{!!$log->description ?? '-' !!}
|
||||
</div>
|
||||
</div><!-- .bq-note-item -->
|
||||
</div><!-- .bq-note -->
|
||||
</div><!-- .nk-block -->
|
||||
</div><!-- .card-inner -->
|
||||
</div><!-- .card-content -->
|
||||
</div><!-- .card-aside-wrap -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- content @e -->
|
||||
@include('partials.dashboard.footer', ['rich_editor' => false])
|
||||
@ -1456,3 +1456,41 @@
|
||||
});
|
||||
</script>
|
||||
@endif
|
||||
|
||||
@if ($datatable === 'log_activity')
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('#logActivitiesTable').DataTable({
|
||||
processing: true,
|
||||
serverSide: true,
|
||||
ajax: {
|
||||
url: '{{ route('dashboard.log.activity.data') }}',
|
||||
type: 'GET',
|
||||
data: function(d) {
|
||||
d.year = '{{ $year }}';
|
||||
d.from_month = '{{ $from_month }}';
|
||||
d.to_month = '{{ $to_month }}';
|
||||
d.date = '{{ $date }}';
|
||||
}
|
||||
},
|
||||
columns: [
|
||||
{ data: 'DT_RowIndex', name: 'DT_RowIndex', orderable: false, searchable: false },
|
||||
{ data: 'description', name: 'description' },
|
||||
{ data: 'causer', name: 'causer' },
|
||||
{ data: 'action_type', name: 'action_type' },
|
||||
{ data: 'time', name: 'time' },
|
||||
{ data: 'action', name: 'action' },
|
||||
{ data: 'created_at', name: 'created_at', visible: false },
|
||||
{ data: 'id', name: 'id', orderable: true, searchable: false, visible: false },
|
||||
],
|
||||
language: datatableLanguage,
|
||||
responsive: true,
|
||||
autoWidth: false,
|
||||
order: [[6, 'desc']],
|
||||
pagingType: "simple",
|
||||
lengthMenu: [[10, 25, 50, 100, -1], ['Tampilkan 10 data', 'Tampilkan 25 data', 'Tampilkan 50 data', 'Tampilkan 100 data', 'Tampilkan semua']],
|
||||
scrollX: true
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endif
|
||||
|
||||
@ -225,7 +225,7 @@
|
||||
</li><!-- .nk-menu-item -->
|
||||
<li class="nk-menu-item">
|
||||
<a href="{{route('dashboard.login.history.index')}}" class="nk-menu-link {{$page === 'login_histories' ? 'active-page' : ''}}">
|
||||
<span class="nk-menu-icon"><em class="icon ni ni-activity"></em></span>
|
||||
<span class="nk-menu-icon"><em class="icon ni ni-activity-alt"></em></span>
|
||||
<span class="nk-menu-text">Aktivitas Login</span>
|
||||
</a>
|
||||
</li><!-- .nk-menu-item -->
|
||||
@ -238,6 +238,12 @@
|
||||
<span class="nk-menu-text">Pengaturan</span>
|
||||
</a>
|
||||
</li><!-- .nk-menu-item -->
|
||||
<li class="nk-menu-item">
|
||||
<a href="{{route('dashboard.log.activity.index')}}" class="nk-menu-link {{$page === 'log_activities' ? 'active-page' : ''}}">
|
||||
<span class="nk-menu-icon"><em class="icon ni ni-activity"></em></span>
|
||||
<span class="nk-menu-text">Log Aktivitas</span>
|
||||
</a>
|
||||
</li><!-- .nk-menu-item -->
|
||||
@endif
|
||||
</ul><!-- .nk-menu -->
|
||||
</div><!-- .nk-sidebar-menu -->
|
||||
|
||||
@ -16,6 +16,7 @@
|
||||
use App\Http\Controllers\Dashboard\IssueManagementController;
|
||||
use App\Http\Controllers\Dashboard\JournalistController;
|
||||
use App\Http\Controllers\Dashboard\LocationController;
|
||||
use App\Http\Controllers\Dashboard\LogActivityController;
|
||||
use App\Http\Controllers\Dashboard\LoginHistoryController;
|
||||
use App\Http\Controllers\Dashboard\MediaController;
|
||||
use App\Http\Controllers\Dashboard\MediaCooperationController;
|
||||
@ -667,5 +668,16 @@
|
||||
Route::get('/data', [DatatableController::class, 'loginHistory'])->name('data');
|
||||
});
|
||||
});
|
||||
|
||||
Route::middleware('role:1')->group(function(): void{
|
||||
Route::prefix('log-activities')->name('log.activity.')->group(function(){
|
||||
Route::controller(LogActivityController::class)->group(function(){
|
||||
Route::get('/', 'index')->name('index');
|
||||
Route::get('{id}/show', 'show')->name('show');
|
||||
});
|
||||
|
||||
Route::get('/data', [DatatableController::class, 'logActivity'])->name('data');
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Loading…
Reference in New Issue
Block a user