'max.mustermann@example.org', 'application_key' => 'test_' . bin2hex(random_bytes(8)), 'status' => 'submitted', 'submitted_at' => date('c'), 'form_data' => [ 'vorname' => 'Max', 'nachname' => 'Mustermann', 'geburtsdatum' => '1990-05-15', 'strasse' => 'Musterstraße 42', 'plz' => '85354', 'ort' => 'Freising', 'telefon' => '01701234567', 'job' => 'Softwareentwickler', 'pate' => 'Hans Meier', 'mitgliedsart' => 'Aktiv', 'qualifikation_vorhanden' => 'ja', 'führerschein_vorhanden' => 'b', 'führerschein_nachweis' => 'Staplerführerschein', 'bisherige_dienstzeiten' => "Feuerwehr/Hilfsorganisation,von,bis\nFF Moosburg,2015-03-01,2020-12-31\nTHW OV Freising,2021-01-15,2023-06-30", 'letzter_dienstgrad' => 'Oberfeuerwehrmann', 'basismodul' => '1', 'truppführer' => '1', 'gruppenführer' => '', 'atemschutzgeräteträger' => '1', 'gültige_g26' => '1', 'motorsägenführer' => '', 'feuerwehrsanitäter' => '1', 'weitere_lehrgaenge' => 'Erste Hilfe Ausbilder', 'abzeichen_lösch' => '3', 'abzeichen_thl' => '2', 'freier_kommentar' => 'Ich freue mich auf die Zusammenarbeit.', 'körperliche_eignung' => '1', 'schwimmer' => '1', 'einwilligung_datenschutz' => '1', 'einwilligung_bildrechte' => '1', ], 'uploads' => [ 'portraitfoto' => [ [ 'original_filename' => 'bewerbungsfoto.jpg', 'stored_dir' => 'test/portraitfoto/abc12345', 'stored_filename' => 'bewerbungsfoto.jpg', 'relative_path' => 'test/portraitfoto/abc12345/bewerbungsfoto.jpg', 'mime' => 'image/jpeg', 'size' => 150000, ], ], 'qualifikationsnachweise' => [ [ 'original_filename' => 'nachweis_truppfuehrer.pdf', 'stored_dir' => 'test/qualifikationsnachweise/def67890', 'stored_filename' => 'nachweis_truppfuehrer.pdf', 'relative_path' => 'test/qualifikationsnachweise/def67890/nachweis_truppfuehrer.pdf', 'mime' => 'application/pdf', 'size' => 250000, ], ], ], ]; echo "=== Testing SubmissionFormatter ===\n\n"; $schema = new FormSchema(); $formatter = new SubmissionFormatter($schema); $steps = $formatter->getFormattedSteps($submission['form_data']); foreach ($steps as $step) { echo "--- " . $step['title'] . " ---\n"; foreach ($step['fields'] as $field) { echo " " . $field['label'] . ": " . $field['value'] . "\n"; } echo "\n"; } $uploads = $formatter->getUploadSummary($submission['uploads']); echo "--- Uploads ---\n"; foreach ($uploads as $u) { echo " " . $u['label'] . ": " . $u['filename'] . "\n"; } echo "\n=== Testing PdfGenerator (Form Data PDF) ===\n\n"; $pdfGen = new PdfGenerator($formatter, $schema); $formPdf = $pdfGen->generateFormDataPdf($submission); if ($formPdf !== null) { echo "Form data PDF generated: " . $formPdf . " (" . filesize($formPdf) . " bytes)\n"; $outputDir = dirname(__DIR__) . '/storage/logs'; $copyPath = $outputDir . '/test_antragsdaten.pdf'; copy($formPdf, $copyPath); echo "Copied to: " . $copyPath . "\n"; unlink($formPdf); } else { echo "ERROR: Form data PDF generation failed.\n"; } echo "\n=== Testing PdfGenerator (Attachments PDF) ===\n"; echo "(Expected: null or partial - test files don't exist on disk)\n\n"; $attPdf = $pdfGen->generateAttachmentsPdf($submission); if ($attPdf !== null) { echo "Attachments PDF generated: " . $attPdf . " (" . filesize($attPdf) . " bytes)\n"; unlink($attPdf); } else { echo "No attachments PDF (expected: test upload files don't exist on disk).\n"; } echo "\n=== Testing Mailer HTML Rendering ===\n\n"; $mailer = new Mailer(); $ref = new \ReflectionClass($mailer); $adminMethod = $ref->getMethod('renderAdminHtml'); $adminMethod->setAccessible(true); $adminHtml = $adminMethod->invoke($mailer, $submission, true, true); $outputDir = dirname(__DIR__) . '/storage/logs'; file_put_contents($outputDir . '/test_admin_email.html', $adminHtml); echo "Admin HTML saved to: " . $outputDir . "/test_admin_email.html\n"; $applicantMethod = $ref->getMethod('renderApplicantHtml'); $applicantMethod->setAccessible(true); $applicantHtml = $applicantMethod->invoke($mailer, $submission); file_put_contents($outputDir . '/test_applicant_email.html', $applicantHtml); echo "Applicant HTML saved to: " . $outputDir . "/test_applicant_email.html\n"; echo "\nDone. Check the generated files in storage/logs/.\n";