mirror of
https://github.com/Combodo/iTop.git
synced 2026-05-17 22:39:03 +02:00
N°2957 - Compile classes in separated files
This commit is contained in:
@@ -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.<module>.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 =
|
||||
<<<EOF
|
||||
<?php
|
||||
//
|
||||
// File generated by ... on the $sCurrDate
|
||||
// Please do not edit manually
|
||||
//
|
||||
|
||||
/**
|
||||
* Classes and menus for $sModuleName (version $sModuleVersion)
|
||||
*
|
||||
* @author $sAuthor
|
||||
* @license $sLicence
|
||||
*/
|
||||
|
||||
EOF;
|
||||
$ret = file_put_contents($sResultFile, $sFileHeader.$sCompiledCode);
|
||||
if ($ret === false)
|
||||
{
|
||||
$iLen = strlen($sFileHeader.$sCompiledCode);
|
||||
$fFree = @disk_free_space(dirname($sResultFile));
|
||||
$aErr = error_get_last();
|
||||
throw new Exception("Failed to write '$sResultFile'. Last error: '{$aErr['message']}', content to write: $iLen bytes, available free space on disk: $fFree.");
|
||||
}
|
||||
$this->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 =
|
||||
<<<EOF
|
||||
<?php
|
||||
//
|
||||
// File generated by ... on the $sCurrDate
|
||||
// Please do not edit manually
|
||||
//
|
||||
|
||||
/**
|
||||
* Classes and menus for $sModuleName (version $sModuleVersion)
|
||||
*
|
||||
* @author $sAuthor
|
||||
* @license $sLicence
|
||||
*/
|
||||
|
||||
EOF;
|
||||
$this->WriteFile($sResultFile, $sFileHeader.$sCompiledCode);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user