ProjectKiln Setup
Create the first administrator account to finish the installation.
prepare( 'SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?' ); $stmt->execute([$table]); return (int)$stmt->fetchColumn() > 0; } function installerIsInstalled(PDO $pdo): bool { if (!installerTableExists($pdo, 'settings')) { return false; } $stmt = $pdo->prepare( "SELECT COUNT(*) FROM settings WHERE setting_name = 'installed' AND LOWER(setting_value) = 'true'" ); $stmt->execute(); return (int)$stmt->fetchColumn() > 0; } function redirectHome(): never { header('Location: ' . (installerEmbedded() ? '?page=home' : '../?page=home')); exit; } if (installerEmbedded()) { $pageStyles[] = 'app/css/login.css'; } $pdo = db(); if (installerIsInstalled($pdo)) { redirectHome(); } $installError = null; $formError = null; try { require __DIR__ . '/install_db.php'; require_once __DIR__ . '/../auth.php'; } catch (Throwable $exception) { $installError = $exception->getMessage(); } if ($installError === null && $_SERVER['REQUEST_METHOD'] === 'POST') { $username = trim((string)($_POST['username'] ?? '')); $email = strtolower(trim((string)($_POST['email'] ?? ''))); $password = (string)($_POST['password'] ?? ''); $passwordConfirm = (string)($_POST['password_confirm'] ?? ''); if ($username === '' || $email === '' || $password === '') { $formError = 'Please fill in all required fields.'; } elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $formError = 'Please enter a valid email address.'; } elseif (strlen($password) < 8) { $formError = 'Password must be at least 8 characters long.'; } elseif ($password !== $passwordConfirm) { $formError = 'Passwords do not match.'; } else { $userId = register($username, $email, $password); if ($userId === null) { $formError = 'Admin user could not be created. Check if the email is already used.'; } else { $adminRightStmt = $pdo->prepare("SELECT id FROM rights WHERE name = 'Admin' LIMIT 1"); $adminRightStmt->execute(); $adminRightId = (int)$adminRightStmt->fetchColumn(); if ($adminRightId <= 0) { $formError = 'Admin right is missing after database setup.'; } else { $existingRight = $pdo->prepare( 'SELECT COUNT(*) FROM user_rights WHERE user_id = ? AND right_id = ?' ); $existingRight->execute([$userId, $adminRightId]); if ((int)$existingRight->fetchColumn() === 0) { $assignAdmin = $pdo->prepare( 'INSERT INTO user_rights (user_id, right_id) VALUES (?, ?)' ); $assignAdmin->execute([$userId, $adminRightId]); } $markInstalled = $pdo->prepare( "INSERT INTO settings (id, setting_name, setting_value) VALUES (2, 'installed', 'true') ON DUPLICATE KEY UPDATE setting_name = VALUES(setting_name), setting_value = VALUES(setting_value)" ); $markInstalled->execute(); login($email, $password, false); redirectHome(); } } } } function oldInput(string $name): string { return htmlspecialchars((string)($_POST[$name] ?? ''), ENT_QUOTES, 'UTF-8'); } ?>
Create the first administrator account to finish the installation.