From 78bcd84b89752f1863dd8e24dffbbed175b4b27d Mon Sep 17 00:00:00 2001 From: Craig Knudsen Date: Wed, 29 Nov 2023 10:00:23 -0500 Subject: [PATCH] Installer fixes. --- includes/config.php | 4 +- install/index.php | 78 +++++++++---- install/install_ajax.php | 2 +- install/install_appsettings_handler.php | 6 +- install/install_auth.php | 2 +- install/install_auth_handler.php | 13 ++- install/install_dbload.php | 24 ---- install/install_dbload_handler.php | 145 ------------------------ install/install_dbsettings.php | 2 +- install/install_dbtables.php | 2 +- install/install_dbtables_handler.php | 12 +- install/install_functions.php | 12 +- tools/summary.txt | 78 ++++++------- translations/English-US.txt | 35 ++---- 14 files changed, 143 insertions(+), 272 deletions(-) delete mode 100644 install/install_dbload.php delete mode 100644 install/install_dbload_handler.php diff --git a/includes/config.php b/includes/config.php index 1d4d07c65..4cc617052 100644 --- a/includes/config.php +++ b/includes/config.php @@ -343,7 +343,7 @@ function do_config($callingFromInstall=false) //echo "
"; print_r($rows); echo "
"; exit; if (!$rows || empty($rows) || empty($rows[0])) { - header($locateStr . 'UNKNOWN&reason=missing'); + header($locateStr); exit; } else { $versionInDb = $rows[0][0]; @@ -367,7 +367,7 @@ function do_config($callingFromInstall=false) } else { if (!$callingFromInstall) { // Must mean we don't have a settings.php file or env variables. - header($locateStr . 'UNKNOWN'); + header($locateStr); exit; } } diff --git a/install/index.php b/install/index.php index 5d644dbb8..96d02254e 100644 --- a/install/index.php +++ b/install/index.php @@ -1,4 +1,5 @@ connect_error) { + return false; + } + return true; + } else { + $c = @dbi_connect( + $_SESSION['db_host'], + $_SESSION['db_login'], + $_SESSION['db_password'], + $_SESSION['db_database'], + false + ); + } + } catch (Exception $e) { return false; } - $c = @dbi_connect( - $_SESSION['db_host'], - $_SESSION['db_login'], - $_SESSION['db_password'], - $_SESSION['db_database'], - false - ); return !empty($c); } @@ -210,7 +231,14 @@ function_exists('gd_info'), translate('Safe Mode needs to be disabled to allow setting env variables to specify the timezone') ] ]; -//echo "
"; print_r($php_settings); echo "
"; +if ($debugInstaller) { + echo "

PHP Settings

";
+    print_r($php_settings);
+    echo "
"; + echo "

settings.php

";
+    print_r($settings);
+    echo "
"; +} // Has the user modified the App Settings so they are different than settings.php if (empty($_SESSION['appSettingsModified'])) { $appSettingsModified = false; @@ -221,8 +249,13 @@ function_exists('gd_info'), // Can we connect? $connectError = ''; $canConnectDb = tryDbConnect(); -if (!$canConnectDb) - $connectError = dbi_error (); +if (!$canConnectDb) { + if (empty($settings['db_type'])) { + $connectError = translate('Connection not yet configured'); + } else { + $connectError = dbi_error(); + } +} $emptyDatabase = $canConnectDb ? isEmptyDatabase() : true; $unsavedDbSettings = !empty($_SESSION['unsavedDbSettings']); // Keep track if Db settings were modified by not yet saved $reportedDbVersion = 'Unknown'; @@ -231,7 +264,7 @@ function_exists('gd_info'), $databaseCurrent = false; $settingsSaved = true; // True if a valid settings.php found unless user changes settings $detectedDbVersion = 'Unknown'; -if ($canConnectDb) { +if ($canConnectDb && !empty($db_connection)) { $reportedDbVersion = getDbVersion(); $detectedDbVersion = getDatabaseVersionFromSchema(); if ($debugInstaller) { @@ -283,7 +316,6 @@ function_exists('gd_info'), ["step" => "dbsettings", "name" => "Database Configuration", "complete" => $canConnectDb && !$unsavedDbSettings], ["step" => "createdb", "name" => "Create Database", "complete" => $databaseExists && !$unsavedDbSettings], ["step" => "dbtables", "name" => "Create/Update Tables", "complete" => $databaseCurrent && !$unsavedDbSettings], - ["step" => "dbload", "name" => "Load Defaults", "complete" => !$emptyDatabase], ["step" => "adminuser", "name" => "Create Admin User", "complete" => $adminUserCount > 0 && !$unsavedDbSettings], ["step" => "finish", "name" => "Completion", "complete" => false] ]; @@ -291,8 +323,8 @@ function_exists('gd_info'), $action = $_POST['action'] ?? 'welcome'; // Make sure we received the CSRF token if (empty($_POST['csrf_form_key'])) { - $_SESSION['alert'] = translate('Your form post was either missing a required session token or timed out.'); - redirectToAction($action); + $_SESSION['alert'] = translate('Your form post was either missing a required session token or timed out.'); + redirectToAction($action); } } else { $action = $_GET['action'] ?? 'welcome'; @@ -457,7 +489,7 @@ function_exists('gd_info'),

