| 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/ |
Upload File : |
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="">
<meta name="author" content="">
<link rel="icon" href="favicon.ico">
<title>Buchungssystem - Parken-am-Schiff.de</title>
<!-- Theme vor dem Paint setzen (kein FOUC) -->
<script>(function(){try{var t=localStorage.getItem('pacim:theme');if(t){document.documentElement.setAttribute('data-theme',t);}}catch(e){}})();</script>
<!-- Fonts: Inter (Gentelella v4) -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
<!-- Bootstrap 5 (Content-Komponenten) + Plugins -->
<link href="https://seaside.pacim.de/assets/css/bootstrap.min.css" rel="stylesheet">
<link href="https://seaside.pacim.de/assets/css/fonts/material-icon-font.css" rel="stylesheet">
<link href="https://seaside.pacim.de/assets/css/plugins/quill.snow.min.css" rel="stylesheet">
<link href="https://seaside.pacim.de/assets/css/plugins/choices.min.css" rel="stylesheet">
<link href="https://seaside.pacim.de/assets/css/styles.css" rel="stylesheet">
<!-- Gentelella v4 Shell + Akzente (zuletzt, überschreibt) -->
<link href="https://seaside.pacim.de/assets/css/gentelella.css?v=1780513076" rel="stylesheet">
<link href="https://seaside.pacim.de/assets/css/gentelella-accents.css?v=1780439034" rel="stylesheet">
<link href="https://seaside.pacim.de/assets/css/search.css?v=1780917534" rel="stylesheet">
<!-- Favicon -->
<link rel="apple-touch-icon" sizes="57x57" href="https://seaside.pacim.de/assets/favico/apple-icon-57x57.png">
<link rel="apple-touch-icon" sizes="76x76" href="https://seaside.pacim.de/assets/favico/apple-icon-76x76.png">
<link rel="apple-touch-icon" sizes="120x120" href="https://seaside.pacim.de/assets/favico/apple-icon-120x120.png">
<link rel="apple-touch-icon" sizes="152x152" href="https://seaside.pacim.de/assets/favico/apple-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="https://seaside.pacim.de/assets/favico/apple-icon-180x180.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://seaside.pacim.de/assets/favico/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="https://seaside.pacim.de/assets/favico/favicon-16x16.png">
<link rel="manifest" href="https://seaside.pacim.de/assets/favico/manifest.json">
<meta name="theme-color" content="#ffffff">
</head>
<body data-page="pacim/debug">
<a class="skip-link" href="#main-content">Zum Inhalt springen</a>
<style>
.nav-link .nav-count{ margin-left:auto; background:var(--red,#d63939); color:#fff; font-size:11px; font-weight:600; line-height:1; padding:3px 7px; border-radius:999px; min-width:18px; text-align:center; }
.nav-link .nav-count.nav-count-warn{ background:var(--yellow,#f59f00); color:#fff; }
</style>
<aside class="sidebar" id="sidebar" aria-label="Hauptnavigation">
<div class="sidebar-brand">
<a class="brand-link" href="https://seaside.pacim.de/" aria-label="Zum Cockpit">
<div class="brand-icon">P</div>
<div class="brand-name">PaCIM <small>v4</small></div>
</a>
</div>
<nav class="sidebar-nav">
<div class="nav-group">
<div class="nav-label">Übersicht</div>
<a class="nav-link" href="https://seaside.pacim.de/">
<svg class="icon" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><rect x="3" y="3" width="7" height="7" rx="1.5"/><rect x="14" y="3" width="7" height="4" rx="1.5"/><rect x="3" y="14" width="7" height="7" rx="1.5"/><rect x="14" y="10" width="7" height="11" rx="1.5"/></svg>
<span class="nav-text">Cockpit</span>
</a>
<a class="nav-link" href="https://seaside.pacim.de/tasks/dashboard/">
<svg class="icon" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><rect x="3" y="4" width="18" height="16" rx="2"/><path d="M3 10h18M8 4v6M16 4v6"/></svg>
<span class="nav-text">Kalender</span>
</a>
<a class="nav-link" href="https://seaside.pacim.de/events/">
<svg class="icon" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><rect x="3" y="5" width="18" height="16" rx="2"/><path d="M16 3v4M8 3v4M3 11h18M8 15h.01M12 15h.01M16 15h.01"/></svg>
<span class="nav-text">Events</span>
</a>
<a class="nav-link" href="https://seaside.pacim.de/requests/">
<svg class="icon" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z"/></svg>
<span class="nav-text">Anfragen</span>
</a>
</div>
<div class="nav-group">
<div class="nav-label">Reports</div>
<a class="nav-link" href="https://seaside.pacim.de/accounting/dashboard/">
<svg class="icon" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M5 21V3h14v18l-3-2-3 2-3-2-3 2-2-2z"/><path d="M9 8h6M9 12h6M9 16h4"/></svg>
<span class="nav-text">Buchhaltung</span>
</a>
<a class="nav-link" href="https://seaside.pacim.de/reports/yearly/">
<svg class="icon" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M4 19V5M8 19v-8M12 19V9M16 19v-5M20 19v-9"/></svg>
<span class="nav-text">Buchungen nach Jahren</span>
</a>
<div class="nav-tree">
<button type="button" class="nav-link nav-toggle" aria-expanded="false">
<svg class="icon" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
<span class="nav-text">Zeiterfassung</span>
<svg class="nav-chev" width="12" height="12" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="M6 4l4 4-4 4"/></svg>
</button>
<div class="nav-sub"><div class="nav-sub-inner">
<a class="nav-sublink" href="https://seaside.pacim.de/worktime/dashboard/">Übersicht</a>
<a class="nav-sublink" href="https://seaside.pacim.de/worktime/employees/">Mitarbeiter</a>
<a class="nav-sublink" href="https://seaside.pacim.de/worktime/create/">Zeitnachweise</a>
</div></div>
</div>
</div>
<div class="nav-group">
<div class="nav-label">System</div>
<a class="nav-link" href="https://seaside.pacim.de/mailing/">
<svg class="icon" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><rect x="3" y="5" width="18" height="14" rx="2"/><path d="M3 7l9 6 9-6"/></svg>
<span class="nav-text">Mailing</span>
</a>
<a class="nav-link" href="https://seaside.pacim.de/partner/">
<svg class="icon" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M17 20v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 20v-2a4 4 0 00-3-3.87M16 3.13a4 4 0 010 7.75"/></svg>
<span class="nav-text">Partnerprogramm</span>
</a>
<div class="nav-tree open has-active">
<button type="button" class="nav-link nav-toggle" aria-expanded="true">
<svg class="icon" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><circle cx="12" cy="12" r="3"/><path d="M12 2v3M12 19v3M2 12h3M19 12h3M5.6 5.6l2.1 2.1M16.3 16.3l2.1 2.1M5.6 18.4l2.1-2.1M16.3 7.7l2.1-2.1"/></svg>
<span class="nav-text">Einstellungen</span>
<svg class="nav-chev" width="12" height="12" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="M6 4l4 4-4 4"/></svg>
</button>
<div class="nav-sub"><div class="nav-sub-inner">
<a class="nav-sublink" href="https://seaside.pacim.de/pacim/system/">System</a>
<a class="nav-sublink" href="https://seaside.pacim.de/pacim/products/">Produkte</a>
<a class="nav-sublink" href="https://seaside.pacim.de/imports/manager/">Import-Manager</a>
<a class="nav-sublink active" href="https://seaside.pacim.de/pacim/debug/">Debug</a>
</div></div>
</div>
</div>
</nav>
<div class="sidebar-footer">
<div class="sidebar-user">
<div class="avatar">P<span class="online"></span></div>
<div class="sidebar-user-info">
<div class="name">Daniel Großklags</div>
<div class="role">Administrator</div>
</div>
</div>
</div>
</aside>
<main class="main">
<header class="topbar">
<div class="topbar-left">
<button class="sidebar-toggle" type="button" aria-label="Menü umschalten" aria-controls="sidebar" aria-expanded="false">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="M4 6h16M4 12h16M4 18h16"/></svg>
</button>
<nav class="breadcrumb" aria-label="Breadcrumb"><span>PaCIM</span><span class="sep" aria-hidden="true">›</span><span class="current" aria-current="page">pacim/debug</span></nav>
</div>
<div class="search-box" id="global-search">
<svg class="s-icon" width="14" height="14" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><circle cx="7" cy="7" r="5"/><path d="M11 11l3.5 3.5"/></svg>
<input type="text" id="searchform" placeholder="Suche: Kunde, Buchung, Kennzeichen …" aria-label="Suche" autocomplete="off" role="combobox" aria-expanded="false" aria-controls="search-overlay" aria-autocomplete="list">
<div class="search-overlay" id="search-overlay" role="listbox" hidden></div>
</div>
<div class="topbar-right">
<button class="tb-btn theme-toggle" type="button" title="Design umschalten" aria-label="Design umschalten" aria-pressed="false">
<svg class="theme-icon-light" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><circle cx="12" cy="12" r="4"/><path d="M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M4.93 19.07l1.41-1.41M17.66 6.34l1.41-1.41"/></svg>
<svg class="theme-icon-dark" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></svg>
</button>
<a class="tb-btn" href="https://seaside.pacim.de/logout.php" title="Abmelden" aria-label="Abmelden">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4"/><path d="M16 17l5-5-5-5M21 12H9"/></svg>
</a>
<div class="dropdown">
<button class="tb-avatar" type="button" id="userMenu" data-bs-toggle="dropdown" aria-expanded="false" title="Benutzerkonto" aria-label="Benutzerkonto">DA</button>
<ul class="dropdown-menu dropdown-menu-end shadow-sm" aria-labelledby="userMenu">
<li><h6 class="dropdown-header text-truncate">Daniel Großklags</h6></li>
<li><a class="dropdown-item d-flex align-items-center gap-2" href="https://seaside.pacim.de/pacim/system/"><i class="material-icons sm">settings</i> Einstellungen</a></li> <li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item d-flex align-items-center gap-2 text-danger" href="https://seaside.pacim.de/logout.php"><i class="material-icons sm">logout</i> Abmelden</a></li>
</ul>
</div>
</div>
</header>
<div class="page-wrapper" id="main-content" role="main">
<link rel="stylesheet" href="https://seaside.pacim.de/assets/css/cockpit.css?v=1780917736">
<div class="page-header">
<div class="page-header-row d-flex justify-content-between align-items-center flex-wrap gap-2">
<div>
<div class="stat-label">PaCIM System</div>
<h1 class="h3 mb-0">Debug & Performance</h1>
</div>
</div>
</div>
<div id="set-debug">
<div class="alert alert-info small">
<strong>Performance-Messung.</strong> Hier wird nur <em>gemessen</em> – es werden keine Buchungsabläufe verändert.
Messpunkte schreiben gepuffert am Request-Ende (ein INSERT), fallen bei Fehlern still aus und speichern keine personenbezogenen Daten.
</div>
<div class="row g-3">
<div class="col-12 col-xl-5">
<form id="dbgForm" autocomplete="off">
<div class="card mb-3">
<div class="card-header d-flex justify-content-between align-items-center">
<span class="fw-bold">Performance-Logging</span>
<button type="submit" class="btn btn-sm btn-primary"><i class="material-icons sm">save</i> Speichern</button>
</div>
<div class="card-body">
<label class="form-check d-flex align-items-center gap-2 mb-3">
<input class="form-check-input" type="checkbox" id="dbgEnabled"> <span><strong>Logging aktivieren</strong></span>
</label>
<div class="row g-2">
<div class="col-6"><label class="form-label">Mindestdauer (ms)</label><input class="form-control form-control-sm" type="number" min="0" id="dbgMinMs" value="100"></div>
<div class="col-6"><label class="form-label">Max. Logs</label><input class="form-control form-control-sm" type="number" min="1000" id="dbgMaxRows" value="50000"></div>
</div>
<div class="form-text mt-2">Nur Aktionen ab Mindestdauer werden gespeichert. Ältere Einträge über dem Limit werden vom Agent/Cron entfernt.</div>
<div class="d-flex align-items-center gap-3 mt-2 small text-muted">
<span>Gespeicherte Logs: <strong id="dbgLogCount">–</strong></span>
<span>Pushover: <strong id="dbgPushReady">–</strong></span>
</div>
<div id="dbgMsg" class="small mt-2"></div>
</div>
</div>
<div class="card">
<div class="card-header fw-bold">Debug-Agent (Pushover)</div>
<div class="card-body">
<label class="form-check d-flex align-items-center gap-2 mb-3">
<input class="form-check-input" type="checkbox" id="dbgAgentEnabled"> <span><strong>Agent aktivieren</strong> – meldet Auffälligkeiten</span>
</label>
<div class="row g-2">
<div class="col-6"><label class="form-label">Langsam ab (ms)</label><input class="form-control form-control-sm" type="number" id="dbgSlowMs" value="2000"></div>
<div class="col-6"><label class="form-label">Ø-Warnung ab (ms)</label><input class="form-control form-control-sm" type="number" id="dbgAvgMs" value="1500"></div>
<div class="col-6"><label class="form-label">Speicher ab (MB)</label><input class="form-control form-control-sm" type="number" id="dbgMemMb" value="192"></div>
<div class="col-6"><label class="form-label">Prüf-Intervall (Min)</label><input class="form-control form-control-sm" type="number" id="dbgIntervalMin" value="15"></div>
<div class="col-6"><label class="form-label">Cooldown (Min)</label><input class="form-control form-control-sm" type="number" id="dbgCooldownMin" value="360"></div>
</div>
<label class="form-label mt-2">Pushover-Key (optional)</label>
<input class="form-control form-control-sm" id="dbgAgentKey" placeholder="leer = alle Mitarbeiter mit hinterlegtem Key">
<div class="form-text mt-1">Nutzt die bestehende Pushover-Queue. Meldungen frühestens alle „Cooldown" Minuten je Signatur (kein Spam).</div>
<button type="button" class="btn btn-sm btn-light border mt-2" id="dbgAgentRun"><i class="material-icons sm">play_arrow</i> Agent jetzt prüfen</button>
<span id="dbgAgentMsg" class="small ms-2"></span>
</div>
</div>
</form>
</div>
<div class="col-12 col-xl-7">
<div class="card mb-3">
<div class="card-header d-flex justify-content-between align-items-center">
<span class="fw-bold">Auswertung</span>
<div class="d-flex gap-2">
<select class="form-select form-select-sm" id="dbgHours" style="width:auto;">
<option value="1">letzte 1 h</option>
<option value="6">letzte 6 h</option>
<option value="24" selected>letzte 24 h</option>
<option value="168">letzte 7 Tage</option>
</select>
<button type="button" class="btn btn-sm btn-light border" id="dbgRefresh"><i class="material-icons sm">refresh</i></button>
<a class="btn btn-sm btn-light border" id="dbgExport" href="#"><i class="material-icons sm">file_download</i> CSV</a>
<button type="button" class="btn btn-sm btn-outline-danger" id="dbgClear"><i class="material-icons sm">delete</i> Leeren</button>
</div>
</div>
<div class="card-body">
<ul class="nav nav-pills nav-sm mb-3" role="tablist">
<li class="nav-item"><button class="nav-link active" data-bs-toggle="pill" data-bs-target="#dbg-slow" type="button">Langsamste Aktionen</button></li>
<li class="nav-item"><button class="nav-link" data-bs-toggle="pill" data-bs-target="#dbg-mod" type="button">Pro Modul</button></li>
<li class="nav-item"><button class="nav-link" data-bs-toggle="pill" data-bs-target="#dbg-cat" type="button">Kategorien</button></li>
<li class="nav-item"><button class="nav-link" data-bs-toggle="pill" data-bs-target="#dbg-time" type="button">Verlauf 24h</button></li>
</ul>
<div class="tab-content">
<div class="tab-pane fade show active" id="dbg-slow"><div class="table-responsive"><table class="table table-sm table-hover align-middle mb-0"><thead><tr><th>Zeit</th><th>Modul · Aktion</th><th>Kategorie</th><th class="text-end">ms</th><th class="text-end">Zeilen</th></tr></thead><tbody id="dbgSlowBody"></tbody></table></div></div>
<div class="tab-pane fade" id="dbg-mod"><div class="table-responsive"><table class="table table-sm table-hover align-middle mb-0"><thead><tr><th>Modul</th><th class="text-end">Aufrufe</th><th class="text-end">Ø ms</th><th class="text-end">max ms</th><th class="text-end">max MB</th></tr></thead><tbody id="dbgModBody"></tbody></table></div></div>
<div class="tab-pane fade" id="dbg-cat"><div class="table-responsive"><table class="table table-sm table-hover align-middle mb-0"><thead><tr><th>Kategorie</th><th>Modul</th><th class="text-end">Aufrufe</th><th class="text-end">Ø ms</th><th class="text-end">max ms</th></tr></thead><tbody id="dbgCatBody"></tbody></table></div></div>
<div class="tab-pane fade" id="dbg-time"><div id="dbgTimeline" class="small"></div></div>
</div>
</div>
</div>
</div>
</div>
<div class="modal fade" id="dbgDetailModal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header"><h5 class="modal-title">Messung – Detail</h5><button type="button" class="btn-close" data-bs-dismiss="modal"></button></div>
<div class="modal-body"><table class="table table-sm mb-0" id="dbgDetailBody"></table></div>
</div>
</div>
</div>
<style>
#set-debug .nav-pills .nav-link{ padding:4px 12px; font-size:.85rem; }
#set-debug .table td, #set-debug .table th{ font-size:.83rem; }
#set-debug .dbg-bar{ display:inline-block; height:9px; background:var(--primary,#0b4677); border-radius:3px; vertical-align:middle; }
/* Checkboxen framework-unabhängig (materialize/bootstrap-Konflikt umgehen) */
#set-debug .form-check{ display:flex; align-items:center; gap:9px; padding:0; }
#set-debug .form-check-input{ -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:0 !important; padding:0 !important;
position:static !important; opacity:1 !important; float:none !important; box-sizing:border-box;
border:1.5px solid var(--border-color,#bcc3cf); border-radius:5px; background:#fff; cursor:pointer; vertical-align:middle; transition:background .12s,border-color .12s; }
#set-debug .form-check-input: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; }
</style>
</div>
<script src="https://seaside.pacim.de/assets/js/debug.js?v=1782389331"></script>
</div><!-- /.page-wrapper -->
<footer class="footer">
<span>PaCIM · Parken-am-Schiff.de</span>
<span>SeaSide Travel GmbH & Co. Immobilien KG</span>
</footer>
</main><!-- /.main -->
<div class="sidebar-backdrop" hidden></div>
<!-- Globale JS-Variable -->
<script>
var SITE_URL = "https://seaside.pacim.de";
</script>
<!-- Bootstrap 5 Bundle (Content-Komponenten, inkl. Popper) -->
<script src="https://seaside.pacim.de/assets/js/bootstrap.bundle.min.js"></script>
<!-- Gentelella v4 Shell-Verhalten (Sidebar/Drawer/Theme) -->
<script src="https://seaside.pacim.de/assets/js/gentelella.js?v=1780438958"></script>
<script src="https://seaside.pacim.de/assets/js/search.js?v=1780917509"></script>
<!-- Vanilla-Plugins -->
<script src="https://seaside.pacim.de/assets/js/plugins/quill.min.js"></script>
<script src="https://seaside.pacim.de/assets/js/plugins/choices.min.js"></script>
<script src="https://seaside.pacim.de/assets/js/plugins/theme-functions.js"></script>
<script src="https://seaside.pacim.de/assets/js/custom.min.js?v=1780452213"></script>
<script src="https://seaside.pacim.de/assets/js/filter.js?v=1780443738"></script>
<script src="https://seaside.pacim.de/assets/js/table-sort.js?v=1780460902"></script>
<script src="https://seaside.pacim.de/assets/js/address-autocomplete.js?v=1780694884"></script>
<!-- Bestätigungs-Modal -->
<div class="modal fade" id="confirmationModal" tabindex="-1" role="dialog" aria-labelledby="confirmationModalTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="confirmationModalTitle">Modal title</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
...
</div>
<div class="modal-footer">
<div class="confirmation m-0 row w-100">
<button type="button" class="btn btn-danger col mx-1 d-block" data-bs-dismiss="modal">Abbrechen</button>
<button type="button" class="btn btn-primary col mx-1 d-block btn-send-ajax">Bestätigen</button>
</div>
<div class="editor m-0 row w-100" style="display:none;">
<button type="button" class="btn btn-light border-secondary col mx-1 d-block" data-bs-dismiss="modal">Abbrechen</button>
<button type="button" class="btn btn-success border-secondary col mx-1 d-block btn-send-ajax">Speichern</button>
</div>
</div>
</div>
</div>
</div>
<!-- Datei-Viewer-Modal -->
<div class="modal fade" id="fileModal" tabindex="-1" role="dialog" aria-labelledby="fileModalTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="fileModalTitle">Modal title</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
...
</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline-danger col" data-bs-dismiss="modal">Schließen</button>
<button type="button" class="btn btn-primary col">Drucken</button>
</div>
</div>
</div>
</div>
</body>
</html>