/** * {@inheritdoc} */ public function fromUrl($url) { if (!is_string($url)) { $this->error = "The url parameter must be a string"; return $this; } $this->permalink = null; $this->internalUrl = null; $this->productionRoute = null; $defaultUrlTokens = $this->generateDefaultUrlTokens(); if (strpos($url, ':') === false && $url != '#') { // It's just the permalink if (strpos($url, $defaultUrlTokens) === false) { $permalink = $url; $internalUrl = $defaultUrlTokens . $permalink; } else { $permalink = str_replace($defaultUrlTokens, '', $url); $internalUrl = $url; } $seo = $this->seoRepository->fromPermalink($permalink); if (null !== $seo) { $this->permalink = $permalink; $this->internalUrl = $internalUrl; $this->productionRoute = $this->generateRoute($seo->getLanguage(), $seo->getPage()); } } return $this; }
public static function getPermalinks(SeoRepositoryInterface $seoRepository, $language, $withNoneOption = true) { if (empty($language)) { return array(); } $seoAttributes = is_numeric($language) ? $seoRepository->fromLanguageId($language) : $seoRepository->fromLanguageName($language); $permalinks = array(); if ($withNoneOption) { $permalinks["none"] = " "; } foreach ($seoAttributes as $seoAttribute) { $permalink = $seoAttribute->getPermalink(); $permalinks[$permalink] = $permalink; } sort($permalinks); return $permalinks; }
/** * Overrides the base method to replace the permalink when it is used instad * of the page name * * @param Request $request */ protected function dispatchCurrentPageEvent(Request $request) { $pageName = $request->get('page'); $seo = $this->seoRepository->fromPermalink($pageName); if (null !== $seo) { $page = $this->pageRepository->fromPk($seo->getPageId()); $pageName = $page->getPageName(); } $eventName = sprintf('page_renderer.before_%s_rendering', $pageName); $this->dispatcher->dispatch($eventName, $this->event); }
/** * Edits the managed page attributes object * * @param array $values * @return boolean * @throws \RedKiteLabs\RedKiteCms\RedKiteCmsBundle\Core\Exception\Content\General\InvalidArgumentTypeException * * @api */ protected function edit(array $values = array()) { $values = $this->dispatchBeforeOperationEvent('\\RedKiteLabs\\RedKiteCms\\RedKiteCmsBundle\\Core\\Event\\Content\\Seo\\BeforeSeoEditingEvent', SeoEvents::BEFORE_EDIT_SEO, $values, array('message' => 'exception_seo_editing_aborted', 'domain' => 'exceptions')); try { if (isset($values['Permalink'])) { $currentPermalink = $this->alSeo->getPermalink(); if ($values['Permalink'] != $currentPermalink) { $values["oldPermalink"] = $currentPermalink; $values['Permalink'] = PageManager::slugify($values["Permalink"]); } else { unset($values['Permalink']); } } if (isset($values['MetaTitle']) && $values['MetaTitle'] == $this->alSeo->getMetaTitle()) { unset($values['MetaTitle']); } if (isset($values['MetaDescription']) && $values['MetaDescription'] == $this->alSeo->getMetaDescription()) { unset($values['MetaDescription']); } if (isset($values['MetaKeywords']) && $values['MetaKeywords'] == $this->alSeo->getMetaKeywords()) { unset($values['MetaKeywords']); } $this->validator->checkEmptyParams($values); $this->validator->checkOnceValidParamExists(array('Permalink' => '', 'MetaTitle' => '', 'MetaDescription' => '', 'MetaKeywords' => '', 'SitemapChangefreq' => '', 'SitemapPriority' => ''), $values); $this->seoRepository->startTransaction(); $this->seoRepository->setRepositoryObject($this->alSeo); $result = !empty($values) ? $this->seoRepository->save($values) : true; if (false !== $result) { $eventName = SeoEvents::BEFORE_EDIT_SEO_COMMIT; $result = !$this->eventsHandler->createEvent($eventName, '\\RedKiteLabs\\RedKiteCms\\RedKiteCmsBundle\\Core\\Event\\Content\\Seo\\BeforeEditSeoCommitEvent', array($this, $values))->dispatch()->getEvent($eventName)->isAborted(); } if (false !== $result) { $this->seoRepository->commit(); $this->eventsHandler->createEvent(SeoEvents::AFTER_EDIT_SEO, '\\RedKiteLabs\\RedKiteCms\\RedKiteCmsBundle\\Core\\Event\\Content\\Seo\\AfterSeoEditedEvent', array($this))->dispatch(); return $result; } $this->seoRepository->rollBack(); return $result; } catch (General\EmptyArgumentsException $ex) { } catch (General\ArgumentExpectedException $ex) { } catch (\Exception $e) { if (isset($this->seoRepository) && $this->seoRepository !== null) { $this->seoRepository->rollBack(); } throw $e; } }