diff --git a/setup/ajax.dataloader.php b/setup/ajax.dataloader.php index 4b4b2fadb..df538561a 100644 --- a/setup/ajax.dataloader.php +++ b/setup/ajax.dataloader.php @@ -90,23 +90,6 @@ function FatalErrorCatcher($sOutput) return $sOutput; } -/** - * Helper function to create and administrator account for iTop - * @return boolean true on success, false otherwise - */ -function CreateAdminAccount(Config $oConfig, $sAdminUser, $sAdminPwd, $sLanguage) -{ - SetupPage::log_info('CreateAdminAccount'); - - if (UserRights::CreateAdministrator($sAdminUser, $sAdminPwd, $sLanguage)) - { - return true; - } - else - { - return false; - } -} //Define some bogus, invalid HTML tags that no sane //person would ever put in an actual document and tell //PHP to delimit fatal error warnings with them. @@ -169,270 +152,6 @@ try $oPage->output(); break; - ////////////////////////////// - // - case 'compile_data_model': - // - SetupPage::log_info("Compiling data model."); - - require_once(APPROOT.'setup/modulediscovery.class.inc.php'); - require_once(APPROOT.'setup/modelfactory.class.inc.php'); - require_once(APPROOT.'setup/compiler.class.inc.php'); - - $sSelectedModules = Utils::ReadParam('selected_modules', '', false, 'raw_data'); - $aSelectedModules = explode(',', $sSelectedModules); - - $sWorkspace = Utils::ReadParam('workspace_dir', '', false, 'raw_data'); - $sSourceDir = Utils::ReadParam('source_dir', '', false, 'raw_data'); - $sTargetDir = Utils::ReadParam('target_dir', '', false, 'raw_data'); - if (empty($sSourceDir) || empty($sTargetDir)) - { - throw new Exception("missing parameter source_dir and/or target_dir"); - } - - $sSourcePath = APPROOT.$sSourceDir; - $sTargetPath = APPROOT.$sTargetDir; - if (!is_dir($sSourcePath)) - { - throw new Exception("Failed to find the source directory '$sSourcePath', please check the rights of the web server"); - } - if (!is_dir($sTargetPath) && !mkdir($sTargetPath)) - { - throw new Exception("Failed to create directory '$sTargetPath', please check the rights of the web server"); - } - // owner:rwx user/group:rx - chmod($sTargetPath, 0755); - - $oFactory = new ModelFactory($sSourcePath); - $aModules = $oFactory->FindModules(); - - foreach($aModules as $foo => $oModule) - { - $sModule = $oModule->GetName(); - if (in_array($sModule, $aSelectedModules)) - { - $oFactory->LoadModule($oModule); - } - } - if (strlen($sWorkspace) > 0) - { - $oWorkspace = new MFWorkspace(APPROOT.$sWorkspace); - if (file_exists($oWorkspace->GetWorkspacePath())) - { - $oFactory->LoadModule($oWorkspace); - } - } - //$oFactory->Dump(); - if ($oFactory->HasLoadErrors()) - { - foreach($oFactory->GetLoadErrors() as $sModuleId => $aErrors) - { - SetupPage::log_error("Data model source file (xml) could not be loaded - found errors in module: $sModuleId"); - foreach($aErrors as $oXmlError) - { - SetupPage::log_error("Load error: File: ".$oXmlError->file." Line:".$oXmlError->line." Message:".$oXmlError->message); - } - } - throw new Exception("The data model could not be compiled. Please check the setup error log"); - } - else - { - $oMFCompiler = new MFCompiler($oFactory, $sSourcePath); - $oMFCompiler->Compile($sTargetPath); - SetupPage::log_info("Data model successfully compiled to '$sTargetPath'."); - } - break; - - ////////////////////////////// - // - case 'update_db_schema': - // - SetupPage::log_info("Update Database Schema."); - - $oConfig = new Config(); - - $aParamValues = array( - 'db_server' => utils::ReadParam('db_server', '', false, 'raw_data'), - 'db_user' => utils::ReadParam('db_user', '', false, 'raw_data'), - 'db_pwd' => utils::ReadParam('db_pwd', '', false, 'raw_data'), - 'db_name' => utils::ReadParam('db_name', '', false, 'raw_data'), - 'new_db_name' => utils::ReadParam('new_db_name', '', false, 'raw_data'), - 'db_prefix' => utils::ReadParam('db_prefix', '', false, 'raw_data') - ); - $sModuleDir = Utils::ReadParam('modules_dir', ''); - $oConfig->UpdateFromParams($aParamValues, $sModuleDir); - - $oProductionEnv = new RunTimeEnvironment(); - $oProductionEnv->InitDataModel($oConfig, true); // load data model only - - $sMode = Utils::ReadParam('mode', 'install'); - if(!$oProductionEnv->CreateDatabaseStructure(MetaModel::GetConfig(), $sMode)) - { - throw(new Exception("Failed to create/upgrade the database structure")); - } - SetupPage::log_info("Database Schema Successfully Updated."); - break; - - ////////////////////////////// - // - case 'after_db_create': - // - SetupPage::log_info('After Database Creation'); - - $oConfig = new Config(); - - $aParamValues = array( - 'db_server' => utils::ReadParam('db_server', '', false, 'raw_data'), - 'db_user' => utils::ReadParam('db_user', '', false, 'raw_data'), - 'db_pwd' => utils::ReadParam('db_pwd', '', false, 'raw_data'), - 'db_name' => utils::ReadParam('db_name', '', false, 'raw_data'), - 'new_db_name' => utils::ReadParam('new_db_name', '', false, 'raw_data'), - 'db_prefix' => utils::ReadParam('db_prefix', '', false, 'raw_data') - ); - $sModuleDir = Utils::ReadParam('modules_dir', ''); - $oConfig->UpdateFromParams($aParamValues, $sModuleDir); - - $oProductionEnv = new RunTimeEnvironment(); - $oProductionEnv->InitDataModel($oConfig, false); // load data model and connect to the database - - $sMode = Utils::ReadParam('mode', 'install'); - $sSelectedModules = Utils::ReadParam('selected_modules', '', false, 'raw_data'); - $aSelectedModules = explode(',', $sSelectedModules); - - // Perform here additional DB setup... profiles, etc... - // - $aAvailableModules = $oProductionEnv->AnalyzeInstallation(MetaModel::GetConfig(), $sModuleDir); - foreach($aAvailableModules as $sModuleId => $aModule) - { - if (($sModuleId != ROOT_MODULE) && in_array($sModuleId, $aSelectedModules) && - isset($aAvailableModules[$sModuleId]['installer']) ) - { - $sModuleInstallerClass = $aAvailableModules[$sModuleId]['installer']; - SetupPage::log_info("Calling Module Handler: $sModuleInstallerClass::AfterDatabaseCreation(oConfig, {$aModule['version_db']}, {$aModule['version_code']})"); - // The validity of the sModuleInstallerClass has been established in BuildConfig() - $aCallSpec = array($sModuleInstallerClass, 'AfterDatabaseCreation'); - call_user_func_array($aCallSpec, array(MetaModel::GetConfig(), $aModule['version_db'], $aModule['version_code'])); - } - } - - // Constant classes (e.g. User profiles) - // - foreach (MetaModel::GetClasses() as $sClass) - { - $aPredefinedObjects = call_user_func(array($sClass, 'GetPredefinedObjects')); - if ($aPredefinedObjects != null) - { - // Create/Delete/Update objects of this class, - // according to the given constant values - // - $aDBIds = array(); - $oAll = new DBObjectSet(new DBObjectSearch($sClass)); - while ($oObj = $oAll->Fetch()) - { - if (array_key_exists($oObj->GetKey(), $aPredefinedObjects)) - { - $aObjValues = $aPredefinedObjects[$oObj->GetKey()]; - foreach ($aObjValues as $sAttCode => $value) - { - $oObj->Set($sAttCode, $value); - } - $oObj->DBUpdate(); - $aDBIds[$oObj->GetKey()] = true; - } - else - { - $oObj->DBDelete(); - } - } - foreach ($aPredefinedObjects as $iRefId => $aObjValues) - { - if (!array_key_exists($iRefId, $aDBIds)) - { - $oNewObj = MetaModel::NewObject($sClass); - $oNewObj->SetKey($iRefId); - foreach ($aObjValues as $sAttCode => $value) - { - $oNewObj->Set($sAttCode, $value); - } - $oNewObj->DBInsert(); - } - } - } - } - - if (!$oProductionEnv->RecordInstallation($oConfig, $aSelectedModules, $sModuleDir)) - { - throw(new Exception("Failed to record the installation information")); - } - - if($sMode == 'install') - { - // Create the admin user only in case of installation - $sAdminUser = Utils::ReadParam('auth_user', '', false, 'raw_data'); - $sAdminPwd = Utils::ReadParam('auth_pwd', '', false, 'raw_data'); - $sLanguage = Utils::ReadParam('language', ''); - if (!CreateAdminAccount(MetaModel::GetConfig(), $sAdminUser, $sAdminPwd, $sLanguage)) - { - throw(new Exception("Failed to create the administrator account '$sAdminUser'")); - } - else - { - SetupPage::log_info("Administrator account '$sAdminUser' created."); - } - } - break; - - ////////////////////////////// - // - case 'load_data': // Load data files - // - $sFileName = Utils::ReadParam('file', '', false, 'raw_data'); - $sSessionStatus = Utils::ReadParam('session_status', ''); - $iPercent = (integer)Utils::ReadParam('percent', 0); - SetupPage::log_info("Loading file: $sFileName"); - if (empty($sFileName) || !file_exists($sFileName)) - { - throw(new Exception("File $sFileName does not exist")); - } - - $oConfig = new Config(); - - $aParamValues = array( - 'db_server' => utils::ReadParam('db_server', '', false, 'raw_data'), - 'db_user' => utils::ReadParam('db_user', '', false, 'raw_data'), - 'db_pwd' => utils::ReadParam('db_pwd', '', false, 'raw_data'), - 'db_name' => utils::ReadParam('db_name', '', false, 'raw_data'), - 'new_db_name' => utils::ReadParam('new_db_name', '', false, 'raw_data'), - 'db_prefix' => utils::ReadParam('db_prefix', '', false, 'raw_data') - ); - $sModuleDir = Utils::ReadParam('modules_dir', ''); - $oConfig->UpdateFromParams($aParamValues, $sModuleDir); - - $oProductionEnv = new RunTimeEnvironment(); - $oProductionEnv->InitDataModel($oConfig, false); // load data model and connect to the database - - $oDataLoader = new XMLDataLoader(); - if ($sSessionStatus == 'start') - { - $oChange = MetaModel::NewObject("CMDBChange"); - $oChange->Set("date", time()); - $oChange->Set("userinfo", "Initialization"); - $iChangeId = $oChange->DBInsert(); - SetupPage::log_info("starting data load session"); - $oDataLoader->StartSession($oChange); - } - - $oDataLoader->LoadFile($sFileName); - $sResult = sprintf("loading of %s done. (Overall %d %% completed).", basename($sFileName), $iPercent); - SetupPage::log_info($sResult); - - if ($sSessionStatus == 'end') - { - $oDataLoader->EndSession(); - SetupPage::log_info("ending data load session"); - } - break; - default: throw(new Exception("Error unsupported operation '$sOperation'")); } diff --git a/setup/index-old.php b/setup/index-old.php deleted file mode 100644 index 71f3bb96d..000000000 --- a/setup/index-old.php +++ /dev/null @@ -1,1622 +0,0 @@ - - -/** - * Wizard to configure and initialize the iTop application - * - * @copyright Copyright (C) 2010-2012 Combodo SARL - * @license http://opensource.org/licenses/AGPL-3.0 - */ - -require_once('../approot.inc.php'); -require_once(APPROOT.'/application/utils.inc.php'); -require_once(APPROOT.'/core/config.class.inc.php'); -require_once(APPROOT.'/core/log.class.inc.php'); -require_once(APPROOT.'/core/kpi.class.inc.php'); -require_once(APPROOT.'/core/cmdbsource.class.inc.php'); -require_once(APPROOT.'/setup/setuppage.class.inc.php'); -require_once(APPROOT.'/setup/moduleinstaller.class.inc.php'); - -define('PHP_MIN_VERSION', '5.2.0'); -define('MYSQL_MIN_VERSION', '5.0.0'); -define('MIN_MEMORY_LIMIT', 32*1024*1024); -define('SUHOSIN_GET_MAX_VALUE_LENGTH', 2048); - -$sOperation = Utils::ReadParam('operation', 'step0'); -$oP = new SetupPage('iTop configuration wizard'); - -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Various helper function -/////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * Get a nicely formatted version string - */ -function GetITopVersion($bShort = true) -{ - $sVersionString = ''; - if ($bShort) - { - $sVersionString = "iTop Version ".ITOP_VERSION; - } - else - { - if (ITOP_REVISION == '$WCREV$') - { - // This is NOT a version built using the buil system, just display the main version - $sVersionString = "iTop Version ".ITOP_VERSION; - } - else - { - // This is a build made from SVN, let display the full information - $sVersionString = "iTop Version ".ITOP_VERSION." revision ".ITOP_REVISION.", built on: ".ITOP_BUILD_DATE; - } - } - return $sVersionString; -} - -/** - * Helper function to retrieve the system's temporary directory - * Emulates sys_get_temp_dir if neeed (PHP < 5.2.1) - * @return string Path to the system's temp directory - */ -function GetTmpDir() -{ - // try to figure out what is the temporary directory - // prior to PHP 5.2.1 the function sys_get_temp_dir - // did not exist - if ( !function_exists('sys_get_temp_dir')) - { - if( $temp=getenv('TMP') ) return realpath($temp); - if( $temp=getenv('TEMP') ) return realpath($temp); - if( $temp=getenv('TMPDIR') ) return realpath($temp); - $temp=tempnam(__FILE__,''); - if (file_exists($temp)) - { - unlink($temp); - return realpath(dirname($temp)); - } - return null; - } - else - { - return realpath(sys_get_temp_dir()); - } -} - -/** - * Helper function to retrieve the directory where files are to be uploaded - * @return string Path to the temp directory used for uploading files - */ -function GetUploadTmpDir() -{ - $sPath = ini_get('upload_tmp_dir'); - if (empty($sPath)) - { - $sPath = GetTmpDir(); - } - return $sPath; -} - -/** - * Helper function to check if the current version of PHP - * is compatible with the application - * @return boolean true if this is Ok, false otherwise - */ -function CheckPHPVersion(SetupPage $oP) -{ - $bResult = true; - $aErrors = array(); - $aWarnings = array(); - $aOk = array(); - - $oP->log('Info - CheckPHPVersion'); - if (version_compare(phpversion(), PHP_MIN_VERSION, '>=')) - { - $aOk [] = "The current PHP Version (".phpversion().") is greater than the minimum required version (".PHP_MIN_VERSION.")"; - } - else - { - $aErrors[] = "Error: The current PHP Version (".phpversion().") is lower than the minimum required version (".PHP_MIN_VERSION.")"; - $bResult = false; - } - $aMandatoryExtensions = array('mysqli', 'iconv', 'simplexml', 'soap', 'hash', 'json', 'session', 'pcre', 'dom'); - $aOptionalExtensions = array('mcrypt' => 'Strong encryption will not be used.', - 'ldap' => 'LDAP authentication will be disabled.'); - asort($aMandatoryExtensions); // Sort the list to look clean ! - ksort($aOptionalExtensions); // Sort the list to look clean ! - $aExtensionsOk = array(); - $aMissingExtensions = array(); - $aMissingExtensionsLinks = array(); - // First check the mandatory extensions - foreach($aMandatoryExtensions as $sExtension) - { - if (extension_loaded($sExtension)) - { - $aExtensionsOk[] = $sExtension; - } - else - { - $aMissingExtensions[] = $sExtension; - $aMissingExtensionsLinks[] = "$sExtension"; - } - } - if (count($aExtensionsOk) > 0) - { - $aOk[] = "Required PHP extension(s): ".implode(', ', $aExtensionsOk)."."; - } - if (count($aMissingExtensions) > 0) - { - $aErrors[] = "Missing PHP extension(s): ".implode(', ', $aMissingExtensionsLinks)."."; - $bResult = false; - } - // Next check the optional extensions - $aExtensionsOk = array(); - $aMissingExtensions = array(); - foreach($aOptionalExtensions as $sExtension => $sMessage) - { - if (extension_loaded($sExtension)) - { - $aExtensionsOk[] = $sExtension; - } - else - { - $aMissingExtensions[$sExtension] = $sMessage; - } - } - if (count($aExtensionsOk) > 0) - { - $aOk[] = "Optional PHP extension(s): ".implode(', ', $aExtensionsOk)."."; - } - if (count($aMissingExtensions) > 0) - { - foreach($aMissingExtensions as $sExtension => $sMessage) - { - $aWarnings[] = "Missing optional PHP extension: $sExtension. ".$sMessage; - } - } - // Check some ini settings here - if (function_exists('php_ini_loaded_file')) // PHP >= 5.2.4 - { - $sPhpIniFile = php_ini_loaded_file(); - // Other included/scanned files - if ($sFileList = php_ini_scanned_files()) - { - if (strlen($sFileList) > 0) - { - $aFiles = explode(',', $sFileList); - - foreach ($aFiles as $sFile) - { - $sPhpIniFile .= ', '.trim($sFile); - } - } - } - $oP->log("Info - php.ini file(s): '$sPhpIniFile'"); - } - else - { - $sPhpIniFile = 'php.ini'; - } - if (!ini_get('file_uploads')) - { - $aErrors[] = "Files upload is not allowed on this server (file_uploads = ".ini_get('file_uploads').")."; - $bResult = false; - } - - $sUploadTmpDir = GetUploadTmpDir(); - if (empty($sUploadTmpDir)) - { - $sUploadTmpDir = '/tmp'; - $aErrors[] = "Temporary directory for files upload is not defined (upload_tmp_dir), assuming that $sUploadTmpDir is used."; - } - // check that the upload directory is indeed writable from PHP - if (!empty($sUploadTmpDir)) - { - if (!file_exists($sUploadTmpDir)) - { - $aErrors[] = "Temporary directory for files upload ($sUploadTmpDir) does not exist or cannot be read by PHP."; - $bResult = false; - } - else if (!is_writable($sUploadTmpDir)) - { - $aErrors[] = "Temporary directory for files upload ($sUploadTmpDir) is not writable."; - $bResult = false; - } - else - { - $oP->log("Info - Temporary directory for files upload ($sUploadTmpDir) is writable."); - } - } - - - if (!ini_get('upload_max_filesize')) - { - $aErrors[] = "File upload is not allowed on this server (upload_max_filesize = ".ini_get('upload_max_filesize').")."; - } - - $iMaxFileUploads = ini_get('max_file_uploads'); - if (!empty($iMaxFileUploads) && ($iMaxFileUploads < 1)) - { - $aErrors[] = "File upload is not allowed on this server (max_file_uploads = ".ini_get('max_file_uploads').")."; - $bResult = false; - } - - $iMaxUploadSize = utils::ConvertToBytes(ini_get('upload_max_filesize')); - $iMaxPostSize = utils::ConvertToBytes(ini_get('post_max_size')); - - if ($iMaxPostSize <= $iMaxUploadSize) - { - $aWarnings[] = "post_max_size (".ini_get('post_max_size').") must be bigger than upload_max_filesize (".ini_get('upload_max_filesize')."). You may want to check the PHP configuration file(s): '$sPhpIniFile'. Be aware that this setting can also be overridden in the apache configuration."; - } - - - $oP->log("Info - upload_max_filesize: ".ini_get('upload_max_filesize')); - $oP->log("Info - post_max_size: ".ini_get('post_max_size')); - $oP->log("Info - max_file_uploads: ".ini_get('max_file_uploads')); - - // Check some more ini settings here, needed for file upload - if (function_exists('get_magic_quotes_gpc')) - { - if (@get_magic_quotes_gpc()) - { - $aErrors[] = "'magic_quotes_gpc' is set to On. Please turn it Off before continuing. You may want to check the PHP configuration file(s): '$sPhpIniFile'. Be aware that this setting can also be overridden in the apache configuration."; - $bResult = false; - } - } - if (function_exists('magic_quotes_runtime')) - { - if (@magic_quotes_runtime()) - { - $aErrors[] = "'magic_quotes_runtime' is set to On. Please turn it Off before continuing. You may want to check the PHP configuration file(s): '$sPhpIniFile'. Be aware that this setting can also be overridden in the apache configuration."; - $bResult = false; - } - } - - - $sMemoryLimit = trim(ini_get('memory_limit')); - if (empty($sMemoryLimit)) - { - // On some PHP installations, memory_limit does not exist as a PHP setting! - // (encountered on a 5.2.0 under Windows) - // In that case, ini_set will not work, let's keep track of this and proceed anyway - $aWarnings[] = "No memory limit has been defined in this instance of PHP"; - } - else - { - // Check that the limit will allow us to load the data - // - $iMemoryLimit = utils::ConvertToBytes($sMemoryLimit); - if ($iMemoryLimit < MIN_MEMORY_LIMIT) - { - $aErrors[] = "memory_limit ($iMemoryLimit) is too small, the minimum value to run iTop is ".MIN_MEMORY_LIMIT."."; - $bResult = false; - } - else - { - $oP->log_info("memory_limit is $iMemoryLimit, ok."); - } - } - - // Special case for APC - if (extension_loaded('apc')) - { - $sAPCVersion = phpversion('apc'); - $aOk[] = "APC detected (version $sAPCVersion). The APC cache will be used to speed-up iTop."; - } - - // Special case Suhosin extension - if (extension_loaded('suhosin')) - { - $sSuhosinVersion = phpversion('suhosin'); - $aOk[] = "Suhosin extension detected (version $sSuhosinVersion)."; - - $iGetMaxValueLength = ini_get('suhosin.get.max_value_length'); - if ($iGetMaxValueLength < SUHOSIN_GET_MAX_VALUE_LENGTH) - { - $aErrors[] = "suhosin.get.max_value_length ($iGetMaxValueLength) is too small, the minimum value to run iTop is ".SUHOSIN_GET_MAX_VALUE_LENGTH.". This value is set by the PHP configuration file(s): '$sPhpIniFile'. Be aware that this setting can also be overridden in the apache configuration."; - $bResult = false; - } - else - { - $oP->log_info("suhosin.get.max_value_length = $iGetMaxValueLength, ok."); - } - } - if (!$bResult) - { - $sTitle = 'Checking prerequisites: Failed !'; - } - else - { - if (count($aWarnings) > 0) - { - $sTitle = ' Checking prerequisites: Warning (show details)'; - $oP->add_ready_script("$('#prereq_details').hide();\n"); - } - else - { - $sTitle = ' Checking prerequisites: Ok (show details)'; - $oP->add_ready_script("$('#prereq_details').hide();\n"); - } - } - $oP->add("

