Your IP : 216.73.217.36


Current Path : /home/azimutno/www/demo/libraries/nextend/smartslider/
Upload File :
Current File : /home/azimutno/www/demo/libraries/nextend/smartslider/slider.php

<?php
/*
# author Roland Soos
# copyright Copyright (C) Nextendweb.com. All Rights Reserved.
# @license - http://www.gnu.org/licenses/gpl-3.0.txt GNU/GPL
*/
defined('_JEXEC') or die('Restricted access'); ?><?php

nextendimportsmartslider2('nextend.smartslider.settings');
nextendimportsmartslider2('nextend.smartslider.widgets');

class NextendSlider {

    var $_norender = false;
    var $_path;
    var $_backend;
    var $_sliderid;
    var $_identifier = 'nextend-smart-slider';
    var $_instance;
    var $_typePath;
    var $_slider;
    var $_sliderParams;
    var $_generator;
    var $_generatorParams;
    var $_generatorSlideParams;
    var $_slides;
    var $_activeSlide = 0;

    function NextendSlider($path, $backend = false) {

        $this->_path = $path . DIRECTORY_SEPARATOR;
        $this->_backend = $backend;
    }

    function getId() {

        return $this->_identifier . '-' . $this->_instance;
    }

    function loadSlider($sliderid) {
        $this->_sliderid = $sliderid;
        nextendimportsmartslider2('nextend.smartslider.admin.models.sliders');
        $slidersModel = new NextendSmartsliderAdminModelSliders(null);
        $slider = $slidersModel->getSlider($sliderid);
        $this->_slider = new NextendData();
        $this->_slider->loadArray($slider);

        $this->_sliderParams = new NextendData();
        $this->_sliderParams->loadJSON($slider['params']);

        $this->_generatorParams = new NextendData();
        $this->_generatorParams->loadJSON($slider['generator']);

        $this->_generatorSlideParams = new NextendData();
        $this->_generatorSlideParams->loadJSON($slider['slide']);


        if ($this->_backend) {
            $this->_slides = $this->slides();
        } else {
            $cache = NextendParse::parse($this->_sliderParams->get('cache', '0|*|1440'));
            if (intval($cache[0])) {
                nextendimport('nextend.cache.data.data');
                $caching = NextendCacheData::getInstance();
                $this->_slides = $caching->cache('smartslider', $cache[1], array($this, 'slides'));
            } else {
                $this->_slides = $this->slides();
            }
            if($this->_sliderParams->get('randomize', 0)){
                shuffle($this->_slides);
                $this->_activeSlide = 0;
            }
        }
        if (count($this->_slides) === 0) {
            if (NextendSmartSliderSettings::get('debugmessages', 1))
                echo '0 slides available for this slider.';
            $this->_norender = true;
        }
    }

    function slides() {
        return $this->initSlides($this->loadSlides());
    }

