295 lines
11 KiB
PHP
295 lines
11 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Dashboard;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Requests\JournalistRequest;
|
|
use App\Models\Journalist;
|
|
use App\Models\User;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
|
|
class JournalistController extends Controller
|
|
{
|
|
public function index(){
|
|
if(is_role(['1'])){
|
|
return view('dashboard.journalists.admin.index',[
|
|
'title' => 'Data Jurnalis'
|
|
]);
|
|
}else if(is_role(['3'])){
|
|
$user = User::with(['role', 'company.media.journalists'])->findOrFail(Auth::id());
|
|
return view('dashboard.journalists.index',[
|
|
'title' => 'Data Jurnalis',
|
|
'user' => $user,
|
|
'journalists' => $user->company->media->journalists
|
|
->where('approved_status', '1')
|
|
->whereNull('deleted_at'),
|
|
]);
|
|
}
|
|
}
|
|
|
|
public function submission(){
|
|
return view('dashboard.journalists.submission',[
|
|
'title' => 'Data Permohonan Penambahan Jurnalis'
|
|
]);
|
|
}
|
|
|
|
public function processSubmission($id){
|
|
$journalist = Journalist::with(['media.company'])->findOrFail(decrypt_id($id));
|
|
return view('dashboard.journalists.process-submission',[
|
|
'title' => 'Data Permohonan Penambahan Jurnalis',
|
|
'journalist' => $journalist,
|
|
]);
|
|
}
|
|
|
|
public function processSubmissionAction(Request $request, $id, $action){
|
|
$journalist = Journalist::with(['media.company'])->findOrFail(decrypt_id($id));
|
|
|
|
if($action === 'accept'){
|
|
$acceptedJournalist = $journalist->update([
|
|
'approved_status' => '1',
|
|
'approved_at' => now(),
|
|
]);
|
|
|
|
if($acceptedJournalist){
|
|
return response()->json(['message' => 'Berhasil menyetujui jurnalis.']);
|
|
}
|
|
|
|
}else if($action === 'reject'){
|
|
$validatedData = $request->validate([
|
|
'rejection_reason' => ['required'],
|
|
], [
|
|
'rejection_reason.required' => 'Deskripsi wajib diisi.',
|
|
]);
|
|
|
|
$rejectedJournalist = $journalist->update([
|
|
'approved_status' => '2',
|
|
'rejection_reason' => $validatedData['rejection_reason']
|
|
]);
|
|
|
|
|
|
return redirect()->route('dashboard.journalists.submissions')->with('success-status', 'Berhasil menolak jurnalis.');
|
|
}
|
|
}
|
|
|
|
public function create(){
|
|
return view('dashboard.journalists.create',[
|
|
'title' => 'Tambah Data Jurnalis'
|
|
]);
|
|
}
|
|
|
|
public function store(JournalistRequest $request){
|
|
$validatedData = $request->validated();
|
|
|
|
$fileFieldMap = [
|
|
'journalist_ukw_sertificate_doc' => 'ukw_sertificate_doc',
|
|
'journalist_press_card_doc' => 'press_card_doc',
|
|
];
|
|
|
|
$journalistFileNames = [];
|
|
|
|
foreach ($fileFieldMap as $requestKey => $dbField) {
|
|
if ($request->hasFile($requestKey) && filled($validatedData[$requestKey])) {
|
|
$journalistFileNames[$requestKey] = store_file($validatedData[$requestKey], '/uploads/journalists', 'public')['randomFileName'];
|
|
}else{
|
|
$journalistFileNames[$requestKey] = null;
|
|
}
|
|
}
|
|
|
|
$createdJournalist = Journalist::create([
|
|
'name' => $validatedData['journalist_name'],
|
|
'email' => $validatedData['journalist_email'],
|
|
'phone_number' => $validatedData['journalist_phone_number'],
|
|
'press_card' => $validatedData['journalist_press_card'],
|
|
'press_card_doc' => $journalistFileNames['journalist_press_card_doc'],
|
|
'ukw_sertificate' => $validatedData['journalist_ukw_sertificate'],
|
|
'ukw_sertificate_doc' => $journalistFileNames['journalist_ukw_sertificate_doc'],
|
|
'approved_status' => '0',
|
|
'approved_at' => null,
|
|
'edit_description' => null,
|
|
'edit_status' => '0',
|
|
'media_id' => Auth::user()->company->media->id
|
|
]);
|
|
|
|
if($createdJournalist){
|
|
return redirect()->route('dashboard.journalists.index')->with('success-status', 'Berhasil menambahkan jurnalis.')->with('created-journalist', true);
|
|
}else{
|
|
return redirect()->route('dashboard.journalists.index')->with('failed-status', 'Gagal menambahkan jurnalis.');
|
|
}
|
|
}
|
|
|
|
public function editRequest($id){
|
|
$journalist = Journalist::findOrFail(decrypt_id($id));
|
|
if(!in_array($journalist->edit_status, ['0', '3'])){
|
|
abort(404);
|
|
}
|
|
|
|
return view('dashboard.journalists.edit-request', [
|
|
'title' => 'Permohonan Ubah Data Jurnalis',
|
|
'journalist' => $journalist
|
|
]);
|
|
}
|
|
|
|
public function editRequestAction(Request $request, $id){
|
|
$journalist = Journalist::findOrFail(decrypt_id($id));
|
|
if(!in_array($journalist->edit_status, ['0', '3'])){
|
|
abort(404);
|
|
}
|
|
|
|
$validatedData = $request->validate([
|
|
'edit_description' => ['required'],
|
|
], [
|
|
'edit_description.required' => 'Deskripsi wajib diisi.',
|
|
]);
|
|
|
|
if(!Auth::check()){
|
|
abort(404);
|
|
}
|
|
|
|
$updatedJournalist = $journalist->update([
|
|
'edit_status' => '1',
|
|
'edit_description' => $validatedData['edit_description']
|
|
]);
|
|
|
|
if($updatedJournalist){
|
|
return redirect()->route('dashboard.journalists.index')->with('success-status', 'Berhasil melakukan permohonan edit data jurnalis.');
|
|
}else{
|
|
return redirect()->route('dashboard.journalists.index')->with('failed-status', 'Gagal melakukan permohonan edit data jurnalis.');
|
|
}
|
|
}
|
|
|
|
public function processEdit($id){
|
|
$journalist = Journalist::findOrFail(decrypt_id($id));
|
|
if(!in_array($journalist->edit_status, ['1', '2']) || !is_role(['1'])){
|
|
abort(404);
|
|
}
|
|
|
|
return view('dashboard.journalists.show', [
|
|
'title' => 'Permohonan Ubah Data Jurnalis',
|
|
'journalist' => $journalist,
|
|
'purpose' => 'processEdit'
|
|
]);
|
|
}
|
|
|
|
public function processEditAction(Request $request, $id, $action){
|
|
$journalist = Journalist::findOrFail(decrypt_id($id));
|
|
if(!in_array($journalist->edit_status, ['1']) || !is_role(['1'])){
|
|
abort(404);
|
|
}
|
|
|
|
if(is_role(['1'])){
|
|
|
|
if($action === 'accept'){
|
|
$acceptedJournalist = $journalist->update([
|
|
'edit_status' => '2',
|
|
]);
|
|
|
|
if($acceptedJournalist){
|
|
return response()->json(['message' => 'Berhasil menyetujui permohonan edit jurnalis.']);
|
|
}
|
|
}else if($action === 'reject'){
|
|
|
|
$validatedData = $request->validate([
|
|
'edit_rejection_reason' => ['required'],
|
|
], [
|
|
'edit_rejection_reason.required' => 'Alasan penolakan wajib diisi.',
|
|
]);
|
|
|
|
$journalist->update([
|
|
'edit_status' => '3',
|
|
'edit_rejection_reason' => $validatedData['edit_rejection_reason']
|
|
]);
|
|
|
|
return redirect()->route('dashboard.journalists.index')->with('success-status', 'Berhasil menolak permohonan edit jurnalis.');
|
|
}
|
|
}
|
|
}
|
|
|
|
public function edit($id){
|
|
$journalist = Journalist::findOrFail(decrypt_id($id));
|
|
|
|
return view('dashboard.journalists.edit', [
|
|
'title' => 'Ubah Data Jurnalis',
|
|
'journalist' => $journalist
|
|
]);
|
|
}
|
|
|
|
public function update(JournalistRequest $request, $id){
|
|
$validatedData = $request->validated();
|
|
|
|
$journalist = Journalist::findOrFail(decrypt_id($id));
|
|
if(!in_array($journalist->edit_status, ['2'])){
|
|
abort(404);
|
|
}
|
|
|
|
$fileFieldMap = [
|
|
'journalist_ukw_sertificate_doc' => 'ukw_sertificate_doc',
|
|
'journalist_press_card_doc' => 'press_card_doc',
|
|
];
|
|
|
|
$journalistFileNames = [];
|
|
|
|
foreach ($fileFieldMap as $requestKey => $dbField) {
|
|
if ($request->hasFile($requestKey) && filled($validatedData[$requestKey])) {
|
|
$journalistFileNames[$requestKey] = store_file($validatedData[$requestKey], '/uploads/journalists', 'public')['randomFileName'];
|
|
}else{
|
|
$journalistFileNames[$requestKey] = $journalist->{$dbField};
|
|
}
|
|
}
|
|
|
|
$createdJournalist = $journalist->update([
|
|
'name' => $validatedData['journalist_name'],
|
|
'email' => $validatedData['journalist_email'],
|
|
'phone_number' => $validatedData['journalist_phone_number'],
|
|
'press_card' => $validatedData['journalist_press_card'],
|
|
'press_card_doc' => $journalistFileNames['journalist_press_card_doc'],
|
|
'ukw_sertificate' => $validatedData['journalist_ukw_sertificate'],
|
|
'ukw_sertificate_doc' => $journalistFileNames['journalist_ukw_sertificate_doc'],
|
|
'approved_status' => $journalist->approved_status,
|
|
'approved_at' => $journalist->approved_at,
|
|
'edit_description' => null,
|
|
'edit_status' => '0',
|
|
'media_id' => Auth::user()->company->media->id
|
|
]);
|
|
|
|
if($createdJournalist){
|
|
return redirect()->route('dashboard.journalists.index')->with('success-status', 'Berhasil mengubah jurnalis.');
|
|
}else{
|
|
return redirect()->route('dashboard.journalists.index')->with('failed-status', 'Gagal mengubah jurnalis.');
|
|
}
|
|
}
|
|
|
|
public function show($id){
|
|
$journalist = Journalist::findOrFail(decrypt_id($id));
|
|
|
|
return view('dashboard.journalists.show', [
|
|
'title' => 'Detail Jurnalis',
|
|
'journalist' => $journalist
|
|
]);
|
|
}
|
|
|
|
public function destroy($id){
|
|
try {
|
|
$journalist = Journalist::findOrFail(decrypt_id($id));
|
|
|
|
$user = User::with(['company.media.journalists'])->findOrFail(Auth::id());
|
|
|
|
$journalists = optional($user->company?->media)->journalists?->whereNull('deleted_at')->where('approved_status', '1');
|
|
|
|
if ($journalists->count() <= 1) {
|
|
return response()->json([
|
|
'status' => 'failed',
|
|
'message' => 'Media harus punya minimal satu jurnalis.'
|
|
]);
|
|
}
|
|
|
|
$journalist->delete();
|
|
|
|
|
|
return response()->json(['message' => 'Berhasil menghapus jurnalis.']);
|
|
} catch (\Exception $e) {
|
|
return response()->json(['message' => 'Gagal menghapus jurnalis.'], 500);
|
|
}
|
|
}
|
|
}
|