/**
  * Show the page within the current culture.
  * @param sfWebRequest $request
  */
 function executeShow(sfWebRequest $request)
 {
     if (sfPlop::get('sf_plop_private_access') == true && !$this->getUser()->isAuthenticated()) {
         $this->forward(sfConfig::get('sf_login_module'), sfConfig::get('sf_login_action'));
     }
     $this->page = $this->getRoute()->getObject();
     $this->forward404If(!$this->isUserAdmin && !$this->page->isPublished());
     $this->page->setCulture($this->culture);
     $this->forward404Unless($this->page);
     if ($this->page->isCategory() && !$this->isUserAdmin) {
         $this->redirect('@sf_plop_page_show?slug=' . $this->page->getFirstChild()->getSlug());
     }
     if ($this->page->isTemplate()) {
         $tplId = $this->page->getId();
         $this->pageTemplate = null;
         $this->subSlots = array();
     } else {
         if (!$this->page->getTemplate()->isTemplate() && $this->page->getTemplate()->getTemplate()->hasSlotArea()) {
             $tplId = $this->page->getTemplate()->getTemplateId();
         } else {
             $tplId = $this->page->getTemplateId();
         }
         $this->pageTemplate = sfPlopPageQuery::create()->joinWithI18n($this->culture)->findOneById($tplId);
         $this->subSlots = sfPlopSlotQuery::create()->filterByPageId($tplId != $this->page->getTemplateId() ? $this->page->getTemplateId() : $this->page->getId())->filterByIsPublished(true, $this->isUserAdmin ? Criteria::LESS_EQUAL : null)->orderByRank('asc')->groupById()->find();
     }
     $this->slots = sfPlopSlotQuery::create()->filterByPageId($tplId)->filterByIsPublished(true, $this->isUserAdmin ? Criteria::LESS_EQUAL : null)->orderByRank('asc')->groupById()->find();
     if (!$this->slots && $this->page->hasChildren()) {
         $this->redirect('@sf_plop_page_show?slug=' . $this->page->getFirstChild()->getSlug());
     } elseif (!$this->slots) {
         $this->redirect('@sf_plop_homepage');
     }
     if ($this->page->getSeoDescription()) {
         $seo_desc = $this->page->getSeoDescription();
     } else {
         $seo_desc = sfPlop::get('sf_plop_website_description');
     }
     if (sfPlop::get('sf_plop_use_title_in_seo_description') === true) {
         $this->getResponse()->addMeta('description', $seo_desc . ', ' . $this->page->getTitle(), true);
     } else {
         $this->getResponse()->addMeta('description', $seo_desc, true);
     }
     if ($this->page->getSeoKeywords()) {
         $this->getResponse()->addMeta('keywords', $this->page->getSeoKeywords(), true);
     } else {
         $this->getResponse()->addMeta('keywords', sfPlop::get('sf_plop_website_keywords'), true);
     }
     if ($this->page->getSeoTitle()) {
         $this->getResponse()->setTitle($this->page->getSeoTitle(), true);
     } elseif ($this->page->getTitle()) {
         $this->getResponse()->setTitle(sfPlop::setMetaTitle($this->page->getTitle()), true);
     }
     $this->decorate();
 }
 /**
  * Delete all the unused template slot configs
  * @param  Integer $tpl_id The template page to retrieve slots
  */
 public function deleteUnusedInheritedSlotConfigs($tpl_id)
 {
     if (!$tpl_id) {
         return;
     }
     $slot_ids = array();
     $slots = sfPlopSlotQuery::create()->filterByPageId($tpl_id)->filterByTemplate('Area', Criteria::NOT_EQUAL)->find();
     foreach ($slots as $slot) {
         $slot_ids[] = $slot->getId();
     }
     $page_ids = array($this->getId());
     $pages = sfPlopPageQuery::create()->filterByTemplateId($this->getId())->find();
     foreach ($pages as $page) {
         $page_ids[] = $page->getId();
     }
     $slot_configs = sfPlopSlotConfigQuery::create()->filterByPageId($page_ids)->filterBySlotId($slot_ids)->find();
     foreach ($slot_configs as $sc) {
         $sc->delete();
     }
 }
 /**
  * Move the slot to another page
  * @param Integer $page_id
  */
 public function swapPage($page_id, PropelPDO $con = null)
 {
     if (!$con) {
         $con = Propel::getConnection(sfPlopSlotPeer::DATABASE_NAME);
     }
     try {
         $con->beginTransaction();
         $this->setPageId($page_id);
         $this->setRank(sfPlopSlotQuery::create()->getMaxRank($page_id, $con) + 1);
         $this->save();
         foreach ($this->getsfPlopSlotConfigs() as $config) {
             if (!$config->isDeleted()) {
                 $config->setPageId($page_id);
                 $config->save();
             }
         }
         $con->commit();
     } catch (Exception $e) {
         $con->rollback();
         throw $e;
     }
     return $this;
 }