    function loadSlides() {
        $slides = array();
        $generateslides = NextendParse::parse($this->_generatorParams->get('generateslides', '0|*|0|*|0'));
        $createslides = intval($generateslides[1]);
        $staticslides = intval($generateslides[2]);
        
        $publishbetween = (array)NextendParse::parse($this->_generatorSlideParams->get('publishdates', '|*|'));
        if(!isset($publishbetween[1])) $publishbetween[1] = '';

        if (!$this->_backend && $this->_generatorParams->get('enabled', 0) && $createslides == 0 && ($publishbetween[0] == '' || strtotime($publishbetween[0]) < time()) && ($publishbetween[1] == '' || strtotime($publishbetween[1]) > time())) {
            nextendimportsmartslider2('nextend.smartslider.generator');
            $this->generator = new NextendSmartsliderGenerator($this->_generatorParams, $this->_generatorSlideParams);
            $slides = $this->generator->generateSlides($this->_sliderid);
        } else {
            nextendimportsmartslider2('nextend.smartslider.admin.models.slides');
            $slidesModel = new NextendSmartsliderAdminModelSlides(null);

            $where = '';
            if ($this->_backend) {
                $where = " AND ((published = 1 AND (publish_up = '0000-00-00 00:00:00' OR publish_up < '".date( 'Y-m-d H:i:s')."') AND (publish_down = '0000-00-00 00:00:00' OR publish_down > '".date( 'Y-m-d H:i:s')."')) OR id = " . NextendRequest::getInt('slideid') . ") ";
            } else {
                $where = " AND published = 1 AND (publish_up = '0000-00-00 00:00:00' OR publish_up < '".date( 'Y-m-d H:i:s')."') AND (publish_down = '0000-00-00 00:00:00' OR publish_down > '".date( 'Y-m-d H:i:s')."') ";
            }

            $slides = $slidesModel->getSlides($this->_sliderid, $where);
            if (!$this->_backend && $createslides && !$staticslides) {
                nextendimportsmartslider2('nextend.smartslider.generator');
                $this->generator = new NextendSmartsliderGenerator($this->_generatorParams, $this->_generatorSlideParams);
                $source = $this->_generatorParams->get('source', '');
                if ($source) {
                    $this->generator->initDatasource($source);
                    for ($i = 0; $i < count($slides); $i++) {
                        if ($slides[$i]['generator'] > 0) {
                            $slides[$i] = $this->generator->makeSlide($slides[$i]);
                        }
                    }
                }
            }
        }
        $this->_activeSlide = 0;
        return $slides;
    }

    function initSlides($slides) {
        if ($this->_backend) {
            if (NextendRequest::getCmd('action') == 'create') {
                array_unshift($slides, array(
                    'id' => 0,
                    'title' => '{_slidetitle}',
                    'slider' => NextendRequest::getInt('sliderid'),
                    'publish_up' => '0000-00-00 00:00:00',
                    'publish_down' => '0000-00-00 00:00:00',
                    'published' => 1,
                    'first' => 0,
                    'slide' => '',
                    'params' => '',
                    'thumbnail' => '',
                    'background' => 'ffffff00|*|',
                    'description' => 'Description',
                    'ordering' => count($slides)
                ));
            }

            if (NextendRequest::getCmd('action') == 'generator') {
                global $smartslidergeneratorslide;
                if (!$smartslidergeneratorslide) $smartslidergeneratorslide = array();
                array_unshift($slides, array_merge(array(
                    'id' => 0,
                    'title' => '{_slidetitle}',
                    'slider' => NextendRequest::getInt('sliderid'),
                    'publish_up' => '0000-00-00 00:00:00',
                    'publish_down' => '0000-00-00 00:00:00',
                    'published' => 1,
                    'first' => 0,
                    'slide' => '',
                    'params' => '',
                    'thumbnail' => '',
                    'background' => 'ffffff00|*|',
                    'description' => 'Description',
                    'ordering' => count($slides)
                ), $smartslidergeneratorslide));
            } else if (NextendRequest::getCmd('controller') == 'layouts' && NextendRequest::getCmd('action') == 'edit') {
                global $smartsliderlayout;
                if (!$smartsliderlayout) $smartsliderlayout = '';
                array_unshift($slides, array(
                    'id' => 0,
                    'title' => '{_slidetitle}',
                    'slide' => $smartsliderlayout,
                    'params' => ''
                ));
            } else if (NextendRequest::getCmd('controller') == 'slides') {
                $currentlyedited = NextendRequest::getInt('slideid');
                for ($i = 0; $i < count($slides); $i++) {
                    if ($slides[$i]['id'] == $currentlyedited) {
                        $this->_activeSlide = $i;
                        break;
                    }
                }
            }
        } else {
            for ($i = 0; $i < count($slides); $i++) {
                if ($slides[$i]['first'] == 1) {
                    $this->_activeSlide = $i;
                    break;
                }
            }
        }
        nextendimport('nextend.image.color');
        for ($i = 0; $i < count($slides); $i++) {
        
            $params = new NextendData();
            $params->loadJSON($slides[$i]['params']);
            $slides[$i]['params'] = $params;
            
            $slides[$i]['classes'] = 'smart-slider-canvas';
            if (!isset($slides[$i]['background'])) $slides[$i]['background'] = 'ffffff00|*|';
            $bg = (array)NextendParse::parse($slides[$i]['background']);
            $style = '';
            if (isset($bg[0]) && strlen($bg[0]) == 8) {
                if (substr($bg[0], 6, 2) != '00') {
                    $style .= 'background-color: #' . substr($bg[0], 0, 6) . ';';
                    $rgba = NextendColor::hex2rgba($bg[0]);
                    $style .= 'background-color: RGBA(' . $rgba[0] . ',' . $rgba[1] . ',' . $rgba[2] . ',' . round($rgba[3] / 127, 2) . ');';
                }
            }
            $slides[$i]['style'] = $style;
            $slides[$i]['bg'] = false;
            if (isset($bg[1]) && $bg[1] != '') {
                    $slides[$i]['bg'] = $bg[1];
            }
            
            $link = $params->get('link', '');
            if(!$this->_backend && $link){
                $slides[$i]['link'] = ' onclick="'.htmlspecialchars(strpos($link, 'javascript:') === 0 ? $link : 'window.location=\''.(nextendIsJoomla() ? JRoute::_($link, false) : $link).'\'').'" ';
                $slides[$i]['style'].='cursor:pointer;';
            }else{
                $slides[$i]['link'] = '';
            }
            
        }

        return $slides;
    }

