/** * Helper function to rebuild the default configuration and the list of includes from a directory and a list of selected modules * @param string $sModulesDir The relative path to the directory to scan for modules (typically the 'env-xxx' directory resulting from the compilation) * @param array $aSelectedModules An array of selected modules' identifiers. If null all modules found will be considered as installed * @throws Exception */ public function UpdateIncludes($sModulesDir, $aSelectedModules = null) { if (!is_null($sModulesDir)) { // Initialize the arrays below with default values for the application... $oEmptyConfig = new Config('dummy_file', false); // Do NOT load any config file, just set the default values $aAddOns = $oEmptyConfig->GetAddOns(); $aAppModules = $oEmptyConfig->GetAppModules(); if (file_exists(APPROOT . $sModulesDir . '/core/main.php')) { $aAppModules[] = $sModulesDir . '/core/main.php'; } $aDataModels = $oEmptyConfig->GetDataModels(); $aWebServiceCategories = $oEmptyConfig->GetWebServiceCategories(); $aDictionaries = $oEmptyConfig->GetDictionaries(); // Merge the values with the ones provided by the modules // Make sure when don't load the same file twice... $aModules = ModuleDiscovery::GetAvailableModules(array(APPROOT . $sModulesDir)); foreach ($aModules as $sModuleId => $aModuleInfo) { list($sModuleName, $sModuleVersion) = ModuleDiscovery::GetModuleName($sModuleId); if (is_null($aSelectedModules) || in_array($sModuleName, $aSelectedModules)) { if (isset($aModuleInfo['datamodel'])) { $aDataModels = array_unique(array_merge($aDataModels, $aModuleInfo['datamodel'])); } if (isset($aModuleInfo['webservice'])) { $aWebServiceCategories = array_unique(array_merge($aWebServiceCategories, $aModuleInfo['webservice'])); } if (isset($aModuleInfo['settings'])) { list($sName, $sVersion) = ModuleDiscovery::GetModuleName($sModuleId); foreach ($aModuleInfo['settings'] as $sProperty => $value) { if (isset($this->m_aModuleSettings[$sName][$sProperty])) { // Do nothing keep the original value } else { $this->SetModuleSetting($sName, $sProperty, $value); } } } if (isset($aModuleInfo['installer'])) { $sModuleInstallerClass = $aModuleInfo['installer']; if (!class_exists($sModuleInstallerClass)) { throw new Exception("Wrong installer class: '{$sModuleInstallerClass}' is not a PHP class - Module: " . $aModuleInfo['label']); } if (!is_subclass_of($sModuleInstallerClass, 'ModuleInstallerAPI')) { throw new Exception("Wrong installer class: '{$sModuleInstallerClass}' is not derived from 'ModuleInstallerAPI' - Module: " . $aModuleInfo['label']); } $aCallSpec = array($sModuleInstallerClass, 'BeforeWritingConfig'); call_user_func_array($aCallSpec, array($this)); } } } $this->SetAddOns($aAddOns); $this->SetAppModules($aAppModules); $this->SetDataModels($aDataModels); $this->SetWebServiceCategories($aWebServiceCategories); // Scan dictionaries // foreach (glob(APPROOT . $sModulesDir . '/dictionaries/*.dict.php') as $sFilePath) { $sFile = basename($sFilePath); $aDictionaries[] = $sModulesDir . '/dictionaries/' . $sFile; } $this->SetDictionaries($aDictionaries); } }
/** * Helper function to initialize a configuration from the page arguments */ public function UpdateFromParams($aParamValues, $sModulesDir = null, $bPreserveModuleSettings = false) { if (isset($aParamValues['application_path'])) { $this->Set('app_root_url', $aParamValues['application_path']); } if (isset($aParamValues['mode']) && isset($aParamValues['language'])) { if ($aParamValues['mode'] == 'install' || $this->GetDefaultLanguage() == '') { $this->SetDefaultLanguage($aParamValues['language']); } } if (isset($aParamValues['db_server'])) { $this->SetDBHost($aParamValues['db_server']); $this->SetDBUser($aParamValues['db_user']); $this->SetDBPwd($aParamValues['db_pwd']); $sDBName = $aParamValues['db_name']; if ($sDBName == '') { // Todo - obsolete after the transition to the new setup (2.0) is complete (WARNING: used by the designer) $sDBName = $aParamValues['new_db_name']; } $this->SetDBName($sDBName); $this->SetDBSubname($aParamValues['db_prefix']); } if (!is_null($sModulesDir)) { if (isset($aParamValues['selected_modules'])) { $aSelectedModules = explode(',', $aParamValues['selected_modules']); } else { $aSelectedModules = null; } // Initialize the arrays below with default values for the application... $oEmptyConfig = new Config('dummy_file', false); // Do NOT load any config file, just set the default values $aAddOns = $oEmptyConfig->GetAddOns(); $aAppModules = $oEmptyConfig->GetAppModules(); $aDataModels = $oEmptyConfig->GetDataModels(); $aWebServiceCategories = $oEmptyConfig->GetWebServiceCategories(); $aDictionaries = $oEmptyConfig->GetDictionaries(); // Merge the values with the ones provided by the modules // Make sure when don't load the same file twice... $aModules = ModuleDiscovery::GetAvailableModules(array(APPROOT . $sModulesDir)); foreach ($aModules as $sModuleId => $aModuleInfo) { list($sModuleName, $sModuleVersion) = ModuleDiscovery::GetModuleName($sModuleId); if (is_null($aSelectedModules) || in_array($sModuleName, $aSelectedModules)) { if (isset($aModuleInfo['datamodel'])) { $aDataModels = array_unique(array_merge($aDataModels, $aModuleInfo['datamodel'])); } if (isset($aModuleInfo['webservice'])) { $aWebServiceCategories = array_unique(array_merge($aWebServiceCategories, $aModuleInfo['webservice'])); } if (isset($aModuleInfo['settings'])) { list($sName, $sVersion) = ModuleDiscovery::GetModuleName($sModuleId); foreach ($aModuleInfo['settings'] as $sProperty => $value) { if ($bPreserveModuleSettings && isset($this->m_aModuleSettings[$sName][$sProperty])) { // Do nothing keep the original value } else { $this->SetModuleSetting($sName, $sProperty, $value); } } } if (isset($aModuleInfo['installer'])) { $sModuleInstallerClass = $aModuleInfo['installer']; if (!class_exists($sModuleInstallerClass)) { throw new Exception("Wrong installer class: '{$sModuleInstallerClass}' is not a PHP class - Module: " . $aModuleInfo['label']); } if (!is_subclass_of($sModuleInstallerClass, 'ModuleInstallerAPI')) { throw new Exception("Wrong installer class: '{$sModuleInstallerClass}' is not derived from 'ModuleInstallerAPI' - Module: " . $aModuleInfo['label']); } $aCallSpec = array($sModuleInstallerClass, 'BeforeWritingConfig'); call_user_func_array($aCallSpec, array($this)); } } } $this->SetAddOns($aAddOns); $this->SetAppModules($aAppModules); $this->SetDataModels($aDataModels); $this->SetWebServiceCategories($aWebServiceCategories); // Scan dictionaries // if (!is_null($sModulesDir)) { foreach (glob(APPROOT . $sModulesDir . '/dictionaries/*.dict.php') as $sFilePath) { $sFile = basename($sFilePath); $aDictionaries[] = $sModulesDir . '/dictionaries/' . $sFile; } } $this->SetDictionaries($aDictionaries); } }