/** * @param Theme $theme * * @return FormBuilder */ protected function buildCommonForm(Theme $theme) { $n = $theme->getHomeNode(); $r = $theme->getRoot(); $defaults = ['available' => $theme->isAvailable(), 'className' => $theme->getClassName(), 'staticTheme' => $theme->isStaticTheme(), 'hostname' => $theme->getHostname(), 'routePrefix' => $theme->getRoutePrefix(), 'backendTheme' => $theme->isBackendTheme(), 'homeNode' => $n !== null ? $n->getId() : null, 'root' => $r !== null ? $r->getId() : null]; $builder = $this->getService('formFactory')->createNamedBuilder('source', 'form', $defaults)->add('available', 'checkbox', ['label' => 'available', 'required' => false])->add('staticTheme', 'checkbox', ['label' => 'staticTheme', 'required' => false, 'attr' => ['data-desc' => 'staticTheme.does_not.allow.node_url_routes']])->add('hostname', 'text', ['label' => 'hostname'])->add('routePrefix', 'text', ['label' => 'routePrefix', 'required' => false])->add('backendTheme', 'checkbox', ['label' => 'backendTheme', 'required' => false]); $d = $n !== null ? [$n] : []; $builder->add('homeNode', new \RZ\Roadiz\CMS\Forms\NodesType($d), ['label' => 'homeNode', 'required' => false]); $d = $r !== null ? [$r] : []; $builder->add('root', new \RZ\Roadiz\CMS\Forms\NodesType($d), ['label' => 'themeRoot', 'required' => false]); return $builder; }
/** * Return a NodesSources url without hostname and without * root folder. * * It returns a relative url to Roadiz, not relative to your server root. * * @param RZ\Roadiz\Core\Entities\Theme $theme * * @return string */ public function getNonContextualUrl(Theme $theme = null) { if (null !== $this->nodeSource) { if ($this->nodeSource->getNode()->isHome() || null !== $theme && $theme->getHomeNode() == $this->nodeSource->getNode()) { if ($this->nodeSource->getTranslation()->isDefaultTranslation() && false === $this->forceLocale) { return ''; } else { return $this->nodeSource->getTranslation()->getPreferredLocale(); } } $urlTokens = []; $urlTokens[] = $this->nodeSource->getHandler()->getIdentifier(); $parent = $this->nodeSource->getHandler()->getParent(); if ($parent !== null && !$parent->getNode()->isHome()) { do { if ($parent->getNode()->isVisible()) { $handler = $parent->getHandler(); $urlTokens[] = $handler->getIdentifier(); } $parent = $parent->getHandler()->getParent(); } while ($parent !== null && !$parent->getNode()->isHome()); } /* * If using node-name, we must use shortLocale when current * translation is not the default one. */ if ($urlTokens[0] == $this->nodeSource->getNode()->getNodeName() && !$this->nodeSource->getTranslation()->isDefaultTranslation() || true === $this->forceLocale) { $urlTokens[] = $this->nodeSource->getTranslation()->getPreferredLocale(); } $urlTokens = array_reverse($urlTokens); return implode('/', $urlTokens); } else { throw new \RuntimeException("Cannot generate Url for a NULL NodesSources", 1); } }