DEV_TIMEOUT_SECONDS)) {
unset($_SESSION['DEV_PASSWORD_authenticated']);
unset($_SESSION['DEV_last_activity']);
header("Location: " . $_SERVER['PHP_SELF'] . "?reason=timeout");
exit;
}
$_SESSION['DEV_last_activity'] = time();
}
if (isset($_GET['reason']) && $_GET['reason'] === 'timeout') {
unset($_SESSION['DEV_PASSWORD_authenticated']);
unset($_SESSION['DEV_last_activity']);
}
// Display Login Screen if not authenticated
if (!isset($_SESSION['DEV_PASSWORD_authenticated']) || $_SESSION['DEV_PASSWORD_authenticated'] !== true) {
$display_msg = "Developer Access";
if (isset($_GET['reason']) && $_GET['reason'] === 'timeout') {
$login_error = "Logged out due to 30 min of inactivity.";
}
?>
Developer Login
= htmlspecialchars($display_msg) ?>
= htmlspecialchars($login_error) ?>
PDO::ERRMODE_EXCEPTION]);
} catch (PDOException $e) { die("Database connection failed: " . $e->getMessage()); }
$message = "";
$current_table = (isset($_GET['table']) && $_GET['table'] === 'times') ? 'times' : 'names';
// Identify PK: 'UID' for times, 'id' for everything else
$pk = ($current_table === 'times') ? 'UID' : 'id';
// --- HANDLE POST ACTIONS ---
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
try {
if (isset($_POST['backup_all'])) {
$pdo->exec("DROP TABLE IF EXISTS names_backup; CREATE TABLE names_backup AS SELECT * FROM names;");
$pdo->exec("DROP TABLE IF EXISTS times_backup; CREATE TABLE times_backup AS SELECT * FROM times;");
$message = "
Full Database Backup created!
";
} elseif (isset($_POST['restore_names'])) {
try {
// Ensure table exists first
$pdo->exec("CREATE TABLE IF NOT EXISTS names (
id INT AUTO_INCREMENT PRIMARY KEY,
CardID VARCHAR(12) NOT NULL UNIQUE,
name VARCHAR(100) DEFAULT NULL
)");
// Now restore
$pdo->exec("TRUNCATE TABLE names; INSERT INTO names SELECT * FROM names_backup;");
$message = "
'names' table restored and re-created!
";
} catch (Exception $e) {
$message = "
Error restoring 'names': " . $e->getMessage() . "
";
}
} elseif (isset($_POST['restore_times'])) {
try {
// Ensure table exists first
$pdo->exec("CREATE TABLE IF NOT EXISTS times (
UID VARCHAR(12) NOT NULL,
temp FLOAT,
timestamp DATETIME
)");
// Now restore
$pdo->exec("TRUNCATE TABLE times; INSERT INTO times SELECT * FROM times_backup;");
$message = "
'times' table restored and re-created!
";
} catch (Exception $e) {
$message = "
Error restoring 'times': " . $e->getMessage() . "
";
}
} elseif (isset($_POST['action']) && $_POST['action'] === 'save_changes') {
// ONLY proceed if 'rows' exists and is an array
if (isset($_POST['rows']) && is_array($_POST['rows'])) {
$pdo->beginTransaction();
foreach ($_POST['rows'] as $pk_val => $columns) {
$setClauses = []; $params = [];
foreach ($columns as $col => $val) {
$setClauses[] = "`$col` = ?";
$params[] = trim($val);
}
$params[] = $pk_val;
$stmt = $pdo->prepare("UPDATE `$current_table` SET " . implode(", ", $setClauses) . " WHERE `$pk` = ?");
$stmt->execute($params);
}
$pdo->commit();
$message = "
Changes saved successfully!
";
}
} elseif (isset($_POST['action']) && $_POST['action'] === 'delete_selected') {
if (!empty($_POST['selected_ids'])) {
$ids = $_POST['selected_ids'];
$placeholders = implode(',', array_fill(0, count($ids), '?'));
$stmt = $pdo->prepare("DELETE FROM `$current_table` WHERE `$pk` IN ($placeholders)");
$stmt->execute($ids);
$message = "