Example #1
0
 /**
  * {@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;
 }
Example #2
0
 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;
 }
Example #3
0
 /**
  * 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);
 }
Example #4
0
 /**
  * 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;
     }
 }