getSteps(); $csrf = Csrf::token(); $app = Bootstrap::config('app'); $disclaimerConfigRaw = $app['disclaimer'] ?? []; if (is_string($disclaimerConfigRaw)) { $disclaimerConfig = ['text' => $disclaimerConfigRaw]; } elseif (is_array($disclaimerConfigRaw)) { $disclaimerConfig = $disclaimerConfigRaw; } else { $disclaimerConfig = []; } $disclaimerTitle = (string) ($disclaimerConfig['title'] ?? 'Hinweis'); $disclaimerText = (string) ($disclaimerConfig['text'] ?? ''); $disclaimerAcceptLabel = (string) ($disclaimerConfig['accept_label'] ?? 'Hinweis gelesen, weiter'); $startConfigRaw = $app['start'] ?? []; if (is_array($startConfigRaw)) { $startConfig = $startConfigRaw; } else { $startConfig = []; } $startIntroText = (string) ($startConfig['intro_text'] ?? 'Bitte E-Mail eingeben. Bestehende Entwürfe werden automatisch geladen.'); $addressDisclaimerConfigRaw = $app['address_disclaimer'] ?? ($app['address_disclaimer_text'] ?? ''); if (is_string($addressDisclaimerConfigRaw)) { $addressDisclaimerText = $addressDisclaimerConfigRaw; } elseif (is_array($addressDisclaimerConfigRaw)) { $addressDisclaimerText = (string) ($addressDisclaimerConfigRaw['text'] ?? ''); } else { $addressDisclaimerText = ''; } $baseUrl = Bootstrap::baseUrl(); /** @param array $field */ function renderField(array $field, string $addressDisclaimerText): void { $keyRaw = (string) ($field['key'] ?? ''); $key = htmlspecialchars($keyRaw); $label = htmlspecialchars((string) $field['label']); $type = (string) ($field['type'] ?? 'text'); $requiredAlways = (bool) ($field['required'] ?? false); $requiredConditional = isset($field['required_if']) && is_array($field['required_if']); $required = $requiredAlways ? 'required' : ''; $maxLengthAttr = ''; if (isset($field['max_length']) && is_int($field['max_length']) && $field['max_length'] > 0) { $maxLengthAttr = ' maxlength="' . (string) $field['max_length'] . '"'; } $requiredLabel = ''; if ($requiredAlways) { $requiredLabel = ' '; } elseif ($requiredConditional) { $requiredLabel = ' '; } $fieldClass = 'field'; if ($requiredAlways || $requiredConditional) { $fieldClass .= ' mandatory-field'; } if ($requiredAlways) { $fieldClass .= ' mandatory-field-hard'; } echo '
'; if ($type === 'checkbox') { echo ''; } else { $labelFor = $type === 'table' ? htmlspecialchars($keyRaw . '__r0__c0') : $key; echo ''; if ($type === 'textarea') { echo ''; } elseif ($type === 'select') { echo ''; } elseif ($type === 'table') { $rows = (int) ($field['rows'] ?? 4); if ($rows < 1) { $rows = 1; } elseif ($rows > 50) { $rows = 50; } $columns = []; if (isset($field['columns']) && is_array($field['columns'])) { foreach ($field['columns'] as $index => $column) { if (!is_array($column)) { continue; } $columnLabelRaw = trim((string) ($column['label'] ?? '')); if ($columnLabelRaw === '') { $columnLabelRaw = 'Spalte ' . ($index + 1); } $columnTypeRaw = strtolower(trim((string) ($column['type'] ?? 'text'))); $columnType = in_array($columnTypeRaw, ['text', 'date', 'number', 'email', 'tel'], true) ? $columnTypeRaw : 'text'; $columns[] = [ 'label' => $columnLabelRaw, 'type' => $columnType, 'placeholder' => (string) ($column['placeholder'] ?? ''), ]; } } if (empty($columns)) { $columns = [ ['label' => 'Spalte 1', 'type' => 'text', 'placeholder' => ''], ['label' => 'Spalte 2', 'type' => 'text', 'placeholder' => ''], ['label' => 'Spalte 3', 'type' => 'text', 'placeholder' => ''], ]; } echo ''; echo '
'; echo '
'; echo ''; echo ''; foreach ($columns as $column) { echo ''; } echo ''; echo ''; for ($row = 0; $row < $rows; $row++) { echo ''; foreach ($columns as $columnIndex => $column) { $cellId = $keyRaw . '__r' . $row . '__c' . $columnIndex; $cellIdEscaped = htmlspecialchars($cellId); $placeholder = trim((string) ($column['placeholder'] ?? '')); $placeholderEscaped = htmlspecialchars($placeholder); $ariaLabel = htmlspecialchars($column['label'] . ' Zeile ' . ($row + 1)); echo ''; } echo ''; } echo ''; echo '
' . htmlspecialchars($column['label']) . '
'; echo ''; echo '
'; echo '
'; echo '
'; } elseif ($type === 'file') { $accept = htmlspecialchars((string) ($field['accept'] ?? '')); $description = trim((string) ($field['description'] ?? '')); $fileInputId = $key . '_file'; $cameraInputId = $key . '_camera'; echo '
'; echo '
'; echo ''; echo ''; echo '
'; if ($description !== '') { echo '' . nl2br(htmlspecialchars($description)) . ''; } echo ''; echo ''; echo '

Keine Datei gewählt

'; echo '
'; echo '
'; } else { $inputType = htmlspecialchars($type); echo ''; } } $subtext = trim((string) ($field['subtext'] ?? '')); if ($subtext !== '') { echo '' . nl2br(htmlspecialchars($subtext)) . ''; } if ($keyRaw === 'strasse' && trim($addressDisclaimerText) !== '') { echo '
' . nl2br(htmlspecialchars($addressDisclaimerText)) . '
'; } if (isset($field['required_if']) && is_array($field['required_if'])) { $depField = htmlspecialchars((string) ($field['required_if']['field'] ?? '')); $depValue = htmlspecialchars((string) ($field['required_if']['equals'] ?? '')); } echo '
'; echo '
'; } ?> <?= htmlspecialchars((string) $app['project_name']) ?>

Digitaler Mitgliedsantrag Feuerwehrverein

Status