Quellcode durchsuchen

#1188 Advanced customizations: allow to define a new constant or a brand new class as part of a delta

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@4222 a333f486-631f-4898-b8df-5754b55c2be0
romainq vor 9 Jahren
Ursprung
Commit
080dfd041b
1 geänderte Dateien mit 49 neuen und 28 gelöschten Zeilen
  1. 49 28
      setup/compiler.class.inc.php

+ 49 - 28
setup/compiler.class.inc.php

@@ -196,6 +196,10 @@ class MFCompiler
 				// Push the other module files
 				SetupUtils::copydir($sModuleRootDir, $sTempTargetDir.'/'.$sRelativeDir, $bUseSymbolicLinks);
 			}
+			else
+			{
+				$sRelativeDir = '';
+			}
 
 			$sCompiledCode = '';
 
@@ -361,33 +365,36 @@ EOF;
 			//
 			if (strlen($sCompiledCode) > 0)
 			{
-				// We have compiled something: write the result file
+				// We have compiled something: write the code somewhere
 				//
-				$sResultFile = $sTempTargetDir.'/'.$sRelativeDir.'/model.'.$sModuleName.'.php';
-				if (is_file($sResultFile))
-				{
-					$this->Log("Updating $sResultFile for module $sModuleName in version $sModuleVersion ($iClassCount classes)");
-				}
-				else
+				if (strlen($sRelativeDir) > 0)
 				{
-					$sResultDir = dirname($sResultFile);
-					if (!is_dir($sResultDir))
+					// Write the code into the given module as model.<module>.php
+					//
+					$sResultFile = $sTempTargetDir.'/'.$sRelativeDir.'/model.'.$sModuleName.'.php';
+					if (is_file($sResultFile))
 					{
-						$this->Log("Creating directory $sResultDir");
-						mkdir($sResultDir, 0777, true);
+						$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)");
 					}
-					$this->Log("Creating $sResultFile for module $sModuleName in version $sModuleVersion ($iClassCount classes)");
-				}
 
-				// Compile the module into a single file
-				//
-				$sId = $sModuleName;
-				$sCurrDate = date(DATE_ISO8601);
-				$sAuthor = 'iTop compiler';
-				$sLicence = 'http://opensource.org/licenses/AGPL-3.0';
-				$sFileHeader =
-<<<EOF
-<?php
+					// Compile the module into a single file
+					//
+					$sId = $sModuleName;
+					$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
@@ -401,13 +408,27 @@ EOF;
  */
 
 EOF;
-				$ret = file_put_contents($sResultFile, $sFileHeader.$sCompiledCode);
-				if ($ret === false)
+					$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.");
+					}
+				}
+				else
 				{
-					$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.");
+					// Write the code into core/main.php
+					//
+					$this->sMainPHPCode .=
+					<<<EOF
+/**
+ * Data model from the delta file
+ */
+
+EOF;
+					$this->sMainPHPCode .= $sCompiledCode;
 				}
 			}
 			else