$sTitle

\n"); - $oP->add("
\n"); - foreach($aErrors as $sError) - { - $oP->error($sError); - //$oP->add_ready_script("$('#prereq_details').show();"); - } - foreach($aWarnings as $sWarning) - { - $oP->warning($sWarning); - } - foreach($aOk as $sOk) - { - $oP->ok($sOk); - } - $oP->add("
\n"); - return $bResult; -} - -/** - * Helper function check the connection to the database and (if connected) to enumerate - * the existing databases - * @return Array The list of databases found in the server - */ -function CheckServerConnection(SetupPage $oP, $sDBServer, $sDBUser, $sDBPwd) -{ - $aResult = array(); - $oP->log('Info - CheckServerConnection'); - try - { - $oDBSource = new CMDBSource; - $oDBSource->Init($sDBServer, $sDBUser, $sDBPwd); - $oP->ok("Connection to '$sDBServer' as '$sDBUser' successful."); - - $oP->log("Info - User privileges: ".($oDBSource->GetRawPrivileges())); - - $sDBVersion = $oDBSource->GetDBVersion(); - if (version_compare($sDBVersion, MYSQL_MIN_VERSION, '>=')) - { - $oP->ok("Current MySQL version ($sDBVersion), greater than minimum required version (".MYSQL_MIN_VERSION.")"); - // Check some server variables - $iMaxAllowedPacket = $oDBSource->GetServerVariable('max_allowed_packet'); - $iMaxUploadSize = utils::ConvertToBytes(ini_get('upload_max_filesize')); - if ($iMaxAllowedPacket >= (500 + $iMaxUploadSize)) // Allow some space for the query + the file to upload - { - $oP->ok("MySQL server's max_allowed_packet is big enough."); - } - else if($iMaxAllowedPacket < $iMaxUploadSize) - { - $oP->warning("MySQL server's max_allowed_packet ($iMaxAllowedPacket) is not big enough. Please, consider setting it to at least ".(500 + $iMaxUploadSize)."."); - } - $oP->log("Info - MySQL max_allowed_packet: $iMaxAllowedPacket"); - $iMaxConnections = $oDBSource->GetServerVariable('max_connections'); - if ($iMaxConnections < 5) - { - $oP->warning("MySQL server's max_connections ($iMaxConnections) is not enough. Please, consider setting it to at least 5."); - } - $oP->log("Info - MySQL max_connections: ".($oDBSource->GetServerVariable('max_connections'))); - } - else - { - $oP->error("Error: Current MySQL version is ($sDBVersion), minimum required version (".MYSQL_MIN_VERSION.")"); - return false; - } - try - { - $aResult = $oDBSource->ListDB(); - } - catch(Exception $e) - { - $oP->warning("Warning: unable to enumerate the current databases."); - $aResult = true; // Not an array to differentiate with an empty array - } - } - catch(Exception $e) - { - $oP->error("Error: Connection to '$sDBServer' as '$sDBUser' failed."); - $oP->p($e->GetHtmlDesc()); - $aResult = false; - } - return $aResult; -} - -/** - * Scans the ./data directory for XML files and output them as a Javascript array - */ -function PopulateDataFilesList(SetupPage $oP, $aParamValues, $oConfig) -{ - - $sScript = "function PopulateDataFilesList()\n"; - $sScript .= "{\n"; - $sScript .= "if (aFilesToLoad.length > 0) return;"; // Populate the list only once... - - $oProductionEnv = new RunTimeEnvironment(); - $aAvailableModules = $oProductionEnv->AnalyzeInstallation($oConfig, $aParamValues['source_dir']); - - $sMode = $aParamValues['mode']; - $aStructureDataFiles = array(); - $aSampleDataFiles = array(); - - foreach($aAvailableModules as $sModuleId => $aModule) - { - if (($sModuleId != ROOT_MODULE)) - { - if (in_array($sModuleId, $aParamValues['module'])) - { - if (empty($aModule['version_db'])) - { - // New installation load the data - $aModuleStruct = $aAvailableModules[$sModuleId]['data.struct']; - $aModuleSamples = $aAvailableModules[$sModuleId]['data.sample']; - $aStructureDataFiles = array_merge($aStructureDataFiles, $aModuleStruct); - $aSampleDataFiles = array_merge($aSampleDataFiles, $aModuleSamples); - } - } - } - } - - // Structure data - // - foreach($aStructureDataFiles as $sFile) - { - // Under Windows, it is a must to escape backslashes (not an issue until a folder name starts with t or n, etc...) - $sFile = APPROOT.$sFile; - $sFile = str_replace('\\', '\\\\', $sFile); - $sScript .= "aFilesToLoad[aFilesToLoad.length] = '$sFile';\n"; - } - - // Sample data - loaded IIF wished by the user - // - if ($aParamValues['sample_data'] != 'no') - { - foreach($aSampleDataFiles as $sFile) - { - // Under Windows, it is a must to escape backslashes (not an issue until a folder name starts with t or n, etc...) - $sFile = APPROOT.$sFile; - $sFile = str_replace('\\', '\\\\', $sFile); - $sScript .= "aFilesToLoad[aFilesToLoad.length] = '$sFile';\n"; - } - } - $sScript .= "}\n"; - $oP->add_script($sScript); -} - -/** - * Add some parameters as hidden inputs into a form - * @param SetupPage $oP The page to insert the form elements into - * @param Hash $aParamValues The pairs name/value to be stored in the form - * @param Array $aExcludeParams A list of parameters to exclude from the previous hash - */ -function AddParamsToForm(SetupPage $oP, $aParamValues, $aExcludeParams = array()) -{ - foreach($aParamValues as $sName => $value) - { - if(!in_array($sName, $aExcludeParams)) - { - AddHiddenParam($oP, $sName, $value); - } - } -} - -/** - * Add a hidden field to store the specified parameter - * @param $sName string Name of the parameter - * @param $value mixed Value of the parameter - */ -function AddHiddenParam($oP, $sName, $value) -{ - if (is_array($value)) - { - foreach($value as $sKey => $sItem) - { - $oP->add(''); - } - } - else - { - $oP->add(''); - } -} - -/** - * Helper function to get the available languages from the given directory - * @param $sDir Path to the dictionary - * @return an array of language code => description - */ -function GetAvailableLanguages($sDir) -{ - require_once(APPROOT.'/core/coreexception.class.inc.php'); - require_once(APPROOT.'/core/dict.class.inc.php'); - - $aFiles = scandir($sDir); - foreach($aFiles as $sFile) - { - if ($sFile == '.' || $sFile == '..' || $sFile == '.svn') - { - // Skip - continue; - } - - $sFilePath = $sDir.'/'.$sFile; - if (is_file($sFilePath) && preg_match('/^.+\.dict.*\.php$/i', $sFilePath, $aMatches)) - { - require_once($sFilePath); - } - } - - return Dict::GetLanguages(); -} - - - - -///////////////////////////////////////////////////////////////////////////////////////////////////////////// -// Handling of the different steps of the setup wizard -///////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * Displays the welcome screen and check some basic prerequisites - */ -function WelcomeAndCheckPrerequisites(SetupPage $oP, $aParamValues, $iCurrentStep) -{ - $sNextOperation = 'step'.($iCurrentStep+1); - $aParamValues['previous_step'] = 0; - - $oP->add("

