From 0f88017a2a18c2ff6f36d2c3710f258938679d4f Mon Sep 17 00:00:00 2001 From: myuqinurrohman Date: Thu, 6 Mar 2025 10:27:43 +0700 Subject: [PATCH] feat: media display and detail --- .../Dashboard/CompanyController.php | 2 +- .../Dashboard/DatatableController.php | 93 ++++++++++++ .../Controllers/Dashboard/MediaController.php | 35 +++++ app/Models/Legacy/OldMedia.php | 12 ++ app/Models/Media.php | 3 + .../2025_02_25_024752_create_media_table.php | 13 +- database/seeders/DatabaseSeeder.php | 1 + database/seeders/MediaSeeder.php | 24 +++- database/seeders/UserSeeder.php | 10 +- public/assets/dashboard/css/custom.css | 7 + .../{detail.blade.php => show.blade.php} | 0 .../views/dashboard/media/index.blade.php | 67 +++++++++ .../views/dashboard/media/show.blade.php | 136 ++++++++++++++++++ .../views/partials/app/datatable.blade.php | 36 ++++- .../views/partials/dashboard/footer.blade.php | 4 + .../partials/dashboard/sidebar.blade.php | 2 +- routes/web.php | 15 ++ 17 files changed, 449 insertions(+), 11 deletions(-) create mode 100644 app/Http/Controllers/Dashboard/MediaController.php create mode 100644 app/Models/Legacy/OldMedia.php rename resources/views/dashboard/companies/{detail.blade.php => show.blade.php} (100%) create mode 100644 resources/views/dashboard/media/index.blade.php create mode 100644 resources/views/dashboard/media/show.blade.php diff --git a/app/Http/Controllers/Dashboard/CompanyController.php b/app/Http/Controllers/Dashboard/CompanyController.php index 3a42288..b6f28c9 100644 --- a/app/Http/Controllers/Dashboard/CompanyController.php +++ b/app/Http/Controllers/Dashboard/CompanyController.php @@ -25,7 +25,7 @@ public function update(){} public function show($id){ $company = Company::findOrFail(decrypt_id($id)); - return view('dashboard.companies.detail', [ + return view('dashboard.companies.show', [ 'title' => 'Detail Perusahaan', 'company' => $company ]); diff --git a/app/Http/Controllers/Dashboard/DatatableController.php b/app/Http/Controllers/Dashboard/DatatableController.php index 5605e55..9f482d2 100644 --- a/app/Http/Controllers/Dashboard/DatatableController.php +++ b/app/Http/Controllers/Dashboard/DatatableController.php @@ -10,6 +10,7 @@ use App\Models\GovernmentAgency; use App\Models\IssueManagement; use App\Models\Location; +use App\Models\Media; use App\Models\MediaMonitoring; use App\Models\News; use App\Models\Role; @@ -510,6 +511,98 @@ public function company(Request $request){ } + public function media(Request $request){ + if ($request->ajax()) { + + + + $data = Media::with(['company.user'])->get(); + + return DataTables::of($data) + ->addIndexColumn() + ->addColumn('media_name', function ($data) { + return $data->name; + }) + ->addColumn('company_name', function ($data) { + return $data->company->name; + }) + ->addColumn('type', function ($data) { + return ucfirst($data->type); + }) + ->addColumn('classification', function ($data) { + return ucfirst($data->classification); + }) + ->addColumn('link', function ($data) { + if($data->link){ + return ''.$data->link.''; + }else{ + return 'Tidak memiliki link'; + } + }) + ->addColumn('address', function ($data) { + return '
' . $data->address . '
'; + }) + ->addColumn('status', function ($data) { + switch($data->company->user->status){ + case 0: + return 'Menunggu'; + case 1: + return 'Diterima'; + case 2: + return 'Ditolak'; + case 3: + return 'Tidak Diketahui'; + } + }) + ->addColumn('status_edit', function ($data) { + switch($data->edit_status){ + case 0: + return 'Menunggu'; + case 1: + return 'Diterima'; + case 2: + return 'Ditolak'; + case 3: + return 'Tidak Diketahui'; + } + }) + ->addColumn('action', function ($data) { + $showUrl = route('dashboard.media.show', ['id' => encrypt_id($data->id)]); + + $editUrl = route('dashboard.media.edit', ['id' => encrypt_id($data->id)]); + + $deleteUrl = route('dashboard.media.destroy', ['id' => encrypt_id($data->id)]); + + $dropdown = ''; + + return $dropdown; + }) + + ->rawColumns(['link', 'address', 'status', 'status_edit', 'action']) + ->make(true); + } + + return response()->json(['error' => 'Unauthorized'], 401); + + } + public function contentRecap(Request $request){ if ($request->ajax()) { diff --git a/app/Http/Controllers/Dashboard/MediaController.php b/app/Http/Controllers/Dashboard/MediaController.php new file mode 100644 index 0000000..6d3148d --- /dev/null +++ b/app/Http/Controllers/Dashboard/MediaController.php @@ -0,0 +1,35 @@ + 'Media' + ]); + } + + public function create(){} + + public function store(){} + + public function edit(){} + + public function update(){} + + public function show($id){ + $media = Media::findOrFail(decrypt_id($id)); + + return view('dashboard.media.show', [ + 'title' => 'Detail media', + 'media' => $media + ]); + } + + public function destroy(){} +} diff --git a/app/Models/Legacy/OldMedia.php b/app/Models/Legacy/OldMedia.php new file mode 100644 index 0000000..cb0031c --- /dev/null +++ b/app/Models/Legacy/OldMedia.php @@ -0,0 +1,12 @@ +id(); $table->string('name'); $table->text('address'); - $table->string('link'); - $table->enum('type', ['online','print','radio','television']); - $table->enum('classification', ['local', 'regional', 'national']); - $table->string('journalism_organization'); + $table->string('link')->nullable(); + $table->enum('type', ['online','cetak','radio','televisi']); + $table->enum('classification', ['lokal', 'regional', 'nasional']); + $table->string('journalism_organization')->nullable(); $table->string('journalism_organization_doc')->nullable(); - $table->string('press_council_certificate'); + $table->string('press_council_certificate')->nullable(); $table->string('press_council_certificate_doc')->nullable(); + $table->string('edit_desscription')->nullable(); + $table->enum('edit_status', ['0', '1', '2', '3'])->default('0'); $table->unsignedBigInteger('company_id'); $table->foreign('company_id')->references('id')->on('companies'); $table->timestamps(); + $table->softDeletes(); }); } diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 12cca85..ea1ecd9 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -16,6 +16,7 @@ public function run(): void $this->call(RoleSeeder::class); $this->call(UserSeeder::class); $this->call(CompanySeeder::class); + $this->call(MediaSeeder::class); $this->call(ClassificationSeeder::class); $this->call(SubClassificationSeeder::class); $this->call(GovernmentAgencySeeder::class); diff --git a/database/seeders/MediaSeeder.php b/database/seeders/MediaSeeder.php index 7ea75cf..6c42c78 100644 --- a/database/seeders/MediaSeeder.php +++ b/database/seeders/MediaSeeder.php @@ -2,6 +2,8 @@ namespace Database\Seeders; +use App\Models\Legacy\OldMedia; +use App\Models\Media; use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; @@ -12,6 +14,26 @@ class MediaSeeder extends Seeder */ public function run(): void { - // + $legacyMedia = OldMedia::all(); + + foreach($legacyMedia as $item){ + + Media::create([ + 'id' => $item->id, + 'name' => $item->name, + 'address' => $item->address, + 'link' => $item->link, + 'type' => $item->type, + 'classification' => $item->classification == 'undefined' ? 'nasional' : $item->classification, + 'journalism_organization' => $item->organization, + 'journalism_organization_doc' => $item->doc_of_organization, + 'press_council_certificate' => $item->certificate, + 'press_council_certificate_doc' => $item->doc_of_certificate, + 'company_id' => $item->company, + 'created_at' => $item->created_at, + 'updated_at' => $item->updated_at, + 'deleted_at' => $item->deleted_at, + ]); + } } } diff --git a/database/seeders/UserSeeder.php b/database/seeders/UserSeeder.php index a1d12bb..001aca0 100644 --- a/database/seeders/UserSeeder.php +++ b/database/seeders/UserSeeder.php @@ -23,7 +23,7 @@ public function run(): void 'id' => $legacyUser->id, 'name' => $legacyUser->name, 'email' => $legacyUser->email, - 'password' => "Rahasia123@", + 'password' => $legacyUser->password, 'status' => $legacyUser->status, 'role_id' => $legacyUser->role, 'created_at' => $legacyUser->created_at, @@ -39,5 +39,13 @@ public function run(): void 'status' => '1', 'role_id' => '1' ]); + + User::find(117)->update([ + 'password' => 'Rahasia123@' + ]); + + User::find(232)->update([ + 'password' => 'Rahasia123@' + ]); } } diff --git a/public/assets/dashboard/css/custom.css b/public/assets/dashboard/css/custom.css index 384f81a..9f6f21a 100644 --- a/public/assets/dashboard/css/custom.css +++ b/public/assets/dashboard/css/custom.css @@ -80,3 +80,10 @@ .news-content{ padding: 0.7rem; border-radius: 0.4rem; } + +.custom-loader { + text-align: center; + font-size: 16px; + font-weight: bold; + color: #007bff; +} diff --git a/resources/views/dashboard/companies/detail.blade.php b/resources/views/dashboard/companies/show.blade.php similarity index 100% rename from resources/views/dashboard/companies/detail.blade.php rename to resources/views/dashboard/companies/show.blade.php diff --git a/resources/views/dashboard/media/index.blade.php b/resources/views/dashboard/media/index.blade.php new file mode 100644 index 0000000..c741b1b --- /dev/null +++ b/resources/views/dashboard/media/index.blade.php @@ -0,0 +1,67 @@ +@include('partials.dashboard.head') +@include('partials.dashboard.sidebar', ['page' => 'media']) +@include('partials.dashboard.header') + +
+
+
+
+
+
+
+

{{$title}}

+
+ {{--
+
+ +
+ +
+
+
--}} +
+
+
+
+
+
+ + + + + + + + + + + + + + + +
NoNama MediaPerusahaanJenisKlasifikasiLinkAlamatStatusStatus Edit
+
+
+
+
+
+
+
+
+ +@include('partials.dashboard.footer' ,['datatable' => 'media']) diff --git a/resources/views/dashboard/media/show.blade.php b/resources/views/dashboard/media/show.blade.php new file mode 100644 index 0000000..6110eb0 --- /dev/null +++ b/resources/views/dashboard/media/show.blade.php @@ -0,0 +1,136 @@ +@include('partials.dashboard.head') +@include('partials.dashboard.sidebar', ['page' => 'media']) +@include('partials.dashboard.header') + +
+
+
+
+
+
+
+
+ +
+
+ {{--
+
Personal Information
+

Basic info, like your name and address, that you use on Nio Platform.

+
--}} +
+
+
+ Nama Media + {{$media->name}} +
+
+
+
+ Jenis + {{ucfirst($media->type)}} +
+
+
+
+ Klasifikasi + {{ucfirst($media->classification)}} +
+
+
+
+ Alamat + {{$media->address}} +
+
+
+
+ Organisasi Kewartawanan + + @if ($media->journalism_organization_doc) + {{$media->journalism_organization}} + @else + {{$media->journalism_organization ?? '-'}} + @endif + +
+
+
+
+ Sertifikat Dewan Press + + @if ($media->press_council_certificate_doc) + {{$media->press_council_certificate}} + @else + {{$media->press_council_certificate ?? '-'}} + @endif + +
+
+
+
+ Status + @switch($media->company->user->status) + @case(0) + Menunggu + @break + @case(1) + Diterima + @break + @case(2) + Ditolak + @break + @default + Tidak Diketahui + @endswitch +
+ +
+
+
+ {{--
--}} + {{-- @if (filled($media->rejection_reason)) +
+
+ Alasan Penolakan +
+
+
+
+ {!!$company->rejection_reason ?? '-' !!} +
+
+
+
+ @endif --}} + {{--
+
+ Konten +
+
+
+
+ {!!$mediaMonitoring->content!!} +
+
+
+
--}} +
+
+ Kembali + {{-- Ubah --}} +
+
+
+
+
+
+
+
+
+
+ +@include('partials.dashboard.footer', ['rich_editor' => false]) diff --git a/resources/views/partials/app/datatable.blade.php b/resources/views/partials/app/datatable.blade.php index 25b1808..14fb53b 100644 --- a/resources/views/partials/app/datatable.blade.php +++ b/resources/views/partials/app/datatable.blade.php @@ -16,7 +16,8 @@ }, processing: '
Loading...
', emptyTable: "Tidak ada data tersedia", - zeroRecords: "Tidak ditemukan data yang sesuai" + zeroRecords: "Tidak ditemukan data yang sesuai", + processing: '
Memuat data...
' }; @@ -224,7 +225,38 @@ ], language: datatableLanguage, autoWidth: false, - order: [[3, 'desc']], + order: [[10, 'desc']], + pagingType: "simple", + lengthMenu: [[10, 25, 50, 100, -1], ['Tampilkan 10 data', 'Tampilkan 25 data', 'Tampilkan 50 data', 'Tampilkan 100 data', 'Tampilkan semua']] + }); + }); + +@endif + +@if ($datatable === 'media') +