diff --git a/modules/pi_control/bootstrap.php b/modules/pi_control/bootstrap.php index 127b161..abb9804 100644 --- a/modules/pi_control/bootstrap.php +++ b/modules/pi_control/bootstrap.php @@ -101,4 +101,48 @@ $mm->registerFunction($moduleName, 'ensure_schema', function () use ($moduleName created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP )"); } + + // Seed default commands (only when empty) + $count = (int)$pdo->query('SELECT COUNT(*) FROM ' . $cmdTable)->fetchColumn(); + if ($count === 0) { + $defaults = [ + ['Speicherplatz auf Dateisystem', 'df -T -h', false], + ['Netzwerkdaten', 'ip -s addr show', false], + ['CPU-Information', 'cat /proc/cpuinfo', false], + ['Informationen über USB-Bus', 'lsusb', false], + ['Uptime', 'uptime -p', false], + ['Scannen Sie einen I2C-Bus nach Geräten', '/usr/sbin/i2cdetect -y 1', true], + ['Prozesse (Gib zum Beenden \"q\" ein)', 'top', false], + ['SSH status', 'systemctl status ssh', false], + ['Konfigurationsprogramm in Raspberry OS', 'sudo raspi-config', true], + ['Pinbelegung', 'pinout', false], + ['Exportiere GPIO (Für Nutzung vorbereiten)', 'echo 22 > /sys/class/gpio/export', true], + ['Lese GPIO-Wert', 'echo in > /sys/class/gpio/gpio22/direction && cat /sys/class/gpio/gpio22/value', true], + ['Schreibe \"Low\" GPIO Wert', 'echo out > /sys/class/gpio/gpio22/direction && echo 0 > /sys/class/gpio/gpio22/value', true], + ['Schreibe \"High\" GPIO Wert', 'echo out > /sys/class/gpio/gpio22/direction && echo 1 > /sys/class/gpio/gpio22/value', true], + ['Export entfernen (Ressource freigeben)', 'echo 22 > /sys/class/gpio/unexport', true], + ['Alternative Funktionen von GPIO', 'raspi-gpio funcs', false], + ['Gerät herunterfahren', 'sudo systemctl poweroff', true], + ['Gerät neu starten', 'sudo systemctl reboot', true], + ['Aktualisiere die Betriebssystem-Pakete', 'sudo apt update && sudo apt full-upgrade', true], + ['Befehle, die zuvor ausgeführt wurden (Quellsprache)', 'history 30', false], + ['Liste der zuletzt angemeldeten Nutzer', 'last -30 -F', false], + ['Liste der aktuell angemeldeten Nutzer', 'w', false], + ['Aktualisierung', 'sudo apt update && sudo apt upgrade -y && sudo apt-get autoremove --purge && sudo apt-get clean && sudo rm -rf /var/lib/apt/lists/* && sudo apt-get update && sudo apt-get remove texlive-*-doc', true], + ['Update OS', 'sudo apt update && sudo apt full-upgrade -y && sudo apt-get autoremove --purge && sudo apt-get clean && sudo rm -rf /var/lib/apt/lists/* && sudo apt-get update && sudo apt-get remove texlive-*-doc', true], + ['Paketlisten laden', 'sudo apt-get update; sudo apt-get dist-upgrade -y;exit', true], + ['Gerät herunterfahren', 'sudo /sbin/shutdown -h now', true], + ['Gerät neu starten', 'sudo /sbin/reboot', true], + ]; + + $stmt = $pdo->prepare( + 'INSERT INTO ' . $cmdTable . ' (label, command, admin_only) VALUES (:label, :command, :admin_only)' + ); + foreach ($defaults as [$label, $command, $adminOnly]) { + $stmt->bindValue(':label', $label, PDO::PARAM_STR); + $stmt->bindValue(':command', $command, PDO::PARAM_STR); + $stmt->bindValue(':admin_only', (bool)$adminOnly, PDO::PARAM_BOOL); + $stmt->execute(); + } + } }); diff --git a/public/assets/css/app.css b/public/assets/css/app.css index 94e978d..9d423a7 100644 --- a/public/assets/css/app.css +++ b/public/assets/css/app.css @@ -141,6 +141,7 @@ body { box-shadow: var(--shadow); border-radius: 18px; } +.module-subnav.card { background: var(--panel); } .layout-body { display: grid; @@ -148,6 +149,7 @@ body { gap: 16px; padding: 6px 24px 24px; transition: grid-template-columns 260ms ease; + position: relative; } .layout-body.sidebar-open { grid-template-columns: 260px 1fr; @@ -166,6 +168,18 @@ body { pointer-events: none; transition: transform 260ms ease, opacity 260ms ease; } +.layout-body.sidebar-collapsed .sidebar { + position: absolute; + top: 0; + left: 0; + width: 240px; + max-height: 0; + padding: 0; + margin: 0; + border: 0; + box-shadow: none; + overflow: hidden; +} .layout-body.sidebar-open .sidebar { transform: translateX(0); opacity: 1;