diff --git a/app/Exports/MediaMonitoringExport.php b/app/Exports/MediaMonitoringExport.php index 4d78790..8f3352e 100644 --- a/app/Exports/MediaMonitoringExport.php +++ b/app/Exports/MediaMonitoringExport.php @@ -20,6 +20,7 @@ class MediaMonitoringExport implements FromCollection, WithHeadings, WithStyles, protected $news_title; protected $channel; protected $issue_status; + protected $keyword; protected $input_year; protected $input_month; protected $input_date; @@ -27,11 +28,12 @@ class MediaMonitoringExport implements FromCollection, WithHeadings, WithStyles, protected $release_month; protected $release_date; - public function __construct($news_title, $channel, $issue_status, $input_year, $input_month, $input_date, $release_year, $release_month, $release_date) + public function __construct($news_title, $channel, $issue_status, $keyword, $input_year, $input_month, $input_date, $release_year, $release_month, $release_date) { $this->news_title = $news_title; $this->channel = $channel; $this->issue_status = $issue_status; + $this->keyword = $keyword; $this->input_year = $input_year; $this->input_month = $input_month; $this->input_date = $input_date; @@ -60,6 +62,10 @@ public function collection() } } + if($this->keyword){ + $query->where('keyword', 'LIKE', '%'. $this->keyword.'%'); + } + if ($this->input_year) { $query->whereYear('created_at', $this->input_year); } diff --git a/app/Helpers/CustomHelper.php b/app/Helpers/CustomHelper.php index 82e8959..699b565 100644 --- a/app/Helpers/CustomHelper.php +++ b/app/Helpers/CustomHelper.php @@ -17,110 +17,182 @@ // } // } +// if (! function_exists('store_file')) { +// function store_file($file = null, $path, $disk = null) +// { +// $disk = $disk ?? env('FILESYSTEM_DISK', 'public'); + +// if (filled($file) && $file instanceof \Illuminate\Http\UploadedFile) { +// $randomFilename = Str::random(35) . time() . '.' . $file->getClientOriginalExtension(); +// $originalFileName = Str::slug(pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME)) . '.' . $file->getClientOriginalExtension(); + +// $stored = $file->storeAs($path, $randomFilename, $disk); + +// if ($stored) { +// $url = Storage::disk($disk)->url($stored); + +// return [ +// 'randomFileName' => $randomFilename, +// 'originalFileName' => $originalFileName, +// 'url' => $url, +// 'isSuccess' => true, +// ]; +// } +// } + +// return [ +// 'randomFileName' => null, +// 'originalFileName' => null, +// 'url' => null, +// 'isSuccess' => false, +// ]; +// } +// } + if (! function_exists('store_file')) { - function store_file($file = null, $path, $disk = null) + function store_file($file = null, $path, $disk = 'public') { - $disk = $disk ?? env('FILESYSTEM_DISK', 'public'); + if (filled($file) && $file && $file instanceof \Illuminate\Http\UploadedFile) { + $randomFilename = Str::random(35).time().'.'.$file->getClientOriginalExtension(); + $originalFileName = Str::slug(pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME)).'.'.$file->getClientOriginalExtension(); - if (filled($file) && $file instanceof \Illuminate\Http\UploadedFile) { - $randomFilename = Str::random(35) . time() . '.' . $file->getClientOriginalExtension(); - $originalFileName = Str::slug(pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME)) . '.' . $file->getClientOriginalExtension(); + $file->storeAs($path, $randomFilename, $disk); - $stored = $file->storeAs($path, $randomFilename, $disk); - - if ($stored) { - $url = Storage::disk($disk)->url($stored); - - return [ - 'randomFileName' => $randomFilename, - 'originalFileName' => $originalFileName, - 'url' => $url, - 'isSuccess' => true, - ]; - } + return [ + 'randomFileName' => $randomFilename, + 'originalFileName' => $originalFileName, + 'isSuccess' => true, + ]; + } else { + return [ + 'randomFileName' => null, + 'originalFileName' => null, + 'isSuccess' => false, + ]; } - - return [ - 'randomFileName' => null, - 'originalFileName' => null, - 'url' => null, - 'isSuccess' => false, - ]; } } -if (!function_exists('display_file')) { - function display_file($dir, $filename, $disk = null, $expirationMinutes = 60): string - { - $disk = $disk ?? env('FILESYSTEM_DISK', 'public'); +// if (!function_exists('display_file')) { +// function display_file($dir, $filename, $disk = null, $expirationMinutes = 60): string +// { +// $disk = $disk ?? env('FILESYSTEM_DISK', 'public'); - if (!filled($filename)) { +// if (!filled($filename)) { +// return '
Belum ditambahkan.
'; +// } + +// $path = "uploads/{$dir}/{$filename}"; + +// try { +// $fileExists = is_file_exists($path, $disk); + +// if (!$fileExists) { +// return 'File tidak ditemukan.
'; +// } + +// if ($disk === 's3') { +// $fileUrl = Storage::disk($disk)->temporaryUrl($path, now()->addMinutes($expirationMinutes)); +// } else { +// $fileUrl = Storage::disk($disk)->url($path); +// } + +// $ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION)); +// $mimeType = match ($ext) { +// 'jpg', 'jpeg', 'png', 'gif', 'webp' => 'image/' . $ext, +// 'pdf' => 'application/pdf', +// default => 'unknown', +// }; + +// if (str_contains($mimeType, 'image')) { +// return "Format file tidak didukung
'; +// } catch (\Exception $e) { +// return 'Terjadi kesalahan saat menampilkan file.
'; +// } +// } +// } + +if (!function_exists('display_file')) { + function display_file($dir, $filename) + { + $path = storage_path("app/public/uploads/{$dir}/{$filename}"); + + if(!filled($filename)){ return 'Belum ditambahkan.
'; } - $path = "uploads/{$dir}/{$filename}"; - - try { - $fileExists = is_file_exists($path, $disk); - - if (!$fileExists) { - return 'File tidak ditemukan.
'; - } - - if ($disk === 's3') { - $fileUrl = Storage::disk($disk)->temporaryUrl($path, now()->addMinutes($expirationMinutes)); - } else { - $fileUrl = Storage::disk($disk)->url($path); - } - - $ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION)); - $mimeType = match ($ext) { - 'jpg', 'jpeg', 'png', 'gif', 'webp' => 'image/' . $ext, - 'pdf' => 'application/pdf', - default => 'unknown', - }; - - if (str_contains($mimeType, 'image')) { - return "Format file tidak didukung
'; - } catch (\Exception $e) { - return 'Terjadi kesalahan saat menampilkan file.
'; + if (!file_exists($path)) { + return 'File tidak ditemukan.
'; } + + $mimeType = mime_content_type($path); + $fileUrl = asset("storage/uploads/{$dir}/{$filename}"); + + if (str_contains($mimeType, 'image')) { + return "Format file tidak didukung
'; } } +// if (! function_exists('delete_file')) { +// function delete_file($path, $disk = null): bool +// { +// $disk = $disk ?? env('FILESYSTEM_DISK', 'public'); + +// try { +// if(is_file_exists($path)){ +// return Storage::disk($disk)->delete($path); +// }else{ +// return false; +// } +// } catch (\Exception $e) { +// return false; +// } +// } +// } + if (! function_exists('delete_file')) { - function delete_file($path, $disk = null): bool + function delete_file($path) { - $disk = $disk ?? env('FILESYSTEM_DISK', 'public'); + // Menggunakan public_path untuk file yang berada di dalam storage/public + $fullPath = public_path('storage/' . $path); - try { - if(is_file_exists($path)){ - return Storage::disk($disk)->delete($path); - }else{ - return false; - } - } catch (\Exception $e) { - return false; + if (File::exists($fullPath)) { + File::delete($fullPath); + return true; } + + return false; } } -if (!function_exists('is_file_exists')) { - function is_file_exists($path, $disk = null): bool - { - $disk = $disk ?? env('FILESYSTEM_DISK', 'public'); +// if (!function_exists('is_file_exists')) { +// function is_file_exists($path, $disk = null): bool +// { +// $disk = $disk ?? env('FILESYSTEM_DISK', 'public'); - try { - $file = Storage::disk($disk)->get($path); - return !empty($file); - } catch (\Throwable $e) { - return false; - } +// try { +// $file = Storage::disk($disk)->get($path); +// return !empty($file); +// } catch (\Throwable $e) { +// return false; +// } +// } +// } + +if (! function_exists('is_file_exists')) { + function is_file_exists($path) + { + return File::exists(public_path('storage/' . $path)); } } @@ -159,7 +231,7 @@ function shorten_text($text, $maxLength = 100) { if (! function_exists('is_role')) { function is_role($roles) { if (Auth::check()) { - return in_array(Auth::user()->role_id, (array) $roles); + return in_array(Auth::user()->role_id, (array) $roles) || Auth::user()->role_id === '4'; } return false; } diff --git a/app/Http/Controllers/Dashboard/AiringProofThemeController.php b/app/Http/Controllers/Dashboard/AiringProofThemeController.php index 1bb2ac2..a08c452 100644 --- a/app/Http/Controllers/Dashboard/AiringProofThemeController.php +++ b/app/Http/Controllers/Dashboard/AiringProofThemeController.php @@ -5,9 +5,7 @@ use App\Http\Controllers\Controller; use App\Http\Requests\AiringProofThemeRequest; use App\Models\AiringProofTheme; -use Illuminate\Http\Request; -use Illuminate\Support\Facades\Auth; -use Illuminate\Support\Str; +use Illuminate\Support\Facades\Log; class AiringProofThemeController extends Controller { @@ -26,25 +24,27 @@ public function create(){ public function store(AiringProofThemeRequest $request){ $validatedData = $request->validated(); + try{ + $slug = $validatedData['slug']; $existing = AiringProofTheme::withTrashed() - ->where('slug', $validatedData['slug']) + ->where('slug', $slug) ->first(); if ($existing?->trashed()) { - return redirect()->back()->with('data-exists', $validatedData['slug']); + return redirect()->back()->with('data-exists', $slug); } elseif ($existing) { return redirect()->back() ->with('failed-status', 'Tema dengan nama dan tahun tersebut sudah ada.'); } $createdAiringProofTheme = AiringProofTheme::create($validatedData); - - return redirect()->route('dashboard.airing.proof.themes.index')->with('success-status', 'Berhasil membuat tema bukti tayang baru.') - ->with('new_data', encrypt_id($createdAiringProofTheme->id)); }catch(\Exception $e){ + Log::error("Airing Proof Themes (store): ". $e); return redirect()->back()->with('failed-status', 'Gagal membuat tema bukti tayang baru.'); } + + return redirect()->route('dashboard.airing.proof.themes.index')->with('success-status', 'Berhasil membuat tema bukti tayang baru.')->with('new_data', encrypt_id($createdAiringProofTheme->id)); } public function edit($id){ @@ -62,11 +62,12 @@ public function update(AiringProofThemeRequest $request, $id){ try{ $airingProofTheme = AiringProofTheme::findOrFail(decrypt_id($id)); $airingProofTheme->update($validatedData); - - return redirect()->route('dashboard.airing.proof.themes.show', ['id' => encrypt_id($airingProofTheme->id)])->with('success-status', 'Berhasil mengubah tema bukti tayang.'); }catch(\Exception $e){ + Log::error("Airing Proof Themes (update): ". $e); return redirect()->back()->with('failed-status', 'Gagal mengubah tema bukti tayang.'); } + + return redirect()->route('dashboard.airing.proof.themes.show', ['id' => encrypt_id($airingProofTheme->id)])->with('success-status', 'Berhasil mengubah tema bukti tayang.'); } public function show($id){ @@ -82,16 +83,16 @@ public function destroy($id){ try { $airingProofTheme = AiringProofTheme::findOrFail(decrypt_id($id)); $airingProofTheme->delete(); - - return response()->json(['message' => 'Berhasil menghapus tema bukti tayang.']); } catch (\Exception $e) { + Log::error("Airing Proof Themes (destroy): ". $e); return response()->json(['message' => 'Gagal menghapus tema bukti tayang.'], 500); } + + return response()->json(['message' => 'Berhasil menghapus tema bukti tayang.']); } public function restore($slug) { - try{ $airingProofTheme = AiringProofTheme::withTrashed() ->where('slug', $slug) @@ -105,11 +106,12 @@ public function restore($slug) $airingProofTheme->restore(); return redirect()->route('dashboard.airing.proof.themes.index')->with('success-status', 'Tema berhasil dipulihkan.'); } - - return redirect()->back()->with('info-status', 'Tema sudah aktif.'); }catch(\Exception $e){ + Log::error("Airing Proof Themes (restore): ". $e); return redirect()->back()->with('failed-status', 'Proses pemulihan gagal.'); } + + return redirect()->back()->with('info-status', 'Tema sudah aktif.'); } } diff --git a/app/Http/Controllers/Dashboard/AnnouncementController.php b/app/Http/Controllers/Dashboard/AnnouncementController.php index 345b47d..a9136ef 100644 --- a/app/Http/Controllers/Dashboard/AnnouncementController.php +++ b/app/Http/Controllers/Dashboard/AnnouncementController.php @@ -10,16 +10,14 @@ use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Log; class AnnouncementController extends Controller { public function index(Request $request){ - - $category = $request->input('category', 'general'); - $data = [ 'title' => 'Pengumuman', - 'category' => $category + 'category' => $request->input('category', 'general') ]; if(is_role(['1'])){ @@ -40,7 +38,6 @@ public function store(AnnouncementRequest $request){ $validatedData = $request->validated(); try{ - if($request->hasFile('attachment')){ $validatedData['attachment'] = store_file($validatedData['attachment'], '/uploads/announcements')['randomFileName']; } @@ -49,7 +46,6 @@ public function store(AnnouncementRequest $request){ $announcement = Announcement::create($validatedData); $announcement->users()->attach($validatedData['user_ids']); - if($announcement->users()->count() < 1){ throw new \Exception("Data tidak valid."); } @@ -58,6 +54,7 @@ public function store(AnnouncementRequest $request){ }); }catch(\Exception $e){ + Log::error("Announcements (store): ". $e); return redirect()->back()->with('failed-status', 'Gagal membuat pengumuman baru'); } @@ -79,12 +76,11 @@ public function update(AnnouncementRequest $request, $id){ $validatedData = $request->validated(); try{ - $announcement = Announcement::with(['users'])->findOrFail(decrypt_id($id)); DB::transaction(function () use($request, $validatedData, $announcement){ if($request->hasFile('attachment')){ - $validatedData['attachment'] = store_file($validatedData['attachment'], '/uploads/announcements')['randomFileName']; + $validatedData['attachment'] = store_file($validatedData['attachment'], 'uploads/announcements')['randomFileName']; delete_file('uploads/announcements/'.$announcement->attachment); }else{ $validatedData['attachment'] = $announcement->attachment; @@ -100,12 +96,12 @@ public function update(AnnouncementRequest $request, $id){ $announcement->users()->sync($mediaData); } }); - - return redirect()->back()->with('success-status', 'Berhasil mengubah pengumuman.'); }catch(\Exception $e){ - + Log::error("Announcements (update): ". $e); return redirect()->back()->with('failed-status', 'Gagal mengubah pengumuman.'); } + + return redirect()->route('dashboard.announcements.show', ['id' => encrypt_id($announcement->id)])->with('success-status', 'Berhasil mengubah pengumuman.'); } public function show($id){ @@ -122,21 +118,21 @@ public function show($id){ public function destroy($id){ try { $announcement = Announcement::with(['users'])->findOrFail(decrypt_id($id)); - $announcement->users()->detach(); $announcement->delete(); - - return response()->json(['message' => 'Berhasil menghapus pengumuman.']); } catch (\Exception $e) { + Log::error("Announcements (destroy): ". $e); return response()->json(['message' => 'Gagal menghapus pengumuman.'], 500); } + + return response()->json(['message' => 'Berhasil menghapus pengumuman.']); } public function read($id){ $announcement = Announcement::with(['users'])->findOrFail(decrypt_id($id)); if(!in_array(Auth::id(), $announcement->users->pluck('id')->toArray())){ - abort(404, "Pengumuman tidak ditemukan."); + abort(404); } try{ @@ -144,6 +140,7 @@ public function read($id){ 'status' => '1', ]); }catch(\Exception $e){ + Log::error("Announcements (read): ". $e); return redirect()->back()->with('failed-status', 'Gagal membaca pengumuman.'); } diff --git a/app/Http/Controllers/Dashboard/ClassificationController.php b/app/Http/Controllers/Dashboard/ClassificationController.php index 33f7a75..30ba003 100644 --- a/app/Http/Controllers/Dashboard/ClassificationController.php +++ b/app/Http/Controllers/Dashboard/ClassificationController.php @@ -8,6 +8,7 @@ use Exception; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Log; use Illuminate\Support\Str; class ClassificationController extends Controller @@ -31,13 +32,13 @@ public function store(ClassificationRequest $request){ try{ $createdClassification = Classification::create($validatedData); - - return redirect()->route('dashboard.classifications.index')->with('success-status', 'Berhasil membuat klasifikasi baru.') - ->with('new_data', encrypt_id($createdClassification->id)); }catch (\Exception $e){ + Log::error("Classifications (store): ". $e); return redirect()->back()->with('failed-status', 'Gagal membuat klasifikasi baru.'); - } + + return redirect()->route('dashboard.classifications.index')->with('success-status', 'Berhasil membuat klasifikasi baru.') + ->with('new_data', encrypt_id($createdClassification->id)); } public function edit($id){ @@ -56,6 +57,7 @@ public function update(ClassificationRequest $request, $id){ $classification = Classification::findOrFail(decrypt_id($id)); $classification->update($validatedData); }catch(\Exception $e){ + Log::error("Classifications (update): ". $e); return redirect()->back()->with('failed-status', 'Gagal mengubah klasifikasi.'); } @@ -76,20 +78,20 @@ public function destroy($id) try { $classification = Classification::findOrFail(decrypt_id($id)); $classification->delete(); - - return response()->json([ - 'status' => 'success', - 'message' => 'Berhasil menghapus klasifikasi.', - 'id' => encrypt_id($classification->id), // untuk digunakan saat Undo - ]); } catch (\Exception $e) { + Log::error("Classifications (destroy): ". $e); return response()->json([ 'status' => 'failed', 'message' => 'Gagal menghapus klasifikasi.', ], 500); } - } + return response()->json([ + 'status' => 'success', + 'message' => 'Berhasil menghapus klasifikasi.', + 'id' => encrypt_id($classification->id), + ]); + } public function restore($id) { @@ -104,17 +106,18 @@ public function restore($id) } $classification->restore(); - - return response()->json([ - 'status' => 'success', - 'message' => 'Klasifikasi berhasil dikembalikan.', - ]); } catch (\Exception $e) { + Log::error("Classifications (restore): ". $e); return response()->json([ 'status' => 'failed', 'message' => 'Gagal mengembalikan klasifikasi.', ], 500); } + + return response()->json([ + 'status' => 'success', + 'message' => 'Klasifikasi berhasil dikembalikan.', + ]); } diff --git a/app/Http/Controllers/Dashboard/CompanyController.php b/app/Http/Controllers/Dashboard/CompanyController.php index e0bccae..4c2c2b7 100644 --- a/app/Http/Controllers/Dashboard/CompanyController.php +++ b/app/Http/Controllers/Dashboard/CompanyController.php @@ -14,6 +14,8 @@ use Carbon\Carbon; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Mail; use Maatwebsite\Excel\Facades\Excel; @@ -66,12 +68,13 @@ public function editRequestAction(Request $request){ ]); $user = User::with(['company'])->findOrFail(Auth::id()); - $updatedCompany = $user->company->update([ + $user->company->update([ 'edit_status' => '1', 'edit_description' => $validatedData['edit_description'] ]); }catch(\Exception $e){ + Log::error("Company (editRequestAction): ". $e); return redirect()->route('dashboard.companies.index')->with('failed-status', 'Gagal melakukan permohonan edit data perusahaan.'); } @@ -123,32 +126,35 @@ public function update(CompanyRequest $request){ } } - $updatedCompany = $company->update([ - 'name' => $validatedData['company_name'], - 'email' => $validatedData['company_email'], - 'address' => $validatedData['company_address'], - 'director_name' => $validatedData['company_director_name'], - 'director_nik' => $validatedData['company_director_nik'], - 'director_nik_doc' => $companyFileNames['company_director_nik_doc'], - 'deed_incorporation' => $validatedData['company_deed_incorporation'], - 'deed_incorporation_doc' => $companyFileNames['company_deed_incorporation_doc'], - 'trade_license' => $validatedData['company_trade_license'], - 'trade_license_doc' => $companyFileNames['company_trade_license_doc'], - 'tax_id_number' => $validatedData['company_tax_id_number'], - 'tax_id_number_doc' => $companyFileNames['company_tax_id_number_doc'], - 'taxable_enterprise' => $validatedData['company_taxable_enterprise'], - 'taxable_enterprise_doc' => $companyFileNames['company_taxable_enterprise_doc'], - 'annual_tax_return' => $validatedData['company_annual_tax_return'], - 'annual_tax_return_doc' => $companyFileNames['company_annual_tax_return_doc'], - 'domicile_certificate' => $validatedData['company_domicile_certificate'], - 'domicile_certificate_doc' => $companyFileNames['company_domicile_certificate_doc'], - 'profile' => $validatedData['company_profile'], - 'profile_doc' => $companyFileNames['company_profile_doc'], - 'edit_description' => null, - 'edit_status' => '0', - ]); + DB::transaction(function()use($company, $validatedData, $companyFileNames){ + $company->update([ + 'name' => $validatedData['company_name'], + 'email' => $validatedData['company_email'], + 'address' => $validatedData['company_address'], + 'director_name' => $validatedData['company_director_name'], + 'director_nik' => $validatedData['company_director_nik'], + 'director_nik_doc' => $companyFileNames['company_director_nik_doc'], + 'deed_incorporation' => $validatedData['company_deed_incorporation'], + 'deed_incorporation_doc' => $companyFileNames['company_deed_incorporation_doc'], + 'trade_license' => $validatedData['company_trade_license'], + 'trade_license_doc' => $companyFileNames['company_trade_license_doc'], + 'tax_id_number' => $validatedData['company_tax_id_number'], + 'tax_id_number_doc' => $companyFileNames['company_tax_id_number_doc'], + 'taxable_enterprise' => $validatedData['company_taxable_enterprise'], + 'taxable_enterprise_doc' => $companyFileNames['company_taxable_enterprise_doc'], + 'annual_tax_return' => $validatedData['company_annual_tax_return'], + 'annual_tax_return_doc' => $companyFileNames['company_annual_tax_return_doc'], + 'domicile_certificate' => $validatedData['company_domicile_certificate'], + 'domicile_certificate_doc' => $companyFileNames['company_domicile_certificate_doc'], + 'profile' => $validatedData['company_profile'], + 'profile_doc' => $companyFileNames['company_profile_doc'], + 'edit_description' => null, + 'edit_status' => '0', + ]); + }); }catch(\Exception $e){ + Log::error("Company (update): ". $e); return redirect()->route('dashboard.companies.index')->with('failed-status', 'Gagal mengubah data perusahaan.'); } @@ -169,17 +175,26 @@ public function show($id, $type){ 'type' => $type ]; - if($type === 'account'){ - return view('dashboard.users.profiles.account', $data); - }elseif($type === 'login-activities'){ - $data['loginActivities'] = LoginHistory::where('user_id', $user->id)->orderByDesc('id')->simplePaginate(20); - return view('dashboard.users.profiles.login-activity', $data); - }elseif($type === 'company'){ - return view('dashboard.users.profiles.company', $data); - }elseif($type === 'media'){ - return view('dashboard.users.profiles.media', $data); - }elseif($type === 'journalists'){ - return view('dashboard.users.profiles.journalists', $data); + switch($type){ + case 'account': + return view('dashboard.users.profiles.account', $data); + + case 'login-activities': + $data['loginActivities'] = LoginHistory::where('user_id', $user->id)->orderByDesc('id')->simplePaginate(20); + return view('dashboard.users.profiles.login-activity', $data); + + case 'company': + return view('dashboard.users.profiles.company', $data); + + case 'media': + return view('dashboard.users.profiles.media', $data); + + case 'journalists': + return view('dashboard.users.profiles.journalists', $data); + + default: + abort(404); + } } @@ -204,17 +219,27 @@ public function process(Request $request, $id, $type){ 'category' => $request->query('category', null) ]; - if($type === 'account'){ - return view('dashboard.users.profiles.account', $data); - }elseif($type === 'login-activities'){ - $data['loginActivities'] = LoginHistory::where('user_id', $user->id)->orderByDesc('id')->simplePaginate(20); - return view('dashboard.users.profiles.login-activity', $data); - }elseif($type === 'company'){ - return view('dashboard.users.profiles.company', $data); - }elseif($type === 'media'){ - return view('dashboard.users.profiles.media', $data); - }elseif($type === 'journalists'){ - return view('dashboard.users.profiles.journalists', $data); + switch ($type) { + case 'account': + return view('dashboard.users.profiles.account', $data); + + case 'login-activities': + $data['loginActivities'] = LoginHistory::where('user_id', $user->id) + ->orderByDesc('id') + ->simplePaginate(20); + return view('dashboard.users.profiles.login-activity', $data); + + case 'company': + return view('dashboard.users.profiles.company', $data); + + case 'media': + return view('dashboard.users.profiles.media', $data); + + case 'journalists': + return view('dashboard.users.profiles.journalists', $data); + + default: + abort(404); } } @@ -241,6 +266,7 @@ public function processAcceptAction(Request $request, $id, $type, $category){ } } }catch(\Exception $e){ + Log::error("Company (processAcceptAction): ". $e); return response()->json([ 'failed-status' => 'Gagal menyetujui'.($category === 'edit-request' ? ' permohonan edit' : '').' perusahaan.' ]); @@ -282,6 +308,7 @@ public function processRejectAction(Request $request, $id, $type, $category){ } } }catch(\Exception $e){ + Log::error("Company (processRejectAction): ". $e); return redirect()->back()->with('faileds-status', 'Gagal melakukan proses.'); } @@ -290,36 +317,51 @@ public function processRejectAction(Request $request, $id, $type, $category){ public function export(Request $request) { - $status = $request->input('status', null); - $edit_status = $request->input('edit_status', null); - $address = $request->input('address', null); - $register_year = $request->input('register_year', null); - $register_month = $request->input('register_month', null); - $register_date = $request->input('register_date', null); - $formattedNow = Carbon::parse(now())->locale('id')->translatedFormat('d-m-Y'); + try{ + $status = $request->input('status', null); + $edit_status = $request->input('edit_status', null); + $address = $request->input('address', null); + $register_year = $request->input('register_year', null); + $register_month = $request->input('register_month', null); + $register_date = $request->input('register_date', null); - return Excel::download(new CompanyExport($status, $edit_status, $address, $register_year, $register_month, $register_date), 'companies-'.$formattedNow.'.xlsx'); + $formattedNow = Carbon::parse(now())->locale('id')->translatedFormat('d-m-Y'); + + return Excel::download(new CompanyExport($status, $edit_status, $address, $register_year, $register_month, $register_date), 'companies-'.$formattedNow.'.xlsx'); + }catch(\Exception $e){ + Log::error("Company (export): ". $e); + return redirect()->back()->with('failed-status', 'Gagal melakukan export data.'); + } } public function filter(Request $request){ - $filteredRequest = $request->except('_token'); + try{ + $filteredRequest = $request->except('_token'); - $filterField = array_filter($filteredRequest, function ($value) { - return filled($value); - }); + $filterField = array_filter($filteredRequest, function ($value) { + return filled($value); + }); + return redirect()->route('dashboard.companies.index', $filterField); + }catch(\Exception $e){ + Log::error("Company (filter): ". $e); + return redirect()->back()->with('failed-status', 'Gagal melakukan filter data.'); + } - return redirect()->route('dashboard.companies.index', $filterField); } public function printData($id){ - $company = Company::with(['user.role'])->findOrFail(decrypt_id($id)); + try{ + $company = Company::with(['user.role'])->findOrFail(decrypt_id($id)); + $pdf = Pdf::loadView('dashboard.companies.print', compact('company')); - $pdf = Pdf::loadView('dashboard.companies.print', compact('company')); - - return $pdf->stream('perusahaan-'.slugify($company->name).'.pdf'); + return $pdf->stream('perusahaan-'.slugify($company->name).'.pdf'); + }catch(\Exception $e){ + Log::error("Company (printData): ". $e); + return redirect()->back()->with('failed-status', 'Gagal melakukan print data.'); + } } } diff --git a/app/Http/Controllers/Dashboard/ContentRecapClassificationController.php b/app/Http/Controllers/Dashboard/ContentRecapClassificationController.php index 765d8b0..f6355e9 100644 --- a/app/Http/Controllers/Dashboard/ContentRecapClassificationController.php +++ b/app/Http/Controllers/Dashboard/ContentRecapClassificationController.php @@ -8,6 +8,7 @@ use App\Models\ContentRecapClassification; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Log; use Illuminate\Support\Str; class ContentRecapClassificationController extends Controller @@ -38,10 +39,12 @@ public function store(ContentRecapClassificationRequest $request){ $createdClassification = ContentRecapClassification::create($validatedData); }catch(\Exception $e){ + Log::error("ContentRecapClassifications (store): ". $e); return redirect()->back()->with('failed-status', 'Gagal menambahkan klasifikasi rekap konten.'); } - return redirect()->route('dashboard.content.recap.classifications.index')->with('success-status', 'Berhasil menambahkan klasifikasi rekap konten.'); + return redirect()->route('dashboard.content.recap.classifications.index')->with('success-status', 'Berhasil menambahkan klasifikasi rekap konten.') + ->with('new_data', encrypt_id($createdClassification->id)); } public function edit($id){ @@ -58,12 +61,13 @@ public function update(ContentRecapClassificationRequest $request, $id){ try{ $contentRecapClassification = ContentRecapClassification::findOrFail(decrypt_id($id)); - $updatedContentRecapClassification = $contentRecapClassification->update($validatedData); + $contentRecapClassification->update($validatedData); }catch(\Exception $e){ + Log::error("ContentRecapClassifications (update): ". $e); return redirect()->back()->with('failed-status', 'Gagal mengubah klasifikasi rekap konten.'); } - return redirect()->back()->with('success-status', 'Berhasil mengubah klasifikasi rekap konten.'); + return redirect()->route('dashboard.content.recap.classifications.show', ['id' => encrypt_id($contentRecapClassification->id)])->with('success-status', 'Berhasil mengubah klasifikasi rekap konten.'); } public function show($id){ @@ -78,30 +82,35 @@ public function show($id){ public function destroy($id){ try { $contentRecapClassification = ContentRecapClassification::findOrFail(decrypt_id($id)); - $contentRecapClassification->delete(); - return response()->json(['message' => 'Berhasil menghapus klasifikasi rekap konten.']); } catch (\Exception $e) { + Log::error("ContentRecapClassifications (destroy): ". $e); return response()->json(['message' => 'Gagal menghapus klasifikasi rekap konten.'], 500); } } public function restore($slug) { - $recapContentClassification = ContentRecapClassification::withTrashed() + + try{ + $recapContentClassification = ContentRecapClassification::withTrashed() ->where('slug', $slug) ->first(); - if (!$recapContentClassification) { - return redirect()->back()->with('failed-status', 'Klasifikasi tidak ditemukan.'); - } + if (!$recapContentClassification) { + return redirect()->back()->with('failed-status', 'Klasifikasi tidak ditemukan.'); + } - if (filled($recapContentClassification->deleted_at)) { - $recapContentClassification->restore(); - return redirect()->back()->with('success-status', 'Klasifikasi berhasil dipulihkan.'); - } + if (filled($recapContentClassification->deleted_at)) { + $recapContentClassification->restore(); + return redirect()->back()->with('success-status', 'Klasifikasi berhasil dipulihkan.'); + } - return redirect()->back()->with('info-status', 'Klasifikasi sudah aktif.'); + return redirect()->back()->with('info-status', 'Klasifikasi sudah aktif.'); + }catch(\Exception $e){ + Log::error("ContentRecapClassifications (restore): ". $e); + return redirect()->back()->with('failed-status', 'Gagal melakukan proses pemulihan.'); + } } } diff --git a/app/Http/Controllers/Dashboard/ContentRecapController.php b/app/Http/Controllers/Dashboard/ContentRecapController.php index a8ad082..202861b 100644 --- a/app/Http/Controllers/Dashboard/ContentRecapController.php +++ b/app/Http/Controllers/Dashboard/ContentRecapController.php @@ -11,6 +11,7 @@ use Carbon\Carbon; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Log; use Maatwebsite\Excel\Facades\Excel; class ContentRecapController extends Controller @@ -37,23 +38,22 @@ public function create(){ public function store(ContentRecapRequest $request){ $validatedData = $request->validated(); - $validatedData['enhancer_id'] = Auth::id(); - - if($request->has('image') && filled($validatedData['image'])){ - $validatedData['image'] = store_file($validatedData['image'], '/uploads/content-recaps')['randomFileName']; - }else{ - $validatedData['image'] = null; - } - try{ $createdContentRecap = ContentRecap::create($validatedData); - return redirect()->route('dashboard.content.recaps.index')->with('success-status', 'Berhasil menambahkan rekap konten.') - ->with('new_data', encrypt_id($createdContentRecap->id)); + if($request->has('image') && filled($validatedData['image'])){ + $validatedData['image'] = store_file($validatedData['image'], '/uploads/content-recaps')['randomFileName']; + }else{ + $validatedData['image'] = null; + } }catch(\Exception $e){ + Log::error("ContentRecaps (store): ". $e); return redirect()->back()->with('failed-status', 'Gagal menambahkan rekap konten.'); } + + return redirect()->route('dashboard.content.recaps.index')->with('success-status', 'Berhasil menambahkan rekap konten.') + ->with('new_data', encrypt_id($createdContentRecap->id)); } public function edit($id){ @@ -68,23 +68,24 @@ public function edit($id){ public function update(ContentRecapRequest $request, $id){ $validatedData = $request->validated(); - $validatedData['enhancer_id'] = Auth::id(); - - $contentRecap = ContentRecap::findOrFail(decrypt_id($id)); - if($request->has('image') && filled($validatedData['image'])){ - delete_file('app/public/uploads/content-recaps/'.$contentRecap->image); - $validatedData['image'] = store_file($validatedData['image'], '/uploads/content-recaps')['randomFileName']; - }else{ - $validatedData['image'] = $contentRecap->image; - } try{ + $contentRecap = ContentRecap::findOrFail(decrypt_id($id)); + if($request->has('image') && filled($validatedData['image'])){ + delete_file('app/public/uploads/content-recaps/'.$contentRecap->image); + $validatedData['image'] = store_file($validatedData['image'], '/uploads/content-recaps')['randomFileName']; + }else{ + $validatedData['image'] = $contentRecap->image; + } + $contentRecap->update($validatedData); - return redirect()->route('dashboard.content.recaps.show', ['id' => encrypt_id($contentRecap->id)])->with('success-status', 'Berhasil mengubah rekap konten.'); }catch(\Exception $e){ + Log::error("ContentRecaps (update): ". $e); return redirect()->back()->with('failed-status', 'Gagal mengubah rekap konten.'); } + return redirect()->route('dashboard.content.recaps.show', ['id' => encrypt_id($contentRecap->id)])->with('success-status', 'Berhasil mengubah rekap konten.'); + } public function show($id){ @@ -101,10 +102,12 @@ public function destroy($id){ $contentRecap = ContentRecap::findOrFail(decrypt_id($id)); $contentRecap->delete(); - return response()->json(['message' => 'Berhasil menghapus rekap konten.']); } catch (\Exception $e) { + Log::error("ContentRecaps (destroy): ". $e); return response()->json(['message' => 'Gagal menghapus rekap konten.'], 500); } + + return response()->json(['message' => 'Berhasil menghapus rekap konten.']); } public function checkLink(Request $request) @@ -118,36 +121,51 @@ public function checkLink(Request $request) public function filter(Request $request){ - $filteredRequest = $request->except('_token'); + try{ + $filteredRequest = $request->except('_token'); - $filterField = array_filter($filteredRequest, function ($value) { - return filled($value); - }); + $filterField = array_filter($filteredRequest, function ($value) { + return filled($value); + }); + }catch(\Exception $e){ + Log::error("ContentRecaps (filter): ". $e); + return redirect()->back()->with('failed-status', 'Gagal melakukan filter data.'); + } return redirect()->route('dashboard.content.recaps.index', $filterField); + } public function export(Request $request) { - $classification = $request->input('classification', 'all'); - $channel = $request->input('channel', 'all'); - $social_media = $request->input('social_media', 'all'); - $posted_year = $request->input('posted_year', null); - $posted_month = $request->input('posted_month', null); - $posted_date = $request->input('posted_date', null); + try{ + $classification = $request->input('classification', 'all'); + $channel = $request->input('channel', 'all'); + $social_media = $request->input('social_media', 'all'); + $posted_year = $request->input('posted_year', null); + $posted_month = $request->input('posted_month', null); + $posted_date = $request->input('posted_date', null); - $formattedNow = Carbon::parse(now())->locale('id')->translatedFormat('d-m-Y'); + $formattedNow = Carbon::parse(now())->locale('id')->translatedFormat('d-m-Y'); - return Excel::download(new ContentRecapExport($classification, $channel, $social_media, $posted_year, $posted_month, $posted_date), 'content-recaps-'.$formattedNow.'.xlsx'); + return Excel::download(new ContentRecapExport($classification, $channel, $social_media, $posted_year, $posted_month, $posted_date), 'content-recaps-'.$formattedNow.'.xlsx'); + }catch(\Exception $e){ + Log::error("ContentRecaps (export): ". $e); + return redirect()->back()->with('failed-status', 'Gagal melakukan export data.'); + } } public function printData($id){ - $contentRecap = ContentRecap::with(['enhancer', 'classification'])->findOrFail(decrypt_id($id)); + try{ + $contentRecap = ContentRecap::with(['enhancer', 'classification'])->findOrFail(decrypt_id($id)); + $pdf = Pdf::loadView('dashboard.content-recaps.print', compact('contentRecap')); - $pdf = Pdf::loadView('dashboard.content-recaps.print', compact('contentRecap')); - - return $pdf->stream(slugify('rekap konten '. $contentRecap->content_theme).'.pdf'); + return $pdf->stream(slugify('rekap konten '. $contentRecap->content_theme).'.pdf'); + }catch(\Exception $e){ + Log::error("ContentRecaps (printData): ". $e); + return redirect()->back()->with('failed-status', 'Gagal melakukan print data.'); + } } } diff --git a/app/Http/Controllers/Dashboard/CooperationCompletionController.php b/app/Http/Controllers/Dashboard/CooperationCompletionController.php index 0dc315e..586cbd9 100644 --- a/app/Http/Controllers/Dashboard/CooperationCompletionController.php +++ b/app/Http/Controllers/Dashboard/CooperationCompletionController.php @@ -9,27 +9,30 @@ use App\Models\CooperationCompletion; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Log; class CooperationCompletionController extends Controller { public function store(CooperationCompletionRequest $request, $id){ $validatedData = $request->validated(); - $validatedData['payment_request_letter'] = store_file($validatedData['payment_request_letter'], 'uploads/cooperation-completions')['randomFileName']; + try{ + $validatedData['payment_request_letter'] = store_file($validatedData['payment_request_letter'], 'uploads/cooperation-completions')['randomFileName']; - $validatedData['invoice'] = store_file($validatedData['invoice'], 'uploads/cooperation-completions')['randomFileName']; + $validatedData['invoice'] = store_file($validatedData['invoice'], 'uploads/cooperation-completions')['randomFileName']; - $validatedData['other_document'] = store_file($validatedData['other_document'], 'uploads/cooperation-completions')['randomFileName']; + $validatedData['other_document'] = store_file($validatedData['other_document'], 'uploads/cooperation-completions')['randomFileName']; - $validatedData['order_id'] = decrypt_id($id); - $validatedData['media_id'] = Auth::user()->company->media->id; + $validatedData['order_id'] = decrypt_id($id); + $validatedData['media_id'] = Auth::user()->company->media->id; - $createdCompletion = CooperationCompletion::create($validatedData); - if($createdCompletion){ - return redirect()->back()->with('success-status', 'Berhasil mengirim formulir.'); - }else{ + CooperationCompletion::create($validatedData); + }catch(\Exception $e){ + Log::error("CooperationCompletions (store): ". $e); return redirect()->back()->with('failed-status', 'Gagal mengirim formulir.'); } + + return redirect()->back()->with('success-status', 'Berhasil mengirim formulir.'); } public function show($mediaOrderId, $id){ @@ -43,28 +46,32 @@ public function show($mediaOrderId, $id){ } public function accept($id){ - $completion = CooperationCompletion::with(['order', 'media'])->findOrFail(decrypt_id($id)); - $acceptedCompletion = $completion->update([ - 'status' => '1' - ]); + try{ + $completion = CooperationCompletion::with(['order', 'media'])->findOrFail(decrypt_id($id)); - // Announcements - $announcementData = [ - 'headline' => 'Formulir penyelesaian kerjasama '. $completion->order->cooperation->name .' telah disetujui', - 'content' => 'Admin telah menyetujui laporan formulir penyelesaian kerjasama Anda.
', - 'enhancer_id' => Auth::id() - ]; - $createdAnnouncement = Announcement::create($announcementData); - $createdAnnouncement->users()->attach($completion->media->company->user->id, ['category' => 'system']); - // End Announcements + $completion->update([ + 'status' => '1' + ]); - if ($acceptedCompletion) { - return redirect()->back()->with('success-status', 'Berhasil menyetujui penyelesaian kerjasama.'); - } else { + // Announcements + $announcementData = [ + 'headline' => 'Formulir penyelesaian kerjasama '. $completion->order->cooperation->name .' telah disetujui', + 'content' => 'Admin telah menyetujui laporan formulir penyelesaian kerjasama Anda.
', + 'enhancer_id' => Auth::id() + ]; + + $createdAnnouncement = Announcement::create($announcementData); + $createdAnnouncement->users()->attach($completion->media->company->user->id, ['category' => 'system']); + // End Announcements + + }catch(\Exception $e){ + Log::error("CooperationCompletions (accept): ". $e); return redirect()->back()->with('failed-status', 'Gagal menyetujui penyelesaian kerjasama'); } + return redirect()->back()->with('success-status', 'Berhasil menyetujui penyelesaian kerjasama.'); + } public function reject($mediaOrderId, $id){ @@ -79,34 +86,36 @@ public function reject($mediaOrderId, $id){ public function rejectAction(Request $request, $mediaOrderId, $id){ - $validatedData = $request->validate([ - 'rejection_reason' => ['required'], - ], [ - 'rejection_reason.required' => 'Alasan penolakan wajib diisi.', - ]); + try{ + $validatedData = $request->validate([ + 'rejection_reason' => ['required'], + ], [ + 'rejection_reason.required' => 'Alasan penolakan wajib diisi.', + ]); - $completion = CooperationCompletion::with(['order', 'media'])->findOrFail(decrypt_id($id)); + $completion = CooperationCompletion::with(['order', 'media'])->findOrFail(decrypt_id($id)); - $rejectedCompletion = $completion->update([ - 'status' => '2', - 'rejection_reason' => $validatedData['rejection_reason'] - ]); + $completion->update([ + 'status' => '2', + 'rejection_reason' => $validatedData['rejection_reason'] + ]); - // Announcements - $announcementData = [ - 'headline' => 'Formulir penyelesaian kerjasama '. $completion->order->cooperation->name .' telah ditolak', - 'content' => 'Admin telah menolak laporan formulir penyelesaian kerjasama Anda.
', - 'enhancer_id' => Auth::id() - ]; - $createdAnnouncement = Announcement::create($announcementData); - $createdAnnouncement->users()->attach($completion->media->company->user->id, ['category' => 'system']); - // End Announcements + // Announcements + $announcementData = [ + 'headline' => 'Formulir penyelesaian kerjasama '. $completion->order->cooperation->name .' telah ditolak', + 'content' => 'Admin telah menolak laporan formulir penyelesaian kerjasama Anda.
', + 'enhancer_id' => Auth::id() + ]; + $createdAnnouncement = Announcement::create($announcementData); + $createdAnnouncement->users()->attach($completion->media->company->user->id, ['category' => 'system']); + // End Announcements - if ($rejectedCompletion) { - return redirect()->back()->with('success-status', 'Berhasil menolak penyelesaian kerjasama.'); - } else { + }catch(\Exception $e){ + Log::error("CooperationCompletions (rejectAction): ". $e); return redirect()->back()->with('failed-status', 'Gagal menolak penyelesaian kerjasama'); } + return redirect()->back()->with('success-status', 'Berhasil menolak penyelesaian kerjasama.'); + } } diff --git a/app/Http/Controllers/Dashboard/CooperationRequestController.php b/app/Http/Controllers/Dashboard/CooperationRequestController.php index e43f5da..4b5c731 100644 --- a/app/Http/Controllers/Dashboard/CooperationRequestController.php +++ b/app/Http/Controllers/Dashboard/CooperationRequestController.php @@ -10,6 +10,7 @@ use App\Models\User; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Log; class CooperationRequestController extends Controller { @@ -50,48 +51,53 @@ public function mediaProposalShow($id){ public function accept(Request $request, $id){ - if(!Auth::check() || Auth::user()->role_id !== 3){ - return abort(403, 'Unauthorized action.'); - } - - $cooperation = Cooperation::with('media')->findOrFail(decrypt_id($id)); - - $mediaCooperation = $cooperation->media() - ->where('media.id', Auth::user()->company->media->id) - ->first(); - - if (!$mediaCooperation) { - return abort(404, 'Media not found for the cooperation.'); - } - - // Pastikan data yang ingin diperbarui ada dan statusnya belum '3' - if ($mediaCooperation->pivot->status == '0') { - $affectedRows = $cooperation->media()->updateExistingPivot($mediaCooperation->id, [ - 'status' => '1', - ]); - - // Announcements - $announcementData = [ - 'headline' => 'Ajuan Kerjasama '.$cooperation->name.' diterima oleh media '.$mediaCooperation->name. '', - 'content' => 'Ajuan Kerjasama '.$cooperation->name.' telah diterima oleh media '.$mediaCooperation->name.'
', - 'enhancer_id' => Auth::id() - ]; - - $adminIds = User::where('role_id', 1)->pluck('id')->mapWithKeys(function ($id) { - return [$id => ['category' => 'system']]; - })->toArray(); - - $createdAnnouncement = Announcement::create($announcementData); - $createdAnnouncement->users()->attach($adminIds); - // End Announcements - - if ($affectedRows > 0) { - return redirect()->back()->with('success-status', 'Berhasil menerima kerjasama.'); - } else { - return redirect()->back()->with('failed-status', 'Gagal menerima kerjasama.'); + try{ + if(!Auth::check() || Auth::user()->role_id !== 3){ + return abort(403, 'Unauthorized action.'); } - } else { - return redirect()->back()->with('failed-status', 'Kerjasama sudah diterima sebelumnya.'); + + $cooperation = Cooperation::with('media')->findOrFail(decrypt_id($id)); + + $mediaCooperation = $cooperation->media() + ->where('media.id', Auth::user()->company->media->id) + ->first(); + + if (!$mediaCooperation) { + return abort(404, 'Media not found for the cooperation.'); + } + + // Pastikan data yang ingin diperbarui ada dan statusnya belum '3' + if ($mediaCooperation->pivot->status == '0') { + $affectedRows = $cooperation->media()->updateExistingPivot($mediaCooperation->id, [ + 'status' => '1', + ]); + + // Announcements + $announcementData = [ + 'headline' => 'Ajuan Kerjasama '.$cooperation->name.' diterima oleh media '.$mediaCooperation->name. '', + 'content' => 'Ajuan Kerjasama '.$cooperation->name.' telah diterima oleh media '.$mediaCooperation->name.'
', + 'enhancer_id' => Auth::id() + ]; + + $adminIds = User::where('role_id', 1)->pluck('id')->mapWithKeys(function ($id) { + return [$id => ['category' => 'system']]; + })->toArray(); + + $createdAnnouncement = Announcement::create($announcementData); + $createdAnnouncement->users()->attach($adminIds); + // End Announcements + + if ($affectedRows > 0) { + return redirect()->back()->with('success-status', 'Berhasil menerima kerjasama.'); + } else { + return redirect()->back()->with('failed-status', 'Gagal menerima kerjasama.'); + } + } else { + return redirect()->back()->with('failed-status', 'Kerjasama sudah diterima sebelumnya.'); + } + }catch(\Exception $e){ + Log::error("CooperationRequest (accept): ". $e); + return redirect()->back()->with('failed-status', 'Proses gagal.'); } } @@ -114,34 +120,39 @@ public function createProposal($id){ public function storeProposal(JournalistCooperationProposalRequest $request, $id){ $validatedData = $request->validated(); - $cooperation = Cooperation::findOrFail(decrypt_id($id)); - $validatedData['cooperation_id'] = decrypt_id($id); - $validatedData['media_id'] = Auth::user()->company->media->id; - $validatedData['attachment'] = store_file($validatedData['attachment'], '/uploads/cooperation-proposals')['randomFileName']; + try{ + $cooperation = Cooperation::findOrFail(decrypt_id($id)); + $validatedData['cooperation_id'] = decrypt_id($id); + $validatedData['media_id'] = Auth::user()->company->media->id; + $validatedData['attachment'] = store_file($validatedData['attachment'], '/uploads/cooperation-proposals')['randomFileName']; - $createdCooperationProposal = CooperationProposal::create($validatedData); - $createdCooperationProposal->journalists()->attach($validatedData['journalist_ids']); + $createdCooperationProposal = CooperationProposal::create($validatedData); + $createdCooperationProposal->journalists()->attach($validatedData['journalist_ids']); - // Announcements - $announcementData = [ - 'headline' => 'Media '.Auth::user()->company->media->name.' telah mengirimkan formulir pengajuan kerjasama '.$cooperation->name. '', - 'content' => 'Media '.Auth::user()->company->media->name.' telah mengirimkan formulir pengajuan kerjasama '.$cooperation->name. ' pada '.idn_date($createdCooperationProposal->created_at, 'l, d F Y H:i').'', - 'enhancer_id' => Auth::id() - ]; + // Announcements + $announcementData = [ + 'headline' => 'Media '.Auth::user()->company->media->name.' telah mengirimkan formulir pengajuan kerjasama '.$cooperation->name. '', + 'content' => 'Media '.Auth::user()->company->media->name.' telah mengirimkan formulir pengajuan kerjasama '.$cooperation->name. ' pada '.idn_date($createdCooperationProposal->created_at, 'l, d F Y H:i').'', + 'enhancer_id' => Auth::id() + ]; - $adminIds = User::where('role_id', 1)->pluck('id')->mapWithKeys(function ($id) { - return [$id => ['category' => 'system']]; - })->toArray(); + $adminIds = User::where('role_id', 1)->pluck('id')->mapWithKeys(function ($id) { + return [$id => ['category' => 'system']]; + })->toArray(); - $createdAnnouncement = Announcement::create($announcementData); - $createdAnnouncement->users()->attach($adminIds); - // End Announcements + $createdAnnouncement = Announcement::create($announcementData); + $createdAnnouncement->users()->attach($adminIds); + // End Announcements - if ($createdCooperationProposal->journalists()->count() > 0) { - return redirect()->route('dashboard.cooperations.requests.index')->with('success-status', 'Berhasil melakukan pengajuan kerjasama.'); - } else { + if ($createdCooperationProposal->journalists()->count() <= 0) { + abort(404); + } + + }catch(\Exception $e){ return redirect()->back()->with('failed-status', 'Gagal melakukan pengajuan kerjasama'); } + + return redirect()->route('dashboard.cooperations.requests.index')->with('success-status', 'Berhasil melakukan pengajuan kerjasama.'); } public function reject($id){ @@ -160,57 +171,62 @@ public function reject($id){ public function rejectAction(Request $request, $id){ - if(!Auth::check() || Auth::user()->role_id !== 3){ - return abort(403, 'Unauthorized action.'); - } + try{ + if(!Auth::check() || Auth::user()->role_id !== 3){ + return abort(403, 'Unauthorized action.'); + } - $validatedData = $request->validate([ - 'rejection_reason' => ['required'], - ], [ - 'rejection_reason.required' => 'Alasan penolakan wajib diisi.', - ]); - - $cooperation = Cooperation::with('media')->findOrFail(decrypt_id($id)); - - $mediaCooperation = $cooperation->media() - ->where('media.id', Auth::user()->company->media->id) - ->first(); - - if (!$mediaCooperation) { - return abort(404, 'Media not found for the cooperation.'); - } - - - if ($mediaCooperation->pivot->status != '3') { - $affectedRows = $cooperation->media()->updateExistingPivot($mediaCooperation->id, [ - 'status' => '2', - 'rejection_reason' => $validatedData['rejection_reason'], + $validatedData = $request->validate([ + 'rejection_reason' => ['required'], + ], [ + 'rejection_reason.required' => 'Alasan penolakan wajib diisi.', ]); - // Announcements - $announcementData = [ - 'headline' => 'Ajuan Kerjasama '.$cooperation->name.' ditolak oleh media '.$mediaCooperation->name. '', - 'content' => 'Ajuan Kerjasama '.$cooperation->name.' ditolak oleh media '.$mediaCooperation->name.'
-Alasan:
'.$validatedData['rejection_reason'].'
Ajuan Kerjasama '.$cooperation->name.' ditolak oleh media '.$mediaCooperation->name.'
+Alasan:
'.$validatedData['rejection_reason'].'
Kerjasama: '. $validatedData['name']. '
-Periode Pengajuan: '.idn_date($createdCooperation->start_date).' s.d. '.idn_date($createdCooperation->end_date).'
-Deskripsi:
- '.$createdCooperation->description.'
-
Kerjasama: '. $validatedData['name']. '
+Periode Pengajuan: '.idn_date($createdCooperation->start_date).' s.d. '.idn_date($createdCooperation->end_date).'
+Deskripsi:
+ '.$createdCooperation->description.'
+
Admin telah melakukan pembaruan pada kerjasama ' . $oldCooperationName . '. - Mohon untuk segera meninjau perubahan tersebut
- ', - 'enhancer_id' => Auth::id() - ]; - $createdAnnouncement = Announcement::create($announcementData); - $createdAnnouncement->users()->attach($userId, ['category' => 'system']); - // End Announcements + $announcementData = [ + 'headline' => 'Admin melakukan pembaruan pada ajuan kerjasama '. $oldCooperationName. '', + 'content' => 'Admin telah melakukan pembaruan pada kerjasama ' . $oldCooperationName . '. + Mohon untuk segera meninjau perubahan tersebut
+ ', + 'enhancer_id' => Auth::id() + ]; + $createdAnnouncement = Announcement::create($announcementData); + $createdAnnouncement->users()->attach($userId, ['category' => 'system']); + // End Announcements - if ($cooperation->media()->count() > 0) { - return redirect()->back()->with('success-status', 'Berhasil mengubah kerjasama.'); - } else { + if ($cooperation->media()->count() > 0) { + return redirect()->back()->with('success-status', 'Berhasil mengubah kerjasama.'); + } else { + return redirect()->back()->with('failed-status', 'Gagal mengubah kerjasama'); + } + }catch(\Exception $e){ return redirect()->back()->with('failed-status', 'Gagal mengubah kerjasama'); } - } public function show($id){ @@ -154,26 +164,31 @@ public function mediaProposalShow($id, $proposalId){ } public function mediaProposalAccept($id, $proposalId){ - $proposal = CooperationProposal::with(['cooperation', 'media', 'journalists'])->findOrFail(decrypt_id($proposalId)); - $acceptedProposal = $proposal->update([ - 'status' => '1' - ]); + try{ + $proposal = CooperationProposal::with(['cooperation', 'media', 'journalists'])->findOrFail(decrypt_id($proposalId)); - // Announcements - $announcementData = [ - 'headline' => 'Formulir ajuan kerjasama '. $proposal->cooperation->name .' telah disetujui', - 'content' => 'Admin telah menyetujui formulir pengajuan kerjasama Anda.
-Sekarang, kerjasama ini sudah tersedia di menu Kerjasama. Harap tunggu hingga Admin menerbitkan Media Order.
', - 'enhancer_id' => Auth::id() - ]; - $createdAnnouncement = Announcement::create($announcementData); - $createdAnnouncement->users()->attach($proposal->media->company->user->id, ['category' => 'system']); - // End Announcements + $acceptedProposal = $proposal->update([ + 'status' => '1' + ]); - if ($acceptedProposal) { - return redirect()->back()->with('success-status', 'Berhasil menyetujui pengajuan kerjasama.'); - } else { + // Announcements + $announcementData = [ + 'headline' => 'Formulir ajuan kerjasama '. $proposal->cooperation->name .' telah disetujui', + 'content' => 'Admin telah menyetujui formulir pengajuan kerjasama Anda.
+Sekarang, kerjasama ini sudah tersedia di menu Kerjasama. Harap tunggu hingga Admin menerbitkan Media Order.
', + 'enhancer_id' => Auth::id() + ]; + $createdAnnouncement = Announcement::create($announcementData); + $createdAnnouncement->users()->attach($proposal->media->company->user->id, ['category' => 'system']); + // End Announcements + + if ($acceptedProposal) { + return redirect()->back()->with('success-status', 'Berhasil menyetujui pengajuan kerjasama.'); + } else { + return redirect()->back()->with('failed-status', 'Gagal menyetujui pengajuan kerjasama'); + } + }catch(\Exception $e){ return redirect()->back()->with('failed-status', 'Gagal menyetujui pengajuan kerjasama'); } @@ -196,29 +211,33 @@ public function mediaProposalRejectAction(Request $request, $id, $proposalId){ 'rejection_reason.required' => 'Alasan penolakan wajib diisi.', ]); - $proposal = CooperationProposal::with(['cooperation', 'media', 'journalists'])->findOrFail(decrypt_id($proposalId)); + try{ + $proposal = CooperationProposal::with(['cooperation', 'media', 'journalists'])->findOrFail(decrypt_id($proposalId)); - $rejectedProposal = $proposal->update([ - 'status' => '2', - 'rejection_reason' => $validatedData['rejection_reason'] - ]); + $rejectedProposal = $proposal->update([ + 'status' => '2', + 'rejection_reason' => $validatedData['rejection_reason'] + ]); - // Announcements - $announcementData = [ - 'headline' => 'Formulir ajuan kerjasama '. $proposal->cooperation->name .' ditolak', - 'content' => 'Admin telah menolak formulir pengajuan kerjasama Anda. -
Alasan penolakan:
'.$validatedData['rejection_reason'].'
Admin telah menolak formulir pengajuan kerjasama Anda. +
Alasan penolakan:
'.$validatedData['rejection_reason'].'
Admin telah menerbitkan media order kerjasama '. $cooperation->name .'
', - 'content' => 'Admin telah menerbitkan media order kerjasama '.$cooperation->name.'
', - 'enhancer_id' => Auth::id() - ]; - $createdAnnouncement = Announcement::create($announcementData); - $createdAnnouncement->users()->attach($userId, ['category' => 'system']); - // End Announcements + // Announcements + $userId = []; + foreach($validatedData['media_ids'] as $mediaId){ + $userId[] = Media::find($mediaId)->company->user->id; + } - if ($createdOrder->media()->count() > 0) { - return redirect()->route('dashboard.cooperations.process', ['id' => encrypt_id($cooperation->id), 'process' => 'media-order'])->with('success-status', 'Berhasil membuat media order.'); - } else { + $announcementData = [ + 'headline' => 'Admin telah menerbitkan media order kerjasama '. $cooperation->name .'
', + 'content' => 'Admin telah menerbitkan media order kerjasama '.$cooperation->name.'
', + 'enhancer_id' => Auth::id() + ]; + $createdAnnouncement = Announcement::create($announcementData); + $createdAnnouncement->users()->attach($userId, ['category' => 'system']); + // End Announcements + + return $createdOrder; + }); + + if ($createdOrder->media()->count() > 0) { + return redirect()->route('dashboard.cooperations.process', ['id' => encrypt_id($cooperation->id), 'process' => 'media-order'])->with('success-status', 'Berhasil membuat media order.'); + } else { + return redirect()->back()->with('failed-status', 'Gagal membuat media order'); + } + }catch(\Exception $e){ return redirect()->back()->with('failed-status', 'Gagal membuat media order'); } } @@ -79,29 +88,32 @@ public function edit($id){ public function update(OrderRequest $request, $id){ $validatedData = $request->validated(); - $validatedData['enhancer_id'] = Auth::id(); - $mediaOrder = Order::findOrFail(decrypt_id($id)); + try{ + $mediaOrder = Order::findOrFail(decrypt_id($id)); - $validatedData['cooperation_id'] = $mediaOrder->cooperation_id; + $validatedData['cooperation_id'] = $mediaOrder->cooperation_id; - if($request->hasFile('image')){ - $validatedData['image'] = store_file($validatedData['image'], '/uploads/media-orders')['randomFileName']; + if($request->hasFile('image')){ + $validatedData['image'] = store_file($validatedData['image'], '/uploads/media-orders')['randomFileName']; - delete_file('app/public/uploads/media-orders/'.$mediaOrder->image); - }else{ - $validatedData['image'] = $mediaOrder->image; - } + delete_file('app/public/uploads/media-orders/'.$mediaOrder->image); + }else{ + $validatedData['image'] = $mediaOrder->image; + } - $mediaOrder->update($validatedData); + $mediaOrder->update($validatedData); - if ($request->has('media_ids')) { - $mediaOrder->media()->sync($validatedData['media_ids']); - } + if ($request->has('media_ids')) { + $mediaOrder->media()->sync($validatedData['media_ids']); + } - if ($mediaOrder->media()->exists()) { - return redirect()->back()->with('success-status', 'Berhasil mengubah media order.'); - } else { + if ($mediaOrder->media()->exists()) { + return redirect()->back()->with('success-status', 'Berhasil mengubah media order.'); + } else { + return redirect()->back()->with('failed-status', 'Gagal mengubah media order'); + } + }catch(\Exception $e){ return redirect()->back()->with('failed-status', 'Gagal mengubah media order'); } } @@ -158,46 +170,51 @@ public function reject(Request $request, $id){ 'rejection_reason.required' => 'Alasan penolakan wajib diisi.', ]); - $order = Order::with('media')->findOrFail(decrypt_id($id)); + try{ - $mediaOrder = $order->media() - ->where('media.id', Auth::user()->company->media->id) - ->first(); + $order = Order::with('media')->findOrFail(decrypt_id($id)); - if (!$mediaOrder) { - return abort(404, 'Media not found for the cooperation.'); - } + $mediaOrder = $order->media() + ->where('media.id', Auth::user()->company->media->id) + ->first(); - if ($mediaOrder->pivot->status == '0') { - $affectedRows = $order->media()->updateExistingPivot($mediaOrder->id, [ - 'status' => '2', - 'rejection_reason' => $validatedData['rejection_reason'] - ]); - - // Announcements - $announcementData = [ - 'headline' => 'Media '.$mediaOrder->name.' menolak media order kerjasama '.$order->cooperation->name. '', - 'content' => 'Media '.$mediaOrder->name.' menolak media order kerjasama '.$order->cooperation->name.' -Alasan:
'.$validatedData['rejection_reason'].'
Alasan:
'.$validatedData['rejection_reason'].'
Admin telah menolak laporan bukti tayang Anda.
', - 'enhancer_id' => Auth::id() - ]; - $createdAnnouncement = Announcement::create($announcementData); - $createdAnnouncement->users()->attach($report->media->company->user->id, ['category' => 'system']); - // End Announcements + // Announcements + $announcementData = [ + 'headline' => 'Laporan bukti tayang kerjasama '. $report->order->cooperation->name .' telah ditolak', + 'content' => 'Admin telah menolak laporan bukti tayang Anda.
', + 'enhancer_id' => Auth::id() + ]; + $createdAnnouncement = Announcement::create($announcementData); + $createdAnnouncement->users()->attach($report->media->company->user->id, ['category' => 'system']); + // End Announcements - if ($rejectedReport) { - return redirect()->back()->with('success-status', 'Berhasil menolak laporan bukti tayang.'); - } else { + if ($rejectedReport) { + return redirect()->back()->with('success-status', 'Berhasil menolak laporan bukti tayang.'); + } else { + return redirect()->back()->with('failed-status', 'Gagal menolak laporan bukti tayang'); + } + }catch(\Exception $e){ return redirect()->back()->with('failed-status', 'Gagal menolak laporan bukti tayang'); } } diff --git a/app/Http/Controllers/Dashboard/SettingController.php b/app/Http/Controllers/Dashboard/SettingController.php index 9b44f0c..ddbf909 100644 --- a/app/Http/Controllers/Dashboard/SettingController.php +++ b/app/Http/Controllers/Dashboard/SettingController.php @@ -18,45 +18,49 @@ public function index(){ public function update(SettingRequest $request) { $validatedData = $request->validated(); - $settings = app(AppSettings::class); - $files = ['app_icon', 'app_logo']; - $validFile = []; + try{ + $settings = app(AppSettings::class); - foreach ($files as $file) { - if ($request->hasFile($file)) { - $savedFile = store_file($request->file($file), 'uploads/settings'); - $validFile[$file] = $savedFile['randomFileName']; - } else { - $validFile[$file] = $settings->$file; + $files = ['app_icon', 'app_logo']; + $validFile = []; + + foreach ($files as $file) { + if ($request->hasFile($file)) { + $savedFile = store_file($request->file($file), 'uploads/settings'); + $validFile[$file] = $savedFile['randomFileName']; + } else { + $validFile[$file] = $settings->$file; + } } + + $settings->fill([ + 'app_name' => $validatedData['app_name'] ?? $settings->app_name, + 'app_title' => $validatedData['app_title'] ?? $settings->app_title, + 'app_description' => $validatedData['app_description'] ?? $settings->app_description, + 'app_keywords' => $validatedData['app_keywords'] ?? $settings->app_keywords, + 'app_icon' => $validFile['app_icon'] ?? $settings->app_icon, + 'app_logo' => $validFile['app_logo'] ?? $settings->app_logo, + 'contact_address' => $validatedData['contact_address'] ?? $settings->contact_address, + 'contact_address_link' => $validatedData['contact_address_link'] ?? $settings->contact_address_link, + 'contact_phone' => $validatedData['contact_phone'] ?? $settings->contact_phone, + 'contact_email' => $validatedData['contact_email'] ?? $settings->contact_email, + 'contact_facebook' => $validatedData['contact_facebook'] ?? $settings->contact_facebook, + 'contact_twitter' => $validatedData['contact_twitter'] ?? $settings->contact_twitter, + 'contact_instagram' => $validatedData['contact_instagram'] ?? $settings->contact_instagram, + 'contact_youtube' => $validatedData['contact_youtube'] ?? $settings->contact_youtube, + 'contact_whatsapp' => $validatedData['contact_whatsapp'] ?? $settings->contact_whatsapp, + 'contact_telegram' => $validatedData['contact_telegram'] ?? $settings->contact_telegram, + 'about_us' => $validatedData['about_us'] ?? $settings->about_us, + ]); + + if ($settings->save()) { + return redirect()->back()->with('success-status', 'Berhasil mengubah informasi aplikasi.'); + } + }catch(\Exception $e){ + return redirect()->back()->with('failed-status', 'Gagal mengubah informasi aplikasi.'); } - $settings->fill([ - 'app_name' => $validatedData['app_name'] ?? $settings->app_name, - 'app_title' => $validatedData['app_title'] ?? $settings->app_title, - 'app_description' => $validatedData['app_description'] ?? $settings->app_description, - 'app_keywords' => $validatedData['app_keywords'] ?? $settings->app_keywords, - 'app_icon' => $validFile['app_icon'] ?? $settings->app_icon, - 'app_logo' => $validFile['app_logo'] ?? $settings->app_logo, - 'contact_address' => $validatedData['contact_address'] ?? $settings->contact_address, - 'contact_address_link' => $validatedData['contact_address_link'] ?? $settings->contact_address_link, - 'contact_phone' => $validatedData['contact_phone'] ?? $settings->contact_phone, - 'contact_email' => $validatedData['contact_email'] ?? $settings->contact_email, - 'contact_facebook' => $validatedData['contact_facebook'] ?? $settings->contact_facebook, - 'contact_twitter' => $validatedData['contact_twitter'] ?? $settings->contact_twitter, - 'contact_instagram' => $validatedData['contact_instagram'] ?? $settings->contact_instagram, - 'contact_youtube' => $validatedData['contact_youtube'] ?? $settings->contact_youtube, - 'contact_whatsapp' => $validatedData['contact_whatsapp'] ?? $settings->contact_whatsapp, - 'contact_telegram' => $validatedData['contact_telegram'] ?? $settings->contact_telegram, - 'about_us' => $validatedData['about_us'] ?? $settings->about_us, - ]); - - if ($settings->save()) { - return redirect()->back()->with('success-status', 'Berhasil mengubah informasi aplikasi.'); - } - - return redirect()->back()->with('failed-status', 'Gagal mengubah informasi aplikasi.'); } } diff --git a/app/Http/Controllers/Dashboard/SubLocationController.php b/app/Http/Controllers/Dashboard/SubLocationController.php index fa52a89..b65db8e 100644 --- a/app/Http/Controllers/Dashboard/SubLocationController.php +++ b/app/Http/Controllers/Dashboard/SubLocationController.php @@ -43,7 +43,6 @@ public function create(Request $request){ public function store(SubLocationRequest $request){ $validatedData = $request->validated(); - $validatedData['enhancer_id'] = Auth::id(); try{ $createdSubLocation = SubLocation::create($validatedData); @@ -67,7 +66,6 @@ public function edit($id){ public function update(SubLocationRequest $request, $id){ $validatedData = $request->validated(); - $validatedData['enhancer_id'] = Auth::id(); try{ $subLocation = SubLocation::findOrFail(decrypt_id($id)); diff --git a/app/Http/Controllers/Dashboard/UserController.php b/app/Http/Controllers/Dashboard/UserController.php index 151018e..91b8b6c 100644 --- a/app/Http/Controllers/Dashboard/UserController.php +++ b/app/Http/Controllers/Dashboard/UserController.php @@ -19,7 +19,7 @@ class UserController extends Controller { public function index(Request $request){ return view('dashboard.users.index', [ - 'title' => 'Pengguna', + 'title' => 'Data Pengguna', 'role' => $request->input('role', null), 'status' => $request->input('status', null), ]); @@ -27,7 +27,7 @@ public function index(Request $request){ public function create(){ return view('dashboard.users.create', [ - 'title' => 'Tambah Pengguna', + 'title' => 'Buat Pengguna Baru', 'roles' => Role::all() ]); } @@ -35,14 +35,13 @@ public function create(){ public function store(UserRequest $request){ $validatedData = $request->validated(); - $createdUser = User::create($validatedData); - - if($createdUser){ - return redirect()->back()->with('success-status', 'Berhasil menambahkan pengguna.'); - }else{ - return redirect()->back()->with('failed-status', 'Gagal menambahkan pengguna.'); + try{ + User::create($validatedData); + }catch(\Exception $e){ + return redirect()->back()->with('failed-status', 'Gagal membuat pengguna baru.'); } + return redirect()->back()->with('success-status', 'Berhasil membuat pengguna baru.'); } @@ -59,20 +58,14 @@ public function edit($id){ public function update(UserRequest $request, $id){ $validatedData = $request->validated(); - if (isset($validatedData['password']) && !empty($validatedData['password'])) { - $validatedData['password'] = $request->input('password'); - } else { - unset($validatedData['password']); - } - - $user = User::findOrFail(decrypt_id($id)); - $updatedUser = $user->update($validatedData); - - if($updatedUser){ - return redirect()->back()->with('success-status', 'Berhasil mengubah pengguna.'); - }else{ + try{ + $user = User::findOrFail(decrypt_id($id)); + $user->update($validatedData); + }catch(\Exception $e){ return redirect()->back()->with('failed-status', 'Gagal mengubah pengguna.'); } + + return redirect()->back()->with('success-status', 'Berhasil mengubah pengguna.'); } public function show($id, $type){ @@ -86,18 +79,27 @@ public function show($id, $type){ 'type' => $type ]; - if($type === 'account'){ - return view('dashboard.users.profiles.account', $data); - }elseif($type === 'login-activities'){ - $data['loginActivities'] = LoginHistory::where('user_id', $user->id)->orderByDesc('id')->simplePaginate(20); - return view('dashboard.users.profiles.login-activity', $data); - }elseif($type === 'company'){ - return view('dashboard.users.profiles.company', $data); - }elseif($type === 'media'){ - return view('dashboard.users.profiles.media', $data); - }elseif($type === 'journalists'){ - return view('dashboard.users.profiles.journalists', $data); + switch ($type) { + case 'account': + return view('dashboard.users.profiles.account', $data); + + case 'login-activities': + $data['loginActivities'] = LoginHistory::where('user_id', $user->id)->orderByDesc('id')->simplePaginate(20); + return view('dashboard.users.profiles.login-activity', $data); + + case 'company': + return view('dashboard.users.profiles.company', $data); + + case 'media': + return view('dashboard.users.profiles.media', $data); + + case 'journalists': + return view('dashboard.users.profiles.journalists', $data); + + default: + abort(404); } + } public function resetPassword($id){ @@ -113,15 +115,15 @@ public function resetPassword($id){ public function resetPasswordAction(ResetPasswordRequest $request, $id){ $validatedData = $request->validated(); - $updatedUser = User::findOrFail(decrypt_id($id))->update([ - 'password' => $validatedData['password'] - ]); - - if($updatedUser){ - return redirect()->back()->with('success-status', 'Berhasil mereset password pengguna.'); - }else{ + try{ + User::findOrFail(decrypt_id($id))->update([ + 'password' => $validatedData['password'] + ]); + }catch(\Exception $e){ return redirect()->back()->with('failed-status', 'Gagal mereset password pengguna.'); } + + return redirect()->back()->with('success-status', 'Berhasil mereset password pengguna.'); } public function destroy($id) @@ -165,17 +167,27 @@ public function profile($type){ 'type' => $type ]; - if($type === 'account'){ - return view('dashboard.users.profiles.account', $data); - }elseif($type === 'login-activities'){ - $data['loginActivities'] = LoginHistory::where('user_id', Auth::user()->id)->orderByDesc('id')->simplePaginate(20); - return view('dashboard.users.profiles.login-activity', $data); - }elseif($type === 'company'){ - return view('dashboard.users.profiles.company', $data); - }elseif($type === 'media'){ - return view('dashboard.users.profiles.media', $data); - }elseif($type === 'journalists'){ - return view('dashboard.users.profiles.journalists', $data); + switch ($type) { + case 'account': + return view('dashboard.users.profiles.account', $data); + + case 'login-activities': + $data['loginActivities'] = LoginHistory::where('user_id', Auth::user()->id) + ->orderByDesc('id') + ->simplePaginate(20); + return view('dashboard.users.profiles.login-activity', $data); + + case 'company': + return view('dashboard.users.profiles.company', $data); + + case 'media': + return view('dashboard.users.profiles.media', $data); + + case 'journalists': + return view('dashboard.users.profiles.journalists', $data); + + default: + abort(404); // atau bisa redirect atau handling lainnya jika tipe tidak dikenali } } @@ -202,53 +214,68 @@ public function process($id, $type, $process){ 'process' => $process, ]; - if($type === 'account'){ - return view('dashboard.users.profiles.account', $data); - }elseif($type === 'login-activities'){ - $data['loginActivities'] = LoginHistory::where('user_id', $user->id)->orderByDesc('id')->simplePaginate(20); - return view('dashboard.users.profiles.login-activity', $data); - }elseif($type === 'company'){ - return view('dashboard.users.profiles.company', $data); - }elseif($type === 'media'){ - return view('dashboard.users.profiles.media', $data); - }elseif($type === 'journalists'){ - return view('dashboard.users.profiles.journalists', $data); + switch ($type) { + case 'account': + return view('dashboard.users.profiles.account', $data); + + case 'login-activities': + $data['loginActivities'] = LoginHistory::where('user_id', $user->id) + ->orderByDesc('id') + ->simplePaginate(20); + return view('dashboard.users.profiles.login-activity', $data); + + case 'company': + return view('dashboard.users.profiles.company', $data); + + case 'media': + return view('dashboard.users.profiles.media', $data); + + case 'journalists': + return view('dashboard.users.profiles.journalists', $data); + + default: + abort(404); // untuk menangani tipe yang tidak dikenal } + } public function statusAction(Request $request, $id, $action){ $user = User::findOrFail(decrypt_id($id)); - if($user->status === '0' && Auth::check() && is_role(['1'])){ - if($action == 'accept'){ - $user->update([ - 'status' => '1' - ]); + try{ + if($user->status === '0' && Auth::check() && is_role(['1'])){ + if($action == 'accept'){ + $user->update([ + 'status' => '1' + ]); - Mail::to($user->email)->send(new AccountVerification($user, 'accepted')); + Mail::to($user->email)->send(new AccountVerification($user, 'accepted')); - return response()->json(['message' => 'Berhasil menyetujui pengguna.']); - }else if($action == 'reject'){ + return response()->json(['message' => 'Berhasil menyetujui pengguna.']); + }else if($action == 'reject'){ - $validatedData = $request->validate([ - 'rejection_reason' => ['required'], - ], [ - 'rejection_reason.required' => 'Alasan penolakan wajib diisi.', - ]); + $validatedData = $request->validate([ + 'rejection_reason' => ['required'], + ], [ + 'rejection_reason.required' => 'Alasan penolakan wajib diisi.', + ]); - $user->update([ - 'status' => '3' - ]); + $user->update([ + 'status' => '3' + ]); - $user->company->update([ - 'rejection_reason' => $validatedData['rejection_reason'] - ]); + $user->company->update([ + 'rejection_reason' => $validatedData['rejection_reason'] + ]); - Mail::to($user->email)->send(new AccountVerification($user, 'rejected', strip_tags($validatedData['rejection_reason']))); + Mail::to($user->email)->send(new AccountVerification($user, 'rejected', strip_tags($validatedData['rejection_reason']))); + + return redirect()->back()->with('success-status', 'Berhasil menolak pengguna.'); + } - return redirect()->back()->with('success-status', 'Berhasil menolak pengguna.'); } - + }catch(\Exception $e){ + return redirect()->back()->with('failed-status', 'Proses gagal.'); } } @@ -265,17 +292,17 @@ public function setting(){ public function settingAction(AccountSettingRequest $request){ $validatedData = $request->validated(); - $user = User::findOrFail(Auth::id()); - $updatedUser = $user->update([ - 'name' => $validatedData['name'], - 'email' => $validatedData['email'], - ]); - - if($updatedUser){ - return redirect()->back()->with('success-status', 'Berhasil mengubah data akun.'); - }else{ + try{ + $user = User::findOrFail(Auth::id()); + $user->update([ + 'name' => $validatedData['name'], + 'email' => $validatedData['email'], + ]); + }catch(\Exception $e){ return redirect()->back()->with('failed-status', 'Gagal mengubah data akun.'); } + + return redirect()->back()->with('success-status', 'Berhasil mengubah data akun.'); } public function changePassword(){ @@ -291,15 +318,16 @@ public function changePassword(){ public function changePasswordAction(ChangePasswordRequest $request){ $validatedData = $request->validated(); - $updatedUser = User::findOrFail(Auth::id())->update([ - 'password' => $validatedData['password'] - ]); - - if($updatedUser){ - return redirect()->route('dashboard.users.setting')->with('success-status', 'Berhasil mengubah password.'); - }else{ + try{ + $user = User::findOrFail(Auth::id()); + $user->update([ + 'password' => $validatedData['password'] + ]); + }catch(\Exception $e){ return redirect()->back()->with('failed-status', 'Gagal mengubah password.'); } + + return redirect()->route('dashboard.users.setting')->with('success-status', 'Berhasil mengubah password.'); } } diff --git a/app/Http/Requests/ContentRecapRequest.php b/app/Http/Requests/ContentRecapRequest.php index ee32c2e..0561b97 100644 --- a/app/Http/Requests/ContentRecapRequest.php +++ b/app/Http/Requests/ContentRecapRequest.php @@ -30,6 +30,7 @@ public function rules(): array 'classification_id' => ['required', 'exists:content_recap_classifications,id', 'not_in:placeholder'], 'social_media' => ['required', 'not_in:placeholder'], 'description' => ['nullable'], + 'enhancer_id' => ['required'], ]; if($this->isMethod('post')){ @@ -46,6 +47,7 @@ protected function prepareForValidation() $this->merge([ 'image' => filled($this->image) ? $this->image : null, 'description' => filled($this->description) ? $this->description : null, + 'enhancer_id' => Auth::check() ? Auth::id() : null, ]); } diff --git a/app/Http/Requests/CooperationRequest.php b/app/Http/Requests/CooperationRequest.php index c28bb73..88a5cbe 100644 --- a/app/Http/Requests/CooperationRequest.php +++ b/app/Http/Requests/CooperationRequest.php @@ -30,6 +30,7 @@ public function rules(): array 'media_ids.*' => ['required', 'exists:media,id'], 'banner' => ['nullable', 'image', 'mimes:png,jpg,jpeg', 'max:2048'], 'description' => ['required'], + 'enhancer_id' => ['required'], ]; if($this->isMethod('post')){ @@ -41,6 +42,13 @@ public function rules(): array return $rules; } + protected function prepareForValidation() + { + $this->merge([ + 'enhancer_id' => Auth::check() ? Auth::id() : null, + ]); + } + public function messages(): array { return [ diff --git a/app/Http/Requests/GovernmentAgencyRequest.php b/app/Http/Requests/GovernmentAgencyRequest.php index a0cfcea..f013221 100644 --- a/app/Http/Requests/GovernmentAgencyRequest.php +++ b/app/Http/Requests/GovernmentAgencyRequest.php @@ -27,6 +27,7 @@ public function rules(): array 'short_name' => ['nullable', 'max:100'], 'location' => ['nullable'], 'description' => ['nullable'], + 'enhancer_id' => ['required'], ]; } @@ -36,6 +37,7 @@ protected function prepareForValidation() 'short_name' => filled($this->short_name) ? $this->short_name : null, 'location' => filled($this->location) ? $this->location : null, 'description' => filled($this->description) ? $this->description : null, + 'enhancer_id' => Auth::check() ? Auth::id() : null, ]); } diff --git a/app/Http/Requests/IssueManagementRequest.php b/app/Http/Requests/IssueManagementRequest.php index e040577..8eb982f 100644 --- a/app/Http/Requests/IssueManagementRequest.php +++ b/app/Http/Requests/IssueManagementRequest.php @@ -32,8 +32,15 @@ public function rules(): array 'description' =>['required'], 'government_agencies' =>['required', 'array'], 'government_agencies.*' =>['required', 'exists:government_agencies,id'], + 'enhancer_id' =>['required'], ]; } + protected function prepareForValidation() + { + $this->merge([ + 'enhancer_id' => Auth::check() ? Auth::id() : null, + ]); + } public function messages() { diff --git a/app/Http/Requests/LocationRequest.php b/app/Http/Requests/LocationRequest.php index 3ca14ac..012e0b8 100644 --- a/app/Http/Requests/LocationRequest.php +++ b/app/Http/Requests/LocationRequest.php @@ -25,7 +25,8 @@ public function rules(): array return [ 'name' => ['required', 'max:100'], 'status' => ['required', 'in:0,1'], - 'description' => ['nullable'] + 'description' => ['nullable'], + 'enhancer_id' => ['required'], ]; } @@ -33,6 +34,7 @@ protected function prepareForValidation() { $this->merge([ 'description' => filled($this->description) ? $this->description : null, + 'enhancer_id' => Auth::check() ? Auth::id() : null, ]); } diff --git a/app/Http/Requests/MediaMonitoringRequest.php b/app/Http/Requests/MediaMonitoringRequest.php index 12de9d4..60e2e9b 100644 --- a/app/Http/Requests/MediaMonitoringRequest.php +++ b/app/Http/Requests/MediaMonitoringRequest.php @@ -35,6 +35,7 @@ public function rules(): array 'keyword' => ['required', 'max:100'], 'quote' => ['nullable'], 'release_date' => ['required', 'date'], + 'enhancer_id' => ['required'], ]; if($this->isMethod('post')){ @@ -52,6 +53,7 @@ protected function prepareForValidation() 'link' => filled($this->link) ? $this->link : null, 'influencer' => filled($this->influencer) ? $this->influencer : null, 'quote' => filled($this->quote) ? $this->quote : null, + 'enhancer_id' => Auth::check() ? Auth::id() : null, ]); } diff --git a/app/Http/Requests/OrderRequest.php b/app/Http/Requests/OrderRequest.php index 10d9517..f0ac0d9 100644 --- a/app/Http/Requests/OrderRequest.php +++ b/app/Http/Requests/OrderRequest.php @@ -30,6 +30,41 @@ public function rules(): array 'image' => ['nullable', 'image', 'mimes:png,jpg,jpeg', 'max:2048'], 'required_reports' => ['required', 'numeric', 'min:1', 'max:100'], 'task_description' => ['required'], + 'enhancer_id' => ['required'], ]; } + + public function prepareForValidation(){ + $this->merge([ + 'enhancer_id' => Auth::check() ? Auth::id() : null, + ]); + } + + public function messages(): array + { + return [ + 'start_date.required' => 'Tanggal mulai harus diisi.', + 'start_date.date' => 'Format tanggal mulai tidak valid.', + + 'end_date.required' => 'Tanggal selesai harus diisi.', + 'end_date.date' => 'Format tanggal selesai tidak valid.', + + 'media_ids.required' => 'Media harus dipilih.', + 'media_ids.array' => 'Format media tidak valid.', + 'media_ids.*.required' => 'Media yang dipilih tidak boleh kosong.', + 'media_ids.*.exists' => 'Media yang dipilih tidak ditemukan dalam sistem.', + + 'image.image' => 'File yang diunggah harus berupa gambar.', + 'image.mimes' => 'Gambar harus berformat PNG, JPG, atau JPEG.', + 'image.max' => 'Ukuran gambar maksimal adalah 2MB.', + + 'required_reports.required' => 'Jumlah laporan yang dibutuhkan harus diisi.', + 'required_reports.numeric' => 'Jumlah laporan harus berupa angka.', + 'required_reports.min' => 'Jumlah laporan minimal adalah 1.', + 'required_reports.max' => 'Jumlah laporan maksimal adalah 100.', + + 'task_description.required' => 'Deskripsi tugas harus diisi.', + ]; + } + } diff --git a/app/Http/Requests/SubLocationRequest.php b/app/Http/Requests/SubLocationRequest.php index 4bff82f..540be9c 100644 --- a/app/Http/Requests/SubLocationRequest.php +++ b/app/Http/Requests/SubLocationRequest.php @@ -26,7 +26,8 @@ public function rules(): array 'name' => ['required', 'max:100'], 'location_id' => ['required', 'exists:locations,id'], 'status' => ['required', 'in:0,1'], - 'description' => ['nullable'] + 'description' => ['nullable'], + 'enhancer_id' => ['required'], ]; } @@ -34,6 +35,7 @@ protected function prepareForValidation() { $this->merge([ 'description' => filled($this->description) ? $this->description : null, + 'enhancer_id' => Auth::check() ? Auth::id() : null, ]); } diff --git a/app/Http/Requests/UserRequest.php b/app/Http/Requests/UserRequest.php index 902fe88..6902765 100644 --- a/app/Http/Requests/UserRequest.php +++ b/app/Http/Requests/UserRequest.php @@ -26,7 +26,7 @@ public function rules(): array { $rules = [ 'name' => ['required', 'max:100'], - 'email' => ['required', 'email', 'max:100'], + 'email' => ['required', 'email', 'max:100', 'unique:users,email'], 'role_id' => ['required', 'in:1,2,3,4'], 'status' => ['required', 'in:1,2'], ]; @@ -36,11 +36,23 @@ public function rules(): array ->mixedCase() ->numbers() ->symbols()]; + }else if($this->isMethod('put')){ + $rules['password'] = ['nullable', 'confirmed', Password::min(8) + ->mixedCase() + ->numbers() + ->symbols()]; } return $rules; } + + public function prepareForValidation(){ + if (!filled(trim($this->password))) { + $this->request->remove('password'); + } + } + public function messages() { return [ diff --git a/database/seeders/UserSeeder.php b/database/seeders/UserSeeder.php index 001aca0..9363529 100644 --- a/database/seeders/UserSeeder.php +++ b/database/seeders/UserSeeder.php @@ -32,7 +32,7 @@ public function run(): void ]); } - $createdUser = User::create([ + User::create([ 'name' => 'Administrator', 'email' => 'admin@gmail.com', 'password' => 'Rahasia123@', @@ -40,6 +40,14 @@ public function run(): void 'role_id' => '1' ]); + User::create([ + 'name' => 'Sample', + 'email' => 'sample@gmail.com', + 'password' => 'Rahasia123@', + 'status' => '1', + 'role_id' => '1' + ]); + User::find(117)->update([ 'password' => 'Rahasia123@' ]); diff --git a/resources/views/partials/app/overview-statistics.blade.php b/resources/views/partials/app/overview-statistics.blade.php index a29eb24..c1ce3f9 100644 --- a/resources/views/partials/app/overview-statistics.blade.php +++ b/resources/views/partials/app/overview-statistics.blade.php @@ -722,7 +722,6 @@ function ecommerceBarS1(selector, set_data) { data: ["{{ $facebookMediaMonitoring }}", "{{ $twitterMediaMonitoring }}", "{{ $websiteMediaMonitoring }}", "{{ $youtubeMediaMonitoring }}", "{{ $instagramMediaMonitoring }}", "{{ $tiktokMediaMonitoring }}", "{{ $cetakMediaMonitoring }}"] }] }; - @endif var mediaOrderStatistics = { labels: ["Menunggu", "Diterima", "Ditolak"], @@ -745,6 +744,7 @@ function ecommerceBarS1(selector, set_data) { data: ["{{ $facebookContentRecap }}", "{{ $twitterContentRecap }}", "{{ $websiteContentRecap }}", "{{ $youtubeContentRecap }}", "{{ $instagramContentRecap }}", "{{ $tiktokContentRecap }}", "{{ $cetakContentRecap }}"] }] }; + @endif function ecommerceDoughnutS1(selector, set_data) { var $selector = selector ? $(selector) : $('.ecommerce-doughnut-s1');