CRUD reentrance protection

This commit is contained in:
Eric Espie
2022-04-05 10:28:12 +02:00
parent c788c93542
commit f6d92a189b
11 changed files with 555 additions and 166 deletions

View File

@@ -0,0 +1,42 @@
<?php
/*
* @copyright Copyright (C) 2010-2022 Combodo SARL
* @license http://opensource.org/licenses/AGPL-3.0
*/
namespace Combodo\iTop\Service;
use SetupUtils;
use utils;
class EventHelper
{
public static function GetCachedClasses($sModuleName, callable $ListBuilder)
{
$aClasses = [];
$sCacheFileName = '';
if (!utils::IsDevelopmentEnvironment()) {
// Try to read from cache
$sCacheFileName = utils::GetCachePath()."EventsClassList/$sModuleName.php";
if (is_file($sCacheFileName)) {
$aClasses = include $sCacheFileName;
}
}
if (empty($aClasses)) {
$aClasses = call_user_func($ListBuilder);
if (!utils::IsDevelopmentEnvironment() && !empty($aClasses)) {
// Save to cache
$sCacheContent = "<?php\n\nreturn ".var_export($aClasses, true).";";
SetupUtils::builddir(dirname($sCacheFileName));
file_put_contents($sCacheFileName, $sCacheContent);
}
}
return $aClasses;
}
}