X-Git-Url: https://git.mxchange.org/?p=mailer.git;a=blobdiff_plain;f=inc%2Finstall-functions.php;h=a0ac6850a6ff8d6affeb9fab5e7530d341572915;hp=f6d75436b9fe615da6f8e0d9e2f853a4b0e6f051;hb=49acdb7a7adbcf25a8e8683b5581bfcec72b23bd;hpb=1d22c70e65e858422ee0d17a7612f4b5c0757a42 diff --git a/inc/install-functions.php b/inc/install-functions.php index f6d75436b9..a0ac6850a6 100644 --- a/inc/install-functions.php +++ b/inc/install-functions.php @@ -10,13 +10,8 @@ * -------------------------------------------------------------------- * * Kurzbeschreibung : Funktionen fuer die Installationsroutine * * -------------------------------------------------------------------- * - * $Revision:: $ * - * $Date:: $ * - * $Tag:: 0.2.1-FINAL $ * - * $Author:: $ * - * -------------------------------------------------------------------- * * Copyright (c) 2003 - 2009 by Roland Haeder * - * Copyright (c) 2009 - 2012 by Mailer Developer Team * + * Copyright (c) 2009 - 2015 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 +31,7 @@ ************************************************************************/ // Some security stuff... -if ((!defined('__SECURITY')) || (!isInstallationPhase())) { +if ((!defined('__SECURITY')) || (!isInstaller())) { die(); } // END - if @@ -68,11 +63,21 @@ 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" -function doInstallWriteLocalConfigurationFile ($path, $url, $title, $slogan, $email, $noPassword, $writeFooter, $backLink, $databaseHost, $databaseName, $databaseLogin, $databasePassword, $databasePrefix, $databaseType, $smtpHost, $smtpUser, $smtpPassword) { +function doInstallWriteLocalConfigurationFile ($path, $url, $title, $slogan, $email, $noPassword, $writeFooter, $backLink, $databaseHost, $databaseName, $databaseLogin, $databasePassword, $databasePrefix, $tableType, $databaseExtension, $smtpHost, $smtpUser, $smtpPassword) { // Copy the config template and verify it copyFileVerified($path . 'inc/config-local.php.dist', $path . getCachePath() . 'config-local.php', 0644); @@ -100,7 +105,8 @@ function doInstallWriteLocalConfigurationFile ($path, $url, $title, $slogan, $em changeDataInLocalConfigurationFile('MYSQL-LOGIN', " 'login' => '", "',", $databaseLogin, 0); changeDataInLocalConfigurationFile('MYSQL-PASSWORD', " 'password' => '", "',", $databasePassword, 0); changeDataInLocalConfigurationFile('MYSQL-PREFIX', "setConfigEntry('_MYSQL_PREFIX', '", "');", $databasePrefix, 0); - changeDataInLocalConfigurationFile('TABLE-TYPE', "setConfigEntry('_TABLE_TYPE', '", "');", $databaseType, 0); + changeDataInLocalConfigurationFile('TABLE-TYPE', "setConfigEntry('_TABLE_TYPE', '", "');", $tableType, 0); + changeDataInLocalConfigurationFile('DATABASE-TYPE', "setConfigEntry('_DB_TYPE', '", "');", $databaseExtension, 0); changeDataInLocalConfigurationFile('SMTP-HOSTNAME', "setConfigEntry('SMTP_HOSTNAME', '", "');", $smtpHost, 0); changeDataInLocalConfigurationFile('SMTP-USER', "setConfigEntry('SMTP_USER', '", "');", $smtpUser, 0); changeDataInLocalConfigurationFile('SMTP-PASSWORD', "setConfigEntry('SMTP_PASSWORD', '", "');", $smtpPassword, 0); @@ -141,7 +147,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 +160,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; @@ -183,12 +188,58 @@ function generateInstallerFooterNavigation () { function generateInstallerDatabaseTypeOptions () { return generateOptions( '/ARRAY/', - array('MyISAM', 'InnoDB'), - array('{--INSTALLER_TABLE_TYPE_MYISAM--}', '{--INSTALLER_TABLE_TYPE_INNODB--}'), + array( + 'MyISAM', + 'InnoDB' + ), + array( + '{--INSTALLER_TABLE_TYPE_MYISAM--}', + '{--INSTALLER_TABLE_TYPE_INNODB--}' + ), getSession('mysql_engine') ); } +// Generate an option list for database extensions for given default value +function generateInstallerDatabaseExtensionOptions () { + // Init all arrays + $keys = array(); + $values = array(); + $foundExtensions = array(); + + // Scan directory + $drivers = getArrayFromDirectory('inc/db/', 'lib-', FALSE, FALSE); + + // Remove prefix + extension + foreach ($drivers as $key => $driver) { + // Remove driver + $drivers[$key] = substr($driver, 4, -4); + + // Is the corresponding extension loaded? + if (isPhpExtensionLoaded($drivers[$key])) { + // Then add it + array_push($foundExtensions, $drivers[$key]); + } // END - if + } // END - foreach + + // Generate list for keys/values ("translations") + foreach ($foundExtensions as $extension) { + // Use it as direct key + array_push($keys, $extension); + + // Add "translation" function around it as value + array_push($values, '{%pipe,translatePhpExtension=' . $extension . '%}'); + } // END - if + + // Get a directory list + return generateOptions( + '/ARRAY/', + $keys, + $values, + getSession('database_extension') + ); +} + // Generate an option list for output mode types for given default value function generateInstallerOutputModeOptions ($defaultValue) { return generateOptions( @@ -220,7 +271,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 +329,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 +346,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 +407,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 @@ -423,7 +474,7 @@ function isInstallerBaseUrlValid ($value) { ($value == getUrl()) || ( // Starts with http:// or https:// ? - ((substr($value, 0, 7) == 'http://') || (substr($value, 0, 8) == 'https://')) + (isFullQualifiedUrl($value)) && // Has no trailing slash? (substr($value, -1, 1) != '/') @@ -468,10 +519,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 @@ -510,6 +563,15 @@ function isInstallerMysqlEngineValid ($value) { return $isValid; } +// Call-back function to check validity of 'database_extension' +function isInstallerDatabaseExtensionValid ($value) { + // This value must be 'mysql' or 'mysqli' + $isValid = in_array($value, array('mysql', 'mysqli')); + + // Return it + return $isValid; +} + // Call-back function to check validity of 'mysql_dbase' function isInstallerMysqlDbaseValid ($value) { // This value must not be empty @@ -541,6 +603,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 +739,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 +754,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 +780,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 +816,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 +872,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 +888,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 +996,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] ?>