    function render() {
        if ($this->_norender) return;

        $id = $this->getId();
        $data = & $this->_data;

        $this->addJs();

        $jquery = NextendSmartSliderSettings::get('jquery', 1);
        if(!$jquery && !$this->_backend){
            $js = NextendJavascript::getInstance();
            $js->_loadedLibraries['jquery']->removeJsLibraryFile('jQuery.js');
        }
        
        $widgets = new NextendSliderWidgets($this, $id);
        
        if (isset($this->_slides[$this->_activeSlide]))
            $this->_slides[$this->_activeSlide]['classes'] .= ' smart-slider-slide-active';

        $fadeonload = (array)NextendParse::parse($this->_sliderParams->get('fadeonload', '1|*|0'));
        if(!isset($fadeonload[1])){
            $fadeonload[1] = 0;
        }else if($fadeonload[1]){
            $fadeonload[0] = 1;
        }
                
        $sliderClasses = (!$this->_backend && $fadeonload[0] ? 'nextend-slider-fadeload ' : '');
        
        $properties = $this->generateJSProperties();
        
        ob_start();
        if(!$this->_backend && $fadeonload[0]){
            echo '<style type="text/css">div#'.$id.'.nextend-slider-fadeload{position: absolute; opacity: 0;}</style>';
        }
        include($this->_typePath . 'slider.php');
        $slider = ob_get_clean();
        
        
        if(!$this->_backend){
            NextendPlugin::callPlugin('nextendslideritem', 'onNextendSliderRender', array(&$slider, $id));
            
            $slider = preg_replace( '/data-itemvalues=".*?"/', '', $slider ); // Remove unnecessary attributes...
            $slider = preg_replace( '/data-item=".*?"/', '', $slider ); // Remove unnecessary attributes...
            $slider = preg_replace( '/data-leave=""/', '', $slider ); // Remove unnecessary attributes...
            $slider = preg_replace( '/data-enter=""/', '', $slider ); // Remove unnecessary attributes...
            $slider = preg_replace( '/data-click=""/', '', $slider ); // Remove unnecessary attributes...
        
            if(nextendIsJoomla()){
                if(version_compare(JVERSION, '1.6.0', 'ge')){
                    $dispatcher = JDispatcher::getInstance();
          			     JPluginHelper::importPlugin('content');
                    $article = new stdClass();
                    $article->text = $slider;
                    $_p = array();
                    $dispatcher->trigger('onContentPrepare', array('com_smartslider2', &$article, &$_p, 0));
                    if(!empty($article->text)) $slider = $article->text;
                }
            }elseif(nextendIsWordPress()){
                $slider = do_shortcode($slider);
            }
        }

        $slider = str_replace(array('{{id}}', 'nextend-smart-slider-0'), $this->getId(), $slider);

        if(!$this->_backend){
            $translateurl = (array)NextendParse::parse(NextendSmartSliderSettings::get('translateurl', ''));
            if(isset($translateurl[0]) && isset($translateurl[1])){
                $slider = str_replace($translateurl[0], $translateurl[1], $slider);
            }
        }
        
        echo $this->parseSlider($slider);

        $size = $this->addCSS();
        $responsive = (array)NextendParse::parse($this->_sliderParams->get('responsive', '0|*|0'));
        
        if( !$this->_backend && $fadeonload[0] && ((isset($responsive[0]) && $responsive[0]) || (isset($responsive[1]) && $responsive[1]))){
            if($size[0]+$size[3] > 0 && $size[1] > 0 && function_exists('imagecreatetruecolor')){
                echo '<div id="'.$id.'-placeholder" >';
                
                $im = imagecreatetruecolor($size[0]+$size[3], $size[1]);
                imagesavealpha($im, true);
                imagealphablending($im, false);
                $trans = imagecolorallocatealpha($im, 255, 0, 0, 127);
                imagefilledrectangle($im, 0, 0, $size[0]+$size[3], $size[1], $trans);
                ob_start();
                imagepng($im);
                imagedestroy($im);
                $img = base64_encode(ob_get_clean());
                echo '<img style="width:100%; max-width: '.(intval($this->_sliderParams->get('simpleresponsivemaxwidth', 30000))+$size[3]).'px;" src="data:image/png;base64, '.$img.'" />';
                
                if($size[2] > 0){
                    $im = imagecreatetruecolor($size[0]+$size[3], $size[2]);
                    imagesavealpha($im, true);
                    imagealphablending($im, false);
                    $trans = imagecolorallocatealpha($im, 255, 0, 0, 127);
                    imagefilledrectangle($im, 0, 0, $size[0]+$size[3], $size[2], $trans);
                    ob_start();
                    imagepng($im);
                    imagedestroy($im);
                    $img = base64_encode(ob_get_clean());
                    echo '<img style="width:100%;" src="data:image/png;base64, '.$img.'" />';
                }
                
                echo '</div>';
            }else{
                echo '<style>#'.$id.' .nextend-slider-fadeload{position: static !important;}</style>';
            }
        }else{
            echo '<style>#'.$id.'.nextend-slider-fadeload{position: static !important;}</style>';
        }
    }
    