iTop configuration wizard

\n"); - $sVersionStringShort = GetITopVersion(true); - $sVersionStringLong = GetITopVersion(false); - $oP->set_title('Welcome to '.$sVersionStringShort); - $oP->log($sVersionStringLong); - $aPreviousParams = array(); - $oP->add("
\n"); - $sMode = 'install'; // Fresh install - - $sConfigFile = utils::GetConfigFilePath(); - $oP->log_info("Target configuration file: ".$sConfigFile); - - // Check for a previous version - if (file_exists($sConfigFile)) - { - $oConfig = new Config($sConfigFile); - - $oProductionEnv = new RunTimeEnvironment(); - $aVersion = $oProductionEnv->AnalyzeInstallation($oConfig, 'datamodel'); - if (!empty($aVersion[ROOT_MODULE]['version_db'])) - { - $aPreviousParams = array('mode', 'db_server', 'db_user', 'db_pwd','db_name', 'new_db_name', 'db_prefix', 'source_dir', 'target_dir'); - $sMode = 'upgrade'; - if ($aVersion[ROOT_MODULE]['version_db'] == $aVersion[ROOT_MODULE]['version_code']) - { - $oP->ok("Version ".$aVersion[ROOT_MODULE]['version_db']." of iTop detected.
The same version of the application will be reinstalled."); - } - else - { - $oP->ok("Version ".$aVersion[ROOT_MODULE]['version_db']." of iTop detected.
The application will be upgraded to version ".$aVersion[ROOT_MODULE]['version_code']."."); - } - AddHiddenParam($oP, 'db_server', $oConfig->GetDBHost()); - AddHiddenParam($oP, 'db_user', $oConfig->GetDBUser()); - AddHiddenParam($oP, 'db_pwd', $oConfig->GetDBPwd()); - AddHiddenParam($oP, 'db_name', $oConfig->GetDBName()); - AddHiddenParam($oP, 'db_prefix', $oConfig->GetDBSubname()); - AddHiddenParam($oP, 'mode', $sMode); - AddHiddenParam($oP, 'source_dir', 'datamodel'); - AddHiddenParam($oP, 'target_dir', 'env-production'); - if (CheckPHPVersion($oP)) - { - $oP->add("

