]> git.mxchange.org Git - mailer.git/blobdiff - inc/ajax/ajax_installer.php
Sometimes a whole array needs to be set in session (installer).
[mailer.git] / inc / ajax / ajax_installer.php
index 108fd3e9135b6577fc0aac3d6bc6d359b0166e3b..e0fd4e8c6049df81d8d50b22a6e9e595d1fbc27e 100644 (file)
  * -------------------------------------------------------------------- *
  * Kurzbeschreibung  : AJAX-bezogene Funktionen fuer Installer          *
  * -------------------------------------------------------------------- *
- * $Revision::                                                        $ *
- * $Date::                                                            $ *
- * $Tag:: 0.2.1-FINAL                                                 $ *
- * $Author::                                                          $ *
- * -------------------------------------------------------------------- *
  * Copyright (c) 2003 - 2009 by Roland Haeder                           *
  * Copyright (c) 2009 - 2013 by Mailer Developer Team                   *
  * For more information visit: http://mxchange.org                      *
@@ -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
@@ -60,25 +57,29 @@ function establishAjaxInstallerDatabaseLink () {
        $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 (!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')) {
@@ -145,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');
@@ -187,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
@@ -315,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
@@ -354,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
 }
 
@@ -387,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
 }
 
@@ -437,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
 }
 
@@ -464,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
@@ -579,6 +617,9 @@ function doAjaxInstallerStepImportTablesSql () {
 
        // Close SQL link
        sqlCloseLink(__FUNCTION__, __LINE__);
+
+       // All fine
+       return TRUE;
 }
 
 // Call-back function to import menu SQL file
@@ -603,6 +644,9 @@ function doAjaxInstallerStepImportMenuSql () {
 
        // Close SQL link
        sqlCloseLink(__FUNCTION__, __LINE__);
+
+       // All fine
+       return TRUE;
 }
 
 // Call-back function to install some important extensions
@@ -624,24 +668,44 @@ function doAjaxInstallerStepInstallExtensions () {
 
        // "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(
@@ -659,6 +723,7 @@ function doAjaxInstallerStepWriteLocalConfig () {
                getSession('mysql_password1'),
                getSession('mysql_prefix'),
                getSession('mysql_engine'),
+               getSession('database_extension'),
                getSession('smtp_host'),
                getSession('smtp_user'),
                getSession('smtp_password1')
@@ -667,6 +732,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]