src/Pumukit/WebTVBundle/Services/BreadcrumbsService.php line 56

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Pumukit\WebTVBundle\Services;
  4. use Pumukit\SchemaBundle\Document\MultimediaObject;
  5. use Pumukit\SchemaBundle\Document\Series;
  6. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  7. use Symfony\Component\Routing\RouterInterface;
  8. use Symfony\Contracts\Translation\TranslatorInterface;
  9. /**
  10.  * Class BreadcrumbsService.
  11.  */
  12. class BreadcrumbsService
  13. {
  14.     private $session;
  15.     private $router;
  16.     private $allTitle;
  17.     private $allRoute;
  18.     private $homeTitle;
  19.     private $breadcrumbs;
  20.     private $translator;
  21.     private $parentWeb;
  22.     /**
  23.      * BreadcrumbsService constructor.
  24.      *
  25.      * @param string     $allTitle
  26.      * @param string     $allRoute
  27.      * @param string     $homeTitle
  28.      * @param mixed|null $parentWeb
  29.      */
  30.     public function __construct(
  31.         RouterInterface $router,
  32.         SessionInterface $session,
  33.         TranslatorInterface $translator,
  34.         $allTitle 'All',
  35.         $allRoute 'pumukit_webtv_medialibrary_index',
  36.         $homeTitle 'home',
  37.         $parentWeb null
  38.     ) {
  39.         $this->session $session;
  40.         $this->router $router;
  41.         $this->allTitle $allTitle;
  42.         $this->allRoute $allRoute;
  43.         $this->homeTitle $homeTitle;
  44.         $this->translator $translator;
  45.         $this->parentWeb $parentWeb;
  46.         $this->init();
  47.     }
  48.     public function init()
  49.     {
  50.         if (!$this->session->has('breadcrumbs/title')) {
  51.             $this->session->set('breadcrumbs/title'$this->translator->trans($this->allTitle));
  52.         }
  53.         if (!$this->session->has('breadcrumbs/routeParameters')) {
  54.             $this->session->set('breadcrumbs/routeName'$this->allRoute);
  55.         }
  56.         if (!$this->session->has('breadcrumbs/routeParameters')) {
  57.             $this->session->set('breadcrumbs/routeParameters', []);
  58.         }
  59.         $this->breadcrumbs = [];
  60.         if (null !== $this->parentWeb) {
  61.             $this->breadcrumbs = [['title' => $this->parentWeb['title'], 'link' => $this->parentWeb['url']]];
  62.         }
  63.         $this->breadcrumbs[] = ['title' => $this->homeTitle'link' => $this->router->generate('pumukit_webtv_index_index')];
  64.     }
  65.     public function reset()
  66.     {
  67.         $this->session->set('breadcrumbs/title'$this->translator->trans($this->allTitle));
  68.         $this->session->set('breadcrumbs/routeName'$this->allRoute);
  69.         $this->session->set('breadcrumbs/routeParameters', []);
  70.         $this->breadcrumbs = [];
  71.         if (null !== $this->parentWeb) {
  72.             $this->breadcrumbs = [['title' => $this->parentWeb['title'], 'link' => $this->parentWeb['url']]];
  73.         }
  74.         $this->breadcrumbs[] = ['title' => $this->homeTitle'link' => $this->router->generate('pumukit_webtv_index_index')];
  75.     }
  76.     /**
  77.      * @param string $title
  78.      * @param string $routeName
  79.      * @param bool   $forceTranslation
  80.      */
  81.     public function addList($title$routeName, array $routeParameters = [], $forceTranslation false)
  82.     {
  83.         if ($forceTranslation) {
  84.             $title $this->translator->trans($title);
  85.         }
  86.         $this->reset();
  87.         $this->session->set('breadcrumbs/title'$title);
  88.         $this->session->set('breadcrumbs/routeName'$routeName);
  89.         $this->session->set('breadcrumbs/routeParameters'$routeParameters);
  90.         $this->add($title$routeName$routeParameters);
  91.     }
  92.     public function addSeries(Series $series)
  93.     {
  94.         if (== (is_countable($this->breadcrumbs) ? count($this->breadcrumbs) : 0)) {
  95.             $this->add(
  96.                 $this->session->get('breadcrumbs/title'$this->allTitle),
  97.                 $this->session->get('breadcrumbs/routeName'$this->allRoute),
  98.                 $this->session->get('breadcrumbs/routeParameters', [])
  99.             );
  100.         }
  101.         if (!$series->isHide()) {
  102.             $this->add($series->getTitle(), 'pumukit_webtv_series_index', ['id' => $series->getId()]);
  103.         }
  104.     }
  105.     public function addMultimediaObject(MultimediaObject $multimediaObject)
  106.     {
  107.         $this->addSeries($multimediaObject->getSeries());
  108.         $title $multimediaObject->getTitle();
  109.         if ($multimediaObject->isPublished()) {
  110.             $routeName 'pumukit_webtv_multimediaobject_index';
  111.             $routeParameters = ['id' => $multimediaObject->getId()];
  112.         } else {
  113.             $routeName 'pumukit_webtv_multimediaobject_magicindex';
  114.             $routeParameters = ['secret' => $multimediaObject->getSecret()];
  115.         }
  116.         $this->add($title$routeName$routeParameters);
  117.     }
  118.     /**
  119.      * @param string $title
  120.      * @param string $routeName
  121.      */
  122.     public function add($title$routeName, array $routeParameters = [])
  123.     {
  124.         $this->breadcrumbs[] = [
  125.             'title' => $title,
  126.             'link' => $this->router->generate($routeName$routeParameters),
  127.         ];
  128.     }
  129.     /**
  130.      * @return mixed
  131.      */
  132.     public function getBreadcrumbs()
  133.     {
  134.         return $this->breadcrumbs;
  135.     }
  136.     /**
  137.      * @param string $title
  138.      */
  139.     public function setTitle($title)
  140.     {
  141.         if ((null !== $this->parentWeb) && (isset($this->breadcrumbs[1]['title']))) {
  142.             $this->breadcrumbs[1]['title'] = $title;
  143.         } else {
  144.             $this->breadcrumbs[0]['title'] = $title;
  145.         }
  146.     }
  147. }