Update index.php

UI Update
This commit is contained in:
Leonardo Brandenberger 2026-02-26 04:02:50 +01:00
parent dd08482038
commit 467fc2219a
1 changed files with 378 additions and 294 deletions

672
index.php
View File

@ -1,349 +1,433 @@
<?php
include "zefixAPI.php";
?>
<!doctype html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="css/custom.css?v=1.2">
<link rel="stylesheet" href="css/bootstrap.css">
<title>Silias Zefix Suche</title>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
#sitzInput {
box-sizing: border-box;
background-position: 14px 12px;
background-repeat: no-repeat;
font-size: 16px;
padding: 14px 20px 12px 45px;
border: none;
border-bottom: 1px solid #ddd;
}
<!-- Bootstrap first, then your overrides -->
<link rel="stylesheet" href="css/bootstrap.css">
<link rel="stylesheet" href="css/custom.css?v=1.3">
#sitzInput {outline: 3px solid #ddd;}
<title>Silias Zefix Suche</title>
.button-small {
font-size: 0.7rem;
padding: 0% 1%;
}
<style>
/* Nice input for the search box */
#sitzInput {
box-sizing: border-box;
font-size: 16px;
border: 1px solid #dee2e6;
border-radius: .5rem;
padding: .6rem .8rem;
width: 100%;
}
.dropdown a:hover {background-color: #ddd;}
.scrollWindow {
max-height: 320px;
overflow-y: auto;
border: 1px solid #dee2e6;
border-radius: .75rem;
background: #fff;
padding: .75rem;
}
.show {display: block;}
.button-small {
font-size: 0.8rem;
padding: .35rem .6rem;
border-radius: .5rem;
}
.scrollWindow {
max-height: 300px; /* Adjust the value as needed */
overflow-y: auto; /* This will add a scrollbar when content exceeds max-height */
border: 1px solid #ccc; /* Optional: Add a border for visual clarity */
padding: 10px; /* Optional: Add padding for better spacing */
}
</style>
.gemeindeeintrag { margin-bottom: .25rem; }
</style>
</head>
<body>
<body class="bg-light">
<div class="wrapper">
<section>
<nav class="navbar navbar-light bg-white border-bottom">
<div class="container">
<span class="navbar-brand mb-0 h1">Silias ZEFIX Export</span>
</div>
</nav>
<main class="container py-4 py-md-5">
<div class="row justify-content-center">
<div class="col-lg-10 col-xl-9">
<div class="container">
<h1>Silias Zefix Suche</h1>
<div class="card shadow-sm">
<div class="card-body p-4 p-md-5">
<div class="d-flex flex-column flex-md-row align-items-md-start justify-content-between gap-2 mb-3">
<div>
<h1 class="h3 mb-1">Silias Zefix Suche</h1>
<p class="text-muted mb-0">
Exportiere Firmen als Excel (xlsx) aus dem Zentralen Firmenindex (ZEFIX).
</p>
</div>
<span class="badge bg-primary-subtle text-primary border border-primary-subtle align-self-md-center">
Export via E-Mail Link
</span>
</div>
<p>Willkommen bei Silias Zefix Suche. Diese Applikation ermöglicht es, eine Liste von Firmen als Excel Liste (xlsx) aus dem Zentralen Firmenindex zu exportieren.</p>
<hr class="my-4">
<form action="submit.php" method="post">
<label for="firma">Firmenname:</label>
<p>* kann als Platzhalter verwendet werden</p>
<input type="text" id="firma" name="firma"><br><br>
<form action="submit.php" method="post" class="needs-validation" novalidate>
<label for="kanton">Kanton:</label>
<p>Bitte beachten Sie, dass die Auswahl der Kantone von der Export Funktion ignoriert wird. Sie wird nur dazu verwendet, die untenstehenden Ortschaften zu filtern. Wenn Sie Firmen nach Kantonen exportieren möchten, klicken Sie alle gewünschten Kantone an und klicken Sie anschliessend bei den Ortschaften auf "alle Ergebnise auswählen".</p>
<div id="kantonauswahl" class="scrollWindow" onclick="filterFunction()">
<!-- Firmenname -->
<div class="mb-4">
<label for="firma" class="form-label">Firmenname</label>
<div class="form-text mb-2">* kann als Platzhalter verwendet werden</div>
<input type="text" id="firma" name="firma" class="form-control" placeholder="z.B. Silias*">
</div>
</div><br><br>
<!-- Kanton -->
<div class="mb-4">
<label class="form-label">Kanton</label>
<div class="alert alert-warning py-2 mb-2" role="alert" style="font-size: .95rem;">
Die Kantonsauswahl wird vom Export ignoriert und dient nur zum Filtern der Ortschaften.
Für Export nach Kanton: gewünschte Kantone wählen und dann bei Ortschaften auf
<b>Alle Ergebnisse auswählen</b> klicken.
</div>
<div id="kantonauswahl" class="scrollWindow" onclick="filterFunction()"></div>
</div>
<label for="sitz">Sitz (Ort):</label><br>
<div class="dropdown">
<div id="gemeindeDropdown" class="dropdown-content">
<table style="width: 100%">
<td>
<input type="text" placeholder="suchen (Ort)" id="sitzInput" onkeyup="filterFunction()" onchange="filterFunction()" name="sitzfilter" autocomplete="off">
</td>
<td>
<button type="button" class="button-small" onclick="gefundeneGemeindenAuswählen()">Alle Ergebnise auswählen</button>
<button type="button" class="button-small" onclick="ausgewählteGemeindenLöschen()">Auswahl löschen</button>
<button type="button" class="button-small" onclick="alleGemeindenAnzeigen()">Alle anzeigen</button>
<button type="button" class="button-small" onclick="nurAusgewählteGemeindenAnzeigen()">Nur ausgewählte anzeigen</button>
</td>
</table>
<script>
function alleGemeindenAnzeigen() {
sitzInput.value = ""
filterFunction()
}
function nurAusgewählteGemeindenAnzeigen() {
sitzInput.value = "(nur ausgewählte)"
filterFunction()
}
function ausgewählteGemeindenLöschen() {
sitzauswahl.querySelectorAll('input[type="checkbox"]').forEach(function(checkbox) {
checkbox.checked = false;
})
filterFunction()
}
function gefundeneGemeindenAuswählen() { // TODO diese Funktion aufrufen wenn keine Gemeinde ausgewählt und gesucht wird.
sitzauswahl.querySelectorAll('input[type="checkbox"]').forEach(function(checkbox) {
if(checkbox.parentNode.parentNode.style.display !== "none")
checkbox.checked = true;
})
filterFunction()
}
</script>
<div id="sitzauswahl" class="scrollWindow">
</div>
<!-- Sitz / Ort -->
<div class="mb-4">
<label class="form-label">Sitz (Ort)</label>
<div class="card border-0 bg-white">
<div class="card-body p-0">
<div class="d-flex flex-column flex-lg-row gap-2 mb-2">
<div class="flex-grow-1">
<input type="text"
placeholder="Suchen (Ort)"
id="sitzInput"
onkeyup="filterFunction()"
onchange="filterFunction()"
name="sitzfilter"
autocomplete="off">
</div>
</div><br><br><br><br>
<div class="d-flex flex-wrap gap-2">
<button type="button" class="btn btn-outline-primary button-small" onclick="gefundeneGemeindenAuswählen()">
Alle Ergebnisse auswählen
</button>
<button type="button" class="btn btn-outline-secondary button-small" onclick="ausgewählteGemeindenLöschen()">
Auswahl löschen
</button>
<button type="button" class="btn btn-outline-secondary button-small" onclick="alleGemeindenAnzeigen()">
Alle anzeigen
</button>
<button type="button" class="btn btn-outline-secondary button-small" onclick="nurAusgewählteGemeindenAnzeigen()">
Nur ausgewählte
</button>
</div>
</div>
<label for="rechtsform">Rechtsform:</label><br>
<div id = "rechtsformenauswahl" class="scrollWindow">
<div id="sitzauswahl" class="scrollWindow"></div>
</div>
<br><br>
</div>
</div>
<input type="checkbox" id="exakteSuche" name="exakteSuche" disabled>
<label for="exakteSuche">Exakte Suche (noch in Entwicklung)</label><br>
<!-- Rechtsform -->
<div class="mb-4">
<label class="form-label">Rechtsform</label>
<div id="rechtsformenauswahl" class="scrollWindow"></div>
</div>
<input type="checkbox" id="geloeschteRechtseinheiten" name="geloeschteRechtseinheiten">
<label for="geloeschteRechtseinheiten">Gelöschte Rechtseinheiten suchen</label><br>
<!-- Optionen -->
<div class="mb-4">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="exakteSuche" name="exakteSuche" disabled>
<label class="form-check-label" for="exakteSuche">Exakte Suche (noch in Entwicklung)</label>
</div>
<input type="checkbox" id="inBisherigenFirmen" name="inBisherigenFirmen" disabled>
<label for="inBisherigenFirmen">In bisherigen Firmen/Namen suchen (noch in Entwicklung)</label><br>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="geloeschteRechtseinheiten" name="geloeschteRechtseinheiten">
<label class="form-check-label" for="geloeschteRechtseinheiten">Gelöschte Rechtseinheiten suchen</label>
</div>
<input type="checkbox" id="phonetischeSuche" name="phonetischeSuche" disabled>
<label for="phonetischeSuche">Phonetische Suche (noch in Entwicklung)</label><br><br>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="inBisherigenFirmen" name="inBisherigenFirmen" disabled>
<label class="form-check-label" for="inBisherigenFirmen">In bisherigen Firmen/Namen suchen (noch in Entwicklung)</label>
</div>
<label for="email">Ihre E-Mail Adresse:</label>
<p>Das aufbereiten der Daten kann lange dauern. Sie erhalten einen Download-Link per E-Mail sobald die Daten bereit sind.</p>
<input type="email" id="email" name="email" required><br><br>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="phonetischeSuche" name="phonetischeSuche" disabled>
<label class="form-check-label" for="phonetischeSuche">Phonetische Suche (noch in Entwicklung)</label>
</div>
</div>
<input type="submit" value="Export starten">
</form>
<!-- Email -->
<div class="mb-4">
<label for="email" class="form-label">Ihre E-Mail Adresse</label>
<div class="form-text mb-2">
Das Aufbereiten der Daten kann länger dauern. Sie erhalten einen Download-Link per E-Mail sobald die Daten bereit sind.
</div>
<input type="email" id="email" name="email" class="form-control" required placeholder="name@firma.ch">
<div class="invalid-feedback">Bitte eine gültige E-Mail Adresse eingeben.</div>
</div>
<script>
<div class="d-grid">
<button type="submit" class="btn btn-primary btn-lg">Export starten</button>
</div>
</form>
// Parse CSV-Daten und fülle das Dropdown-Feld
<script>
// Bootstrap validation (optional)
(function () {
'use strict'
const forms = document.querySelectorAll('.needs-validation')
Array.prototype.slice.call(forms).forEach(function (form) {
form.addEventListener('submit', function (event) {
if (!form.checkValidity()) {
event.preventDefault()
event.stopPropagation()
}
form.classList.add('was-validated')
}, false)
})
})();
</script>
<script>
// CSV data injected by PHP
let communityCsvData;
let legalFormsCsvData;
<?php
include 'gemeinden.php';
include 'legalForms.php';
?>
let communityCsvData;
let legalFormsCsvData;
<?php
include 'gemeinden.php';
include 'legalForms.php';
?>
// --- Helpers to create nicer checkbox rows (Bootstrap form-check) ---
function addCheckboxRow(container, checkboxName, checkboxValue, labelText) {
const wrapper = document.createElement('div');
wrapper.className = "form-check";
const input = document.createElement('input');
input.className = "form-check-input";
input.type = "checkbox";
input.name = checkboxName;
input.value = checkboxValue;
const legalFormslines = legalFormsCsvData.trim().split('\n');
const legalFormsheaders = legalFormslines[0].split(',');
const legalformIdIndex = legalFormsheaders.indexOf('id');
const legalformNameIndex = legalFormsheaders.indexOf('name');
for (let i = 1; i < legalFormslines.length; i++) {
const cells = legalFormslines[i].split(',');
const id = cells[legalformIdIndex].trim();
const name = cells[legalformNameIndex].trim();
const label = document.createElement('label');
const rechtsformenauswahl = document.getElementById("rechtsformenauswahl")
rechtsformenauswahl.appendChild(label);
const input = document.createElement('input');
input.type = "checkbox";
input.name = "rechtsformen[]";
input.value = id;
label.textContent = " " + name;
label.style.marginBottom = '0';
label.prepend(input);
rechtsformenauswahl.appendChild(document.createElement("br"))
const label = document.createElement('label');
label.className = "form-check-label";
label.textContent = labelText;
wrapper.appendChild(input);
wrapper.appendChild(label);
container.appendChild(wrapper);
return input;
}
// --- Legal forms ---
const legalFormslines = legalFormsCsvData.trim().split('\n');
const legalFormsheaders = legalFormslines[0].split(',');
const legalformIdIndex = legalFormsheaders.indexOf('id');
const legalformNameIndex = legalFormsheaders.indexOf('name');
const rechtsformenauswahl = document.getElementById("rechtsformenauswahl");
for (let i = 1; i < legalFormslines.length; i++) {
const cells = legalFormslines[i].split(',');
const id = (cells[legalformIdIndex] || '').trim();
const name = (cells[legalformNameIndex] || '').trim();
if (!id || !name) continue;
addCheckboxRow(rechtsformenauswahl, "rechtsformen[]", id, " " + name);
}
// --- Communities + Cantons ---
const lines = communityCsvData.trim().split('\n');
const headers = lines[0].split(',');
const gemeindeNameIndex = headers.indexOf('Gemeindename');
const bfsIdIndex = headers.indexOf('id');
const kantonIndex = headers.indexOf('Kanton');
const registryOfCommerceIdIndex = headers.indexOf('registryOfCommerceId');
const sitze = [];
const kantone = [];
const kantonauswahl = document.getElementById("kantonauswahl");
const sitzauswahl = document.getElementById("sitzauswahl");
for (let i = 1; i < lines.length; i++) {
const cells = lines[i].split(',');
if (!cells || cells.length < 4) continue;
const bfsId = (cells[bfsIdIndex] || '').trim();
const gemeindeName = (cells[gemeindeNameIndex] || '').trim();
const kanton = (cells[kantonIndex] || '').trim();
const registryOfCommerceId = (cells[registryOfCommerceIdIndex] || '').trim();
if (!bfsId || !gemeindeName) continue;
// Add canton if new
if (kanton && !kantone.includes(kanton)) {
kantone.push(kanton);
addCheckboxRow(kantonauswahl, "kantone[]", kanton, " " + kanton);
}
// Store row for filtering logic
sitze.push(cells);
// Create nicer entry
const gemeindeEintrag = document.createElement("div");
gemeindeEintrag.classList.add("gemeindeeintrag");
const wrapper = document.createElement('div');
wrapper.className = "form-check";
const input = document.createElement('input');
input.className = "form-check-input";
input.type = "checkbox";
input.name = "sitze[]";
input.value = bfsId;
const label = document.createElement('label');
label.className = "form-check-label";
label.textContent = " " + gemeindeName;
wrapper.appendChild(input);
wrapper.appendChild(label);
gemeindeEintrag.appendChild(wrapper);
sitzauswahl.appendChild(gemeindeEintrag);
}
const sitzInput = document.getElementById('sitzInput');
function kantoneAusgewählt() {
const checkboxes = document.querySelectorAll('input[name="kantone[]"]');
let countChecked = 0;
for (let i = 0; i < checkboxes.length; i++) {
if (checkboxes[i].checked) countChecked++;
}
return countChecked;
}
function filterFunction() {
const numKantoneAusgewählt = kantoneAusgewählt();
const filter = (sitzInput.value || "").toUpperCase();
const entries = sitzauswahl.getElementsByClassName("gemeindeeintrag");
for (let i = 0; i < entries.length; i++) {
const txtValue = entries[i].textContent || entries[i].innerText;
const selectedCheckbox = entries[i].querySelector('input[type="checkbox"]');
const isSelected = selectedCheckbox ? selectedCheckbox.checked : false;
// map entry->sitz row index: still aligned because we push sitze once per entry
const row = sitze[i];
const rowKanton = row ? row[kantonIndex] : "";
let cantonOk = true;
if (numKantoneAusgewählt > 0 && rowKanton) {
const cantonBox = document.querySelector('input[name="kantone[]"][value="' + rowKanton + '"]');
cantonOk = cantonBox ? cantonBox.checked : false;
}
const matchesText = txtValue.toUpperCase().indexOf(filter) > -1;
const lines = communityCsvData.trim().split('\n');
const headers = lines[0].split(',');
const gemeindeNameIndex = headers.indexOf('Gemeindename');
const bfsIdIndex = headers.indexOf('id');
const kantonIndex = headers.indexOf('Kanton');
const registryOfCommerceIdIndex = headers.indexOf('registryOfCommerceId');
const sitze = [];
const kantone = []
for (let i = 1; i < lines.length; i++) {
const cells = lines[i].split(',');
const bfsId = cells[bfsIdIndex].trim();
const gemeindeName = cells[gemeindeNameIndex].trim();
const kanton = cells[kantonIndex].trim();
const registryOfCommerceId = cells[registryOfCommerceIdIndex].trim();
// Falls Kanton noch nicht vorhanden -> hinzufügen
if (!kantone.includes(kanton)) {
kantone.push(kanton)
const label = document.createElement('label');
const kantonsauswahl = document.getElementById("kantonauswahl")
kantonsauswahl.appendChild(label);
const input = document.createElement('input');
input.type = "checkbox";
input.name = "kantone[]";
input.value = kanton;
label.textContent = " " + kanton;
label.style.marginBottom = '0';
label.prepend(input);
kantonsauswahl.appendChild(document.createElement("br"))
}
// Sitz hinzufügen
sitze.push(cells)
const sitzString = gemeindeName
const gemeindeEintrag = document.createElement("div");
gemeindeEintrag.classList.add("gemeindeeintrag");
const label = document.createElement('label');
const sitzauswahl = document.getElementById("sitzauswahl")
sitzauswahl.appendChild(gemeindeEintrag);
gemeindeEintrag.appendChild(label);
const input = document.createElement('input');
input.type = "checkbox";
input.name = "sitze[]";
input.value = bfsId;
label.textContent = " " + sitzString;
label.style.marginBottom = '0';
label.prepend(input);
gemeindeEintrag.appendChild(document.createElement("br"))
if ((matchesText && (cantonOk || numKantoneAusgewählt === 0)) || isSelected) {
entries[i].style.display = "";
} else {
entries[i].style.display = "none";
}
}
}
function filterFunction() {
const numKantoneAusgewählt = kantoneAusgewählt()
var input, filter, ul, li, a, i;
input = document.getElementById("sitzInput");
filter = input.value.toUpperCase();
div = document.getElementById("gemeindeDropdown");
a = div.getElementsByClassName("gemeindeeintrag");
for (i = 0; i < a.length; i++) {
txtValue = a[i].textContent || a[i].innerText;
if ((txtValue.toUpperCase().indexOf(filter) > -1 && (document.querySelector('input[name="kantone[]"][value=' + sitze[i][kantonIndex] + ']').checked || numKantoneAusgewählt === 0) ) || a[i].firstElementChild.firstElementChild.checked) {
a[i].style.display = "";
} else {
a[i].style.display = "none";
}
}
}
function alleGemeindenAnzeigen() {
sitzInput.value = "";
filterFunction();
}
function kantoneAusgewählt() {
const checkboxes = document.querySelectorAll('input[name="kantone[]"]');
let countChecked = 0;
function nurAusgewählteGemeindenAnzeigen() {
sitzInput.value = "(nur ausgewählte)";
filterFunction();
}
for (var i = 0; i < checkboxes.length; i++) {
if (checkboxes[i].checked) {
countChecked = countChecked + 1;
}
}
return countChecked;
}
function ausgewählteGemeindenLöschen() {
sitzauswahl.querySelectorAll('input[type="checkbox"]').forEach(function(cb) {
cb.checked = false;
});
filterFunction();
}
const sitzInput = document.getElementById('sitzInput');
const sitzauswahl = document.getElementById('sitzauswahl');
const gemeindedropdown = document.getElementById('gemeindeDropdown');
sitzauswahl.style.display = 'block';
gemeindedropdown.addEventListener('focusin', () => {
console.log("focusin")
sitzauswahl.style.display = 'block';
});
</script>
function gefundeneGemeindenAuswählen() {
sitzauswahl.querySelectorAll('input[type="checkbox"]').forEach(function(cb) {
// show/hide is on the gemeindeeintrag wrapper
const entry = cb.closest('.gemeindeeintrag');
if (entry && entry.style.display !== "none") cb.checked = true;
});
filterFunction();
}
</script>
</div>
</div>
</section>
<div class="push"></div>
</div>
<footer class="text-center">
<div class="container footer">
<div class="row">
<table>
<tr>
<td class="footer">
<div class="col-12">
<p><span><b>Impressum</b></span><br>
Silias KLG<br>
Toggenburgstrasse 31<br>
8245 Feuerthalen<br>
<a href="https://www.silias.ch" target="_blank">www.silias.ch</a><br>
<a href="mailto:info@silias.ch">info@silias.ch</a><br>
<a href="https://gitea.silias.ch/Silias-Public/Zefix_search">Projekt Repository</a>
</div>
</td>
<td class="footer">
<div class="col-12">
<p><span><b>Datenquelle</b></span><br>
Zentraler Firmenindex<br>
Eidgenössisches Justiz- und Polizeidepartement (EJPD)<br>
Bundesamt für Justiz (BJ)<br>
Eidgenössisches Amt für das Handelsregister (EHRA)<br>
Bundesrain 20<br>
3003 Bern<br>
<a href="https://www.zefix.admin.ch" target="_blank">www.zefix.admin.ch</a><br>
<a href="tel:+41584624197">+41 (0) 58 462 41 97</a><br>
<a href="zefix@bj.admin.ch">zefix@bj.admin.ch</a>
</p>
</div>
</td>
<td class="footer">
<div class="col-12">
<p>
<script>
const deleteFiles = function (){
let taskDeletePassword = prompt("Passwort eingeben:")
let formdata = new FormData()
formdata.append('taskDeletePassword', taskDeletePassword)
fetch("deleteFiles.php", {
method: "POST",
body: formdata,
});
location.reload();
}
</script>
Momentan sind <?php $taskDir = 'tasks'; echo count(scandir($taskDir)) - 2 ?> Aufträge in der Warteliste.<br>
<a href="#" onclick="deleteFiles()">alle löschen</a>
</p>
</div>
</td>
</tr>
</table>
</div>
</div>
</div>
</main>
<footer class="border-top bg-white">
<div class="container py-4">
<div class="row g-4">
<div class="col-md-4">
<h2 class="h6 mb-2">Impressum</h2>
<div class="text-muted" style="font-size:.95rem;">
Silias KLG<br>
Toggenburgstrasse 31<br>
8245 Feuerthalen<br>
<a href="https://www.silias.ch" target="_blank" rel="noopener">www.silias.ch</a><br>
<a href="mailto:info@silias.ch">info@silias.ch</a><br>
<a href="https://gitea.silias.ch/Silias-Public/Zefix_search">Projekt Repository</a>
</div>
</div>
<div class="col-md-4">
<h2 class="h6 mb-2">Datenquelle</h2>
<div class="text-muted" style="font-size:.95rem;">
Zentraler Firmenindex<br>
Eidgenössisches Justiz- und Polizeidepartement (EJPD)<br>
Bundesamt für Justiz (BJ)<br>
Eidgenössisches Amt für das Handelsregister (EHRA)<br>
Bundesrain 20, 3003 Bern<br>
<a href="https://www.zefix.admin.ch" target="_blank" rel="noopener">www.zefix.admin.ch</a><br>
<a href="tel:+41584624197">+41 (0) 58 462 41 97</a><br>
<a href="mailto:zefix@bj.admin.ch">zefix@bj.admin.ch</a>
</div>
</div>
<div class="col-md-4">
<h2 class="h6 mb-2">Warteliste</h2>
<div class="text-muted" style="font-size:.95rem;">
<script>
const deleteFiles = function () {
let taskDeletePassword = prompt("Passwort eingeben:");
if (taskDeletePassword === null) return;
let formdata = new FormData();
formdata.append('taskDeletePassword', taskDeletePassword);
fetch("deleteFiles.php", { method: "POST", body: formdata })
.then(() => location.reload());
}
</script>
Momentan sind
<b><?php $taskDir = 'tasks'; echo count(scandir($taskDir)) - 2 ?></b>
Aufträge in der Warteliste.<br>
<a href="#" onclick="deleteFiles(); return false;">alle löschen</a>
</div>
</div>
</div>
<div class="text-center text-muted mt-4" style="font-size:.9rem;">
© <?php echo date('Y'); ?> Silias KLG
</div>
</div>
</footer>
</body>
</html>
</html>