| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360 |
- <?php
- session_start();
- // Config lade
- $config = include(__DIR__ . '/../../config.php');
- // WebsiteID us der URL oder session hole
- $websiteId = isset($_GET['websiteId']) ? (int)$_GET['websiteId'] : (isset($_SESSION['websiteId']) ? (int)$_SESSION['websiteId'] : 1);
- $_SESSION['websiteId'] = $websiteId;
- // Website config ider config finde
- $websiteConfig = array_filter($config, function($site) use ($websiteId) {
- return isset($site['id']) && $site['id'] === $websiteId;
- });
- $websiteConfig = reset($websiteConfig);
- // Sqlite datenbank ahfigge
- $db = new SQLite3($websiteConfig['database']);
- // Backup erstelle oder ganzi datehbank lôsche *evil laugh* 😈 jk mer propbieret sehr schlecht IDs wieder sekuentiel zmache
- if (isset($_POST['backup']) || isset($_POST['delete_row']) || isset($_POST['reassign_ids'])) {
- $source = $websiteConfig['database'];
- $backupDir = __DIR__ . '/../../' . $websiteConfig['backup_folder'];
- $timestamp = date('Y-m-d-H-i-s');
- $destination = $backupDir . '/' . $timestamp . '.db';
- // machen das backup directory wenns nid git
- if (!is_dir($backupDir)) {
- mkdir($backupDir, 0755, true);
- }
- // omg file deht ineh kopiere 😱
- if (copy($source, $destination)) {
- $backupMessage = "Database backup created successfully: " . htmlspecialchars($destination);
- } else {
- $backupMessage = "Failed to create database backup.";
- }
- }
- $selectedTable = $_POST['table'] ?? $_SESSION['selectedTable'] ?? '';
- $columns = [];
- $rows = [];
- $sortOrder = $_GET['sortOrder'] ?? 'ASC';
- $tablesResult = $db->query("SELECT name FROM sqlite_master WHERE type='table' AND name != 'sqlite_sequence'");
- $tables = [];
- while ($row = $tablesResult->fetchArray(SQLITE3_ASSOC)) {
- $tables[] = $row['name'];
- }
- if ($selectedTable && in_array($selectedTable, $tables)) {
- $_SESSION['selectedTable'] = $selectedTable;
- $columnsResult = $db->query("PRAGMA table_info($selectedTable)");
- while ($row = $columnsResult->fetchArray(SQLITE3_ASSOC)) {
- $columns[] = $row['name'];
- }
- if ($selectedTable == 'content' && in_array('date', $columns)) {
- $orderBy = "ORDER BY date DESC"; // das hier machen default sorting nach datum und ziiht de neuschti row zerscht will susch isch das unmanagebar
- } else {
- $orderBy = in_array('date', $columns) ? "ORDER BY date $sortOrder" : "ORDER BY id ASC";
- }
- $rowsResult = $db->query("SELECT * FROM $selectedTable $orderBy");
- while ($row = $rowsResult->fetchArray(SQLITE3_ASSOC)) {
- $rows[] = $row;
- }
- } else {
- $selectedTable = '';
- $_SESSION['selectedTable'] = '';
- }
- if (isset($_POST['edit_row'])) {
- header("Location: edit_row.php?table=$selectedTable&id=" . $_POST['id']);
- exit();
- }
- if (isset($_POST['delete_row'])) {
- $idsToDelete = $_POST['ids'] ?? [];
- foreach ($idsToDelete as $id) {
- $stmt = $db->prepare("DELETE FROM $selectedTable WHERE id = :id");
- $stmt->bindValue(':id', $id, SQLITE3_INTEGER);
- $stmt->execute();
- }
- $message = "Selected rows deleted successfully (most likely).";
- }
- if (isset($_POST['insert_row'])) {
- $values = $_POST['values'];
- $highestIdResult = $db->querySingle("SELECT MAX(id) as max_id FROM $selectedTable");
- $highestId = $highestIdResult ? $highestIdResult : 0;
- $values['id'] = $highestId + 1;
- if ($selectedTable == 'content') {
- if (empty($values['date'])) {
- $values['date'] = date('Y-m-d H:i:s');
- }
- }
- $columnsString = implode(", ", array_keys($values));
- $placeholders = implode(", ", array_fill(0, count($values), "?"));
- $stmt = $db->prepare("INSERT INTO $selectedTable ($columnsString) VALUES ($placeholders)");
- $index = 1;
- foreach ($values as $value) {
- $stmt->bindValue($index, $value ?: null, SQLITE3_TEXT);
- $index++;
- }
- $stmt->execute();
- $message = "Row inserted successfully. (maybe)";
- }
- if (isset($_POST['swap_row'])) {
- $id = $_POST['id'];
- $targetId = $_POST['target_id'];
- $db->exec("BEGIN TRANSACTION");
- $db->exec("UPDATE $selectedTable SET id = -1 WHERE id = $id");
- $db->exec("UPDATE $selectedTable SET id = $id WHERE id = $targetId");
- $db->exec("UPDATE $selectedTable SET id = $targetId WHERE id = -1");
- $db->exec("COMMIT");
- $message = "Row swapped successfully for sure.";
- }
- if (isset($_POST['push_row'])) {
- $id = $_POST['id'];
- $targetId = $_POST['target_id'];
- $tempTable = $selectedTable . '_temp';
- $db->exec("BEGIN TRANSACTION");
- $db->exec("CREATE TEMPORARY TABLE $tempTable AS SELECT * FROM $selectedTable");
- $db->exec("UPDATE $tempTable SET id = -1 WHERE id = $id");
- if ($id < $targetId) {
- $db->exec("UPDATE $tempTable SET id = id - 1 WHERE id > $id AND id <= $targetId");
- } else {
- $db->exec("UPDATE $tempTable SET id = id + 1 WHERE id < $id AND id >= $targetId");
- }
- $db->exec("UPDATE $tempTable SET id = $targetId WHERE id = -1");
- $db->exec("DELETE FROM $selectedTable");
- $db->exec("INSERT INTO $selectedTable SELECT * FROM $tempTable");
- $db->exec("DROP TABLE $tempTable");
- $db->exec("COMMIT");
- $message = "Row pushed successfully (perhaps).";
- }
- if (isset($_POST['reassign_ids'])) {
- $tempBackup = $backupDir . '/' . $timestamp . '_temp.db';
- copy($source, $tempBackup);
- try {
- $db->exec("BEGIN TRANSACTION");
- $tempTable = $selectedTable . '_temp';
- $db->exec("CREATE TEMPORARY TABLE $tempTable AS SELECT * FROM $selectedTable");
- $db->exec("DELETE FROM $selectedTable");
- if (in_array('date', $columns)) {
- $orderBy = "ORDER BY date ASC";
- } else {
- $orderBy = "ORDER BY id ASC";
- }
- $rowsResult = $db->query("SELECT * FROM $tempTable $orderBy");
- $newId = 1;
- while ($row = $rowsResult->fetchArray(SQLITE3_ASSOC)) {
- $row['id'] = $newId++;
- $columnsString = implode(", ", array_keys($row));
- $placeholders = implode(", ", array_fill(0, count($row), "?"));
- $stmt = $db->prepare("INSERT INTO $selectedTable ($columnsString) VALUES ($placeholders)");
- $index = 1;
- foreach ($row as $value) {
- $stmt->bindValue($index, $value ?: null, SQLITE3_TEXT);
- $index++;
- }
- $stmt->execute();
- }
- $db->exec("DROP TABLE $tempTable");
- $db->exec("COMMIT");
- $message = "IDs reassigned successfully.";
- } catch (Exception $e) {
- copy($tempBackup, $source);
- $message = "Failed to reassign IDs. Database restored from backup. (probably)";
- } finally {
- unlink($tempBackup);
- }
- }
- ?>
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Edit Database</title>
- </head>
- <body>
- <form method="post" action="../index.php">
- <button type="submit">Back to Admin Panel</button>
- </form>
- <h1>Edit Database</h1>
- <form method="get" action="edit_database.php">
- <label for="websiteId">Select Website:</label>
- <select name="websiteId" id="websiteId" onchange="this.form.submit()">
- <?php foreach ($config as $site): ?>
- <?php if (isset($site['id'])): ?>
- <option value="<?php echo $site['id']; ?>" <?php echo ($websiteId == $site['id']) ? 'selected' : ''; ?>>
- <?php echo htmlspecialchars($site['name']); ?>
- </option>
- <?php endif; ?>
- <?php endforeach; ?>
- </select>
- </form>
- <form method="post">
- <button type="submit" name="backup">Backup das Database</button>
- </form>
- <?php if (isset($backupMessage)): ?>
- <p><?php echo $backupMessage; ?></p>
- <?php endif; ?>
- <form method="post">
- <label for="table">Select das Table:</label>
- <select id="table" name="table" onchange="this.form.submit()">
- <option value="">-- Select a table --</option>
- <?php foreach ($tables as $table): ?>
- <option value="<?php echo htmlspecialchars($table); ?>" <?php echo ($selectedTable == $table) ? 'selected' : ''; ?>><?php echo htmlspecialchars($table); ?></option>
- <?php endforeach; ?>
- </select>
- </form>
- <form method="post">
- <button type="submit" name="refresh">Refresh</button>
- </form>
- <?php if ($selectedTable): ?>
- <h2>Editing Table: <?php echo htmlspecialchars($selectedTable); ?></h2>
- <?php if ($selectedTable == 'content'): ?>
- <form method="post">
- <input type="hidden" name="table" value="<?php echo htmlspecialchars($selectedTable); ?>">
- <table border="1">
- <thead>
- <tr>
- <th>Select</th>
- <?php foreach ($columns as $column): ?>
- <th>
- <?php echo htmlspecialchars($column); ?>
- <?php if ($column == 'date'): ?>
- <a href="?table=<?php echo htmlspecialchars($selectedTable); ?>&sortOrder=<?php echo $sortOrder == 'ASC' ? 'DESC' : 'ASC'; ?>">Sort by Date</a>
- <?php endif; ?>
- </th>
- <?php endforeach; ?>
- <th>Actions</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td></td>
- <?php foreach ($columns as $column): ?>
- <td>
- <?php if ($column == 'id'): ?>
- <input type="text" name="values[<?php echo htmlspecialchars($column); ?>]" disabled>
- <?php elseif ($column == 'date'): ?>
- <input type="text" name="values[<?php echo htmlspecialchars($column); ?>]" value="<?php echo date('Y-m-d H:i:s'); ?>" disabled>
- <?php else: ?>
- <input type="text" name="values[<?php echo htmlspecialchars($column); ?>]">
- <?php endif; ?>
- </td>
- <?php endforeach; ?>
- <td>
- <button type="submit" name="insert_row">Add Row</button>
- </td>
- </tr>
- <?php foreach ($rows as $row): ?>
- <tr>
- <td><input type="checkbox" name="ids[]" value="<?php echo $row['id']; ?>"></td>
- <?php foreach ($columns as $column): ?>
- <td><?php echo htmlspecialchars($row[$column] ?? ''); ?></td>
- <?php endforeach; ?>
- <td>
- <form method="post" style="display:inline;">
- <input type="hidden" name="id" value="<?php echo $row['id']; ?>">
- <button type="submit" name="edit_row">Edit</button>
- </form>
- <form method="post" style="display:inline;">
- <input type="hidden" name="id" value="<?php echo $row['id']; ?>">
- <button type="submit" name="delete_row">Delete</button>
- </form>
- <form method="post" style="display:inline;">
- <input type="hidden" name="id" value="<?php echo $row['id']; ?>">
- <input type="text" name="target_id" placeholder="Target ID">
- <button type="submit" name="swap_row">Swap</button>
- <button type="submit" name="push_row">Push</button>
- </form>
- </td>
- </tr>
- <?php endforeach; ?>
- </tbody>
- </table>
- <button type="submit" name="delete_row">Maybe Delete Selected Rows</button>
- <button type="submit" name="reassign_ids">Maybe Reassign IDs</button>
- </form>
- <?php else: ?>
- <form method="post">
- <input type="hidden" name="table" value="<?php echo htmlspecialchars($selectedTable); ?>">
- <table border="1">
- <thead>
- <tr>
- <th>Select</th>
- <?php foreach ($columns as $column): ?>
- <th>
- <?php echo htmlspecialchars($column); ?>
- <?php if ($column == 'date'): ?>
- <a href="?table=<?php echo htmlspecialchars($selectedTable); ?>&sortOrder=<?php echo $sortOrder == 'ASC' ? 'DESC' : 'ASC'; ?>">Sort by Datum</a>
- <?php endif; ?>
- </th>
- <?php endforeach; ?>
- <th>Actions</th>
- </tr>
- </thead>
- <tbody>
- <?php foreach ($rows as $row): ?>
- <tr>
- <td><input type="checkbox" name="ids[]" value="<?php echo $row['id']; ?>"></td>
- <?php foreach ($columns as $column): ?>
- <td><?php echo htmlspecialchars($row[$column] ?? ''); ?></td>
- <?php endforeach; ?>
- <td>
- <form method="post" style="display:inline;">
- <input type="hidden" name="id" value="<?php echo $row['id']; ?>">
- <button type="submit" name="edit_row">Edit</button>
- </form>
- <form method="post" style="display:inline;">
- <input type="hidden" name="id" value="<?php echo $row['id']; ?>">
- <button type="submit" name="delete_row">Bye</button>
- </form>
- <form method="post" style="display:inline;">
- <input type="hidden" name="id" value="<?php echo $row['id']; ?>">
- <input type="text" name="target_id" placeholder="Target ID">
- <button type="submit" name="swap_row">Swap</button>
- <button type="submit" name="push_row">Push</button>
- </form>
- </td>
- </tr>
- <?php endforeach; ?>
- <tr>
- <td></td>
- <?php foreach ($columns as $column): ?>
- <td>
- <?php if ($column == 'id'): ?>
- <input type="text" name="values[<?php echo htmlspecialchars($column); ?>]" disabled>
- <?php elseif ($column == 'date'): ?>
- <input type="text" name="values[<?php echo htmlspecialchars($column); ?>]" value="<?php echo date('Y-m-d H:i:s'); ?>" disabled>
- <?php else: ?>
- <input type="text" name="values[<?php echo htmlspecialchars($column); ?>]">
- <?php endif; ?>
- </td>
- <?php endforeach; ?>
- <td>
- <button type="submit" name="insert_row">Add Row</button>
- </td>
- </tr>
- </tbody>
- </table>
- <button type="submit" name="delete_row">Delete Selected Rows</button>
- <button type="submit" name="reassign_ids">Reassign IDs</button>
- </form>
- <?php endif; ?>
- <?php else: ?>
- <p>No das table selected. Please select das table to editieren.</p>
- <?php endif; ?>
- </body>
- </html>
|