diff --git a/setup/compiler.class.inc.php b/setup/compiler.class.inc.php index f541058f20..dd9b32bce9 100644 --- a/setup/compiler.class.inc.php +++ b/setup/compiler.class.inc.php @@ -318,14 +318,21 @@ class MFCompiler } else { - /** @var \DOMElement $oClass */ + /** @var \MFElement $oClass */ foreach($oClasses as $oClass) { $sClass = $oClass->getAttribute("id"); $aAllClasses[] = $sClass; try { - $sCompiledCode .= $this->CompileClass($oClass, $sTempTargetDir, $sFinalTargetDir, $sRelativeDir); + $aCompiledClasses = $this->CompileClass($oClass, $sTempTargetDir, $sFinalTargetDir, $sRelativeDir); + foreach ($aCompiledClasses as $sClass => $sCompiledClass) + { + $sClassFileName = DIRECTORY_SEPARATOR.$sRelativeDir.DIRECTORY_SEPARATOR.'model'.DIRECTORY_SEPARATOR.$sClass.'.php'; + $sClassFile = "{$sTempTargetDir}{$sClassFileName}"; + $this->WritePHPFile($sClassFile, $sModuleName, $sModuleVersion, $sCompiledClass); + $sCompiledCode .= "require_once ('{$sFinalTargetDir}{$sClassFileName}');\n"; + } } catch (DOMFormatException $e) { @@ -466,49 +473,7 @@ EOF; // Write the code into the given module as model..php // $sResultFile = $sTempTargetDir.'/'.$sRelativeDir.'/model.'.$sModuleName.'.php'; - if (is_file($sResultFile)) - { - $this->Log("Updating $sResultFile for module $sModuleName in version $sModuleVersion ($iClassCount classes)"); - } else - { - $sResultDir = dirname($sResultFile); - if (!is_dir($sResultDir)) - { - $this->Log("Creating directory $sResultDir"); - mkdir($sResultDir, 0777, true); - } - $this->Log("Creating $sResultFile for module $sModuleName in version $sModuleVersion ($iClassCount classes)"); - } - - // Compile the module into a single file - // - $sCurrDate = date(DATE_ISO8601); - $sAuthor = 'iTop compiler'; - $sLicence = 'http://opensource.org/licenses/AGPL-3.0'; - $sFileHeader = - <<WritePHPFile($sResultFile, $sModuleName, $sModuleVersion, $sCompiledCode); } else { @@ -611,8 +576,8 @@ EOF; SetupUtils::builddir($sTempTargetDir.'/core'); $sPHPFile = $sTempTargetDir.'/core/main.php'; file_put_contents($sPHPFile, $this->sMainPHPCode); - + $sCurrDate = date(DATE_ISO8601); // Autoload $sPHPFile = $sTempTargetDir.'/autoload.php'; $sPHPFileContent = @@ -1018,7 +983,7 @@ EOF * @param string $sFinalTargetDir * @param string $sModuleRelativeDir * - * @return string + * @return array * @throws \DOMFormatException */ protected function CompileClass($oClass, $sTempTargetDir, $sFinalTargetDir, $sModuleRelativeDir) @@ -2030,7 +1995,7 @@ $sZlists; EOF; // some other stuff (magical attributes like friendlyName) are done in MetaModel::InitClasses and though not present in the // generated PHP - $sPHP = $this->GeneratePhpCodeForClass($sClassName, $sParentClass, $sClassParams, $sInitMethodCalls, + $aPHP[$sClassName] = $this->GeneratePhpCodeForClass($sClassName, $sParentClass, $sClassParams, $sInitMethodCalls, $bIsAbstractClass, $sMethods, $aRequiredFiles, $sCodeComment); // N°931 generates TagFieldData classes for AttributeTag fields @@ -2060,11 +2025,11 @@ EOF { $sTagClassName = static::GetTagDataClassName($sClassName, $sTagFieldName); $sTagClassParams = var_export($aTagClassParams, true); - $sPHP .= $this->GeneratePhpCodeForClass($sTagClassName, $sTagClassParentClass, $sTagClassParams, $sTagInitMethodCalls); + $aPHP[$sTagClassName] = $this->GeneratePhpCodeForClass($sTagClassName, $sTagClassParentClass, $sTagClassParams, $sTagInitMethodCalls); } } - return $sPHP; + return $aPHP; } private static function GetTagDataClassName($sClass, $sAttCode) @@ -3150,4 +3115,53 @@ XML; $this->WriteFile("$sTempTargetDir/web.config", $sContent); } + + /** + * @param $sResultFile + * @param $sModuleName + * @param $sModuleVersion + * @param $sCompiledCode + * + * @throws \Exception + */ + protected function WritePHPFile($sResultFile, $sModuleName, $sModuleVersion, $sCompiledCode) + { + if (is_file($sResultFile)) + { + $this->Log("Updating $sResultFile for module $sModuleName in version $sModuleVersion"); + } + else + { + $sResultDir = dirname($sResultFile); + if (!is_dir($sResultDir)) + { + $this->Log("Creating directory $sResultDir"); + mkdir($sResultDir, 0777, true); + } + $this->Log("Creating $sResultFile for module $sModuleName in version $sModuleVersion"); + } + + // Compile the module into a single file + // + $sCurrDate = date(DATE_ISO8601); + $sAuthor = 'iTop compiler'; + $sLicence = 'http://opensource.org/licenses/AGPL-3.0'; + $sFileHeader = + <<WriteFile($sResultFile, $sFileHeader.$sCompiledCode); + } }