debug('AKTIVE VERSION: Elvisexport'); // VARIANTE A: Kein Abbruch im Backend // (kein isClient('administrator')-Check) if (!is_object($form) || !isset($form->id)) { $this->debug('Abbruch: Keine Formular-ID'); return; } $formId = (int) $form->id; $this->debug('Formular-ID: ' . $formId); // Rohdaten aus POST (Visforms-Feldnamen F1, F2, ...) $post = $_POST; // Queue-Verzeichnis $queuePath = JPATH_ROOT . '/tmp/iolqueue'; if (!is_dir($queuePath)) { @mkdir($queuePath, 0755, true); $this->debug('Queue-Verzeichnis erstellt: ' . $queuePath); } // Formular 1 – Mitgliedsantrag if ($formId === 1) { $this->debug('Formular 1 erkannt – Mitgliedsantrag'); $keys = [ "F1","F2","F3","F4","F5","F6","F7","F8","F9","F10", "F11","F12","F13","F14","F15","F16","F17","F18","F19","F20", "F21","F22","F23","F24","F25","F26","F28","F29","F30","F31", "F32","F34","F35","F36","F37","F38","F39","F40","F41","F42", "F43","F44","F45","F46","F47","F48","F49","F50","F51" ]; $values = []; foreach ($keys as $key) { $values[] = isset($post[$key]) ? $this->sanitizeValue($post[$key]) : ''; } $csvLine = implode(';', $values); $content = "[ILM]\r\n"; $content .= "SystemID=50001\r\n"; $content .= "AppID=10900000\r\n"; $content .= "FilterCond=(" . $csvLine . ")\r\n"; $content .= "FilterView=viwEMtgl\r\n"; $this->writeIolFiles($content, $queuePath, $formId); } // Formular 4 – Kursanmeldung if ($formId === 4) { $this->debug('Formular 4 erkannt – Kursanmeldung'); $keys = [ "F106","F107","F108","F109","F110","F111","F112","F113","F114","F115", "F116","F117","F118","F119","F120","F121","F122","F123","F124","F125", "F126","F127","F128","F129","F130","F131","F132","F133","F134","F135", "F136","F137","F138","F139","F140" ]; $values = []; foreach ($keys as $key) { $values[] = isset($post[$key]) ? $this->sanitizeValue($post[$key]) : ''; } $csvLine = implode(';', $values); $content = "[ILM]\r\n"; $content .= "SystemID=50001\r\n"; $content .= "AppID=10900090\r\n"; $content .= "FilterCond=(" . $csvLine . ")\r\n"; $content .= "FilterView=viwEKTeilN\r\n"; $this->writeIolFiles($content, $queuePath, $formId); } // Visforms läuft normal weiter return true; } /** * Schreibt IOL-Datei (UTF-16LE BOM) und Job-Datei (JSON) */ private function writeIolFiles($content, $queuePath, $formId) { // UTF-16LE mit BOM $contentUtf16 = "\xFF\xFE" . iconv('UTF-8', 'UTF-16LE//IGNORE', $content); $filename = 'formular_' . $formId . '_' . date('Ymd_His') . '.iol'; $fullPath = $queuePath . '/' . $filename; file_put_contents($fullPath, $contentUtf16); $this->debug('IOL-Datei geschrieben: ' . $filename); // Mail-Ziel aus Plugin-Parametern $mailTo = $this->params->get('mail_to', ''); $jobData = json_encode([ 'to' => $mailTo, 'filename' => $filename, 'filepath' => $fullPath, 'subject' => 'Neuer Formular-Export (IOL)', 'body' => 'Es liegt ein neuer Formular-Datensatz vor.' ], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); file_put_contents($fullPath . '.job', $jobData); $this->debug('Job-Datei geschrieben: ' . $filename . '.job'); } /** * Entfernt Zeilenumbrüche und trimmt Werte */ private function sanitizeValue($value): string { return trim(str_replace(["\r", "\n"], ' ', (string) $value)); } }