" . htmlentities($error) . ""; } @@ -517,6 +549,14 @@ function_exists('gd_info'),
+ +
Logout + - + \ No newline at end of file diff --git a/install/install_ajax.php b/install/install_ajax.php index 7926284f7..24ca2eadc 100644 --- a/install/install_ajax.php +++ b/install/install_ajax.php @@ -22,7 +22,7 @@ function testDbConnection($host, $login, $password, $database) try { if ($_POST['dbType'] == 'mysqli') { - $c = new mysqli($host, $login, $password, $database); // don't specify db + $c = new mysqli($host, $login, $password); // don't specify db $ret = ($c->connect_errno == 0); $error_msg = $c->connect_error . ", login=$login, password=$password, host=$host"; $c->close(); diff --git a/install/install_appsettings_handler.php b/install/install_appsettings_handler.php index e7200e3b5..b27c185df 100644 --- a/install/install_appsettings_handler.php +++ b/install/install_appsettings_handler.php @@ -6,13 +6,13 @@ $error = translate('Unknown error'); } else { // Save settings to session - $_SESSION['use_http_auth'] == 'N'; // default + $_SESSION['use_http_auth'] = 'N'; // default $_SESSION['user_inc'] = $_POST['user_inc']; if ($_SESSION['user_inc'] == 'http') { - $_SESSION['user_inc'] == 'user.php'; + $_SESSION['user_inc'] = 'user.php'; $_SESSION['use_http_auth'] == 'Y'; } else if ($_SESSION['user_inc'] == 'none') { - $_SESSION['user_inc'] == 'user.php'; // single-user + $_SESSION['user_inc'] = 'user.php'; // single-user } $_SESSION['single_user'] = $_POST['user_inc'] == 'none' ? 'Y' : 'N'; if (empty($_POST['readonly'])) diff --git a/install/install_auth.php b/install/install_auth.php index 98b99b946..3b7347a76 100644 --- a/install/install_auth.php +++ b/install/install_auth.php @@ -1,5 +1,5 @@

diff --git a/install/install_auth_handler.php b/install/install_auth_handler.php index cadc6cd6c..41b887965 100644 --- a/install/install_auth_handler.php +++ b/install/install_auth_handler.php @@ -37,22 +37,22 @@ function write_password_in_new_settings($file, $password, $hint) { $date = new DateTime(); $formattedDate = $date->format('D, d M Y H:i:s O'); - $content = "\n"; + $content = "\n"; return file_put_contents($file, $content); } // Handle form submission on Auth page (both setting and checking password) -$passwordSet = !empty($_SESSION['install_password']); +$passwordSet = !empty($settings['install_password']); if (!$passwordSet) { // No password set. New instsall. Set password now. - $password = $_POST['password']; - $password2 = $_POST['password2']; + $password = $_POST['password'] ?? ''; + $password2 = $_POST['password2'] ?? ''; if ($password != $password2) { $error = translate('Your passwords must match.'); } - $hint = $_POST['hint']; + $hint = $_POST['hint'] ?? ''; $settingsFile = __DIR__ . '/../includes/settings.php'; if (file_exists($settingsFile) && strlen(file_get_contents($settingsFile) > 10)) { $ret = update_password_in_settings($settingsFile, md5($password), $hint); @@ -62,6 +62,7 @@ function write_password_in_new_settings($file, $password, $hint) if (!$ret) { $error = 'Error writing ' . $settingsFile . ' file.'; } else { + $_SESSION['alert'] = translate('Install password saved. Login with password to continue.'); redirectToNextAction(); } } else { diff --git a/install/install_dbload.php b/install/install_dbload.php deleted file mode 100644 index 9c21847cd..000000000 --- a/install/install_dbload.php +++ /dev/null @@ -1,24 +0,0 @@ -

- -

- - diff --git a/install/install_dbload_handler.php b/install/install_dbload_handler.php deleted file mode 100644 index 7c5aa3bb9..000000000 --- a/install/install_dbload_handler.php +++ /dev/null @@ -1,145 +0,0 @@ -connect_error) { - throw new Exception("Connection failed: " . $conn->connect_error); - } - - // Create database - $sql = "CREATE DATABASE " . $databaseName; - if ($conn->query($sql) === TRUE) { - $conn->close(); - return true; - } else { - throw new Exception("Error creating database: " . $conn->error); - } -} - -function createSqliteDatabase(string $filename): bool -{ - try { - $db = new SQLite3($filename, SQLITE3_OPEN_CREATE | SQLITE3_OPEN_READWRITE); - // Create a dummy table to force the file to be created - $db->exec("CREATE TABLE IF NOT EXISTS dummy (id INTEGER)"); - $db->exec("DROP TABLE dummy"); - $db->close(); - return true; - } catch (Exception $e) { - throw new Exception("Error creating SQLite3 database: " . $e->getMessage()); - } -} - -function createPostgresqlDatabase($hostname, $login, $password, $databaseName): bool -{ - $connString = "host={$hostname} user={$login} password={$password}"; - $db = pg_connect($connString); - if (!$db) { - throw new Exception("Connection failed: " . pg_last_error()); - } - - $result = pg_query($db, "CREATE DATABASE {$databaseName}"); - if (!$result) { - throw new Exception("Error creating database: " . pg_last_error($db)); - } - pg_close($db); - return true; -} - -function createIbaseDatabase($hostname, $login, $password, $databaseName): bool -{ - // Firebird/Interbase requires a full path for database creation - $fullPath = $databaseName; - $dir = basename($databaseName); - if (!file_exists($dir)) { - throw new Exception("Missing parent directory: $dir"); - } - // The db_create function creates a new database - if (!ibase_create_db("{$hostname}:{$databaseName}", $login, $password)) { - throw new Exception("Error creating database: " . ibase_errmsg()); - } - return true; -} - -function createOdbcDatabase($dsn, $login, $password, $databaseName): bool -{ - // Connect to the ODBC - $conn = odbc_connect($dsn, $login, $password); - if (!$conn) { - throw new Exception("Connection failed: " . odbc_errormsg()); - } - - // This SQL is generic and may not work for all ODBC sources. - // You might need to adjust this SQL based on your actual database. - $sql = "CREATE DATABASE " . $databaseName; - - if (!odbc_exec($conn, $sql)) { - throw new Exception("Error creating database: " . odbc_errormsg($conn)); - } - - odbc_close($conn); - return true; -} - -function createDB2Database($hostname, $login, $password, $databaseName): bool -{ - // Connect to the database - $conn = db2_connect($hostname, $login, $password); - if (!$conn) { - throw new Exception("IBM DB2 Connection failed: " . db2_conn_errormsg()); - } - - // SQL to create a new database - $sql = "CREATE DATABASE " . $databaseName; - - $stmt = db2_exec($conn, $sql); - if (!$stmt) { - db2_close($conn); - throw new Exception("Error creating database in IBM DB2: " . db2_stmt_errormsg()); - } - - db2_free_stmt($stmt); - db2_close($conn); - - return true; -} - -try { - switch ($_SESSION['db_type']) { - case 'mysqli': - createMysqlDatabase($_SESSION['db_host'], $_SESSION['db_login'], $_SESSION['db_password'], $_SESSION['db_database']); - break; - case 'sqlite3': - createSqliteDatabase($_SESSION['db_database']); - break; - case 'postgresql': - createPostgresqlDatabase($_SESSION['db_host'], $_SESSION['db_login'], $_SESSION['db_password'], $_SESSION['db_database']); - break; - case 'ibase': - createIbaseDatabase($_SESSION['db_host'], $_SESSION['db_login'], $_SESSION['db_password'], $_SESSION['db_database']); - break; - case 'odbc': - createOdbcDatabase($_SESSION['db_dsn'], $_SESSION['db_login'], $_SESSION['db_password'], $_SESSION['db_database']); - break; - case 'oracle': - $error = 'Creating databases is not currently supported in the installer. Please do this manually'; - break; - case 'ibm_db2': - createDB2Database($_SESSION['db_host'], $_SESSION['db_login'], $_SESSION['db_password'], $_SESSION['db_database']); - break; - default: - $error = 'Creating databases for ' . $_SESSION['db_type'] . ' is not yet supported.'; - break; - } -} catch (Exception $e) { - $error = $e->getMessage(); -} -if (empty($error)) { - redirectToNextAction(); -} diff --git a/install/install_dbsettings.php b/install/install_dbsettings.php index 5523d5c2e..3ec9439e7 100644 --- a/install/install_dbsettings.php +++ b/install/install_dbsettings.php @@ -73,7 +73,7 @@ function printDbSetting($name) diff --git a/install/install_dbtables.php b/install/install_dbtables.php index f1b1a6de1..ef95aaf3b 100644 --- a/install/install_dbtables.php +++ b/install/install_dbtables.php @@ -18,7 +18,7 @@ $msg = str_replace('YYY', $_SESSION['db_database'], $msg); $sqlFile = getSqlFile($_SESSION['db_type'], false); $sql = extractSqlCommandsFromFile($sqlFile); - $buttonLabel = translate('Create Database'); + $buttonLabel = translate('Create Database Tables'); } else { $msg = translate("Your XXX database named 'YYY' needs upgrading from version ZZZ."); $msg = str_replace('XXX', $_SESSION['db_type'], $msg); diff --git a/install/install_dbtables_handler.php b/install/install_dbtables_handler.php index b98fed423..e98b0d887 100644 --- a/install/install_dbtables_handler.php +++ b/install/install_dbtables_handler.php @@ -79,10 +79,14 @@ $error = $e->getMessage(); } if (empty($error)) { - updateVersionInDatabase (); - $msg = translate('Database successfully migrated from XXX to YYY'); - $msg = str_replace('XXX', $detectedDbVersion, $msg); - $msg = str_replace('YYY', $PROGRAM_VERSION, $msg); + updateVersionInDatabase(); + if ($emptyDatabase) { + $msg = translate('Database tables successfully created'); + } else { + $msg = translate('Database successfully migrated from XXX to YYY'); + $msg = str_replace('XXX', $detectedDbVersion, $msg); + $msg = str_replace('YYY', $PROGRAM_VERSION, $msg); + } $_SESSION['alert'] = $msg; redirectToNextAction(); } diff --git a/install/install_functions.php b/install/install_functions.php index 81977d6bf..626deb07c 100644 --- a/install/install_functions.php +++ b/install/install_functions.php @@ -15,7 +15,10 @@ function X_do_debug($msg) function isEmptyDatabase() { - global $debugInstaller; + global $db_connection, $debugInstaller; + if (empty($db_connection)) { + return true; + } try { // If we have 1 or more users in webcal_user, the db is not empty $res = dbi_execute('SELECT COUNT(*) FROM webcal_config', [], false, false); @@ -550,7 +553,7 @@ function getDatabaseVersionFromSchema($silent = true) if ($res) { $row = dbi_fetch_row($res); if (isset($row[0]) && $row[0] == 0) { - $_SESSION['blank_database'] = true; + // Database is not empty } else { // Make sure all existing values in config and pref tables are UPPERCASE. make_uppercase(); @@ -625,12 +628,15 @@ function extractSqlCommandsFromFile($filename) */ function executeSqlFromFile($filename) { + global $debugInstaller; $sqlStatements = extractSqlCommandsFromFile($filename); foreach ($sqlStatements as $statement) { if (!empty($statement)) { // Assuming dbi_execute() is a function that takes a SQL statement and executes it - echo "Statement: $statement
"; + if ($debugInstaller) { + echo "Statement: $statement
"; + } dbi_execute($statement); } } diff --git a/tools/summary.txt b/tools/summary.txt index 77a65b440..48a19ecb7 100644 --- a/tools/summary.txt +++ b/tools/summary.txt @@ -1,51 +1,51 @@ Language file No. missing translations -Afrikaans.txt: 1369 ( 4.1% complete) -Albanian.txt: 1375 ( 3.6% complete) -Arabic_utf8.txt: 1378 ( 3.4% complete) -Bahasa_Indonesia.txt: 858 (39.9% complete) -Basque.txt: 1035 (27.5% complete) +Afrikaans.txt: 1366 ( 4.1% complete) +Albanian.txt: 1372 ( 3.7% complete) +Arabic_utf8.txt: 1375 ( 3.4% complete) +Bahasa_Indonesia.txt: 855 (40.0% complete) +Basque.txt: 1032 (27.5% complete) Bulgarian.txt: 210 (85.3% complete) -Catalan.txt: 886 (37.9% complete) -Chinese-Big5.txt: 1228 (13.9% complete) -Chinese-GB2312.txt: 987 (30.8% complete) -Croatian_utf8.txt: 1396 ( 2.2% complete) -Czech.txt: 889 (37.7% complete) -Czech_utf8.txt: 862 (39.6% complete) -Danish.txt: 821 (42.5% complete) -Dutch.txt: 360 (74.8% complete) -Elven.txt: 1344 ( 5.8% complete) +Catalan.txt: 883 (38.0% complete) +Chinese-Big5.txt: 1225 (14.0% complete) +Chinese-GB2312.txt: 984 (30.9% complete) +Croatian_utf8.txt: 1393 ( 2.2% complete) +Czech.txt: 886 (37.8% complete) +Czech_utf8.txt: 859 (39.7% complete) +Danish.txt: 818 (42.6% complete) +Dutch.txt: 360 (74.7% complete) +Elven.txt: 1341 ( 5.8% complete) English-US.txt: Complete -Estonian.txt: 1007 (29.4% complete) -Finnish.txt: 893 (37.4% complete) +Estonian.txt: 1004 (29.5% complete) +Finnish.txt: 890 (37.5% complete) French-UTF8.txt: 202 (85.8% complete) French.txt: 202 (85.8% complete) -Galician.txt: 1182 (17.2% complete) +Galician.txt: 1179 (17.2% complete) German.txt: 188 (86.8% complete) German_utf8.txt: 188 (86.8% complete) -Greek.txt: 239 (83.3% complete) -Hebrew_utf8.txt: 511 (64.2% complete) -Holo-Big5.txt: 1152 (19.3% complete) -Hungarian.txt: 562 (60.6% complete) -Icelandic.txt: 1213 (15.0% complete) +Greek.txt: 239 (83.2% complete) +Hebrew_utf8.txt: 511 (64.1% complete) +Holo-Big5.txt: 1149 (19.3% complete) +Hungarian.txt: 559 (60.7% complete) +Icelandic.txt: 1210 (15.0% complete) Italian.txt: 211 (85.2% complete) -Japanese-eucjp.txt: 447 (68.7% complete) -Japanese-sjis.txt: 459 (67.8% complete) -Japanese.txt: 461 (67.7% complete) -Korean.txt: 1258 (11.8% complete) -Lithuanian.txt: 1377 ( 3.5% complete) -Norwegian.txt: 504 (64.7% complete) -Polish-utf8.txt: 266 (81.4% complete) +Japanese-eucjp.txt: 446 (68.7% complete) +Japanese-sjis.txt: 458 (67.8% complete) +Japanese.txt: 460 (67.7% complete) +Korean.txt: 1255 (11.9% complete) +Lithuanian.txt: 1374 ( 3.5% complete) +Norwegian.txt: 501 (64.8% complete) +Polish-utf8.txt: 266 (81.3% complete) Polish.txt: 258 (81.9% complete) -Portuguese.txt: 893 (37.4% complete) -Portuguese_BR.txt: 842 (41.0% complete) +Portuguese.txt: 890 (37.5% complete) +Portuguese_BR.txt: 839 (41.1% complete) Portuguese_BR_utf8.txt: 258 (81.9% complete) -Romanian.txt: 834 (41.6% complete) +Romanian.txt: 831 (41.6% complete) Russian.txt: 432 (69.7% complete) Russian_utf8.txt: 435 (69.5% complete) -Serbian_utf8.txt: 1376 ( 3.6% complete) -Slovak_utf8.txt: 1378 ( 3.4% complete) -Slovenian.txt: 1375 ( 3.6% complete) -Spanish.txt: 829 (41.9% complete) -Swedish.txt: 851 (40.4% complete) -Turkish.txt: 1215 (14.9% complete) -Welsh.txt: 1049 (26.5% complete) +Serbian_utf8.txt: 1373 ( 3.6% complete) +Slovak_utf8.txt: 1375 ( 3.4% complete) +Slovenian.txt: 1372 ( 3.7% complete) +Spanish.txt: 826 (42.0% complete) +Swedish.txt: 848 (40.4% complete) +Turkish.txt: 1212 (14.9% complete) +Welsh.txt: 1046 (26.5% complete) diff --git a/translations/English-US.txt b/translations/English-US.txt index 1a5fe4a28..89824b108 100644 --- a/translations/English-US.txt +++ b/translations/English-US.txt @@ -36,7 +36,7 @@ # Translate "May_" to the full month name and "May" to the, # usually three-letter, month abbreviation (like "Oct" for "October"). # -# Translation last updated on 11-27-2023 +# Translation last updated on 11-29-2023 charset: iso-8859-1 direction: ltr @@ -1329,14 +1329,10 @@ default-category-help: Specifies the category a new event should default to. email-boss-notifications-help: Specifies if bosses receive emails as event notifications. boss-approve-event-help: Specifies whether the boss will be required to approve events added by assistants. -######################################## -# Page: tools/send_test_email.php -# -Error connecting to database: Error connecting to database - ######################################## # Page: tools/reload_remotes.php # +Error connecting to database: Error connecting to database Include Path: Include Path No Remote Calendars found: No Remote Calendars found Remote Calendars not enabled: Remote Calendars not enabled @@ -1463,6 +1459,7 @@ invalid db_type XXX: invalid db_type XXX Cache cleared from previous SQL!: Cache cleared from previous SQL! Error executing query.: Error executing query. Unfortunately, XXX is not implemented for YYY: Unfortunately, "XXX" is not implemented for (YYY). +Unsupported db_type.: Unsupported db_type. Unknown ODBC error.: Unknown ODBC error. Error opening cache dir XXX.: Error opening cache dir "XXX". delete: delete @@ -1771,15 +1768,6 @@ mailer_not_supported: mailer is not supported provide_address: You must provide at least one recipient email address. recipients_failed: SMTP Error: The following recipients failed: -######################################## -# Page: install2/install_page1.php -# -WebCalendar Installation Wizard Step 1: WebCalendar Installation Wizard Step 1 -This installation wizard will guide you...: This installation wizard will guide you through setting up a basic WebCalendar installation.
For help and troubleshooting see:
-PHP Version Check: PHP Version Check -Check PHP 7.1.0 or greater: Check PHP 7.1.0 or greater -PHP version: PHP version - ######################################## # Page: install/install_adminuser.php # @@ -1800,6 +1788,7 @@ Allow URL fopen: Allow URL fopen (required only if Remote Calendars are used) Remote URL fopen is required to load remote calendars: Remote URL fopen is required to load remote calendars Safe Mode: Safe Mode Safe Mode needs to be disabled to allow setting env variables to specify the timezone: Safe Mode needs to be disabled to allow setting env variables to specify the timezone +Connection not yet configured: Connection not yet configured Your form post was either missing a required session token or timed out.: Your form post was either missing a required session token or timed out. Environment variables: Environment variables Info: Info @@ -1807,11 +1796,12 @@ Info: Info ######################################## # Page: install/install_dbtables.php # +Upgrade Database: Upgrade Database Your XXX database named 'YYY' is up to date. You may go on to the next step.: Your XXX database named 'YYY' is up to date. You may go on to the next step. Your XXX database named 'YYY' is empty and needs tables created.: Your XXX database named 'YYY' is empty and needs tables created. +Create Database Tables: Create Database Tables Your XXX database named 'YYY' needs upgrading from version ZZZ.: Your XXX database named 'YYY' needs upgrading from version ZZZ. Display SQL: Display SQL -Upgrade Database: Upgrade Database Upgrade SQL Commands: Upgrade SQL Commands Copy: Copy SQL content copied to clipboard: SQL content copied to clipboard @@ -1858,13 +1848,6 @@ This password hint was provided when the password was set.: This password hint w Password hint: Password hint Installation passphrase: Installation passphrase -######################################## -# Page: install/install_dbload.php -# -Your XXX database named 'YYY' is empty and requires loading of default data.: Your XXX database named 'YYY' is empty and requires loading of default data. -Your XXX database named 'YYY' has already been loaded with default data.: Your XXX database named 'YYY' has already been loaded with default data. -Load Defaults: Load Defaults - ######################################## # Page: install/install_finish.php # @@ -1882,6 +1865,7 @@ Create Database: Create Database # Page: install/install_auth_handler.php # Your passwords must match.: Your passwords must match. +Install password saved. Login with password to continue.: Install password saved. Login with password to continue. Successful login: Successful login Invalid passphrase.: Invalid passphrase. @@ -1937,6 +1921,11 @@ Incorrect: Incorrect Some WebCalendar function may be limited. Are you sure?: Some WebCalendar function may be limited. Are you sure? Acknowledge: Acknowledge +######################################## +# Page: install/install_dbtables_handler.php +# +Database tables successfully created: Database tables successfully created + ######################################## # Page: install/install_ajax.php #