Next: Licence agreement

\n"); - $oP->add("\n"); - AddParamsToForm($oP, $aParamValues, $aPreviousParams); - $oP->add("\n"); - $oP->add("\n"); - $oP->add("
\n"); - } - return; - } - // else, normal install ?? - } - - if (CheckPHPVersion($oP)) - { - $oP->add("

What do you want to do?

\n"); - $sChecked = ($aParamValues['mode'] == 'install') ? 'checked' : ''; - $oP->p(""); - $sChecked = ($aParamValues['mode'] == 'upgrade') ? 'checked' : ''; - $oP->p(""); - $oP->add("

Next: Licence agreement

\n"); - $oP->add("\n"); - - //AddHiddenParam($oP, 'source_dir', 'datamodel'); - AddHiddenParam($oP, 'source_dir', 'datamodel'); // not ready for the big bang ? - AddHiddenParam($oP, 'target_dir', 'env-'.utils::GetCurrentEnvironment()); - - $aPreviousParams = array('mode', 'source_dir', 'target_dir'); - AddParamsToForm($oP, $aParamValues, $aPreviousParams); - $oP->add("\n"); - $oP->add("\n"); - $oP->add("
\n"); - $oP->add("
\n"); - } -} - -function LicenceAcknowledgement($oP, $aParamValues, $iCurrentStep) -{ - $sNextOperation = 'step'.($iCurrentStep+1); - $iPrevStep = 0; - $aParamValues['previous_step'] = $iCurrentStep; // Come back here - - $oP->set_title('License agreement'); - $oP->add('

iTop is released by Combodo SARL under the terms of the GPL V3 license. In order to use iTop you must accept the terms of this license.

'); - $oP->add("\n"); - $oP->add("
\n"); - AddParamsToForm($oP, $aParamValues, array('licence_ok')); - - $sChecked = $aParamValues['licence_ok'] == 1 ? 'checked' : ''; - $oP->add("

\n"); - - $sConfigFile = utils::GetConfigFilePath(); - if (file_exists($sConfigFile)) - { - $oP->add("

Next: Modules selection

\n"); - $sNextOperation = 'step4'; - } - else - { - $oP->add("

Next: Database server selection

\n"); - } - $oP->add("\n"); - $oP->add("\n"); - $oP->add("\n"); - $oP->add("\n"); - $oP->add("
> \"/>
\n"); - $oP->add("
\n"); -} - -/** - * Display the form for the first step of the configuration wizard - * which consists in the database server selection - */ -function DatabaseServerSelection(SetupPage $oP, $aParamValues, $iCurrentStep) -{ - $sNextOperation = 'step'.($iCurrentStep+1); - $iPrevStep = 1; - $aParamValues['previous_step'] = $iCurrentStep; // Come back here - - $oP->add("
\n"); - $oP->add("\n"); - AddParamsToForm($oP, $aParamValues, array('db_server', 'db_user', 'db_pwd')); - if ($aParamValues['licence_ok'] == 1) - { - $sRedStar = '*'; - $oP->set_title("Database server selection\n"); - $oP->add("

Please enter the name of the MySQL database server you want to use for iTop and supply valid credentials to connect to it

\n"); - // Form goes here - $oP->add("
Database connection\n"); - $aForm = array(); - $aForm[] = array('label' => "Server name$sRedStar:", 'input' => "", - 'help' => 'E.g. "localhost", "dbserver.mycompany.com" or "192.142.10.23"'); - $aForm[] = array('label' => "User name$sRedStar:", 'input' => "", - 'help' => 'The account must have the following privileges on the database: SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, CREATE VIEW, TRIGGER'); - $aForm[] = array('label' => 'Password:', 'input' => ""); - $oP->form($aForm); - $oP->add("
\n"); - $oP->add("

Next: Database instance Selection

\n"); - $oP->add("\n"); - $oP->add("\n"); - $oP->add("\n"); - $oP->add("
> \"/>
\n"); - } - else - { - $oP->add("\n"); - } - $oP->add("
\n"); -} - -/** - * Display the form for the second step of the configuration wizard - * which consists in - * 1) Validating the parameters by connecting to the database server - * 2) Prompting to select an existing database or to create a new one - */ -function DatabaseInstanceSelection(SetupPage $oP, $aParamValues, $iCurrentStep, $oConfig) -{ - $sNextOperation = 'step'.($iCurrentStep+1); - $iPrevStep = 2; - $aParamValues['previous_step'] = $iCurrentStep; // Come back here - - $oP->set_title("Database instance selection\n"); - $oP->add("
\n"); - $oP->add("\n"); - AddParamsToForm($oP, $aParamValues, array('db_name', 'db_prefix', 'new_db_name')); - $sDBServer = $aParamValues['db_server']; - $sDBUser = $aParamValues['db_user']; - $sDBPwd = $aParamValues['db_pwd']; - $aDatabases = CheckServerConnection($oP, $sDBServer, $sDBUser, $sDBPwd); - if ($aDatabases === false) - { - // Connection failed, invalid credentials ? Go back - $oP->add("\n"); - } - else - { - $oP->add("
Select the database instance to use for iTop*\n"); - $aForm = array(); - $bExistingChecked = false; - $sChecked = ''; - $sDBName = ''; - // If the 'Create Database' option was checked... and the database still does not exist - if (!$bExistingChecked && !empty($aParamValues['new_db_name'])) - { - $sChecked = 'checked'; - $sDBName = $aParamValues['new_db_name']; - } - if ($aParamValues['mode'] == 'install') - { - $aForm[] = array('label' => " "); - } - if (is_array($aDatabases)) - { - foreach($aDatabases as $sDBName) - { - $sChecked = ''; - if ($aParamValues['db_name'] == $sDBName) - { - $sChecked = 'checked'; - $bExistingChecked = true; - } - $aForm[] = array('label' => ""); - } - } - else - { - $aForm[] = array('label' => " "); - $oP->add_ready_script("$('#current_db_name').click( function() { $('#current_db').attr('checked', true); });"); - } - $oP->add('
'); - $oP->form($aForm); - $oP->add('
'); - - $oP->add_ready_script("$('#new_db_name').click( function() { $('#new_db').attr('checked', true); })"); - $oP->add("
\n"); - $aForm = array(); - if ($aParamValues['mode'] == 'install') - { - $aForm[] = array('label' => "Add a prefix to all the tables: "); - } - else - { - $aForm[] = array('label' => "The following prefix is used for the iTop tables: "); - } - $oP->form($aForm); - - $oP->add("

Next: iTop modules selection

\n"); - $oP->add("\n"); - $oP->add("\n"); - $oP->add("\n"); - $oP->add("
> \"/>
\n"); - } - $oP->add("
\n"); -} - -/** - * Display the form to select the iTop modules to be installed - */ -function ModulesSelection(SetupPage $oP, $aParamValues, $iCurrentStep, $oConfig) -{ - $sNextOperation = 'step'.($iCurrentStep+1); - $aParamValues['previous_step'] = $iCurrentStep; // Come back here - - $oP->add("
\n"); - AddParamsToForm($oP, $aParamValues, array('module')); - $sRedStar = '*'; - $oP->set_title("iTop modules selection"); - - $oProductionEnv = new RunTimeEnvironment(); - $aAvailableModules = $oProductionEnv->AnalyzeInstallation($oConfig, $aParamValues['source_dir']); - - $sConfigFile = utils::GetConfigFilePath(); - // Form goes here - if ($aParamValues['mode'] == 'upgrade') - { - if (file_exists($sConfigFile)) - { - $iPrevStep = 1; // depends on where we came from - } - else - { - $iPrevStep = 3; - } - if (empty($aAvailableModules[ROOT_MODULE]['version_db'])) - { - $oP->error("Unable to detect the previous installation of iTop. The upgrade cannot continue.\n"); - $oP->add("\n"); - $oP->add("\n"); - $oP->add("\n"); - $oP->add("
 
\n"); - $oP->add("
\n"); - return; - } - $oP->ok("iTop version ".$aAvailableModules[ROOT_MODULE]['version_db']." detected.\n"); - $oP->add("

Customize your iTop installation to fit your needs

