/** * Perform the error node action */ public function indexAction(Cms $cms, $locale, $site, $revision) { $node = $site; if (!$cms->resolveNode($site, $revision, $node, null, true)) { return; } $cms->setLastAction(self::NAME); $this->setContentLocale($locale); $translator = $this->getTranslator(); $referer = $this->request->getQueryParameter('referer'); $nodeList = $cms->getNodeList($node, $locale); $data = array('node404' => $site->get('error.404'), 'node403' => $site->get('error.403')); $form = $this->createFormBuilder($data); $form->addRow('node404', 'select', array('label' => $translator->translate('label.node.404'), 'options' => $nodeList)); $form->addRow('node403', 'select', array('label' => $translator->translate('label.node.403'), 'options' => $nodeList)); $form = $form->build(); if ($form->isSubmitted()) { try { $form->validate(); $data = $form->getData(); foreach ($data as $statusCode => $errorNode) { $statusCode = str_replace('node', '', $statusCode); $site->set('error.' . $statusCode, $errorNode); } $cms->saveNode($site, "Set error pages for " . $site->getName()); $this->addSuccess('success.node.saved', array('node' => $site->getName($locale))); $url = $this->getUrl(self::ROUTE, array('site' => $site->getId(), 'revision' => $node->getRevision(), 'locale' => $locale, 'node' => $node->getId())); if ($referer) { $url .= '?referer=' . urlencode($referer); } $this->response->setRedirect($url); return; } catch (ValidationException $validationException) { $this->setValidationException($validationException, $form); } } $this->setTemplateView('cms/backend/site.error', array('site' => $site, 'node' => $node, 'form' => $form->getView(), 'referer' => $referer, 'locale' => $locale, 'locales' => $cms->getLocales())); }
/** * Action to manage the trash of a site * @param \ride\web\cms\Cms $cms Facade to the CMS * @param string $site Id of the site * @param string $revision Name of the revision to work with * @param string $locale Code of the locale * @return null */ public function trashAction(Cms $cms, $site, $revision, $locale) { if (!$cms->resolveNode($site, $revision)) { return; } $this->setContentLocale($locale); $translator = $this->getTranslator(); $referer = $this->request->getQueryParameter('referer'); $trashNodeOptions = array(); $trashNodes = $cms->getTrashNodes($site->getId()); foreach ($trashNodes as $trashNodeId => $trashNode) { $trashNodeOptions[$trashNodeId] = $trashNode->getNode()->getName($locale) . ' (' . date('Y-m-d H:i:s', $trashNode->getDate()) . ')'; } $form = $this->createFormBuilder(); $form->addRow('nodes', 'option', array('label' => $translator->translate('label.nodes.trash'), 'description' => $translator->translate('label.nodes.trash.description'), 'options' => $trashNodeOptions, 'multiple' => true, 'validators' => array('required' => array()))); $form->addRow('destination', 'select', array('label' => $translator->translate('label.destination'), 'description' => $translator->translate('label.destination.restore.description'), 'options' => $cms->getNodeList($site, $locale, true))); $form = $form->build(); if ($form->isSubmitted()) { try { $form->validate(); $data = $form->getData(); $restoreNodes = array(); foreach ($data['nodes'] as $trashNodeId => $trashNodeName) { $restoreNodes[] = $trashNodes[$trashNodeId]; } $cms->restoreTrashNodes($site, $restoreNodes, $data['destination']); $this->response->setRedirect($referer); return; } catch (ValidationException $exception) { $this->setValidationException($exception, $form); } } $this->setTemplateView('cms/backend/site.trash', array('referer' => $referer, 'site' => $site, 'node' => $site, 'form' => $form->getView(), 'trashNodes' => $trashNodes, 'locale' => $locale, 'locales' => $cms->getLocales())); }
/** * Action to handle and show the properties of this widget * @return null */ public function propertiesAction(ValidationFactory $validationFactory) { $translator = $this->getTranslator(); $node = $this->properties->getNode(); $rootNodeId = $node->getRootNodeId(); $site = $this->cms->getNode($rootNodeId, $node->getRevision(), $rootNodeId, null, true); $levels = $this->cms->getChildrenLevels($site) - 1; $nodeList = $this->cms->getNodeList($site, $this->locale, true, true, false); $nodeList[self::PARENT_CURRENT] = $translator->translate('label.menu.parent.current'); for ($i = 1; $i <= $levels; $i++) { $nodeList[self::PARENT_ABSOLUTE . $i] = $translator->translate('label.menu.parent.absolute', array('level' => $i)); } for ($i = 0; $i < $levels; $i++) { $level = $i + 1; $nodeList[self::PARENT_RELATIVE . $level] = $translator->translate('label.menu.parent.relative', array('level' => '-' . $level)); } $depths = array(); for ($i = 1, $j = $levels + 1; $i <= $j; $i++) { $depths[$i] = $i; } $title = $this->properties->getWidgetProperty(self::PROPERTY_TITLE); if ($title) { $showTitle = true; $title = $title == 1 ? '' : $title; } else { $showTitle = false; $title = null; } $data = array(self::PROPERTY_PARENT => $this->getParent(false), self::PROPERTY_NODES => $this->getNodeIds(), self::PROPERTY_DEPTH => $this->getDepth(), self::PROPERTY_TITLE . '-show' => $showTitle, self::PROPERTY_TITLE => $title, self::PROPERTY_TEMPLATE => $this->getTemplate(static::TEMPLATE_NAMESPACE . '/default')); if ($data[self::PROPERTY_NODES]) { $data[self::PROPERTY_PARENT . '-select'] = self::PROPERTY_NODES; } else { $data[self::PROPERTY_PARENT . '-select'] = self::PROPERTY_PARENT; } $form = $this->createFormBuilder($data); $form->addRow(self::PROPERTY_PARENT . '-select', 'option', array('label' => $translator->translate('label.menu.base'), 'default' => 'parent', 'options' => array(self::PROPERTY_PARENT => $translator->translate('label.menu.parent'), self::PROPERTY_NODES => $translator->translate('label.menu.nodes')), 'attributes' => array('data-toggle-dependant' => 'option-node-select'), 'validators' => array('required' => array()))); $form->addRow(self::PROPERTY_PARENT, 'select', array('label' => $translator->translate('label.menu.parent'), 'description' => $translator->translate('label.menu.parent.description'), 'options' => $nodeList, 'attributes' => array('class' => 'option-node-select option-node-select-' . self::PROPERTY_PARENT), 'hide-optional' => true)); $form->addRow(self::PROPERTY_NODES, 'select', array('label' => $translator->translate('label.menu.nodes'), 'description' => $translator->translate('label.menu.nodes.description'), 'options' => $nodeList, 'attributes' => array('class' => 'option-node-select option-node-select-' . self::PROPERTY_NODES), 'multiple' => true, 'hide-optional' => true)); $form->addRow(self::PROPERTY_DEPTH, 'select', array('label' => $translator->translate('label.menu.depth'), 'description' => $translator->translate('label.menu.depth.description'), 'options' => $depths)); $form->addRow(self::PROPERTY_TITLE . '-show', 'option', array('label' => $translator->translate('label.title.show'), 'description' => $translator->translate('label.menu.title.show.description'), 'attributes' => array('data-toggle-dependant' => 'option-title'))); $form->addRow(self::PROPERTY_TITLE, 'string', array('label' => $translator->translate('label.title'), 'description' => $translator->translate('label.menu.title.description'), 'attributes' => array('class' => 'option-title option-title-1'))); $form->addRow(self::PROPERTY_TEMPLATE, 'select', array('label' => $translator->translate('label.template'), 'options' => $this->getAvailableTemplates(static::TEMPLATE_NAMESPACE), 'validators' => array('required' => array()))); $requiredValidator = $validationFactory->createValidator('required', array()); $urlRequired = new ConditionalConstraint(); $urlRequired->addValueCondition(self::PROPERTY_PARENT . '-select', self::PROPERTY_PARENT); $urlRequired->addValidator($requiredValidator, self::PROPERTY_PARENT); $fileRequired = new ConditionalConstraint(); $fileRequired->addValueCondition(self::PROPERTY_PARENT . '-select', self::PROPERTY_NODES); $fileRequired->addValidator($requiredValidator, self::PROPERTY_NODES); $form->addValidationConstraint($urlRequired); $form->addValidationConstraint($fileRequired); $form = $form->build(); if ($form->isSubmitted()) { if ($this->request->getBodyParameter('cancel')) { return false; } try { $form->validate(); $data = $form->getData(); if ($data[self::PROPERTY_TITLE]) { $title = $data[self::PROPERTY_TITLE]; } elseif ($data[self::PROPERTY_TITLE . '-show']) { $title = '1'; } else { $title = null; } if ($data[self::PROPERTY_PARENT . '-select'] == self::PROPERTY_PARENT) { $this->properties->setWidgetProperty(self::PROPERTY_PARENT, $data[self::PROPERTY_PARENT]); $this->properties->setWidgetProperty(self::PROPERTY_NODES); } else { $this->properties->setWidgetProperty(self::PROPERTY_PARENT); $this->properties->setWidgetProperty(self::PROPERTY_NODES, implode(',', $data[self::PROPERTY_NODES])); } $this->properties->setWidgetProperty(self::PROPERTY_DEPTH, $data[self::PROPERTY_DEPTH]); $this->properties->setWidgetProperty(self::PROPERTY_TITLE, $title); $this->setTemplate($data[self::PROPERTY_TEMPLATE]); return true; } catch (ValidationException $exception) { $this->setValidationException($exception, $form); } } $view = $this->setTemplateView(static::TEMPLATE_NAMESPACE . '/properties', array('form' => $form->getView())); $view->addJavascript('js/form.js'); $form->processView($view); return false; }
public function formAction(Cms $cms, $locale, $site, $revision = null, $node = null) { if ($node) { if (!$cms->resolveNode($site, $revision, $node, 'redirect')) { return; } $cms->setLastAction('edit'); } else { if (!$cms->resolveNode($site, $revision)) { return; } $node = $cms->createNode('redirect', $site); } $this->setContentLocale($locale); $translator = $this->getTranslator(); $locales = $cms->getLocales(); $referer = $this->request->getQueryParameter('referer'); // get available nodes $nodeList = $cms->getNodeList($site, $locale, true, false); if ($node && isset($nodeList[$node->getId()])) { unset($nodeList[$node->getId()]); } // gather data $data = array('name' => $node->getName($locale), 'redirect-node' => $node->getRedirectNode($locale), 'redirect-url' => $node->getRedirectUrl($locale), 'route' => $node->getRoute($locale, false), 'availableLocales' => $this->getLocalesValueFromNode($node)); if ($data['redirect-url']) { $data['redirect-type'] = 'url'; } else { $data['redirect-type'] = 'node'; } // build form $form = $this->createFormBuilder($data); $form->addRow('name', 'string', array('label' => $translator->translate('label.redirect'), 'description' => $translator->translate('label.redirect.name.description'), 'filters' => array('trim' => array()), 'validators' => array('required' => array()))); $form->addRow('redirect-type', 'option', array('label' => $translator->translate('label.redirect.to'), 'options' => array('node' => $translator->translate('label.node'), 'url' => $translator->translate('label.url')), 'validators' => array('required' => array()))); $form->addRow('redirect-node', 'select', array('label' => $translator->translate('label.redirect.node'), 'description' => $translator->translate('label.redirect.node.description'), 'options' => $nodeList)); $form->addRow('redirect-url', 'string', array('label' => $translator->translate('label.redirect.url'), 'description' => $translator->translate('label.redirect.url.description'), 'filters' => array('trim' => array()))); $form->addRow('route', 'string', array('label' => $translator->translate('label.route'), 'description' => $translator->translate('label.route.description'), 'filters' => array('trim' => array()))); if ($site->isLocalizationMethodCopy()) { $form->addRow('availableLocales', 'select', array('label' => $translator->translate('label.locales'), 'description' => $translator->translate('label.locales.available.description'), 'options' => $this->getLocalesOptions($node, $translator, $locales), 'multiple' => true, 'validators' => array('required' => array()))); } // process form $form = $form->build(); if ($form->isSubmitted()) { try { $form->validate(); $data = $form->getData(); $node->setName($locale, $data['name']); $node->setRoute($locale, $data['route']); if ($site->isLocalizationMethodCopy()) { $node->setAvailableLocales($this->getOptionValueFromForm($data['availableLocales'])); } else { $node->setAvailableLocales($locale); } if ($data['redirect-type'] == 'node') { $node->setRedirectNode($locale, $data['redirect-node']); $node->setRedirectUrl($locale, null); } else { $node->setRedirectNode($locale, null); $node->setRedirectUrl($locale, $data['redirect-url']); } $cms->saveNode($node, (!$node->getId() ? 'Created new redirect ' : 'Updated redirect ') . $node->getName()); $this->addSuccess('success.node.saved', array('node' => $node->getName($locale))); $url = $this->getUrl('cms.redirect.edit', array('locale' => $locale, 'site' => $site->getId(), 'revision' => $node->getRevision(), 'node' => $node->getId())); if ($referer) { $url .= '?referer=' . urlencode($referer); } $this->response->setRedirect($url); return; } catch (ValidationException $validationException) { $this->setValidationException($validationException, $form); } } // show view $this->setTemplateView('cms/backend/redirect.form', array('site' => $site, 'node' => $node, 'referer' => $referer, 'form' => $form->getView(), 'locale' => $locale, 'locales' => $locales)); }