| Server IP : 202.61.199.114 / Your IP : 216.73.217.139 Web Server : nginx/1.22.1 System : Linux de.arni-solutions.de 6.1.0-49-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.174-1 (2026-05-26) x86_64 User : web20 ( 1018) PHP Version : 8.4.23 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /tmp/sc/ |
Upload File : |
<?php
/* Smarty version 3.1.30, created on 2026-06-27 05:56:50
from "/var/www/clients/client1/web17/web/includes/templates/templates/events.tpl" */
/* @var Smarty_Internal_Template $_smarty_tpl */
if ($_smarty_tpl->_decodeProperties($_smarty_tpl, array (
'version' => '3.1.30',
'unifunc' => 'content_6a3f4a02899be1_49627995',
'has_nocache_code' => false,
'file_dependency' =>
array (
'8dbb7004ba7fc6e32513135f8fae9dfa6203b5df' =>
array (
0 => '/var/www/clients/client1/web17/web/includes/templates/templates/events.tpl',
1 => 1782223654,
2 => 'file',
),
),
'includes' =>
array (
),
),false)) {
function content_6a3f4a02899be1_49627995 (Smarty_Internal_Template $_smarty_tpl) {
?>
<link rel="stylesheet" href="<?php echo @constant('SITE_URL');?>
/assets/css/cockpit.css?v=<?php echo filemtime((@constant('PATH_SYSTEM')).('/assets/css/cockpit.css'));?>
">
<div class="page-header d-flex justify-content-between align-items-start flex-wrap gap-2">
<div>
<div class="page-pretitle">Übersicht</div>
<h1 class="h3 mb-0">Events</h1>
<div class="text-muted small mt-1">Anläufe/Events und deren Veranstalter verwalten.</div>
</div>
<button class="btn btn-light border" id="evExportBtn" title="Aktuelle Ansicht als CSV exportieren"><i class="material-icons sm" style="vertical-align:-4px;">file_download</i> CSV-Export</button>
</div>
<ul class="nav nav-tabs mb-3" role="tablist">
<li class="nav-item"><button class="nav-link active" data-bs-toggle="tab" data-bs-target="#ev-events" type="button" role="tab">Events</button></li>
<li class="nav-item"><button class="nav-link" data-bs-toggle="tab" data-bs-target="#ev-organizers" type="button" role="tab">Veranstalter</button></li>
<li class="nav-item"><button class="nav-link" data-bs-toggle="tab" data-bs-target="#ev-arrival" type="button" role="tab">Anreise-Infos</button></li>
</ul>
<div class="tab-content">
<div class="tab-pane fade show active" id="ev-events" role="tabpanel">
<div class="card mb-3"><div class="card-body d-flex flex-wrap align-items-center gap-2">
<div class="input-group" style="max-width:260px;">
<span class="input-group-text"><i class="material-icons sm">search</i></span>
<input type="text" class="form-control" id="evSearch" placeholder="Titel / Cruise-ID …">
</div>
<select class="form-select" id="evOrganizer" style="max-width:220px;"><option value="">Alle Veranstalter</option></select>
<select class="form-select" id="evRange" style="max-width:170px;">
<option value="upcoming">Kommende</option>
<option value="past">Vergangene</option>
<option value="all">Alle</option>
</select>
<select class="form-select" id="evStatus" style="max-width:150px;">
<option value="all">Alle Status</option>
<option value="active">Aktiv</option>
<option value="inactive">Inaktiv</option>
</select>
<button class="btn btn-primary ms-auto" id="evAddBtn"><i class="material-icons sm">add</i> Event anlegen</button>
</div></div>
<div class="card"><div class="table-responsive">
<table class="table table-hover align-middle mb-0">
<thead><tr>
<th>Zeitraum</th><th>Titel</th><th>Veranstalter</th>
<th class="text-end">Halle</th><th class="text-end">Außen</th><th class="text-end">Valet</th>
<th>Status</th><th></th>
</tr></thead>
<tbody id="evBody"><tr><td colspan="8" class="text-center text-muted py-4">Wird geladen …</td></tr></tbody>
</table>
</div>
<div class="card-footer d-flex align-items-center justify-content-between">
<span class="text-muted small" id="evCount">–</span>
<div class="btn-group btn-group-sm">
<button class="btn btn-light border" id="evPrev">Zurück</button>
<button class="btn btn-light border" id="evNext">Weiter</button>
</div>
</div></div>
</div>
<div class="tab-pane fade" id="ev-organizers" role="tabpanel">
<div class="d-flex justify-content-end mb-3">
<button class="btn btn-primary" id="orgAddBtn"><i class="material-icons sm">add</i> Veranstalter anlegen</button>
</div>
<div class="card"><div class="table-responsive">
<table class="table table-hover align-middle mb-0">
<thead><tr><th>Name</th><th>Kontakt</th><th>E-Mail</th><th>Telefon</th><th>Ort</th><th class="text-end">Events</th><th>Status</th><th></th></tr></thead>
<tbody id="orgBody"><tr><td colspan="8" class="text-center text-muted py-4">Wird geladen …</td></tr></tbody>
</table>
</div></div>
</div>
<div class="tab-pane fade" id="ev-arrival" role="tabpanel">
<div class="card mb-3"><div class="card-body d-flex flex-wrap align-items-center gap-2">
<div class="input-group" style="max-width:240px;">
<span class="input-group-text"><i class="material-icons sm">search</i></span>
<input type="text" class="form-control" id="aiSearch" placeholder="Titel suchen …">
</div>
<select class="form-select" id="aiShip" style="max-width:200px;"><option value="">Alle Schiffe</option></select>
<select class="form-select" id="aiParking" style="max-width:180px;">
<option value="">Alle Parkplatztypen</option>
<option value="all">„Alle" (Regel)</option>
<option value="indoor">Hallenparkplatz</option>
<option value="outdoor">Außenparkplatz</option>
<option value="valet">Valet-Service</option>
</select>
<select class="form-select" id="aiActive" style="max-width:140px;">
<option value="all">Alle Status</option>
<option value="active">Aktiv</option>
<option value="inactive">Inaktiv</option>
</select>
<div class="input-group" style="max-width:230px;" title="Zeitraum (Check-in-Uhrzeit)">
<span class="input-group-text"><i class="material-icons sm">schedule</i></span>
<input type="time" class="form-control" id="aiTimeFrom" placeholder="von">
<input type="time" class="form-control" id="aiTimeTo" placeholder="bis">
</div>
<button class="btn btn-primary ms-auto" id="aiAddBtn"><i class="material-icons sm">add</i> Neue Anreise-Info</button>
</div></div>
<div class="card"><div class="table-responsive">
<table class="table table-hover align-middle mb-0">
<thead><tr>
<th>Titel</th><th>Schiff</th><th>Parkplatztyp</th><th>Uhrzeit</th>
<th class="text-end">Priorität</th><th>Status</th><th>Geändert</th><th></th>
</tr></thead>
<tbody id="aiBody"><tr><td colspan="8" class="text-center text-muted py-4">Wird geladen …</td></tr></tbody>
</table>
</div>
<div class="card-footer"><span class="text-muted small" id="aiCount">–</span></div>
</div>
</div>
</div>
<div class="modal fade" id="evModal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog modal-lg modal-dialog-centered">
<div class="modal-content">
<div class="modal-header"><h5 class="modal-title" id="evTitle">Event</h5><button type="button" class="btn-close" data-bs-dismiss="modal"></button></div>
<form id="evForm" autocomplete="off">
<div class="modal-body">
<input type="hidden" name="id" id="evId">
<div class="row g-3">
<div class="col-12 col-md-7"><label class="form-label">Titel *</label><input class="form-control" name="title" required></div>
<div class="col-12 col-md-5"><label class="form-label">Veranstalter</label>
<select class="form-select" name="organizer" id="evFormOrganizer"><option value="">– kein Veranstalter –</option></select>
</div>
<div class="col-12 col-md-6"><label class="form-label">Beginn *</label><input class="form-control" type="datetime-local" name="begin" required></div>
<div class="col-12 col-md-6"><label class="form-label">Ende *</label><input class="form-control" type="datetime-local" name="end" required></div>
<div class="col-6 col-md-3"><label class="form-label">Halle (Plätze)</label><input class="form-control" type="number" min="0" name="indoor"></div>
<div class="col-6 col-md-3"><label class="form-label">Außen (Plätze)</label><input class="form-control" type="number" min="0" name="outdoor"></div>
<div class="col-6 col-md-3"><label class="form-label">Valet (Plätze)</label><input class="form-control" type="number" min="0" name="valet"></div>
<div class="col-6 col-md-3"><label class="form-label">Cruise-ID</label><input class="form-control" name="cruise_id"></div>
<div class="col-12">
<label class="form-label">Beschreibung</label>
<textarea class="form-control" name="description" id="evDescription" rows="4"></textarea>
<div class="mt-2" style="max-width:340px;">
<label class="form-label small text-muted mb-1">Sichtbarkeit der Beschreibung</label>
<select class="form-select form-select-sm" name="description_public" id="evDescPublic">
<option value="0">privat – nur intern</option>
<option value="1">öffentlich – wird per API übermittelt</option>
</select>
</div>
</div>
<div class="col-12"><label class="form-check d-flex align-items-center gap-2"><input class="form-check-input" type="checkbox" name="active" value="1" checked> <span class="form-check-label">aktiv</span></label></div>
</div>
<div class="js-status small mt-2" id="evStatusMsg"></div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-light text-danger me-auto d-none" id="evDeleteBtn"><i class="material-icons sm">delete</i> Löschen</button>
<button type="button" class="btn btn-light" data-bs-dismiss="modal">Abbrechen</button>
<button class="btn btn-primary" type="submit"><i class="material-icons sm">save</i> Speichern</button>
</div>
</form>
</div>
</div>
</div>
<div class="modal fade" id="orgModal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog modal-lg modal-dialog-centered">
<div class="modal-content">
<div class="modal-header"><h5 class="modal-title" id="orgTitle">Veranstalter</h5><button type="button" class="btn-close" data-bs-dismiss="modal"></button></div>
<form id="orgForm" autocomplete="off">
<div class="modal-body">
<input type="hidden" name="id" id="orgId">
<div class="row g-3">
<div class="col-12 col-md-7"><label class="form-label">Name *</label><input class="form-control" name="name" required></div>
<div class="col-12 col-md-5"><label class="form-label">Ansprechpartner</label><input class="form-control" name="contact"></div>
<div class="col-12 col-md-6"><label class="form-label">E-Mail</label><input class="form-control" type="email" name="email"></div>
<div class="col-12 col-md-6"><label class="form-label">Telefon</label><input class="form-control" name="phone"></div>
<div class="col-12 col-md-8"><label class="form-label">Straße</label><input class="form-control" name="street"></div>
<div class="col-4 col-md-2"><label class="form-label">PLZ</label><input class="form-control" name="zipcode"></div>
<div class="col-8 col-md-2"><label class="form-label">Ort</label><input class="form-control" name="city"></div>
<div class="col-6"><label class="form-label">Land</label><input class="form-control" name="country" value="Deutschland"></div>
<div class="col-6"><label class="form-label">Website</label><input class="form-control" name="website" placeholder="https://"></div>
<div class="col-12"><label class="form-label">Notizen</label><textarea class="form-control" name="notes" rows="2"></textarea></div>
<div class="col-12"><label class="form-check d-flex align-items-center gap-2"><input class="form-check-input" type="checkbox" name="active" value="1" checked> <span class="form-check-label">aktiv</span></label></div>
</div>
<div class="js-status small mt-2" id="orgStatusMsg"></div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-light text-danger me-auto d-none" id="orgDeleteBtn"><i class="material-icons sm">delete</i> Löschen</button>
<button type="button" class="btn btn-light" data-bs-dismiss="modal">Abbrechen</button>
<button class="btn btn-primary" type="submit"><i class="material-icons sm">save</i> Speichern</button>
</div>
</form>
</div>
</div>
</div>
<div class="modal fade" id="aiModal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog modal-lg modal-dialog-centered">
<div class="modal-content">
<div class="modal-header"><h5 class="modal-title" id="aiModalTitle">Anreise-Info</h5><button type="button" class="btn-close" data-bs-dismiss="modal"></button></div>
<form id="aiForm" autocomplete="off">
<div class="modal-body">
<input type="hidden" name="id" id="aiId">
<div class="row g-3">
<div class="col-12 col-md-8"><label class="form-label">Titel * <span class="text-muted fw-normal">(interne Bezeichnung)</span></label>
<input class="form-control" name="title" id="aiFormTitle" required placeholder="z. B. Frühe Anreise, Baustelle Hafenbereich">
</div>
<div class="col-6 col-md-2"><label class="form-label">Priorität</label><input class="form-control" type="number" name="priority" id="aiPriority" value="0"></div>
<div class="col-6 col-md-2 d-flex align-items-end"><label class="form-check d-flex align-items-center gap-2 mb-2"><input class="form-check-input" type="checkbox" name="active" id="aiActiveChk" value="1" checked> <span class="form-check-label">aktiv</span></label></div>
<div class="col-12">
<label class="form-label">Inhalt <span class="text-muted fw-normal">(wird dem Kunden im Buchungsformular angezeigt)</span></label>
<textarea class="form-control" name="content" id="aiContent" rows="5"></textarea>
</div>
<div class="col-12 col-md-6">
<label class="form-label">Schiff</label>
<label class="form-check d-flex align-items-center gap-2 mb-2"><input class="form-check-input" type="checkbox" id="aiAllShips" checked> <span class="form-check-label">Alle Schiffe</span></label>
<select class="form-select" id="aiShipIds" name="ship_ids[]" multiple size="6" disabled></select>
<div class="form-text">Mehrfachauswahl mit Strg/⌘ bzw. Klick.</div>
</div>
<div class="col-12 col-md-6">
<div class="mb-3">
<label class="form-label">Parkplatztyp</label>
<select class="form-select" name="parking_type" id="aiParkingType">
<option value="all">Alle Parkplatztypen</option>
<option value="indoor">Hallenparkplatz</option>
<option value="outdoor">Außenparkplatz</option>
<option value="valet">Valet-Service</option>
</select>
</div>
<label class="form-label">Check-in-Zeit</label>
<label class="form-check d-flex align-items-center gap-2 mb-2"><input class="form-check-input" type="checkbox" id="aiNoTime" checked> <span class="form-check-label">Immer anzeigen (keine Zeitbeschränkung)</span></label>
<div class="d-flex align-items-center gap-2" id="aiTimeWrap">
<div class="input-group input-group-sm" style="max-width:140px;"><span class="input-group-text">von</span><input type="time" class="form-control" name="time_from" id="aiTimeFromF"></div>
<div class="input-group input-group-sm" style="max-width:140px;"><span class="input-group-text">bis</span><input type="time" class="form-control" name="time_to" id="aiTimeToF"></div>
</div>
</div>
</div>
<div class="js-status small mt-2" id="aiStatusMsg"></div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-light text-danger me-auto d-none" id="aiDeleteBtn"><i class="material-icons sm">delete</i> Löschen</button>
<button type="button" class="btn btn-light" id="aiPreviewBtn"><i class="material-icons sm">visibility</i> Vorschau</button>
<button type="button" class="btn btn-light" data-bs-dismiss="modal">Abbrechen</button>
<button class="btn btn-primary" type="submit"><i class="material-icons sm">save</i> Speichern</button>
</div>
</form>
</div>
</div>
</div>
<div class="modal fade" id="aiPreviewModal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title"><i class="material-icons sm" style="vertical-align:-4px;">info</i> Hinweise zu Ihrer Anreise</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body" id="aiPreviewBody"></div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-bs-dismiss="modal">Verstanden</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="evExportModal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title"><i class="material-icons sm" style="vertical-align:-4px;">file_download</i> CSV-Export <span class="text-muted fw-normal" id="evExpView"></span></h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<div class="text-muted small mb-2">Spalten auswählen, die in die CSV-Datei übernommen werden sollen. Es werden alle Einträge der <strong>aktuellen Ansicht</strong> (inkl. gesetzter Filter) exportiert.</div>
<div class="d-flex align-items-center justify-content-between mb-2">
<label class="form-check d-flex align-items-center gap-2 mb-0"><input class="form-check-input" type="checkbox" id="evExpAll" checked> <span class="form-check-label fw-semibold">Alle Spalten</span></label>
<span class="text-muted small" id="evExpCount"></span>
</div>
<div id="evExpCols" class="border rounded p-2" style="max-height:300px;overflow:auto;"></div>
<div class="mt-3">
<label class="form-label small text-muted mb-1">Trennzeichen</label>
<select class="form-select form-select-sm" id="evExpSep" style="max-width:260px;">
<option value=";">Semikolon (;) – Excel (DE)</option>
<option value=",">Komma (,)</option>
<option value="\t">Tabulator</option>
</select>
</div>
<div class="small mt-2" id="evExpMsg"></div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-light" data-bs-dismiss="modal">Abbrechen</button>
<button type="button" class="btn btn-primary" id="evExpGo"><i class="material-icons sm" style="vertical-align:-4px;">file_download</i> CSV erstellen</button>
</div>
</div>
</div>
</div>
<style>
/* Filter-Symbole (Lupe/Uhr) auf gleiche Höhe wie die Eingabefelder bringen:
die input-group dehnt sich beim Umbruch der Toolbar; das Icon-Feld oben ausrichten + Feldhöhe erzwingen. */
#ev-events .card-body .input-group-text,
#ev-arrival .card-body .input-group-text{ align-self:flex-start; height:calc(1.5em + .75rem + 2px); }
#evExpCols .form-check{ display:flex; align-items:center; gap:8px; margin:0; padding:4px 2px; }
#evExpCols .form-check-input{ -webkit-appearance:auto; appearance:auto; width:1.05em; height:1.05em; min-height:auto; margin:0; }
#aiPreviewBody .ai-pv-item + .ai-pv-item{ border-top:1px solid var(--border-color,#e6e7eb); margin-top:14px; padding-top:14px; }
#aiPreviewBody .ai-pv-title{ font-weight:600; margin-bottom:4px; }
#evForm .form-check-input,#orgForm .form-check-input,#aiForm .form-check-input{ -webkit-appearance:auto; appearance:auto; width:1.1em; height:1.1em; min-height:auto; margin:0; }
#aiForm .form-check{ display:flex; align-items:center; gap:8px; margin:0; }
#evForm .form-check,#orgForm .form-check{ display:flex; align-items:center; gap:8px; margin:0; }
.tox-tinymce-aux, .tox-dialog-wrap{ z-index:1090 !important; } /* TinyMCE-Dialoge über dem Modal */
</style>
<?php echo '<script'; ?>
src="https://cdn.jsdelivr.net/npm/tinymce@7/tinymce.min.js" referrerpolicy="origin"><?php echo '</script'; ?>
>
<?php echo '<script'; ?>
src="<?php echo @constant('SITE_URL');?>
/assets/js/events.js?v=<?php echo filemtime((@constant('PATH_SYSTEM')).('/assets/js/events.js'));?>
"><?php echo '</script'; ?>
>
<?php }
}