\n"); - $oP->add("
Select the iTop modules you want to install or upgrade:\n"); - } - else - { - $iPrevStep = 3; // depends on where we came from - if (!empty($aAvailableModules[ROOT_MODULE]['version_db'])) - { - $oP->error("A instance of iTop already exists. Please select the \"Upgrade\" mode to upgrade it.\n"); - $oP->add("\n"); - $oP->add("\n"); - $oP->add("\n"); - $oP->add("
 
\n"); - $oP->add("\n"); - return; - } - $oP->add("

Customize your iTop installation to fit your needs

\n"); - $oP->add("
Select the iTop modules you want to install:\n"); - } - $oP->add("
"); - $sRedStar = '*'; - $index = 0; - $aSelectedModules = $aParamValues['module']; - if ($aSelectedModules == '') - { - // Make sure it gets initialized as an array, default value: all modules selected ! - $aSelectedModules = array(); - foreach($aAvailableModules as $sModuleId => $aModule) - { - $aSelectedModules[] = $sModuleId; - } - } - foreach($aAvailableModules as $sModuleId => $aModule) - { - if ($sModuleId == ROOT_MODULE) continue; // Convention: the version number of the application is stored as a module named ROOT_MODULE - - $sModuleLabel = $aModule['label']; - $sModuleHelp = $aModule['doc.more_information']; - //$sClass = ($aModule['mandatory']) ? 'class="read-only"' : ''; - try - { - $sDefaultAppPath = utils::GetDefaultUrlAppRoot(); - } - catch(Exception $e) - { - $sDefaultAppPath = '..'; - } - $sMoreInfo = (!empty($aModule['doc.more_information'])) ? "more info": ''; - if ($aModule['category'] == 'authentication') - { - // For now authentication modules are always on and hidden - $oP->add("\n"); - $index++; - } - elseif ($aModule['visible']) - { - switch($aModule['install']['flag']) - { - case MODULE_ACTION_OPTIONAL: - $sClass = ''; - if ($aParamValues['mode'] == 'upgrade') - { - if (!empty($aParamValues['module'])) - { - $sChecked = in_array($sModuleId, $aParamValues['module']) ? 'checked' : ''; - } - else - { - $sChecked = ''; - // Default value: modules previously installed are checked - if (!empty($aModule['version_db'])) - { - $sChecked = 'checked'; // Checked if previously installed - // Previously installed, are we allowed to uninstall this module ? - if ($aModule['install']['flag'] == MODULE_ACTION_IMPOSSIBLE) - { - $sClass = 'class="read-only"'; - } - } - } - } - else - { - if (!empty($aParamValues['module'])) - { - $sChecked = in_array($sModuleId, $aParamValues['module']) ? 'checked' : ''; - } - else - { - $sChecked = 'checked'; - } - } - $oP->add("

$sMoreInfo

\n"); - break; - - case MODULE_ACTION_MANDATORY: - $oP->add("

$sMoreInfo

\n"); - break; - - case MODULE_ACTION_IMPOSSIBLE: - if ($aParamValues['mode'] == 'upgrade') - { - if (!empty($aModule['version_db'])) - { - // Previously installed, are we allowed to uninstall this module ? - if ($aModule['uninstall']['flag'] == MODULE_ACTION_IMPOSSIBLE) - { - $oP->error('Error: impossible to uninstall the module: '.$aModule['label']."({$aModule['uninstall']['message']})"); - } - } - } - else - { - $oP->add("

$sMoreInfo

\n"); - } - break; - - } - $index++; - } - else - { - // For now hidden modules are always on ! - $oP->add("\n"); - $index++; - } - } - $oP->add("
"); - $oP->add("
\n"); - if ($aParamValues['mode'] == 'upgrade') - { - $oP->add("

Next: Application path

\n"); - AddHiddenParam($oP, 'operation', 'step6'); - } - else - { - $oP->add("

Next: Administrator account definition

\n"); - AddHiddenParam($oP, 'operation', 'step5'); - } - $oP->add("\n"); - $oP->add("\n"); - $oP->add("\n"); - $oP->add("
> \"/>
\n"); - $oP->add("\n"); - $oP->add_ready_script("$('.read-only').click( function() { $(this).attr('checked','checked'); } );"); - -} -/** - * Display the form for the third step of the configuration wizard - * which consists in - * 1) Validating the parameters by connecting to the database server & selecting the database - * 2) Creating the database structure - * 3) Prompting for the admin account to be created - */ -function AdminAccountDefinition(SetupPage $oP, $aParamValues, $iCurrentStep, Config $oConfig) -{ - $sNextOperation = 'step'.($iCurrentStep+1); - $aParamValues['previous_step'] = $iCurrentStep; // Come back here - - $oP->set_title("Administrator account definition"); - $oP->add("
\n"); - $oP->add("\n"); - AddParamsToForm($oP, $aParamValues, array('auth_user', 'auth_pwd', 'language')); - - $sRedStar = "*"; - $oP->add("

Default language for the application:

\n"); - // Possible languages (depends on the dictionaries loaded in the config) - $aForm = array(); - $aAvailableLanguages = GetAvailableLanguages(APPROOT.'dictionaries'); - $sLanguages = ''; - $sDefaultCode = 'EN US'; - foreach($aAvailableLanguages as $sLangCode => $aInfo) - { - $sSelected = ($sLangCode == $sDefaultCode ) ? 'selected' : ''; - $sLanguages.=""; - } - - $aForm[] = array('label' => "Default Language$sRedStar:", 'input' => ""); - $aForm[] = array('label' => "Password$sRedStar:", 'input' => ""); - $aForm[] = array('label' => "Retype password$sRedStar:", 'input' => ""); - $oP->form($aForm); - $oP->add("
\n"); - $oP->add("

Next: Application path

\n"); - $oP->add("\n"); - $oP->add("\n"); - $oP->add("\n"); - $oP->add("
> \"/>
\n"); - - // Form goes here - $oP->add("\n"); -} - - -/** - * Display the form for validating/entering the URL (path) to the application - * which consists in - */ -function ApplicationPathSelection(SetupPage $oP, $aParamValues, $iCurrentStep, Config $oConfig) -{ - $sNextOperation = 'step7'; - if ($aParamValues['mode'] == 'upgrade') - { - $iPrevStep = 4; - } - else - { - $iPrevStep = 5; - } - - $oP->set_title("Application Path"); - - $oP->add("
\n"); - $oP->add("\n"); - AddParamsToForm($oP, $aParamValues, array('application_path')); - - try - { - $sDefaultAppPath = utils::GetDefaultUrlAppRoot(); - } - catch(Exception $e) - { - $sDefaultAppPath = 'http:///itop'; - } - $sAppPath = empty($aParamValues['application_path']) ? $sDefaultAppPath : $aParamValues['application_path']; - - $oP->add("

Enter the URL that will be used to connect to the application

\n"); - $oP->p("
Application URL \n"); - $oP->p("\n"); - $oP->p("
\n"); - $oP->add("

Next: Sample data selection

\n"); - $oP->add("\n"); - $oP->add("\n"); - $oP->add("\n"); - $oP->add("
> \"/>
\n"); - $oP->add("\n"); -} - -/** - * Display the form for the fourth step of the configuration wizard - * which consists in - * 1) Creating the admin user account - * 2) Prompting to load some sample data - */ -function SampleDataSelection(SetupPage $oP, $aParamValues, $iCurrentStep, Config $oConfig) -{ - $sNextOperation = 'step8'; - $iPrevStep = 6; - - $oP->set_title("Application initialization"); - - $oP->add("
\n"); - $oP->add("\n"); - AddParamsToForm($oP, $aParamValues, array('sample_data')); - - $oP->add("

Loading of sample data

\n"); - $oP->p("
Do you want to load sample data into the database ? \n"); - $sChecked = ($aParamValues['sample_data'] == 'no') ? '' : 'checked'; - $oP->p("\n"); - $sChecked = ($aParamValues['sample_data'] == 'no') ? 'checked' : ''; - $oP->p("\n"); - $oP->p("
\n"); - $oP->add("

Next: Installation summary

\n"); - $oP->add("\n"); - $oP->add("\n"); - $oP->add("\n"); - $oP->add("
> \"/>
\n"); - $oP->add("
\n"); -} - -/** - * Displays the summary of the actions to be taken - */ -function DisplaySummary(SetupPage $oP, $aParamValues, $iCurrentStep, Config $oConfig) -{ - $sMode = $aParamValues['mode']; - $oProductionEnv = new RunTimeEnvironment(); - $aAvailableModules = $oProductionEnv->AnalyzeInstallation($oConfig, $aParamValues['source_dir']); - - $aInstall = array(); - $aUpgrade = array(); - $aUninstall = array(); - $aUnchanged = array(); - switch($sMode) - { - case 'install': - foreach($aAvailableModules as $sModuleId => $aModule) - { - if (($sModuleId != ROOT_MODULE) && $aModule['visible'] && ($aModule['category'] != 'authentication')) - { - if (in_array($sModuleId, $aParamValues['module'])) - { - $aInstall[$sModuleId] = $aModule; - } - } - } - $oP->set_title('Installation Summary'); - $oP->SetRootUrl($aParamValues['application_path']); - $oP->add("

iTop version ".$aAvailableModules[ROOT_MODULE]['version_code']." will be installed.

"); - - $oP->add('
'); - - // Database information - $sPrefix = ''; - if ($oConfig->GetDBSubname() != '') - { - $sPrefix = " (prefix: ".$oConfig->GetDBSubname().")"; - } - $oP->collapsible('db', "Database", array($oConfig->GetDBName()." on server: ".$oConfig->GetDBHost().$sPrefix)); - - if (count($aInstall) > 0) - { - $iCount = count($aInstall); - $aItems = array(); - foreach($aInstall as $sModuleId => $aModule) - { - $aItems[] = $aModule['label'].' version '.$aModule['version_code']; - } - $oP->collapsible('install', "$iCount module(s) will be installed", $aItems, ($iCount < 5)); - } - - // Sample data - if ($aParamValues['sample_data'] != 'no') - { - $sSampleData = 'Sample data will be loaded for the newly installed modules.'; - } - else - { - $sSampleData = 'No sample data will be loaded.'; - } - $oP->collapsible('sample_data', "Sample Data", array($sSampleData)); - - // Application Path - $oP->collapsible('application_path', "Application path", array('URL:'.htmlentities($aParamValues['application_path'], ENT_QUOTES, 'UTF-8'))); - - // Admin account - $oP->collapsible('admin_account', "Administrator account", array('Login:'.htmlentities($aParamValues['auth_user'], ENT_QUOTES, 'UTF-8'))); - // Default language - $aAvailableLanguages = GetAvailableLanguages(APPROOT.'dictionaries'); - $oP->collapsible('language', "Default application language", array( $aAvailableLanguages[$aParamValues['language']]['description']." (".$aAvailableLanguages[$aParamValues['language']]['localized_description'].")")); - $oP->add('
'); - - $oP->add("
\n"); - $oP->add("\n"); - AddParamsToForm($oP, $aParamValues); - $oP->add("\n"); - $oP->add("\n"); - // Note: the Next >> button is NOT a submit, since moving to the next page is triggered asynchronously - $oP->add("\n"); - $oP->add("
\n"); - $oP->add("
\n"); - break; - - case 'upgrade': - - foreach($aAvailableModules as $sModuleId => $aModule) - { - if (($sModuleId != ROOT_MODULE) && $aModule['visible'] && ($aModule['category'] != 'authentication')) - { - if (in_array($sModuleId, $aParamValues['module'])) - { - if (empty($aModule['version_db'])) - { - $aInstall[$sModuleId] = $aModule; - } - else if ($aModule['version_db'] == $aModule['version_code']) - { - $aUnchanged[$sModuleId] = $aModule; - } - else - { - // Consider it's an upgrade... TO DO: handle downgrades ?? - $aUpgrade[$sModuleId] = $aModule; - } - } - else if (!empty($aModule['version_db'])) - { - $aUninstall[$sModuleId] = $aModule; - } - // Else do nothing: the module was not installed and is not selected - } - } - $oP->set_title('Upgrade Summary'); - $oP->add("

The application will be upgraded from version ".$aAvailableModules[ROOT_MODULE]['version_db'].' to version '.$aAvailableModules[ROOT_MODULE]['version_code'].'

'); - $oP->add('
'); - - // Database information - $sPrefix = ''; - if ($oConfig->GetDBSubname() != '') - { - $sPrefix = " (prefix: ".$oConfig->GetDBSubname().")"; - } - $oP->collapsible('db', "Database", array($oConfig->GetDBName()." on server: ".$oConfig->GetDBHost().$sPrefix)); - - // Modules summary, per "type" (install, uninstall...) - if (count($aUpgrade) > 0) - { - $iCount = count($aUpgrade); - $aItems = array(); - foreach($aUpgrade as $sModuleId => $aModule) - { - $aItems[] = $aModule['label'].' version '.$aModule['version_db'].' to version '.$aModule['version_code']; - } - $oP->collapsible('upgrade', "$iCount module(s) will be upgraded", $aItems, ($iCount < 5)); - } - if (count($aInstall) > 0) - { - $iCount = count($aInstall); - $aItems = array(); - foreach($aInstall as $sModuleId => $aModule) - { - $aItems[] = $aModule['label'].' version '.$aModule['version_code']; - } - $oP->collapsible('install', "$iCount module(s) will be installed", $aItems, ($iCount < 5)); - } - if (count($aUninstall) > 0) - { - $iCount = count($aUninstall); - $aItems = array(); - foreach($aUninstall as $sModuleId => $aModule) - { - $aItems[] = $aModule['label'].' version '.$aModule['version_db']; - } - $oP->collapsible('uninstall', "$iCount module(s) will be removed", $aItems, true /* always open */); - } - if (count($aUnchanged) > 0) - { - $iCount = count($aUnchanged); - $aItems = array(); - foreach($aUnchanged as $sModuleId => $aModule) - { - $aItems[] = $aModule['label'].' version '.$aModule['version_db']; - } - $oP->collapsible('unchanged', "$iCount module(s) will remain unchanged", $aItems, ($iCount < 5)); - } - // Sample data - if ($aParamValues['sample_data'] != 'no') - { - $sSampleData = 'Sample data will be loaded for the newly installed modules.'; - } - else - { - $sSampleData = 'No sample data will be loaded.'; - } - $oP->collapsible('sample_data', "Sample Data", array($sSampleData)); - - // Application Path - $oP->collapsible('application_path', "Application path", array('URL:'.htmlentities($aParamValues['application_path'], ENT_QUOTES, 'UTF-8'))); - - $oP->add('
'); - $oP->add("
\n"); - $oP->add("\n"); - AddParamsToForm($oP, $aParamValues); - $oP->add("\n"); - $oP->add("\n"); - // Note: the Next >> button is NOT a submit, since moving to the next page is triggered asynchronously - $oP->add("\n"); - $oP->add("
\n"); - $oP->add("
\n"); - break; - - default: - $oP->error("Unsupported mode $sMode"); - } - // Hidden form submitted when moving on to the next page, once all the data files - // have been processed - $oP->add("
\n"); - AddParamsToForm($oP, $aParamValues); - $oP->add("\n"); - $oP->add("
\n"); - - $oP->add("
\n"); - $oP->add_linked_script('../setup/jquery.progression.js'); - PopulateDataFilesList($oP, $aParamValues, $oConfig); - $oP->add_ready_script( -<<SetDBCollation('utf8_unicode_ci'); - - // Final config update: add the modules - $oConfig->UpdateFromParams($aParamValues, $aParamValues['target_dir']); - - // Make sure the root configuration directory exists - if (!file_exists(APPCONF)) - { - mkdir(APPCONF); - chmod(APPCONF, 0770); // RWX for owner and group, nothing for others - $oP->log_info("Created configuration directory: ".APPCONF); - } - - // Write the final configuration file - $sConfigFile = utils::GetConfigFilePath(); - $sConfigDir = dirname($sConfigFile); - @mkdir($sConfigDir); - @chmod($sConfigDir, 0770); // RWX for owner and group, nothing for others - - $oConfig->WriteToFile($sConfigFile); - - // Start the application - $oProductionEnv = new RunTimeEnvironment(); - $oProductionEnv->InitDataModel($oConfig, false, true); // Load model, startup DB and load the cache - if ($aParamValues['mode'] == 'install') - { - if (UserRights::CheckCredentials($sAuthUser, $sAuthPwd)) - { - UserRights::Login($sAuthUser); - $_SESSION['auth_user'] = $sAuthUser; - $_SESSION['login_mode'] = 'form'; // Will enable the "log-off button" - } - else - { - $oP->add("

iTop configuration wizard

\n"); - $oP->add("

Step 5: Configuration completed

\n"); - - @unlink($sConfigFile); // remove the aborted config - $oP->error("Error: Failed to login for user: '$sAuthUser'\n"); - - $oP->add("
\n"); - $oP->add("\n"); - AddParamsToForm($oP, $aParamValues); - $oP->add("\n"); - $oP->add("
\n"); - return; - } - } - - // try to make the final config file read-only - @chmod($sConfigFile, 0440); // Read-only for owner and group, nothing for others - - $oP->set_title("Setup complete"); - $oP->add("
\n"); - - // Check if there are some manual steps required: - $oProductionEnv = new RunTimeEnvironment(); - $aAvailableModules = $oProductionEnv->AnalyzeInstallation($oConfig, $aParamValues['target_dir']); - $aManualSteps = array(); - $sRootUrl = utils::GetAbsoluteUrlAppRoot(); - foreach($aParamValues['module'] as $sModuleId) - { - if (!empty($aAvailableModules[$sModuleId]['doc.manual_setup'])) - { - $aManualSteps[$aAvailableModules[$sModuleId]['label']] = $sRootUrl.$aAvailableModules[$sModuleId]['doc.manual_setup']; - } - } - if (count($aManualSteps) > 0) - { - $oP->add("

Manual operations required

"); - $oP->p("In order to complete the installation, the following manual operations are required:"); - foreach($aManualSteps as $sModuleLabel => $sUrl) - { - $oP->p("Manual instructions for $sModuleLabel"); - } - $oP->add("

Congratulations for installing iTop

"); - } - else - { - $oP->add("

Congratulations for installing iTop

"); - $oP->ok("The initialization completed successfully."); - } - // Form goes here.. No back button since the job is done ! - $oP->add(''); - $oP->add(""); - $oP->add(""); - $oP->add(""); - $oP->add('
'); - $oP->add("

\n"); - $oP->add("
\n"); - } - catch(Exception $e) - { - $oP->error("Error: unable to create the configuration file."); - $oP->p($e->getHtmlDesc()); - $oP->p("Did you forget to remove the previous (read-only) configuration file ?"); - $oP->add("
\n"); - $oP->add("\n"); - AddParamsToForm($oP, $aParamValues, array('previous_step')); - $oP->add("\n"); - $oP->add("
\n"); - } -} - -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Main program -/////////////////////////////////////////////////////////////////////////////////////////////////// - -clearstatcache(); // Make sure we know what we are doing ! -// Set a long (at least 4 minutes) execution time for the setup to avoid timeouts during this phase -ini_set('max_execution_time', max(240, ini_get('max_execution_time'))); -// While running the setup it is desirable to see any error that may happen -ini_set('display_errors', true); -ini_set('display_startup_errors', true); - -$aParams = array('mode', 'previous_step', 'licence_ok', 'db_server', 'db_user', 'db_pwd','db_name', 'new_db_name', 'db_prefix', 'module', 'sample_data', 'auth_user', 'auth_pwd', 'language', 'application_path', 'source_dir', 'target_dir'); -foreach($aParams as $sName) -{ - $aParamValues[$sName] = utils::ReadParam($sName, '', false, 'raw_data'); -} -$sConfigFile = utils::GetConfigFilePath(); -if (file_exists($sConfigFile)) -{ - // The configuration file already exists - if (!is_writable($sConfigFile)) - { - $oP->add("

iTop configuration wizard

\n"); - $oP->add("

Fatal error

\n"); - $oP->error("Error: the configuration file '".$sConfigFile."' already exists and cannot be overwritten."); - $oP->p("The wizard cannot modify the configuration file for you. If you want to upgrade iTop, please make sure that the file '".realpath($sConfigFile)."' can be modified by the web server."); - $oP->output(); - exit; - } -} -else -{ - // No configuration file yet - // Check that the wizard can write into the conf dir to create the configuration file - if (file_exists(APPCONF)) - { - $sTestedDir = APPCONF; - } - else - { - $sTestedDir = APPROOT; - } - if (!is_writable($sTestedDir)) - { - $oP->add("

iTop configuration wizard

\n"); - $oP->add("

Fatal error

\n"); - $oP->error("Error: the directory where to store the configuration file is not writable."); - $oP->p("The wizard cannot create the configuration file for you. Please make sure that the directory '".realpath($sTestedDir)."' is writable for the web server."); - $oP->output(); - exit; - } - if (!is_writable(APPROOT.'setup')) - { - $oP->add("

iTop configuration wizard

\n"); - $oP->add("

Fatal error

\n"); - $oP->error("Error: the directory where to store temporary setup files is not writable."); - $oP->p("The wizard cannot create operate. Please make sure that the directory '".realpath(APPROOT.'setup')."' is writable for the web server."); - $oP->output(); - exit; - } - -} - -$oConfig = new Config(); -$oConfig->UpdateFromParams($aParamValues); - -try -{ - switch($sOperation) - { - case 'step0': - $oP->no_cache(); - $oP->log("Info - ========= Wizard step 0 ========"); - WelcomeAndCheckPrerequisites($oP, $aParamValues, 0); - break; - - case 'step1': - $oP->no_cache(); - $oP->log("Info - ========= Wizard step 1 ========"); - LicenceAcknowledgement($oP, $aParamValues, 1); - break; - - case 'step2': - $oP->log("Info - ========= Wizard step 2 ========"); - DatabaseServerSelection($oP, $aParamValues, 2); - break; - - case 'step3': - $oP->no_cache(); - $oP->log("Info - ========= Wizard step 3 ========"); - DatabaseInstanceSelection($oP, $aParamValues, 3, $oConfig); - break; - - case 'step4': - $oP->no_cache(); - $oP->log("Info - ========= Wizard step 4 ========"); - ModulesSelection($oP, $aParamValues, 4, $oConfig); - break; - - case 'step5': - $oP->no_cache(); - $oP->log("Info - ========= Wizard step 5 ========"); - AdminAccountDefinition($oP, $aParamValues, 5, $oConfig); - break; - - case 'step6': - $oP->no_cache(); - $oP->log("Info - ========= Wizard step 6 ========"); - ApplicationPathSelection($oP, $aParamValues, 6, $oConfig); - break; - - case 'step7': - $oP->no_cache(); - $oP->log("Info - ========= Wizard step 7 ========"); - SampleDataSelection($oP, $aParamValues, 6, $oConfig); - break; - - case 'step8': - $oP->no_cache(); - $oP->log("Info - ========= Wizard step 8 ========"); - DisplaySummary($oP, $aParamValues, 7, $oConfig); - break; - - case 'step9': - $oP->no_cache(); - $oP->log("Info - ========= Wizard step 9 ========"); - SetupFinished($oP, $aParamValues, 8, $oConfig); - break; - - default: - $oP->error("Error: unsupported operation '$sOperation'"); - - } -} -catch(Exception $e) -{ - $oP->error("Error: '".$e->getMessage()."'"); - $oP->add("\n"); -} -catch(CoreException $e) -{ - $oP->error("Error: '".$e->getHtmlDesc()."'"); - $oP->add("\n"); -} -$oP->output(); -?> \ No newline at end of file diff --git a/setup/licence.html b/setup/licence.html deleted file mode 100644 index d64890f8c..000000000 --- a/setup/licence.html +++ /dev/null @@ -1,694 +0,0 @@ - - - - - GNU General Public License - GNU Project - Free Software Foundation (FSF) - - - -

GNU GENERAL PUBLIC LICENSE

-

Version 3, 29 June 2007

- -

Copyright © 2007 Free Software Foundation, Inc. - <http://fsf.org/>

- Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed.

- -

Preamble

- -

The GNU General Public License is a free, copyleft license for -software and other kinds of works.

- -

The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too.

- -

When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things.

- -

To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others.

- -

For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights.

- -

Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it.

- -

For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions.

- -

Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users.

- -

Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free.

- -

The precise terms and conditions for copying, distribution and -modification follow.

- -

TERMS AND CONDITIONS

- -

0. Definitions.

- -

“This License” refers to version 3 of the GNU General Public License.

- -

“Copyright” also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks.

- -

“The Program” refers to any copyrightable work licensed under this -License. Each licensee is addressed as “you”. “Licensees” and -“recipients” may be individuals or organizations.

- -

To “modify” a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a “modified version” of the -earlier work or a work “based on” the earlier work.

- -

A “covered work” means either the unmodified Program or a work based -on the Program.

- -

To “propagate” a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well.

- -

To “convey” a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying.

- -

An interactive user interface displays “Appropriate Legal Notices” -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion.

- -

1. Source Code.

- -

The “source code” for a work means the preferred form of the work -for making modifications to it. “Object code” means any non-source -form of a work.

- -

A “Standard Interface” means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language.

- -

The “System Libraries” of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -“Major Component”, in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it.

- -

The “Corresponding Source” for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work.

- -

The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source.

- -

The Corresponding Source for a work in source code form is that -same work.

- -

2. Basic Permissions.

- -

All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law.

- -

You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you.

- -

Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary.

- -

3. Protecting Users' Legal Rights From Anti-Circumvention Law.

- -

No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures.

- -

When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures.

- -

4. Conveying Verbatim Copies.

- -

You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program.

- -

You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee.

- -

5. Conveying Modified Source Versions.

- -

You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions:

- -
    -
  • a) The work must carry prominent notices stating that you modified - it, and giving a relevant date.
  • - -
  • b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - “keep intact all notices”.
  • - -
  • c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it.
  • - -
  • d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so.
  • -
