183 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			183 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace Nextend\SmartSlider3\SliderManager;
 | 
						|
 | 
						|
use Exception;
 | 
						|
use Nextend\Framework\Asset\AssetManager;
 | 
						|
use Nextend\Framework\Pattern\MVCHelperTrait;
 | 
						|
use Nextend\Framework\Translation\Translation;
 | 
						|
use Nextend\SmartSlider3\Application\Model\ModelSliders;
 | 
						|
use Nextend\SmartSlider3\Application\Model\ModelSlidersXRef;
 | 
						|
use Nextend\SmartSlider3\Slider\Cache\CacheSlider;
 | 
						|
use Nextend\SmartSlider3\Slider\Slider;
 | 
						|
 | 
						|
class SliderManager {
 | 
						|
 | 
						|
    use MVCHelperTrait;
 | 
						|
 | 
						|
    protected $isAdmin;
 | 
						|
 | 
						|
    protected $hasError = false;
 | 
						|
 | 
						|
    protected $displayWhenEmpty = false;
 | 
						|
 | 
						|
    protected $usage = 'Unknown';
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var Slider
 | 
						|
     */
 | 
						|
    public $slider;
 | 
						|
 | 
						|
    public $nextCacheRefresh;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var ModelSlidersXRef
 | 
						|
     */
 | 
						|
    private $xref;
 | 
						|
 | 
						|
    /**
 | 
						|
     *
 | 
						|
     * @param MVCHelperTrait $MVCHelper
 | 
						|
     * @param                $sliderIDorAlias
 | 
						|
     * @param                $isAdmin
 | 
						|
     * @param array          $parameters
 | 
						|
     */
 | 
						|
    public function __construct($MVCHelper, $sliderIDorAlias, $isAdmin = false, $parameters = array()) {
 | 
						|
 | 
						|
        $this->setMVCHelper($MVCHelper);
 | 
						|
 | 
						|
        $this->isAdmin = $isAdmin;
 | 
						|
 | 
						|
        $sliderID = false;
 | 
						|
 | 
						|
        $model = new ModelSliders($this);
 | 
						|
        if (!is_numeric($sliderIDorAlias)) {
 | 
						|
            $slider = $model->getByAlias($sliderIDorAlias);
 | 
						|
            if ($slider) {
 | 
						|
                $sliderID = intval($slider['id']);
 | 
						|
            }
 | 
						|
        } else {
 | 
						|
            $sliderID = intval($sliderIDorAlias);
 | 
						|
        }
 | 
						|
 | 
						|
        if ($sliderID) {
 | 
						|
            $this->init($sliderID, $parameters);
 | 
						|
            $this->xref = new ModelSlidersXRef($model);
 | 
						|
 | 
						|
            AssetManager::addCachedGroup($this->slider->cacheId);
 | 
						|
        } else {
 | 
						|
            $this->hasError = true;
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    protected function init($sliderID, $parameters) {
 | 
						|
        $this->slider = new Slider($this->MVCHelper, $sliderID, $parameters, $this->isAdmin);
 | 
						|
    }
 | 
						|
 | 
						|
    public function setUsage($usage) {
 | 
						|
 | 
						|
        $this->usage = $usage;
 | 
						|
 | 
						|
        if ($usage === 'iframe') {
 | 
						|
            $this->slider->isFrame = true;
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @return Slider
 | 
						|
     */
 | 
						|
    public function getSlider() {
 | 
						|
        return $this->slider;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @param $cache
 | 
						|
     *
 | 
						|
     * @return string contains already escaped data
 | 
						|
     */
 | 
						|
    public function render($cache = false) {
 | 
						|
        if ($this->hasError) {
 | 
						|
            return '';
 | 
						|
        }
 | 
						|
 | 
						|
        try {
 | 
						|
            if (!$cache) {
 | 
						|
                $this->slider->initAll();
 | 
						|
                if (($this->xref->isSliderAvailableInAnyGroups($this->slider->sliderId) || $this->isAdmin) && ($this->slider->hasSlides() || $this->displayWhenEmpty)) {
 | 
						|
 | 
						|
                    return $this->slider->render();
 | 
						|
                }
 | 
						|
 | 
						|
                return '';
 | 
						|
            }
 | 
						|
 | 
						|
            return $this->slider->addCMSFunctions($this->cacheSlider());
 | 
						|
        } catch (Exception $e) {
 | 
						|
            return '';
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    private function cacheSlider() {
 | 
						|
        $cache = new CacheSlider($this->slider->cacheId, array(
 | 
						|
            'slider' => $this->slider
 | 
						|
        ));
 | 
						|
        $key   = 'slider' . Translation::getCurrentLocale();
 | 
						|
        if ($this->slider->isFrame) {
 | 
						|
            $key .= 'iframe';
 | 
						|
        }
 | 
						|
 | 
						|
        $cachedSlider = $cache->makeCache($key, '', array(
 | 
						|
            $this,
 | 
						|
            'renderCachedSlider'
 | 
						|
        ));
 | 
						|
 | 
						|
        $this->nextCacheRefresh = $cache->getData('nextCacheRefresh', false);
 | 
						|
 | 
						|
        if ($cachedSlider === false) {
 | 
						|
            return '<!--Smart Slider #' . $this->slider->sliderId . ' does NOT EXIST or has NO SLIDES!' . $this->usage . '-->';
 | 
						|
        }
 | 
						|
 | 
						|
        AssetManager::loadFromArray($cachedSlider['assets']);
 | 
						|
 | 
						|
        return $cachedSlider['html'];
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @return array|bool
 | 
						|
     * @throws Exception
 | 
						|
     */
 | 
						|
    public function renderCachedSlider() {
 | 
						|
 | 
						|
        AssetManager::createStack();
 | 
						|
 | 
						|
        $content = array();
 | 
						|
 | 
						|
        try {
 | 
						|
            $this->slider->initAll();
 | 
						|
 | 
						|
 | 
						|
            if (($this->xref->isSliderAvailableInAnyGroups($this->slider->sliderId) || $this->isAdmin) && $this->slider->hasSlides()) {
 | 
						|
 | 
						|
                $content['html'] = $this->slider->render();
 | 
						|
            } else {
 | 
						|
                $content['html'] = '';
 | 
						|
            }
 | 
						|
        } catch (Exception $exception) {
 | 
						|
            $content['html'] = false;
 | 
						|
        }
 | 
						|
 | 
						|
        $assets = AssetManager::removeStack();
 | 
						|
 | 
						|
        if ($content['html'] === false) {
 | 
						|
            return false;
 | 
						|
        }
 | 
						|
 | 
						|
        $content['assets'] = $assets;
 | 
						|
 | 
						|
        return $content;
 | 
						|
    }
 | 
						|
 | 
						|
    public function allowDisplayWhenEmpty() {
 | 
						|
        $this->displayWhenEmpty = true;
 | 
						|
    }
 | 
						|
} |