/** * Loads the modules from the module manager and assigns them to the * configured groups. * * @return $this */ protected function loadMenuModules() { // Gather all modules with any menu inherent or overridden presence // and store them locally according to their nature. foreach ($this->core->modules()->getModules() as $moduleKey => $module) { // If the configuration has overriding data for this module's presence, // use it. Otherwise load the menu's own presence. // Normalize single & plural presences for each module. if ($this->isConfiguredModulePresenceDisabled($module)) { continue; } $configuredPresencesForModule = $this->getConfiguredModulePresence($module); $presencesForModule = $module->getMenuPresence(); $presencesForModule = $this->mergeNormalizedMenuPresences($presencesForModule, $configuredPresencesForModule); // If a module has no presence, skip it if (!$presencesForModule) { continue; } foreach ($this->normalizeMenuPresence($presencesForModule) as $presence) { $presence = $this->filterUnpermittedFromPresence($presence); if (!$presence) { continue; } if ($this->isMenuPresenceAlternative($presence)) { // If a menu presence is deemed 'alternative', it should not // appear in the normal menu structure. $this->alternativePresences->push($presence); } else { // Otherwise, determine whether it is assigned to a group // or should be left 'ungrouped'. $groupKey = $this->getConfiguredModuleGroupKey($module); $menuGroup = $this->findMenuGroupPresenceByKey($groupKey); if (false === $menuGroup) { $this->menuUngrouped->push($presence); } else { /** @var MenuPresenceInterface $menuGroup */ $menuGroup->addChild($presence); } } } } return $this; }
/** * Loads the ACL presences from modules and stores it normalized in the main presences collection. * * @return $this */ protected function loadAclModules() { // Gather all modules with any menu inherent or overridden presence // and store them locally according to their nature. foreach ($this->core->modules()->getModules() as $moduleKey => $module) { $presencesForModule = $module->getAclPresence(); // If a module has no presence, skip it if (!$presencesForModule) { continue; } if (!$this->modulePresences->has($moduleKey)) { $this->modulePresences->put($moduleKey, new Collection()); } foreach ($this->normalizeAclPresence($presencesForModule) as $presence) { if (!$presence) { continue; } $this->presences->push($presence); $this->modulePresences->get($moduleKey)->push($presence); } } return $this; }
/** * Builds up routes for all modules in the given router context. * * @param Router $router */ protected function buildRoutesForModules(Router $router) { $this->core->modules()->mapWebRoutes($router); }