- -

A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -“aggregate” if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate.

- -

6. Conveying Non-Source Forms.

- -

You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways:

- -
    -
  • a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange.
  • - -
  • b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge.
  • - -
  • c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b.
  • - -
  • d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements.
  • - -
  • e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d.
  • -
- -

A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work.

- -

A “User Product” is either (1) a “consumer product”, which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, “normally used” refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product.

- -

“Installation Information” for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made.

- -

If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM).

- -

The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network.

- -

Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying.

- -

7. Additional Terms.

- -

“Additional permissions” are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions.

- -

When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission.

- -

Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms:

- -
    -
  • a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or
  • - -
  • b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or
  • - -
  • c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or
  • - -
  • d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or
  • - -
  • e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or
  • - -
  • f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors.
  • -
- -

All other non-permissive additional terms are considered “further -restrictions” within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying.

- -

If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms.

- -

Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way.

- -

8. Termination.

- -

You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11).

- -

However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation.

- -

Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice.

- -

Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10.

- -

9. Acceptance Not Required for Having Copies.

- -

You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so.

- -

10. Automatic Licensing of Downstream Recipients.

- -

Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License.

- -

An “entity transaction” is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts.

- -

You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it.

- -

11. Patents.

- -

A “contributor” is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's “contributor version”.

