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;
|
||
|
}
|
||
|
}
|