/** * @return Response */ public function generateAction() { /** @var Request $request */ $request = $this->getRequest(); // the locale : fr, en, $lang = $request->query->get("lang", ""); if ("" !== $lang) { if (!$this->checkLang($lang)) { $this->pageNotFound(); } } // specific content : product, category, cms $context = $request->query->get("context", ""); if (!in_array($context, array("", "catalog", "content"))) { $this->pageNotFound(); } $flush = $request->query->get("flush", ""); // check if sitemap already in cache $cacheContent = false; $cacheDir = $this->getCacheDir(); $cacheKey = self::SITEMAP_CACHE_KEY . $lang . $context; $cacheExpire = intval(ConfigQuery::read("sitemap_ttl", '7200')) ?: 7200; $cacheDriver = new FilesystemCache($cacheDir); if (!($this->checkAdmin() && "" !== $flush)) { $cacheContent = $cacheDriver->fetch($cacheKey); } else { $cacheDriver->delete($cacheKey); } // if not in cache if (false === $cacheContent) { // render the view $cacheContent = $this->renderRaw("sitemap", array("_lang_" => $lang, "_context_" => $context)); // save cache $cacheDriver->save($cacheKey, $cacheContent, $cacheExpire); } $response = new Response(); $response->setContent($cacheContent); $response->headers->set('Content-Type', 'application/xml'); return $response; }
public function showLogAction() { $resp = new Response(); $resp->setContent(nl2br(file_get_contents($this->log_file))); return $resp; }
/** * render the RSS feed * * @param $context string The context of the feed : catalog, content. default: catalog * @param $lang string The lang of the feed : fr_FR, en_US, ... default: default language of the site * @param $id string The id of the parent element. The id of the main parent category for catalog context. * The id of the content folder for content context * @return Response * @throws \RuntimeException */ public function generateAction($context, $lang, $id) { /** @var Request $request */ $request = $this->getRequest(); // context if ("" === $context) { $context = "catalog"; } else { if (!in_array($context, array("catalog", "content", "brand"))) { $this->pageNotFound(); } } // the locale : fr_FR, en_US, if ("" !== $lang) { if (!$this->checkLang($lang)) { $this->pageNotFound(); } } else { try { $lang = Lang::getDefaultLanguage(); $lang = $lang->getLocale(); } catch (\RuntimeException $ex) { // @todo generate error page throw new \RuntimeException("No default language is defined. Please define one."); } } if (null === ($lang = LangQuery::create()->findOneByLocale($lang))) { $this->pageNotFound(); } $lang = $lang->getId(); // check if element exists and is visible if ("" !== $id) { if (false === $this->checkId($context, $id)) { $this->pageNotFound(); } } $flush = $request->query->get("flush", ""); // check if feed already in cache $cacheContent = false; $cacheDir = $this->getCacheDir(); $cacheKey = self::FEED_CACHE_KEY . $lang . $context . $id; $cacheExpire = intval(ConfigQuery::read("feed_ttl", '7200')) ?: 7200; $cacheDriver = new FilesystemCache($cacheDir); if (!($this->checkAdmin() && "" !== $flush)) { $cacheContent = $cacheDriver->fetch($cacheKey); } else { $cacheDriver->delete($cacheKey); } // if not in cache if (false === $cacheContent) { // render the view $cacheContent = $this->renderRaw("feed", array("_context_" => $context, "_lang_" => $lang, "_id_" => $id)); // save cache $cacheDriver->save($cacheKey, $cacheContent, $cacheExpire); } $response = new Response(); $response->setContent($cacheContent); $response->headers->set('Content-Type', 'application/rss+xml'); return $response; }
/** * Check if cached sitemap can be used or generate a new one and cache it * * @param $cacheKey * @param $cacheDirName * @return Response */ public function generateSitemap($cacheKey, $cacheDirName) { // Get and check locale $locale = $this->getSession()->getLang()->getLocale(); if ("" !== $locale) { if (!$this->checkLang($locale)) { $this->pageNotFound(); } } // Get sitemap cache information $sitemapContent = false; $cacheDir = $this->getCacheDir($cacheDirName); $cacheKey .= $locale; $cacheExpire = intval(ConfigQuery::read("sitemap_ttl", '7200')) ?: 7200; $cacheDriver = new FilesystemCache($cacheDir); // Check if sitemap has to be deleted if (!($this->checkAdmin() && "" !== $this->getRequest()->query->get("flush", ""))) { // Get cached sitemap $sitemapContent = $cacheDriver->fetch($cacheKey); } else { $cacheDriver->delete($cacheKey); } // If not in cache, generate and cache it if (false === $sitemapContent) { // Check if we generate the standard sitemap or the sitemap image switch ($cacheDirName) { // Image case self::SITEMAP_IMAGE_CACHE_DIR: $sitemap = $this->hydrateSitemapImage($locale); break; // Standard // Standard case self::SITEMAP_CACHE_DIR: default: $sitemap = $this->hydrateSitemap($locale); break; } $sitemapContent = implode("\n", $sitemap); // Save cache $cacheDriver->save($cacheKey, $sitemapContent, $cacheExpire); } // Render $response = new Response(); $response->setContent($sitemapContent); $response->headers->set('Content-Type', 'application/xml'); return $response; }