diff --git a/config/db.php b/config/db.php index af65d62..d2f7f6a 100644 --- a/config/db.php +++ b/config/db.php @@ -4,7 +4,9 @@ mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); // Check if first_start.php installer file exists and database setup is needed $first_start_path = ROOT_DIR . "first_start.php"; -if (file_exists($first_start_path) && basename($_SERVER['SCRIPT_FILENAME'] ?? '') !== 'first_start.php') { +$first_start_completed = file_exists(ROOT_DIR . "first_start.php.completed") || file_exists(ROOT_DIR . "config/installed.lock"); + +if (file_exists($first_start_path) && !$first_start_completed && basename($_SERVER['SCRIPT_FILENAME'] ?? '') !== 'first_start.php') { // Check connection first try { $test_conn = @new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME); @@ -93,11 +95,16 @@ try { } } catch (mysqli_sql_exception $e) { - if (file_exists($first_start_path) && basename($_SERVER['SCRIPT_FILENAME'] ?? '') !== 'first_start.php') { + if (file_exists($first_start_path) && !$first_start_completed && basename($_SERVER['SCRIPT_FILENAME'] ?? '') !== 'first_start.php') { header("Location: first_start.php"); exit; } - include(PAGES_FOLD . "db-error.php"); + $pages_fold = defined('PAGES_FOLD') ? PAGES_FOLD : ROOT_DIR . "pages/"; + if (file_exists($pages_fold . "db-error.php")) { + include($pages_fold . "db-error.php"); + } else { + echo "Database connection error: " . htmlspecialchars($e->getMessage()); + } debugStatusMes("Database setup error: " . $e->getMessage(), "High"); die(); } diff --git a/config/init.php b/config/init.php index 5714e8f..702afbb 100644 --- a/config/init.php +++ b/config/init.php @@ -5,14 +5,22 @@ switch($env){ /*------ DON'T TOUCH THIS PART ------ */ case "generic": - $doc_root = !empty($_SERVER['DOCUMENT_ROOT']) ? $_SERVER['DOCUMENT_ROOT'] : dirname(__DIR__); - define('WEB_ROOT', $doc_root); + $app_dir = str_replace('\\', '/', dirname(__DIR__)); + $doc_root = !empty($_SERVER['DOCUMENT_ROOT']) ? str_replace('\\', '/', $_SERVER['DOCUMENT_ROOT']) : ''; + + $base_url_path = ''; + if (!empty($doc_root) && strpos($app_dir, $doc_root) === 0) { + $base_url_path = substr($app_dir, strlen($doc_root)); + } + $base_url_path = rtrim(str_replace('\\', '/', $base_url_path), '/'); + $host = !empty($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : 'localhost'; define('DOMAIN', $host); $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https://' : 'http://'; define('FULL_DOMAIN', $protocol . DOMAIN); - define("ROOT_URL", $protocol . DOMAIN ); - define("ROOT_DIR", rtrim(WEB_ROOT, '/') . "/"); + define("ROOT_URL", $protocol . DOMAIN . $base_url_path); + define("ROOT_DIR", $app_dir . "/"); + define('WEB_ROOT', ROOT_DIR); break; /* ----------------------------------- */ default: diff --git a/config/settings.php b/config/settings.php index 3968c35..eaabb3f 100644 --- a/config/settings.php +++ b/config/settings.php @@ -8,8 +8,8 @@ $db_needed="yes"; $db_debug="yes"; $db_host="localhost"; $db_name="sld_blocknotes_db"; -$db_user="root"; -$db_pass=""; +$db_user="simone"; +$db_pass="Angela"; //------------------------------------------------------------------------------------- // --- DON'T CHANGE ALL THE CODE BELOW!!! --- diff --git a/first_start.php b/first_start.php old mode 100644 new mode 100755 index d4164fe..ace1c6f --- a/first_start.php +++ b/first_start.php @@ -11,6 +11,17 @@ if (session_status() === PHP_SESSION_NONE) { define("ROOT_DIR", __DIR__ . "/"); require_once(__DIR__ . "/functions/lang.php"); +// Check if installation is already completed or lock file exists +$installed_lock = __DIR__ . "/config/installed.lock"; +$completed_file = __DIR__ . "/first_start.php.completed"; + +if (file_exists($completed_file) || file_exists($installed_lock)) { + header("Location: index.php?page=login"); + exit; +} + + + // Handle language selection if (isset($_GET['set_lang'])) { set_active_lang($_GET['set_lang']); @@ -142,14 +153,18 @@ if ($db_needed == "yes"){ require_once(CONFIG_FOLD . "db.php"); } ?>'; - file_put_contents(__DIR__ . "/config/settings.php", $settings_file_content); + if (@file_put_contents(__DIR__ . "/config/settings.php", $settings_file_content) === false) { + $msg_error = __('err_setup_write_permissions'); + } else { + // Rename first_start.php to first_start.php.completed to prevent installer re-entry + if (!@rename(__FILE__, __DIR__ . "/first_start.php.completed")) { + @file_put_contents(__DIR__ . "/config/installed.lock", date('Y-m-d H:i:s')); + } - // Rename first_start.php to first_start.php.completed to prevent installer re-entry - @rename(__FILE__, __DIR__ . "/first_start.php.completed"); - - // Redirect to login page - header("Location: index.php?page=login&installed=1"); - exit; + // Redirect to login page + header("Location: index.php?page=login&installed=1"); + exit; + } } } } diff --git a/functions/lang.php b/functions/lang.php index 885bbeb..ad74512 100644 --- a/functions/lang.php +++ b/functions/lang.php @@ -200,7 +200,8 @@ function get_translations() { 'err_setup_db_fields' => 'Compila tutti i dati di connessione al Database MySQL.', 'err_setup_owner_fields' => 'Inserisci username e password per l\'utente Owner (Proprietario).', 'err_setup_admin_fields' => 'Inserisci username e password per il primo utente Admin.', - 'err_setup_same_user' => 'L\'utente Owner e l\'utente Admin devono avere nomi utente differenti.' + 'err_setup_same_user' => 'L\'utente Owner e l\'utente Admin devono avere nomi utente differenti.', + 'err_setup_write_permissions' => 'Impossibile scrivere il file config/settings.php. Verifica i permessi di scrittura sulla cartella.' ], 'en' => [ @@ -365,7 +366,8 @@ function get_translations() { 'err_setup_db_fields' => 'Please fill in all MySQL database connection fields.', 'err_setup_owner_fields' => 'Please enter username and password for the Owner user.', 'err_setup_admin_fields' => 'Please enter username and password for the first Admin user.', - 'err_setup_same_user' => 'Owner user and Admin user must have different usernames.' + 'err_setup_same_user' => 'Owner user and Admin user must have different usernames.', + 'err_setup_write_permissions' => 'Unable to write to config/settings.php file. Check folder write permissions.' ], 'es' => [ @@ -530,7 +532,8 @@ function get_translations() { 'err_setup_db_fields' => 'Por favor completa todos los campos de conexión a la base de datos MySQL.', 'err_setup_owner_fields' => 'Por favor introduce nombre de usuario y contraseña para el Propietario.', 'err_setup_admin_fields' => 'Por favor introduce nombre de usuario y contraseña para el primer Admin.', - 'err_setup_same_user' => 'El usuario Propietario y el usuario Admin deben tener nombres diferentes.' + 'err_setup_same_user' => 'El usuario Propietario y el usuario Admin deben tener nombres diferentes.', + 'err_setup_write_permissions' => 'No se pudo escribir en el archivo config/settings.php. Verifica los permisos de escritura.' ], 'fr' => [ @@ -695,7 +698,8 @@ function get_translations() { 'err_setup_db_fields' => 'Veuillez remplir tous les champs de connexion à la base de données MySQL.', 'err_setup_owner_fields' => 'Veuillez entrer le nom d\'utilisateur et le mot de passe pour le Propriétaire.', 'err_setup_admin_fields' => 'Veuillez entrer le nom d\'utilisateur et le mot de passe pour le premier Admin.', - 'err_setup_same_user' => 'L\'utilisateur Propriétaire et l\'utilisateur Admin doivent avoir des noms différents.' + 'err_setup_same_user' => 'L\'utilisateur Propriétaire et l\'utilisateur Admin doivent avoir des noms différents.', + 'err_setup_write_permissions' => 'Impossible d\'écrire dans le fichier config/settings.php. Vérifiez les permissions de dossier.' ] ]; }