- -

A contributor's “essential patent claims” are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, “control” includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License.

- -

Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version.

- -

In the following three paragraphs, a “patent license” is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To “grant” such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party.

- -

If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. “Knowingly relying” means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid.

- -

If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it.

- -

A patent license is “discriminatory” if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007.

- -

Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law.

- -

12. No Surrender of Others' Freedom.

- -

If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program.

- -

13. Use with the GNU Affero General Public License.

- -

Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such.

- -

14. Revised Versions of this License.

- -

The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns.

- -

Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License “or any later version” applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation.

- -

If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program.

- -

Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version.

- -

15. Disclaimer of Warranty.

- -

THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

- -

16. Limitation of Liability.

- -

IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES.

- -

17. Interpretation of Sections 15 and 16.

- -

If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee.

- -

END OF TERMS AND CONDITIONS

- -

How to Apply These Terms to Your New Programs

- -

If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms.

- -

To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the “copyright” line and a pointer to where the full notice is found.

- -
    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
- -

Also add information on how to contact you by electronic and paper mail.

- -

If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode:

- -
    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
- -

The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an “about box”.

- -

You should also get your employer (if you work as a programmer) or school, -if any, to sign a “copyright disclaimer” for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -<http://www.gnu.org/licenses/>.

- -

The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -<http://www.gnu.org/philosophy/why-not-lgpl.html>.

