data['photo'] = $photo; // } public function processMobile($mobile) { $visitor = VisitorEntry::where('mobile_number', $mobile)->latest()->first(); if ($visitor) { $employee = EmployeeMaster::where('id', $visitor->employee_master_id)->first(); $this->form->fill([ 'mobile_number' => $mobile ?? '', 'name' => $visitor->name ?? '', 'company' => $visitor->company ?? '', 'type' => $visitor->type ?? '', 'department' => $employee->department ?? '', 'employee_master_id' => $visitor->employee_master_id->name ?? '', 'code' => $employee->code ?? '', ]); } else { $this->form->fill([ 'mobile_number' => $mobile ?? '', 'name' => $visitor->name ?? '', 'company' => $visitor->company ?? '', 'type' => $visitor->type ?? '', 'department' => $employee->department ?? '', 'employee_master_id' => $visitor->employee_master_id->name ?? '', 'code' => $employee->code ?? '', ]); } } // protected function mutateFormDataBeforeCreate(array $data): array // { // if ( // !empty($data['photo']) && // str_starts_with($data['photo'], 'data:image') // ) { // // Step A: Strip the "data:image/jpeg;base64," prefix // $imageData = explode(',', $data['photo'])[1]; // // Step B: Generate a unique filename // $filename = 'visitor_' . time() . '_' . uniqid() . '.jpg'; // // Step C: Decode Base64 and save as a real .jpg file // $path = 'visitor-photos/' . $filename; // Storage::disk('public')->put($path, base64_decode($imageData)); // // Step D: Replace the Base64 string with just the file path // $data['photo'] = $path; // } // return $data; // } #[On('photo-captured')] public function handlePhotoCapture(string $photo): void { $this->data['photo'] = $photo; \Log::info('WEBCAM: photo-captured event received, length: ' . strlen($photo)); } // protected function mutateFormDataBeforeCreate(array $data): array // { // \Log::info('WEBCAM: mutateFormDataBeforeCreate called, photo value: ' . substr($data['photo'] ?? 'NULL', 0, 50)); // if ( // !empty($data['photo']) && // str_starts_with($data['photo'], 'data:image') // ) { // $imageData = explode(',', $data['photo'])[1]; // $filename = 'visitor_' . time() . '_' . uniqid() . '.jpg'; // $path = 'visitor-photos/' . $filename; // Storage::disk('public')->put($path, base64_decode($imageData)); // $data['photo'] = $path; // \Log::info('WEBCAM: photo saved to ' . $path); // } // return $data; // } protected function mutateFormDataBeforeCreate(array $data): array { if ( !empty($data['photo']) && str_starts_with($data['photo'], 'data:image') ) { try { $imageData = explode(',', $data['photo'])[1]; $filename = 'visitor_' . time() . '_' . uniqid() . '.jpg'; $path = 'visitor-photos/' . $filename; $decoded = base64_decode($imageData); $saved = Storage::disk('public')->put($path, $decoded); \Log::info('PHOTO UPLOAD (PUBLIC):', [ 'filename' => $filename, 'path' => $path, 'size_bytes' => strlen($decoded), 'saved' => $saved ? 'SUCCESS' : 'FAILED', ]); $data['photo'] = $path; } catch (\Exception $e) { \Log::error('PHOTO UPLOAD ERROR: ' . $e->getMessage()); } } return $data; } public function setPhoto(string $photo): void { $this->capturedPhoto = $photo; // Change this ↓ to dispatch to parent explicitly $this->dispatch('photo-captured', photo: $photo)->to(\App\Filament\Resources\VisitorEntryResource\Pages\CreateVisitorEntry::class); } }