From 7aa2c9dcd18ae233ba00083ad213613ce796836b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 8 Dec 2013 02:32:04 +0100 Subject: [PATCH] Fix: Error management with corrupted module files --- htdocs/admin/modules.php | 83 +++++++++++++++++++-------------- htdocs/admin/system/modules.php | 30 ++++++++---- 2 files changed, 69 insertions(+), 44 deletions(-) diff --git a/htdocs/admin/modules.php b/htdocs/admin/modules.php index b4e6ff2f628..0b0c9db4f17 100644 --- a/htdocs/admin/modules.php +++ b/htdocs/admin/modules.php @@ -136,44 +136,57 @@ foreach ($modulesdir as $dir) try { $res=include_once $dir.$file; - $objMod = new $modName($db); - $modNameLoaded[$modName]=$dir; + if (class_exists($modName)) + { + try { + $objMod = new $modName($db); + $modNameLoaded[$modName]=$dir; - if ($objMod->numero > 0) - { - $j = $objMod->numero; - } - else - { - $j = 1000 + $i; - } + if ($objMod->numero > 0) + { + $j = $objMod->numero; + } + else + { + $j = 1000 + $i; + } - $modulequalified=1; + $modulequalified=1; - // We discard modules according to features level (PS: if module is activated we always show it) - $const_name = 'MAIN_MODULE_'.strtoupper(preg_replace('/^mod/i','',get_class($objMod))); - if ($objMod->version == 'development' && (empty($conf->global->$const_name) && ($conf->global->MAIN_FEATURES_LEVEL < 2))) $modulequalified=0; - if ($objMod->version == 'experimental' && (empty($conf->global->$const_name) && ($conf->global->MAIN_FEATURES_LEVEL < 1))) $modulequalified=0; - // We discard modules according to property disabled - if (isset($objMod->hidden) && $objMod->hidden) $modulequalified=false; - - // Define array $categ with categ with at least one qualified module - if ($modulequalified) - { - $modules[$i] = $objMod; - $filename[$i]= $modName; - $orders[$i] = $objMod->family."_".$j; // Sort by family, then by module number - $dirmod[$i] = $dir; - // Set categ[$i] - $special = isset($specialtostring[$objMod->special])?$specialtostring[$objMod->special]:'unknown'; - if ($objMod->version == 'development' || $objMod->version == 'experimental') $special='expdev'; - if (isset($categ[$special])) $categ[$special]++; // Array of all different modules categories - else $categ[$special]=1; - $j++; - $i++; - } - else dol_syslog("Module ".get_class($objMod)." not qualified"); - } + // We discard modules according to features level (PS: if module is activated we always show it) + $const_name = 'MAIN_MODULE_'.strtoupper(preg_replace('/^mod/i','',get_class($objMod))); + if ($objMod->version == 'development' && (empty($conf->global->$const_name) && ($conf->global->MAIN_FEATURES_LEVEL < 2))) $modulequalified=0; + if ($objMod->version == 'experimental' && (empty($conf->global->$const_name) && ($conf->global->MAIN_FEATURES_LEVEL < 1))) $modulequalified=0; + // We discard modules according to property disabled + if (isset($objMod->hidden) && $objMod->hidden) $modulequalified=false; + + // Define array $categ with categ with at least one qualified module + if ($modulequalified) + { + $modules[$i] = $objMod; + $filename[$i]= $modName; + $orders[$i] = $objMod->family."_".$j; // Sort by family, then by module number + $dirmod[$i] = $dir; + // Set categ[$i] + $special = isset($specialtostring[$objMod->special])?$specialtostring[$objMod->special]:'unknown'; + if ($objMod->version == 'development' || $objMod->version == 'experimental') $special='expdev'; + if (isset($categ[$special])) $categ[$special]++; // Array of all different modules categories + else $categ[$special]=1; + $j++; + $i++; + } + else dol_syslog("Module ".get_class($objMod)." not qualified"); + } + catch(Exception $e) + { + dol_syslog("Failed to load ".$dir.$file." ".$e->getMessage(), LOG_ERR); + } + } + else + { + print "Warning bad descriptor file : ".$dir.$file." (Class ".$modName." not found into file)
"; + } + } catch(Exception $e) { dol_syslog("Failed to load ".$dir.$file." ".$e->getMessage(), LOG_ERR); diff --git a/htdocs/admin/system/modules.php b/htdocs/admin/system/modules.php index 73fd45d9099..a4cc4fefc11 100644 --- a/htdocs/admin/system/modules.php +++ b/htdocs/admin/system/modules.php @@ -74,15 +74,27 @@ foreach($modulesdir as $dir) else { // File to load - include_once $dir.$file; - - $objMod = new $modName($db); - - $modules[$objMod->numero]=$objMod; - $modules_names[$objMod->numero]=$objMod->name; - $modules_files[$objMod->numero]=$file; - $modules_fullpath[$file]=$dir.$file; - $picto[$objMod->numero]=(isset($objMod->picto) && $objMod->picto)?$objMod->picto:'generic'; + $res=include_once $dir.$file; + if (class_exists($modName)) + { + try { + $objMod = new $modName($db); + + $modules[$objMod->numero]=$objMod; + $modules_names[$objMod->numero]=$objMod->name; + $modules_files[$objMod->numero]=$file; + $modules_fullpath[$file]=$dir.$file; + $picto[$objMod->numero]=(isset($objMod->picto) && $objMod->picto)?$objMod->picto:'generic'; + } + catch(Exception $e) + { + dol_syslog("Failed to load ".$dir.$file." ".$e->getMessage(), LOG_ERR); + } + } + else + { + print "Warning bad descriptor file : ".$dir.$file." (Class ".$modName." not found into file)
"; + } } } }