public function getChildren() { if (!$this->initialized) { foreach ($this->getChildPages() as $page) { $this->initializeChildPage($page); } $this->initialized = true; } return parent::getChildren(); }
public function register(Application $app) { if (!isset($app['cms.url_fragment'])) { $app['cms.url_fragment'] = 'cms'; } $app['cms.helper'] = $app->share(function () use($app) { return new CmsHelper($app['url_generator']); }); $app['cms.node_registry'] = $app->share(function () use($app) { return new CmsNodeRegistry(); }); $app['metadata.queries.getCmsEntity'] = $app->share(function () use($app) { return new GetCmsEntityQuery($app['annotations.reader']); }); $app['metadata.queries.getCmsEntitySlug'] = $app->share(function () use($app) { return new GetCmsEntitySlugQuery($app['annotations.reader'], $app['metadata.queries.getEntityName']); }); $app['metadata.queries.getCmsNodePath'] = $app->share(function () use($app) { return new GetCmsNodePathQuery($app['annotations.reader']); }); $app['metadata.queries.getCmsNode'] = $app->share(function () use($app) { return new GetCmsNodeQuery($app['orm.manager_registry'], $app['cms.node_registry']); }); $app['metadata.queries.hasCmsNode'] = $app->share(function () use($app) { return new HasCmsNodeQuery($app['orm.manager_registry'], $app['cms.node_registry']); }); $app['metadata.queries.getRootCmsNode'] = $app->share(function () use($app) { return new GetRootCmsNodeQuery($app['orm.manager_registry'], $app['cms.node_registry']); }); $app['metadata.queries'] = $app->share($app->extend('metadata.queries', function (QueryCollection $collection) use($app) { $collection->registerQuery($app['metadata.queries.getCmsEntity'])->registerQuery($app['metadata.queries.getCmsEntitySlug'])->registerQuery($app['metadata.queries.getCmsNodePath'])->registerQuery($app['metadata.queries.getCmsNode'])->registerQuery($app['metadata.queries.hasCmsNode'])->registerQuery($app['metadata.queries.getRootCmsNode']); return $collection; })); $app['paginator.decorators.cmsTable'] = $app->share(function () use($app) { return new ChainedTableDataDecorator([new StringifierDecorator(), new HtmlStripperDecorator($app['orm.rm']), new TruncatorDecorator($app['string_helper']), new EscaperDecorator()]); }); $app['paginator.decorators.cmsIndex'] = $app->share(function () use($app) { return new ChainedTableDataDecorator([$app['paginator.decorators.cmsTable'], new LinkerDecorator($app['orm.rm'], $app['url_generator'])]); }); $app['cms.actions'] = $app->share(function () use($app) { return [new IndexAction($app['property_accessor'], $app['paginator.decorators.cmsIndex']), new AddAction($app['form.factory'], $app['url_generator']), new EditAction($app['form.factory'], $app['url_generator'])]; }); $app['cms.repository_node_factory'] = $app->share(function () use($app) { return new RepositoryCmsNodeFactory($app['cms.root_node'], $app['cms.actions']); }); $app['cms.login_action'] = $app->share(function () use($app) { return new ReskinnedAction($app['users.login_action'], '@cms/view/login'); }); $app['cms.content_node'] = $app->share(function () use($app) { return new ControllerNode(null, null, 'content', 'Content', null, true, false); }); $app['cms.root_node'] = $app->share(function () use($app) { $node = new ControllerNode(); $node->wrapChild($app['cms.content_node']); return $node; }); $app['cms.controllers'] = $app->share(function () use($app) { return $app['nodes.controllers_factory']($app['cms.root_node'], 'cms', 'node', false); }); $app['cms.navigation_list'] = $app->share(function () use($app) { $node = new CmsNavigationNode($app['cms.root_node'], 'cms', $app['url_generator']); return $node; }); $app['dispatcher'] = $app->share($app->extend('dispatcher', function (EventDispatcherInterface $dispatcher) use($app) { $dispatcher->addListener(ManagedRepositoryEvent::REGISTER, function (ManagedRepositoryEvent $event) use($app) { $repository = $event->getRepository(); $nodes = $app['cms.repository_node_factory']->createNodes($repository); $isRootNode = true; foreach ($nodes as $node) { $app['cms.node_registry']->register($repository, $node, $isRootNode); $isRootNode = false; } }); return $dispatcher; })); if (!isset($app['cms.access_rule'])) { $app['cms.access_rule'] = ['^/' . $app['cms.url_fragment'] . '/.*$', 'ROLE_ADMIN']; } $app['images.filters.cms_thumbnail'] = $app->share(function () use($app) { $filter = new ImageTransformer('cms-thumbnail'); $filter->getTransformation()->thumbnail(new Box(60, 60), ImageInterface::THUMBNAIL_OUTBOUND); return $filter; }); }