system/modules/pct_revolutionslider/RevolutionSlider/Core/RevolutionSlider.php line 235

Open in your IDE?
  1. <?php
  2. /**
  3.  * Contao Open Source CMS
  4.  * 
  5.  * Copyright (C) 2005-2013 Leo Feyer
  6.  * 
  7.  * @copyright    Tim Gatzky 2013, Premium Contao Webworks, Premium Contao Themes
  8.  * @author        Tim Gatzky <info@tim-gatzky.de>
  9.  * @package        revolutionslider
  10.  * @link        http://contao.org
  11.  */
  12. /**
  13.  * Namespace
  14.  */
  15. namespace RevolutionSlider\Core;
  16. /**
  17.  * Imports
  18.  */
  19. use RevolutionSlider\Core\SlideFactory as SlideFactory;
  20. use Contao\FrontendTemplate;
  21. use Contao\FilesModel;
  22. use Contao\Picture;
  23. use Contao\Controller;
  24. use Contao\StringUtil;
  25. /**
  26.  * Class file
  27.  * RevolutionSlider Core Class
  28.  * Provide methods to initialize a slider and add necessary scripts to the page
  29.  */
  30. class RevolutionSlider extends Controller
  31. {
  32.     /**
  33.      * Template
  34.      * @var string
  35.      */
  36.     protected $strTemplate 'revoslider_default';
  37.     
  38.     /**
  39.      * Data Array
  40.      * @var array
  41.      */
  42.     protected $arrData = array();
  43.     
  44.     /**
  45.      * Store information about parent element (cte, mod, ...)
  46.      * @var array
  47.      */
  48.     protected $arrParent = array();
  49.     /**
  50.      * Slides array
  51.      * @var array
  52.      */
  53.     protected $arrSlides = array();
  54.     /**
  55.      * Create new instance
  56.      * @param array
  57.      */
  58.     public function __construct($arrData=array())
  59.     {
  60.         if(!empty($arrData))
  61.         {
  62.             $this->arrData $arrData;
  63.         }
  64.     }
  65.     /**
  66.      * Set Data
  67.      * @param array
  68.      */
  69.     public function setData($arrData)
  70.     {
  71.         $this->arrData $arrData;
  72.     }
  73.     /**
  74.      * Getters
  75.      * @param string
  76.      */
  77.     public function get($strKey)
  78.     {
  79.         if(isset($this->$strKey))
  80.         {
  81.             return $this->$strKey;
  82.         }
  83.         else if(array_key_exists($strKey$this->arrData))
  84.         {
  85.             return $this->arrData[$strKey];
  86.         }
  87.         else
  88.         {
  89.             return null;
  90.         }    
  91.     }
  92.     
  93.     /**
  94.      * Setters
  95.      * @param string
  96.      * @param mixed
  97.      */
  98.     public function set($strKey$varValue)
  99.     {
  100.         if(isset($this->$strKey))
  101.         {
  102.             $this->$strKey $varValue;
  103.         }
  104.         else if(array_key_exists($strKey$this->arrData))
  105.         {
  106.             $this->arrData[$strKey] = $varValue;
  107.         }
  108.         else
  109.         {
  110.             return null;
  111.         }
  112.     }
  113.     
  114.     /**
  115.      * Generate a slider and return html and javascript
  116.      * @return string    html
  117.      */
  118.     public function render()
  119.     {
  120.         global $objPage;
  121.         $strLanguage str_replace('-','_',$objPage->language);
  122.         
  123.         // slider template
  124.         if($this->arrData['sliderTemplate'] != $this->strTemplate)
  125.         {
  126.             $this->strTemplate $this->arrData['sliderTemplate'];
  127.         }
  128.         $objTemplate = new FrontendTemplate($this->strTemplate);
  129.         $objTemplate->setData($this->arrData);
  130.         
  131.         $arrCssId StringUtil::deserialize($this->get('cssID'));
  132.         $arrClass explode(' '$arrCssId[1]);
  133.         $arrClass[] = $this->get('sliderStyle');
  134.         $arrClass[] = 'tp-banner';
  135.         
  136.         if(in_array($this->get('sliderStyle'), array('responsive','boxed')))
  137.         {
  138.             $arrClass[] = 'fullwidthbanner-container';
  139.         }
  140.         else if(in_array($this->get('sliderStyle'), array('fullscreen')))
  141.         {
  142.             $arrClass[] = 'fullscreen-container';
  143.         }
  144.         
  145.         $arrParent $this->get('arrParent');
  146.         
  147.         //-- generate an unique css class or use ID as jquery selector
  148.         $strSelector 'my_revolutionslider_'.$this->get('id');
  149.         
  150.         if($arrParent['id'] > 0)
  151.         {
  152.             $strSelector 'my_revolutionslider_'.$arrParent['id'];
  153.         }
  154.         
  155.         if(strlen($arrCssId[0]) > 0)
  156.         {
  157.             $objTemplate->sliderID 'id="'.$arrCssId[0].'"';
  158.             $strSelector '#'.$arrCssId[0];
  159.         }
  160.         else
  161.         {
  162.             $arrClass[] = $strSelector;
  163.             $strSelector '.'.$strSelector;
  164.         }
  165.         
  166.         // use css id from content elemenet
  167.         if($arrParent['cssID'])
  168.         {
  169.             $arrCssId StringUtil::deserialize($arrParent['cssID']);
  170.             if(strlen($arrCssId[0]) > 0)
  171.             {
  172.                 $objTemplate->sliderID 'id="revolutionslider_'.$arrCssId[0].'"';
  173.                 $strSelector '#revolutionslider_'.$arrCssId[0];
  174.             }
  175.         }
  176.         //--
  177.         
  178.         //-- slides
  179.         $arrMediaQueries = array();
  180.         $arrSlides = array();
  181.         if(!empty($this->arrSlides) && is_array($this->arrSlides))
  182.         {
  183.             foreach($this->arrSlides as $i => $objSlide)
  184.             {
  185.                 $arrRow $objSlide->get('arrData');
  186.                 
  187.                 // classes
  188.                 $class =array('slide','slide_'.$i);
  189.                 $i%== $class[] = 'even' $arrClass[] = 'odd';
  190.                 if($i == 0$class[] = 'first';
  191.                 if($i == count($this->arrSlides) - 1$class[] = 'last';
  192.                 
  193.                 $cssID StringUtil::deserialize($objSlide->get('cssID'));
  194.                 $class array_merge(explode(' '$cssID[1]),$class);
  195.                 $image '';
  196.                 // slide <li> attributes
  197.                 $arrAttributes = array();
  198.                 if(count($objSlide->get('arrAttributes')) > 0)
  199.                 {
  200.                     foreach($objSlide->get('arrAttributes') as $attr => $value)
  201.                     {
  202.                         $value $this->replaceInsertTags($value);
  203.                         $arrAttributes[] = $attr.'="'.$value.'"';
  204.                     }
  205.                 }
  206.                 
  207.                 //-- content    
  208.                 $arrContent $objSlide->get('arrContent');
  209.                 
  210.                 // fallback
  211.                 if(!$objSlide->get('background'))
  212.                 {
  213.                     $objSlide->set('background','image');
  214.                 }
  215.                 
  216.                 // inject main slide image on first position
  217.                 $arrSlides[$i]['source'] = '';
  218.                 if($objSlide->get('background') == 'image')
  219.                 {
  220.                     unset($arrAttributes['bg-color']);
  221.                     $objFile FilesModel::findByPk($objSlide->get('singleSRC'));
  222.                     $arrMeta StringUtil::deserialize($objFile->meta);
  223.                     $size StringUtil::deserialize($objSlide->get('size'));
  224.                     $src $objFile->path;
  225.                     $file Controller::getImage($src,$size[0],$size[1],$size[2]);
  226.                     $title $arrMeta[$strLanguage]['title'] ?? '';
  227.                     
  228.                     if( isset($arrRow['lazyload']) && $arrRow['lazyload'])
  229.                     {
  230.                         $dummy REVOLUTIONSLIDER_PATH.'/assets/img/dummy.png';
  231.                         $dummy $this->replaceInsertTags('{{image::'.$dummy.'?class=slideimage}}');
  232.                         
  233.                         $image str_replace('>',' data-lazyload="'.$file.'" title="'.$title.'">'$dummy);
  234.                     }
  235.                     else
  236.                     {
  237.                         if(strlen($file) > 0)
  238.                         {
  239.                             $image \Contao\Image::getHtml($file,$title,'title="'.$title.'"');
  240.                         }
  241.                     }
  242.                     
  243.                     $bgattr = array
  244.                     (
  245.                         'data-bgfit'         => $objSlide->get('data_bgfit') ? $objSlide->get('data_bgfit') : 'cover',
  246.                         'data-bgposition'     => $objSlide->get('data_bgposition') ? $objSlide->get('data_bgposition') : 'center center',
  247.                         'data-bgrepeat'     => $objSlide->get('data_bgrepeat') ? 'repeat' 'no-repeat',
  248.                     );
  249.                     
  250.                     // add ken burns options
  251.                     if($objSlide->get('kenburns'))
  252.                     {
  253.                         $bgattr['data-kenburns'] = 'on';
  254.                         $bgattr['data-bgparallax'] = "off";
  255.                         $bgattr['class'] = "rev-slidebg";
  256.                         $data_scale StringUtil::deserialize($objSlide->get('data_bgscale'));
  257.             
  258.                         $bgattr['data-bgposition'] = $objSlide->get('data_bgposition');
  259.                         $bgattr['data-bgpositionend'] = $objSlide->get('data_bgposition_OUT');
  260.                         $bgattr['data-bgfit'] = $bgattr['data-scalestart'] = (strlen($data_scale[0] > 0) ? $data_scale[0] : '100');
  261.                         $bgattr['data-bgfitend'] = $bgattr['data-scaleend'] = (strlen($data_scale[1] > 0) ? $data_scale[1] : '100');
  262.                         $bgattr['data-duration'] = $objSlide->get('data_duration') * 1000;
  263.                         $bgattr['data-ease'] = $objSlide->get('data_ease');
  264.                     }
  265.                     
  266.                     $strbgattr '';
  267.                     foreach($bgattr as $k => $v)
  268.                     {
  269.                         $strbgattr .= $k.'="'.$v.'" ';
  270.                     }
  271.                     $strbgattr substr($strbgattr,0,-1);
  272.                     
  273.                     $image str_replace('>',' '.$strbgattr.'>'$image);
  274.                 }
  275.                 // colored bg
  276.                 else if($objSlide->get('background') == 'colored')
  277.                 {
  278.                     $color $objSlide->get('data_bgcolor') ? '#'.$objSlide->get('data_bgcolor') : 'transparent';
  279.                     $image '<img src="'.REVOLUTIONSLIDER_PATH.'/assets/img/transparent.png" alt="" style="background-color:'.$color.'" data-bgfit="cover" data-bgcolor="'.$color.'" data-bgposition="left top" data-bgrepeat="no-repeat">';
  280.                 }
  281.                 else if($objSlide->get('background') == 'transparent')
  282.                 {
  283.                     unset($arrAttributes['bg-color']);
  284.                     $image '<img src="'.REVOLUTIONSLIDER_PATH.'/assets/img/transparent.png" alt="" data-bgfit="cover" data-bgposition="left top" data-bgrepeat="no-repeat">';
  285.                 }
  286.                 // video
  287.                 else if( in_array($objSlide->get('background'), array('videomp4','external')) )
  288.                 {
  289.                     unset($arrAttributes['bg-color']);
  290.                     $source $objSlide->get('background');
  291.                     
  292.                     $vidId '';
  293.                     if( $objSlide->get('videoURL') && $objSlide->get('background') == 'external' )
  294.                     {
  295.                         $src $objSlide->get('videoURL');
  296.                         $parse_urlparse_url($src);
  297.                         $preg preg_match("/&(.*?)\&/"str_replace('.','&',$parse_url['host']) ,$match);
  298.                         $host $match[1];
  299.                         $vidId endarray_filter\explode('/',$parse_url['path']) ) );
  300.                         switch($host)
  301.                         {
  302.                             case 'youtube':
  303.                             case 'youtu'// youtu.be
  304.                             case 'youtube-nocookie':
  305.                                 $source 'youtube';
  306.                                 break;
  307.                             case 'vimeo':
  308.                                 $source 'vimeo';
  309.                                 break;
  310.                             default: 
  311.                                 $source 'custom';
  312.                                 break;
  313.                         }
  314.                     }
  315.                     $arrSlides[$i]['source'] = $source;
  316.                     $arrSlides[$i]['isVideo'] = true;
  317.                     $arrSlides[$i]['videomp4'] = FilesModel::findByPk$objSlide->get('videoSRC') )->path;
  318.                     $arrSlides[$i]['videoId'] = $vidId;
  319.                     $arrSlides[$i]['poster'] = FilesModel::findByPk$objSlide->get('singleSRC') )->path;
  320.                     $arrSlides[$i]['nextslideatend'] = (boolean)$objSlide->get('nextslideatend');
  321.                     $arrSlides[$i]['loop'] = (boolean)$objSlide->get('loop');
  322.                 }
  323.                 // responsive images
  324.                 if( $objSlide->get('singleSRC') && $objSlide->get('background') == 'image' )
  325.                 {
  326.                     $class[] = 'rs_mq_image_'.$this->get('id').'_'.$i;
  327.                     $objFile FilesModel::findByPk$objSlide->get('singleSRC') );
  328.                     $objPicture Picture::create($objFile->path,StringUtil::deserialize$objSlide->get('size')) ); 
  329.                     if( $objPicture !== null )
  330.                     {
  331.                         $arrPicture $objPicture->getTemplateData();    
  332.                         foreach($arrPicture['sources'] ?: array() as $data)
  333.                         {
  334.                             if( strlen($data['media']) < )
  335.                             {
  336.                                 continue;
  337.                             }
  338.                             $arrMediaQueries[] = '@media ('.$data['media'].') {.rs_mq_image_'.$this->get('id').'_'.$i.' .tp-bgimg {background-image:url("'.$data['src'].'") !important;}}';
  339.                         }
  340.                     }
  341.                 }
  342.                 
  343.                 // inset main image on first position
  344.                 if( empty($image) === false )
  345.                 {
  346.                     array_insert($arrContent,0,$image);
  347.                 }
  348.                 
  349.                 $arrSlides[$i]['id']            = $objSlide->get('id');
  350.                 $arrSlides[$i]['content']         = $arrContent;
  351.                 $arrSlides[$i]['attributes']    = implode(' '$arrAttributes);
  352.                 $arrSlides[$i]['class']            = implode(' 'array_filterarray_unique($class) ) );
  353.                 $arrSlides[$i]['cssID']            = (strlen($cssID[0]) ? 'id="'.$cssID[0].'"' '');
  354.                 $arrSlides[$i]['row']            = $arrRow;
  355.                 $arrSlides[$i]['raw']            = $objSlide;
  356.                 $arrSlides[$i]['data']            = $arrRow;
  357.             }
  358.         }
  359.         
  360.         // call hook
  361.         if (isset($GLOBALS['RS_HOOKS']['addSlides']) && !empty($GLOBALS['RS_HOOKS']['addSlides']))
  362.         {
  363.             foreach($GLOBALS['RS_HOOKS']['addSlides'] as $callback)
  364.             {
  365.                 $arrSlides \Contao\System::importStatic($callback[0])->{$callback[1]}($arrSlides,$this,$this);
  366.             }
  367.         }
  368.         if(empty($arrSlides))
  369.         {
  370.             $arrClass[] = 'empty';
  371.             // add status messages
  372.             $objTemplate->emptyMsg $GLOBALS['TL_LANG']['REVOLUTIONSLIDER']['empty'];
  373.             
  374.             return $objTemplate->parse();
  375.         }
  376.         
  377.         $objTemplate->slides $arrSlides;
  378.         //--
  379.         
  380.         //-- js template
  381.         $objJsTemplate = new FrontendTemplate($this->arrData['jsTemplate']);
  382.         $objJsTemplate->setData($this->arrData);
  383.         $objJsTemplate->selector $strSelector;
  384.         $objJsTemplate->stopOnHover = (boolean)$this->get('stopOnHover');
  385.         $objJsTemplate->delay = ($this->arrData['delay'] ? $this->arrData['delay'] * 1000 0);
  386.         $objJsTemplate->slideCount count($this->arrSlides);
  387.         $arrSize StringUtil::deserialize($this->arrData['sliderSize']);
  388.         $objJsTemplate->startWidth = ($arrSize[0] ? $arrSize[0] : 0);
  389.         $objJsTemplate->startHeight = ($arrSize[1] ? $arrSize[1] : 0);
  390.         $objJsTemplate->startWithSlide = ($this->get('startWithSlide') > $this->get('startWithSlide') : 0);
  391.         $objJsTemplate->sliderLayout $this->get('sliderStyle');
  392.         $objJsTemplate->navigationStyle '';
  393.         $objJsTemplate->arrowStyle '';
  394.         // modes
  395.         $objJsTemplate->fullscreen false;
  396.         $objJsTemplate->fullwidth true;
  397.         switch($this->get('sliderStyle'))
  398.         {
  399.             case 'responsive':
  400.                 $objJsTemplate->sliderLayout 'auto';
  401.                 break;
  402.             case 'fullscreen'
  403.                 $objJsTemplate->fullscreen true;
  404.                 $objJsTemplate->fullwidth false;
  405.                 $objJsTemplate->sliderLayout 'fullscreen';
  406.                 break;
  407.             case 'boxed'
  408.                 $objJsTemplate->sliderLayout 'auto';
  409.                 break;
  410.             default:
  411.                 break;
  412.         }
  413.         // breakpoint
  414.         $objJsTemplate->breakpoint_mobile $this->get('sliderBreakPoint') ?: 768
  415.         
  416.         // navigation type
  417.         if(!$this->get('addNavigation') || !$this->get('navigationType'))
  418.         {
  419.             $objJsTemplate->navigationType 'none';
  420.         }
  421.         else
  422.         {
  423.             $tmp explode('_'$this->get('navigationType'));
  424.             switch($this->get('navigationType'))
  425.             {
  426.                 case 'preview1':
  427.                 case 'preview2':
  428.                 case 'preview3':
  429.                 case 'preview4':
  430.                     $objJsTemplate->navigationType 'none';
  431.                     $objJsTemplate->navigationStyle $this->get('navigationType');
  432.                     break;
  433.                 default:
  434.                     $objJsTemplate->navigationType $tmp[0];
  435.                     $objJsTemplate->navigationStyle $tmp[1];
  436.                     break;
  437.             }
  438.         }
  439.         
  440.         // thumbnails
  441.         if($this->get('addThumbs'))
  442.         {
  443.             $arrSize StringUtil::deserialize($this->get('thumbSize'));
  444.             $objJsTemplate->thumbWidth = ($arrSize[0] ? $arrSize[0] : 0);
  445.             $objJsTemplate->thumbHeight = ($arrSize[1] ? $arrSize[1] : 0);
  446.         }
  447.         
  448.         // arrow navigation
  449.         $objJsTemplate->arrowStyle '';
  450.         if(!$this->get('addArrows'))
  451.         {
  452.             $objJsTemplate->arrowStyle 'none';
  453.         }
  454.         //! navigation
  455.         // navigation size
  456.         $arrNaviSize $GLOBALS['REVOLUTIONSLIDER']['THUMBNAIL_SIZES'] ?? array();
  457.         if (\in_array$this->get('navigationType'), $GLOBALS['REVOLUTIONSLIDER']['NAVIGATION_TYPES']['tabs']) )
  458.         {
  459.             $arrNaviSize $GLOBALS['REVOLUTIONSLIDER']['THUMBNAIL_SIZES_TABS'] ?? array();
  460.         }
  461.         
  462.         $tmp StringUtil::deserialize$this->get('navigationSize') );
  463.         if( empty($tmp) === false )
  464.         {
  465.             if( \is_array($tmp) === false )
  466.             {
  467.                 $tmp \implode(',',$tmp);
  468.             }
  469.             $arrNaviSize[0] = $tmp[0]; 
  470.             $arrNaviSize[1] = $tmp[1];
  471.         }
  472.         unset($tmp);
  473.         
  474.         $objJsTemplate->navigationWidth $arrNaviSize[0] ?? '';
  475.         $objJsTemplate->navigationHeight $arrNaviSize[1] ?? '';
  476.         $objJsTemplate->bullets false;
  477.         $objJsTemplate->thumbs false;
  478.         $objJsTemplate->tabs false;
  479.         $objJsTemplate->thumbWidth '';
  480.         $objJsTemplate->thumbHeight '';
  481.         
  482.         // bullets
  483.         if (\in_array$this->get('navigationType'), $GLOBALS['REVOLUTIONSLIDER']['NAVIGATION_TYPES']['bullets']) )
  484.         {
  485.             $objJsTemplate->bullets true;
  486.             $objJsTemplate->navigationStyle str_replace('bullets_','',$this->get('navigationType'));
  487.         }
  488.         // tabs
  489.         else if (\in_array$this->get('navigationType'), $GLOBALS['REVOLUTIONSLIDER']['NAVIGATION_TYPES']['tabs']) )
  490.         {
  491.             $objJsTemplate->tabs true;
  492.             $objJsTemplate->navigationStyle str_replace('tabs_','',$this->get('navigationType'));
  493.             $objJsTemplate->tabsWidth $arrNaviSize[0];
  494.             $objJsTemplate->tabsHeight $arrNaviSize[1];
  495.         }
  496.         // thumbs
  497.         else if (\in_array$this->get('navigationType'), $GLOBALS['REVOLUTIONSLIDER']['NAVIGATION_TYPES']['thumbs']) )
  498.         {
  499.             $objJsTemplate->thumbs true;
  500.             $objJsTemplate->navigationStyle str_replace('thumbs_','',$this->get('navigationType'));
  501.             $objJsTemplate->thumbWidth $arrNaviSize[0];
  502.             $objJsTemplate->thumbHeight $arrNaviSize[1];
  503.         }
  504.         // arrows
  505.         if ( empty($this->get('arrowStyle')) === false )
  506.         {
  507.             $objJsTemplate->arrows true;
  508.             $objJsTemplate->arrowStyle str_replace('arrows_','',$this->get('arrowStyle'));
  509.         }
  510.     
  511.         // shuffle
  512.         $objJsTemplate->shuffle $this->get('shuffle');
  513.     
  514.         //overlay
  515.         $objJsTemplate->overlay $this->get('overlay');
  516.         $arrClass[] = $this->get('overlay');
  517.         // loop settings
  518.         $objJsTemplate->stopAtSlide = -1;
  519.         if($this->get('stopAtSlide') >= && $this->get('stopAtSlide') != '')
  520.         {
  521.             $objJsTemplate->stopAtSlide $this->get('stopAtSlide');
  522.         }
  523.         $objJsTemplate->stopAfterLoops = -1;
  524.         if($this->get('stopAfterLoops') >= && $this->get('stopAfterLoops') != '')
  525.         {
  526.             $objJsTemplate->stopAfterLoops $this->get('stopAfterLoops');
  527.         }
  528.         // mobile switch
  529.         $objJsTemplate->hasMobile false;
  530.         $objTemplate->hasMobile false;
  531.         if( isset($GLOBALS['REVOLUTIONSLIDER_HAS_MOBILE'][ $this->get('id') ]) && (boolean)$GLOBALS['REVOLUTIONSLIDER_HAS_MOBILE'][ $this->get('id') ] === true )
  532.         {
  533.             $objJsTemplate->hasMobile true;
  534.             $objTemplate->hasMobile true;
  535.         }
  536.         
  537.         // parse js template
  538.         $objTemplate->javascript $objJsTemplate->parse();
  539.         
  540.         // add classes
  541.         $objTemplate->class implode(' '$arrClass);
  542.         
  543.         // template vars
  544.         $arrSize StringUtil::deserialize($this->arrData['sliderSize']);
  545.         $objTemplate->startWidth $arrSize[0];
  546.         $objTemplate->startHeight $arrSize[1];
  547.         $objTemplate->mediaqueries $arrMediaQueries;
  548.         $objTemplate->selector $strSelector;
  549.         
  550.         return $objTemplate->parse();
  551.     }
  552.     
  553.     /**
  554.      * Set Template
  555.      * @param string
  556.      */
  557.     public function setTemplate($strTemplate)
  558.     {
  559.         $this->strTemplate $strTemplate;
  560.     }
  561.     
  562.     /**
  563.      * Find and set all slide objects for this slider and return as array
  564.      * @param integer
  565.      * @return array
  566.      */
  567.     public function findSlides($intId)
  568.     {
  569.         $this->arrSlides SlideFactory::findAllBySlider($intId);        
  570.         return $this->arrSlides;
  571.     }
  572.     
  573.     /**
  574.      * Return all transition options as array
  575.      * @return array
  576.      */
  577.     public function getTransitions()
  578.     {
  579.         $arrReturn = array(
  580.             'boxslide','boxfade''slotzoom-horizontal''slotzoom-vertical',
  581.             'slotslide-horizontal''slotslide-vertical'
  582.             'slotfade-horizontal','slotfade-vertical'
  583.             'slideleft''slideright''slideup' ,'slidedown',
  584.             'slidehorizontal''slidevertical',    
  585.             'fade',    'random'
  586.         );
  587.         
  588.         // new regular
  589.         array_push($arrReturn,
  590.             'fadefromright','fadefromleft','fadefromtop','fadefrombottom',
  591.             'fadetoleftfadefromright','fadetorightfadefromleft','fadetotopfadefrombottom','fadetobottomfadefromtop',
  592.             'parallaxtoright','parallaxtoleft','parallaxtotop','parallaxtobottom',
  593.             'scaledownfromright','scaledownfromleft','scaledownfromtop','scaledownfrombottom',
  594.             'zoomout','zoomin',
  595.             'slotzoom-horizontal','slotzoom-vertical',
  596.             'random-static'
  597.         );
  598.     
  599.         // premiums
  600.         $arrPremiums = array
  601.         (
  602.              'curtain-1''curtain-2''curtain-3',
  603.              '3dcurtain-vertical','3dcurtain-horizonal',
  604.              'cube','cube-horizontal',
  605.              'papercut',
  606.              'flyin',
  607.              'turnoff','turnoff-vertical',
  608.              'random-premium'
  609.         );
  610.         
  611.         // HOOK allow more transitions via global var
  612.         if(!empty($GLOBALS['REVOLUTIONSLIDER']['TRANSITIONS']) && is_array($GLOBALS['REVOLUTIONSLIDER']['TRANSITIONS']))
  613.         {
  614.             $arrReturn array_merge($arrReturn$GLOBALS['REVOLUTIONSLIDER']['TRANSITIONS']);
  615.         }
  616.         
  617.         $arrReturn array_unique(array_merge($arrReturn$arrPremiums));
  618.         // order
  619.         sort($arrReturn);
  620.         return $arrReturn;
  621.     }
  622.     
  623.     /**
  624.      * Return easing options as array
  625.      * @return array
  626.      */    
  627.     public function getTransitionEasings()
  628.     {
  629.         $arrReturn = array
  630.         (
  631.              'easeInBack','easeOutBack''easeOutBack''easeInOutBack',
  632.              'easeInQuad''easeOutQuad''easeInOutQuad',  
  633.              'easeOutQuart''easeInOutQuart',
  634.              'easeInCubic''easeOutCubic''easeInOutCubic''easeInQuart',
  635.              'easeInQuint''easeOutQuint''easeInOutQuint',
  636.              'easeInSine''easeOutSine''easeInOutSine'
  637.              'easeInExpo''easeOutExpo''easeInOutExpo',
  638.              'easeInCirc''easeOutCirc''easeInOutCirc'
  639.              'easeInElastic''easeOutElastic','easeInOutElastic',  
  640.              'easeInBounce''easeOutBounce''easeInOutBounce',
  641.         );
  642.         
  643.         // new easings
  644.         #$arrReturn['new'] = array
  645.         #(
  646.         #    'Linear.easeNone Power0.easeIn (linear)',
  647.         #    'Power0.easeInOut (linear)',
  648.         #    'Power0.easeOut (linear)','Power1.easeIn', 'Power1.easeInOut',
  649.         #    'Power1.easeOut',
  650.         #    'Power2.easeIn', 'Power2.easeInOut',
  651.         #    'Power2.easeOut', 'Power3.easeIn', 
  652.         #    'Power3.easeInOut', 'Power3.easeOut', 'Power4.easeIn', 'Power4.easeInOut', 'Power4.easeOut',
  653.         #    'Quad.easeIn (same as Power1.easeIn)','Quad.easeInOut (same as Power1.easeInOut)',
  654.         #    'Quad.easeOut (same as Power1.easeOut)', 'Cubic.easeIn (same as Power2.easeIn)', 'Cubic.easeInOut (same as Power2.easeInOut)', 'Cubic.easeOut (same as Power2.easeOut)',
  655.         #    'Quart.easeIn (same as Power3.easeIn)',
  656.         #    'Quart.easeInOut (same as Power3.easeInOut)',
  657.         #    'Quart.easeOut (same as Power3.easeOut)',
  658.         #    'Quint.easeIn (same as Power4.easeIn)',
  659.         #    'Quint.easeInOut (same as Power4.easeInOut)',
  660.         #    'Quint.easeOut (same as Power4.easeOut)',
  661.         #    'Strong.easeIn (same as Power4.easeIn)', 'Strong.easeInOut (same as Power4.easeInOut)',
  662.         #    'Strong.easeOut (same as Power4.easeOut)',
  663.         #    'Back.easeIn','Back.easeInOut',    'Back.easeOut',
  664.         #    'Bounce.easeIn','Bounce.easeInOut', 'Bounce.easeOut', 
  665.         #    'Circ.easeIn', 'Circ.easeInOut', 'Circ.easeOut', 
  666.         #    'Elastic.easeIn', 'Elastic.easeInOut', 'Elastic.easeOut', 'Expo.easeIn', 'Expo.easeInOut', 'Expo.easeOut',
  667.         #    'Sine.easeIn', 'Sine.easeInOut', 'Sine.easeOut', 'SlowMo.ease'
  668.         #);
  669.         
  670.         // HOOK allow more easings via global var
  671.         if(!empty($GLOBALS['REVOLUTIONSLIDER']['EASINGS']) && is_array($GLOBALS['REVOLUTIONSLIDER']['EASINGS']))
  672.         {
  673.             $arrReturn['custom'] = $GLOBALS['REVOLUTIONSLIDER']['EASINGS'];
  674.         }
  675.         
  676.         return $arrReturn;
  677.     }
  678.     
  679.     /**
  680.      * Return start animations classes as array
  681.      * @return array
  682.      */    
  683.     public function getStartAnimationClasses()
  684.     {
  685.         // data-frame presets
  686.         $arrReturn \array_keys($GLOBALS['REVOLUTIONSLIDER']['FRAMES']);
  687.         // hook
  688.         $arrReturn \array_merge($arrReturn$GLOBALS['REVOLUTIONSLIDER']['ANIMATIONS']['START']);
  689.         
  690.         \sort\array_unique($arrReturn) );
  691.         
  692.         return $arrReturn;
  693.     }
  694.     
  695.     /**
  696.      * Return end animations classes as array
  697.      * @return array
  698.      */    
  699.     public function getEndAnimationClasses()
  700.     {
  701.         $arrReturn = array
  702.         (
  703.             'stt',    // - Short to Top
  704.             'stb',    // - Short to Bottom
  705.             'str',    // - Short to Right
  706.             'stl',    // - Short to Left
  707.             'ltt',    // - Long to Top
  708.             'ltb',    // - Long to Bottom
  709.             'ltr',    // - Long to Right
  710.             'ltl',    //- Long to Left
  711.             'fadeout',    // - fading
  712.             'randomrotateout',    //- Fade in, Rotate from a Random position and Degree
  713.             'skewfromleft',
  714.             'skewfromright',
  715.             'skewfromleftshort',
  716.             'skewfromrightshort'
  717.         );
  718.         
  719.         // append data-frame presets
  720.         $arrReturn \array_merge($arrReturnarray_keys($GLOBALS['REVOLUTIONSLIDER']['FRAMES'] ?: array()) );
  721.         // HOOK
  722.         $arrReturn \array_merge($arrReturn$GLOBALS['REVOLUTIONSLIDER']['ANIMATIONS']['END']);
  723.         
  724.         \sort\array_unique($arrReturn) );
  725.         return $arrReturn;
  726.     }
  727. }