| 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/widgets/day/mobileaccess.tpl" */
/* @var Smarty_Internal_Template $_smarty_tpl */
if ($_smarty_tpl->_decodeProperties($_smarty_tpl, array (
'version' => '3.1.30',
'unifunc' => 'content_6a3f4a02a875d4_29295198',
'has_nocache_code' => false,
'file_dependency' =>
array (
'75e056730112f69a9cda4a5516f31a795692e3f6' =>
array (
0 => '/var/www/clients/client1/web17/web/includes/templates/templates/widgets/day/mobileaccess.tpl',
1 => 1782520902,
2 => 'file',
),
),
'includes' =>
array (
),
),false)) {
function content_6a3f4a02a875d4_29295198 (Smarty_Internal_Template $_smarty_tpl) {
?>
<?php $_smarty_tpl->_assignInScope('dd', $_smarty_tpl->tpl_vars['page']->value->query['http']['get']['date']);
$_smarty_tpl->_assignInScope('fopts', $_smarty_tpl->tpl_vars['dayview']->value->arrivalFilterOptions($_smarty_tpl->tpl_vars['dd']->value));
$_smarty_tpl->_assignInScope('shipSet', $_smarty_tpl->tpl_vars['fopts']->value['ships']);
$_smarty_tpl->_assignInScope('tripSet', $_smarty_tpl->tpl_vars['fopts']->value['trips']);
?>
<div class="ma-wrap" id="maWrap" data-date="<?php echo $_smarty_tpl->tpl_vars['dd']->value;?>
" data-push="<?php if ($_smarty_tpl->tpl_vars['pushOn']->value) {?>1<?php } else { ?>0<?php }?>">
<input type="hidden" id="maDate" value="<?php echo $_smarty_tpl->tpl_vars['dd']->value;?>
">
<p class="ma-intro">Erstelle einen Link bzw. QR-Code, mit dem ein Mitarbeiter die Anreiseliste dieses Tages
mobil öffnet – mit den hier festgelegten Fahrzeugen und Rechten. Kein Login nötig (über Token gesichert).</p>
<div class="row g-3">
<div class="col-12 col-lg-7">
<div class="card h-100"><div class="card-body ma-opts">
<div class="ma-sec">
<label class="form-label ma-h"><i class="material-icons">badge</i> Bezeichnung <span class="ma-muted">(optional, z. B. Mitarbeitername)</span></label>
<input type="text" class="form-control form-control-sm" id="maLabel" maxlength="120" placeholder="z. B. Schicht Tor 2 · Max M.">
</div>
<div class="ma-sec">
<div class="ma-h"><i class="material-icons">swap_vert</i> Ansicht für diesen Tag</div>
<div class="ma-seg" id="maModeSeg">
<label class="ma-seg-btn"><input type="radio" name="maMode" class="ma-mode-rb" value="anreise" checked><span>Anreisen</span></label>
<label class="ma-seg-btn"><input type="radio" name="maMode" class="ma-mode-rb" value="abreise"><span>Abreisen</span></label>
<label class="ma-seg-btn"><input type="radio" name="maMode" class="ma-mode-rb" value="dashboard"><span>Dashboard</span></label>
</div>
<div class="ma-hint" id="maModeHint">Anreisen: ankommende Fahrzeuge dieses Tages (Check-in).</div>
</div>
<div class="row g-3">
<div class="col-12 col-md-6">
<div class="ma-sec h-100">
<div class="ma-h"><i class="material-icons">local_parking</i> Stellplatz</div>
<label class="ma-check"><input type="checkbox" class="ma-cb ma-park" value="halle" checked> <span>Halle</span></label>
<label class="ma-check"><input type="checkbox" class="ma-cb ma-park" value="aussen" checked> <span>Außen</span></label>
<label class="ma-check"><input type="checkbox" class="ma-cb ma-park" value="valet" checked> <span>Valet</span></label>
</div>
</div>
<div class="col-12 col-md-6" id="maSecStatus">
<div class="ma-sec h-100">
<div class="ma-h"><i class="material-icons">filter_alt</i> Status</div>
<label class="ma-check"><input type="checkbox" class="ma-cb ma-status" value="open" checked> <span>Offen</span></label>
<label class="ma-check"><input type="checkbox" class="ma-cb ma-status" value="arrived" checked> <span id="maStatusArrived">Angereist</span></label>
<label class="ma-check"><input type="checkbox" class="ma-cb ma-status" value="storno"> <span>Storniert</span></label>
</div>
</div>
</div>
<div class="row g-3">
<div class="col-12 col-md-6">
<div class="ma-sec h-100">
<div class="ma-h"><i class="material-icons">directions_boat</i> Eingrenzen</div>
<?php if ((count($_smarty_tpl->tpl_vars['shipSet']->value)) > 1) {?>
<label class="form-label">Schiff</label>
<select class="form-select form-select-sm mb-2" id="maShip">
<option value="">Alle Schiffe</option>
<?php
$_from = $_smarty_tpl->smarty->ext->_foreach->init($_smarty_tpl, $_smarty_tpl->tpl_vars['shipSet']->value, 's');
if ($_from !== null) {
foreach ($_from as $_smarty_tpl->tpl_vars['s']->value) {
?><option value="<?php echo htmlspecialchars($_smarty_tpl->tpl_vars['s']->value, ENT_QUOTES, 'UTF-8', true);?>
"><?php echo htmlspecialchars($_smarty_tpl->tpl_vars['s']->value, ENT_QUOTES, 'UTF-8', true);?>
</option><?php
}
}
$_smarty_tpl->smarty->ext->_foreach->restore($_smarty_tpl);
?>
</select>
<?php } else { ?><input type="hidden" id="maShip" value=""><?php }?>
<?php if ((count($_smarty_tpl->tpl_vars['tripSet']->value)) > 1) {?>
<label class="form-label">Reiselänge</label>
<select class="form-select form-select-sm" id="maTrip">
<option value="">Alle Längen</option>
<?php
$_from = $_smarty_tpl->smarty->ext->_foreach->init($_smarty_tpl, $_smarty_tpl->tpl_vars['tripSet']->value, 't');
if ($_from !== null) {
foreach ($_from as $_smarty_tpl->tpl_vars['t']->value) {
?><option value="<?php echo $_smarty_tpl->tpl_vars['t']->value;?>
"><?php echo $_smarty_tpl->tpl_vars['t']->value;?>
Tage</option><?php
}
}
$_smarty_tpl->smarty->ext->_foreach->restore($_smarty_tpl);
?>
</select>
<?php } else { ?><input type="hidden" id="maTrip" value=""><?php }?>
<?php if ((count($_smarty_tpl->tpl_vars['shipSet']->value)) <= 1 && (count($_smarty_tpl->tpl_vars['tripSet']->value)) <= 1) {?><div class="ma-muted">Keine weitere Eingrenzung (nur ein Schiff/eine Länge).</div><?php }?>
</div>
</div>
<div class="col-12 col-md-6">
<div class="ma-sec h-100">
<div id="maTimeFilter">
<div class="ma-h" id="maTimeHead"><i class="material-icons">schedule</i> Check-in-Zeit</div>
<div class="d-flex align-items-center gap-2 mb-2">
<span class="ma-muted">ab</span>
<input type="time" class="form-control form-control-sm browser-default ma-time" id="maFrom">
<span class="ma-muted">bis</span>
<input type="time" class="form-control form-control-sm browser-default ma-time" id="maTo">
</div>
</div>
<div class="ma-h mt-2"><i class="material-icons">event_busy</i> Gültig bis</div>
<input type="datetime-local" class="form-control form-control-sm browser-default" id="maExpires" value="<?php echo $_smarty_tpl->tpl_vars['dd']->value;?>
T23:59">
<div class="ma-hint">Leer = unbegrenzt (bis Widerruf).</div>
</div>
</div>
</div>
<div class="ma-sec" id="maSecCols">
<div class="ma-h"><i class="material-icons">view_column</i> Spalten der Liste</div>
<label class="ma-check"><input type="checkbox" class="ma-cb" checked disabled> <span>Kennzeichen <span class="ma-muted">(immer)</span></span></label>
<label class="ma-check"><input type="checkbox" class="ma-cb" checked disabled> <span>Name <span class="ma-muted">(immer)</span></span></label>
<label class="ma-check"><input type="checkbox" class="ma-cb ma-col" value="type" checked> <span>Typ <span class="ma-muted">(H/A/VH/VA)</span></span></label>
<label class="ma-check"><input type="checkbox" class="ma-cb ma-col" value="time" checked> <span>Zeit</span></label>
<label class="ma-check"><input type="checkbox" class="ma-cb ma-col" value="dur" checked> <span>Tage</span></label>
</div>
<div class="ma-sec" id="maSecRights">
<div class="ma-h"><i class="material-icons">verified_user</i> Rechte des Mitarbeiters</div>
<label class="ma-check ma-switch"><input type="checkbox" class="ma-cb" id="maPermAction" checked>
<span><b>Check-in & Zahlung erlauben</b><br><span class="ma-muted">Aus = nur Ansicht (Mitarbeiter sieht keine Preise und kann nicht einchecken).</span></span></label>
<label class="ma-check ma-switch"><input type="checkbox" class="ma-cb" id="maPermSearch">
<span><b>Suche über den Filter hinaus</b><br><span class="ma-muted">Mitarbeiter findet per Suche auch Fahrzeuge außerhalb des Filters (sichtbar als „außerhalb").</span></span></label>
<label class="ma-check ma-switch"><input type="checkbox" class="ma-cb" id="maNotes">
<span><b>Interne Notizen erfassen</b><br><span class="ma-muted">Mitarbeiter kann im Tab „Notizen" interne Notizen zur Buchung anlegen/bearbeiten (eigene). Lesen ist immer möglich.</span></span></label>
</div>
<div class="ma-sec" id="maSecImg">
<div class="ma-h"><i class="material-icons">photo_camera</i> Fahrzeugbilder</div>
<div class="ma-imgcols">
<label class="ma-check"><input type="checkbox" class="ma-cb ma-img" value="view" checked> <span>Bilder sehen</span></label>
<label class="ma-check"><input type="checkbox" class="ma-cb ma-img" value="upload" checked> <span>Bilder hochladen</span></label>
<label class="ma-check"><input type="checkbox" class="ma-cb ma-img" value="note_view" checked> <span>Bildnotizen sehen</span></label>
<label class="ma-check"><input type="checkbox" class="ma-cb ma-img" value="note_create" checked> <span>Bildnotizen erfassen</span></label>
<label class="ma-check"><input type="checkbox" class="ma-cb ma-img" value="note_edit_own" checked> <span>Eigene Notizen bearbeiten</span></label>
<label class="ma-check"><input type="checkbox" class="ma-cb ma-img" value="note_edit_all"> <span>Alle Notizen bearbeiten</span></label>
<label class="ma-check"><input type="checkbox" class="ma-cb ma-img" value="del_own" checked> <span>Eigene Bilder löschen</span></label>
<label class="ma-check"><input type="checkbox" class="ma-cb ma-img" value="del_all"> <span>Alle Bilder löschen</span></label>
<label class="ma-check"><input type="checkbox" class="ma-cb ma-img" value="download"> <span>Originalbild herunterladen</span></label>
</div>
<div class="ma-hint">Sichtbarkeit außerhalb des Filters folgt dem Recht „Suche über den Filter hinaus".</div>
</div>
<div class="ma-sec">
<div class="ma-h"><i class="material-icons">lock</i> PIN-Schutz <span class="ma-muted">(optional)</span></div>
<input type="text" inputmode="numeric" pattern="[0-9]*" maxlength="8" autocomplete="off" class="form-control form-control-sm" id="maPin" placeholder="4–8 Ziffern (leer = ohne PIN)">
<label class="ma-check mt-2 d-none" id="maPinRemoveWrap"><input type="checkbox" class="ma-cb" id="maPinRemove"> <span>PIN entfernen</span></label>
<div class="ma-hint">Mitarbeiter muss die PIN auf einer Tastatur in der Web-App eingeben (Tippen oder Ziehen). Freischaltung bleibt per Cookie auch nach Neuladen erhalten.</div>
</div>
<div class="ma-edit-note d-none" id="maEditNote"><i class="material-icons sm">edit</i> Bestehenden Zugang bearbeiten – der Link/QR bleibt gültig.</div>
<button type="button" class="btn btn-primary w-100" id="maCreate"><i class="material-icons sm">add_link</i> Zugang erstellen</button>
<button type="button" class="btn btn-outline-secondary w-100 mt-2 d-none" id="maCancelEdit">Bearbeitung abbrechen</button>
<div class="js-status small mt-2" id="maMsg"></div>
</div></div>
</div>
<div class="col-12 col-lg-5">
<div class="card ma-result-card h-100"><div class="card-body">
<div class="ma-result-empty" id="maResultEmpty">
<i class="material-icons">qr_code_2</i>
<div>Hier erscheinen Link & QR-Code, sobald ein Zugang erstellt wurde.</div>
</div>
<div class="ma-result d-none" id="maResult">
<div class="ma-qr"><img id="maQr" alt="QR-Code" width="200" height="200"></div>
<div class="ma-result-label" id="maResultLabel"></div>
<div class="ma-result-sum" id="maResultSum"></div>
<div class="input-group input-group-sm mt-2">
<input type="text" class="form-control" id="maLink" readonly>
<button class="btn btn-outline-secondary" type="button" id="maCopy"><i class="material-icons sm">content_copy</i></button>
</div>
<div class="d-flex gap-2 mt-2">
<a class="btn btn-sm btn-outline-primary flex-fill" id="maOpen" target="_blank" rel="noopener"><i class="material-icons sm">open_in_new</i> Öffnen</a>
<?php if ($_smarty_tpl->tpl_vars['pushOn']->value) {?><button class="btn btn-sm btn-outline-primary flex-fill" type="button" id="maPush"><i class="material-icons sm">send</i> Per Pushover</button><?php }?>
</div>
<div class="js-status small mt-2" id="maPushMsg"></div>
</div>
</div></div>
</div>
</div>
<div class="card mt-3"><div class="card-body">
<div class="ma-h mb-2"><i class="material-icons">list</i> Aktive Zugänge für diesen Tag</div>
<div id="maList"><div class="ma-muted">Wird geladen …</div></div>
</div></div>
</div>
<style>
.ma-wrap .ma-intro{ font-size:.86rem; color:var(--text-muted,#8a909d); margin-bottom:14px; }
.ma-opts .ma-sec, .ma-wrap .ma-sec{ background:var(--bg-surface,#fff); border:1px solid var(--border-color,#e6e7eb); border-radius:12px; padding:12px 14px; margin-bottom:12px; }
.ma-opts .row{ margin-bottom:12px; } .ma-opts .row:last-of-type{ margin-bottom:12px; } .ma-opts .row .ma-sec{ margin-bottom:0; }
.ma-h{ display:flex; align-items:center; gap:7px; font-weight:600; font-size:.85rem; color:var(--text,#1e2633); margin-bottom:9px; }
.ma-h .material-icons{ font-size:18px; color:var(--primary,#0b4677); }
.ma-wrap .form-label{ font-size:.72rem; font-weight:600; text-transform:uppercase; letter-spacing:.3px; color:var(--text-muted,#8a909d); margin-bottom:2px; }
.ma-muted{ color:var(--text-muted,#8a909d); font-size:.82rem; font-weight:400; }
.ma-hint{ font-size:.74rem; color:var(--text-muted,#8a909d); margin-top:5px; }
.ma-check{ display:flex; align-items:flex-start; gap:9px; font-size:.9rem; margin-bottom:8px; cursor:pointer; }
.ma-check:last-child{ margin-bottom:0; }
.ma-switch{ background:var(--bg-surface-secondary,#f6f8fb); border:1px solid var(--border-color,#e6e7eb); border-radius:10px; padding:10px 12px; }
.ma-cb{ -webkit-appearance:none !important; appearance:none !important; -moz-appearance:none !important;
width:18px !important; height:18px !important; min-width:18px; flex:0 0 18px; margin:2px 0 0 !important; padding:0 !important;
position:static !important; opacity:1 !important; box-sizing:border-box; border:1.5px solid var(--border-color,#bcc3cf);
border-radius:5px; background:#fff; cursor:pointer; display:inline-block; transition:background .12s,border-color .12s; }
.ma-cb:checked{ background:var(--primary,#0b4677); border-color:var(--primary,#0b4677);
background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23fff' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 8.5l3.2 3.2L13 5'/%3E%3C/svg%3E");
background-repeat:no-repeat; background-position:center; background-size:13px; }
.ma-time{ max-width:120px; }
.ma-seg{ display:flex; border:1px solid var(--border-color,#e6e7eb); border-radius:10px; overflow:hidden; }
.ma-seg-btn{ flex:1; margin:0; cursor:pointer; position:relative; }
.ma-seg-btn input{ position:absolute; opacity:0; width:0; height:0; pointer-events:none; }
.ma-seg-btn span{ display:block; text-align:center; padding:9px 6px; font-size:.88rem; font-weight:600; color:var(--text-secondary,#626d7d); background:var(--bg-surface,#fff); transition:background .12s,color .12s; }
.ma-seg-btn + .ma-seg-btn span{ border-left:1px solid var(--border-color,#e6e7eb); }
.ma-seg-btn input:checked + span{ background:var(--primary,#0b4677); color:#fff; }
.ma-result-card{ position:sticky; top:14px; }
.ma-result-empty{ text-align:center; color:var(--text-muted,#8a909d); padding:30px 10px; }
.ma-result-empty .material-icons{ font-size:54px; opacity:.4; display:block; margin-bottom:8px; }
.ma-result{ text-align:center; }
.ma-qr{ background:#fff; border:1px solid var(--border-color,#e6e7eb); border-radius:12px; padding:10px; display:inline-block; }
.ma-qr img{ display:block; width:200px; height:200px; image-rendering:pixelated; }
.ma-result-label{ font-weight:700; margin-top:10px; }
.ma-result-sum{ font-size:.8rem; color:var(--text-muted,#8a909d); margin-top:3px; }
.ma-list-tbl{ width:100%; font-size:.85rem; }
.ma-list-tbl th{ font-size:.7rem; text-transform:uppercase; letter-spacing:.3px; color:var(--text-muted,#8a909d); text-align:left; padding:6px 8px; border-bottom:2px solid var(--border-color,#e6e7eb); }
.ma-list-tbl td{ padding:8px; border-bottom:1px solid var(--border-color,#eef1f5); vertical-align:middle; }
.ma-tag{ display:inline-block; font-size:.72rem; font-weight:600; background:var(--bg-surface-secondary,#eef1f5); color:var(--text-secondary,#626d7d); border-radius:6px; padding:2px 7px; margin:1px 2px 1px 0; }
.ma-tag.warn{ background:#fdeaea; color:#a23030; } .ma-tag.ok{ background:#e7f6ec; color:#1d7a33; } .ma-tag.info{ background:#e7eff7; color:#155a8a; }
.ma-list-link{ color:var(--primary,#0b4677); word-break:break-all; font-size:.8rem; }
.ma-imgcols{ display:grid; grid-template-columns:1fr 1fr; gap:2px 14px; }
@media (max-width:480px){ .ma-imgcols{ grid-template-columns:1fr; } }
.ma-edit-note{ display:flex; align-items:center; gap:6px; background:#e7eff7; color:#155a8a; border-radius:9px; padding:8px 11px; font-size:.82rem; font-weight:600; margin-bottom:8px; }
.ma-edit-note .material-icons{ font-size:16px; }
#maCreate .material-icons, #maPush .material-icons, #maCopy .material-icons, #maOpen .material-icons{ font-size:16px; vertical-align:-3px; }
</style>
<?php echo '<script'; ?>
src="<?php echo @constant('SITE_URL');?>
/assets/js/day-mobileaccess.js?v=<?php echo filemtime((@constant('PATH_SYSTEM')).('/assets/js/day-mobileaccess.js'));?>
"><?php echo '</script'; ?>
>
<?php }
}