/** * Register plugins into session (called only at session beginning) * * @param $plugins Manager * @param $configuration Configuration */ private function registerPlugins(Manager $plugins, Configuration $configuration) { $must_register = []; foreach ($configuration->getPlugins() as $level => $sub_plugins) { foreach ($sub_plugins as $class_name => $plugin_configuration) { // registers and activates only when weaver is set $plugin = $plugins->register($class_name, $level, $plugin_configuration, isset($weaver)); // weaver is set : registers and actives all previous plugins if ($plugin instanceof IWeaver) { $weaver = $plugin; foreach ($must_register as $register) { $plugins->register($register['class_name'], $register['level'], $register['plugin_configuration']); } unset($must_register); } // weaver is not set : keep plugin definition for further registering and activation if (!isset($weaver)) { $must_register[] = ['plugin' => $plugin, 'class_name' => $class_name, 'level' => $level, 'plugin_configuration' => $plugin_configuration]; } if ($plugin instanceof IAutoloader) { $this->createApplication($configuration); } } } if (isset($weaver)) { $weaver->saveJoinpoints(Application::current()->getCacheDir() . SL . 'weaver.php'); } }