/** * Insert module and return generated content. * * @param PageModuleWrapper $pageModuleWrapper * @return string */ protected function insertModule(PageModuleWrapper $pageModuleWrapper) { $this->app->logger->debug(($pageModuleWrapper->getEnabled() ? 'Inserting' : 'Skipping') . ' module "' . $pageModuleWrapper->getName() . '" of type "' . $pageModuleWrapper->getClassName() . '" with target "' . $pageModuleWrapper->getTarget() . '"'); /** @var PreModuleEvent $event */ $event = $this->app->dispatcher->dispatch(GeneratorEvents::PRE_MODULE, new PreModuleEvent($pageModuleWrapper)); if ($event->getContent() === null) { // TODO: how do we handle $event->isEnabled() ? /** @var \Curry\Module\AbstractModule $module */ $module = $pageModuleWrapper->createObject(); $template = null; if ($event->getTemplate() !== null) { $this->app->twig->loadTemplate($event->getTemplate()); } else { if ($module->getDefaultTemplate()) { $template = $this->app->loadTemplateString($module->getDefaultTemplate()); } } if ($template && $template->getEnvironment()) { $twig = $template->getEnvironment(); $twig->addGlobal('module', array('Id' => $pageModuleWrapper->getPageModuleId(), 'ClassName' => $pageModuleWrapper->getClassName(), 'Name' => $pageModuleWrapper->getName(), 'ModuleDataId' => $pageModuleWrapper->getModuleDataId(), 'Target' => $pageModuleWrapper->getTarget())); } $content = (string) $module->showFront($template); } else { $content = $event->getContent(); } /** @var PostModuleEvent $postEvent */ $postEvent = $this->app->dispatcher->dispatch(GeneratorEvents::POST_MODULE, new PostModuleEvent($pageModuleWrapper, $content, $event->getExtras())); return $postEvent->getContent(); }
/** * Wrap module with inline admin controls. * * @param string $content * @param PageModuleWrapper $pageModuleWrapper * @return string */ protected function adminModule($content, PageModuleWrapper $pageModuleWrapper) { $user = \User::getUser(); $pageId = $pageModuleWrapper->getPageRevision()->getPageId(); $page = $pageModuleWrapper->getPageRevision()->getPage(); $pageModuleId = $pageModuleWrapper->getPageModuleId(); $commands = array(); $templatePermission = $user->hasAccess('Curry_Backend_Template'); $contentPermission = $user->hasPagePermission($page, \PageAccessPeer::PERM_CONTENT); $modulePermission = $user->hasPagePermission($page, \PageAccessPeer::PERM_MODULES); $createPermission = $user->hasPagePermission($page, \PageAccessPeer::PERM_CREATE_MODULE); if (!$user->hasModuleAccess($pageModuleWrapper)) { return $content; } if ($contentPermission || $modulePermission) { $url = url('/admin/curry_backend_page/', array('view' => 'Module', 'page_id' => $pageId, 'page_module_id' => $pageModuleId)); if ($user->hasPagePermission($page, \PageAccessPeer::PERM_CONTENT)) { $commands['edit'] = array('Name' => 'Edit', 'Url' => $url, 'Class' => 'iframe'); } } if ($pageModuleWrapper->getTemplate() && $templatePermission) { $url = url('/admin/curry_backend_template/', array('view' => 'Edit', 'file' => $pageModuleWrapper->getTemplate())); $commands['template'] = array('Name' => 'Edit template', 'Url' => $url, 'Class' => 'iframe'); } if ($modulePermission) { $url = url('/admin/curry_backend_page/', array('view' => 'ModuleProperties', 'page_id' => $pageId, 'page_module_id' => $pageModuleId)); $commands['properties'] = array('Name' => 'Properties', 'Url' => $url, 'Class' => 'iframe'); } if ($createPermission && ($contentPermission && !$pageModuleWrapper->isInherited() || $modulePermission)) { $url = url('/admin/curry_backend_page/', array('view' => 'DeleteModule', 'page_id' => $pageId, 'page_module_id' => $pageModuleId)); $commands['delete'] = array('Name' => 'Delete', 'Url' => $url, 'Class' => 'iframe'); } $module = $pageModuleWrapper->createObject(); $commands = $module->getInlineCommands($commands); if (!count($commands)) { return $content; } $tpl = $this->app->loadTemplateString($this->getAdminModuleTpl()); return $tpl->render(array('Id' => $pageModuleId, 'Name' => $pageModuleWrapper->getName(), 'ClassName' => $pageModuleWrapper->getClassName(), 'Content' => $content, 'commands' => $commands)); }