Files
t2000-steckerpruefer/pagecontent/program-editor.php
2026-01-02 20:52:43 +01:00

231 lines
8.7 KiB
PHP
Executable File

<?php
// Diese Seite lädt alle (Unter)Seiten des Programmeditors
session_start();
$db = new SQLite3('../db-test/test.db');
$view = $_GET["view"];
$meta = $_GET["meta"];
$_SESSION["meta"]=$meta;
$plug = json_decode(file_get_contents("../settings.json"), true)["plug"];
switch($view) {
default: // Standardseite (Übersicht)
?>
<div class="content-header">Programm-Editor - Übersicht</div>
<div class="action-menu">
<img src="/vendor/icons/plus.svg" onclick="window.location.href='#program-editor'; pageload('add');" />
</div>
<div class="plug-table">
<?php
// Hole die Programme aus der Datenbank
$result = $db->query("SELECT * FROM programs WHERE plug_id = '" . $plug . "';");
while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
$results = true;
?>
<div class="row">
<?php
print('
<div class="label" style="width: 30%">
<span>');
// Stelle die einzelnen Programmziffern dar
$program_identifiers = $db->query("SELECT * FROM program_id_bits WHERE program_id = '" . $row['id'] . "';");
while ($program_identifier = $program_identifiers->fetchArray(SQLITE3_ASSOC)) {
echo '<span class="label-char">' . $program_identifier["value"] . '</span>';
}
print('
</span>
</div>');
// Die erforderlichen Brücken werden aus der Datenbank geholt (via program_bridge_relation)
$bridges_url = [];
$bridges = $db->query("SELECT * FROM program_bridge_relation WHERE program_id = '" . $row['id'] . "';");
while ($bridge = $bridges->fetchArray(SQLITE3_ASSOC)) {
$bridges_url[] = $bridge["bridge_id"];
}
$url = '../stecker.php?translate=true&data=' . urlencode(json_encode($bridges_url)); // URL parsen; Modus: Programmanzeige
print('<img id="bridge-editor-img" style="width: 55%" src="' . $url . '" />');
// Aktionsmenü (mit hässlichem Inline-Code)
print('
<div class="options">
<img src="/vendor/icons/edit-pencil.svg" onclick="window.location.href=\'#program-editor\'; pageload(\'edit\',\'' . $row['id'] . '\');"/>
<img src="/vendor/icons/trash.svg"onclick="
if(confirm(\'Sicher? Diese Änderung kann nicht rückgängig gemacht werden! (Die darin enthaltenen Brücken bleiben erhalten und werden nicht gelöscht )\') == true){
save(\'program-editor\',\'remove\',\'' . $row['id'] . '\')
}" />
</div>
');
?>
</div>
<?php
}
?>
</div>
<?php
// Wenn Ergebnisliste leer
if($results != true) {
print("<p align='center'>Es sind keine Programme für diesen Stecker gespeichert.<br>Eventuell muss ein anderer Stecker gewählt werden.</p>");
}
break;
// Neues Hinzufügen eines Programms
case "add":
$meta = json_decode(urldecode($meta), true);
?>
<div class="content-header">Programm-Editor - Neu anlegen</div>
<img id="program-editor-img" src="../stecker.php" />
<hr />
<p>Zugehörige Brücken</p>
<i>Wählen Sie die Brücken, welche von diesem Programm gefordert werden</i>
<div class="program-field">
<?php
//zählen der Ergebnisse
$result = $db->query("SELECT COUNT(*) as anzahl FROM bridges WHERE plug_id = '" . $plug . "';");
$row = $result->fetchArray(SQLITE3_ASSOC);
$results_full = $row['anzahl'];
$count = 0;
// Holen der Ergebnisse
$result = $db->query("SELECT * FROM bridges WHERE plug_id = '" . $plug . "';");
// Zeigt ein horizonales Auswhl-Menü an, das alle Brücken als auswahl bietet
while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
?>
<label class="checkbox-container">
<input onchange="programBridge(<?php echo $results_full; ?>)" type="checkbox" id="programSelect_<?php echo $count; ?>" value="<?php echo $row['id']; ?>">
<span class="checkbox-text">
<?php echo $row['id']; ?>
</span>
</label>
<?php
$count++;
}
?>
</div>
<hr />
<p>Name für dieses Programm</p>
<i>
Hinweis: Der Name kann aus Sicherheitsgründen im Nachhinein nicht mehr geändert werden. Bei dieser Stellwerksart ist die ID fünfstellig<br>Ein '-' kennzeichnet ein "Don't-Care". Darüber hinaus sind nur Großbuchstaben und Zahlen zugelassen
</i>
<div class="distinctly-input">
<input oninput="distinctlyInput(1)" type="text" maxlength="1" class="code-input" id="distinctlyInput1">
<input oninput="distinctlyInput(2)" type="text" maxlength="1" class="code-input" id="distinctlyInput2">
<input oninput="distinctlyInput(3)" type="text" maxlength="1" class="code-input" id="distinctlyInput3">
<input oninput="distinctlyInput(4)" type="text" maxlength="1" class="code-input" id="distinctlyInput4">
<input oninput="distinctlyInput(5)" type="text" maxlength="1" class="code-input" id="distinctlyInput5">
</div>
<hr />
<p>Beschreibung für dieses Programm</p>
<textarea id="program-description" placeholder="Wählen Sie eine möglichst präzise Beschreibung. Zum Beispiel: 'Relaisgruppe für eine nicht isolierte Weiche, die eine einfache Kreuzungsweiche mit Bogenfahrt über den Plusstrang ist'"></textarea>
<hr />
<div class="save-button" onclick="save('program-editor','add',<?php echo $results_full; ?>)"><img src="/vendor/icons/floppy-disk.svg" \>Speichern</div>
<?php
break;
case "edit":
$meta = json_decode(urldecode($meta), true);
?>
<div class="content-header">Programm-Editor - Bearbeiten</div>
<?php
$bridges_url = [];
$bridges = $db->query("SELECT * FROM program_bridge_relation WHERE program_id = '" . $meta . "';");
while ($bridge = $bridges->fetchArray(SQLITE3_ASSOC)) {
$bridges_url[] = $bridge["bridge_id"];
}
$url = '../stecker.php?translate=true&data=' . urlencode(json_encode($bridges_url)); // URL parsen
print('<img id="program-editor-img" src="../stecker.php?translate=true&data=' . $url . '" />');
?>
<hr />
<p>Zugehörige Brücken</p>
<i>Wählen Sie die Brücken, welche von diesem Programm gefordert werden</i>
<div class="program-field">
<?php
// Hole Anzahl der Brücken aus der DB
$number_bridges = $db->query("SELECT COUNT(*) as anzahl FROM bridges WHERE plug_id = '" . $plug . "';");
$number_bridges = $number_bridges->fetchArray(SQLITE3_ASSOC);
$number_bridges = $number_bridges['anzahl'];
$number_joined = 0;
// Hole zunächst ALLE Brücken aus der DB
$bridges = $db->query("SELECT * FROM bridges WHERE plug_id = '" . $plug . "';");
while ($bridge = $bridges->fetchArray(SQLITE3_ASSOC)) {
// schaue nun, ob diese Brücke Teil des Programms ist
$bridges_contained = $db->query("SELECT COUNT(*) as anzahl FROM program_bridge_relation WHERE plug_id = '" . $plug . "' and bridge_id = '" . $bridge["id"] . "' and program_id = '" . $meta . "';");
$row = $bridges_contained->fetchArray(SQLITE3_ASSOC);
$number = $row['anzahl'];
// Die Anzahl gibt Aufschlus darüber, ob Brücke von Programm gefordert ist -> wenn schon vorhanden, markiere diese Brücke schon vor ("checked"-Attribut)
?>
<label class="checkbox-container">
<input onchange="programBridge(<?php echo $number_bridges; ?>)" type="checkbox" <?php if($number > 0) { echo "checked"; } ?> id="programSelect_<?php echo $number_joined; ?>" value="<?php echo $bridge["id"]; ?>">
<span class="checkbox-text">
<?php echo $bridge["id"]; ?>
</span>
</label>
<?php
$number_joined++;
}
?>
</div>
<hr />
<p>Name für dieses Programm</p>
<i>Darf auf Sicherheitsgründen nicht mehr geändert werden</i>
<div class="distinctly-input">
<?php
// Hole die ganzen Programmbezeichner raus aus der DB
$program_identifiers = $db->query("SELECT * FROM program_id_bits WHERE program_id = '" . $meta . "' ORDER BY position;");
while ($program_identifier = $program_identifiers->fetchArray(SQLITE3_ASSOC)) {
echo '<input type="text" maxlength="1" value="' . $program_identifier["value"] . '" disabled class="code-input">';
}
// Vorausgefüllte Programmbezeichnung
$description = ($row = $db->querySingle("SELECT program_description FROM programs WHERE id = '$meta' and plug_id = '$plug'", true)) ? $row['program_description'] : null;
?>
</div>
<hr />
<p>Beschreibung für dieses Programm</p>
<textarea id="program-description" value="Value" placeholder="Wählen Sie eine möglichst präzise Beschreibung. Zum Beispiel: 'Relaisgruppe für eine nicht isolierte Weiche, die eine einfache Kreuzungsweiche mit Bogenfahrt über den Plusstrang ist'"><?php echo $description; ?></textarea>
<hr />
<div class="save-button" onclick="save('program-editor','edit',<?php echo $number_bridges; ?>)"><img src="/vendor/icons/floppy-disk.svg" \>Speichern</div>
<?php
break;
}