X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=inc%2Finstall-functions.php;h=5f027b3f7e1bf44e9e349f585a808337f2c0778f;hb=a85719f860bc786bd05a37c880cb1ef02bbd07cc;hp=f6d75436b9fe615da6f8e0d9e2f853a4b0e6f051;hpb=8c79f546e2d6851e992a53574c84db4a43349d45;p=mailer.git diff --git a/inc/install-functions.php b/inc/install-functions.php index f6d75436b9..5f027b3f7e 100644 --- a/inc/install-functions.php +++ b/inc/install-functions.php @@ -16,7 +16,7 @@ * $Author:: $ * * -------------------------------------------------------------------- * * Copyright (c) 2003 - 2009 by Roland Haeder * - * Copyright (c) 2009 - 2012 by Mailer Developer Team * + * Copyright (c) 2009 - 2013 by Mailer Developer Team * * For more information visit: http://mxchange.org * * * * This program is free software; you can redistribute it and/or modify * @@ -36,7 +36,7 @@ ************************************************************************/ // Some security stuff... -if ((!defined('__SECURITY')) || (!isInstallationPhase())) { +if ((!defined('__SECURITY')) || (!isInstaller())) { die(); } // END - if @@ -68,7 +68,17 @@ function initInstaller () { 'warn_no_pass' => 'other_config', 'write_footer' => 'other_config', 'enable_backlink' => 'other_config', + // first_admin + 'admin_login' => 'first_admin', + 'admin_email' => 'first_admin', + 'admin_password1' => 'first_admin', + 'admin_password2' => 'first_admin', ); + + // Set mininmum password length/score and other config entries + setConfigEntry('min_password_length', 5); + setConfigEntry('min_password_score' , 3); + setConfigEntry('verbose_sql' , 'N'); } // Write the local config-local.php file from "template" @@ -141,7 +151,7 @@ function getInstallerContent () { $content = $GLOBALS['install_content']; } else { // Nothing found, this needs fixing - $content = displayMessage('{--INSTALLER_CONTENT_404--}', TRUE); + $content = returnMessage('{--INSTALLER_CONTENT_404--}'); } // Return content @@ -154,8 +164,7 @@ function readSqlDump ($FQFN) { $content = readFromFile($FQFN); // Remove some unwanted chars - $content = str_replace(chr(13), '', $content); - $content = str_replace(PHP_EOL . PHP_EOL, PHP_EOL, $content); + $content = str_replace(array(chr(13), PHP_EOL . PHP_EOL), array('', PHP_EOL), $content); // Return the content return $content; @@ -220,7 +229,7 @@ function isPlainInstaller () { // Handle all given failed fields function handleInstallerFailedFields ($failedFields) { // Don't do anything with no array or no entries - if ((!is_array($failedFields)) || (count($failedFields) == 0)) { + if (!isFilledArray($failedFields)) { // Abort here reportBug(__FUNCTION__, __LINE__, 'failedFields[]=' . gettype($failedFields) . ' verification failed'); } // END - if @@ -278,10 +287,10 @@ function doInstallerPostCheck ($currentTab, &$saveStatus) { // Is the function there? if (!function_exists($callbackName)) { // Not found, which is not bad, but it means the post-check won't be run - //* NOISY-DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Call-back function ' . $callbackName . ' not found. saveStatus[status]=' . $saveStatus['status'] . ', currentTab=' . $currentTab); + /* NOISY-DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Call-back function ' . $callbackName . ' not found. saveStatus[status]=' . $saveStatus['status'] . ', currentTab=' . $currentTab); // Abort here - return; + return FALSE; } // END - if // Init 'tab-specific error message' @@ -295,13 +304,13 @@ function doInstallerPostCheck ($currentTab, &$saveStatus) { $isValid = (bool) call_user_func($callbackName, $currentTab); // Is it not valid? - if (($isValid === FALSE) || (count($GLOBALS['installer_failed_fields'][$currentTab]) > 0)) { + if (($isValid === FALSE) || (isFilledArray($GLOBALS['installer_failed_fields'][$currentTab]))) { // Then change status and message $saveStatus['status'] = 'failed'; $saveStatus['message'] = '{%message,INSTALLER_POST_CHECK_' . strtoupper($currentTab) . '_FAILED=' . $GLOBALS['installer_post_error'][$currentTab] . '%}'; // Is there failed fields? - if (count($GLOBALS['installer_failed_fields'][$currentTab]) > 0) { + if (isFilledArray($GLOBALS['installer_failed_fields'][$currentTab])) { // Then merge both $saveStatus['failed_fields'] = merge_array($saveStatus['failed_fields'], $GLOBALS['installer_failed_fields'][$currentTab]); } // END - if @@ -356,7 +365,7 @@ function generateInstallerExtensionTable () { if ((loadExtension($ext_name, 'test', '0.0.0', TRUE)) && (isExtensionProductive($ext_name)) && (substr($ext_name, 0, 10) != 'admintheme')) { // Default is not disabled $disabled = ''; - if ($ext_name == 'sql_patches') { + if (in_array($ext_name, array('sql_patches', 'timezone'))) { // Always keep this enabled $disabled = ' disabled="disabled"'; } // END - if @@ -468,10 +477,12 @@ function isInstallerWebmasterValid ($value) { (isEmailValid($value)) || // Or is there 'localhost/127.0.0.1' as hostname? Then don't check email address (e.g. you@localhost) - (in_array(detectServerName(), array('localhost', '127.0.0.1'))) + (isDeveloperSystem()) ) && ( // Is not default "email address" $value != getMessage('DEFAULT_WEBMASTER') + ) && ( + strlen($value) >= 11 )); // Return it @@ -541,6 +552,32 @@ function isInstallerMysqlPrefixValid ($value) { // ----------------- Other configuration ----------------- +// ----------------- First administator ----------------- + +// Call-back function to check validity of 'admin_login' +function isInstallerAdminLoginValid ($value) { + // Length should not be shorter than 4 characters + return (strlen($value) >= 4); +} + +// Call-back function to check validity of 'admin_email' +function isInstallerAdminEmailValid ($value) { + // Just call webmaster-check function + return isInstallerWebmasterValid($value); +} + +// Call-back function to check validity of 'admin_password1' +function isInstallerAdminPassword1Valid ($value) { + // Check if it is strong + return isStrongPassword($value); +} + +// Call-back function to check validity of 'admin_password2' +function isInstallerAdminPassword2Valid ($value) { + // Check if it is strong + return isStrongPassword($value); +} + // ----------------- Extensions ----------------- // Call-back function to check 'sel' (array!) @@ -651,11 +688,14 @@ function isInstallerPostDatabaseConfigValid ($currentTab) { return FALSE; } // END - if + // Remove any previous flag + unsetSqlLinkUp(__FUNCTION__, __LINE__); + // Try to connect to the database - $linkResource = SQL_CONNECT(postRequestElement('mysql_host'), postRequestElement('mysql_login'), postRequestElement('mysql_password1'), __FUNCTION__, __LINE__); + sqlConnectToDatabase(postRequestElement('mysql_host'), postRequestElement('mysql_login'), postRequestElement('mysql_password1'), __FUNCTION__, __LINE__); // Is the link up - if (!is_resource($linkResource)) { + if (!isSqlLinkUp()) { // Cannot connect to database $GLOBALS['installer_post_error'][$currentTab] = '{--INSTALLER_POST_DATABASE_CONNECT_ERROR--}'; array_push($GLOBALS['installer_failed_fields'][$currentTab], 'mysql_login', 'mysql_password1', 'mysql_password2'); @@ -663,13 +703,13 @@ function isInstallerPostDatabaseConfigValid ($currentTab) { } // END - if // Then attempt to select the database - if (!SQL_SELECT_DB(postRequestElement('mysql_dbase'), __FUNCTION__, __LINE__)) { + if (!sqlSelectDatabase(postRequestElement('mysql_dbase'), __FUNCTION__, __LINE__)) { // Could not find database $GLOBALS['installer_post_error'][$currentTab] = '{--INSTALLER_POST_DATABASE_SELECT_FAILED--}'; array_push($GLOBALS['installer_failed_fields'][$currentTab], 'mysql_dbase'); // Disconnect here, we don't need idle database connections laying around - SQL_CLOSE(__FUNCTION__, __LINE__); + sqlCloseLink(__FUNCTION__, __LINE__); // Abort here return FALSE; @@ -689,17 +729,17 @@ function isInstallerPostDatabaseConfigValid ($currentTab) { array_push($GLOBALS['installer_failed_fields'][$currentTab], 'mysql_engine'); // Disconnect here, we don't need idle database connections laying around - SQL_CLOSE(__FUNCTION__, __LINE__); + sqlCloseLink(__FUNCTION__, __LINE__); // Abort here return FALSE; - } elseif (count($engines) == 0) { + } elseif (!isFilledArray($engines)) { // No engine is active $GLOBALS['installer_post_error'][$currentTab] = '{--INSTALLER_POST_DATABASE_NO_ENGINES_ACTIVE--}'; array_push($GLOBALS['installer_failed_fields'][$currentTab], 'mysql_engine'); // Disconnect here, we don't need idle database connections laying around - SQL_CLOSE(__FUNCTION__, __LINE__); + sqlCloseLink(__FUNCTION__, __LINE__); // Abort here return FALSE; @@ -725,7 +765,7 @@ function isInstallerPostDatabaseConfigValid ($currentTab) { array_push($GLOBALS['installer_failed_fields'][$currentTab], 'mysql_engine'); // Disconnect here, we don't need idle database connections laying around - SQL_CLOSE(__FUNCTION__, __LINE__); + sqlCloseLink(__FUNCTION__, __LINE__); // Abort here return FALSE; @@ -781,7 +821,7 @@ function isInstallerPostDatabaseConfigValid ($currentTab) { $isValid = (count($tables) == $missingTables); // Disconnect here, we don't need idle database connections laying around - SQL_CLOSE(__FUNCTION__, __LINE__); + sqlCloseLink(__FUNCTION__, __LINE__); // If the status is true, disconnect the database if ($isValid === FALSE) { @@ -797,6 +837,55 @@ function isInstallerPostDatabaseConfigValid ($currentTab) { return $isValid; } +// Call-back function to check if first admin data is valid +function isInstallerPostFirstAdminValid ($currentTab) { + // Is all data valid? + if (!isPostRequestElementSet('admin_login')) { + // Login not set + $GLOBALS['installer_post_error'][$currentTab] = '{--INSTALLER_POST_FIRST_ADMIN_LOGIN_EMPTY--}'; + array_push($GLOBALS['installer_failed_fields'][$currentTab], 'admin_login'); + return FALSE; + } elseif (strlen(postRequestElement('admin_login')) < 4) { + // Login to short + $GLOBALS['installer_post_error'][$currentTab] = '{--INSTALLER_POST_FIRST_ADMIN_LOGIN_SHORT--}'; + array_push($GLOBALS['installer_failed_fields'][$currentTab], 'admin_login'); + return FALSE; + } elseif (!isPostRequestElementSet('admin_email')) { + // Email address not set + $GLOBALS['installer_post_error'][$currentTab] = '{--INSTALLER_POST_FIRST_ADMIN_EMAIL_EMPTY--}'; + array_push($GLOBALS['installer_failed_fields'][$currentTab], 'admin_email'); + return FALSE; + } elseif (!isInstallerAdminEmailValid(postRequestElement('admin_email'))) { + // Invalid email address + $GLOBALS['installer_post_error'][$currentTab] = '{--INSTALLER_POST_FIRST_ADMIN_EMAIL_INVALID--}'; + array_push($GLOBALS['installer_failed_fields'][$currentTab], 'admin_email'); + return FALSE; + } elseif ((!isPostRequestElementSet('admin_password1')) && (isPostRequestElementSet('admin_password2'))) { + // Password 1 not set + $GLOBALS['installer_post_error'][$currentTab] = '{--INSTALLER_POST_FIRST_ADMIN_PASSWORD1_EMPTY--}'; + array_push($GLOBALS['installer_failed_fields'][$currentTab], 'admin_password1'); + return FALSE; + } elseif ((isPostRequestElementSet('admin_password1')) && (!isPostRequestElementSet('admin_password2'))) { + // Password 2 not set + $GLOBALS['installer_post_error'][$currentTab] = '{--INSTALLER_POST_FIRST_ADMIN_PASSWORD2_EMPTY--}'; + array_push($GLOBALS['installer_failed_fields'][$currentTab], 'admin_password2'); + return FALSE; + } elseif (postRequestElement('admin_password1') != postRequestElement('admin_password2')) { + // Passwords mismatch + $GLOBALS['installer_post_error'][$currentTab] = '{--INSTALLER_POST_FIRST_ADMIN_PASSWORDS_MISMATCH--}'; + array_push($GLOBALS['installer_failed_fields'][$currentTab], 'admin_password1', 'admin_password2'); + return FALSE; + } elseif (!isStrongPassword(postRequestElement('admin_password1'))) { + // Weak passwords entered + $GLOBALS['installer_post_error'][$currentTab] = '{--INSTALLER_POST_FIRST_ADMIN_PASSWORDS_WEAK--}'; + array_push($GLOBALS['installer_failed_fields'][$currentTab], 'admin_password1', 'admin_password2'); + return FALSE; + } // END - if + + // All tests passed + return TRUE; +} + // Store given tab in session function installTabOkay ($currentTab) { // Is it set? @@ -856,5 +945,11 @@ function importInstallSqlDump ($dumpName) { importSqlDump('install', $dumpName, 'install'); } +// Wrapper to check if tables.sql and menu-foo.sql are readable +function isInstallerSqlsReadable ($path) { + // Determine it + return ((isFileReadable($path . 'install/tables.sql')) && (isFileReadable($path . 'install/menu-' . getLanguage() . '.sql'))); +} + // [EOF] ?>