updating installation

This commit is contained in:
Flatlogic Bot 2026-02-23 18:04:05 +00:00
parent 4a8fa3dc33
commit 6d026cb61f

View File

@ -56,20 +56,55 @@ require_once __DIR__ . '/../includes/functions.php';
// 1. Run Base Schema
$schema = file_get_contents(__DIR__ . '/db/schema.sql');
// Split schema by ; to execute one by one to avoid issues with some PDO drivers
// But usually PDO::exec handles multiple if allowed.
// Better to use a simpler approach for schema.sql
$pdo->exec($schema);
// 2. Run Migrations
// 2. Create migrations table if not exists
$pdo->exec("CREATE TABLE IF NOT EXISTS migrations (
id INT AUTO_INCREMENT PRIMARY KEY,
migration VARCHAR(255) UNIQUE NOT NULL,
applied_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)");
// 3. Run Migrations
$migrations_dir = __DIR__ . '/db/migrations/';
$migrations = glob($migrations_dir . '*.sql');
sort($migrations);
foreach ($migrations as $migration) {
$sql = file_get_contents($migration);
// Get applied migrations
$stmt = $pdo->query("SELECT migration FROM migrations");
$applied = $stmt->fetchAll(PDO::FETCH_COLUMN);
foreach ($migrations as $migration_path) {
$migration_name = basename($migration_path);
if (!in_array($migration_name, $applied)) {
$sql = file_get_contents($migration_path);
if (!empty(trim($sql))) {
// Some migrations might fail because they were partially applied before we had tracking
// We will wrap each in a try-catch or just execute and catch specific duplicate column errors
try {
$pdo->exec($sql);
$stmt = $pdo->prepare("INSERT INTO migrations (migration) VALUES (?)");
$stmt->execute([$migration_name]);
} catch (PDOException $e) {
// If it's "Duplicate column name" or "Duplicate key name", we might want to skip and mark as applied
// to recover from a broken state
if (strpos($e->getMessage(), 'Duplicate column name') !== false ||
strpos($e->getMessage(), 'Duplicate key name') !== false ||
strpos($e->getMessage(), 'already exists') !== false) {
$stmt = $pdo->prepare("INSERT INTO migrations (migration) VALUES (?)");
$stmt->execute([$migration_name]);
} else {
throw $e;
}
}
}
}
}
// 3. Seed initial data (from init.php logic)
// 4. Seed initial data (from init.php logic)
$stmt = $pdo->query("SELECT COUNT(*) FROM outlets");
if ($stmt->fetchColumn() == 0) {
$pdo->exec("INSERT INTO outlets (name, address) VALUES ('Main Downtown', '123 Main St'), ('Westside Hub', '456 West Blvd')");
@ -109,6 +144,14 @@ require_once __DIR__ . '/../includes/functions.php';
$group_id = $pdo->lastInsertId();
}
$stmt = $pdo->prepare("SELECT id FROM users WHERE username = ?");
$stmt->execute([$username]);
if ($stmt->fetch()) {
// Admin already exists, just move to next step
header("Location: install.php?step=4");
exit;
}
$stmt = $pdo->prepare("INSERT INTO users (group_id, username, password, full_name, email, is_active) VALUES (?, ?, ?, ?, ?, 1)");
$stmt->execute([$group_id, $username, $hashed_pass, 'Super Admin', $email]);