formatOutput = true; $root = $xml->createElement('form_submission'); $xml->appendChild($root); // Static data $static = $xml->createElement('static'); $root->appendChild($static); foreach (['name', 'lastname', 'title', 'telno', 'mail', 'apparatsname', 'subject', 'semester', 'dauerapparat'] as $field) { if (isset($data[$field])) { $element = $xml->createElement($field, htmlspecialchars($data[$field])); $static->appendChild($element); } } if (!empty($data['message'])) { $messageEl = $xml->createElement('message', htmlspecialchars($data['message'])); $static->appendChild($messageEl); } // Books if (isset($data['books']) && is_array($data['books'])) { $booksNode = $xml->createElement('books'); $root->appendChild($booksNode); foreach ($data['books'] as $book) { $bookNode = $xml->createElement('book'); $booksNode->appendChild($bookNode); foreach (['authorname', 'year', 'title', 'signature'] as $field) { $value = isset($book[$field]) ? htmlspecialchars($book[$field]) : ''; $fieldNode = $xml->createElement($field, $value); $bookNode->appendChild($fieldNode); } } } return $xml->saveXML(); } /** * Generate XML for ELSA form */ function generateELSAXML($data) { $xml = new DOMDocument('1.0', 'UTF-8'); $xml->formatOutput = true; $root = $xml->createElement('elsa_submission'); $xml->appendChild($root); // General info $generalInfo = $xml->createElement('general_info'); $root->appendChild($generalInfo); $generalFields = ['name', 'lastname', 'title', 'mail', 'subject', 'classname', 'usage_date_from', 'usage_date_to', 'availability_date']; foreach ($generalFields as $field) { if (isset($data[$field])) { $element = $xml->createElement($field, htmlspecialchars($data[$field])); $generalInfo->appendChild($element); } } if (!empty($data['message'])) { $messageEl = $xml->createElement('message', htmlspecialchars($data['message'])); $generalInfo->appendChild($messageEl); } // Media sections $mediaRoot = $xml->createElement('media'); $root->appendChild($mediaRoot); // Add different media types (monografie, zeitschrift, herausgeber) $mediaTypes = [ 'monografien' => $data['monografien'] ?? [], 'zeitschriftenartikel' => $data['zeitschriftenartikel'] ?? [], 'herausgeberwerke' => $data['herausgeberwerke'] ?? [] ]; foreach ($mediaTypes as $type => $entries) { if (!empty($entries)) { $section = $xml->createElement($type); $mediaRoot->appendChild($section); foreach ($entries as $entry) { $entryNode = $xml->createElement('entry'); $section->appendChild($entryNode); foreach ($entry as $key => $value) { $fieldNode = $xml->createElement($key, htmlspecialchars($value)); $entryNode->appendChild($fieldNode); } } } } return $xml->saveXML(); } /** * Send email with XML attachment * Uses PHP's mail() function or SMTP if configured */ function sendEmail($subject, $xmlContent, $toEmail = null) { $to = $toEmail ?? MAIL_TO; $from = MAIL_FROM; if (!MAIL_ENABLED) { // Log instead of sending error_log("=========================================================="); error_log("MAIL SENDING DISABLED - Would have sent:"); error_log("From: " . $from); error_log("To: " . $to); error_log("Subject: " . $subject); error_log("----------------------------------------------------------"); error_log($xmlContent); error_log("=========================================================="); return true; } // Try using SMTP if credentials are configured if (SMTP_USERNAME && SMTP_PASSWORD && class_exists('PHPMailer\PHPMailer\PHPMailer')) { return sendEmailSMTP($subject, $xmlContent, $to, $from); } // Fallback to PHP mail() $headers = "From: " . $from . "\r\n"; $headers .= "Content-Type: application/xml; charset=UTF-8\r\n"; $headers .= "X-Mailer: PHP/" . phpversion(); return mail($to, $subject, $xmlContent, $headers); } /** * Send email via SMTP using PHPMailer (if available) */ function sendEmailSMTP($subject, $xmlContent, $to, $from) { if (!class_exists('PHPMailer\PHPMailer\PHPMailer')) { error_log("PHPMailer not available, falling back to mail()"); return false; } $mail = new PHPMailer\PHPMailer\PHPMailer(true); try { // Server settings $mail->isSMTP(); $mail->Host = SMTP_HOST; $mail->SMTPAuth = true; $mail->Username = SMTP_USERNAME; $mail->Password = SMTP_PASSWORD; $mail->SMTPSecure = SMTP_ENCRYPTION; $mail->Port = SMTP_PORT; $mail->CharSet = 'UTF-8'; // Recipients $mail->setFrom($from); $mail->addAddress($to); // Content $mail->Subject = $subject; $mail->Body = $xmlContent; $mail->ContentType = 'application/xml'; $mail->send(); return true; } catch (Exception $e) { error_log("Email sending failed: " . $mail->ErrorInfo); return false; } } /** * Redirect to URL */ function redirect($url) { header("Location: " . $url); exit; } /** * Get POST value with default */ function post($key, $default = '') { return isset($_POST[$key]) ? sanitizeInput($_POST[$key]) : $default; } /** * Get all POST values matching a pattern (for arrays) */ function postArray($key) { return isset($_POST[$key]) && is_array($_POST[$key]) ? array_map('sanitizeInput', $_POST[$key]) : []; }