EOS; $confFirst = array(); $confFirst['site_url'] = array( name => "Site URL", ex => "http://www.mydomain.com/path/", desc => "Your site URL here (backslash at the end required)", def => "http://", def_exp => ' $str = "http://".$_SERVER[\'HTTP_HOST\'].$_SERVER[\'PHP_SELF\']; return preg_replace("/install\/(index\.php$)/","",$str);', check => 'return strlen($arg0) >= 10 ? true : false;' ); $confFirst['dir_root'] = array( name => "Directory root", ex => "/path/to/your/script/files/", desc => "Path to directory where your php script files stored.", def_exp => ' $str = rtrim($_SERVER[\'DOCUMENT_ROOT\'], \'/\').$_SERVER[\'PHP_SELF\']; return preg_replace("/install\/(index\.php$)/","",$str);', check => 'return strlen($arg0) >= 1 ? true : false;' ); $confFirst['dir_php'] = array( name => "Path to php binary", ex => "/usr/local/bin/php", desc => "You should specify full path to your PHP interpreter here.", def => "/usr/local/bin/php", def_exp => " if ( file_exists(\"/usr/local/bin/php\") ) return \"/usr/local/bin/php\"; \$fp = popen ( \"whereis php\", \"r\"); if ( \$fp ) { \$s = fgets(\$fp); \$s = sscanf(\$s, \"php: %s\"); if ( file_exists(\"\$s[0]\") ) return \"\$s[0]\"; } return '';", check => 'return strlen($arg0) >= 7 ? true : false;' ); $confFirst['dir_mogrify'] = array( name => "Path to mogrify", ex => "/usr/local/bin/mogrify", desc => "If mogrify binary doesn't exist please install ImageMagick", def => "/usr/local/bin/mogrify", def_exp => " if ( file_exists(\"/usr/X11R6/bin/mogrify\") ) return \"/usr/X11R6/bin/mogrify\"; if ( file_exists(\"/usr/local/bin/mogrify\") ) return \"/usr/local/bin/mogrify\"; if ( file_exists(\"/usr/bin/mogrify\") ) return \"/usr/bin/mogrify\"; if ( file_exists(\"/usr/local/X11R6/bin/mogrify\") ) return \"/usr/local/X11R6/bin/mogrify\"; if ( file_exists(\"/usr/bin/X11/mogrify\") ) return \"/usr/bin/X11/mogrify\"; return '';", check => 'return strlen($arg0) >= 7 ? true : false;' ); $confFirst['dir_convert'] = array( name => "Path to convert", ex => "/usr/local/bin/convert", desc => "If convert binary doesn't exist please install ImageMagick", def => "/usr/local/bin/convert", def_exp => " if ( file_exists(\"/usr/X11R6/bin/convert\") ) return \"/usr/X11R6/bin/convert\"; if ( file_exists(\"/usr/local/bin/convert\") ) return \"/usr/local/bin/convert\"; if ( file_exists(\"/usr/bin/convert\") ) return \"/usr/bin/convert\"; if ( file_exists(\"/usr/local/X11R6/bin/convert\") ) return \"/usr/local/X11R6/bin/convert\"; if ( file_exists(\"/usr/bin/X11/convert\") ) return \"/usr/bin/X11/convert\"; return '';", check => 'return strlen($arg0) >= 7 ? true : false;' ); $confFirst['dir_composite'] = array( name => "Path to composite", ex => "/usr/local/bin/composite", desc => "If composite binary doesn't exist please install ImageMagick", def => "/usr/local/bin/composite", def_exp => " if ( file_exists(\"/usr/X11R6/bin/composite\") ) return \"/usr/X11R6/bin/composite\"; if ( file_exists(\"/usr/local/bin/composite\") ) return \"/usr/local/bin/composite\"; if ( file_exists(\"/usr/bin/composite\") ) return \"/usr/bin/composite\"; if ( file_exists(\"/usr/local/X11R6/bin/composite\") ) return \"/usr/local/X11R6/bin/composite\"; if ( file_exists(\"/usr/bin/X11/composite\") ) return \"/usr/bin/X11/composite\"; return '';", check => 'return strlen($arg0) >= 7 ? true : false;' ); $aDbConf = array(); $aDbConf['sql_file'] = array( name => "SQL file", ex => "/home/dolphin/public_html/install/sql/vXX.sql", desc => "SQL file location", def => "./sql/vXX.sql", def_exp => ' if ( !( $dir = opendir( "sql/" ) ) ) return ""; while (false !== ($file = readdir($dir))) { if ( substr($file,-3) != \'sql\' ) continue; closedir( $dir ); return "./sql/$file"; } closedir( $dir ); return "";', check => 'return strlen($arg0) >= 4 ? true : false;' ); $aDbConf['db_host'] = array( name => "Database host name", ex => "localhost", desc => "Your MySQL database host name here.", def => "localhost", check => 'return strlen($arg0) >= 1 ? true : false;' ); $aDbConf['db_port'] = array( name => "Database host port number", ex => "5506", desc => "Leave blank or specify MySQL Database host port number.", def => "", check => '' ); $aDbConf['db_sock'] = array( name => "Database socket path", ex => "/tmp/mysql50.sock", desc => "Leave blank or specify MySQL Database socket path.", def => "", check => '' ); $aDbConf['db_name'] = array( name => "Database name", ex => "YourDatabaseName", desc => "Your MySQL database name here.", check => 'return strlen($arg0) >= 1 ? true : false;' ); $aDbConf['db_user'] = array( name => "Database user", ex => "YourName", desc => "Your MySQL database read/write user name here.", check => 'return strlen($arg0) >= 1 ? true : false;' ); $aDbConf['db_password'] = array( name => "Database password", ex => "YourPassword", desc => "Your MySQL database password here.", check => 'return strlen($arg0) >= 0 ? true : false;' ); $aGeneral = array(); $aGeneral['site_title'] = array( name => "Site Title", ex => "The Best Community", desc => "The name of your site", check => 'return strlen($arg0) >= 1 ? true : false;' ); $aGeneral['site_desc'] = array( name => "Site Description", ex => "The place to find new friends, communicate and have fun.", desc => "Meta description of your site", check => 'return strlen($arg0) >= 1 ? true : false;' ); $aGeneral['site_email'] = array( name => "Site e-mail", ex => "your@email.here", desc => "Your site e-mail.", check => 'return strlen($arg0) > 0 AND strstr($arg0,"@") ? true : false;' ); $aGeneral['notify_email'] = array( name => "Notify e-mail", ex => "your@email.here", desc => "Envelope \"From:\" address for notification messages", check => 'return strlen($arg0) > 0 AND strstr($arg0,"@") ? true : false;' ); $aGeneral['bug_report_email'] = array( name => "Bug report email", ex => "your@email.here", desc => "Your email for receiving bug reports.", check => 'return strlen($arg0) > 0 AND strstr($arg0,"@") ? true : false;' ); $aGeneral['admin_username'] = array( name => "Admin Username", ex => "admin", desc => "Specify the admin name here", check => 'return strlen($arg0) >= 1 ? true : false;' ); $aGeneral['admin_password'] = array( name => "Admin Password", ex => "dolphin", desc => "Specify the admin password here", check => 'return strlen($arg0) >= 1 ? true : false;' ); $aNonDeletableModules = array( 'boonex/shared_photo/', ); $aTemporalityWritableFolders = array( 'inc', ); /*----------Vars----------------*/ /*------------------------------*/ $sAction = $_REQUEST['action']; $sError = ''; define('BX_SKIP_INSTALL_CHECK', true); // -------------------------------------------- if ($sAction=='step6' || $sAction=='step7' || $sAction=='compile_languages') { require_once('../inc/header.inc.php' ); require_once( BX_DIRECTORY_PATH_INC . 'db.inc.php' ); require_once( BX_DIRECTORY_PATH_INC . 'design.inc.php' ); } // -------------------------------------------- require_once('../inc/classes/BxDolIO.php'); $sInstallPageContent = InstallPageContent( $sError ); mb_internal_encoding('UTF-8'); echo PageHeader( $sAction, $sError ); echo $sInstallPageContent; echo PageFooter( $sAction ); function InstallPageContent(&$sError) { global $aConf, $confFirst, $aDbConf, $aGeneral; $sRet = ''; switch ($_REQUEST['action']) { case 'compile_languages': performInstallLanguages(); $sRet .= 'Default Dolphin language was recompiled'; break; /*case 'step8': $sRet .= genMainDolphinPage(); break; case 'step7': $sInstallLog = ''; if ($_REQUEST['sub_action']=='install_modules') { if (is_array($_POST['pathes']) && count($_POST['pathes'])>0) { $oInstallerUi = new BxDolInstallerUi(); $sInstallLog = $oInstallerUi->actionInstall($_POST['pathes']); } } $sRet .= genInstallModulesPage($sInstallLog); break;*/ case 'step7': $sRet .= genMainDolphinPage(); break; case 'step6': $sErrorMessage = checkPostInstallPermissions($sError); $sRet .= (strlen($sErrorMessage)) ? genPostInstallPermissionTable($sErrorMessage) : genMainDolphinPage(); break; case 'step5': $sRet .= genPostInstallPermissionTable(); break; case 'step4': $sErrorMessage = checkConfigArray($aGeneral, $sError); $sRet .= (strlen($sErrorMessage)) ? genSiteGeneralConfig($sErrorMessage) : genInstallationProcessPage(); break; case 'step3': $sErrorMessage = checkConfigArray($aDbConf, $sError); $sErrorMessage .= CheckSQLParams(); $sRet .= (strlen($sErrorMessage)) ? genDatabaseConfig($sErrorMessage) : genSiteGeneralConfig(); break; case 'step2': $sErrorMessage = checkConfigArray($confFirst, $sError); $sRet .= (strlen($sErrorMessage)) ? genPathCheckingConfig($sErrorMessage) : genDatabaseConfig(); break; case 'step1': $sErrorMessage = checkPreInstallPermission($sError); $sRet .= (strlen($sErrorMessage)) ? genPreInstallPermissionTable($sErrorMessage) : genPathCheckingConfig(); break; case 'preInstall': $sRet .= genPreInstallPermissionTable(); break; default: $sRet .= StartInstall(); break; } return $sRet; } function performInstallLanguages() { db_res("TRUNCATE TABLE `sys_localization_languages`"); db_res("TRUNCATE TABLE `sys_localization_keys`"); db_res("TRUNCATE TABLE `sys_localization_strings`"); if (!($sLangsDir = opendir(BX_DIRECTORY_PATH_ROOT . 'install/langs/'))) return; while (false !== ($sFilename = readdir($sLangsDir))) { if (substr($sFilename,-3) == 'php') { //$sLangName = substr($sFilename,-6, 2); unset($LANG); unset($LANG_INFO); require_once(BX_DIRECTORY_PATH_ROOT . 'install/langs/' . $sFilename); walkThroughLanguage($LANG, $LANG_INFO); } } closedir ($sLangsDir); compileLanguage(); } function walkThroughLanguage($aLanguage, $aLangInfo) { $sLangName = $aLangInfo['Name']; $sLangFlag = $aLangInfo['Flag']; $sLangTitle = $aLangInfo['Title']; $sInsertLanguageSQL = "INSERT INTO `sys_localization_languages` VALUES (NULL, '{$sLangName}', '{$sLangFlag}', '{$sLangTitle}')"; db_res($sInsertLanguageSQL); $iLangKey = db_last_id(); foreach ($aLanguage as $sKey => $sValue) { $sDqKey = str_replace("'", "''", $sKey); $sDqValue = str_replace("'", "''", $sValue); $iExistedKey = (int)db_value("SELECT `ID` FROM `sys_localization_keys` WHERE `Key`='{$sDqKey}'"); if ($iExistedKey>0) { //Key existed, no need insert key } else { $sInsertKeySQL = "INSERT INTO `sys_localization_keys` VALUES(NULL, 1, '{$sDqKey}')"; db_res($sInsertKeySQL); $iExistedKey = db_last_id(); } $sInsertValueSQL = "INSERT INTO `sys_localization_strings` VALUES({$iExistedKey}, {$iLangKey}, '{$sDqValue}');"; db_res($sInsertValueSQL); } } function genInstallModulesPage($sErrorMessage = '') { global $aNonDeletableModules; $sCurPage = $_SERVER['PHP_SELF']; if ($_REQUEST['sub_action']!='install_modules') { performInstallLanguages(); } $sErrors = printInstallError($sErrorMessage); $oInstallerUi = new BxDolInstallerUi(); $aAdditionalInputs['hidden_sub_action'] = array( 'type' => 'hidden', 'name' => 'sub_action', 'value' => 'install_modules' ); $aAdditionalInputs['hidden_action'] = array( 'type' => 'hidden', 'name' => 'action', 'value' => 'step7' ); $sNotInstalled = $oInstallerUi->getNotInstalled($aAdditionalInputs /*, $aNonDeletableModules*/); //module_not_install_form $sSkipStep = ''; if ($_REQUEST['sub_action']=='install_modules') { $sSkipStep = <<
EOS; $confFirst = array(); $confFirst['site_url'] = array( name => "Site URL", ex => "http://www.mydomain.com/path/", desc => "Your site URL here (backslash at the end required)", def => "http://", def_exp => ' $str = "http://".$_SERVER[\'HTTP_HOST\'].$_SERVER[\'PHP_SELF\']; return preg_replace("/install\/(index\.php$)/","",$str);', check => 'return strlen($arg0) >= 10 ? true : false;' ); $confFirst['dir_root'] = array( name => "Directory root", ex => "/path/to/your/script/files/", desc => "Path to directory where your php script files stored.", def_exp => ' $str = rtrim($_SERVER[\'DOCUMENT_ROOT\'], \'/\').$_SERVER[\'PHP_SELF\']; return preg_replace("/install\/(index\.php$)/","",$str);', check => 'return strlen($arg0) >= 1 ? true : false;' ); $confFirst['dir_php'] = array( name => "Path to php binary", ex => "/usr/local/bin/php", desc => "You should specify full path to your PHP interpreter here.", def => "/usr/local/bin/php", def_exp => " if ( file_exists(\"/usr/local/bin/php\") ) return \"/usr/local/bin/php\"; \$fp = popen ( \"whereis php\", \"r\"); if ( \$fp ) { \$s = fgets(\$fp); \$s = sscanf(\$s, \"php: %s\"); if ( file_exists(\"\$s[0]\") ) return \"\$s[0]\"; } return '';", check => 'return strlen($arg0) >= 7 ? true : false;' ); $confFirst['dir_mogrify'] = array( name => "Path to mogrify", ex => "/usr/local/bin/mogrify", desc => "If mogrify binary doesn't exist please install ImageMagick", def => "/usr/local/bin/mogrify", def_exp => " if ( file_exists(\"/usr/X11R6/bin/mogrify\") ) return \"/usr/X11R6/bin/mogrify\"; if ( file_exists(\"/usr/local/bin/mogrify\") ) return \"/usr/local/bin/mogrify\"; if ( file_exists(\"/usr/bin/mogrify\") ) return \"/usr/bin/mogrify\"; if ( file_exists(\"/usr/local/X11R6/bin/mogrify\") ) return \"/usr/local/X11R6/bin/mogrify\"; if ( file_exists(\"/usr/bin/X11/mogrify\") ) return \"/usr/bin/X11/mogrify\"; return '';", check => 'return strlen($arg0) >= 7 ? true : false;' ); $confFirst['dir_convert'] = array( name => "Path to convert", ex => "/usr/local/bin/convert", desc => "If convert binary doesn't exist please install ImageMagick", def => "/usr/local/bin/convert", def_exp => " if ( file_exists(\"/usr/X11R6/bin/convert\") ) return \"/usr/X11R6/bin/convert\"; if ( file_exists(\"/usr/local/bin/convert\") ) return \"/usr/local/bin/convert\"; if ( file_exists(\"/usr/bin/convert\") ) return \"/usr/bin/convert\"; if ( file_exists(\"/usr/local/X11R6/bin/convert\") ) return \"/usr/local/X11R6/bin/convert\"; if ( file_exists(\"/usr/bin/X11/convert\") ) return \"/usr/bin/X11/convert\"; return '';", check => 'return strlen($arg0) >= 7 ? true : false;' ); $confFirst['dir_composite'] = array( name => "Path to composite", ex => "/usr/local/bin/composite", desc => "If composite binary doesn't exist please install ImageMagick", def => "/usr/local/bin/composite", def_exp => " if ( file_exists(\"/usr/X11R6/bin/composite\") ) return \"/usr/X11R6/bin/composite\"; if ( file_exists(\"/usr/local/bin/composite\") ) return \"/usr/local/bin/composite\"; if ( file_exists(\"/usr/bin/composite\") ) return \"/usr/bin/composite\"; if ( file_exists(\"/usr/local/X11R6/bin/composite\") ) return \"/usr/local/X11R6/bin/composite\"; if ( file_exists(\"/usr/bin/X11/composite\") ) return \"/usr/bin/X11/composite\"; return '';", check => 'return strlen($arg0) >= 7 ? true : false;' ); $aDbConf = array(); $aDbConf['sql_file'] = array( name => "SQL file", ex => "/home/dolphin/public_html/install/sql/vXX.sql", desc => "SQL file location", def => "./sql/vXX.sql", def_exp => ' if ( !( $dir = opendir( "sql/" ) ) ) return ""; while (false !== ($file = readdir($dir))) { if ( substr($file,-3) != \'sql\' ) continue; closedir( $dir ); return "./sql/$file"; } closedir( $dir ); return "";', check => 'return strlen($arg0) >= 4 ? true : false;' ); $aDbConf['db_host'] = array( name => "Database host name", ex => "localhost", desc => "Your MySQL database host name here.", def => "localhost", check => 'return strlen($arg0) >= 1 ? true : false;' ); $aDbConf['db_port'] = array( name => "Database host port number", ex => "5506", desc => "Leave blank or specify MySQL Database host port number.", def => "", check => '' ); $aDbConf['db_sock'] = array( name => "Database socket path", ex => "/tmp/mysql50.sock", desc => "Leave blank or specify MySQL Database socket path.", def => "", check => '' ); $aDbConf['db_name'] = array( name => "Database name", ex => "YourDatabaseName", desc => "Your MySQL database name here.", check => 'return strlen($arg0) >= 1 ? true : false;' ); $aDbConf['db_user'] = array( name => "Database user", ex => "YourName", desc => "Your MySQL database read/write user name here.", check => 'return strlen($arg0) >= 1 ? true : false;' ); $aDbConf['db_password'] = array( name => "Database password", ex => "YourPassword", desc => "Your MySQL database password here.", check => 'return strlen($arg0) >= 0 ? true : false;' ); $aGeneral = array(); $aGeneral['site_title'] = array( name => "Site Title", ex => "The Best Community", desc => "The name of your site", check => 'return strlen($arg0) >= 1 ? true : false;' ); $aGeneral['site_desc'] = array( name => "Site Description", ex => "The place to find new friends, communicate and have fun.", desc => "Meta description of your site", check => 'return strlen($arg0) >= 1 ? true : false;' ); $aGeneral['site_email'] = array( name => "Site e-mail", ex => "your@email.here", desc => "Your site e-mail.", check => 'return strlen($arg0) > 0 AND strstr($arg0,"@") ? true : false;' ); $aGeneral['notify_email'] = array( name => "Notify e-mail", ex => "your@email.here", desc => "Envelope \"From:\" address for notification messages", check => 'return strlen($arg0) > 0 AND strstr($arg0,"@") ? true : false;' ); $aGeneral['bug_report_email'] = array( name => "Bug report email", ex => "your@email.here", desc => "Your email for receiving bug reports.", check => 'return strlen($arg0) > 0 AND strstr($arg0,"@") ? true : false;' ); $aGeneral['admin_username'] = array( name => "Admin Username", ex => "admin", desc => "Specify the admin name here", check => 'return strlen($arg0) >= 1 ? true : false;' ); $aGeneral['admin_password'] = array( name => "Admin Password", ex => "dolphin", desc => "Specify the admin password here", check => 'return strlen($arg0) >= 1 ? true : false;' ); $aNonDeletableModules = array( 'boonex/shared_photo/', ); $aTemporalityWritableFolders = array( 'inc', ); /*----------Vars----------------*/ /*------------------------------*/ $sAction = $_REQUEST['action']; $sError = ''; define('BX_SKIP_INSTALL_CHECK', true); // -------------------------------------------- if ($sAction=='step6' || $sAction=='step7' || $sAction=='compile_languages') { require_once('../inc/header.inc.php' ); require_once( BX_DIRECTORY_PATH_INC . 'db.inc.php' ); require_once( BX_DIRECTORY_PATH_INC . 'design.inc.php' ); } // -------------------------------------------- require_once('../inc/classes/BxDolIO.php'); $sInstallPageContent = InstallPageContent( $sError ); mb_internal_encoding('UTF-8'); echo PageHeader( $sAction, $sError ); echo $sInstallPageContent; echo PageFooter( $sAction ); function InstallPageContent(&$sError) { global $aConf, $confFirst, $aDbConf, $aGeneral; $sRet = ''; switch ($_REQUEST['action']) { case 'compile_languages': performInstallLanguages(); $sRet .= 'Default Dolphin language was recompiled'; break; /*case 'step8': $sRet .= genMainDolphinPage(); break; case 'step7': $sInstallLog = ''; if ($_REQUEST['sub_action']=='install_modules') { if (is_array($_POST['pathes']) && count($_POST['pathes'])>0) { $oInstallerUi = new BxDolInstallerUi(); $sInstallLog = $oInstallerUi->actionInstall($_POST['pathes']); } } $sRet .= genInstallModulesPage($sInstallLog); break;*/ case 'step7': $sRet .= genMainDolphinPage(); break; case 'step6': $sErrorMessage = checkPostInstallPermissions($sError); $sRet .= (strlen($sErrorMessage)) ? genPostInstallPermissionTable($sErrorMessage) : genMainDolphinPage(); break; case 'step5': $sRet .= genPostInstallPermissionTable(); break; case 'step4': $sErrorMessage = checkConfigArray($aGeneral, $sError); $sRet .= (strlen($sErrorMessage)) ? genSiteGeneralConfig($sErrorMessage) : genInstallationProcessPage(); break; case 'step3': $sErrorMessage = checkConfigArray($aDbConf, $sError); $sErrorMessage .= CheckSQLParams(); $sRet .= (strlen($sErrorMessage)) ? genDatabaseConfig($sErrorMessage) : genSiteGeneralConfig(); break; case 'step2': $sErrorMessage = checkConfigArray($confFirst, $sError); $sRet .= (strlen($sErrorMessage)) ? genPathCheckingConfig($sErrorMessage) : genDatabaseConfig(); break; case 'step1': $sErrorMessage = checkPreInstallPermission($sError); $sRet .= (strlen($sErrorMessage)) ? genPreInstallPermissionTable($sErrorMessage) : genPathCheckingConfig(); break; case 'preInstall': $sRet .= genPreInstallPermissionTable(); break; default: $sRet .= StartInstall(); break; } return $sRet; } function performInstallLanguages() { db_res("TRUNCATE TABLE `sys_localization_languages`"); db_res("TRUNCATE TABLE `sys_localization_keys`"); db_res("TRUNCATE TABLE `sys_localization_strings`"); if (!($sLangsDir = opendir(BX_DIRECTORY_PATH_ROOT . 'install/langs/'))) return; while (false !== ($sFilename = readdir($sLangsDir))) { if (substr($sFilename,-3) == 'php') { //$sLangName = substr($sFilename,-6, 2); unset($LANG); unset($LANG_INFO); require_once(BX_DIRECTORY_PATH_ROOT . 'install/langs/' . $sFilename); walkThroughLanguage($LANG, $LANG_INFO); } } closedir ($sLangsDir); compileLanguage(); } function walkThroughLanguage($aLanguage, $aLangInfo) { $sLangName = $aLangInfo['Name']; $sLangFlag = $aLangInfo['Flag']; $sLangTitle = $aLangInfo['Title']; $sInsertLanguageSQL = "INSERT INTO `sys_localization_languages` VALUES (NULL, '{$sLangName}', '{$sLangFlag}', '{$sLangTitle}')"; db_res($sInsertLanguageSQL); $iLangKey = db_last_id(); foreach ($aLanguage as $sKey => $sValue) { $sDqKey = str_replace("'", "''", $sKey); $sDqValue = str_replace("'", "''", $sValue); $iExistedKey = (int)db_value("SELECT `ID` FROM `sys_localization_keys` WHERE `Key`='{$sDqKey}'"); if ($iExistedKey>0) { //Key existed, no need insert key } else { $sInsertKeySQL = "INSERT INTO `sys_localization_keys` VALUES(NULL, 1, '{$sDqKey}')"; db_res($sInsertKeySQL); $iExistedKey = db_last_id(); } $sInsertValueSQL = "INSERT INTO `sys_localization_strings` VALUES({$iExistedKey}, {$iLangKey}, '{$sDqValue}');"; db_res($sInsertValueSQL); } } function genInstallModulesPage($sErrorMessage = '') { global $aNonDeletableModules; $sCurPage = $_SERVER['PHP_SELF']; if ($_REQUEST['sub_action']!='install_modules') { performInstallLanguages(); } $sErrors = printInstallError($sErrorMessage); $oInstallerUi = new BxDolInstallerUi(); $aAdditionalInputs['hidden_sub_action'] = array( 'type' => 'hidden', 'name' => 'sub_action', 'value' => 'install_modules' ); $aAdditionalInputs['hidden_action'] = array( 'type' => 'hidden', 'name' => 'action', 'value' => 'step7' ); $sNotInstalled = $oInstallerUi->getNotInstalled($aAdditionalInputs /*, $aNonDeletableModules*/); //module_not_install_form $sSkipStep = ''; if ($_REQUEST['sub_action']=='install_modules') { $sSkipStep = <<