vendor/presta/sitemap-bundle/Service/Generator.php line 113

Open in your IDE?
  1. <?php
  2. /**
  3.  * This file is part of the PrestaSitemapBundle package.
  4.  *
  5.  * (c) PrestaConcept <www.prestaconcept.net>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace Presta\SitemapBundle\Service;
  11. use Doctrine\Common\Cache\Cache;
  12. use Presta\SitemapBundle\Sitemap\Urlset;
  13. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  14. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  15. /**
  16.  * Sitemap Manager service
  17.  *
  18.  * @author David Epely <depely@prestaconcept.net>
  19.  * @author Christophe Dolivet
  20.  * @author Konstantin Myakshin <koc-dp@yandex.ru>
  21.  */
  22. class Generator extends AbstractGenerator implements GeneratorInterface
  23. {
  24.     /**
  25.      * @var UrlGeneratorInterface
  26.      */
  27.     protected $router;
  28.     /**
  29.      * @var Cache|null
  30.      */
  31.     protected $cache;
  32.     /**
  33.      * @var int|null
  34.      */
  35.     protected $cacheTtl;
  36.     /**
  37.      * @param EventDispatcherInterface $dispatcher
  38.      * @param UrlGeneratorInterface    $router
  39.      * @param Cache|null               $cache
  40.      * @param int|null                 $cacheTtl
  41.      * @param int|null                 $itemsBySet
  42.      */
  43.     public function __construct(
  44.         EventDispatcherInterface $dispatcher,
  45.         UrlGeneratorInterface $router,
  46.         Cache $cache null,
  47.         $cacheTtl null,
  48.         $itemsBySet null
  49.     ) {
  50.         parent::__construct($dispatcher$itemsBySet);
  51.         $this->router $router;
  52.         $this->cache $cache;
  53.         $this->cacheTtl $cacheTtl;
  54.         if ($cache !== null) {
  55.             @trigger_error(
  56.                 'Providing ' __METHOD__ ' $cache parameter is deprecated.' .
  57.                 ' Cache support has been deprecated since v2.3.2 and will be removed in v3.0.0.',
  58.                 E_USER_DEPRECATED
  59.             );
  60.         }
  61.     }
  62.     /**
  63.      * @inheritdoc
  64.      */
  65.     public function generate()
  66.     {
  67.         @trigger_error(
  68.             __METHOD__ ' is deprecated since v2.3.2 and will be removed in v3.0.0.' .
  69.             ' Use ' __CLASS__ '::fetch instead.',
  70.             E_USER_DEPRECATED
  71.         );
  72.         $this->populate();
  73.         //---------------------
  74.         //---------------------
  75.         // cache management
  76.         if ($this->cache) {
  77.             $this->cache->save('root'$this->getRoot(), $this->cacheTtl);
  78.             foreach ($this->urlsets as $name => $urlset) {
  79.                 $this->cache->save($name$urlset$this->cacheTtl);
  80.             }
  81.         }
  82.         //---------------------
  83.     }
  84.     /**
  85.      * @inheritdoc
  86.      */
  87.     public function fetch($name)
  88.     {
  89.         if ($this->cache && $this->cache->contains($name)) {
  90.             return $this->cache->fetch($name);
  91.         }
  92.         if ('root' === $name) {
  93.             $this->populate();
  94.             return $this->getRoot();
  95.         }
  96.         $this->populate($name);
  97.         if (array_key_exists($name$this->urlsets)) {
  98.             $urlset $this->urlsets[$name];
  99.             if ($this->cache) {
  100.                 $this->cache->save($name$urlset$this->cacheTtl);
  101.             }
  102.             return $urlset;
  103.         }
  104.         return null;
  105.     }
  106.     /**
  107.      * @inheritdoc
  108.      */
  109.     protected function newUrlset($name\DateTimeInterface $lastmod null)
  110.     {
  111.         return new Urlset(
  112.             $this->router->generate(
  113.                 'PrestaSitemapBundle_section',
  114.                 ['name' => $name'_format' => 'xml'],
  115.                 UrlGeneratorInterface::ABSOLUTE_URL
  116.             ),
  117.             $lastmod
  118.         );
  119.     }
  120. }