From 26c455a51e9b604f806d9262aff4a84c37b65bca Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Sat, 28 Feb 2026 07:39:56 +0000 Subject: [PATCH] update 10 --- install.php | 16 +-- mail/index.php | 7 + mail/install.php | 367 +++++++++++++---------------------------------- 3 files changed, 113 insertions(+), 277 deletions(-) create mode 100644 mail/index.php diff --git a/install.php b/install.php index e5edfef..55fcff0 100644 --- a/install.php +++ b/install.php @@ -66,7 +66,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { $content .= "}\n"; if (file_put_contents($config_file, $content)) { - header('Location: ' . $_SERVER['PHP_SELF'] . '?step=3'); + header('Location: ' . htmlspecialchars($_SERVER['SCRIPT_NAME']) . '?step=3'); exit; } else { $error = "Failed to write configuration file to $config_file. Please check permissions."; @@ -123,7 +123,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { if (empty($errors)) { $success = "Successfully applied $applied migrations."; - header('Location: ' . $_SERVER['PHP_SELF'] . '?step=4'); + header('Location: ' . htmlspecialchars($_SERVER['SCRIPT_NAME']) . '?step=4'); exit; } else { $error = "Applied migrations, but some errors occurred:
"; @@ -154,7 +154,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { $pdo->exec("INSERT IGNORE INTO charity_settings (id, charity_name) VALUES (1, 'Admin Panel')"); $pdo->exec("INSERT IGNORE INTO smtp_settings (id, is_enabled) VALUES (1, 0)"); - header('Location: ' . $_SERVER['PHP_SELF'] . '?step=5'); + header('Location: ' . htmlspecialchars($_SERVER['SCRIPT_NAME']) . '?step=5'); exit; } catch (Throwable $e) { $error = "Failed to create admin account: " . $e->getMessage(); @@ -218,7 +218,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
- Next: Database Config + Next: Database Config Fix requirements to continue"; endif; ?> @@ -226,7 +226,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {

Step 2: Database Connection

-
+
@@ -251,7 +251,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {

Step 3: Database Migrations

We will now run the SQL scripts to set up your database tables.

- +
@@ -259,7 +259,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {

Step 4: Admin Account

- +
@@ -290,4 +290,4 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
- + \ No newline at end of file diff --git a/mail/index.php b/mail/index.php new file mode 100644 index 0000000..b7d7710 --- /dev/null +++ b/mail/index.php @@ -0,0 +1,7 @@ += 7.4' => version_compare(PHP_VERSION, '7.4.0', '>='), - 'PDO Extension' => extension_loaded('pdo'), - 'PDO MySQL Extension' => extension_loaded('pdo_mysql'), - 'Config Directory Writable' => is_writable(__DIR__ . '/../db/'), - 'Uploads Directory Writable' => is_writable(__DIR__ . '/../uploads/') || (mkdir(__DIR__ . '/../uploads/', 0777, true) && is_writable(__DIR__ . '/../uploads/')), -]; - -$all_requirements_met = !in_array(false, $requirements, true); - -// Current step $step = isset($_GET['step']) ? (int)$_GET['step'] : 1; - -// Handle form submissions $error = ''; $success = ''; -if ($_SERVER['REQUEST_METHOD'] === 'POST') { - if ($step === 2) { - // Save database configuration - $host = $_POST['db_host'] ?? '127.0.0.1'; - $name = $_POST['db_name'] ?? 'app_database'; - $user = $_POST['db_user'] ?? 'root'; - $pass = $_POST['db_pass'] ?? ''; +$configFile = __DIR__ . '/config.php'; +$envFile = __DIR__ . '/../.env'; - // Test connection - try { - $test_pdo = new PDO("mysql:host=$host;dbname=$name;charset=utf8mb4", $user, $pass); - $test_pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); +if ($step === 2 && $_SERVER['REQUEST_METHOD'] === 'POST') { + $transport = $_POST['transport'] ?? 'smtp'; + $host = $_POST['host'] ?? ''; + $port = $_POST['port'] ?? '587'; + $secure = $_POST['secure'] ?? 'tls'; + $user = $_POST['user'] ?? ''; + $pass = $_POST['pass'] ?? ''; + $from = $_POST['from'] ?? ''; + $from_name = $_POST['from_name'] ?? ''; - // Generate config file content - $content = "setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); -"; - $content .= " \$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); -"; - $content .= " } catch (PDOException \$e) {\n"; - $content .= " die('Connection failed: ' . \$e->getMessage());\n"; - $content .= " }\n"; - $content .= " }\n"; - $content .= " return \$pdo;\n"; - $content .= " }\n"; - $content .= "}\n"; + $envContent = "MAIL_TRANSPORT=$transport\n"; + $envContent .= "SMTP_HOST=$host\n"; + $envContent .= "SMTP_PORT=$port\n"; + $envContent .= "SMTP_SECURE=$secure\n"; + $envContent .= "SMTP_USER=$user\n"; + $envContent .= "SMTP_PASS=$pass\n"; + $envContent .= "MAIL_FROM=$from\n"; + $envContent .= "MAIL_FROM_NAME=$from_name\n"; - if (file_put_contents($config_file, $content)) { - header('Location: ' . $_SERVER['PHP_SELF'] . '?step=3'); - exit; - } else { - $error = "Failed to write configuration file to $config_file. Please check permissions."; - } - } catch (PDOException $e) { - $error = "Connection failed: " . $e->getMessage(); - } - } elseif ($step === 3) { - // Run migrations - if (!file_exists($config_file)) { - $error = "Configuration file not found. Please go back to Step 2."; - } else { - try { - require_once $config_file; - if (!function_exists('db')) { - throw new Exception("The 'db()' function is not defined in your config file."); - } - $pdo = db(); - $migrations_dir = __DIR__ . '/../db/migrations/'; - $files = glob($migrations_dir . '*.sql'); - if ($files === false) $files = []; - sort($files); - - $applied = 0; - $errors = []; - - foreach ($files as $file) { - $sql = file_get_contents($file); - if (empty($sql)) continue; - - try { - // Split SQL into multiple statements if necessary - $statements = array_filter(array_map('trim', explode(';', $sql))); - foreach ($statements as $stmt_sql) { - if (empty($stmt_sql)) continue; - try { - $pdo->exec($stmt_sql); - } catch (Throwable $e) { - $msg = $e->getMessage(); - if (strpos($msg, 'Duplicate column name') !== false || - strpos($msg, 'Duplicate key name') !== false || - strpos($msg, 'Duplicate table') !== false || - strpos($msg, 'already exists') !== false || strpos($msg, 'Duplicate key on write or update') !== false || strpos($msg, 'errno: 121') !== false) { - continue; - } else { - throw $e; - } - } - } - $applied++; - } catch (Throwable $e) { - $errors[] = basename($file) . ": " . $e->getMessage(); - } - } - - if (empty($errors)) { - $success = "Successfully applied $applied migrations."; - header('Location: ' . $_SERVER['PHP_SELF'] . '?step=4'); - exit; - } else { - $error = "Applied migrations, but some errors occurred:
  • " . implode('
  • ', $errors) . "
"; - } - } catch (Throwable $e) { - $error = "Migration failed: " . $e->getMessage(); - } - } - } elseif ($step === 4) { - // Final setup (Admin account) - require_once $config_file; - $pdo = db(); - - $admin_user = $_POST['admin_user'] ?? 'admin'; - $admin_pass = $_POST['admin_pass'] ?? ''; - $admin_email = $_POST['admin_email'] ?? 'admin@example.com'; - - if (strlen($admin_pass) < 6) { - $error = "Password must be at least 6 characters long."; - } else { - try { - $hashed_pass = password_hash($admin_pass, PASSWORD_DEFAULT); - $stmt = $pdo->prepare("INSERT INTO users (username, password, email, role) VALUES (?, ?, ?, 'admin') - ON DUPLICATE KEY UPDATE password = ?, email = ?"); - $stmt->execute([$admin_user, $hashed_pass, $admin_email, $hashed_pass, $admin_email]); - - // Set initial settings - $pdo->exec("INSERT IGNORE INTO charity_settings (id, charity_name) VALUES (1, 'Admin Panel')"); - $pdo->exec("INSERT IGNORE INTO smtp_settings (id, is_enabled) VALUES (1, 0)"); - - header('Location: ' . $_SERVER['PHP_SELF'] . '?step=5'); - exit; - } catch (Throwable $e) { - $error = "Failed to create admin account: " . $e->getMessage(); - } - } + if (file_put_contents($envFile, $envContent)) { + header('Location: ' . $_SERVER['SCRIPT_NAME'] . '?step=3'); + exit; + } else { + $error = 'Failed to write .env file. Check permissions.'; } } -// UI Template ?> - - Installer - Step <?= $step ?> + Mail Service Installation - - -
-
-
-

Installer

- -
- $i\n"; - endfor; ?> + +
+
+
+
+
+

Mail Service Installation - Step

+
+
+ +
+ + + +
Welcome to Mail Service Setup
+

This wizard will help you configure your SMTP settings.

+ Start Configuration + + + +
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + + + +
+ Configuration saved successfully! +
+

The mail service is now ready to use.

+ Go to Login + +
- - -
- - - -
- - - -

Step 1: System Requirements

-
    - $met): - echo "
  • "; - echo "$name\n"; - if ($met) { - echo "OK"; - } else { - echo "Failed"; - } - echo "
  • \n"; - endforeach; ?> -
-
- - Next: Database Config - Fix requirements to continue"; - endif; ?> -
- - -

Step 2: Database Connection

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

Step 3: Database Migrations

-

We will now run the SQL scripts to set up your database tables.

-
-
- -
-
- - -

Step 4: Admin Account

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

Installation Complete!

-

The system is ready to use. For security, please delete install.php or rename it.

- -
-
- \ No newline at end of file +