N°7803 - MTP from itophub/designer failing in itop 3.2.0

This commit is contained in:
Eric Espie
2024-12-16 16:44:59 +01:00
parent 8647a76dbf
commit 32ef639ce1
5 changed files with 48 additions and 15 deletions

View File

@@ -1451,9 +1451,12 @@ class utils
* @return string A path to a folder into which any module can store cache data
* The corresponding folder is created or cleaned upon code compilation
*/
public static function GetCachePath()
public static function GetCachePath(string $sEnvironment = null): string
{
return static::GetDataPath().'cache-'.MetaModel::GetEnvironment().'/';
if (is_null($sEnvironment)) {
$sEnvironment = MetaModel::GetEnvironment();
}
return static::GetDataPath()."cache-$sEnvironment/";
}
/**

View File

@@ -7532,8 +7532,41 @@ abstract class MetaModel
return $aEntries;
}
public static function ResetAllCaches($sEnvironment = null)
{
if (is_null($sEnvironment)) {
$sEnvironment = MetaModel::GetEnvironment();
}
$sEnvironmentId = md5(APPROOT).'-'.$sEnvironment;
$sAppIdentity = 'itop-'.$sEnvironmentId;
require_once(APPROOT.'/core/dict.class.inc.php');
Dict::ResetCache($sAppIdentity);
if (function_exists('apc_delete')) {
foreach (self::GetCacheEntries($sEnvironmentId) as $sKey => $aAPCInfo) {
$sAPCKey = $aAPCInfo['info'];
apc_delete($sAPCKey);
}
}
require_once(APPROOT.'core/userrights.class.inc.php');
UserRights::FlushPrivileges();
// Reset the opcache since otherwise the PHP "model" files may still be cached !!
if (function_exists('opcache_reset')) {
// Zend opcode cache
opcache_reset();
}
require_once(APPROOT.'setup/setuputils.class.inc.php');
SetupUtils::rrmdir(utils::GetCachePath($sEnvironment));
}
/**
* @internal
* @param string $sEnvironmentId
* @deprecated 3.2.1
*/
public static function ResetCache($sEnvironmentId = null)
{

View File

@@ -1089,7 +1089,7 @@ class ApplicationInstaller
// Ready to go !!
require_once(APPROOT.'core/dict.class.inc.php');
MetaModel::ResetCache();
MetaModel::ResetAllCaches();
}
}

View File

@@ -125,7 +125,7 @@ class RunTimeEnvironment
if (!$bUseCache)
{
// Reset the cache for the first use !
MetaModel::ResetCache(md5(APPROOT).'-'.$this->sTargetEnv);
MetaModel::ResetAllCaches($this->sTargetEnv);
}
MetaModel::Startup($oConfig, $bModelOnly, $bUseCache, false /* $bTraceSourceFiles */, $this->sTargetEnv);
@@ -534,11 +534,7 @@ class RunTimeEnvironment
$oMFCompiler = new MFCompiler($oFactory, $this->sFinalEnv);
$oMFCompiler->Compile($sTargetDir, null, $bUseSymLinks, $bSkipTempDir);
$sCacheDir = APPROOT.'data/cache-'.$this->sTargetEnv;
SetupUtils::builddir($sCacheDir);
SetupUtils::tidydir($sCacheDir);
MetaModel::ResetCache(md5(APPROOT).'-'.$this->sTargetEnv);
MetaModel::ResetAllCaches($this->sTargetEnv);
return array_keys($aModulesToCompile);
}
@@ -994,7 +990,7 @@ class RunTimeEnvironment
@chmod($sFinalConfig, 0440); // Read-only for owner and group, nothing for others
@rmdir(dirname($sTargetConfig)); // Cleanup the temporary build dir if empty
MetaModel::ResetCache(md5(APPROOT).'-'.$this->sFinalEnv);
MetaModel::ResetAllCaches($this->sFinalEnv);
}
}

View File

@@ -790,15 +790,16 @@ class SetupUtils
// avoid unnecessary warning
// Try 100 times...
$i = 100;
while ((@rmdir($dir) === false) && $i > 0)
{
while ((@rmdir($dir) === false) && $i > 0) {
// Magic trick for windows
// sometimes the folder is empty but rmdir fails
closedir(opendir($dir));
$oDir = opendir($dir);
if ($oDir !== false) {
closedir($oDir);
}
$i--;
}
if ($i == 0)
{
if ($i == 0) {
rmdir($dir);
}
}