diff --git a/install.php b/install.php deleted file mode 100644 index 705a7f3..0000000 --- a/install.php +++ /dev/null @@ -1,269 +0,0 @@ -exec("CREATE DATABASE IF NOT EXISTS `$name` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"); - $pdo = new PDO("mysql:host=$host;dbname=$name", $user, $pass); - - $config_content = " PDO::ERRMODE_EXCEPTION, - PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, - ]); - } - return \$pdo; -} - -require_once __DIR__ . '/../includes/functions.php'; -"; - file_put_contents($config_file, $config_content); - header("Location: install.php?step=2"); - exit; - } catch (Exception $e) { - $error = "Database Connection Failed: " . $e->getMessage(); - } - } elseif ($step === 2) { - require_once $config_file; - try { - $pdo = db(); - - // 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. Create migrations table if not exists - $pdo->exec("CREATE TABLE IF NOT EXISTS migrations ( - id INT AUTO_INCREMENT PRIMARY KEY, - migration_name 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); - - // Get applied migrations - $stmt = $pdo->query("SELECT migration_name 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_name) 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_name) VALUES (?)"); - $stmt->execute([$migration_name]); - } else { - throw $e; - } - } - } - } - } - - // 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')"); - $pdo->exec("INSERT INTO categories (name, sort_order) VALUES ('Burgers', 1), ('Sides', 2), ('Drinks', 3)"); - $pdo->exec("INSERT INTO products (category_id, name, description, price) VALUES - (1, 'Signature Burger', 'Juicy beef patty with special sauce', 12.99), - (1, 'Veggie Delight', 'Plant-based patty with fresh avocado', 11.50), - (2, 'Truffle Fries', 'Crispy fries with truffle oil and parmesan', 5.99), - (3, 'Craft Cola', 'House-made sparkling cola', 3.50)"); - } - - header("Location: install.php?step=3"); - exit; - } catch (Exception $e) { - $error = "Initialization Failed: " . $e->getMessage(); - } - } elseif ($step === 3) { - require_once $config_file; - $username = $_POST['admin_user'] ?? ''; - $password = $_POST['admin_pass'] ?? ''; - $email = $_POST['admin_email'] ?? ''; - - if (empty($username) || empty($password)) { - $error = "Username and Password are required."; - } else { - try { - $pdo = db(); - $hashed_pass = password_hash($password, PASSWORD_DEFAULT); - - // Ensure Admin group exists - $stmt = $pdo->prepare("SELECT id FROM user_groups WHERE name = 'Administrator' LIMIT 1"); - $stmt->execute(); - $group_id = $stmt->fetchColumn(); - - if (!$group_id) { - $pdo->exec("INSERT INTO user_groups (name, permissions) VALUES ('Administrator', 'all')"); - $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]); - - header("Location: install.php?step=4"); - exit; - } catch (Exception $e) { - $error = "Failed to create Admin: " . $e->getMessage(); - } - } - } -} - -?> - - - - - - POS System Installation - - - - -
-
-
-

Installation

- -
-
1
-
2
-
3
-
4
-
- - -
- - - -

Step 1: Database Configuration

-

Enter your database connection details.

-
-
- - -
-
- - -
-
- - -
-
- - -
- -
- - -

Step 2: Initialize Database

-

Ready to create tables and run migrations. This will set up the latest database structure.

-
- -
- - -

Step 3: Create Super Admin

-

Create your first administrator account.

-
-
- - -
-
- - -
-
- - -
- -
- - -
-
- - - -
-

Installation Complete!

-

The system has been successfully installed.

-
- Security Warning: Please delete the install.php file from your server immediately! -
- Go to Login -
- -
-
-
- - \ No newline at end of file