X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=inc%2Fajax%2Fajax_installer.php;h=77cc42b8f2cc19c9346c0e87be5e9b03b4699f4d;hb=refs%2Fheads%2Fserver-0.2.1-FINAL%2Fshipsimu-org;hp=f1e7eb7aaa5d0f55b8119a98cac4fd560e08a8cd;hpb=ca256746fe0757a23df4064824c8fe2087ad5634;p=mailer.git diff --git a/inc/ajax/ajax_installer.php b/inc/ajax/ajax_installer.php index f1e7eb7aaa..77cc42b8f2 100644 --- a/inc/ajax/ajax_installer.php +++ b/inc/ajax/ajax_installer.php @@ -10,13 +10,8 @@ * -------------------------------------------------------------------- * * Kurzbeschreibung : AJAX-bezogene Funktionen fuer Installer * * -------------------------------------------------------------------- * - * $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 - 2016 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,9 @@ ************************************************************************/ // Some security stuff... -if ((!defined('__SECURITY')) || (!isAjaxOutputMode()) || (!isInstallationPhase())) { +if (!defined('__SECURITY')) { + die(); +} elseif ((!isAjaxOutputMode()) || (!isInstaller())) { header('HTTP/1.1 403 Forbidden'); die(json_encode(array('reply_content' => 'Access forbidden'), JSON_FORCE_OBJECT)); } // END - if @@ -48,7 +45,7 @@ if ((!defined('__SECURITY')) || (!isAjaxOutputMode()) || (!isInstallationPhase() // Establish a database link function establishAjaxInstallerDatabaseLink () { // This requires some session data - if (!isSessionDataSet(array('mysql_host', 'mysql_dbase', 'mysql_prefix', 'mysql_login', 'mysql_password1', 'mysql_password2', 'mysql_engine'))) { + if (!isSessionDataSet(array('mysql_host', 'mysql_dbase', 'mysql_prefix', 'mysql_login', 'mysql_password1', 'mysql_password2', 'mysql_engine', 'database_extension'))) { // Some required session data is not set reportBug(__FUNCTION__, __LINE__, 'Required session data for this step not found.'); } // END - if @@ -57,28 +54,32 @@ function establishAjaxInstallerDatabaseLink () { unsetSqlLinkUp(__FUNCTION__, __LINE__); // Establish link - $linkResource = SQL_CONNECT(getSession('mysql_host'), getSession('mysql_login'), getSession('mysql_password1'), __FUNCTION__, __LINE__); + $linkResource = sqlConnectToDatabase(getSession('mysql_host'), getSession('mysql_login'), getSession('mysql_password1'), __FUNCTION__, __LINE__); // Is this a link resource? - if (!is_resource($linkResource)) { + if (!isValidSqlLink($linkResource)) { // Is not a resource reportBug(__FUNCTION__, __LINE__, 'linkResource[]=' . gettype($linkResource) . ', expected: link resource'); - } // END - if + } elseif (!isSqlLinkUp()) { + // SQL link is not up + reportBug(__FUNCTION__, __LINE__, 'Could not bring up SQL link.'); + } // Does selecting the database work? - if (!SQL_SELECT_DB(getSession('mysql_dbase'), __FUNCTION__, __LINE__)) { + if (!sqlSelectDatabase(getSession('mysql_dbase'), __FUNCTION__, __LINE__)) { // Could not be selected reportBug(__FUNCTION__, __LINE__, 'Could not select database ' . getSession('mysql_dbase')); - } elseif ((!isFileReadable(getSession('base_path') . 'install/tables.sql')) || (!isFileReadable(getSession('base_path') . 'install/menu-'.getLanguage().'.sql'))) { + } elseif (!isInstallerSqlsReadable(getSession('base_path'))) { // Installation area not found reportBug(__FUNCTION__, __LINE__, 'SQL dumps not found. Please extract ALL files from the archive or checkout all files out from SVN.'); } elseif (ifFatalErrorsDetected()) { // Some other fatal error occured reportBug(__FUNCTION__, __LINE__, 'Some fatal error detected, please check debug.log for details.'); - } // END - if + } // Set type, prefix from POST data and database name for later queries setConfigEntry('_TABLE_TYPE' , getSession('mysql_engine')); + setConfigEntry('_DB_TYPE' , getSession('database_extension')); setConfigEntry('_MYSQL_PREFIX', getSession('mysql_prefix')); setConfigEntry('__DB_NAME' , getSession('mysql_dbase')); } @@ -90,7 +91,7 @@ function establishAjaxInstallerDatabaseLink () { // Processes AJAX requests for installer function doAjaxProcessInstall () { // 'do' must always be set and installation phase must be true - if (!isInstallationPhase()) { + if (!isInstaller()) { // This shall not happen reportBug(__FUNCTION__, __LINE__, 'This AJAX request handler was called outside the installer.'); } elseif (!isPostRequestElementSet('do')) { @@ -103,6 +104,7 @@ function doAjaxProcessInstall () { // Again we do a call-back, so generate a function name depending on 'do' $callbackName = 'doAjaxInstaller' . capitalizeUnderscoreString(postRequestElement('do')); + $GLOBALS['ajax_callback_function'] = $callbackName; // Is the call-back function there? if (!function_exists($callbackName)) { @@ -144,6 +146,7 @@ function doAjaxInstallerFooterNavigation () { case 'smtp_config': case 'other_config': case 'extensions': + case 'first_admin': array_push($enabledNavigations, 'previous'); case 'welcome': // Only 'next' works for welcome page array_push($enabledNavigations, 'next'); @@ -186,17 +189,20 @@ function doAjaxInstallerDoStep () { // Is the function there? if (function_exists($callbackName)) { // Call it for setting values in session - call_user_func($callbackName); + $status = call_user_func($callbackName); } else { // Log missing functions reportBug(__FUNCTION__, __LINE__, 'Call-back function ' . $callbackName . ' does not exist.'); } - // Set dummy content - setAjaxReplyContent(encodeJson(postRequestElement('step').'=OK')); + // Did the installation step went fine? + if ($status === TRUE) { + // All fine + setAjaxReplyContent(encodeJson(postRequestElement('step') . '=OK')); - // All okay if we reach this point - setHttpStatus('200 OK'); + // All okay if we reach this point + setHttpStatus('200 OK'); + } // END - if } // Processes installer AJAX calls for content-requests @@ -314,7 +320,7 @@ function doAjaxInstallerSaveChanges () { (isInstallerDataValid($saveStatus, $key, $value)) && // And can it be stored in session? - (setSession($key, $value)) + (setSessionCompiled($key, $value)) ); // Save the overall status for below final check @@ -353,31 +359,31 @@ function doAjaxPrepareInstallerBaseData () { // Is 'base_path' not set? if (!isSessionVariableSet('base_path')) { // Then set it from PATH - setSession('base_path', getPath()); + setSessionCompiled('base_path', getPath()); } // END - if // Is 'base_url' not set? if (!isSessionVariableSet('base_url')) { // Then set it from URL - setSession('base_url', getUrl()); + setSessionCompiled('base_url', getUrl()); } // END - if // Is 'main_title' not set? if (!isSessionVariableSet('main_title')) { // Then set it from default main title - setSession('main_title', '{--DEFAULT_MAIN_TITLE--}'); + setSessionCompiled('main_title', compileRawCode(getMessage('DEFAULT_MAIN_TITLE'))); } // END - if // Is 'slogan' not set? if (!isSessionVariableSet('slogan')) { // Then set it from default slogan - setSession('slogan', '{--DEFAULT_SLOGAN--}'); + setSessionCompiled('slogan', compileRawCode(getMessage('DEFAULT_SLOGAN'))); } // END - if // Is 'webmaster' not set? if (!isSessionVariableSet('webmaster')) { // Then set it from default webmaster email address - setSession('webmaster', '{--DEFAULT_WEBMASTER--}'); + setSessionCompiled('webmaster', '{--DEFAULT_WEBMASTER--}'); } // END - if } @@ -386,43 +392,49 @@ function doAjaxPrepareInstallerDatabaseConfig () { // Is 'mysql_host' not set? if (!isSessionVariableSet('mysql_host')) { // Then set it directly - setSession('mysql_host', 'localhost'); + setSessionCompiled('mysql_host', 'localhost'); } // END - if // Is 'mysql_dbase' not set? if (!isSessionVariableSet('mysql_dbase')) { // Then set it directly - setSession('mysql_dbase', 'your_database'); + setSessionCompiled('mysql_dbase', 'your_database'); } // END - if // Is 'mysql_prefix' not set? if (!isSessionVariableSet('mysql_prefix')) { // Then set it directly - setSession('mysql_prefix', 'mailer'); + setSessionCompiled('mysql_prefix', 'mailer'); } // END - if // Is 'mysql_login' not set? if (!isSessionVariableSet('mysql_login')) { // Then set it directly - setSession('mysql_login', 'your_login'); + setSessionCompiled('mysql_login', 'your_login'); } // END - if // Is 'mysql_dbase' not set? if (!isSessionVariableSet('mysql_password1')) { // Then set it directly - setSession('mysql_password1', ''); + setSessionCompiled('mysql_password1', ''); } // END - if // Is 'mysql_password2' not set? if (!isSessionVariableSet('mysql_password2')) { // Then set it directly - setSession('mysql_password2', ''); + setSessionCompiled('mysql_password2', ''); } // END - if // Is 'mysql_engine' not set? if (!isSessionVariableSet('mysql_engine')) { // Then set it directly - setSession('mysql_engine', 'MyISAM'); + setSessionCompiled('mysql_engine', 'MyISAM'); + } // END - if + + // Is 'mysql_engine' not set? + if (!isSessionVariableSet('database_extension')) { + // Then set it directly + setSessionCompiled('database_extension', 'mysqli'); } // END - if } @@ -436,25 +448,25 @@ function doAjaxPrepareInstallerOtherConfig () { // Is 'output_mode' not set? if (!isSessionVariableSet('output_mode')) { // Then set it directly - setSession('output_mode', 'render'); + setSessionCompiled('output_mode', 'render'); } // END - if // Is 'warn_no_pass' not set? if (!isSessionVariableSet('warn_no_pass')) { // Then set it directly - setSession('warn_no_pass', 'Y'); + setSessionCompiled('warn_no_pass', 'Y'); } // END - if // Is 'write_footer' not set? if (!isSessionVariableSet('write_footer')) { // Then set it directly - setSession('write_footer', 'Y'); + setSessionCompiled('write_footer', 'Y'); } // END - if // Is 'enable_backlink' not set? if (!isSessionVariableSet('enable_backlink')) { // Then set it directly - setSession('enable_backlink', 'Y'); + setSessionCompiled('enable_backlink', 'Y'); } // END - if } @@ -463,16 +475,43 @@ function doAjaxPrepareInstallerExtensions () { // Is 'extensions' set? if (!isSessionVariableSet('extensions')) { /* - * At least ext-sql_patches and ext-task should be installed - *(ext-sql_patches is a must!) + * At least ext-admins, ext-sql_patches and ext-task should be installed + * (ext-sql_patches is a must!) */ - setSession('extensions', 'admins:sql_patches:task'); + setSessionCompiled('extensions', 'admins:sql_patches:task'); } elseif (strpos(getSession('extensions'), 'sql_patches') === FALSE) { // Add missing ext-sql_patches - setSession('extensions', getSession('extensions') . ':sql_patches'); + setSessionCompiled('extensions', getSession('extensions') . ':sql_patches'); } } +// Prepare AJAX request 'first_admin' +function doAjaxPrepareInstallerFirstAdmin () { + // Is 'admin_login' set? + if (!isSessionVariableSet('admin_login')) { + // Set it + setSessionCompiled('admin_login', 'admin'); + } // END - if + + // Is 'admin_email' set? + if (!isSessionVariableSet('admin_email')) { + // Set it + setSessionCompiled('admin_email', getSession('webmaster')); + } // END - if + + // Is 'admin_password1' set? + if (!isSessionVariableSet('admin_password1')) { + // Set it + setSessionCompiled('admin_password1', ''); + } // END - if + + // Is 'admin_password2' set? + if (!isSessionVariableSet('admin_password2')) { + // Set it + setSessionCompiled('admin_password2', ''); + } // END - if +} + // Prepare AJAX request 'overview' function doAjaxPrepareInstallerOverview () { // 'tab' must always be set to create a post-check-callback @@ -577,7 +616,10 @@ function doAjaxInstallerStepImportTablesSql () { runFilterChain('run_sqls'); // Close SQL link - SQL_CLOSE(__FUNCTION__, __LINE__); + sqlCloseLink(__FUNCTION__, __LINE__); + + // All fine + return TRUE; } // Call-back function to import menu SQL file @@ -601,7 +643,10 @@ function doAjaxInstallerStepImportMenuSql () { runFilterChain('run_sqls'); // Close SQL link - SQL_CLOSE(__FUNCTION__, __LINE__); + sqlCloseLink(__FUNCTION__, __LINE__); + + // All fine + return TRUE; } // Call-back function to install some important extensions @@ -621,26 +666,52 @@ function doAjaxInstallerStepInstallExtensions () { // Make sure ext-sql_patches is first array_unshift($extensions, 'sql_patches'); + // This takes longer + if (ini_set('max_input_time', 0) === FALSE) { + // Something didn't work + logDebugMessage(__FUNCTION__, __LINE__, 'Cannot set max_input_time to 0.'); + } // END - if + // "Walk" through all extensions foreach ($extensions as $key => $ext_name) { + // Debug message + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'key=' . $key . ',ext_name=' . $ext_name); + // Is ext-sql_patches not at key=0? - if (($key == 0) && ($ext_name == 'sql_patches')) { + if (($ext_name == 'sql_patches') && ($key > 0)) { // Then skip this entry + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Skipping sql_changes at key=' . $key); + continue; + } elseif (isExtensionInstalled($ext_name)) { + // Skip already installed extensions + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Skipping extension ' . $ext_name . ' at key=' . $key . ': Already installed.'); continue; } elseif ((!loadExtension($ext_name, 'test', '0.0.0', TRUE)) || (!registerExtension($ext_name, NULL))) { // Didn't work reportBug(__FUNCTION__, __LINE__, 'Cannot load/register extension ' . $ext_name . '.'); } // END - if } // END - foreach + + // All fine + return TRUE; } // Call-back function to write local configuration file function doAjaxInstallerStepWriteLocalConfig () { // Is all set? - if (!isSessionDataSet(array('base_path', 'base_url', 'main_title', 'slogan', 'webmaster', 'mysql_host', 'mysql_dbase', 'mysql_prefix', 'mysql_login', 'mysql_password1', 'mysql_password2', 'mysql_engine', 'output_mode', 'warn_no_pass', 'write_footer', 'enable_backlink'))) { + if (!isSessionDataSet(array('base_path', 'base_url', 'main_title', 'slogan', 'webmaster', 'mysql_host', 'mysql_dbase', 'mysql_prefix', 'mysql_login', 'mysql_password1', 'mysql_password2', 'mysql_engine', 'database_extension', 'output_mode', 'warn_no_pass', 'write_footer', 'enable_backlink'))) { // Some required session data is not set reportBug(__FUNCTION__, __LINE__, 'Required session data for this step not found.'); - } // END - if + } elseif (isInstalled()) { + // Is already installed = local config written + reportBug(__FUNCTION__, __LINE__, 'Local config file is already written.'); + } elseif (isAdminRegistered()) { + // Admin is already registered + reportBug(__FUNCTION__, __LINE__, 'First administrator account is already registered.'); + } + + // Establish database link + establishAjaxInstallerDatabaseLink(); // Write config file if (!doInstallWriteLocalConfigurationFile( @@ -658,6 +729,7 @@ function doAjaxInstallerStepWriteLocalConfig () { getSession('mysql_password1'), getSession('mysql_prefix'), getSession('mysql_engine'), + getSession('database_extension'), getSession('smtp_host'), getSession('smtp_user'), getSession('smtp_password1') @@ -666,6 +738,36 @@ function doAjaxInstallerStepWriteLocalConfig () { removeFile(getSession('base_path') . getCachePath() . 'config-local.php'); reportBug(__FUNCTION__, __LINE__, 'Did not fully write config-local.php .'); } + + // Change ADMIN_REGISTERED flag + $done = changeDataInLocalConfigurationFile('ADMIN-SETUP', "setConfigEntry('ADMIN_REGISTERED', '", "');", 'Y', 0); + + // All fine + return $done; +} + +// Call-back function to register first admin +function doAjaxInstallerStepRegisterFirstAdmin () { + // Is all set? + if (!isSessionDataSet(array('admin_login', 'admin_email', 'admin_password1', 'admin_password2'))) { + // Some required session data is not set + reportBug(__FUNCTION__, __LINE__, 'Required session data for this step not found.'); + } elseif (isAdminRegistered()) { + // First admin is already registered + reportBug(__FUNCTION__, __LINE__, 'First administrator is already registered.'); + } + + // Establish database link + establishAjaxInstallerDatabaseLink(); + + // Load admin include + loadIncludeOnce('inc/modules/admin/admin-inc.php'); + + // Register first admin + $ret = addAdminAccount(getSession('admin_login'), md5(getSession('admin_password1')), getSession('admin_email'), 'allow'); + + // Did it work? + return ($ret == 'done'); } // [EOF]