|
@@ -1742,93 +1742,92 @@ class Config
|
|
|
$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();
|
|
|
- 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 ($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);
|
|
|
- }
|
|
|
+ $this->UpdateIncludes($sModulesDir, $aSelectedModules);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 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);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|