vendor/bugbuster/contao-banner-bundle/src/Resources/contao/classes/BannerSingle.php line 341

Open in your IDE?
  1. <?php
  2. /**
  3.  * Extension for Contao Open Source CMS, Copyright (C) 2005-2022 Leo Feyer
  4.  *
  5.  * BannerSingle - Frontend Helper Class
  6.  *
  7.  * @copyright  Glen Langer 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\BannerCount;
  15. use BugBuster\Banner\BannerExternal;
  16. use BugBuster\Banner\BannerImage;
  17. use BugBuster\Banner\BannerInternal;
  18. use BugBuster\Banner\BannerLog;
  19. use BugBuster\Banner\BannerLogic;
  20. use BugBuster\Banner\BannerText;
  21. use Contao\FrontendTemplate;
  22. /**
  23.  * Class BannerSingle
  24.  *
  25.  * @copyright  Glen Langer 2022 <http://contao.ninja>
  26.  * @author     Glen Langer (BugBuster)
  27.  * @license    LGPL
  28.  */
  29. class BannerSingle extends \Contao\Frontend
  30. {
  31.     /**
  32.      * Banner intern
  33.      * @var string
  34.      */
  35.     public const BANNER_TYPE_INTERN 'banner_image';
  36.     /**
  37.      * Banner extern
  38.      * @var string
  39.      */
  40.     public const BANNER_TYPE_EXTERN 'banner_image_extern';
  41.     /**
  42.      * Banner text
  43.      * @var string
  44.      */
  45.     public const BANNER_TYPE_TEXT   'banner_text';
  46.     protected $arrCategoryValues = [];
  47.     protected $BannerImage;
  48.     protected $banner_template;
  49.     protected $strTemplate;
  50.     protected $Template;
  51.     protected $arrAllBannersBasic;
  52.     public function __construct($arrCategoryValues$banner_template$strTemplate$objTemplate$arrAllBannersBasic)
  53.     {
  54.         $this->arrCategoryValues  $arrCategoryValues;
  55.         $this->banner_template    $banner_template;
  56.         $this->strTemplate        $strTemplate;
  57.         $this->Template           $objTemplate;
  58.         $this->arrAllBannersBasic $arrAllBannersBasic;
  59.         // Static URLs Controller::setStaticUrls
  60.         $this->setStaticUrls();
  61.     }
  62.     /**
  63.      * Get default banner or empty banner in $this->Template->banners
  64.      *
  65.      * @return $this->strTemplate
  66.      */
  67.     public function getDefaultBanner($banner_hideempty$module_id)
  68.     {
  69.         $arrImageSize = [];
  70.         //CSS-ID/Klasse(n) je Banner, für den wrapper
  71.         $banner_cssID   '';
  72.         $banner_class   ' banner_default';
  73.         //BannerDefault gewünscht und vorhanden?
  74.         if ($this->arrCategoryValues['banner_default'] == '1'
  75.             && \strlen($this->arrCategoryValues['banner_default_image']) > 0
  76.         ) {
  77.             //Template setzen
  78.             if (($this->banner_template != $this->strTemplate)
  79.               && ($this->banner_template != '')) {
  80.                 $this->strTemplate $this->banner_template;
  81.                 $this->Template = new FrontendTemplate($this->strTemplate);
  82.             }
  83.             $banner_default_target = ($this->arrCategoryValues['banner_default_target'] == '1') ? '' ' target="_blank"';
  84.             //BannerImage Class
  85.             $this->BannerImage = new BannerImage();
  86.             //Banner Art bestimmen
  87.             $arrImageSize $this->BannerImage->getBannerImageSize($this->arrCategoryValues['banner_default_image'], self::BANNER_TYPE_INTERN);
  88.             // 1 = GIF, 2 = JPG/JPEG, 3 = PNG
  89.             // 4 = SWF, 13 = SWC (zip-like swf file)
  90.             // 5 = PSD, 6 = BMP, 7 = TIFF(intel byte order), 8 = TIFF(motorola byte order)
  91.             // 9 = JPC, 10 = JP2, 11 = JPX, 12 = JB2, 13 = SWC, 14 = IFF
  92.             // 18 = WEBP
  93.             //fake the Picture::create
  94.             $picture['img']   =
  95.             [
  96.                 'src'    => $this->urlEncode($this->arrCategoryValues['banner_default_image']),
  97.                 'width'  => $arrImageSize[0],
  98.                 'height' => $arrImageSize[1],
  99.                 'srcset' => $this->urlEncode($this->arrCategoryValues['banner_default_image'])
  100.             ];
  101.             $picture['alt']   = \Contao\StringUtil::specialchars(\Contao\StringUtil::ampersand($this->arrCategoryValues['banner_default_name']));
  102.             $picture['title'] = '';
  103.             BannerLog::writeLog(__METHOD____LINE__'Fake Picture: 'print_r($picturetrue));
  104.             switch ($arrImageSize[2]) {
  105.                 case 1:// GIF
  106.                 case 2:// JPG
  107.                 case 3:// PNG
  108.                 case 18// WEBP
  109.                     $arrBanners[] =
  110.                                     [
  111.                                     'banner_key'     => 'defbid',
  112.                                     'banner_wrap_id'    => $banner_cssID,
  113.                                     'banner_wrap_class' => $banner_class,
  114.                                     'banner_id'      => $this->arrCategoryValues['id'],
  115.                                     'banner_name'    => \Contao\StringUtil::specialchars(\Contao\StringUtil::ampersand($this->arrCategoryValues['banner_default_name'])),
  116.                                     'banner_url'     => $this->arrCategoryValues['banner_default_url'],
  117.                                     'banner_target'  => $banner_default_target,
  118.                                     'banner_comment' => \Contao\StringUtil::specialchars(\Contao\StringUtil::ampersand($this->arrCategoryValues['banner_default_name'])),
  119.                                     'src'            => $this->urlEncode($this->arrCategoryValues['banner_default_image']),
  120.                                     'alt'            => \Contao\StringUtil::specialchars(\Contao\StringUtil::ampersand($this->arrCategoryValues['banner_default_name'])),
  121.                                     'size'              => '',
  122.                                     'banner_pic'     => true,
  123.                                     'banner_flash'   => false,
  124.                                     'banner_text'    => false,
  125.                                     'banner_video'   => false,
  126.                                     'banner_empty'   => false,    // issues 733
  127.                                     'picture'        => $picture
  128.                                     ];
  129.                     break;
  130.             }
  131.             $arrResults[] = $arrBanners[0];
  132.             $this->Template->banners $arrResults;
  133.             $this->Template->bmid "bmid".$module_id;
  134.             return $this->Template;
  135.         }
  136.         //Kein BannerDefault
  137.         $NoBannerFound = ($GLOBALS['TL_LANG']['MSC']['tl_banner']['noBanner']) ? $GLOBALS['TL_LANG']['MSC']['tl_banner']['noBanner'] : 'no banner, no default banner';
  138.         $arrBanners[] =
  139.                         [
  140.                             'banner_key'  => 'bid',
  141.                             'banner_wrap_id'    => $banner_cssID,
  142.                             'banner_wrap_class' => $banner_class,
  143.                             'banner_id'   => 0,
  144.                             'banner_name' => \Contao\StringUtil::specialchars(\Contao\StringUtil::ampersand($NoBannerFound)),
  145.                             'banner_url'  => '',
  146.                             'banner_target'  => '',
  147.                             'banner_comment' => '',
  148.                             'src'             => '',
  149.                             'alt'             => '',
  150.                             'size'             => '',
  151.                             'banner_pic'     => false,
  152.                             'banner_flash'  => false,
  153.                             'banner_text'   => false,
  154.                             'banner_video'  => false,
  155.                             'banner_empty'  => true    // issues 733
  156.                         ];
  157.         $arrResults[] = $arrBanners[0];
  158.         //Ausblenden wenn leer?
  159.         if ($banner_hideempty == 1) {
  160.             // auf Leer umschalten
  161.             $this->strTemplate='mod_banner_empty';
  162.             $this->Template->arrCategoryValues $this->arrCategoryValues// #7 / #176 (Banner)
  163.             $this->Template = new FrontendTemplate($this->strTemplate);
  164.             BannerLog::writeLog(__METHOD____LINE__'Kein BannerDefault, umschalten auf leeres Template');
  165.         }
  166.         $this->Template->banners $arrResults;
  167.         $this->Template->bmid "bmid".$module_id;
  168.         return $this->Template;
  169.     }
  170.     /**
  171.      * Get First View Banner
  172.      *
  173.      * @return internal Value in $this->strTemplate
  174.      */
  175.     public function getSingleBannerFirst($module_id)
  176.     {
  177.         $arrBanners = [];
  178.         $arrResults = [];
  179.         $FileSrc '';
  180.         //first aktiv banner in category
  181.         //$this->arrAllBannersBasic den ersten Datensatz über die ID nutzen
  182.         //seltsamerweise kommt reference Fehler bei Kombination in einer Anweisung, daher getrennt
  183.         $banner_keys array_keys($this->arrAllBannersBasic);
  184.         $banner_id   array_shift($banner_keys);
  185.         $objBanners  \Contao\Database::getInstance()
  186.                             ->prepare(
  187.                                 "SELECT
  188.                                             TLB.*
  189.                                        FROM
  190.                                             tl_banner AS TLB
  191.                                        WHERE
  192.                                             TLB.`id`=?"
  193.                             )
  194.                             ->limit(1)
  195.                             ->execute($banner_id);
  196.         $intRows $objBanners->numRows;
  197.         //Banner vorhanden?
  198.         if ($intRows 0) {
  199.             $objBanners->next();
  200.             BannerHelper::$arrBannerSeen[] = $objBanners->id;
  201.             //CSS-ID/Klasse(n) je Banner, für den wrapper
  202.             $banner_cssID   '';
  203.             $banner_class   '';
  204.             $banner_classes '';
  205.             $_cssID \Contao\StringUtil::deserialize($objBanners->banner_cssid);
  206.             if (\is_array($_cssID)) {
  207.                 if ($_cssID[0] != '') {
  208.                     $banner_cssID   ' id="banner_'.$_cssID[0].'"';
  209.                 }
  210.                 if ($_cssID[1] != '') {
  211.                     $banner_classes explode(" "$_cssID[1]);
  212.                     foreach ($banner_classes as $banner_classone) {
  213.                         $banner_class .= ' banner_'.$banner_classone;
  214.                     }
  215.                 }
  216.             }
  217.             switch ($objBanners->banner_type) {
  218.                 case self::BANNER_TYPE_INTERN:
  219.                     $objBannerInternal = new BannerInternal($objBanners$banner_cssID$banner_class);
  220.                     $objImageData $objBannerInternal->generateImageData();
  221.                     $FileSrc $objImageData->FileSrc;
  222.                     $picture $objImageData->Picture;
  223.                     $arrImageSize $objImageData->ImageSize;
  224.                     $arrBanners $objBannerInternal->generateTemplateData($arrImageSize$FileSrc$picture);
  225.                     //anderes Template?
  226.                     if (($this->banner_template != $this->strTemplate)
  227.                         && ($this->banner_template != '')
  228.                     ) {
  229.                         $this->strTemplate $this->banner_template;
  230.                         $this->Template = new FrontendTemplate($this->strTemplate);
  231.                     }
  232.                     $this->setStatViewUpdate($arrBanners$module_id$objBanners->banner_useragent);
  233.                     $this->Template->banners $arrBanners;
  234.                     $this->Template->bmid "bmid".$module_id;
  235.                     return $this->Template;
  236.                     break;
  237.                 case self::BANNER_TYPE_EXTERN:
  238.                     $objBannerExternal = new BannerExternal($objBanners$banner_cssID$banner_class);
  239.                     $objImageData $objBannerExternal->generateImageData();
  240.                     $FileSrc $objImageData->FileSrc;
  241.                     $picture $objImageData->Picture;
  242.                     $arrImageSize $objImageData->ImageSize;
  243.                     $arrBanners $objBannerExternal->generateTemplateData($arrImageSize$FileSrc$picture);
  244.                     //anderes Template?
  245.                     if (($this->banner_template != $this->strTemplate)
  246.                         && ($this->banner_template != '')
  247.                     ) {
  248.                         $this->strTemplate $this->banner_template;
  249.                         $this->Template = new FrontendTemplate($this->strTemplate);
  250.                     }
  251.                     $this->setStatViewUpdate($arrBanners$module_id$objBanners->banner_useragent);
  252.                     $this->Template->banners $arrBanners;
  253.                     $this->Template->bmid "bmid".$module_id;
  254.                     return $this->Template;
  255.                     break;
  256.                 case self::BANNER_TYPE_TEXT:
  257.                     $arrImageSize false;
  258.                     break;
  259.             }
  260.             // Text Banner
  261.             if ($objBanners->banner_type == 'banner_text') {
  262.                 $objBannerText = new BannerText($objBanners$banner_cssID$banner_class);
  263.                 $arrBanners $objBannerText->generateTemplateData();
  264.                 //anderes Template?
  265.                 if (($this->banner_template != $this->strTemplate)
  266.                  && ($this->banner_template != '')
  267.                 ) {
  268.                     $this->strTemplate $this->banner_template;
  269.                     $this->Template = new FrontendTemplate($this->strTemplate);
  270.                 }
  271.                 $arrResults[] = $arrBanners[0];
  272.                 $this->Template->banners $arrResults;
  273.                 $this->Template->bmid "bmid".$module_id;
  274.                 $this->setStatViewUpdate($arrResults$module_id$objBanners->banner_useragent);
  275.                 return $this->Template;
  276.             }
  277.             // Video Banner
  278.             if ($objBanners->banner_type === BannerVideo::BANNER_TYPE_VIDEO) {
  279.                 $objBannerVideo = new BannerVideo($objBanners$banner_cssID$banner_class);
  280.                 $arrBanners $objBannerVideo->generateTemplateData();
  281.                 //anderes Template?
  282.                 if (($this->banner_template != $this->strTemplate)
  283.                     && ($this->banner_template != '')
  284.                 ) {
  285.                     $this->strTemplate $this->banner_template;
  286.                     $this->Template = new FrontendTemplate($this->strTemplate);
  287.                 }
  288.                 $arrResults[] = $arrBanners[0];
  289.                 $this->Template->banners $arrResults;
  290.                 $this->Template->bmid "bmid".$module_id;
  291.                 $this->setStatViewUpdate($arrResults$module_id$objBanners->banner_useragent);
  292.                 return $this->Template;
  293.             }
  294.         }//Banner vorhanden
  295.         //falls $arrImageSize = false  und kein Text Banner
  296.         $this->Template->banners $arrBanners// leeres array
  297.         $this->Template->bmid "bmid".$module_id;
  298.         return $this->Template;
  299.     }
  300.     public function getSingleBanner($module_id)
  301.     {
  302.         $objBannerLogic = new BannerLogic();
  303.         //RandomBlocker entfernen falls möglich und nötig
  304.         if (\count($this->arrAllBannersBasic) >1) { // einer muss ja übrig bleiben
  305.             $intRandomBlockerID $objBannerLogic->getRandomBlockerId($module_id);
  306.             if (isset($this->arrAllBannersBasic[$intRandomBlockerID])) {
  307.                 unset($this->arrAllBannersBasic[$intRandomBlockerID]);
  308.             }
  309.         }
  310.         //Gewichtung nach vorhandenen Wichtungen
  311.         $SingleBannerWeighting $objBannerLogic->getSingleWeighting($this->arrAllBannersBasic);
  312.         //alle Basic Daten durchgehen und die löschen die nicht der Wichtung entsprechen
  313.         foreach ($this->arrAllBannersBasic as $key => $val) {
  314.             if ($val != $SingleBannerWeighting) {
  315.                 unset($this->arrAllBannersBasic[$key]);
  316.             }
  317.         }
  318.         reset($this->arrAllBannersBasic); //sicher ist sicher
  319.         //Zufallszahl
  320.         //array_shuffle und array_rand zu "ungenau"
  321.         $intShowBanner =  mt_rand(1\count($this->arrAllBannersBasic));
  322.         $banner_keys array_keys($this->arrAllBannersBasic);
  323.         for ($xx=1;$xx<=$intShowBanner;$xx++) {
  324.             $banner_id   array_shift($banner_keys);
  325.         }
  326.         //Random Blocker setzen
  327.         $objBannerLogic->setRandomBlockerId($banner_id$module_id);
  328.         $objBanners  \Contao\Database::getInstance()
  329.                             ->prepare(
  330.                                 "SELECT
  331.                                             TLB.*
  332.                                        FROM
  333.                                             tl_banner AS TLB
  334.                                        WHERE
  335.                                             TLB.`id`=?"
  336.                             )
  337.                             ->limit(1)
  338.                             ->execute($banner_id);
  339.         $intRows $objBanners->numRows;
  340.         //Banner vorhanden?
  341.         if ($intRows 0) {
  342.             $objBanners->next();
  343.             BannerHelper::$arrBannerSeen[] = $objBanners->id;
  344.             //CSS-ID/Klasse(n) je Banner, für den wrapper
  345.             $banner_cssID   '';
  346.             $banner_class   '';
  347.             $banner_classes '';
  348.             $_cssID \Contao\StringUtil::deserialize($objBanners->banner_cssid);
  349.             if (\is_array($_cssID)) {
  350.                 if ($_cssID[0] != '') {
  351.                     $banner_cssID   ' id="banner_'.$_cssID[0].'"';
  352.                 }
  353.                 if ($_cssID[1] != '') {
  354.                     $banner_classes explode(" "$_cssID[1]);
  355.                     foreach ($banner_classes as $banner_classone) {
  356.                         $banner_class .= ' banner_'.$banner_classone;
  357.                     }
  358.                 }
  359.             }
  360.             switch ($objBanners->banner_type) {
  361.                 case self::BANNER_TYPE_INTERN:
  362.                     $objBannerInternal = new BannerInternal($objBanners$banner_cssID$banner_class);
  363.                     $objImageData $objBannerInternal->generateImageData();
  364.                     $FileSrc $objImageData->FileSrc;
  365.                     $picture $objImageData->Picture;
  366.                     $arrImageSize $objImageData->ImageSize;
  367.                     $arrBanners $objBannerInternal->generateTemplateData($arrImageSize$FileSrc$picture);
  368.                     //anderes Template?
  369.                     if (($this->banner_template != $this->strTemplate)
  370.                         && ($this->banner_template != '')
  371.                     ) {
  372.                         $this->strTemplate $this->banner_template;
  373.                         $this->Template = new FrontendTemplate($this->strTemplate);
  374.                     }
  375.                     $this->setStatViewUpdate($arrBanners$module_id$objBanners->banner_useragent);
  376.                     $this->Template->banners $arrBanners;
  377.                     $this->Template->bmid "bmid".$module_id;
  378.                     return $this->Template;
  379.                     break;
  380.                 case self::BANNER_TYPE_EXTERN:
  381.                     $objBannerExternal = new BannerExternal($objBanners$banner_cssID$banner_class);
  382.                     $objImageData $objBannerExternal->generateImageData();
  383.                     $FileSrc $objImageData->FileSrc;
  384.                     $picture $objImageData->Picture;
  385.                     $arrImageSize $objImageData->ImageSize;
  386.                     $arrBanners $objBannerExternal->generateTemplateData($arrImageSize$FileSrc$picture);
  387.                     //anderes Template?
  388.                     if (($this->banner_template != $this->strTemplate)
  389.                         && ($this->banner_template != '')
  390.                     ) {
  391.                         $this->strTemplate $this->banner_template;
  392.                         $this->Template = new FrontendTemplate($this->strTemplate);
  393.                     }
  394.                     $this->setStatViewUpdate($arrBanners$module_id$objBanners->banner_useragent);
  395.                     $this->Template->banners $arrBanners;
  396.                     $this->Template->bmid "bmid".$module_id;
  397.                     return $this->Template;
  398.                     break;
  399.                 case self::BANNER_TYPE_TEXT:
  400.                     $arrImageSize false;
  401.                     break;
  402.             }
  403.             // Text Banner
  404.             if ($objBanners->banner_type == 'banner_text') {
  405.                 $objBannerText = new BannerText($objBanners$banner_cssID$banner_class);
  406.                 $arrBanners $objBannerText->generateTemplateData();
  407.                 //anderes Template?
  408.                 if (($this->banner_template != $this->strTemplate)
  409.                  && ($this->banner_template != '')
  410.                 ) {
  411.                     $this->strTemplate $this->banner_template;
  412.                     $this->Template = new FrontendTemplate($this->strTemplate);
  413.                 }
  414.                 $arrResults[] = $arrBanners[0];
  415.                 $this->Template->banners $arrResults;
  416.                 $this->Template->bmid "bmid".$module_id;
  417.                 $this->setStatViewUpdate($arrResults$module_id$objBanners->banner_useragent);
  418.                 return $this->Template;
  419.             }
  420.             // Video Banner
  421.             if ($objBanners->banner_type === BannerVideo::BANNER_TYPE_VIDEO) {
  422.                 $objBannerVideo = new BannerVideo($objBanners$banner_cssID$banner_class);
  423.                 $arrBanners $objBannerVideo->generateTemplateData();
  424.                 //anderes Template?
  425.                 if (($this->banner_template != $this->strTemplate)
  426.                     && ($this->banner_template != '')
  427.                 ) {
  428.                     $this->strTemplate $this->banner_template;
  429.                     $this->Template = new FrontendTemplate($this->strTemplate);
  430.                 }
  431.                 $arrResults[] = $arrBanners[0];
  432.                 $this->Template->banners $arrResults;
  433.                 $this->Template->bmid "bmid".$module_id;
  434.                 $this->setStatViewUpdate($arrResults$module_id$objBanners->banner_useragent);
  435.                 return $this->Template;
  436.             }
  437.         }//Banner vorhanden
  438.         //falls $arrImageSize = false  und kein Text Banner
  439.         $this->Template->banners = []; // leeres array
  440.         $this->Template->bmid "bmid".$module_id;
  441.         return $this->Template;
  442.     }
  443.     protected function setStatViewUpdate($arrBannerData$module_id$banner_useragent)
  444.     {
  445.         $objBannerCount = new BannerCount($arrBannerData$banner_useragent$module_id);
  446.         $objBannerCount->setStatViewUpdate();
  447.         unset($objBannerCount);
  448.     }
  449. }