X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=inc%2Finstall-functions.php;h=5942280ffa3af7a7728bffd4338c51e71aa0673e;hb=082398d5872064d3911c62b085e8a134569f626b;hp=ef8ae8debbb85321c92c052fea8a83a3ca0f6156;hpb=36e9024f652b20497a1e79d9c67b3e2b56806c9c;p=mailer.git diff --git a/inc/install-functions.php b/inc/install-functions.php index ef8ae8debb..5942280ffa 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" @@ -109,7 +119,7 @@ function doInstallWriteLocalConfigurationFile ($path, $url, $title, $slogan, $em changeDataInLocalConfigurationFile('SITE-KEY', "setConfigEntry('SITE_KEY', '", "');", generatePassword(50), 0); // Script is now installed - changeDataInLocalConfigurationFile('INSTALLED', "setConfigEntry('MAILER_INSTALLED', '", "');", 'Y', 0); + return changeDataInLocalConfigurationFile('INSTALLED', "setConfigEntry('MAILER_INSTALLED', '", "');", 'Y', 0); } // Adds a given template with content to install output stream @@ -220,7 +230,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 @@ -253,7 +263,7 @@ function isInstallerDataValid (&$saveStatus, $key, $value) { } // END - if // Then call it back - $isValid = (bool) call_user_func($callbackName, trim($value)); + $isValid = (bool) call_user_func($callbackName, $value); // Is it not valid? //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'key=' . $key . ',value=' . $value . ',isValid=' . intval($isValid)); @@ -278,10 +288,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 +305,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 @@ -335,6 +345,50 @@ function addKeyValueToInstallerOverviewGroup ($key, $value) { $GLOBALS['installer_overview'][$group][$key] = $value; } +//----------------------------------------------------------------------------- +// Template call-back functions +//----------------------------------------------------------------------------- + +// ----------------- Extensions ----------------- + +// Generates (and returns) a table from all extensions +function generateInstallerExtensionTable () { + // Generate extension list + $extensions = loadAllExtensionsByTemplate(); + + // "Walk" through all + $OUT = ''; + foreach ($extensions as $extension) { + // Remove prefix + suffix + $ext_name = substr(basename($extension), 4, -4); + + // Is the extension not in development and not admintheme* ? + if ((loadExtension($ext_name, 'test', '0.0.0', TRUE)) && (isExtensionProductive($ext_name)) && (substr($ext_name, 0, 10) != 'admintheme')) { + // Default is not disabled + $disabled = ''; + if (in_array($ext_name, array('sql_patches', 'timezone'))) { + // Always keep this enabled + $disabled = ' disabled="disabled"'; + } // END - if + + // Initialize content array + $content = array( + 'ext_name' => $ext_name, + 'ext_version' => getExtensionVersion($ext_name), + 'checked' => getExtensionSelectedFromSession($ext_name, 'extensions'), + 'disabled' => $disabled, + 'description' => loadTemplate('ext_' . $ext_name, TRUE), + ); + + // Load row template + $OUT .= loadTemplate('install_list_extensions_row', TRUE, $content); + } // END - if + } // END - foreach + + // Load main template + return loadTemplate('install_list_extensions', TRUE, $OUT); +} + //----------------------------------------------------------------------------- // Call-back functions to check validity //----------------------------------------------------------------------------- @@ -424,10 +478,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 @@ -497,6 +553,70 @@ 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!) +function isInstallerSelValid ($value) { + // $value is not an array, is really bad. + if (!is_array($value)) { + // Is no array + reportBug(__FUNCTION__, __LINE__, 'sel,value[]=' . gettype($value) . '!=array'); + } // END - if + + // Add always missing ext-sql_patches + $value['sql_patches'] = '1'; + + // Default is fine + $isValid = TRUE; + + // "Walk" through all extensions + foreach ($value as $ext_name => $sel) { + // Is this extension choosen? + if ($sel != '1') { + // Skip this + continue; + } // END - if + + // Can it be loaded? + $isValid = (($isValid) && (loadExtension($ext_name, 'test', '0.0.0', TRUE))); + } // END - foreach + + // Remove 'sel' from POST data as it cannot be saved + unsetPostRequestElement('sel'); + + // Save it in session (sorry to do that here :( ) + setSession('extensions', implode(':', array_keys($value))); + + // Return result + return $isValid; +} + //----------------------------------------------------------------------------- // Call-back functions to post-check validity //----------------------------------------------------------------------------- @@ -569,11 +689,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'); @@ -581,13 +704,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; @@ -607,17 +730,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; @@ -643,7 +766,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; @@ -699,7 +822,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) { @@ -715,6 +838,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? @@ -774,5 +946,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] ?>