"PHP Version 7.4.x to 8.3.x ($phpVersion detected)", 'check' => version_compare($phpVersion, '7.4.0', '>=') && version_compare($phpVersion, '8.4.0', '<') ], [ 'name' => "cURL Extension", 'check' => function_exists('curl_version') ], [ 'name' => "MySQLi Extension", 'check' => function_exists('mysqli_connect') ], [ 'name' => "GD Library", 'check' => extension_loaded('gd') ], [ 'name' => "Fileinfo Extension", 'check' => extension_loaded('fileinfo') ], [ 'name' => "Imagick", 'check' => extension_loaded('imagick') ], [ 'name' => 'ZipArchive', 'check' => class_exists('ZipArchive') ], ]; $folders = [ 'invoice' => is_writable('../invoice'), 'payment' => is_writable('../payment'), 'admin' => is_writable('../admin'), 'pp-include' => is_writable('../pp-include'), ]; $is_requirment_fill = true; if (isset($_POST['install'])) { $datahost = $_POST['datahost']; $dataport = $_POST['dataport']; $dbName = $_POST['dbName']; $dbPrefix = $_POST['dbPrefix']; $dbUser = $_POST['dbUser']; $dbPass = $_POST['dbPass']; $adminName = $_POST['adminName']; $adminEmail = $_POST['adminEmail']; $adminUser = $_POST['adminUser']; $adminPass = $_POST['adminPass']; // Validate if (empty($datahost) || empty($dataport) || empty($dbName) || empty($dbPrefix) || empty($dbUser)) { echo json_encode(["status" => "false", "message" => "Error: All database connection fields are required."]); exit(); } if (!filter_var($adminEmail, FILTER_VALIDATE_EMAIL)) { echo json_encode(["status" => "false", "message" => "Error: Invalid administrator email address."]); exit(); } // Connect to DB $conn = new mysqli($datahost, $dbUser, $dbPass, $dbName, $dataport); if ($conn->connect_error) { echo json_encode(["status" => "false", "message" => "Error: Database connection failed."]); exit(); } // Save config.php $configContent = ""; file_put_contents('../pp-config.php', $configContent); // Load and import SQL with prefix $sqlUrl = "database.sql"; $sql = file_get_contents($sqlUrl); if ($sql === false) { echo json_encode(["status" => "false", "message" => "Error: Failed to fetch SQL file."]); exit(); } // Replace __PREFIX__ with actual prefix $sql = str_replace("__PREFIX__", $dbPrefix, $sql); // Execute all queries $queries = array_filter(array_map('trim', explode(";", $sql))); foreach ($queries as $query) { if (!empty($query)) { $conn->query($query); } } $sqlUrlCurrency = "currency.sql"; $sqlContentCurrency = file_get_contents($sqlUrlCurrency); if ($sqlContentCurrency === false) { echo json_encode(["status" => "false", "message" => "Error: Failed to fetch SQL file."]); exit(); } // Replace old table name with your real one $sqlContentCurrency = str_replace("INSERT INTO `currency`", "INSERT INTO `{$dbPrefix}currency`", $sqlContentCurrency); // Run the modified SQL if ($conn->multi_query($sqlContentCurrency)) { do { $conn->store_result(); } while ($conn->more_results() && $conn->next_result()); } else { echo json_encode(["status" => "false", "message" => "Error: Failed to fetch SQL file."]); exit(); } $sqlUrlTimezone = "timezone.sql"; $sqlContentTimezone = file_get_contents($sqlUrlTimezone); if ($sqlContentTimezone === false) { echo json_encode(["status" => "false", "message" => "Error: Failed to fetch SQL file."]); exit(); } // Replace old table name with your real one $sqlContentTimezone = str_replace("INSERT INTO `timezone`", "INSERT INTO `{$dbPrefix}timezone`", $sqlContentTimezone); // Run the modified SQL if ($conn->multi_query($sqlContentTimezone)) { do { $conn->store_result(); } while ($conn->more_results() && $conn->next_result()); } else { echo json_encode(["status" => "false", "message" => "Error: Failed to fetch SQL file."]); exit(); } // Insert admin user $hashedPass = password_hash($adminPass, PASSWORD_BCRYPT); $insertAdmin = "INSERT INTO `{$dbPrefix}admins` (name, email, username, password) VALUES ('" . $conn->real_escape_string($adminName) . "', '" . $conn->real_escape_string($adminEmail) . "', '" . $conn->real_escape_string($adminUser) . "', '" . $conn->real_escape_string($hashedPass) . "')"; $conn->query($insertAdmin); $insertSettings = "INSERT INTO `{$dbPrefix}settings` (site_name) VALUES ('--')"; $conn->query($insertSettings); echo json_encode(["status" => "true", "message" => "Installation completed successfully."]); exit(); } if (isset($_POST['test'])) { $datahost = $_POST['datahost']; $dataport = $_POST['dataport']; $dbName = $_POST['dbName']; $dbPrefix = $_POST['dbPrefix']; $dbUser = $_POST['dbUser']; $dbPass = $_POST['dbPass']; $conn = @new mysqli($datahost, $dbUser, $dbPass, $dbName, $dataport); if ($conn->connect_error) { echo json_encode([ "status" => "false", "message" => "Connection failed: " . $conn->connect_error ]); } else { echo json_encode([ "status" => "true", "message" => "Database connection successful!" ]); $conn->close(); } exit(); } ?>
Before proceeding with the installation, please ensure your server meets the following requirements:
Please provide your database connection details:
Recommended for most installations
Create your administrator account to manage the application: