vendor/bugbuster/contao-banner-bundle/src/Resources/contao/classes/BannerInternal.php line 174

Open in your IDE?
  1. <?php
  2. /**
  3.  * Extension for Contao Open Source CMS, Copyright (C) 2005-2022 Leo Feyer
  4.  *
  5.  * BannerInternal - Frontend Helper Class
  6.  *
  7.  * @copyright  Glen Langer 2017..2022 <http://contao.ninja>
  8.  * @author     Glen Langer (BugBuster)
  9.  * @licence    LGPL
  10.  * @filesource
  11.  * @see           https://github.com/BugBuster1701/contao-banner-bundle
  12.  */
  13. namespace BugBuster\Banner;
  14. use BugBuster\Banner\BannerImage;
  15. use BugBuster\Banner\BannerTemplate;
  16. use Contao\FilesModel;
  17. use Contao\ImageSizeModel;
  18. use Contao\StringUtil;
  19. use Contao\System;
  20. /**
  21.  * Class BannerInternal
  22.  *
  23.  * @copyright  Glen Langer 2017..2022 <http://contao.ninja>
  24.  * @author     Glen Langer (BugBuster)
  25.  * @license    LGPL
  26.  */
  27. class BannerInternal
  28. {
  29.     /**
  30.      * Banner intern
  31.      * @var string
  32.      */
  33.     public const BANNER_TYPE_INTERN 'banner_image';
  34.     protected $objBanners;
  35.     protected $banner_cssID;
  36.     protected $banner_class;
  37.     protected $BannerImage;
  38.     public function __construct($objBanners$banner_cssID$banner_class)
  39.     {
  40.         $this->objBanners   $objBanners;
  41.         $this->banner_cssID $banner_cssID;
  42.         $this->banner_class $banner_class;
  43.     }
  44.     /**
  45.      * @return \stdClass
  46.      */
  47.     public function generateImageData()
  48.     {
  49.         //Pfad+Dateiname holen ueber UUID (findByPk leitet um auf findByUuid)
  50.         $objFile FilesModel::findByPk($this->objBanners->banner_image);
  51.         //BannerImage Class
  52.         $this->BannerImage = new BannerImage();
  53.         //Banner Art und Größe bestimmen
  54.         $arrImageSize $this->BannerImage->getBannerImageSize($objFile->pathself::BANNER_TYPE_INTERN);
  55.         //Falls Datei gelöscht wurde, Abbruch
  56.         if (false === $arrImageSize) {
  57.             $arrImageSize[2] = 0;
  58.             BannerLog::log('Banner Image with ID "'.$this->objBanners->id.'" not found'__METHOD__ .':'__LINE__TL_ERROR);
  59.             $objReturn = new \stdClass();
  60.             $objReturn->FileSrc null;
  61.             $objReturn->Picture null;
  62.             $objReturn->ImageSize $arrImageSize;
  63.             return $objReturn;
  64.         }
  65.         //Banner Neue Größe 0:$Width 1:$Height 2:resize mode
  66.         $arrNewSizeValues StringUtil::deserialize($this->objBanners->banner_imgSize);
  67.         $predefined false;
  68.         //Vordefinierte Größe?
  69.         if (is_numeric($arrNewSizeValues[2])) {
  70.             $predefined true;
  71.             $imageSize ImageSizeModel::findByPk((int) $arrNewSizeValues[2]);
  72.             BannerLog::writeLog(__METHOD____LINE__'Predefined dimensions: 'print_r($imageSizetrue));
  73.             if ($imageSize === null) {
  74.                 $arrNewSizeValues[0] = 0;
  75.                 $arrNewSizeValues[1] = 0;
  76.                 $arrNewSizeValues[2] = 0;
  77.             } else {
  78.                 $arrNewSizeValues[0] = ($imageSize->width 0) ? $imageSize->width 0;
  79.                 $arrNewSizeValues[1] = ($imageSize->height 0) ? $imageSize->height 0;
  80.                 $arrNewSizeValues[2] = $imageSize->resizeMode;
  81.             }
  82.         }
  83.         BannerLog::writeLog(__METHOD____LINE__'NewSizeValues: 'print_r($arrNewSizeValuestrue));
  84.         //Banner Neue Größe ermitteln, return array $Width,$Height,$oriSize
  85.         $arrImageSizenNew $this->BannerImage->getBannerImageSizeNew($arrImageSize[0], $arrImageSize[1], $arrNewSizeValues[0], $arrNewSizeValues[1]);
  86.         //wenn oriSize = true und GIF original Pfad nehmen
  87.         if ($arrImageSizenNew[2] === true //oriSize
  88.              && $arrImageSize[2] == 1  // GIF
  89.         ) {
  90.             $FileSrc $objFile->path;
  91.             $arrImageSize[0] = $arrImageSizenNew[0];
  92.             $arrImageSize[1] = $arrImageSizenNew[1];
  93.             $arrImageSize[3] = ' height="'.$arrImageSizenNew[1].'" width="'.$arrImageSizenNew[0].'"';
  94.             //fake the Picture::create
  95.             $picture['img']   =
  96.             [
  97.                 'src'    => StringUtil::specialchars(\Contao\StringUtil::ampersand($FileSrc)),
  98.                 'width'  => $arrImageSizenNew[0],
  99.                 'height' => $arrImageSizenNew[1],
  100.                 'srcset' => StringUtil::specialchars(\Contao\StringUtil::ampersand($FileSrc))
  101.             ];
  102.             $arrMeta $this->getBannerMetaData($this->objBanners$objFile);
  103.             $picture['alt']   = $arrMeta['alt'];
  104.             $picture['title'] = $arrMeta['title'];
  105.             BannerLog::writeLog(__METHOD____LINE__'Orisize Picture: 'print_r($picturetrue));
  106.         } else {
  107.             //Resize an image and store the resized version in the assets/images folder
  108.             //return The path of the resized image or null
  109.             $container System::getContainer();
  110.             $rootDir   $container->getParameter('kernel.project_dir');
  111.             $staticUrl $container->get('contao.assets.files_context')->getStaticUrl();
  112.             $FileSrc $container
  113.                         ->get('contao.image.image_factory')
  114.                         ->create($rootDir.'/' $objFile->path, [$arrImageSizenNew[0], $arrImageSizenNew[1], $arrNewSizeValues[2]])
  115.                         ->getUrl($rootDir);
  116.             BannerLog::writeLog(__METHOD____LINE__'Resize Image: 'print_r($FileSrctrue));
  117.             $picture $container->get('contao.image.picture_factory');
  118.             if ($predefined) {
  119.                 $picture $picture->create($rootDir '/' $objFile->path$imageSize->id);
  120.             } else {
  121.                 $picture $picture->create($rootDir '/' $objFile->path, [$arrImageSizenNew[0], $arrImageSizenNew[1], $arrNewSizeValues[2]]);
  122.             }
  123.             $picture =
  124.             [
  125.                 'img'     => $picture->getImg($rootDir$staticUrl),
  126.                 'sources' => $picture->getSources($rootDir$staticUrl)
  127.             ];
  128.             $arrMeta $this->getBannerMetaData($this->objBanners$objFile);
  129.             $picture['alt']   = $arrMeta['alt'];
  130.             $picture['title'] = $arrMeta['title'];
  131.             BannerLog::writeLog(__METHOD____LINE__'Resize Picture: 'print_r($picturetrue));
  132.             $arrImageSize[0] = $arrImageSizenNew[0];
  133.             $arrImageSize[1] = $arrImageSizenNew[1];
  134.             $arrImageSize[3] = ' height="'.$arrImageSizenNew[1].'" width="'.$arrImageSizenNew[0].'"';
  135.         }
  136.         $objReturn = new \stdClass();
  137.         $objReturn->FileSrc $FileSrc;
  138.         $objReturn->Picture $picture;
  139.         $objReturn->ImageSize $arrImageSize;
  140.         return $objReturn;
  141.     }
  142.     /**
  143.      * Generate Template Data
  144.      *
  145.      * @param  array  $arrImageSize
  146.      * @param  string $FileSrc
  147.      * @param  array  $picture
  148.      * @return array  $arrBanners
  149.      */
  150.     public function generateTemplateData($arrImageSize$FileSrc$picture)
  151.     {
  152.         return BannerTemplate::generateTemplateData($arrImageSize$FileSrc$picture$this->objBanners$this->banner_cssID$this->banner_class);
  153.     }
  154.     /**
  155.      * Get Banner Meta Data
  156.      *
  157.      * @param  object $objBanners
  158.      * @param  object $objFile
  159.      * @return array
  160.      */
  161.     public function getBannerMetaData($objBanners$objFile)
  162.     {
  163.         $arrMeta = [];
  164.         if ($objBanners->banner_overwritemeta != '1') {
  165.             $arrMeta['alt']   = StringUtil::specialchars(\Contao\StringUtil::ampersand($objBanners->banner_name));
  166.             $arrMeta['title'] = StringUtil::specialchars(\Contao\StringUtil::ampersand($objBanners->banner_comment));
  167.             return $arrMeta;
  168.         }
  169.         global $objPage;
  170.         $objBannerFile =  new \Contao\File($objFile->path);
  171.         $arrMeta =  \Contao\Frontend::getMetaData($objBannerFile->meta$objPage->language);
  172.         if (empty($arrMeta)) {
  173.             if ($objPage->rootFallbackLanguage !== null) {
  174.                 $arrMeta =  \Contao\Frontend::getMetaData($objFile->meta$objPage->rootFallbackLanguage);
  175.                 BannerLog::writeLog(__METHOD____LINE__'BannerMetaData rootFallback: 'print_r($arrMetatrue));
  176.             }
  177.         }
  178.         if (empty($arrMeta['alt'])) {
  179.             $arrMeta['alt']   = StringUtil::specialchars(\Contao\StringUtil::ampersand($objBanners->banner_name));
  180.         }
  181.         if (empty($arrMeta['title'])) {
  182.             $arrMeta['title']   = StringUtil::specialchars(\Contao\StringUtil::ampersand($objBanners->banner_comment));
  183.         }
  184.         return $arrMeta;
  185.     }
  186. }