. // }}} /** * Module and plugin loader code, one of the main features of GNU social * * Loads plugins from `plugins/enabled`, instances them * and hooks its events * * @package GNUsocial * @category Modules * * @author Hugo Sales * @copyright 2020 Free Software Foundation, Inc http://www.fsf.org * @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later */ namespace App\DependencyInjection\Compiler; use App\Core\ModuleManager; use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; use Symfony\Component\DependencyInjection\ContainerBuilder; class ModuleManagerPass implements CompilerPassInterface { public function process(ContainerBuilder $container) { $module_paths = array_merge(glob(INSTALLDIR . '/components/*/*.php'), glob(INSTALLDIR . '/plugins/*/*.php')); $module_manager = new ModuleManager(); foreach ($module_paths as $path) { // 'modules' and 'plugins' have the same length $type = ucfirst(preg_replace('%' . INSTALLDIR . '/(component|plugin)s/.*%', '\1', $path)); $module = basename(dirname($path)); $fqcn = "\\{$type}\\{$module}\\{$module}"; $module_manager->add($fqcn, $path); } $module_manager->preRegisterEvents(); file_put_contents(INSTALLDIR . '/var/cache/module_manager.php', "