/** * {@inheritDoc} */ public function processAction(Request $request) { $controllers = $this->getCatalogContentControllers($request); $controller = null; if (null == ($catalogRequestId = $request->query->get('catalogRequestId'))) { if (0 < count($controllers)) { $controller = $controllers[0]; $catalogRequestId = $controller->getCatalogRequestId(); $this->get('logger')->debug('defaulting to controller : ' . get_class($controller)); } } else { // let's see if we have a controller for this... $definition = Toolbox::className($catalogRequestId . 'Controller'); $controller = Beans::getBean($definition); $this->get('logger')->debug('delegating to controller : ' . get_class($controller)); } // check authorization as we'll need the follow up redirect point to the catalog URL, not a tab url $authorized = $this->container->get('sacsManager')->authorize($request, $request->getRequestId(), $this->getUser(), false); if (null == $controller || !$authorized) { // no controller found return parent::processAction($request); } // fake requestId $requestId = $request->getRequestId(); $request->setRequestId($catalogRequestId); // processAction $catalogViewContent = null; try { $catalogContentView = $controller->processAction($request); $catalogContentView->setLayout(null); $catalogViewContent = $catalogContentView->generate($request); } catch (Exception $e) { $catalogViewContent = null; } // restore for normal processing $request->setRequestId($requestId); // now do the normal thing $view = parent::processAction($request); // add catalog content view to be used in catalog view template $view->setVariable('catalogRequestId', $catalogRequestId); $view->setVariable('catalogViewContent', $catalogViewContent); $view->setVariable('controllers', $controllers); return $view; }
/** * Build status map. * * @return array Plugin status map. */ protected function buildStatusMap() { // this could be merged, but it seems simpler to avoid more nesting... $pathIdMap = array(); foreach ($this->pluginDirs as $basePath) { if (file_exists($basePath) && is_dir($basePath)) { $pathIdMap[$basePath] = array(); foreach (new \DirectoryIterator($basePath) as $filename => $fileInfo) { if ($fileInfo->isDir() && !$fileInfo->isDot() && file_exists($fileInfo->getPathname() . '/plugin.yaml')) { $id = $fileInfo->getFilename(); $pathIdMap[$basePath][] = array('id' => $fileInfo->getFilename(), 'pluginDir' => $fileInfo->getPathname()); } } } } $statusMap = array(); foreach ($pathIdMap as $basePath => $pathInfo) { foreach ($pathInfo as $info) { $id = $info['id']; $pluginDir = $info['pluginDir']; $pluginClass = Toolbox::className($id); $pluginClasses = array(); $pluginClasses[] = sprintf(Plugins::PLUGIN_BASE_NAMESPACE . '\\%s\\%sPlugin', $id, $pluginClass); $pluginClasses[] = $this->defaultPluginClass; foreach ($pluginClasses as $pluginClass) { if (class_exists($pluginClass)) { break; } $pluginClass = null; } if ($pluginClass && class_exists($pluginClass)) { $config = array(); $pluginConfig = $pluginDir . '/plugin.yaml'; $config = Yaml::parse($pluginConfig); // add some stuff $config['meta']['id'] = $id; $config['meta']['pluginDir'] = $pluginDir; $config['meta']['class'] = $pluginClass; // final adjustments $statusMap[$id] = $this->pluginOptionsLoader->load($id, $config); } } } return $statusMap; }