Example #1
0
 /**
  * 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);
     }
 }