diff --git a/application/menunode.class.inc.php b/application/menunode.class.inc.php index 612c2c5e5..791571d17 100644 --- a/application/menunode.class.inc.php +++ b/application/menunode.class.inc.php @@ -84,14 +84,10 @@ class ApplicationMenu { // Build menus from module handlers // - foreach(get_declared_classes() as $sPHPClass) - { - if (is_subclass_of($sPHPClass, 'ModuleHandlerAPI')) - { - $aCallSpec = array($sPHPClass, 'OnMenuCreation'); - call_user_func($aCallSpec); - } - } + foreach(MetaModel::EnumPlugins('ModuleHandlerApiInterface') as $oPHPClass) + { + $oPHPClass::OnMenuCreation(); + } // Build menus from the menus themselves (e.g. the ShortcutContainerMenuNode will do that) // diff --git a/core/metamodel.class.php b/core/metamodel.class.php index aee4a756d..bfb629dc3 100644 --- a/core/metamodel.class.php +++ b/core/metamodel.class.php @@ -2599,7 +2599,7 @@ abstract class MetaModel // Build the list of available extensions // - $aInterfaces = array('iApplicationUIExtension', 'iApplicationObjectExtension', 'iQueryModifier', 'iOnClassInitialization', 'iPopupMenuExtension', 'iPageUIExtension', 'iPortalUIExtension'); + $aInterfaces = array('iApplicationUIExtension', 'iApplicationObjectExtension', 'iQueryModifier', 'iOnClassInitialization', 'iPopupMenuExtension', 'iPageUIExtension', 'iPortalUIExtension', 'ModuleHandlerApiInterface'); foreach($aInterfaces as $sInterface) { self::$m_aExtensionClasses[$sInterface] = array(); @@ -5858,20 +5858,10 @@ abstract class MetaModel CMDBSource::SelectDB(self::$m_sDBName); - foreach(get_declared_classes() as $sPHPClass) - { - if (is_subclass_of($sPHPClass, 'ModuleHandlerAPI')) - { - $aCallSpec = array($sPHPClass, 'OnMetaModelStarted'); - call_user_func_array($aCallSpec, array()); - } - } - -// if (false) -// { -// echo "Debug
\n"; -// self::static_var_dump(); -// } + foreach(MetaModel::EnumPlugins('ModuleHandlerApiInterface') as $oPHPClass) + { + $oPHPClass::OnMetaModelStarted(); + } ExpressionCache::Warmup(); } diff --git a/core/modulehandler.class.inc.php b/core/modulehandler.class.inc.php index 154bfc04b..d56307f63 100644 --- a/core/modulehandler.class.inc.php +++ b/core/modulehandler.class.inc.php @@ -25,7 +25,7 @@ * @license http://opensource.org/licenses/AGPL-3.0 */ -abstract class ModuleHandlerAPI +abstract class ModuleHandlerAPI implements ModuleHandlerApiInterface { public static function OnMetaModelStarted() { @@ -34,5 +34,19 @@ abstract class ModuleHandlerAPI public static function OnMenuCreation() { } + + public function __construct() + { + } + } -?> + + +interface ModuleHandlerApiInterface +{ + public static function OnMetaModelStarted(); + + public static function OnMenuCreation(); + + public function __construct(); //empty params is required in order to be instantiable by MetaModel::InitClasses() +} \ No newline at end of file