simedkom/app/Filament/Resources/Manage/Journalists/Pages/ManageJournalists.php
Yoga Pangestu 69c86e5d3c Refactor verification process and UI updates
- Updated JournalistResource to conditionally display actions based on user roles and verification status.
- Modified ManageJournalists page to hide header actions if verification request status is not NEED_REVISION.
- Changed CategoryResource navigation label from 'Kategori Berita' to 'Kategori'.
- Adjusted ManageCategories page to reflect the new category label and modal headings.
- Refactored Company model to change verificationRequest relationship from MorphOne to HasOne.
- Removed verificationRequest method from Journalist and PartnerMedia models.
- Updated VerificationRequest model to change verifiable relationship from MorphTo to BelongsTo.
- Introduced VerificationService to handle verification logic, including data completeness checks and submission processes.
- Created a new migration to adjust the verification_requests table structure.
- Enhanced admin verification view to display detailed verification progress and review history.
- Updated company and media forms to conditionally show the save button based on verification request status.
2026-01-08 13:55:37 +07:00

84 lines
3.1 KiB
PHP

<?php
namespace App\Filament\Resources\Manage\Journalists\Pages;
use App\Filament\Resources\Manage\Journalists\JournalistResource;
use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ManageRecords;
use Filament\Support\Enums\Width;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Storage;
class ManageJournalists extends ManageRecords
{
protected static ?string $title = 'Jurnalis';
protected static string $resource = JournalistResource::class;
protected function getHeaderActions(): array
{
if (auth()->user()->hasRole('Perusahaan') && ! auth()->user()->company?->partnerMedia) {
return [];
}
$verificationRequest = auth()->user()->company?->verificationRequest()
->latest()
->first();
if ($verificationRequest && $verificationRequest->status !== \App\Enums\VerificationStatus::NEED_REVISION) {
return [];
}
return [
CreateAction::make()
->label('Tambah')
->modalHeading('Tambah Jurnalis')
->modalSubmitActionLabel('Simpan')
->modalCancelActionLabel('Batal')
->extraModalFooterActions(fn (CreateAction $action): array => [
$action->makeModalSubmitAction('createAnother', arguments: ['another' => true])
->label('Simpan dan Tambah Lagi'),
])
->modalWidth(Width::Large)
->using(function (array $data, string $model): Model {
$data['partner_media_id'] = auth()->user()->company?->partnerMedia?->id;
$journalist = $model::create($data);
$documents = [
'press_card_docs',
'ukw_certificate_docs',
];
foreach ($documents as $field) {
if (empty($data[$field])) {
continue;
}
foreach ((array) $data[$field] as $filePath) {
$fullPath = Storage::disk(config('filesystems.default'))->path($filePath);
if (! file_exists($fullPath)) {
continue;
}
$journalist
->addMediaFromDisk($filePath, config('filesystems.default'))
->preservingOriginal()
->withCustomProperties([
'feature' => 'journalists',
'date' => now()->toDateString(),
'doc_type' => str($field)
->replace('_docs', '')
->slug('-'),
])
->toMediaCollection('journalists');
}
}
return $journalist;
}),
];
}
}