src/Twig/Extension/WebsiteExtension.php line 53

Open in your IDE?
  1. <?php
  2. namespace App\Twig\Extension;
  3. use App\Services\CheckwebsitesettingService;
  4. use App\Services\FaviconGenerator\FaviconHtmlGenerator as FaviconHtmlGenerator;
  5. use App\Services\FaviconGenerator\FaviconImageGenerator as FaviconImageGenerator;
  6. use App\Services\FaviconService;
  7. use Pimcore\Model\Document;
  8. use Pimcore\Model\Site;
  9. use Pimcore\Model\WebsiteSetting;
  10. use Symfony\Component\HttpFoundation\RequestStack;
  11. use Twig\Extension\AbstractExtension;
  12. use Twig\TwigFunction;
  13. use Twig\TwigTest;
  14. class WebsiteExtension extends AbstractExtension
  15. {
  16.     private $checkwebsitesetting;
  17.     private $requestStack;
  18.     public function __construct(CheckwebsitesettingService $checkwebsitesettingRequestStack $requestStack)
  19.     {
  20.         $this->checkwebsitesetting $checkwebsitesetting;
  21.         $this->requestStack $requestStack;
  22.     }
  23.     public function getFunctions()
  24.     {
  25.         return [
  26.             new TwigFunction('websitedomain', [$this'getWebsiteDomain']),
  27.             new TwigFunction('set_favicon', [$this'generateFavicon'], ['is_safe' => ['html']]),
  28.             new TwigFunction('base_layout', [$this'getBaseLayout']),
  29.             new TwigFunction('loadJsForAction', [$this'loadJsForAction']),
  30.             new TwigFunction('buildNavigation', [$this'buildNavigation']),
  31.             new TwigFunction('fetchDocument', [$this'fetchDocument']),
  32.         ];
  33.     }
  34.     public function getTests() {
  35.         return array(
  36.             new TwigTest('instanceof', array($this'isInstanceOf')),
  37.         );
  38.     }
  39.     public function getWebsiteDomain()
  40.     {
  41.         $protocol = isset($_SERVER['HTTPS']) && strcasecmp('off'$_SERVER['HTTPS']) !== "https" "http";
  42.         $hostname $_SERVER['HTTP_HOST'];
  43.         return $protocol.'://'.$hostname;
  44.     }
  45.     public function generateFavicon($siteTitle$msapplicationTileColor$themeColor$titleBarColor)
  46.     {
  47.         if ($this->checkwebsitesetting->check("favicon_asset""asset") && $this->checkwebsitesetting->check("site_title""text")) {
  48.             $favIconSetting WebsiteSetting::getByName('favicon_asset');
  49.             if($favIconSetting) {
  50.                 /** @var \Pimcore\Model\Asset\Image $favIcon */
  51.                 $favIcon $favIconSetting->getData();
  52.                 $favIconAsset PIMCORE_WEB_ROOT '/var/assets' $favIcon->getRealFullPath();
  53.                 $destination PIMCORE_WEB_ROOT '/favicon.ico';
  54.                 if (WebsiteSetting::getByName('generateNewFavicon')) {
  55.                     $generateNewFavIcon WebsiteSetting::getByName('generateNewFavicon')->getData();
  56.                 } else {
  57.                     $this->checkwebsitesetting->check("generateNewFavicon""bool");
  58.                 }
  59.                 // create FavIcon
  60.                 if ($generateNewFavIcon) {
  61.                     $sizes = array(
  62.                         array(1616),
  63.                         array(2424),
  64.                         array(3232),
  65.                         array(4848),
  66.                     );
  67.                     $ico_lib = new FaviconService($favIconAsset$sizes);
  68.                     $ico_lib->save_ico($destination);
  69.                 }
  70.                 // Generate other FavIcons
  71.                 $applicationName $siteTitle;
  72.                 $faviconDir PIMCORE_WEB_ROOT '/static/icons/';
  73.                 $imageForAndroid $favIconAsset;
  74.                 $imageForApple $favIconAsset;
  75.                 $appleStartupImageProportion 80.0;
  76.                 if ($generateNewFavIcon) {
  77.                     $faviconImageGenerator = new FaviconImageGenerator($applicationName$faviconDir$imageForAndroid$imageForApple$appleStartupImageProportion);
  78.                     $faviconImageGenerator->generate();
  79.                     $v '?v=' date('dmYhms');
  80.                 }
  81.                 $faviconHtmlGenerator = new FaviconHtmlGenerator($applicationName$faviconDir$msapplicationTileColor$themeColor$titleBarColor);
  82.                 $faviconHtml $faviconHtmlGenerator->generate();
  83.                 return $faviconHtml;
  84.             }
  85.         }
  86.     }
  87.     public function getBaseLayout()
  88.     {
  89.         if (Site::isSiteRequest()) {
  90.             $siteKey Site::getCurrentSite()->getRootDocument()->getKey();
  91.             $layoutName 'layout_' $siteKey;
  92.         } else {
  93.             $layoutName 'layout';
  94.         }
  95.         return 'layouts/'.$layoutName.'.html.twig';
  96.     }
  97.     public function loadJsForAction()
  98.     {
  99.         $request $this->requestStack->getCurrentRequest();
  100.         $controller $request->attributes->get('_controller');
  101.         list($controller$action) = explode('::'$controller);
  102.         $actionName strtolower(str_replace('Action'''$action));
  103.         // Check if App Controller
  104.         if (str_contains($controller'App\\Controller\\')) {
  105.             $controllerName strtolower(str_replace(['App\\Controller\\','Controller'], ''$controller));
  106.             $arrayControllerAction = [
  107.                 $controllerName,
  108.                 $actionName
  109.             ];
  110.             return $arrayControllerAction;
  111.         }else{
  112.             return [];
  113.         }
  114.     }
  115.     public function buildNavigation()
  116.     {
  117.         $request $this->requestStack->getCurrentRequest();
  118.         $language $request->attributes->get('_locale');
  119. //        if (!$mainNavStartNode instanceof \Pimcore\Model\Document\Page) {
  120. //            if (\Pimcore\Model\Site::isSiteRequest()) {
  121. //                $site = \Pimcore\Model\Site::getCurrentSite();
  122. //                $mainNavStartNode = $site->getRootDocument();
  123. //            } else {
  124. //                $mainNavStartNode = \Pimcore\Model\Document\Page::getById(1);
  125. //            }
  126. //        }
  127.         if (Site::isSiteRequest()) {
  128.             $site Site::getCurrentSite();
  129.             $rootDoc $site->getRootDocument();
  130.             $getRootDocumentPath $rootDoc->getRealFullPath();
  131.             $navRootPath $getRootDocumentPath '/' $language;
  132.             $navStartNode Document::getByPath($navRootPath);
  133.         } else {
  134.             $navStartNode Document::getByPath('/' $language);
  135.         }
  136.         return $navStartNode;
  137.     }
  138.     /**
  139.      * @param $var
  140.      * @param $instance
  141.      * @return bool
  142.      */
  143.     public function isInstanceof($var$instance) {
  144.         return  $var instanceof $instance;
  145.     }
  146.     public function fetchDocument($documentId)
  147.     {
  148.         $document \Pimcore\Model\Document::getById($documentId);
  149.         return $document;
  150.     }
  151. }