diff --git a/setup/compiler.class.inc.php b/setup/compiler.class.inc.php index 33d3986c2..5d1ac171d 100644 --- a/setup/compiler.class.inc.php +++ b/setup/compiler.class.inc.php @@ -27,7 +27,6 @@ class DOMFormatException extends Exception class MFCompiler { protected $oFactory; - protected $aSourceDirs; protected $aRootClasses; protected $aLog; diff --git a/setup/modelfactory.class.inc.php b/setup/modelfactory.class.inc.php index e3e1cf026..ec7db8ef2 100644 --- a/setup/modelfactory.class.inc.php +++ b/setup/modelfactory.class.inc.php @@ -106,7 +106,7 @@ class MFModule */ class ModelFactory { - protected $sRootDir; + protected $aRootDirs; protected $oDOMDocument; protected $oRoot; protected $oModules; @@ -119,9 +119,9 @@ class ModelFactory static protected $aLoadErrors; - public function __construct($sRootDir, $aRootNodeExtensions = array()) + public function __construct($aRootDirs, $aRootNodeExtensions = array()) { - $this->sRootDir = $sRootDir; + $this->aRootDirs = $aRootDirs; $this->oDOMDocument = new MFDocument(); $this->oRoot = $this->oDOMDocument->CreateElement('itop_design'); $this->oRoot->setAttribute('xmlns:xsi', "http://www.w3.org/2001/XMLSchema-instance"); @@ -1070,13 +1070,13 @@ EOF } /** - * Searches on disk in the root directory for module description files + * Searches on disk in the root directories for module description files * and returns an array of MFModules * @return array Array of MFModules */ - public function FindModules($sSubDirectory = '') + public function FindModules() { - $aAvailableModules = ModuleDiscovery::GetAvailableModules($this->sRootDir, array($sSubDirectory)); + $aAvailableModules = ModuleDiscovery::GetAvailableModules($this->aRootDirs); $aResult = array(); foreach($aAvailableModules as $sId => $aModule) { diff --git a/setup/runtimeenv.class.inc.php b/setup/runtimeenv.class.inc.php index 54142266d..287113edf 100644 --- a/setup/runtimeenv.class.inc.php +++ b/setup/runtimeenv.class.inc.php @@ -279,20 +279,25 @@ class RunTimeEnvironment $sSourceDirFull = APPROOT.$sSourceDir; if (!is_dir($sSourceDirFull)) { - throw new Exception("The source directory '$sSourceDir' does not exist (or could not be read)"); + throw new Exception("The source directory '$sSourceDirFull' does not exist (or could not be read)"); } - + $aDirsToCompile = array($sSourceDirFull); + if (is_dir(APPROOT.'extensions')) + { + $aDirsToCompile[] = APPROOT.'extensions'; + } + $aRet = array(); // Determine the installed modules // $oSourceConfig = new Config(APPCONF.$sSourceEnv.'/'.ITOP_CONFIG_FILE); $oSourceEnv = new RunTimeEnvironment($sSourceEnv); - $aAvailableModules = $oSourceEnv->AnalyzeInstallation($oSourceConfig, $sSourceDir); //TODO: use an absolute PATH + $aAvailableModules = $oSourceEnv->AnalyzeInstallation($oSourceConfig, $aDirsToCompile); // Do load the required modules // - $oFactory = new ModelFactory($sSourceDirFull); + $oFactory = new ModelFactory($aDirsToCompile); $aModules = $oFactory->FindModules(); foreach($aModules as $foo => $oModule) { @@ -308,13 +313,11 @@ class RunTimeEnvironment return $aRet; } - public function CompileFrom($sSourceEnv, $sSourceDir = null) + public function CompileFrom($sSourceEnv) { - if (is_null($sSourceDir)) - { - $oSourceConfig = new Config(utils::GetConfigFilePath($sSourceEnv)); - $sSourceDir = $oSourceConfig->Get('source_dir'); - } + $oSourceConfig = new Config(utils::GetConfigFilePath($sSourceEnv)); + $sSourceDir = $oSourceConfig->Get('source_dir'); + $sSourceDirFull = APPROOT.$sSourceDir; // Do load the required modules // @@ -347,9 +350,10 @@ class RunTimeEnvironment $sTargetDir = APPROOT.'env-'.$this->sTargetEnv; self::MakeDirSafe($sTargetDir); - $oMFCompiler = new MFCompiler($oFactory, $sSourceDirFull); + $oMFCompiler = new MFCompiler($oFactory); $oMFCompiler->Compile($sTargetDir); - + + require_once(APPROOT.'/core/dict.class.inc.php'); MetaModel::ResetCache($this->sTargetEnv); } } @@ -546,9 +550,12 @@ class RunTimeEnvironment { if (!is_dir($sDir)) { - @mkdir($sDir); + if (!@mkdir($sDir)) + { + throw new Exception("Failed to create directory '$sTargetPath', please check the rights of the web server"); + } + @chmod($sDir, 0770); // RWX for owner and group, nothing for others } - @chmod($sDir, 0770); // RWX for owner and group, nothing for others } /**