feat: request edit journalist

chore: change UI for index company journalist page
This commit is contained in:
myuqinurrohman 2025-04-14 10:28:52 +07:00
parent 4ffd6df2b9
commit 8fcd20c9f5
20 changed files with 1216 additions and 92 deletions

View File

@ -1008,7 +1008,114 @@ public function journalist(Request $request){
$query->withTrashed();
}, 'media.company.user' => function($query) {
$query->withTrashed();
}])->get();
}])
->where('approved_status', '1')
->whereNull('deleted_at')
->get();
return DataTables::of($data)
->addIndexColumn()
->addColumn('journalist_name', function ($data) {
return $data->name;
})
->addColumn('company_name', function ($data) {
return $data->media->company->name;
})
->addColumn('status', function ($data) {
switch($data->media->company->user->status){
case 0:
return '<span class="badge bg-warning" style="display:inline-block;font-size:0.8rem;">Menunggu</span>';
case 1:
return '<span class="badge bg-success" style="display:inline-block;font-size:0.8rem;">Diterima</span>';
case 2:
return '<span class="badge bg-danger" style="display:inline-block;font-size:0.8rem;"><a href="javasciprt: void(0);" onclick="showDetail('.htmlspecialchars(json_encode(strip_tags($data->media->company->rejection_reason))).')" class="text-light text-decoration-underline">Ditolak</a></span>';
case 3:
return '<span class="badge bg-secondary" style="display:inline-block;font-size:0.8rem;">Tidak Diketahui</span>';
default:
return '<span class="badge bg-secondary" style="display:inline-block;font-size:0.8rem;">Tidak Diketahui</span>';
}
})
->addColumn('status_edit', function ($data) {
switch($data->edit_status){
case 0:
return '<span class="badge bg-secondary" style="display:inline-block;font-size:0.8rem;">Tidak Ada</span>';
case 1:
return '<span class="badge bg-warning" style="display:inline-block;font-size:0.8rem;"><a href="javasciprt: void(0);" onclick="showEditDescription('.htmlspecialchars(json_encode(strip_tags($data->edit_description))).')" class="text-light text-decoration-underline">Menunggu</a></span>';
case 2:
return '<span class="badge bg-success" style="display:inline-block;font-size:0.8rem;">Diterima</span>';
case 3:
return '<span class="badge bg-danger" style="display:inline-block;font-size:0.8rem;"><a href="javasciprt: void(0);" onclick="showDetail('.htmlspecialchars(json_encode(strip_tags($data->edit_rejection_reason))).')" class="text-light text-decoration-underline">Ditolak</a></span>';
default:
return '<span class="badge bg-secondary" style="display:inline-block;font-size:0.8rem;">Tidak Diketahui</span>';
}
})
->addColumn('action', function ($data) {
$showUrl = route('dashboard.journalists.show', ['id' => encrypt_id($data->id)]);
$editUrl = route('dashboard.journalists.edit', ['id' => encrypt_id($data->id)]);
$deleteUrl = route('dashboard.journalists.destroy', ['id' => encrypt_id($data->id)]);
$processEditRequestCompanyUrl = route('dashboard.journalists.edit.process', ['id' => encrypt_id($data->id)]);
$dropdown = '<div class="dropdown" style="display:flex; justify-content:center;">
<a class="dropdown-toggle btn btn-icon btn-light" data-bs-toggle="dropdown"><em class="icon ni ni-more-v"></em></a>
<div class="dropdown-menu dropdown-menu-datatable-custom dropdown-menu-end">
<ul class="link-list-opt">
<li><a href="'.$showUrl.'"><em class="icon ni ni-eye"></em><span>Detail</span></a></li>';
if (is_role([1]) && $data->edit_status === '1' && $data->media->company->user->status === '1') {
$dropdown .= '<li><a href="'.$processEditRequestCompanyUrl.'"><em class="icon ni ni-loader"></em><span>Proses peremohonan Edit</span></a></li>';
}
if (is_role([3])) {
$dropdown .= '<li><a href="'.$editUrl.'"><em class="icon ni ni-edit"></em><span>Ubah</span></a></li>';
}
if (is_role([3])) {
$dropdown .= '<li><a href="javascript:void(0);" onclick="deleteItem(\''.$deleteUrl.'\', \'Apakah Anda yakin ingin menghapus tema '.$data->name.'? Item ini akan dihapus secara permanen!\')"><em class="icon ni ni-trash"></em><span>Hapus</span></a></li>';
}
$dropdown .= '</ul>
</div>
</div>';
return $dropdown;
})
->rawColumns(['status', 'status_edit', 'action'])
->make(true);
}
return response()->json(['error' => 'Unauthorized'], 401);
}
public function journalistSubmission(Request $request, $role){
if ($request->ajax()) {
$data = Journalist::with(['media' => function($query) {
$query->withTrashed();
}, 'media.company' => function($query) {
$query->withTrashed();
}, 'media.company.user' => function($query) {
$query->withTrashed();
}]);
if ($role === '1') {
$data->where('approved_status', '0')
->whereNull('deleted_at')
->orWhere('approved_status', '2');
} else if($role === '3'){
$data->where('approved_status', '0')
->orWhere('approved_status', '2')
->whereNull('deleted_at')
->where('media_id', Auth::user()->company->media->id);
}
$data = $data->get();
return DataTables::of($data)
@ -1033,8 +1140,8 @@ public function journalist(Request $request){
return '<span class="badge bg-secondary" style="display:inline-block;font-size:0.8rem;">Tidak Diketahui</span>';
}
})
->addColumn('status_edit', function ($data) {
switch($data->edit_status){
->addColumn('approved_status', function ($data) {
switch($data->approved_status){
case 0:
return '<span class="badge bg-warning" style="display:inline-block;font-size:0.8rem;">Menunggu</span>';
case 1:
@ -1050,6 +1157,8 @@ public function journalist(Request $request){
->addColumn('action', function ($data) {
$showUrl = route('dashboard.journalists.show', ['id' => encrypt_id($data->id)]);
$processUrl = route('dashboard.journalists.submissions.process', ['id' => encrypt_id($data->id)]);
$editUrl = route('dashboard.journalists.edit', ['id' => encrypt_id($data->id)]);
$deleteUrl = route('dashboard.journalists.destroy', ['id' => encrypt_id($data->id)]);
@ -1060,12 +1169,16 @@ public function journalist(Request $request){
<ul class="link-list-opt">
<li><a href="'.$showUrl.'"><em class="icon ni ni-eye"></em><span>Detail</span></a></li>';
if (is_role([1])) {
if (is_role(['1'])) {
$dropdown .= '<li><a href="'.$processUrl.'"><em class="icon ni ni-loader"></em><span>Proses</span></a></li>';
}
if (is_role(['3']) && in_array($data->approved_status, ['0'])) {
$dropdown .= '<li><a href="'.$editUrl.'"><em class="icon ni ni-edit"></em><span>Ubah</span></a></li>';
}
if (is_role([1])) {
$dropdown .= '<li><a href="javascript:void(0);" onclick="deleteItem(\''.$deleteUrl.'\', \'Apakah Anda yakin ingin menghapus tema '.$data->name.'? Item ini akan dihapus secara permanen!\')"><em class="icon ni ni-trash"></em><span>Hapus</span></a></li>';
if (is_role(['3']) && in_array($data->approved_status, ['0'])) {
$dropdown .= '<li><a href="javascript:void(0);" onclick="deleteItem(\''.$deleteUrl.'\', \'Apakah Anda yakin ingin menghapus jurnalis '.$data->name.'? Item ini akan dihapus secara permanen!\')"><em class="icon ni ni-trash"></em><span>Hapus</span></a></li>';
}
@ -1076,7 +1189,7 @@ public function journalist(Request $request){
return $dropdown;
})
->rawColumns(['status', 'status_edit', 'action'])
->rawColumns(['approved_status', 'action'])
->make(true);
}

View File

@ -3,20 +3,207 @@
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(){
return view('dashboard.journalists.index',[
'title' => 'Jurnalis'
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 create(){}
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 store(){}
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(){}
@ -31,5 +218,27 @@ public function show($id){
]);
}
public function destroy(){}
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);
}
}
}

View File

@ -42,7 +42,7 @@ public function index(Request $request){
}
public function editRequest(){
if(!in_array(Auth::user()->company->media->edit_status, ['0', '2', '3'])){
if(!in_array(Auth::user()->company->media->edit_status, ['0', '3'])){
abort(404);
}
@ -52,7 +52,7 @@ public function editRequest(){
}
public function editRequestAction(Request $request){
if(!in_array(Auth::user()->company->media->edit_status, ['0', '2', '3'])){
if(!in_array(Auth::user()->company->media->edit_status, ['0', '3'])){
abort(404);
}
@ -203,7 +203,7 @@ public function process(Request $request, $id, $type){
public function processAcceptAction(Request $request, $id, $type, $category){
$user = User::with(['company'])->findOrFail(decrypt_id($id));
if(!in_array($category, ['account-status', 'edit-request'])){
if(!in_array($category, ['account-status', 'edit-request']) || !is_role(['1'])){
abort(404);
}
@ -221,7 +221,7 @@ public function processAcceptAction(Request $request, $id, $type, $category){
public function processRejectAction(Request $request, $id, $type, $category){
$user = User::with(['company'])->findOrFail(decrypt_id($id));
if(!in_array($category, ['account-status', 'edit-request'])){
if(!in_array($category, ['account-status', 'edit-request']) || !is_role(['1'])){
abort(404);
}

View File

@ -0,0 +1,66 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class JournalistRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return Auth::check() && is_role(['3']);
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
*/
public function rules(): array
{
return [
'journalist_name' => ['required', 'max:100'],
'journalist_email' => ['required', 'max:100', 'email'],
'journalist_phone_number' => ['required', 'max:100'],
'journalist_press_card' => ['nullable', 'max:100'],
'journalist_press_card_doc' => ['nullable', 'file', 'mimes:pdf', 'max:2048'],
'journalist_ukw_sertificate' => ['nullable', 'max:100'],
'journalist_ukw_sertificate_doc' => ['nullable', 'file', 'mimes:pdf', 'max:2048'],
];
}
public function messages(): array
{
return [
'journalist_name.required' => 'Nama jurnalis wajib diisi.',
'journalist_name.max' => 'Nama jurnalis maksimal 100 karakter.',
'journalist_email.required' => 'Email jurnalis wajib diisi.',
'journalist_email.max' => 'Email jurnalis maksimal 100 karakter.',
'journalist_email.email' => 'Email jurnalis tidak valid.',
'journalist_phone_number.required' => 'Nomor telepon jurnalis wajib diisi.',
'journalist_phone_number.max' => 'Nomor telepon jurnalis maksimal 100 karakter.',
'journalist_press_card.max' => 'Kartu pers jurnalis maksimal 100 karakter.',
'journalist_press_card_doc.file' => 'Dokumen kartu pers jurnalis harus berupa file.',
'journalist_press_card_doc.mimes' => 'Dokumen kartu pers jurnalis harus dalam format PDF.',
'journalist_press_card_doc.max' => 'Ukuran dokumen kartu pers jurnalis maksimal 2 MB.',
'journalist_ukw_sertificate.max' => 'Sertifikat UKW jurnalis maksimal 100 karakter.',
'journalist_ukw_sertificate_doc.file' => 'Dokumen sertifikat UKW jurnalis harus berupa file.',
'journalist_ukw_sertificate_doc.mimes' => 'Dokumen sertifikat UKW jurnalis harus dalam format PDF.',
'journalist_ukw_sertificate_doc.max' => 'Ukuran dokumen sertifikat UKW jurnalis maksimal 2 MB.',
];
}
protected function prepareForValidation()
{
$this->merge([
'journalist_press_card' => filled($this->journalist_press_card) ? $this->journalist_press_card : null,
'journalist_press_card_doc' => filled($this->journalist_press_card_doc) ? $this->journalist_press_card_doc : null,
'journalist_ukw_sertificate' => filled($this->journalist_ukw_sertificate) ? $this->journalist_ukw_sertificate : null,
'journalist_ukw_sertificate_doc' => filled($this->journalist_ukw_sertificate_doc) ? $this->journalist_ukw_sertificate_doc : null,
]);
}
}

View File

@ -19,8 +19,11 @@ class Journalist extends Model
'press_card_doc',
'ukw_certificate',
'ukw_certificate_doc',
'approved_status',
'approved_at',
'edit_description',
'edit_status',
'edit_rejection_reason',
'media_id'
];

View File

@ -20,8 +20,12 @@ public function up(): void
$table->string('press_card_doc')->nullable();
$table->string('ukw_certificate')->nullable();
$table->string('ukw_certificate_doc')->nullable();
$table->enum('approved_status', ['0', '1', '2'])->default('0');
$table->timestamp('approved_at')-> nullable();
$table->text('edit_description')->nullable();
$table->text('edit_rejection_reason')->nullable();
$table->enum('edit_status', ['0', '1', '2', '3'])->default('0');
$table->text('rejection_reason')->nullable();
$table->unsignedBigInteger('media_id');
$table->foreign('media_id')->references('id')->on('media');
$table->timestamps();

View File

@ -26,6 +26,8 @@ public function run(): void
'press_card_doc' => $legacyJournalist->doc_of_press_card,
'ukw_certificate' => $legacyJournalist->certificate,
'ukw_certificate_doc' => $legacyJournalist->doc_of_certificate,
'approved_status' => '1',
'approved_at' => $legacyJournalist->created_at,
'edit_description' => $legacyJournalist->description_edit,
'edit_status' => $legacyJournalist->status_edit,
'created_at' => $legacyJournalist->created_at,

View File

@ -502,7 +502,7 @@
<div class="form-group">
<label class="form-label" for="journalist-phone-number">Nomor Telepon<span class="required-input">*</span></label>
<div class="form-control-wrap">
<input type="text" class="form-control required" required id="journalist-phone-number" name="journalist_phone_number" placeholder="Masukan nonor telepon jurnalis" value="{{old('journalist_phone_number')}}">
<input type="text" class="form-control required" required id="journalist-phone-number" name="journalist_phone_number" placeholder="Masukan nomor telepon jurnalis" value="{{old('journalist_phone_number')}}">
</div>
@error('journalist_phone_number')
<span class="auth-validation-error">{{$message}}</span>

View File

@ -0,0 +1,53 @@
@include('partials.dashboard.head')
@include('partials.dashboard.sidebar', ['page' => 'journalists'])
@include('partials.dashboard.header')
<!-- content @s -->
<div class="nk-content ">
<div class="container-fluid">
<div class="nk-content-inner">
<div class="nk-content-body">
<div class="nk-block-head nk-block-head-sm">
<div class="nk-block-between">
<div class="nk-block-head-content">
<h3 class="nk-block-title page-title">{{$title}}</h3>
</div><!-- .nk-block-head-content -->
<div class="nk-block-head-content">
<div class="toggle-wrap nk-block-tools-toggle">
<a href="#" class="btn btn-icon btn-trigger toggle-expand me-n1" data-target="pageMenu"><em class="icon ni ni-more-v"></em></a>
<div class="toggle-expand-content" data-content="pageMenu">
<ul class="nk-block-tools g-3">
<li class="nk-block-tools-opt"><a href="{{route('dashboard.journalists.submissions')}}" class="btn btn-info"><em class="icon ni ni-user-add"></em><span>Pengajuan Jurnalis</span></a></li>
</ul>
</div>
</div>
</div><!-- .nk-block-head-content -->
</div><!-- .nk-block-between -->
</div><!-- .nk-block-head -->
<div class="nk-block nk-block-lg">
<div class="card card-bordered card-preview">
<div class="card-inner">
<div class="table-responsive">
<table class="table table-striped table-bordered nowrap" id="journalistsTable" border="1">
<thead>
<tr>
<th style="width: 10% !important;">No</th>
<th>Nama Jurnalis</th>
<th>Perusahaan</th>
<th>Email</th>
<th>No Telepon</th>
<th>Status</th>
<th>Status Edit</th>
<th style="width: 10% !important;"></th>
</tr>
</thead>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- content @e -->
@include('partials.dashboard.footer' ,['datatable' => 'journalist'])

View File

@ -0,0 +1,133 @@
@include('partials.dashboard.head')
@include('partials.dashboard.sidebar', ['page' => 'journalists'])
@include('partials.dashboard.header')
<!-- content @s -->
<div class="nk-content ">
<div class="container-fluid">
<div class="nk-content-inner">
<div class="nk-content-body">
<div class="nk-block-head nk-block-head-sm">
<div class="nk-block-between g-3">
<div class="nk-block-head-content">
<h3 class="nk-block-title page-title">Tambah Jurnalis</h3>
<div class="nk-block-des text-soft">
<ul class="list-inline">
<li>Tambah jurnalis Anda di sini.</li>
</ul>
</div>
</div>
<div class="nk-block-head-content">
<a href="{{route('dashboard.journalists.index')}}" class="btn btn-outline-light bg-white d-none d-sm-inline-flex"><em class="icon ni ni-arrow-left"></em><span>Kembali</span></a>
<a href="{{route('dashboard.journalists.index')}}" class="btn btn-icon btn-outline-light bg-white d-inline-flex d-sm-none"><em class="icon ni ni-arrow-left"></em></a>
</div>
</div>
</div><!-- .nk-block-head -->
<div class="nk-block nk-block-lg">
<div class="example-alert mb-2">
<div class="alert alert-warning alert-icon">
<em class="icon ni ni-alert-circle"></em> Setelah menambahkan jurnalis, data akan terlebih dahulu ditinjau oleh admin sebelum disetujui. Mohon pastikan informasi yang diinput sudah lengkap dan benar.
</div>
</div>
<div class="card">
<div class="card-aside-wrap">
<div class="card-content">
<div class="card-inner">
{{-- <div class="nk-divider divider md"></div> --}}
<form action="{{route('dashboard.journalists.store')}}" method="post" id="myForm" enctype="multipart/form-data">
@csrf
<div class="nk-block">
<div class="row gy-4">
<div class="col-sm-6">
<div class="form-group">
<label class="form-label" for="journalist-name">Nama Jurnalis<span class="required-input">*</span></label>
<div class="form-control-wrap">
<input type="text" class="form-control required" required id="journalist-name" name="journalist_name" placeholder="Masukan nama jurnalis" value="{{old('journalist_name')}}">
</div>
@error('journalist_name')
<span class="auth-validation-error">{{$message}}</span>
@enderror
</div>
</div>
<div class="col-sm-6">
<div class="form-group">
<label class="form-label" for="journalist-email">Email Jurnalis<span class="required-input">*</span></label>
<div class="form-control-wrap">
<input type="email" class="form-control required" required id="journalist-email" name="journalist_email" placeholder="Masukan email jurnalis" value="{{old('journalist_email')}}">
</div>
@error('journalist_email')
<span class="auth-validation-error">{{$message}}</span>
@enderror
</div>
</div>
<div class="col-sm-6">
<div class="form-group">
<label class="form-label" for="journalist-phone-number">Nomor Telepon<span class="required-input">*</span></label>
<div class="form-control-wrap">
<input type="text" class="form-control required" required id="journalist-phone-number" name="journalist_phone_number" placeholder="Masukan nomor telepon jurnalis" value="{{old('journalist_phone_number')}}">
</div>
@error('journalist_phone_number')
<span class="auth-validation-error">{{$message}}</span>
@enderror
</div>
</div>
<div class="col-sm-6">
<div class="form-group">
<label class="form-label" for="journalist-press-card">Kartu Pers</label>
<div class="form-control-wrap">
<input type="text" class="form-control" id="journalist-press-card" name="journalist_press_card" placeholder="Masukan kartu pers" value="{{old('journalist_press_card')}}">
</div>
@error('journalist_press_card')
<span class="auth-validation-error">{{$message}}</span>
@enderror
</div>
</div>
<div class="col-sm-6">
<div class="form-group">
<label class="form-label" for="journalist-press-card-document">Dokumen Kartu Pers</label>
<div class="form-control-wrap">
<input type="file" accept=".pdf" class="form-control" id="journalist-press-card-document" name="journalist_press_card_doc">
</div>
@error('journalist_press_card_doc')
<span class="auth-validation-error">{{$message}}</span>
@enderror
</div>
</div>
<div class="col-sm-6">
<div class="form-group">
<label class="form-label" for="ukw-sertificate">Sertifikat UKW</label>
<div class="form-control-wrap">
<input type="text" class="form-control" id="ukw-sertificate" name="journalist_ukw_sertificate" placeholder="Masukan sertifikat UKW" value="{{old('journalist_ukw_sertificate')}}">
</div>
@error('journalist_ukw_sertificate')
<span class="auth-validation-error">{{$message}}</span>
@enderror
</div>
</div>
<div class="col-sm-6">
<div class="form-group">
<label class="form-label" for="ukw-sertificate-document">Dokumen Sertifikat UKW</label>
<div class="form-control-wrap">
<input type="file" accept=".pdf" class="form-control" id="ukw-sertificate-document" name="journalist_ukw_sertificate_doc">
</div>
@error('journalist_ukw_sertificate_doc')
<span class="auth-validation-error">{{$message}}</span>
@enderror
</div>
</div>
</div>
<div class="mt-5 d-flex justify-content-end p-2 rounded-2" style="background-color: #f4f4f4 !important;">
<button type="button" class="btn btn-primary" id="submitButton">Kirim</button>
</div>
</div><!-- .nk-block -->
</form>
</div><!-- .card-inner -->
</div><!-- .card-content -->
</div><!-- .card-aside-wrap -->
</div>
</div>
</div>
</div>
</div>
</div>
<!-- content @e -->
@include('partials.dashboard.footer', ['rich_editor' => false])

View File

@ -0,0 +1,65 @@
@include('partials.dashboard.head')
@include('partials.dashboard.sidebar', ['page' => 'companies'])
@include('partials.dashboard.header')
<!-- content @s -->
<div class="nk-content ">
<div class="container-fluid">
<div class="nk-content-inner">
<div class="nk-content-body">
<div class="nk-block-head nk-block-head-sm">
<div class="nk-block-between g-3">
<div class="nk-block-head-content">
<h3 class="nk-block-title page-title">Ubah Data Jurnalis</h3>
<div class="nk-block-des text-soft">
<ul class="list-inline">
<li>Buat permohonan untuk mengubah data jurnalis Anda di sini.</li>
</ul>
</div>
</div>
<div class="nk-block-head-content">
<a href="{{route('dashboard.companies.index')}}" class="btn btn-outline-light bg-white d-none d-sm-inline-flex"><em class="icon ni ni-arrow-left"></em><span>Kembali</span></a>
<a href="{{route('dashboard.companies.index')}}" class="btn btn-icon btn-outline-light bg-white d-inline-flex d-sm-none"><em class="icon ni ni-arrow-left"></em></a>
</div>
</div>
</div><!-- .nk-block-head -->
<div class="nk-block nk-block-lg">
<div class="example-alert mb-2">
<div class="alert alert-warning alert-icon">
<em class="icon ni ni-alert-circle"></em> Mohon berikan <strong>deskripsi permohonan yang jelas dan informatif</strong> untuk menjelaskan alasan perubahan data jurnalis serta data apa saja yang ingin diubah. Hal ini akan mempercepat proses validasi oleh tim kami.
</div>
</div>
<div class="card">
<div class="card-aside-wrap">
<div class="card-content">
<div class="card-inner">
{{-- <div class="nk-divider divider md"></div> --}}
<form action="{{route('dashboard.journalists.edit.request.action', ['id' => encrypt_id($journalist->id)])}}" method="post" id="myForm">
@csrf
@method('put')
<div class="nk-block">
<div class="nk-block-head nk-block-head-sm nk-block-between">
<span class="profile-ud-label text-dark">Deskripsi Permohonan<span class="required-input">*</span></span>
</div><!-- .nk-block-head -->
<div class="bq-note">
<div class="bq-note-item">
<div class="form-control-wrap">
<textarea class="form-control form-control-sm" id="cf-default-textarea" placeholder="Alasan Anda ingin mengubah data jurnalis dan data apa saja yang akan diubah" required name="edit_description"></textarea>
</div>
</div><!-- .bq-note-item -->
</div><!-- .bq-note -->
<div class="mt-2 d-flex justify-content-end p-2 rounded-2" style="background-color: #f4f4f4 !important;">
<button type="button" class="btn btn-primary" id="submitButton">Kirim</button>
</div>
</div><!-- .nk-block -->
</form>
</div><!-- .card-inner -->
</div><!-- .card-content -->
</div><!-- .card-aside-wrap -->
</div>
</div>
</div>
</div>
</div>
</div>
<!-- content @e -->
@include('partials.dashboard.footer', ['rich_editor' => false])

View File

@ -7,59 +7,193 @@
<div class="nk-content-inner">
<div class="nk-content-body">
<div class="nk-block-head nk-block-head-sm">
<div class="nk-block-between">
<div class="nk-block-between g-3">
<div class="nk-block-head-content">
<h3 class="nk-block-title page-title">Data Jurnalis</h3>
<div class="nk-block-des text-soft">
<ul class="list-inline">
<li>Lihat informasi jurnalis Anda di sini.</li>
</ul>
</div>
</div>
<div class="nk-block-head-content">
<h3 class="nk-block-title page-title">{{$title}}</h3>
</div><!-- .nk-block-head-content -->
{{-- <div class="nk-block-head-content">
<div class="toggle-wrap nk-block-tools-toggle">
<a href="#" class="btn btn-icon btn-trigger toggle-expand me-n1" data-target="pageMenu"><em class="icon ni ni-more-v"></em></a>
<div class="toggle-expand-content" data-content="pageMenu">
<ul class="nk-block-tools g-3">
<li>
<div class="drodown">
<a href="#" class="dropdown-toggle btn btn-white btn-dim btn-outline-light" data-bs-toggle="dropdown"><em class="d-none d-sm-inline icon ni ni-calender-date"></em><span><span class="d-none d-md-inline">Last</span> 30 Days</span><em class="dd-indc icon ni ni-chevron-right"></em></a>
<div class="dropdown-menu dropdown-menu-end">
<ul class="link-list-opt no-bdr">
<li><a href="#"><span>Last 30 Days</span></a></li>
<li><a href="#"><span>Last 6 Months</span></a></li>
<li><a href="#"><span>Last 1 Years</span></a></li>
</ul>
</div>
</div>
</li>
<li class="nk-block-tools-opt"><a href="{{route('dashboard.users.create')}}" class="btn btn-primary"><em class="icon ni ni-plus"></em><span>Tambah</span></a></li>
<li class="nk-block-tools-opt"><a href="{{route('dashboard.journalists.submissions')}}" class="btn btn-info"><em class="icon ni ni-user-add"></em><span>Pengajuan Jurnalis</span></a></li>
<li class="nk-block-tools-opt"><a href="{{route('dashboard.journalists.create')}}" class="btn btn-primary"><em class="icon ni ni-plus"></em><span>Tambah</span></a></li>
</ul>
</div>
</div>
</div><!-- .nk-block-head-content --> --}}
</div><!-- .nk-block-between -->
</div>
</div>
</div><!-- .nk-block-head -->
<div class="nk-block nk-block-lg">
<div class="card card-bordered card-preview">
<div class="card-inner">
<div class="table-responsive">
<table class="table table-striped table-bordered nowrap" id="journalistsTable" border="1">
<thead>
<tr>
<th style="width: 10% !important;">No</th>
<th>Nama Jurnalis</th>
<th>Perusahaan</th>
<th>Email</th>
<th>No Telepon</th>
<th>Status</th>
<th>Status Edit</th>
<th style="width: 10% !important;"></th>
</tr>
</thead>
</table>
</div>
@if (session()->has('created-journalist'))
<div class="example-alert mb-2">
<div class="alert alert-info alert-icon">
<em class="icon ni ni-alert-circle"></em> Jurnalis berhasil ditambahkan. Data akan ditinjau oleh admin terlebih dahulu sebelum dapat digunakan. Mohon tunggu hingga proses persetujuan selesai.
</div>
</div>
@endif
<div class="card">
<div class="card-aside-wrap">
<div class="card-content">
<div class="card-inner">
<div class="nk-block">
<div class="nk-block-head">
<h5 class="title">Informasi Jurnalis</h5>
<p>Informasi umum terkait jurnalis Anda</p>
</div><!-- .nk-block-head -->
@foreach ($journalists as $journalist)
<div class="card card-bordered card-preview mb-2">
<div class="card-inner">
<div id="accordion-{{$loop->iteration}}" class="accordion accordion-s3">
<div class="accordion-item">
<a href="#" class="accordion-head collapsed" data-bs-toggle="collapse" data-bs-target="#accordion-item-2-{{$loop->iteration}}">
<h6 class="title">
<div class="user-card">
<div class="user-avatar sm bg-primary">
<em class="icon ni ni-user-alt"></em>
</div>
<div class="user-name" style="font-size: 1.1rem !important;">
<span class="tb-lead">{{$journalist->name}}</span>
</div>
</div>
</h6>
<span class="accordion-icon"></span>
</a>
<div class="accordion-body collapse" id="accordion-item-2-{{$loop->iteration}}" data-bs-parent="#accordion-{{$loop->iteration}}">
<div class="accordion-inner">
{{-- <div class="nk-divider divider md"></div> --}}
<div class="profile-ud-list">
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Nama Jurnalis</span>
<span class="profile-ud-value">{{$journalist->name}}</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Email</span>
<span class="profile-ud-value">{{$journalist->email}}</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Nomor Telepon</span>
<span class="profile-ud-value">{{$journalist->phone_number}}</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Kartu Pers</span>
<span class="profile-ud-value">
{{$journalist->press_card ?? '-'}}
</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Sertifikat UKW</span>
<span class="profile-ud-value">
{{$journalist->ukw_sertificate ?? '-'}}
</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Status Edit</span>
<span class="profile-ud-value">
@switch($journalist->edit_status)
@case(0)
<span class="profile-ud-value"><span class="badge bg-secondary">Tidak Ada</span></span>
@break
@case(1)
<span class="profile-ud-value"><span class="badge bg-warning">Menunggu</span></span>
@break
@case(2)
<span class="profile-ud-value"><span class="badge bg-primary">Diterima</span></span>
@break
@case(3)
<span class="profile-ud-value">
<span class="badge bg-danger">
<a href="javascript:void(0);" onclick="showDetail({{ json_encode(strip_tags($user->company->edit_rejection_reason)) }})" class="text-light text-decoration-underline">Ditolak</a>
</span>
</span>
@break
@default
<span class="profile-ud-value"><span class="badge bg-secondary">Tidak Diketahui</span></span>
@endswitch
</span>
</div>
</div>
</div><!-- .profile-ud-list -->
<div class="nk-divider divider md"></div>
<div class="nk-block">
<div class="bq-note">
<div class="bq-note-item">
<span class="profile-ud-label mb-1">Dokumen Kartu Pers</span>
<div class="bq-note-text">
{!! display_file('journalists', $journalist->press_card_doc) !!}
</div>
</div><!-- .bq-note-item -->
<div class="bq-note-item">
<span class="profile-ud-label mb-1">Dokumen Sertifikat UKW</span>
<div class="bq-note-text">
{!! display_file('journalists', $journalist->ukw_sertificate_doc) !!}
</div>
</div><!-- .bq-note-item -->
</div><!-- .bq-note -->
</div><!-- .nk-block -->
<div style="display: flex; justify-content: center; margin-top: 1rem;">
<a href="javascript:void(0);" class="btn btn-danger mx-1" onclick="deleteItem('{{ route('dashboard.journalists.destroy', ['id' => encrypt_id($journalist->id)]) }}',
'Apakah Anda yakin ingin menghapus jurnalis {{ $journalist->name }}? Item ini akan dihapus secara permanen!'
)">
<em class="icon ni ni-trash"></em>
<span>Hapus</span>
</a>
@if (in_array($journalist->edit_status, ['0', '3']))
<a href="{{route('dashboard.journalists.edit.request', ['id' => encrypt_id($journalist->id)])}}" class="btn btn-warning mx-1">
<em class="icon ni ni-pen2"></em>
<span>Ubah</span></a>
@elseif($journalist->edit_status === '1')
<a href="javascript:void(0);" class="btn d-none d-sm-inline-flex" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Menunggu persetujuan Admin" aria-disabled="true" tabindex="-1" style="background-color: #DBDBDB; color: #89A8B2;"><em class="icon ni ni-pen2"></em><span>Ubah</span></a>
@endif
</div>
</div>
</div>
</div>
</div>
</div>
</div><!-- .card-preview -->
@endforeach
</div><!-- .nk-block -->
{{-- <div class="nk-divider divider md"></div> --}}
{{-- <div class="nk-divider divider md"></div> --}}
@if (filled($user->company->rejection_reason))
<div class="nk-block">
<div class="nk-block-head nk-block-head-sm nk-block-between">
<span class="profile-ud-label">Alasan Penolakan</span>
</div><!-- .nk-block-head -->
<div class="bq-note">
<div class="bq-note-item">
<div class="bq-note-text">
{!!$user->company->rejection_reason ?? '-' !!}
</div>
</div><!-- .bq-note-item -->
</div><!-- .bq-note -->
</div><!-- .nk-block -->
@endif
</div><!-- .card-inner -->
</div><!-- .card-content -->
</div><!-- .card-aside-wrap -->
</div>
</div>
</div>
</div>
</div>
</div>
<!-- content @e -->
@include('partials.dashboard.footer' ,['datatable' => 'journalist'])
@include('partials.dashboard.footer', ['rich_editor' => false])

View File

@ -0,0 +1,139 @@
@include('partials.dashboard.head')
@include('partials.dashboard.sidebar', ['page' => 'journalists'])
@include('partials.dashboard.header')
<!-- content @s -->
<div class="nk-content ">
<div class="container-fluid">
<div class="nk-content-inner">
<div class="nk-content-body">
<div class="nk-block-head nk-block-head-sm">
<div class="nk-block-between g-3">
<div class="nk-block-head-content">
<h3 class="nk-block-title page-title">Data Jurnalis</h3>
<div class="nk-block-des text-soft">
<ul class="list-inline">
<li>Lihat informasi jurnalis di sini.</li>
</ul>
</div>
</div>
<div class="nk-block-head-content">
<div class="toggle-wrap nk-block-tools-toggle">
<a href="#" class="btn btn-icon btn-trigger toggle-expand me-n1" data-target="pageMenu"><em class="icon ni ni-more-v"></em></a>
<div class="toggle-expand-content" data-content="pageMenu">
<ul class="nk-block-tools g-3">
<li class="nk-block-tools-opt">
<a href="{{route('dashboard.journalists.submissions')}}" class="btn btn-outline-light bg-white d-none d-sm-inline-flex"><em class="icon ni ni-arrow-left"></em><span>Kembali</span></a>
</li>
</ul>
</div>
</div>
</div>
</div>
</div><!-- .nk-block-head -->
<div class="nk-block nk-block-lg">
<div class="card">
<div class="card-aside-wrap">
<div class="card-content">
<div class="card-inner">
<div class="nk-block">
<div class="profile-ud-list">
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Nama Jurnalis</span>
<span class="profile-ud-value">{{$journalist->name}}</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Email</span>
<span class="profile-ud-value">{{$journalist->email}}</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Nomor Telepon</span>
<span class="profile-ud-value">{{$journalist->phone_number}}</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Kartu Pers</span>
<span class="profile-ud-value">
{{$journalist->press_card ?? '-'}}
</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Sertifikat UKW</span>
<span class="profile-ud-value">
{{$journalist->ukw_sertificate ?? '-'}}
</span>
</div>
</div>
</div><!-- .profile-ud-list -->
<div class="nk-divider divider md"></div>
<div class="nk-block">
<div class="bq-note">
<div class="bq-note-item">
<span class="profile-ud-label mb-1">Dokumen Kartu Pers</span>
<div class="bq-note-text">
{!! display_file('journalists', $journalist->press_card_doc) !!}
</div>
</div><!-- .bq-note-item -->
<div class="bq-note-item">
<span class="profile-ud-label mb-1">Dokumen Sertifikat UKW</span>
<div class="bq-note-text">
{!! display_file('journalists', $journalist->ukw_sertificate_doc) !!}
</div>
</div><!-- .bq-note-item -->
</div><!-- .bq-note -->
</div><!-- .nk-block -->
</div><!-- .nk-block -->
{{-- <div class="nk-divider divider md"></div> --}}
</div><!-- .card-inner -->
</div><!-- .card-content -->
</div><!-- .card-aside-wrap -->
</div>
@if ($journalist->approved_status === '0')
<div class="mt-1 d-flex justify-content-end p-2 rounded-2" style="background-color: #F5F6FA !important;">
<a href="javascript:void(0);" class="btn btn-danger mx-1" data-bs-toggle="modal" data-bs-target="#modalForm">Tolak</a>
<a href="javascript:void(0);" class="btn btn-primary mx-1" onclick="statusAction('{{route('dashboard.journalists.submissions.process.action', ['id' => encrypt_id($journalist->id), 'action' => 'accept'])}}', 'Apakah Anda yakin ingin menyetujui jurnalis {{$journalist->name}}?', 'Ya, Setujui')">
Terima
</a>
</div>
@endif
</div>
<div class="modal fade" id="modalForm">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Data Penolakan</h5>
<a href="#" class="close" data-bs-dismiss="modal" aria-label="Close">
<em class="icon ni ni-cross"></em>
</a>
</div>
<form action="{{route('dashboard.journalists.submissions.process.action', ['id' => encrypt_id($journalist->id), 'action' => 'reject'])}}" class="form-validate is-alter" id="myForm" method="post">
@csrf
@method('put')
<div class="modal-body">
<div class="form-group">
<label class="form-label" for="rejection_reason">Alasan Menolak<span class="required-input">*</span></label>
<div class="form-control-wrap">
<textarea class="form-control form-control-sm" id="cf-default-textarea" placeholder="Alasan Anda melakukan penolakan" required name="rejection_reason"></textarea>
</div>
</div>
</div>
<div class="modal-footer bg-light">
<button type="button" class="btn btn-sm btn-primary" id="submitButton">Kirim</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- content @e -->
@include('partials.dashboard.footer', ['rich_editor' => false])

View File

@ -6,15 +6,53 @@
<div class="container-fluid">
<div class="nk-content-inner">
<div class="nk-content-body">
<div class="nk-block-head nk-block-head-sm">
<div class="nk-block-between g-3">
<div class="nk-block-head-content">
<h3 class="nk-block-title page-title">Detail Jurnalis</h3>
<div class="nk-block-des text-soft">
<ul class="list-inline">
<li>Lihat informasi jurnalis di sini.</li>
</ul>
</div>
</div>
<div class="nk-block-head-content">
<a href="{{route('dashboard.journalists.index')}}" class="btn btn-outline-light bg-white d-none d-sm-inline-flex"><em class="icon ni ni-arrow-left"></em><span>Kembali</span></a>
<a href="{{route('dashboard.journalists.index')}}" class="btn btn-icon btn-outline-light bg-white d-inline-flex d-sm-none"><em class="icon ni ni-arrow-left"></em></a>
</div>
</div>
</div><!-- .nk-block-head -->
@if (isset($purpose) && $purpose === 'processEdit' && $journalist->edit_status === '1')
<div class="card card-bordered card-preview mb-2">
<ul class="nav nav-tabs nav-tabs-mb-icon nav-tabs-card">
<li class="nav-item">
<a class="nav-link text-info" href="#"><em class="icon ni ni-edit-alt"></em><span>Permohonan Edit Jurnalis</span></a>
</li>
</ul><!-- .nav-tabs -->
<div class="card-inner">
<div class="form-group">
<label class="form-label" for="description">Deskripsi Permohonan</label>
<div class="bq-note">
<div class="bq-note-item">
<div class="bq-note-text">
@if (filled($journalist->edit_description))
{{ $journalist->edit_description }}
@else
<div class="d-flex justify-content-center align-items-center">
<span class="text-center"><i>Tidak ada deskripsi atau alasan</i></span>
</div>
@endif
</div>
</div><!-- .bq-note-item -->
</div><!-- .bq-note -->
</div>
</div>
</div>
@endif
<div class="nk-block nk-block-lg">
<div class="card">
<div class="card-aside-wrap">
<div class="card-content">
<ul class="nav nav-tabs nav-tabs-mb-icon nav-tabs-card">
<li class="nav-item">
<a class="nav-link text-primary" href="#"><em class="icon ni ni-info"></em><span>Detail Jurnalis</span></a>
</li>
</ul><!-- .nav-tabs -->
<div class="card-inner">
<div class="nk-block">
{{-- <div class="nk-block-head">
@ -44,11 +82,7 @@
<div class="profile-ud wider">
<span class="profile-ud-label">Kartu Pers</span>
<span class="profile-ud-value">
@if ($journalist->press_card_doc)
<a href="{{asset('storage/uploads/companies/'. $journalist->press_card_doc)}}" target="__blank">{{$journalist->press_card}}</a>
@else
{{$journalist->press_card ?? '-'}}
@endif
</span>
</div>
</div>
@ -56,34 +90,55 @@
<div class="profile-ud wider">
<span class="profile-ud-label">Sertifikat UKW</span>
<span class="profile-ud-value">
@if ($journalist->ukw_sertificate_doc)
<a href="{{asset('storage/uploads/companies/'. $journalist->ukw_sertificate_doc)}}" target="__blank">{{$journalist->ukw_sertificate}}</a>
@else
{{$journalist->ukw_sertificate ?? '-'}}
@endif
</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Status</span>
@switch($journalist->media->company->user->status)
<span class="profile-ud-label">Status Edit</span>
<span class="profile-ud-value">
@switch($journalist->edit_status)
@case(0)
<span class="profile-ud-value"><span class="badge bg-warning">Menunggu</span></span>
<span class="profile-ud-value"><span class="badge bg-secondary">Tidak Ada</span></span>
@break
@case(1)
<span class="profile-ud-value"><span class="badge bg-success">Diterima</span></span>
<span class="profile-ud-value"><span class="badge bg-warning">Menunggu</span></span>
@break
@case(2)
<span class="profile-ud-value"><span class="badge bg-danger">Ditolak</span></span>
<span class="profile-ud-value"><span class="badge bg-primary">Diterima</span></span>
@break
@case(3)
<span class="profile-ud-value">
<span class="badge bg-danger">
<a href="javascript:void(0);" onclick="showDetail({{ json_encode(strip_tags($user->company->edit_rejection_reason)) }})" class="text-light text-decoration-underline">Ditolak</a>
</span>
</span>
@break
@default
<span class="profile-ud-value"><span class="badge bg-secondary">Tidak Diketahui</span></span>
@endswitch
</span>
</div>
</div>
</div><!-- .profile-ud-list -->
<div class="nk-divider divider md"></div>
<div class="nk-block">
<div class="bq-note">
<div class="bq-note-item">
<span class="profile-ud-label mb-1">Dokumen Kartu Pers</span>
<div class="bq-note-text">
{!! display_file('journalists', $journalist->press_card_doc) !!}
</div>
</div><!-- .bq-note-item -->
<div class="bq-note-item">
<span class="profile-ud-label mb-1">Dokumen Sertifikat UKW</span>
<div class="bq-note-text">
{!! display_file('journalists', $journalist->ukw_sertificate_doc) !!}
</div>
</div><!-- .bq-note-item -->
</div><!-- .bq-note -->
</div><!-- .nk-block -->
</div><!-- .nk-block -->
{{-- <div class="nk-divider divider md"></div> --}}
{{-- @if (filled($journalist->rejection_reason))
@ -112,15 +167,45 @@
</div><!-- .bq-note-item -->
</div><!-- .bq-note -->
</div><!-- .nk-block --> --}}
<hr>
<div class="nk-block d-flex justify-content-end">
<a href="{{route('dashboard.journalists.index')}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a>
{{-- <a href="{{route('dashboard.content.recaps.edit', ['id' => encrypt_id($journalistMonitoring->id)])}}" class="btn btn-warning"><span>Ubah</span></a> --}}
</div><!-- .nk-block -->
</div><!-- .card-inner -->
</div><!-- .card-content -->
</div><!-- .card-aside-wrap -->
</div>
@if (isset($purpose) && $purpose === 'processEdit' && $journalist->edit_status === '1')
<div class="mt-2 d-flex justify-content-end p-2 rounded-2" style="background-color: #EEEEEE !important;">
<a href="javascript:void(0);" class="btn btn-danger mx-1" data-bs-toggle="modal" data-bs-target="#modalForm">Tolak</a>
<a href="javascript:void(0);" class="btn btn-primary mx-1" onclick="statusAction('{{route('dashboard.journalists.edit.process.action', ['id' => encrypt_id($journalist->id), 'action' => 'accept'])}}', 'Apakah Anda yakin ingin menyetujui edit jurnalis {{$journalist->name}}?', 'Ya, Setujui')">
Terima
</a>
</div>
@endif
<div class="modal fade" id="modalForm">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Tolak Permohonan Edit Jurnalis</h5>
<a href="#" class="close" data-bs-dismiss="modal" aria-label="Close">
<em class="icon ni ni-cross"></em>
</a>
</div>
<form action="{{route('dashboard.journalists.edit.process.action', ['id' => encrypt_id($journalist->id), 'action' => 'reject'])}}" class="form-validate is-alter" id="myForm" method="post">
@csrf
@method('put')
<div class="modal-body">
<div class="form-group">
<label class="form-label" for="edit_rejection_reason">Alasan Menolak<span class="required-input">*</span></label>
<div class="form-control-wrap">
<textarea class="form-control form-control-sm" id="cf-default-textarea" placeholder="Alasan Anda melakukan penolakan" required name="edit_rejection_reason"></textarea>
</div>
</div>
</div>
<div class="modal-footer bg-light">
<button type="button" class="btn btn-sm btn-primary" id="submitButton">Kirim</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,56 @@
@include('partials.dashboard.head')
@include('partials.dashboard.sidebar', ['page' => 'journalists'])
@include('partials.dashboard.header')
<!-- content @s -->
<div class="nk-content ">
<div class="container-fluid">
<div class="nk-content-inner">
<div class="nk-content-body">
<div class="nk-block-head nk-block-head-sm">
<div class="nk-block-between">
<div class="nk-block-head-content">
<h3 class="nk-block-title page-title">{{$title}}</h3>
</div><!-- .nk-block-head-content -->
<div class="nk-block-head-content">
<div class="toggle-wrap nk-block-tools-toggle">
<a href="#" class="btn btn-icon btn-trigger toggle-expand me-n1" data-target="pageMenu"><em class="icon ni ni-more-v"></em></a>
<div class="toggle-expand-content" data-content="pageMenu">
<ul class="nk-block-tools g-3">
<li class="nk-block-tools-opt">
<a href="{{route('dashboard.journalists.index')}}" class="btn btn-outline-light bg-white d-none d-sm-inline-flex"><em class="icon ni ni-arrow-left"></em><span>Kembali</span></a>
</li>
</ul>
</div>
</div>
</div><!-- .nk-block-head-content -->
</div><!-- .nk-block-between -->
</div><!-- .nk-block-head -->
<div class="nk-block nk-block-lg">
<div class="card card-bordered card-preview">
<div class="card-inner">
<div class="table-responsive">
<table class="table table-striped table-bordered nowrap" id="journalistSubmissionsTable" border="1">
<thead>
<tr>
<th style="width: 10% !important;">No</th>
<th>Nama Jurnalis</th>
@if (is_role(['1']))
<th>Perusahaan</th>
@endif
<th>Email</th>
<th>No Telepon</th>
<th>Status</th>
<th style="width: 10% !important;"></th>
</tr>
</thead>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- content @e -->
@include('partials.dashboard.footer' ,['datatable' => 'journalist_submission'])

View File

@ -1,5 +1,5 @@
@if ($user->status === '0' && isset($process) && $process === 'accept')
<div class="mt-2 d-flex justify-content-end p-2 rounded-2" style="background-color: #D4EBF8 !important;">
<div class="mt-2 d-flex justify-content-end p-2 rounded-2" style="background-color: #EEEEEE !important;">
<a href="{{route('dashboard.users.process', ['id' => encrypt_id($user->id), 'type' => 'account', 'process' => 'reject'])}}" class="btn btn-danger mx-1">Tolak</a>
<a href="javascript:void(0);" class="btn btn-primary mx-1" onclick="statusAction('{{route('dashboard.users.status.action', ['id' => encrypt_id($user->id), 'action' => 'accept'])}}', 'Apakah Anda yakin ingin menyetujui pengguna {{$user->name}}?', 'Ya, Setujui')">
Terima
@ -49,14 +49,14 @@
@if (isset($purpose) && $purpose === 'process' && in_array($page, ['company', 'media']) && filled($category))
@if ($category === 'account-status' && $user->status === '0')
<div class="mt-2 d-flex justify-content-end p-2 rounded-2" style="background-color: #D4EBF8 !important;">
<div class="mt-2 d-flex justify-content-end p-2 rounded-2" style="background-color: #EEEEEE !important;">
<a href="javascript:void(0);" class="btn btn-danger mx-1" data-bs-toggle="modal" data-bs-target="#modalForm">Tolak</a>
<a href="javascript:void(0);" class="btn btn-primary mx-1" onclick="statusAction('{{route('dashboard.'.$route.'.process.action.accept', ['id' => encrypt_id($user->id), 'type' => $page, 'category' => 'account-status'])}}', 'Apakah Anda yakin ingin menyetujui {{$idnPage}} {{$page === 'company' ? $user->company->name : $user->company->media->name}}?', 'Ya, Setujui')">
Terima
</a>
</div>
@elseif($category === 'edit-request' && ($page === 'company' ? $user->company->edit_status === '1' : $user->company->media->edit_status === '1'))
<div class="mt-2 d-flex justify-content-end p-2 rounded-2" style="background-color: #D4EBF8 !important;">
<div class="mt-2 d-flex justify-content-end p-2 rounded-2" style="background-color: #EEEEEE !important;">
<a href="javascript:void(0);" class="btn btn-danger mx-1" data-bs-toggle="modal" data-bs-target="#modalForm">Tolak</a>
<a href="javascript:void(0);" class="btn btn-primary mx-1" onclick="statusAction('{{route('dashboard.'.$route.'.process.action.accept', ['id' => encrypt_id($user->id), 'type' => $page, 'category' => 'edit-request'])}}', 'Apakah Anda yakin ingin menyetujui permohonan edit {{$idnPage}} {{$page === 'company' ? $user->company->name : $user->company->media->name}}?', 'Ya, Setujui')">
Terima

View File

@ -31,7 +31,7 @@
<div class="card-inner">
<div id="accordion-{{$loop->iteration}}" class="accordion accordion-s3">
<div class="accordion-item">
<a href="#" class="accordion-head collapsed" data-bs-toggle="collapse" data-bs-target="#accordion-item-2-2">
<a href="#" class="accordion-head collapsed" data-bs-toggle="collapse" data-bs-target="#accordion-item-2-{{$loop->iteration}}">
<h6 class="title">
<div class="user-card">
<div class="user-avatar sm bg-primary">
@ -44,7 +44,7 @@
</h6>
<span class="accordion-icon"></span>
</a>
<div class="accordion-body collapse" id="accordion-item-2-2" data-bs-parent="#accordion-{{$loop->iteration}}">
<div class="accordion-body collapse" id="accordion-item-2-{{$loop->iteration}}" data-bs-parent="#accordion-{{$loop->iteration}}">
<div class="accordion-inner">
{{-- <div class="nk-divider divider md"></div> --}}
<div class="profile-ud-list">

View File

@ -543,6 +543,49 @@
</script>
@endif
@if ($datatable === 'journalist_submission')
<script>
$(document).ready(function() {
$('#journalistSubmissionsTable').DataTable({
processing: true,
serverSide: true,
ajax: '{{ route('dashboard.journalists.submission.data', ["role" => Auth::user()->role_id]) }}',
@if (is_role(['1']))
columns: [
{ data: 'DT_RowIndex', name: 'DT_RowIndex', orderable: false, searchable: false },
{ data: 'journalist_name', name: 'journalist_name' },
{ data: 'company_name', name: 'company_name' },
{ data: 'email', name: 'email' },
{ data: 'phone_number', name: 'phone_number' },
{ data: 'approved_status', name: 'approved_status' },
{ data: 'action', name: 'action', orderable: false, searchable: false },
{ data: 'created_at', name: 'created_at', visible: false },
{ data: 'id', name: 'id', orderable: true, searchable: false, visible: false },
],
@else
columns: [
{ data: 'DT_RowIndex', name: 'DT_RowIndex', orderable: false, searchable: false },
{ data: 'journalist_name', name: 'journalist_name' },
{ data: 'email', name: 'email' },
{ data: 'phone_number', name: 'phone_number' },
{ data: 'approved_status', name: 'approved_status' },
{ data: 'action', name: 'action', orderable: false, searchable: false },
{ data: 'created_at', name: 'created_at', visible: false },
{ data: 'id', name: 'id', orderable: true, searchable: false, visible: false },
],
@endif
language: datatableLanguage,
autoWidth: false,
order: [[6, 'desc']],
pagingType: "simple",
lengthMenu: [[10, 25, 50, 100, -1], ['Tampilkan 10 data', 'Tampilkan 25 data', 'Tampilkan 50 data', 'Tampilkan 100 data', 'Tampilkan semua']],
// dom: '<"top d-flex justify-content-between"l f>rt<"bottom d-flex justify-content-between"ip>',
scrollX: true
});
});
</script>
@endif
@if ($datatable === 'cooperation')
<script>
$(document).ready(function() {

View File

@ -24,14 +24,21 @@ function deleteItem(url, message) {
type: "DELETE",
url: url,
success: function(response) {
$('#usersTable').DataTable().ajax.reload();
Swal.fire(
'Terhapus!',
response.message,
'success'
).then(() => {
location.reload();
});
if (response.status === 'failed') {
Swal.fire({
icon: 'error',
title: 'Gagal',
text: response.message,
confirmButtonText: 'OK'
});
} else {
Swal.fire({
icon: 'success',
title: 'Berhasil',
text: 'Data jurnalis berhasil dihapus.',
confirmButtonText: 'OK'
}).then(() => location.reload());
}
},
error: function(xhr) {
Swal.fire(

View File

@ -299,16 +299,28 @@
Route::prefix('journalists')->name('journalists.')->group(function(){
Route::controller(JournalistController::class)->group(function(){
Route::get('/', 'index')->name('index');
Route::get('/submission', 'submission')->name('submissions');
Route::get('/submission/{id}/process', 'processSubmission')->name('submissions.process');
Route::put('/submission/{id}/process/{action}', 'processSubmissionAction')->name('submissions.process.action');
Route::get('/{id}/show', 'show')->name('show');
Route::get('/create', 'create')->name('create');
Route::post('/', 'store')->name('store');
Route::get('{id}/edit/request', 'editRequest')->name('edit.request');
Route::put('{id}/edit/request', 'editRequestAction')->name('edit.request.action');
Route::get('/{id}/process/', 'processEdit')->name('edit.process');
Route::put('/{id}/process/{action}', 'processEditAction')->name('edit.process.action');
Route::get('/{id}/edit', 'edit')->name('edit');
Route::put('/{id}', 'update')->name('update');
Route::delete('/{id}', 'destroy')->name('destroy');
});
Route::get('/data', [DatatableController::class, 'journalist'])->name('data');
Route::get('/data/submission/{role}', [DatatableController::class, 'journalistSubmission'])->name('submission.data');
});
});