    function generateJSProperties(){
        $p = array();
        
        $p['translate3d'] = intval(NextendSmartSliderSettings::get('translate3d', 1));
        $p['playfirstlayer'] = intval($this->_sliderParams->get('playfirstlayer', 0));
        $p['mainafterout'] = intval($this->_sliderParams->get('mainafterout', 1));
        $p['inaftermain'] = intval($this->_sliderParams->get('inaftermain', 1));
        
        $fadeonload = (array)NextendParse::parse($this->_sliderParams->get('fadeonload', '1|*|0'));
        if(!isset($fadeonload[1])){
            $fadeonload[1] = 0;
        }else if($fadeonload[1]){
            $fadeonload[0] = 1;
        }
        $p['fadeonscroll'] = intval($fadeonload[1]);
        
        $count = count($this->_slides);
        
        $autoplay = NextendParse::parse($this->_sliderParams->get('autoplay', '0|*|5000'));
        $autoplayfinish = NextendParse::parse($this->_sliderParams->get('autoplayfinish', '0|*|loop|*|current'));
        $autoplayToSlide = 0;
        
        if(isset($autoplayfinish[1])){
            switch($autoplayfinish[1]){
                case 'slide':
                    if(isset($autoplayfinish[2]) && $autoplayfinish[2] == 'next'){
                        $autoplayToSlide = intval($autoplayfinish[0]) + 1;
                    }else{
                        $autoplayToSlide = intval($autoplayfinish[0]);
                    }
                    break;
                default: 
                    if(isset($autoplayfinish[2]) && $autoplayfinish[2] == 'next'){
                        $autoplayToSlide = intval($autoplayfinish[0]) * $count + 1;
                    }else{
                        $autoplayToSlide = intval($autoplayfinish[0]) * $count;
                    }
                    break;
            }
        }

        $stopautoplay = NextendParse::parse($this->_sliderParams->get('stopautoplay', '1|*|1|*|1'));
        $resumeautoplay = NextendParse::parse($this->_sliderParams->get('resumeautoplay', '0|*|1|*|0'));
        if(!isset($resumeautoplay[2])) $resumeautoplay[2] = 0;
        
        $p['autoplay'] =  intval($autoplay[0]);
        $p['autoplayConfig'] = array(
            'duration' => intval($autoplay[1]),
            'counter' => 0,
            'autoplayToSlide' => intval($autoplayToSlide),
            'stopautoplay' => array(
                'click' => intval($stopautoplay[0]),
                'mouseenter' => intval($stopautoplay[1]),
                'slideplaying' =>intval($stopautoplay[2])
            ),
            'resumeautoplay' => array(
                'mouseleave' => intval($resumeautoplay[0]),
                'slideplayed' => intval($resumeautoplay[1]),
                'slidechanged' => intval($resumeautoplay[2])
            )
        );

        $responsive = NextendParse::parse($this->_sliderParams->get('responsive', '0|*|0'));
        $p['responsive'] = array(
            'downscale' => intval($responsive[0]),
            'upscale' => intval($responsive[1]),
            'maxwidth' => intval($this->_sliderParams->get('simpleresponsivemaxwidth', 3000))
        );
        
        $controls = NextendParse::parse($this->_sliderParams->get('controls', '0|*|0|*|0'));
        if(!isset($controls[2])) $controls[2] = 0;
        $p['controls'] = array(
            'scroll' => intval($controls[0]),
            'touch' => $controls[1],
            'keyboard' => intval($controls[2])
        );
        $p['blockrightclick'] = intval($this->_sliderParams->get('blockrightclick', 0));
        
        return $p;
    }
    
