* -------------------------------------------------------------------- *
* 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 *
************************************************************************/
// 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
// 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
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'));
}
// 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')) {
// 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)) {
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');
// 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
(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
// 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
}
// 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
}
// 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
}
// 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
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
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
// 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(
getSession('mysql_password1'),
getSession('mysql_prefix'),
getSession('mysql_engine'),
+ getSession('database_extension'),
getSession('smtp_host'),
getSession('smtp_user'),
getSession('smtp_password1')
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]