- - diff --git a/setup/setup.js b/setup/setup.js index 5af2fe1aa..d81e013fe 100644 --- a/setup/setup.js +++ b/setup/setup.js @@ -1,342 +1,3 @@ -function NameIsValid(name) -{ - sName = new String(name); - if (sName.match(/^[A-Za-z][A-Za-z0-9_]*$/)) return true; - return false; -} - -function DoGoBack(iStep) -{ - $('input[name=operation]').val('step'+iStep); - $(':button').attr('disabled', 'disabled'); - $('#theForm').submit(); // Submit the form - return true; -} - -function DoSubmit(sMsg, iStep) -{ - var bResult = true; - switch(iStep) - { - case 0: // Select either install or upgrade or nothing to select... - if ( ($("input:radio").length > 0) && ($("input:radio:checked").length < 1)) - { - alert('Please select either install or upgrade'); - bResult = false; - } - break; - - case 1: // Licence agreement - if ($('#licence_ok:checked').length < 1) - { - alert('Please accept the licence agreement before continuing.'); - bResult = false; - } - break; - - case 2: // Database server selection - if ($('#db_server').val() == '') - { - alert('Please specify a database server. Use "localhost" for a local DB server.'); - bResult = false; - } - else if ($('#db_user').val() == '') - { - alert('Please specify a user name to connect to the database.'); - bResult = false; - } - break; - - case 3: // Database instance selection - if ($("input[@type=radio]:checked").length < 1) - { - alert('Please specify a database name'); - bResult = false; - } - else if( ($("#new_db:checked").length == 1)) - { - if ($('#new_db_name').val() == '') - { - alert('Please specify the name of the database to create'); - bResult = false; - } - else if (!NameIsValid($('#new_db_name').val())) - { - alert($('#new_db_name').val()+' is not a valid database name. Please limit yourself to letters, numbers and the underscore character.'); - bResult = false; - } - } - else if ($("#current_db:checked").length == 1) - { - // Special case (DB enumeration failed, user must enter DB name) - if ($("#current_db_name").val() == '') - { - alert('Please specify the name of the database.'); - bResult = false; - } - else - { - // Copy the typed value as the value of the radio - $("#current_db").val($("#current_db_name").val()); - } - } - if( ($('#db_prefix').val() != '') && (!NameIsValid($('#db_prefix').val())) ) - { - alert($('#db_prefix').val()+' is not a valid table name. Please limit yourself to letters, numbers and the underscore character.'); - bResult = false; - } - break; - - case 4: // Choice of iTop modules - break; - - case 5: // Administrator account - if ($('#auth_user').val() == '') - { - alert('Please specify a login name for the administrator account'); - bResult = false; - } - else if ($('#auth_pwd').val() != $('#auth_pwd2').val()) - { - alert('Retyped password does not match! Please verify the password.'); - bResult = false; - } - break; - - case 6: // application path - var appPath = new String($('#application_path').val()); - if (appPath == '') - { - alert('Please specify the URL to the application'); - bResult = false; - } - else - { - var bMatch = appPath.match(/^http(?:s)?\:\/\//); - if (!bMatch) - { - alert('"'+appPath+'" does not look like a valid URL for the application...\nPlease check your input.'); - bResult = false; - } - else - { - // Make sure that the root URL ends with a slash - var bMatch = appPath.match(/\/$/); - if (!bMatch) - { - // If not, add a slash at the end - appPath += '/'; - $('#application_path').val(appPath); - } - } - } - - break; - - case 7: // Sample data selection - break; - - case 8: // Display Summary: launch DoCompileDataModel to start the asynchronous update - bResult = DoCompileDataModel(); - break; - - // Email test page - case 10: - if ($('#to').val() == '') - { - alert('Please specify a destination address'); - bResult = false; - } - } - if (bResult) - { - $(':button').attr('disabled', 'disabled'); - if ((sMsg != '')) - { - $('#setup').block({message: ' '+sMsg}); - } - } - return bResult; -} - -function DoCompileDataModel() -{ - $('#log').html(''); - $('#setup').block({message: '

Preparing data model...

0%

'}); - $('#progress').progression( {Current:5, Maximum: 100, aBackgroundImg: GetAbsoluteUrlAppRoot()+'setup/orange-progress.gif', aTextColor: '#000000'} ); - - var sSelectedModules = GetSelectedModules(); - var sMode = $(':input[name=mode]').val(); - var sSourceDir = $(':input[name=source_dir]').val(); - var sTargetDir = $(':input[name=target_dir]').val(); - - // Call the asynchronous page that performs the compilation of the data model and the creation of the configuration file - AsyncCompileDataModel(sSelectedModules, sMode, sSourceDir, sTargetDir, '', function(response, status, xhr) { - $('#log').html(response); - DoUpdateDBSchema(); - }); -} - -function DoUpdateDBSchema() -{ - $('#log').html(''); - $('#setup').block({message: '

Updating DB schema...

5%

'}); - $('#progress').progression( {Current:10, Maximum: 100, aBackgroundImg: GetAbsoluteUrlAppRoot()+'setup/orange-progress.gif', aTextColor: '#000000'} ); - - var sSelectedModules = GetSelectedModules(); - var sMode = $(':input[name=mode]').val(); - var sModulesDir = $(':input[name=target_dir]').val(); - var sDBServer = $(':input[name=db_server]').val(); - var sDBUser = $(':input[name=db_user]').val(); - var sDBPwd = $(':input[name=db_pwd]').val(); - var sDBName = $(':input[name=db_name]').val(); - var sNewDBName = $(':input[name=new_db_name]').val(); - var sDBPrefix = $(':input[name=db_prefix]').val(); - - // Call the asynchronous page that performs the creation/update of the DB Schema - AsyncUpdateDBSchema(sSelectedModules, sMode, sModulesDir, sDBServer, sDBUser, sDBPwd, sDBName, sNewDBName, sDBPrefix, function(response, status, xhr) { - $('#log').html(response); - DoUpdateProfiles(); - }); -} - -function DoUpdateProfiles() -{ - $('#log').html(''); - $('#setup_msg').text('Updating Profiles...'); - $('#progress').progression( {Current:40, Maximum: 100, aBackgroundImg: GetAbsoluteUrlAppRoot()+'setup/orange-progress.gif', aTextColor: '#000000'} ); - - var sSelectedModules = GetSelectedModules(); - var sMode = $(':input[name=mode]').val(); - var sModulesDir = $(':input[name=target_dir]').val(); - var sDBServer = $(':input[name=db_server]').val(); - var sDBUser = $(':input[name=db_user]').val(); - var sDBPwd = $(':input[name=db_pwd]').val(); - var sDBName = $(':input[name=db_name]').val(); - var sNewDBName = $(':input[name=new_db_name]').val(); - var sDBPrefix = $(':input[name=db_prefix]').val(); - var sAuthUser = $(':input[name=auth_user]').val(); - var sAuthPwd = $(':input[name=auth_pwd]').val(); - var sLanguage = $(':input[name=language]').val(); - - // Call the asynchronous page that performs the creation/update of the DB Schema - AsyncUpdateProfiles(sSelectedModules, sMode, sModulesDir, sDBServer, sDBUser, sDBPwd, sDBName, sNewDBName, sDBPrefix, sAuthUser, sAuthPwd, sLanguage, function(response, status, xhr) { - $('#log').html(response); - DoLoadDataAsynchronous(); - }); -} - -var aFilesToLoad = new Array(); -var iCounter = 0; - -function DoLoadDataAsynchronous(response, status, xhr) -{ - if (status == 'error') - { - $('#setup').unblock(); - return; // An error occurred ! - } - try - { - // The array aFilesToLoad is populated by this function dynamically written on the server - PopulateDataFilesList(); - iCurrent = 60; - if (aFilesToLoad.length == 0) - { - $('#progress').progression( {Current: 100} ); - } - else - { - $('#log').html(''); - $('#setup_msg').text('Loading data...'); - $('#progress').progression( {Current: 60, Maximum: 100, aBackgroundImg: GetAbsoluteUrlAppRoot()+'setup/orange-progress.gif', aTextColor: '#000000'} ); -// $('#log').ajaxError( -// function(e, xhr, settings, exception) -// { -// bStopAysncProcess = true; -// alert('Fatal error detected: '+ xhr.responseText); -// $('#log').append(xhr.responseText); -// $('#setup').unblock(); -// } ); - } - LoadNextDataFile('', '', ''); - } - catch(err) - { - alert('An exception occured: '+err); - } - return true; // Continue -} - -function LoadNextDataFile(response, status, xhr) -{ - if (status == 'error') - { - $('#setup').unblock(); - return; // Stop here - } - - try - { - if (iCounter < aFilesToLoad.length) - { - if (iCounter == (aFilesToLoad.length - 1)) - { - // Last file in the list (or only 1 file), this completes the session - sSessionStatus = 'end'; - } - else if (iCounter == 0) - { - // First file in the list, start the session - sSessionStatus = 'start'; - } - else - { - sSessionStatus = 'continue'; - } - iPercent = 60+Math.round((40.0 * (1+iCounter)) / aFilesToLoad.length); - sFileName = aFilesToLoad[iCounter]; - //alert('Loading file '+sFileName+' ('+iPercent+' %) - '+sSessionStatus); - $("#progress").progression({ Current: iPercent, Maximum: 100, aBackgroundImg: GetAbsoluteUrlAppRoot()+'setup/orange-progress.gif', aTextColor: '#000000' }); - iCounter++; - $('#log').load( GetAbsoluteUrlAppRoot()+'setup/ajax.dataloader.php', - { - 'selected_modules': GetSelectedModules(), - 'db_server': $(':input[name=db_server]').val(), - 'db_user': $(':input[name=db_user]').val(), - 'db_pwd': $(':input[name=db_pwd]').val(), - 'db_name': $(':input[name=db_name]').val(), - 'new_db_name': $(':input[name=new_db_name]').val(), - 'db_prefix': $(':input[name=db_prefix]').val(), - 'modules_dir': $(':input[name=target_dir]').val(), - 'operation': 'load_data', - 'file': sFileName, - 'percent': iPercent, - 'session_status': sSessionStatus - }, - LoadNextDataFile, 'html'); - } - else - { - // We're done - $("#progress").progression({ Current: 100, Maximum: 100, aBackgroundImg: GetAbsoluteUrlAppRoot()+'setup/orange-progress.gif', aTextColor: '#000000' }); - //$('#setup').unblock(); - $('#GoToNextStep').submit(); // Use the hidden form to navigate to the next step - } - } - catch(err) - { - alert('An exception occurred: '+err); - } -} - -function GetSelectedModules() -{ - var aModules = new Array(); - $(':input[name^=module]').each(function() { aModules.push($(this).val()); } ); - return aModules.join(','); -} - function WizardAsyncAction(sActionCode, oParams, OnErrorFunction) { var sStepClass = $('#_class').val(); diff --git a/setup/setup_environment.js b/setup/setup_environment.js deleted file mode 100644 index a14435e8a..000000000 --- a/setup/setup_environment.js +++ /dev/null @@ -1,112 +0,0 @@ -/** - * Wrapper for the compilation of the whole data model into a given environment - * - * @param string sSelectedModules CSV list of selected modules - * @param string sMode 'install' or 'upgrade' - * @param string sSourceDir The directory containing the source modules (some may be already compiled) - * @param string sTargetDir The target directory (is created if needed) for compiled modules - * @return void - */ -function AsyncCompileDataModel(sSelectedModules, sMode, sSourceDir, sTargetDir, sWorkspaceDir, OnCompleteFn) -{ - try - { - $.post( GetAbsoluteUrlAppRoot()+'setup/ajax.dataloader.php', - { - 'operation': 'compile_data_model', - 'selected_modules': sSelectedModules, - 'mode': sMode, - 'source_dir': sSourceDir, - 'target_dir': sTargetDir, - 'workspace_dir': sWorkspaceDir - }, - OnCompleteFn, 'html'); - } - catch(err) - { - alert('An exception occured: '+err); - } -} - -/** - * Wrapper for the creation/update of a given DB/environment - * - * @param string sSelectedModules CSV list of selected modules - * @param string sMode 'install' or 'upgrade' - * @param string sModulesDir The directory in which the modules have been compiled - * @param string sDBServer Database access... - * @param string sDBUser ... - * @param string sDBPwd ... - * @param string sDBName Name of an existing DB - * @param string sNewDBName Name of the new DB if sDBName is omitted - * @param string sDBPrefix Prefix the tables (shared database) - * @return void - */ -function AsyncUpdateDBSchema(sSelectedModules, sMode, sModulesDir, sDBServer, sDBUser, sDBPwd, sDBName, sNewDBName, sDBPrefix, OnCompleteFn) -{ - try - { - $.post( GetAbsoluteUrlAppRoot()+'setup/ajax.dataloader.php', - { - 'operation': 'update_db_schema', - 'selected_modules': sSelectedModules, - 'mode': sMode, - 'modules_dir': sModulesDir, - 'db_server': sDBServer, - 'db_user': sDBUser, - 'db_pwd': sDBPwd, - 'db_name': sDBName, - 'new_db_name': sNewDBName, - 'db_prefix': sDBPrefix, - }, - OnCompleteFn, 'html'); - } - catch(err) - { - alert('An exception occured: '+err); - } -} - -/** - * Wrapper for the creation/update for the user profiles (does create the admin user at creation), in a given environment - * @param string sSelectedModules CSV list of selected modules - * @param string sMode 'install' or 'upgrade' - * @param string sModulesDir The directory in which the modules have been compiled - * @param string sDBServer Database access... - * @param string sDBUser ... - * @param string sDBPwd ... - * @param string sDBName Name of an existing DB - * @param string sNewDBName Name of the new DB if sDBName is omitted - * @param string sDBPrefix Prefix the tables (shared database) - * @param string sAuthUser Credentials for the administrator - * @param string sAuthPwd - * @param string sLanguage Language code for the administrator (e.g. 'EN US') - * @return void - */ -function AsyncUpdateProfiles(sSelectedModules, sMode, sModulesDir, sDBServer, sDBUser, sDBPwd, sDBName, sNewDBName, sDBPrefix, sAuthUser, sAuthPwd, sLanguage, OnCompleteFn) -{ - try - { - $.post( GetAbsoluteUrlAppRoot()+'setup/ajax.dataloader.php', - { - 'operation': 'after_db_create', - 'selected_modules': sSelectedModules, - 'mode': sMode, - 'modules_dir': sModulesDir, - 'db_server': sDBServer, - 'db_user': sDBUser, - 'db_pwd': sDBPwd, - 'db_name': sDBName, - 'new_db_name': sNewDBName, - 'db_prefix': sDBPrefix, - 'auth_user': sAuthUser, - 'auth_pwd': sAuthPwd, - 'language': sLanguage, - }, - OnCompleteFn, 'html'); - } - catch(err) - { - alert('An exception occured: '+err); - } -} diff --git a/setup/setuppage.class.inc.php b/setup/setuppage.class.inc.php index 0f199fbda..b3d9ef6c2 100644 --- a/setup/setuppage.class.inc.php +++ b/setup/setuppage.class.inc.php @@ -38,7 +38,6 @@ class SetupPage extends NiceWebPage parent::__construct($sTitle); $this->add_linked_script("../js/jquery.blockUI.js"); $this->add_linked_script("../setup/setup.js"); - $this->add_linked_script("../setup/setup_environment.js"); $this->add_style(" body { background-color: #eee; diff --git a/setup/wizardsteps.class.inc.php b/setup/wizardsteps.class.inc.php index c53819969..92fb75862 100644 --- a/setup/wizardsteps.class.inc.php +++ b/setup/wizardsteps.class.inc.php @@ -294,6 +294,7 @@ EOF $("#db_pwd").val('$sDBPwd'); $("#db_name").val('$sDBName'); $("#db_prefix").val('$sDBPrefix'); + $("#db_pwd").trigger('change'); // Forces check of the DB connection EOF ); }