    function parseSlider($slider){
        return $slider;
    }

    function addCSS() {
        $id = $this->getId();

        nextendimport('nextend.css.css');
        $css = NextendCss::getInstance();
        $css->createGroup($id);
        $css->enableLess($id);
        $css->addLessImportDir(NEXTEND_SMART_SLIDER2_ASSETS . 'less' . DIRECTORY_SEPARATOR, $id);
        $data = & $this->_data;
        $slider = & $this->_slider;
        $sliderParams = & $this->_sliderParams;
        $size = NextendParse::parse($sliderParams->get('size'));
        $context = array(
            'id' => '~"#' . $this->getId() . '"',
            'width' => $size[0] . 'px',
            'height' => $size[1] . 'px',
            'canvas' => intval($size[2]),
            'count' => count($this->_slides),
            'margin' => NextendParse::parseUnit($sliderParams->get('margin'), ' ')
        );
        
        if($this->_backend){
            $context['margin'] = '0px 0px 0px 0px';
        }

        nextendimport('nextend.parse.font');
        $fonts = 0;
        foreach (NextendSmartSliderFontSettings::getAll($this->_sliderid) AS $k => $v) {
            preg_match('/sliderfont(custom)?([0-9]*)$/', $k, $matches);
            if (count($matches)) {
                $context['font' . $fonts] = '~".' . $matches[0] . '"';
                
                if(json_decode($v)===null) $v = base64_decode($v);
                
                $font = new NextendParseFont($v);
                $context['font' . $fonts . 'text'] = '";' . $font->printTab() . '"';
                $font->mixinTab('Link');
                $context['font' . $fonts . 'link'] = '";' . $font->printTab('Link') . '"';
                $font->mixinTab('Link:Hover', 'Link');
                $context['font' . $fonts . 'hover'] = '";' . $font->printTab('Link:Hover') . '"';
                $fonts++;
            }
        }
        $context['fonts'] = $fonts;

        include($this->_typePath . 'context.php');
        $css->addCssFile(array(
            $this->getId(),
            $this->_typePath . 'style.less',
            $context
        ), $this->getId());
        $css->generateCSS($this->getId());
        
        if(strpos($context['margin'], '%')){
			$m = explode('% ', $context['margin']);
			$m[1] = $m[1]/100*intval($context['width']);
			$m[3] = $m[3]/100*intval($context['width']);
			$m[0] = $m[0]/100*intval($context['height']);
			$m[2] = $m[2]/100*intval($context['height']);
		}else{
			$m = explode('px ', $context['margin']);
		}
		
		$addcss = (array)NextendParse::parse(NextendSmartSliderSettings::get('externalcssfile'));
		if($this->_backend && count($addcss)){
			foreach($addcss as $cssfile)
			{
				$css->addCssFile($cssfile);
			}
		}
		
        return array(intval($context['width']),intval($context['height']), $m[0]+$m[2], $m[1]+$m[3]);
    }

