src/Twig/MobileFloatingBannerRuntime.php line 33

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Slivki\Twig;
  4. use Slivki\Entity\City;
  5. use Slivki\Services\Banner\MobileFloatingBannerCacheService;
  6. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  7. use Twig\Extension\RuntimeExtensionInterface;
  8. final class MobileFloatingBannerRuntime implements RuntimeExtensionInterface
  9. {
  10.     private const BANNER_INDEX_SESSION_KEY 'mobileFloatingBannerIndex';
  11.     private SessionInterface $session;
  12.     private MobileFloatingBannerCacheService $mobileFloatingBannerCacheService;
  13.     public function __construct(
  14.         SessionInterface $session,
  15.         MobileFloatingBannerCacheService $mobileFloatingBannerCacheService
  16.     ) {
  17.         $this->session $session;
  18.         $this->mobileFloatingBannerCacheService $mobileFloatingBannerCacheService;
  19.     }
  20.     /**
  21.      * @param int[] $categories
  22.      */
  23.     public function getMobileFloatingBanner(array $categories = []): string
  24.     {
  25.         $html '';
  26.         $cityId = (int) $this->session->get(City::CITY_ID_SESSION_KEYCity::DEFAULT_CITY_ID);
  27.         $banners $this->mobileFloatingBannerCacheService->getByCityAndCategories($cityId$categories);
  28.         $bannersCount = \count($banners);
  29.         if (=== $bannersCount) {
  30.             return $html;
  31.         }
  32.         $bannerIndex $this->session->get(self::BANNER_INDEX_SESSION_KEY);
  33.         if (!$bannerIndex || $bannerIndex >= $bannersCount) {
  34.             $bannerIndex 0;
  35.         }
  36.         $this->session->set(self::BANNER_INDEX_SESSION_KEY$bannerIndex 1);
  37.         if (isset($banners[$bannerIndex])) {
  38.             $html $banners[$bannerIndex]->getHtml();
  39.         }
  40.         return $html;
  41.     }
  42. }