OpenNIT

Quelltext des aktuellen Standes

Fassung 1.1.1

request_form.php

4 KB
<?php $this->layout('layouts/portal', [
    'page_title' => $workflow['name'],
    'ssp_active' => 'requests',
]);
$du = ($portal_address ?? 'du') !== 'sie';

// Gemeinsamer Feld-Renderer (auch vom öffentlichen Formular genutzt)
$wf      = $workflow;
$view    = $this;
$lookups = $lookups ?? [];
$dirOn   = $directory_search ?? true;
require dirname(__DIR__) . '/public/_field_renderer.php';
?>
<a href="/portal/requests" class="ssp-back"><i class="fas fa-arrow-left" aria-hidden="true"></i> <?= $this->te('Meine Anträge') ?></a>

<div class="ssp-hello">
    <h1><i class="fas <?= $this->e($wf['icon'] ?: 'fa-file-signature') ?>" aria-hidden="true"></i> <?= $this->e($wf['name']) ?></h1>
    <?php if (!empty($wf['description'])): ?><p><?= $this->e($wf['description']) ?></p><?php endif; ?>
</div>

<div class="ssp-card ssp-form">
    <form method="post" action="/portal/requests/new/<?= (int)$wf['id'] ?>" enctype="multipart/form-data" id="ssp-wf-form">
        <input type="hidden" name="_csrf" value="<?= $this->csrf() ?>">
        <input type="hidden" name="_title" value="<?= $this->e($wf['name']) ?>">

        <?php if ($wf['subject_mode'] === 'person'): ?>
            <?php if ($dirOn && !empty($persons)): ?>
                <div class="form-group">
                    <label for="ssp-subj-person"><?= $this->te('Betroffene Person') ?></label>
                    <select id="ssp-subj-person" class="form-control form-control-sm" name="_subject_person_id">
                        <option value=""><?= $this->te('– bitte wählen –') ?></option>
                        <?php foreach ($persons as $p): ?>
                            <option value="<?= (int)$p['id'] ?>"><?= $this->e($p['display_name']) ?><?= $p['department'] ? ' (' . $this->e($p['department']) . ')' : '' ?></option>
                        <?php endforeach; ?>
                    </select>
                </div>
            <?php else: ?>
                <div class="form-group">
                    <label for="ssp-subj-text"><?= $this->te('Betroffene Person') ?></label>
                    <input id="ssp-subj-text" class="form-control form-control-sm" type="text" name="_subject_text" placeholder="<?= $this->te('Name oder E-Mail') ?>">
                </div>
            <?php endif; ?>
        <?php elseif ($wf['subject_mode'] === 'free'): ?>
            <div class="form-group">
                <label for="ssp-subj-free"><?= $this->te('Betrifft') ?></label>
                <input id="ssp-subj-free" class="form-control form-control-sm" type="text" name="_subject_text">
            </div>
        <?php endif; ?>

        <?php
        $currentSection = null;
        foreach ($fields as $f) {
            $sec = (string)($f['section'] ?? '');
            if ($sec !== ($currentSection ?? '') && $sec !== '') {
                echo '<div style="font-weight:700;font-size:.82rem;color:var(--gray-600);text-transform:uppercase;letter-spacing:.04em;border-bottom:1px solid var(--color-border);padding:.75rem 0 .3rem;margin-bottom:.6rem;">' . $view->e($sec) . '</div>';
            }
            $currentSection = $sec;
            $renderField($f);
        }
        ?>

        <button class="btn btn-primary" type="submit" data-busy-label="Wird eingereicht …" style="margin-top:.5rem;"><i class="fas fa-paper-plane" aria-hidden="true"></i> <?= $this->te('Antrag absenden') ?></button>
    </form>
</div>

<script>
// Wiederholzeilen-Felder (Repeater) wie im öffentlichen Formular bedienbar machen
document.getElementById('ssp-wf-form').addEventListener('click', function (e) {
    var add = e.target.closest('.wf-rep-add');
    if (add) {
        var rows = add.closest('.wf-repeater').querySelector('.wf-rep-rows');
        var clone = rows.querySelector('.wf-rep-row').cloneNode(true);
        clone.querySelector('input').value = ''; clone.querySelector('input').removeAttribute('required');
        rows.appendChild(clone); return;
    }
    var del = e.target.closest('.wf-rep-del');
    if (del) {
        var wrap = del.closest('.wf-rep-rows');
        if (wrap.querySelectorAll('.wf-rep-row').length > 1) { del.closest('.wf-rep-row').remove(); }
        else { del.closest('.wf-rep-row').querySelector('input').value = ''; }
    }
});
</script>