    function addJs() {

        nextendimport('nextend.javascript.javascript');
        nextendimport('nextend.css.css');
        $data = & $this->_data;
        $js = NextendJavascript::getInstance();
        $css = NextendCss::getInstance();

        $js->loadLibrary('modernizr');
        $js->addJsAssetsFile('class.js');
        $js->loadLibrary('jquery');
        
        $js->addLibraryJsLibraryFile('jquery', 'jquery.waitforimages.js');

        $controls = NextendParse::parse($this->_sliderParams->get('controls', '0|*|0'));

        if($controls[0]){
            $js->addLibraryJsLibraryFile('jquery', 'jquery.mousewheel.js');
        }
        if($controls[1]){
            $js->addLibraryJsLibraryFile('jquery', 'jquery.touchSwipe.js');
        }
        $js->addLibraryJsLibraryFile('jquery', 'easing.js');
        $js->addLibraryJsLibraryFile('jquery', 'jquery.transit.js');


        $js->addLibraryJsFile('jquery', NEXTEND_SMART_SLIDER2_ASSETS . 'js' . DIRECTORY_SEPARATOR . 'animationbase.js');
        $js->addLibraryJsFile('jquery', NEXTEND_SMART_SLIDER2_ASSETS . 'js' . DIRECTORY_SEPARATOR . 'smartsliderbase.js');
        $js->addLibraryJsFile('jquery', NEXTEND_SMART_SLIDER2_ASSETS . 'js' . DIRECTORY_SEPARATOR . 'mainslider.js');
        $js->addLibraryJsFile('jquery', NEXTEND_SMART_SLIDER2_ASSETS . 'js' . DIRECTORY_SEPARATOR . 'layers.js');

        $js->addLibraryJsFile('jquery', NEXTEND_SMART_SLIDER2_ASSETS . 'js' . DIRECTORY_SEPARATOR . 'motions' . DIRECTORY_SEPARATOR . 'no.js');
        $js->addLibraryJsFile('jquery', NEXTEND_SMART_SLIDER2_ASSETS . 'js' . DIRECTORY_SEPARATOR . 'motions' . DIRECTORY_SEPARATOR . 'fade.js');

        $js->addLibraryJsFile('jquery', NEXTEND_SMART_SLIDER2_ASSETS . 'js' . DIRECTORY_SEPARATOR . 'motions' . DIRECTORY_SEPARATOR . 'slide.js');

        $js->addLibraryJsFile('jquery', NEXTEND_SMART_SLIDER2_ASSETS .  'js' . DIRECTORY_SEPARATOR . 'motions' . DIRECTORY_SEPARATOR . 'transit.js');
    }

}