first
This commit is contained in:
@ -0,0 +1,480 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace Nextend\SmartSlider3\Application\Model;
|
||||
|
||||
|
||||
use Exception;
|
||||
use Nextend\Framework\Data\Data;
|
||||
use Nextend\Framework\Database\Database;
|
||||
use Nextend\Framework\Form\Container\ContainerTable;
|
||||
use Nextend\Framework\Form\ContainerInterface;
|
||||
use Nextend\Framework\Form\Element\Button\ButtonRecordViewer;
|
||||
use Nextend\Framework\Form\Element\Text\Number;
|
||||
use Nextend\Framework\Misc\Base64;
|
||||
use Nextend\Framework\Model\AbstractModelTable;
|
||||
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroup;
|
||||
use Nextend\SmartSlider3\Generator\GeneratorFactory;
|
||||
use Nextend\SmartSlider3\SlideBuilder\BuilderComponentCol;
|
||||
use Nextend\SmartSlider3\SlideBuilder\BuilderComponentLayer;
|
||||
use Nextend\SmartSlider3\SlideBuilder\BuilderComponentRow;
|
||||
use Nextend\SmartSlider3\SlideBuilder\BuilderComponentSlide;
|
||||
|
||||
class ModelGenerator extends AbstractModelTable {
|
||||
|
||||
protected function createConnectorTable() {
|
||||
|
||||
return Database::getTable('nextend2_smartslider3_generators');
|
||||
}
|
||||
|
||||
private static function getLayout($type) {
|
||||
|
||||
$slideBuilder = new BuilderComponentSlide();
|
||||
|
||||
switch ($type) {
|
||||
case 'image':
|
||||
$slideBuilder->set(array(
|
||||
'title' => "{title}",
|
||||
'thumbnail' => "{thumbnail}",
|
||||
'backgroundImage' => "{image}",
|
||||
'background-type' => 'image'
|
||||
));
|
||||
break;
|
||||
|
||||
case 'image_extended':
|
||||
$slideBuilder->set(array(
|
||||
'title' => "{title}",
|
||||
'thumbnail' => "{thumbnail}",
|
||||
'backgroundImage' => "{image}",
|
||||
'background-type' => 'image'
|
||||
));
|
||||
|
||||
$slideBuilder->content->set(array(
|
||||
'verticalalign' => 'flex-end',
|
||||
'desktopportraitpadding' => '0|*|0|*|0|*|0|*|px'
|
||||
));
|
||||
$row = new BuilderComponentRow($slideBuilder->content);
|
||||
$row->set(array(
|
||||
'bgcolor' => '00000080',
|
||||
));
|
||||
$col = new BuilderComponentCol($row, '1');
|
||||
$col->set(array(
|
||||
'desktopportraitinneralign' => "left"
|
||||
));
|
||||
$heading = new BuilderComponentLayer($col, 'heading');
|
||||
$heading->set(array(
|
||||
'desktopportraitselfalign' => 'inherit'
|
||||
));
|
||||
$heading->item->set(array(
|
||||
'heading' => '{title/1}',
|
||||
));
|
||||
break;
|
||||
|
||||
case 'article':
|
||||
$slideBuilder->set(array(
|
||||
'title' => "{title}",
|
||||
'description' => '{description}',
|
||||
'href' => '{url}',
|
||||
'thumbnail' => "{thumbnail}",
|
||||
'backgroundImage' => "{image}",
|
||||
'background-type' => 'image'
|
||||
));
|
||||
|
||||
$slideBuilder->content->set(array(
|
||||
'verticalalign' => 'flex-end',
|
||||
'desktopportraitpadding' => '0|*|0|*|0|*|0|*|px',
|
||||
));
|
||||
$row = new BuilderComponentRow($slideBuilder->content);
|
||||
$row->set(array(
|
||||
'bgcolor' => '00000080',
|
||||
));
|
||||
$col = new BuilderComponentCol($row, '1');
|
||||
$col->set(array(
|
||||
'desktopportraitinneralign' => "left",
|
||||
));
|
||||
$heading = new BuilderComponentLayer($col, 'heading');
|
||||
$heading->set(array(
|
||||
'desktopportraitselfalign' => 'inherit'
|
||||
));
|
||||
$heading->item->set(array(
|
||||
'heading' => '{title}',
|
||||
'font' => Base64::encode('{"data":[{"extra":"","color":"ffffffff","size":"36||px","tshadow":"0|*|0|*|0|*|000000ff","afont":"Roboto,Arial","lineheight":"1.5","bold":0,"italic":0,"underline":0,"align":"inherit","letterspacing":"normal","wordspacing":"normal","texttransform":"none"},{"extra":""}]}')
|
||||
));
|
||||
break;
|
||||
|
||||
case 'product':
|
||||
$slideBuilder->set(array(
|
||||
'title' => "{title}",
|
||||
'description' => '{description}',
|
||||
'href' => '{url}',
|
||||
'thumbnail' => "{thumbnail}",
|
||||
'backgroundImage' => "{image}",
|
||||
'background-type' => 'image'
|
||||
));
|
||||
|
||||
$slideBuilder->content->set(array(
|
||||
'verticalalign' => 'flex-end',
|
||||
'desktopportraitpadding' => '0|*|0|*|0|*|0|*|px',
|
||||
));
|
||||
$row = new BuilderComponentRow($slideBuilder->content);
|
||||
$row->set(array(
|
||||
'bgcolor' => '00000080',
|
||||
));
|
||||
$col = new BuilderComponentCol($row, '1/2');
|
||||
$col->set(array(
|
||||
'desktopportraitinneralign' => "left",
|
||||
));
|
||||
$heading = new BuilderComponentLayer($col, 'heading');
|
||||
$heading->set(array(
|
||||
'desktopportraitselfalign' => 'inherit'
|
||||
));
|
||||
$heading->item->set(array(
|
||||
'heading' => '{title}',
|
||||
'font' => Base64::encode('{"data":[{"extra":"","color":"ffffffff","size":"36||px","tshadow":"0|*|0|*|0|*|000000ff","afont":"Roboto,Arial","lineheight":"1.5","bold":0,"italic":0,"underline":0,"align":"inherit","letterspacing":"normal","wordspacing":"normal","texttransform":"none"},{"extra":""}]}'),
|
||||
));
|
||||
$col2 = new BuilderComponentCol($row, '1/2');
|
||||
$col2->set(array(
|
||||
'desktopportraitinneralign' => "right",
|
||||
));
|
||||
$text = new BuilderComponentLayer($col2, 'text');
|
||||
$text->set(array(
|
||||
'desktopportraitselfalign' => 'inherit'
|
||||
));
|
||||
$text->item->set(array(
|
||||
'content' => '{price}',
|
||||
'font' => Base64::encode('{"data":[{"extra":"","color":"ffffffff","size":"36||px","tshadow":"0|*|0|*|0|*|000000ff","afont":"Roboto,Arial","lineheight":"1.5","bold":0,"italic":0,"underline":0,"align":"inherit","letterspacing":"normal","wordspacing":"normal","texttransform":"none"},{"extra":""}]}'),
|
||||
));
|
||||
|
||||
break;
|
||||
|
||||
case 'event':
|
||||
$slideBuilder->set(array(
|
||||
'title' => "{title}",
|
||||
'description' => '{description}',
|
||||
'href' => '{url}',
|
||||
'thumbnail' => "{thumbnail}",
|
||||
'backgroundImage' => "{image}",
|
||||
'background-type' => 'image'
|
||||
));
|
||||
$slideBuilder->content->set(array(
|
||||
'verticalalign' => 'flex-end',
|
||||
'desktopportraitpadding' => '0|*|0|*|0|*|0|*|px',
|
||||
));
|
||||
$row = new BuilderComponentRow($slideBuilder->content);
|
||||
$row->set(array(
|
||||
'bgcolor' => '00000080',
|
||||
));
|
||||
$col = new BuilderComponentCol($row, '1/2');
|
||||
$col->set(array(
|
||||
'desktopportraitinneralign' => "left",
|
||||
));
|
||||
$heading = new BuilderComponentLayer($col, 'heading');
|
||||
$heading->set(array(
|
||||
'desktopportraitselfalign' => 'inherit'
|
||||
));
|
||||
$heading->item->set(array(
|
||||
'heading' => '{title}',
|
||||
'font' => Base64::encode('{"data":[{"extra":"","color":"ffffffff","size":"36||px","tshadow":"0|*|0|*|0|*|000000ff","afont":"Roboto,Arial","lineheight":"1.5","bold":0,"italic":0,"underline":0,"align":"inherit","letterspacing":"normal","wordspacing":"normal","texttransform":"none"},{"extra":""}]}'),
|
||||
));
|
||||
$col2 = new BuilderComponentCol($row, '1/2');
|
||||
$col2->set(array(
|
||||
'desktopportraitinneralign' => "right",
|
||||
));
|
||||
$heading = new BuilderComponentLayer($col2, 'heading');
|
||||
$heading->set(array(
|
||||
'desktopportraitselfalign' => 'inherit'
|
||||
));
|
||||
$heading->item->set(array(
|
||||
'heading' => '{start_date}',
|
||||
'font' => Base64::encode('{"data":[{"extra":"","color":"ffffffff","size":"36||px","tshadow":"0|*|0|*|0|*|000000ff","afont":"Roboto,Arial","lineheight":"1.5","bold":0,"italic":0,"underline":0,"align":"inherit","letterspacing":"normal","wordspacing":"normal","texttransform":"none"},{"extra":""}]}'),
|
||||
));
|
||||
|
||||
break;
|
||||
|
||||
case 'youtube':
|
||||
$slideBuilder->set(array(
|
||||
'title' => "{title}",
|
||||
'description' => '{description}',
|
||||
'thumbnail' => "{thumbnail}",
|
||||
'backgroundColor' => "ffffff00",
|
||||
'background-type' => 'color',
|
||||
'desktopportraitpadding' => '0|*|0|*|0|*|0|*|px',
|
||||
));
|
||||
|
||||
$youtube = new BuilderComponentLayer($slideBuilder->content, 'youtube');
|
||||
$youtube->item->set(array(
|
||||
"youtubeurl" => "{video_url}",
|
||||
));
|
||||
break;
|
||||
|
||||
case 'vimeo':
|
||||
$slideBuilder->set(array(
|
||||
'title' => "{title}",
|
||||
'description' => '{description}',
|
||||
'thumbnail' => "{image200x150/1}",
|
||||
'backgroundColor' => "ffffff00",
|
||||
'background-type' => 'color',
|
||||
'desktopportraitpadding' => '0|*|0|*|0|*|0|*|px',
|
||||
));
|
||||
|
||||
$vimeo = new BuilderComponentLayer($slideBuilder->content, 'vimeo');
|
||||
$vimeo->item->set(array(
|
||||
"vimeourl" => "{url}",
|
||||
'image' => '{image}'
|
||||
));
|
||||
|
||||
break;
|
||||
|
||||
case 'video_mp4':
|
||||
$slideBuilder->set(array(
|
||||
'title' => "{name}",
|
||||
'desktopportraitpadding' => '0|*|0|*|0|*|0|*|px',
|
||||
));
|
||||
|
||||
$video = new BuilderComponentLayer($slideBuilder->content, 'video');
|
||||
$video->item->set(array(
|
||||
"video_mp4" => "{video}",
|
||||
));
|
||||
break;
|
||||
|
||||
case 'social_post':
|
||||
$slideBuilder->set(array(
|
||||
'title' => "{title}",
|
||||
'description' => '{description}',
|
||||
'href' => '{url}',
|
||||
'thumbnail' => "{author_image}",
|
||||
'backgroundColor' => "ffffff00",
|
||||
'background-type' => 'color',
|
||||
));
|
||||
|
||||
$slideBuilder->content->set(array(
|
||||
'verticalalign' => 'center',
|
||||
'desktopportraitpadding' => '0|*|0|*|0|*|0|*|px',
|
||||
'desktopportraitmargin' => '0|*|0|*|0|*|0|*|px'
|
||||
));
|
||||
|
||||
$row = new BuilderComponentRow($slideBuilder->content);
|
||||
$row->set(array(
|
||||
'bgcolor' => '00000080',
|
||||
'desktopportraitpadding' => '10|*|10|*|10|*|10|*|px',
|
||||
'desktopportraitmargin' => '0|*|0|*|0|*|0|*|px'
|
||||
));
|
||||
$col = new BuilderComponentCol($row, '1');
|
||||
$col->set(array(
|
||||
'desktopportraitinneralign' => "left",
|
||||
'desktopportraitmargin' => '0|*|0|*|0|*|0|*|px',
|
||||
'desktopportraitpadding' => '10|*|10|*|10|*|10|*|px'
|
||||
));
|
||||
$heading = new BuilderComponentLayer($col, 'heading');
|
||||
$heading->set(array(
|
||||
'desktopportraitmargin' => '0|*|0|*|0|*|0|*|px',
|
||||
'desktopportraitselfalign' => 'inherit'
|
||||
));
|
||||
$heading->item->set(array(
|
||||
'heading' => '{message}',
|
||||
));
|
||||
$image = new BuilderComponentLayer($col, 'image');
|
||||
$image->set(array(
|
||||
'desktopportraitmargin' => '0|*|0|*|0|*|0|*|px',
|
||||
'desktopportraitselfalign' => 'inherit'
|
||||
));
|
||||
$image->item->set(array(
|
||||
'image' => '{author_image}',
|
||||
));
|
||||
$button = new BuilderComponentLayer($col, 'button');
|
||||
$button->set(array(
|
||||
'desktopportraitmargin' => '0|*|0|*|0|*|0|*|px',
|
||||
'desktopportraitselfalign' => 'inherit'
|
||||
));
|
||||
$button->item->set(array(
|
||||
'content' => '{url_label}',
|
||||
));
|
||||
|
||||
break;
|
||||
|
||||
case 'text':
|
||||
$slideBuilder->set(array(
|
||||
'title' => "{title}"
|
||||
));
|
||||
$slideBuilder->content->set(array(
|
||||
'verticalalign' => 'flex-end',
|
||||
'desktopportraitpadding' => '0|*|0|*|0|*|0|*|px',
|
||||
));
|
||||
$row = new BuilderComponentRow($slideBuilder->content);
|
||||
$row->set(array(
|
||||
'bgcolor' => '00000080',
|
||||
));
|
||||
$col = new BuilderComponentCol($row, '1');
|
||||
$col->set(array(
|
||||
'desktopportraitinneralign' => "left",
|
||||
));
|
||||
$heading = new BuilderComponentLayer($col, 'heading');
|
||||
$heading->set(array(
|
||||
'desktopportraitselfalign' => 'inherit'
|
||||
));
|
||||
$heading->item->set(array(
|
||||
'heading' => '{title}',
|
||||
'font' => Base64::encode('{"data":[{"extra":"","color":"ffffffff","size":"36||px","tshadow":"0|*|0|*|0|*|000000ff","afont":"Roboto,Arial","lineheight":"1.5","bold":0,"italic":0,"underline":0,"align":"inherit","letterspacing":"normal","wordspacing":"normal","texttransform":"none"},{"extra":""}]}')
|
||||
));
|
||||
break;
|
||||
|
||||
case 'text_generator':
|
||||
$slideBuilder->set(array(
|
||||
'title' => "{variable1}"
|
||||
));
|
||||
$slideBuilder->content->set(array(
|
||||
'verticalalign' => 'flex-end',
|
||||
'desktopportraitpadding' => '0|*|0|*|0|*|0|*|px',
|
||||
));
|
||||
$row = new BuilderComponentRow($slideBuilder->content);
|
||||
$row->set(array(
|
||||
'bgcolor' => '00000080',
|
||||
));
|
||||
$col = new BuilderComponentCol($row, '1');
|
||||
$col->set(array(
|
||||
'desktopportraitinneralign' => "left",
|
||||
));
|
||||
$heading = new BuilderComponentLayer($col, 'heading');
|
||||
$heading->set(array(
|
||||
'desktopportraitselfalign' => 'inherit'
|
||||
));
|
||||
$heading->item->set(array(
|
||||
'heading' => '{variable1}',
|
||||
'font' => Base64::encode('{"data":[{"extra":"","color":"ffffffff","size":"36||px","tshadow":"0|*|0|*|0|*|000000ff","afont":"Roboto,Arial","lineheight":"1.5","bold":0,"italic":0,"underline":0,"align":"inherit","letterspacing":"normal","wordspacing":"normal","texttransform":"none"},{"extra":""}]}')
|
||||
));
|
||||
break;
|
||||
|
||||
default:
|
||||
return $slideBuilder->set(array(
|
||||
'title' => "title",
|
||||
'description' => '',
|
||||
'backgroundColor' => "ffffff00",
|
||||
'background-type' => 'color',
|
||||
));
|
||||
}
|
||||
|
||||
return $slideBuilder->getData();
|
||||
}
|
||||
|
||||
public function createGenerator($sliderId, $params) {
|
||||
|
||||
$data = new Data($params);
|
||||
|
||||
unset($params['type']);
|
||||
unset($params['group']);
|
||||
unset($params['record-slides']);
|
||||
|
||||
try {
|
||||
$generatorId = $this->_create($data->get('type'), $data->get('group'), json_encode($params));
|
||||
|
||||
|
||||
$source = $this->getGeneratorGroup($data->get('group'))
|
||||
->getSource($data->get('type'));
|
||||
|
||||
$slideData = self::getLayout($source->getLayout());
|
||||
|
||||
$slideData['record-slides'] = intval($data->get('record-slides', 5));
|
||||
|
||||
$slidesModel = new ModelSlides($this);
|
||||
$slideId = $slidesModel->createSlideWithGenerator($sliderId, $generatorId, $slideData);
|
||||
|
||||
return array(
|
||||
'slideId' => $slideId,
|
||||
'generatorId' => $generatorId
|
||||
);
|
||||
} catch (Exception $e) {
|
||||
throw new Exception($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ContainerInterface $container
|
||||
*/
|
||||
public function renderFields($container) {
|
||||
|
||||
$settings = new ContainerTable($container, 'generator', n2_('Generator settings'));
|
||||
|
||||
$generatorRow = $settings->createRow('generator-row');
|
||||
|
||||
new Number($generatorRow, 'record-slides', n2_('Slides'), 5, array(
|
||||
'unit' => n2_x('slides', 'Unit'),
|
||||
'wide' => 3,
|
||||
));
|
||||
|
||||
new Number($generatorRow, 'cache-expiration', n2_('Cache expiration'), 24, array(
|
||||
'wide' => 3,
|
||||
'unit' => n2_('Hours')
|
||||
));
|
||||
|
||||
new ButtonRecordViewer($generatorRow, 'record-viewer');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $type
|
||||
*
|
||||
* @return AbstractGeneratorGroup
|
||||
*/
|
||||
public function getGeneratorGroup($type) {
|
||||
|
||||
return GeneratorFactory::getGenerator($type);
|
||||
}
|
||||
|
||||
public function get($id) {
|
||||
return Database::queryRow("SELECT * FROM " . $this->getTableName() . " WHERE id = :id", array(
|
||||
":id" => $id
|
||||
));
|
||||
}
|
||||
|
||||
public function import($generator) {
|
||||
$this->table->insert(array(
|
||||
'type' => $generator['type'],
|
||||
'group' => $generator['group'],
|
||||
'params' => $generator['params']
|
||||
));
|
||||
|
||||
return $this->table->insertId();
|
||||
}
|
||||
|
||||
private function _create($type, $group, $params) {
|
||||
$this->table->insert(array(
|
||||
'type' => $type,
|
||||
'group' => $group,
|
||||
'params' => $params
|
||||
));
|
||||
|
||||
return $this->table->insertId();
|
||||
}
|
||||
|
||||
public function save($generatorId, $params) {
|
||||
|
||||
$this->table->update(array(
|
||||
'params' => json_encode($params)
|
||||
), array('id' => $generatorId));
|
||||
|
||||
return $generatorId;
|
||||
}
|
||||
|
||||
public function delete($id) {
|
||||
$this->table->deleteByAttributes(array(
|
||||
"id" => intval($id)
|
||||
));
|
||||
}
|
||||
|
||||
public function duplicate($id) {
|
||||
$generatorRow = $this->get($id);
|
||||
$generatorId = $this->_create($generatorRow['type'], $generatorRow['group'], $generatorRow['params']);
|
||||
|
||||
return $generatorId;
|
||||
}
|
||||
|
||||
public function getSliderId($generatorId) {
|
||||
|
||||
$slidesModal = new ModelSlides($this);
|
||||
$slideData = Database::queryRow("SELECT slider FROM " . $slidesModal->getTableName() . " WHERE generator_id = :id", array(
|
||||
":id" => $generatorId
|
||||
));
|
||||
|
||||
return $slideData['slider'];
|
||||
}
|
||||
}
|
@ -0,0 +1,105 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace Nextend\SmartSlider3\Application\Model;
|
||||
|
||||
|
||||
use Nextend\Framework\Model\StorageSectionManager;
|
||||
use Nextend\Framework\Notification\Notification;
|
||||
use Nextend\Framework\Pattern\SingletonTrait;
|
||||
use Nextend\SmartSlider3\SmartSlider3Info;
|
||||
|
||||
/**
|
||||
* Class ModelLicense
|
||||
*
|
||||
* @package Nextend\SmartSlider3\Application\Model
|
||||
*
|
||||
*/
|
||||
class ModelLicense {
|
||||
|
||||
use SingletonTrait;
|
||||
|
||||
private $key;
|
||||
|
||||
public function __construct() {
|
||||
if (defined('SMART_SLIDER_LICENSE')) {
|
||||
$this->key = SMART_SLIDER_LICENSE;
|
||||
} else {
|
||||
$this->key = StorageSectionManager::getStorage('smartslider')
|
||||
->get('license', 'key');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function hasKey() {
|
||||
return !empty($this->key);
|
||||
}
|
||||
|
||||
public function maybeActiveLazy() {
|
||||
$lastActive = StorageSectionManager::getStorage('smartslider')
|
||||
->get('license', 'isActive');
|
||||
|
||||
return $lastActive > 0;
|
||||
|
||||
}
|
||||
|
||||
public function maybeActive() {
|
||||
$lastActive = StorageSectionManager::getStorage('smartslider')
|
||||
->get('license', 'isActive');
|
||||
if ($lastActive && $lastActive > strtotime("-1 week")) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getKey() {
|
||||
return $this->key;
|
||||
}
|
||||
|
||||
public function setKey($licenseKey) {
|
||||
StorageSectionManager::getStorage('smartslider')
|
||||
->set('license', 'key', $licenseKey);
|
||||
StorageSectionManager::getStorage('smartslider')
|
||||
->set('license', 'isActive', time());
|
||||
if ($licenseKey == '') {
|
||||
StorageSectionManager::getStorage('smartslider')
|
||||
->set('license', 'isActive', '0');
|
||||
}
|
||||
$this->key = $licenseKey;
|
||||
|
||||
}
|
||||
|
||||
public function checkKey($license, $action = 'licensecheck') {
|
||||
return 'OK';
|
||||
|
||||
}
|
||||
|
||||
public function isActive($cacheAccepted = true) {
|
||||
if ($cacheAccepted && $this->maybeActive()) {
|
||||
return 'OK';
|
||||
}
|
||||
$status = $this->checkKey($this->key);
|
||||
if ($this->hasKey() && $status == 'OK') {
|
||||
StorageSectionManager::getStorage('smartslider')
|
||||
->set('license', 'isActive', time());
|
||||
|
||||
return $status;
|
||||
}
|
||||
StorageSectionManager::getStorage('smartslider')
|
||||
->set('license', 'isActive', '0');
|
||||
|
||||
return $status;
|
||||
}
|
||||
|
||||
public function deAuthorize() {
|
||||
if ($this->hasKey()) {
|
||||
$this->setKey('');
|
||||
Notification::notice(n2_('Smart Slider 3 deactivated on this site!'));
|
||||
|
||||
return 'OK';
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace Nextend\SmartSlider3\Application\Model;
|
||||
|
||||
|
||||
use Nextend\Framework\Model\AbstractModel;
|
||||
use Nextend\Framework\Model\Section;
|
||||
use Nextend\Framework\Request\Request;
|
||||
use Nextend\SmartSlider3\Application\Helper\HelperSliderChanged;
|
||||
use Nextend\SmartSlider3\Settings;
|
||||
|
||||
class ModelSettings extends AbstractModel {
|
||||
|
||||
public function save() {
|
||||
$namespace = Request::$REQUEST->getCmd('namespace', 'default');
|
||||
$settings = Request::$REQUEST->getVar('settings');
|
||||
if ($namespace && $settings) {
|
||||
if ($namespace == 'default') $namespace = 'settings';
|
||||
if ($namespace == 'font' && Request::$REQUEST->getInt('sliderid')) {
|
||||
$namespace .= Request::$REQUEST->getInt('sliderid');
|
||||
|
||||
$helper = new HelperSliderChanged($this);
|
||||
$helper->setSliderChanged(Request::$REQUEST->getInt('sliderid'), 1);
|
||||
}
|
||||
|
||||
Settings::store($namespace, json_encode($settings));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function saveDefaults($defaults) {
|
||||
if (!empty($defaults)) {
|
||||
foreach ($defaults as $referenceKey => $value) {
|
||||
Section::set('smartslider', 'default', $referenceKey, $value);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
@ -0,0 +1,812 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace Nextend\SmartSlider3\Application\Model;
|
||||
|
||||
|
||||
use Exception;
|
||||
use Nextend\Framework\Cache\AbstractCache;
|
||||
use Nextend\Framework\Data\Data;
|
||||
use Nextend\Framework\Database\Database;
|
||||
use Nextend\Framework\Misc\Str;
|
||||
use Nextend\Framework\Model\AbstractModelTable;
|
||||
use Nextend\Framework\Notification\Notification;
|
||||
use Nextend\Framework\Platform\Platform;
|
||||
use Nextend\SmartSlider3\Application\Helper\HelperSliderChanged;
|
||||
use Nextend\SmartSlider3\Slider\Admin\AdminSlider;
|
||||
use Nextend\SmartSlider3\Slider\Slider;
|
||||
use Nextend\SmartSlider3\SmartSlider3Info;
|
||||
|
||||
class ModelSliders extends AbstractModelTable {
|
||||
|
||||
/**
|
||||
* @var ModelSlidersXRef
|
||||
*/
|
||||
private $xref;
|
||||
|
||||
private $sliderTitleLength = 200;
|
||||
|
||||
protected function createConnectorTable() {
|
||||
|
||||
$this->xref = new ModelSlidersXRef($this);
|
||||
|
||||
return Database::getTable('nextend2_smartslider3_sliders');
|
||||
}
|
||||
|
||||
public function get($id) {
|
||||
return Database::queryRow("SELECT * FROM " . $this->getTableName() . " WHERE id = :id", array(
|
||||
":id" => $id
|
||||
));
|
||||
}
|
||||
|
||||
public function getByAlias($alias) {
|
||||
return Database::queryRow("SELECT id FROM " . $this->getTableName() . " WHERE alias = :alias", array(
|
||||
":alias" => $alias
|
||||
));
|
||||
}
|
||||
|
||||
public function getWithThumbnail($id) {
|
||||
$slidesModel = new ModelSlides($this);
|
||||
|
||||
return Database::queryRow("SELECT sliders.*,xref.group_id, IF(sliders.thumbnail != '',sliders.thumbnail,(SELECT slides.thumbnail from " . $slidesModel->getTableName() . " AS slides WHERE slides.slider = sliders.id AND slides.published = 1 AND slides.generator_id = 0 AND slides.thumbnail NOT LIKE '' ORDER BY slides.first DESC, slides.ordering ASC LIMIT 1)) AS thumbnail,
|
||||
IF(sliders.type != 'group',
|
||||
(SELECT count(*) FROM " . $slidesModel->getTableName() . " AS slides2 WHERE slides2.slider = sliders.id GROUP BY slides2.slider),
|
||||
(SELECT count(*) FROM " . $this->xref->getTableName() . " AS xref2 WHERE xref2.group_id = sliders.id GROUP BY xref2.group_id)
|
||||
) AS slides
|
||||
FROM " . $this->getTableName() . " AS sliders
|
||||
LEFT JOIN " . $this->xref->getTableName() . " AS xref ON xref.slider_id = sliders.id
|
||||
WHERE sliders.id = :id", array(
|
||||
":id" => $id
|
||||
));
|
||||
}
|
||||
|
||||
public function invalidateCache() {
|
||||
Database::query("DELETE FROM `" . Database::parsePrefix('#__nextend2_section_storage') . "` WHERE `application` LIKE 'cache'");
|
||||
|
||||
Database::query("DELETE FROM `" . Database::parsePrefix('#__nextend2_section_storage') . "` WHERE `application` LIKE 'smartslider' AND `section` LIKE 'sliderChanged';");
|
||||
}
|
||||
|
||||
public function refreshCache($sliderid) {
|
||||
AbstractCache::clearGroup(Slider::getCacheId($sliderid));
|
||||
AbstractCache::clearGroup(AdminSlider::getCacheId($sliderid));
|
||||
$this->markChanged($sliderid);
|
||||
}
|
||||
|
||||
public function getSlidersCount($status = '*', $witGroup = false) {
|
||||
$wheres = array();
|
||||
$join = "";
|
||||
|
||||
if ($status !== '*') {
|
||||
$wheres[] = " WHERE _sliders.slider_status LIKE " . Database::quote($status);
|
||||
}
|
||||
|
||||
if ($witGroup) {
|
||||
$join = "LEFT JOIN " . $this->xref->getTableName() . " AS xref ON xref.slider_id = _sliders.id ";
|
||||
$wheres[] = "(xref.group_id IS NULL OR xref.group_id = 0)";
|
||||
}
|
||||
|
||||
$data = Database::queryRow("SELECT COUNT(*) AS sliders FROM " . $this->getTableName() . " as _sliders " . $join . " " . implode(' AND ', $wheres));
|
||||
|
||||
|
||||
if (!empty($data)) {
|
||||
return intval($data['sliders']);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
*/
|
||||
public function getAll($groupID = '*', $status = '*', $orderBy = 'ordering', $orderByDirection = 'ASC', $page = null, $limit = 'all') {
|
||||
$slidesModel = new ModelSlides($this);
|
||||
|
||||
if (empty($orderBy)) {
|
||||
$orderBy = 'ordering';
|
||||
}
|
||||
if (empty($orderByDirection)) {
|
||||
$orderByDirection = 'ASC';
|
||||
}
|
||||
|
||||
$_orderby = $orderBy . ' ' . $orderByDirection;
|
||||
$limitQuery = "";
|
||||
|
||||
$wheres = array();
|
||||
if ($groupID !== '*') {
|
||||
if ($groupID == 0) {
|
||||
$wheres[] = "(xref.group_id IS NULL OR xref.group_id = 0)";
|
||||
if ($page !== null && $limit != 'all') {
|
||||
$first = intval($page) * intval($limit);
|
||||
$limitQuery = "LIMIT " . $first . "," . intval($limit);
|
||||
}
|
||||
} else {
|
||||
if ($orderBy == 'ordering') {
|
||||
$_orderby = 'xref.' . $orderBy . ' ' . $orderByDirection;
|
||||
}
|
||||
|
||||
$wheres[] = "xref.group_id = '" . $groupID . "'";
|
||||
}
|
||||
}
|
||||
|
||||
if ($status !== '*') {
|
||||
$wheres[] = "sliders.slider_status LIKE " . Database::quote($status);
|
||||
}
|
||||
|
||||
|
||||
$sliders = Database::queryAll("
|
||||
SELECT sliders.*,
|
||||
IF(sliders.thumbnail != '',
|
||||
sliders.thumbnail,
|
||||
IF(sliders.type != 'group',
|
||||
(SELECT slides.thumbnail FROM " . $slidesModel->getTableName() . " AS slides WHERE slides.slider = sliders.id AND slides.published = 1 AND slides.generator_id = 0 AND slides.thumbnail NOT LIKE '' ORDER BY slides.first DESC, slides.ordering ASC LIMIT 1),
|
||||
''
|
||||
)
|
||||
) AS thumbnail,
|
||||
|
||||
IF(sliders.type != 'group',
|
||||
(SELECT count(*) FROM " . $slidesModel->getTableName() . " AS slides2 WHERE slides2.slider = sliders.id GROUP BY slides2.slider),
|
||||
(SELECT count(*) FROM " . $this->xref->getTableName() . " AS xref2 LEFT JOIN " . $this->getTableName() . " AS sliders2 ON sliders2.id = xref2.slider_id WHERE xref2.group_id = sliders.id AND sliders2.slider_status LIKE 'published' GROUP BY xref2.group_id)
|
||||
) AS slides
|
||||
FROM " . $this->getTableName() . " AS sliders
|
||||
LEFT JOIN " . $this->xref->getTableName() . " AS xref ON xref.slider_id = sliders.id
|
||||
WHERE " . implode(' AND ', $wheres) . "
|
||||
ORDER BY " . $_orderby . " " . $limitQuery);
|
||||
|
||||
|
||||
return $sliders;
|
||||
}
|
||||
|
||||
public function _getAll() {
|
||||
return Database::queryAll("SELECT sliders.* FROM " . $this->getTableName() . " AS sliders");
|
||||
}
|
||||
|
||||
public function getSearchResults($keyword = "") {
|
||||
$slidesModel = new ModelSlides($this);
|
||||
$wheres = array();
|
||||
$orderByExtra = "";
|
||||
$id = intval($keyword);
|
||||
if ($id > 0) {
|
||||
$wheres[] = "sliders.id LIKE '%" . $id . "%'";
|
||||
$orderByExtra = "(sliders.id = '" . $id . "') DESC, ";
|
||||
}
|
||||
|
||||
$wheres[] = "sliders.alias LIKE " . Database::quote('%' . $keyword . '%') . " OR sliders.title LIKE " . Database::quote('%' . $keyword . '%');
|
||||
|
||||
return Database::queryAll("SELECT sliders.*,
|
||||
xref.group_id,
|
||||
IF(sliders.thumbnail != '',
|
||||
sliders.thumbnail,
|
||||
IF(sliders.type != 'group',
|
||||
(SELECT slides.thumbnail FROM " . $slidesModel->getTableName() . " AS slides WHERE slides.slider = sliders.id AND slides.published = 1 AND slides.generator_id = 0 AND slides.thumbnail NOT LIKE '' ORDER BY slides.first DESC, slides.ordering ASC LIMIT 1),
|
||||
''
|
||||
)
|
||||
) AS thumbnail,
|
||||
IF(sliders.type != 'group',
|
||||
(SELECT count(*) FROM " . $slidesModel->getTableName() . " AS slides2 WHERE slides2.slider = sliders.id GROUP BY slides2.slider),
|
||||
(SELECT count(*) FROM " . $this->xref->getTableName() . " AS xref2 LEFT JOIN " . $this->getTableName() . " AS sliders2 ON sliders2.id = xref2.slider_id WHERE xref2.group_id = sliders.id AND sliders2.slider_status LIKE 'published' GROUP BY xref2.group_id)
|
||||
) AS slides
|
||||
FROM " . $this->getTableName() . " AS sliders
|
||||
LEFT JOIN " . $this->xref->getTableName() . " AS xref ON xref.slider_id = sliders.id
|
||||
WHERE
|
||||
(
|
||||
xref.group_id IS NULL
|
||||
OR xref.group_id = 0
|
||||
OR (SELECT _sliders.slider_status FROM " . $this->getTableName() . " AS _sliders WHERE _sliders.id = xref.group_id ) LIKE 'published'
|
||||
)
|
||||
AND sliders.slider_status LIKE 'published'
|
||||
AND (" . implode(' OR ', $wheres) . ")
|
||||
GROUP BY sliders.id
|
||||
ORDER BY " . $orderByExtra . "sliders.title ASC");
|
||||
|
||||
}
|
||||
|
||||
public function getGroups($status = '*') {
|
||||
|
||||
$wheres = array(
|
||||
"type LIKE 'group'"
|
||||
);
|
||||
|
||||
if ($status !== '*') {
|
||||
$wheres[] = "slider_status LIKE " . Database::quote($status);
|
||||
}
|
||||
|
||||
return Database::queryAll("SELECT id, title FROM " . $this->getTableName() . " WHERE " . implode(' AND ', $wheres) . " ORDER BY title ASC");
|
||||
}
|
||||
|
||||
public function getFallbackUsage($sliderIDs) {
|
||||
$wheres = array();
|
||||
foreach ($sliderIDs as $id) {
|
||||
$wheres[] = 'params LIKE \'%"fallback-slider":"' . $id . '"%\'';
|
||||
}
|
||||
|
||||
return Database::queryAll("SELECT id FROM " . $this->getTableName() . " as sliders WHERE " . implode(" OR ", $wheres));
|
||||
}
|
||||
|
||||
public function import($slider, $groupID = 0) {
|
||||
try {
|
||||
$this->table->insert(array(
|
||||
'title' => $slider['title'],
|
||||
'type' => $slider['type'],
|
||||
'thumbnail' => empty($slider['thumbnail']) ? '' : $slider['thumbnail'],
|
||||
'params' => $slider['params']->toJSON(),
|
||||
'time' => date('Y-m-d H:i:s', Platform::getTimestamp()),
|
||||
'ordering' => -1
|
||||
));
|
||||
|
||||
$sliderID = $this->table->insertId();
|
||||
|
||||
if (isset($slider['alias'])) {
|
||||
$this->updateAlias($sliderID, $slider['alias']);
|
||||
}
|
||||
|
||||
$this->xref->add($groupID, $sliderID);
|
||||
$this->reindexOrdering();
|
||||
|
||||
SmartSlider3Info::sliderChanged();
|
||||
|
||||
return $sliderID;
|
||||
} catch (Exception $e) {
|
||||
throw new Exception($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public function replace($slider, $groupID) {
|
||||
|
||||
if (isset($slider['id']) && $slider['id'] > 0) {
|
||||
|
||||
$groups = $this->xref->getGroups($slider['id']);
|
||||
|
||||
$this->deletePermanently($slider['id']);
|
||||
|
||||
try {
|
||||
$this->table->insert(array(
|
||||
'id' => $slider['id'],
|
||||
'title' => $slider['title'],
|
||||
'type' => $slider['type'],
|
||||
'thumbnail' => empty($slider['thumbnail']) ? '' : $slider['thumbnail'],
|
||||
'params' => $slider['params']->toJSON(),
|
||||
'time' => date('Y-m-d H:i:s', Platform::getTimestamp())
|
||||
));
|
||||
|
||||
$sliderID = $this->table->insertId();
|
||||
|
||||
if (isset($slider['alias'])) {
|
||||
$this->updateAlias($sliderID, $slider['alias']);
|
||||
}
|
||||
|
||||
if ($groupID) {
|
||||
$this->xref->add($groupID, $sliderID);
|
||||
}
|
||||
|
||||
if (!empty($groups)) {
|
||||
foreach ($groups as $group) {
|
||||
if ($groupID != $group['group_id']) {
|
||||
$this->xref->add($group['group_id'], $sliderID);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SmartSlider3Info::sliderChanged();
|
||||
|
||||
return $sliderID;
|
||||
} catch (Exception $e) {
|
||||
throw new Exception($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
return $this->import($slider);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $sliderId
|
||||
* @param $params Data
|
||||
*/
|
||||
public function importUpdate($sliderId, $params) {
|
||||
|
||||
$this->table->update(array(
|
||||
'params' => $params->toJson()
|
||||
), array(
|
||||
"id" => $sliderId
|
||||
));
|
||||
}
|
||||
|
||||
public function create($slider, $groupID = 0) {
|
||||
if (!isset($slider['version'])) {
|
||||
$slider['version'] = SmartSlider3Info::$version;
|
||||
}
|
||||
|
||||
if (!isset($slider['title'])) return false;
|
||||
if ($slider['title'] == '') $slider['title'] = n2_('New slider');
|
||||
|
||||
if (Str::strlen($slider['title']) > $this->sliderTitleLength) {
|
||||
$slider['title'] = Str::substr($slider['title'], 0, $this->sliderTitleLength);
|
||||
}
|
||||
|
||||
$title = $slider['title'];
|
||||
unset($slider['title']);
|
||||
$type = $slider['type'];
|
||||
unset($slider['type']);
|
||||
|
||||
$thumbnail = '';
|
||||
if (!empty($slider['thumbnail'])) {
|
||||
$thumbnail = $slider['thumbnail'];
|
||||
unset($slider['thumbnail']);
|
||||
}
|
||||
|
||||
try {
|
||||
$this->table->insert(array(
|
||||
'title' => $title,
|
||||
'type' => $type,
|
||||
'params' => json_encode($slider),
|
||||
'thumbnail' => $thumbnail,
|
||||
'time' => date('Y-m-d H:i:s', Platform::getTimestamp()),
|
||||
'ordering' => -1
|
||||
));
|
||||
|
||||
$sliderID = $this->table->insertId();
|
||||
|
||||
$this->xref->add($groupID, $sliderID);
|
||||
$this->reindexOrdering();
|
||||
|
||||
SmartSlider3Info::sliderChanged();
|
||||
|
||||
return $sliderID;
|
||||
} catch (Exception $e) {
|
||||
throw new Exception($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public function saveSimple($id, $title, $params) {
|
||||
if ($id <= 0) return false;
|
||||
|
||||
$params['version'] = SmartSlider3Info::$version;
|
||||
|
||||
if (empty($title)) $title = n2_('New slider');
|
||||
|
||||
if (Str::strlen($title) > $this->sliderTitleLength) {
|
||||
$title = Str::substr($title, 0, $this->sliderTitleLength);
|
||||
}
|
||||
|
||||
$this->table->update(array(
|
||||
'title' => $title,
|
||||
'params' => json_encode($params)
|
||||
), array(
|
||||
"id" => $id
|
||||
));
|
||||
}
|
||||
|
||||
public function save($id, $slider) {
|
||||
$slider['version'] = SmartSlider3Info::$version;
|
||||
|
||||
if (!isset($slider['title']) || $id <= 0) return false;
|
||||
$response = array(
|
||||
'changedFields' => array()
|
||||
);
|
||||
if ($slider['title'] == '') $slider['title'] = n2_('New slider');
|
||||
|
||||
$title = $slider['title'];
|
||||
unset($slider['title']);
|
||||
if (Str::strlen($title) > $this->sliderTitleLength) {
|
||||
$title = Str::substr($title, 0, $this->sliderTitleLength);
|
||||
}
|
||||
|
||||
$alias = $slider['alias'];
|
||||
unset($slider['alias']);
|
||||
$type = $slider['type'];
|
||||
unset($slider['type']);
|
||||
|
||||
$thumbnail = '';
|
||||
if (!empty($slider['thumbnail'])) {
|
||||
$thumbnail = $slider['thumbnail'];
|
||||
unset($slider['thumbnail']);
|
||||
}
|
||||
|
||||
$this->table->update(array(
|
||||
'title' => $title,
|
||||
'type' => $type,
|
||||
'params' => json_encode($slider),
|
||||
'thumbnail' => $thumbnail
|
||||
), array(
|
||||
"id" => $id
|
||||
));
|
||||
|
||||
$aliasResult = $this->updateAlias($id, $alias);
|
||||
if ($aliasResult !== false) {
|
||||
if ($aliasResult['oldAlias'] !== $aliasResult['newAlias']) {
|
||||
if ($aliasResult['newAlias'] === null) {
|
||||
Notification::notice(n2_('Alias removed'));
|
||||
$response['changedFields']['slideralias'] = '';
|
||||
} else if ($aliasResult['newAlias'] === '') {
|
||||
Notification::error(n2_('Alias must contain one or more letters'));
|
||||
$response['changedFields']['slideralias'] = '';
|
||||
} else {
|
||||
Notification::notice(sprintf(n2_('Alias updated to: %s'), $aliasResult['newAlias']));
|
||||
$response['changedFields']['slideralias'] = $aliasResult['newAlias'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$this->markChanged($id);
|
||||
|
||||
SmartSlider3Info::sliderChanged();
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
public function updateAlias($sliderID, $alias) {
|
||||
$isNull = false;
|
||||
if (empty($alias)) {
|
||||
$isNull = true;
|
||||
} else {
|
||||
|
||||
$alias = strtolower($alias);
|
||||
$alias = preg_replace('/&.+?;/', '', $alias); // kill entities
|
||||
$alias = str_replace('.', '-', $alias);
|
||||
|
||||
$alias = preg_replace('/[^%a-z0-9 _-]/', '', $alias);
|
||||
$alias = preg_replace('/\s+/', '-', $alias);
|
||||
$alias = preg_replace('|-+|', '-', $alias);
|
||||
$alias = preg_replace('|^-*|', '', $alias);
|
||||
|
||||
if (empty($alias)) {
|
||||
$isNull = true;
|
||||
}
|
||||
}
|
||||
|
||||
$slider = $this->get($sliderID);
|
||||
if ($isNull) {
|
||||
if ($slider['alias'] == 'null') {
|
||||
} else {
|
||||
Database::query('UPDATE ' . $this->table->getTableName() . ' SET `alias` = NULL WHERE id = ' . intval($sliderID));
|
||||
|
||||
return array(
|
||||
'oldAlias' => $slider['alias'],
|
||||
'newAlias' => null
|
||||
);
|
||||
}
|
||||
} else {
|
||||
if (!is_numeric($alias)) {
|
||||
if ($slider['alias'] == $alias) {
|
||||
return array(
|
||||
'oldAlias' => $slider['alias'],
|
||||
'newAlias' => $alias
|
||||
);
|
||||
} else {
|
||||
$_alias = $alias;
|
||||
for ($i = 2; $i < 12; $i++) {
|
||||
$sliderWithAlias = $this->getByAlias($_alias);
|
||||
if (!$sliderWithAlias) {
|
||||
$this->table->update(array(
|
||||
'alias' => $_alias
|
||||
), array(
|
||||
"id" => $sliderID
|
||||
));
|
||||
|
||||
return array(
|
||||
'oldAlias' => $slider['alias'],
|
||||
'newAlias' => $_alias
|
||||
);
|
||||
break;
|
||||
} else {
|
||||
$_alias = $alias . $i;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return array(
|
||||
'oldAlias' => $slider['alias'],
|
||||
'newAlias' => ''
|
||||
);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function setTitle($id, $title) {
|
||||
|
||||
if (Str::strlen($title) > $this->sliderTitleLength) {
|
||||
$title = Str::substr($title, 0, $this->sliderTitleLength);
|
||||
}
|
||||
|
||||
$this->table->update(array(
|
||||
'title' => $title
|
||||
), array(
|
||||
"id" => $id
|
||||
));
|
||||
|
||||
$this->markChanged($id);
|
||||
|
||||
return $id;
|
||||
}
|
||||
|
||||
public function setThumbnail($id, $thumbnail) {
|
||||
|
||||
$this->table->update(array(
|
||||
'thumbnail' => $thumbnail
|
||||
), array(
|
||||
"id" => $id
|
||||
));
|
||||
|
||||
$this->markChanged($id);
|
||||
|
||||
return $id;
|
||||
}
|
||||
|
||||
public function changeSliderType($sliderID, $targetSliderType) {
|
||||
|
||||
$this->table->update(array(
|
||||
'type' => $targetSliderType
|
||||
), array(
|
||||
"id" => $sliderID
|
||||
));
|
||||
|
||||
$this->markChanged($sliderID);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $sliderID
|
||||
* @param $groupID
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function trash($sliderID, $groupID) {
|
||||
|
||||
$relatedGroups = $this->xref->getGroups($sliderID);
|
||||
|
||||
if (count($relatedGroups) > 1) {
|
||||
/**
|
||||
* Delete the connection between the slider and the group
|
||||
*/
|
||||
$this->xref->deleteXref($groupID, $sliderID);
|
||||
|
||||
return 'unlink';
|
||||
}
|
||||
|
||||
$this->table->update(array(
|
||||
'slider_status' => 'trash'
|
||||
), array(
|
||||
"id" => $sliderID
|
||||
));
|
||||
|
||||
$helper = new HelperSliderChanged($this);
|
||||
$helper->setSliderChanged($sliderID, 1);
|
||||
$helper->setSliderChanged($groupID, 1);
|
||||
|
||||
$slider = $this->get($sliderID);
|
||||
if ($slider['type'] == 'group') {
|
||||
$subSliders = $this->xref->getSliders($sliderID, 'published');
|
||||
foreach ($subSliders as $subSlider) {
|
||||
if (!$this->xref->isSliderAvailableInAnyGroups($subSlider['slider_id'])) {
|
||||
$helper->setSliderChanged($subSlider['slider_id'], 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 'trash';
|
||||
}
|
||||
|
||||
public function restore($id) {
|
||||
$changedSliders = array();
|
||||
$helper = new HelperSliderChanged($this);
|
||||
|
||||
$slider = $this->get($id);
|
||||
if ($slider['type'] == 'group') {
|
||||
$subSliders = $this->xref->getSliders($id, 'published');
|
||||
foreach ($subSliders as $subSlider) {
|
||||
if (!$this->xref->isSliderAvailableInAnyGroups($subSlider['slider_id'])) {
|
||||
$changedSliders[] = $subSlider['slider_id'];
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$relatedGroups = $this->xref->getGroups($id);
|
||||
if ($relatedGroups && isset($relatedGroups[0]['group_id']) && $relatedGroups[0]['group_id'] > 0) {
|
||||
//if a slider was trashed, then it can only be restored to one group
|
||||
$helper->setSliderChanged($relatedGroups[0]['group_id'], 1);
|
||||
}
|
||||
}
|
||||
|
||||
$this->table->update(array(
|
||||
'slider_status' => 'published'
|
||||
), array(
|
||||
"id" => $id
|
||||
));
|
||||
|
||||
if (!empty($changedSliders)) {
|
||||
foreach ($changedSliders as $sliderID) {
|
||||
$helper->setSliderChanged($sliderID, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $id
|
||||
*
|
||||
* @return array the IDs of the deleted sliders.
|
||||
*/
|
||||
public function deletePermanently($id) {
|
||||
|
||||
$slidesModel = new ModelSlides($this);
|
||||
$slidesModel->deleteBySlider($id);
|
||||
|
||||
$deletedSliders = $this->xref->deleteGroup($id);
|
||||
|
||||
$deletedSliders[] = $id;
|
||||
|
||||
$this->xref->deleteSlider($id);
|
||||
$this->table->deleteByPk($id);
|
||||
|
||||
AbstractCache::clearGroup(Slider::getCacheId($id));
|
||||
AbstractCache::clearGroup(AdminSlider::getCacheId($id));
|
||||
|
||||
$this->markChanged($id);
|
||||
$this->reindexOrdering();
|
||||
|
||||
SmartSlider3Info::sliderChanged();
|
||||
|
||||
return $deletedSliders;
|
||||
}
|
||||
|
||||
public function trashOrDelete($id, $groupID) {
|
||||
|
||||
$relatedGroups = $this->xref->getGroups($id);
|
||||
|
||||
if (count($relatedGroups) > 1) {
|
||||
/**
|
||||
* Delete the connection between the slider and the group
|
||||
*/
|
||||
$this->xref->deleteXref($groupID, $id);
|
||||
|
||||
return 'unlink';
|
||||
} else {
|
||||
|
||||
$this->deletePermanently($id);
|
||||
|
||||
return 'delete';
|
||||
}
|
||||
}
|
||||
|
||||
public function deleteSlides($id) {
|
||||
$slidesModel = new ModelSlides($this);
|
||||
$slidesModel->deleteBySlider($id);
|
||||
$this->markChanged($id);
|
||||
}
|
||||
|
||||
public function duplicate($id, $withGroup = true) {
|
||||
|
||||
$slider = $this->get($id);
|
||||
|
||||
unset($slider['id']);
|
||||
|
||||
$slider['title'] .= ' - ' . n2_('Copy');
|
||||
|
||||
if (Str::strlen($slider['title']) > $this->sliderTitleLength) {
|
||||
$slider['title'] = Str::substr($slider['title'], 0, $this->sliderTitleLength);
|
||||
}
|
||||
|
||||
$slider['time'] = date('Y-m-d H:i:s', Platform::getTimestamp());
|
||||
|
||||
/**
|
||||
* Remove alias to prevent override
|
||||
*/
|
||||
$slider['alias'] = '';
|
||||
|
||||
try {
|
||||
$this->table->insert($slider);
|
||||
$newSliderId = $this->table->insertId();
|
||||
} catch (Exception $e) {
|
||||
throw new Exception($e->getMessage());
|
||||
}
|
||||
|
||||
if (!$newSliderId) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($slider['type'] == 'group') {
|
||||
$subSliders = $this->xref->getSliders($id, 'published');
|
||||
|
||||
foreach ($subSliders as $subSlider) {
|
||||
$newSubSliderID = $this->duplicate($subSlider['slider_id'], false);
|
||||
$this->xref->add($newSliderId, $newSubSliderID);
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
$slidesModel = new ModelSlides($this);
|
||||
|
||||
foreach ($slidesModel->getAll($id) as $slide) {
|
||||
$slidesModel->copyTo($slide['id'], true, $newSliderId);
|
||||
}
|
||||
|
||||
if ($withGroup) {
|
||||
$groups = $this->xref->getGroups($id);
|
||||
foreach ($groups as $group) {
|
||||
$this->xref->add($group['group_id'], $newSliderId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$this->reindexOrdering();
|
||||
|
||||
SmartSlider3Info::sliderChanged();
|
||||
|
||||
return $newSliderId;
|
||||
}
|
||||
|
||||
public function markChanged($sliderid) {
|
||||
|
||||
$helper = new HelperSliderChanged($this);
|
||||
$helper->setSliderChanged($sliderid, 1);
|
||||
}
|
||||
|
||||
public function order($groupID, $ids, $isReverse = false, $orders = array()) {
|
||||
|
||||
if (is_array($ids) && count($ids) > 0) {
|
||||
if ($isReverse) {
|
||||
$ids = array_reverse($ids);
|
||||
}
|
||||
$groupID = intval($groupID);
|
||||
if ($groupID <= 0) {
|
||||
$groupID = false;
|
||||
}
|
||||
if (!empty($orders)) {
|
||||
asort($orders);
|
||||
$orders = array_values($orders);
|
||||
}
|
||||
|
||||
$i = 0;
|
||||
foreach ($ids as $id) {
|
||||
$id = intval($id);
|
||||
if ($id > 0) {
|
||||
if (!$groupID) {
|
||||
if (!empty($orders)) {
|
||||
$order = intval($orders[$i]);
|
||||
} else {
|
||||
$order = $i;
|
||||
}
|
||||
$this->table->update(array(
|
||||
'ordering' => $order,
|
||||
), array(
|
||||
"id" => $id
|
||||
));
|
||||
} else {
|
||||
$this->xref->table->update(array(
|
||||
'ordering' => $i,
|
||||
), array(
|
||||
"slider_id" => $id,
|
||||
"group_id" => $groupID
|
||||
));
|
||||
}
|
||||
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
|
||||
return $i;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function reindexOrdering() {
|
||||
$sliders = $this->getAll(0);
|
||||
foreach ($sliders as $idx => $slider) {
|
||||
$this->table->update(array(
|
||||
'ordering' => $idx
|
||||
), array(
|
||||
"id" => $slider['id']
|
||||
));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
protected function getMaximalOrderValue() {
|
||||
|
||||
$query = "SELECT MAX(ordering) AS ordering FROM " . $this->getTableName() . "";
|
||||
$result = Database::queryRow($query);
|
||||
|
||||
if (isset($result['ordering'])) return $result['ordering'] + 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
@ -0,0 +1,201 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace Nextend\SmartSlider3\Application\Model;
|
||||
|
||||
|
||||
use Exception;
|
||||
use Nextend\Framework\Database\Database;
|
||||
use Nextend\Framework\Model\AbstractModelTable;
|
||||
use Nextend\SmartSlider3\Application\Helper\HelperSliderChanged;
|
||||
use Nextend\SmartSlider3\SmartSlider3Info;
|
||||
|
||||
class ModelSlidersXRef extends AbstractModelTable {
|
||||
|
||||
protected function createConnectorTable() {
|
||||
|
||||
return Database::getTable('nextend2_smartslider3_sliders_xref');
|
||||
}
|
||||
|
||||
public function add($groupID, $sliderID) {
|
||||
try {
|
||||
$this->table->insert(array(
|
||||
'group_id' => $groupID,
|
||||
'slider_id' => $sliderID,
|
||||
'ordering' => $this->getMaximalOrderValue($groupID)
|
||||
));
|
||||
|
||||
$helper = new HelperSliderChanged($this);
|
||||
$helper->setSliderChanged($sliderID, 1);
|
||||
$helper->setSliderChanged($groupID, 1);
|
||||
|
||||
SmartSlider3Info::sliderChanged();
|
||||
|
||||
return true;
|
||||
} catch (Exception $e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $groupID
|
||||
*
|
||||
* @return array the IDs of the deleted child sliders.
|
||||
*/
|
||||
public function deleteGroup($groupID) {
|
||||
$sliders = $this->getSliders($groupID);
|
||||
|
||||
$deletedSliders = array();
|
||||
|
||||
$slidersModel = new ModelSliders($this);
|
||||
foreach ($sliders as $slider) {
|
||||
$relatedGroups = $this->getGroups($slider['slider_id']);
|
||||
if (count($relatedGroups) == 1) {
|
||||
if ($slidersModel->trashOrDelete($slider['slider_id'], $groupID) == 'delete') {
|
||||
$deletedSliders[] = $slider['slider_id'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$this->table->deleteByAttributes(array(
|
||||
'group_id' => $groupID
|
||||
));
|
||||
|
||||
SmartSlider3Info::sliderChanged();
|
||||
|
||||
return $deletedSliders;
|
||||
}
|
||||
|
||||
public function deleteSlider($sliderID) {
|
||||
|
||||
$helper = new HelperSliderChanged($this);
|
||||
$helper->setSliderChanged($sliderID, 1);
|
||||
|
||||
SmartSlider3Info::sliderChanged();
|
||||
|
||||
return $this->table->deleteByAttributes(array(
|
||||
'slider_id' => $sliderID
|
||||
));
|
||||
}
|
||||
|
||||
public function deleteXref($groupID, $sliderID) {
|
||||
|
||||
$helper = new HelperSliderChanged($this);
|
||||
$helper->setSliderChanged($sliderID, 1);
|
||||
$helper->setSliderChanged($groupID, 1);
|
||||
|
||||
SmartSlider3Info::sliderChanged();
|
||||
|
||||
return $this->table->deleteByAttributes(array(
|
||||
'group_id' => $groupID,
|
||||
'slider_id' => $sliderID
|
||||
));
|
||||
}
|
||||
|
||||
public function getSliders($groupID, $status = '*') {
|
||||
|
||||
if ($status !== '*') {
|
||||
$slidersModel = new ModelSliders($this);
|
||||
|
||||
return Database::queryAll("
|
||||
SELECT xref.slider_id
|
||||
FROM " . $this->getTableName() . " AS xref
|
||||
LEFT JOIN " . $slidersModel->getTableName() . " AS sliders ON sliders.id = xref.slider_id
|
||||
WHERE xref.group_id = '" . $groupID . "' AND sliders.slider_status LIKE " . Database::quote($status) . "
|
||||
ORDER BY xref.ordering ASC");
|
||||
}
|
||||
|
||||
return Database::queryAll("
|
||||
SELECT slider_id
|
||||
FROM " . $this->getTableName() . "
|
||||
WHERE group_id = '" . $groupID . "'
|
||||
ORDER BY ordering ASC");
|
||||
}
|
||||
|
||||
public function getGroupsIDs($sliderID) {
|
||||
$ids = array();
|
||||
|
||||
$result = Database::queryAll("
|
||||
SELECT group_id
|
||||
FROM " . $this->getTableName() . "
|
||||
WHERE slider_id = '" . $sliderID . "'
|
||||
ORDER BY ordering ASC");
|
||||
|
||||
foreach ($result as $row) {
|
||||
$ids[] = $row['group_id'];
|
||||
}
|
||||
|
||||
return $ids;
|
||||
}
|
||||
|
||||
public function getGroups($sliderID, $status = '*') {
|
||||
$slidersModel = new ModelSliders($this);
|
||||
|
||||
$wheres = array("xref.slider_id = '" . $sliderID . "'");
|
||||
|
||||
if ($status !== '*') {
|
||||
$wheres[] = "sliders.slider_status LIKE '" . $status . "'";
|
||||
}
|
||||
|
||||
$result = Database::queryAll("
|
||||
SELECT xref.group_id, sliders.title
|
||||
FROM " . $this->getTableName() . " AS xref
|
||||
LEFT JOIN " . $slidersModel->getTableName() . " AS sliders ON sliders.id = xref.group_id
|
||||
WHERE " . implode(' AND ', $wheres) . "
|
||||
ORDER BY xref.group_id ASC");
|
||||
|
||||
if (!empty($result)) {
|
||||
return $result;
|
||||
}
|
||||
|
||||
return array(
|
||||
array(
|
||||
"group_id" => 0,
|
||||
"title" => n2_('Dashboard')
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
protected function getMaximalOrderValue($groupID) {
|
||||
|
||||
$query = "SELECT MAX(ordering) AS ordering FROM " . $this->getTableName() . " WHERE group_id = '" . intval($groupID) . "'";
|
||||
$result = Database::queryRow($query);
|
||||
|
||||
if (isset($result['ordering'])) return $result['ordering'] + 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $sliderID
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isSliderAvailableInAnyGroups($sliderID) {
|
||||
$allRelatedGroups = $this->getGroups($sliderID);
|
||||
|
||||
$slidersModel = new ModelSliders($this);
|
||||
|
||||
foreach ($allRelatedGroups as $group) {
|
||||
if ($group['group_id'] != 0) {
|
||||
/*
|
||||
* It is a group
|
||||
*/
|
||||
$sliderRow = $slidersModel->get($group['group_id']);
|
||||
if (isset($sliderRow['slider_status']) && $sliderRow['slider_status'] === 'published') {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
/*
|
||||
* It is a slider
|
||||
*/
|
||||
$sliderRow = $slidersModel->get($sliderID);
|
||||
if (isset($sliderRow['slider_status']) && $sliderRow['slider_status'] === 'published') {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
@ -0,0 +1,706 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace Nextend\SmartSlider3\Application\Model;
|
||||
|
||||
|
||||
use Nextend\Framework\Data\Data;
|
||||
use Nextend\Framework\Database\Database;
|
||||
use Nextend\Framework\Misc\Base64;
|
||||
use Nextend\Framework\Misc\Str;
|
||||
use Nextend\Framework\Model\AbstractModelTable;
|
||||
use Nextend\Framework\Request\Request;
|
||||
use Nextend\SmartSlider3\Application\Helper\HelperSliderChanged;
|
||||
use Nextend\SmartSlider3\Renderable\Component\AbstractComponent;
|
||||
use Nextend\SmartSlider3\Renderable\Component\ComponentCol;
|
||||
use Nextend\SmartSlider3\Renderable\Component\ComponentContent;
|
||||
use Nextend\SmartSlider3\Renderable\Component\ComponentLayer;
|
||||
use Nextend\SmartSlider3\Renderable\Component\ComponentRow;
|
||||
use Nextend\SmartSlider3\SlideBuilder\BuilderComponentLayer;
|
||||
use Nextend\SmartSlider3\SlideBuilder\BuilderComponentSlide;
|
||||
use Nextend\SmartSlider3\Slider\Slide;
|
||||
use Nextend\SmartSlider3\Slider\Slider;
|
||||
use Nextend\SmartSlider3\SmartSlider3Info;
|
||||
use Nextend\SmartSlider3Pro\Renderable\Component\ComponentGroup;
|
||||
|
||||
class ModelSlides extends AbstractModelTable {
|
||||
|
||||
protected function createConnectorTable() {
|
||||
|
||||
return Database::getTable('nextend2_smartslider3_slides');
|
||||
}
|
||||
|
||||
public function get($id) {
|
||||
return $this->table->findByPk($id);
|
||||
}
|
||||
|
||||
public function getAll($sliderid = 0, $where = '') {
|
||||
return Database::queryAll('SELECT * FROM ' . $this->getTableName() . ' WHERE slider = ' . $sliderid . ' ' . $where . ' ORDER BY ordering', false, "assoc", null);
|
||||
}
|
||||
|
||||
public function createQuickImage($image, $sliderId) {
|
||||
|
||||
$parameters = array(
|
||||
'background-type' => 'image',
|
||||
'backgroundImage' => $image['image']
|
||||
);
|
||||
|
||||
if (!empty($image['alt'])) {
|
||||
$parameters['backgroundAlt'] = $image['alt'];
|
||||
}
|
||||
|
||||
$slideID = $this->create($sliderId, $image['title'], array(), $image['image'], $parameters, array(
|
||||
'description' => $image['description']
|
||||
));
|
||||
$this->markChanged($sliderId);
|
||||
|
||||
return $slideID;
|
||||
}
|
||||
|
||||
public function createQuickEmptySlide($sliderId) {
|
||||
|
||||
$parameters = array(
|
||||
'background-type' => 'color'
|
||||
);
|
||||
|
||||
$slideID = $this->create($sliderId, 'Slide', array(), '', $parameters);
|
||||
$this->markChanged($sliderId);
|
||||
|
||||
return $slideID;
|
||||
}
|
||||
|
||||
public function createQuickStaticOverlay($sliderId) {
|
||||
|
||||
$parameters = array(
|
||||
'static-slide' => 1
|
||||
);
|
||||
|
||||
$slideID = $this->create($sliderId, n2_('Static overlay'), array(), '', $parameters);
|
||||
$this->markChanged($sliderId);
|
||||
|
||||
return $slideID;
|
||||
}
|
||||
|
||||
public function createQuickPost($post, $sliderId) {
|
||||
|
||||
$data = new Data($post);
|
||||
|
||||
$title = $this->removeFourByteChars($data->get('title'));
|
||||
$description = $this->removeFourByteChars($data->get('description'));
|
||||
|
||||
$slideBuilder = new BuilderComponentSlide(array(
|
||||
'title' => $title,
|
||||
'description' => $description,
|
||||
'thumbnail' => $data->get('image'),
|
||||
'background-type' => 'image',
|
||||
'backgroundImage' => $data->get('image'),
|
||||
'backgroundImageOpacity' => 20,
|
||||
'backgroundColor' => '000000FF'
|
||||
));
|
||||
|
||||
$slideBuilder->content->set(array(
|
||||
'desktopportraitpadding' => '10|*|100|*|10|*|100|*|px',
|
||||
'mobileportraitpadding' => '10|*|10|*|10|*|10|*|px'
|
||||
));
|
||||
|
||||
if ($title) {
|
||||
$heading = new BuilderComponentLayer($slideBuilder->content, 'heading');
|
||||
$heading->item->set(array(
|
||||
'heading' => '{name/slide}',
|
||||
'font' => Base64::encode('{"data":[{"extra":"","color":"ffffffff","size":"48||px","tshadow":"0|*|0|*|0|*|000000ff","afont":"Roboto,Arial","lineheight":"1.5","bold":0,"italic":0,"underline":0,"align":"inherit","letterspacing":"normal","wordspacing":"normal","texttransform":"none"},{"extra":""}]}'),
|
||||
));
|
||||
|
||||
}
|
||||
|
||||
if ($description) {
|
||||
$text = new BuilderComponentLayer($slideBuilder->content, 'text');
|
||||
$text->set(array(
|
||||
'desktopportraitmargin' => '0|*|0|*|20|*|0|*|px',
|
||||
));
|
||||
$text->item->set(array(
|
||||
'content' => '{description/slide}',
|
||||
'font' => Base64::encode('{"data":[{"extra":"","color":"ffffffff","size":"18||px","tshadow":"0|*|0|*|0|*|000000ff","afont":"Roboto,Arial","lineheight":"1.5","bold":0,"italic":0,"underline":0,"align":"inherit","letterspacing":"normal","wordspacing":"normal","texttransform":"none"},{"extra":""}]}'),
|
||||
));
|
||||
}
|
||||
|
||||
$link = $data->get('link');
|
||||
if (!empty($link)) {
|
||||
$buttonLayer = new BuilderComponentLayer($slideBuilder->content, 'button');
|
||||
$buttonLayer->item->set(array(
|
||||
'content' => n2_('Read more'),
|
||||
'link' => $link . '|*|_self'
|
||||
));
|
||||
}
|
||||
|
||||
$row = $this->convertSlideDataToDatabaseRow($slideBuilder->getData(), $sliderId);
|
||||
|
||||
$slideID = $this->create($row['slider'], $row['title'], $row['slide'], $row['thumbnail'], $row['params'], array(
|
||||
'description' => $row['description'],
|
||||
'published' => $row['published'],
|
||||
'publish_up' => $row['publish_up'],
|
||||
'publish_down' => $row['publish_down']
|
||||
));
|
||||
|
||||
$this->markChanged($sliderId);
|
||||
|
||||
return $slideID;
|
||||
}
|
||||
|
||||
public function createSimpleEditAdd($postData, $sliderId) {
|
||||
|
||||
$data = new Data($postData);
|
||||
|
||||
$title = $data->get('title', '');
|
||||
$description = $data->get('description', '');
|
||||
|
||||
$slideBuilder = new BuilderComponentSlide(array(
|
||||
'title' => $title,
|
||||
'description' => $description,
|
||||
'thumbnailType' => $data->get('thumbnailType', ''),
|
||||
'thumbnail' => $data->get('backgroundImage', ''),
|
||||
'background-type' => 'image',
|
||||
'backgroundImage' => $data->get('backgroundImage', ''),
|
||||
'backgroundImageOpacity' => 100,
|
||||
'backgroundColor' => '000000FF',
|
||||
'href' => $data->get('href', ''),
|
||||
'href-target' => $data->get('href-target', '')
|
||||
));
|
||||
|
||||
$slideBuilder->content->set(array(
|
||||
'desktopportraitpadding' => '10|*|100|*|10|*|100|*|px',
|
||||
'mobileportraitpadding' => '10|*|10|*|10|*|10|*|px'
|
||||
));
|
||||
|
||||
$videoUrl = $data->get('video', '');
|
||||
|
||||
if (!empty($videoUrl)) {
|
||||
preg_match('/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/', $videoUrl, $matches);
|
||||
|
||||
if (!empty($matches)) {
|
||||
/**
|
||||
* YouTube
|
||||
*/
|
||||
$thumbnail = 'https://i.ytimg.com/vi/' . $matches[2] . '/hqdefault.jpg';
|
||||
$slideBuilder->set('thumbnail', $thumbnail);
|
||||
|
||||
|
||||
$youtubeLayer = new BuilderComponentLayer($slideBuilder->content, 'youtube');
|
||||
$youtubeLayer->item->set(array(
|
||||
'code' => $matches[2],
|
||||
'youtubeurl' => $videoUrl,
|
||||
'image' => $thumbnail
|
||||
));
|
||||
} else {
|
||||
|
||||
preg_match('/https?:\/\/(?:www\.|player\.)?vimeo.com\/(?:channels\/(?:\w+\/)?|groups\/([^\/]*)\/videos\/|album\/(\d+)\/video\/|video\/|)(\d+)(?:$|\/|\?)/', $videoUrl, $matches);
|
||||
if (!empty($matches)) {
|
||||
/**
|
||||
* Vimeo
|
||||
*/
|
||||
|
||||
$vimeoLayer = new BuilderComponentLayer($slideBuilder->content, 'vimeo');
|
||||
$vimeoLayer->item->set(array(
|
||||
'vimeourl' => $videoUrl
|
||||
));
|
||||
} else {
|
||||
/**
|
||||
* MP4
|
||||
*/
|
||||
|
||||
$mp4Layer = new BuilderComponentLayer($slideBuilder->content, 'video');
|
||||
$mp4Layer->item->set(array(
|
||||
'video_mp4' => $videoUrl
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
if ($title) {
|
||||
$heading = new BuilderComponentLayer($slideBuilder->content, 'heading');
|
||||
$heading->item->set(array(
|
||||
'heading' => '{name/slide}'
|
||||
));
|
||||
}
|
||||
*/
|
||||
|
||||
$row = $this->convertSlideDataToDatabaseRow($slideBuilder->getData(), $sliderId);
|
||||
|
||||
$slideID = $this->create($row['slider'], $row['title'], $row['slide'], $row['thumbnail'], $row['params'], array(
|
||||
'description' => $row['description'],
|
||||
'published' => $row['published'],
|
||||
'publish_up' => $row['publish_up'],
|
||||
'publish_down' => $row['publish_down']
|
||||
));
|
||||
|
||||
$this->markChanged($sliderId);
|
||||
|
||||
return $slideID;
|
||||
}
|
||||
|
||||
public function import($row, $sliderId) {
|
||||
|
||||
if (!$row['params']->has('version')) {
|
||||
/**
|
||||
* We must set the missing empty version to allow upgrade of the old slides
|
||||
*/
|
||||
$row['params']->set('version', '');
|
||||
}
|
||||
|
||||
return $this->create($sliderId, $row['title'], $row['slide'], $row['thumbnail'], $row['params']->toArray(), array(
|
||||
'description' => $row['description'],
|
||||
'published' => $row['published'],
|
||||
'publish_up' => $row['publish_up'],
|
||||
'publish_down' => $row['publish_down'],
|
||||
'first' => $row['first'],
|
||||
'ordering' => $row['ordering'],
|
||||
'generator_id' => $row['generator_id']
|
||||
));
|
||||
}
|
||||
|
||||
private function create($sliderID, $title, $layers, $thumbnail, $params = array(), $optional = array()) {
|
||||
|
||||
if (!isset($optional['ordering'])) {
|
||||
$optional['ordering'] = $this->getNextOrdering($sliderID);
|
||||
}
|
||||
|
||||
if (!isset($params['version'])) {
|
||||
$params['version'] = SmartSlider3Info::$version;
|
||||
}
|
||||
|
||||
$data = array_merge(array(
|
||||
'description' => '',
|
||||
'first' => 0,
|
||||
'published' => 1,
|
||||
'publish_up' => '1970-01-01 00:00:00',
|
||||
'publish_down' => '1970-01-01 00:00:00',
|
||||
'generator_id' => 0
|
||||
), $optional, array(
|
||||
'title' => $title,
|
||||
'slide' => json_encode($layers, JSON_UNESCAPED_SLASHES),
|
||||
'thumbnail' => $thumbnail,
|
||||
'params' => json_encode($params, JSON_UNESCAPED_SLASHES),
|
||||
'slider' => $sliderID
|
||||
));
|
||||
|
||||
$this->table->insert($data);
|
||||
|
||||
return $this->table->insertId();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $sliderId
|
||||
* @param int $generatorID
|
||||
* @param $slide
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function createSlideWithGenerator($sliderId, $generatorID, $slide) {
|
||||
|
||||
$row = $this->convertSlideDataToDatabaseRow($slide, $sliderId);
|
||||
|
||||
$slideId = $this->create($row['slider'], $row['title'], $row['slide'], $row['thumbnail'], $row['params'], array(
|
||||
'description' => $row['description'],
|
||||
'published' => $row['published'],
|
||||
'publish_up' => $row['publish_up'],
|
||||
'publish_down' => $row['publish_down'],
|
||||
'generator_id' => $generatorID
|
||||
));
|
||||
|
||||
$this->markChanged($sliderId);
|
||||
|
||||
return $slideId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $slideID
|
||||
* @param string $slide
|
||||
* @param string $guides
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function save($slideID, $slide, $guides) {
|
||||
|
||||
$slideData = json_decode(Base64::decode($slide), true);
|
||||
$slideData['guides'] = $guides;
|
||||
|
||||
$row = $this->convertSlideDataToDatabaseRow($slideData);
|
||||
|
||||
$this->table->update(array(
|
||||
'title' => $row['title'],
|
||||
'slide' => json_encode($row['slide'], JSON_UNESCAPED_SLASHES),
|
||||
'description' => $row['description'],
|
||||
'thumbnail' => $row['thumbnail'],
|
||||
'published' => $row['published'],
|
||||
'publish_up' => $row['publish_up'],
|
||||
'publish_down' => $row['publish_down'],
|
||||
'params' => json_encode($row['params'], JSON_UNESCAPED_SLASHES)
|
||||
), array('id' => $slideID));
|
||||
|
||||
$this->markChanged(Request::$REQUEST->getInt('sliderid'));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function saveSimple($slideID, $title, $description, $params) {
|
||||
|
||||
$this->table->update(array(
|
||||
'title' => $title,
|
||||
'description' => $description,
|
||||
'params' => json_encode($params, JSON_UNESCAPED_SLASHES)
|
||||
), array('id' => $slideID));
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the params field of the slide;
|
||||
*
|
||||
* @param $id
|
||||
* @param $params
|
||||
*/
|
||||
public function updateSlideParams($id, $params) {
|
||||
|
||||
$this->table->update(array(
|
||||
'params' => json_encode($params)
|
||||
), array('id' => $id));
|
||||
|
||||
}
|
||||
|
||||
public function delete($id) {
|
||||
|
||||
$slide = $this->get($id);
|
||||
|
||||
if ($slide['generator_id'] > 0) {
|
||||
$slidesWithSameGenerator = $this->getAll($slide['slider'], 'AND generator_id = ' . intval($slide['generator_id']));
|
||||
if (count($slidesWithSameGenerator) == 1) {
|
||||
$generatorModel = new ModelGenerator($this);
|
||||
$generatorModel->delete($slide['generator_id']);
|
||||
}
|
||||
}
|
||||
|
||||
$this->table->deleteByAttributes(array(
|
||||
"id" => intval($id)
|
||||
));
|
||||
|
||||
$this->markChanged($slide['slider']);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $id
|
||||
* @param bool $maintainOrdering
|
||||
* @param bool|int $targetSliderId
|
||||
*
|
||||
* @return int The new slide ID;
|
||||
*/
|
||||
public function copyTo($id, $maintainOrdering = false, $targetSliderId = false) {
|
||||
$row = $this->get($id);
|
||||
unset($row['id']);
|
||||
|
||||
$row['first'] = 0;
|
||||
|
||||
if ($targetSliderId === false || $row['slider'] == $targetSliderId) {
|
||||
/**
|
||||
* Copy the slide to the same slider
|
||||
*/
|
||||
|
||||
$this->shiftSlideOrdering($row['slider'], $row['ordering']);
|
||||
} else {
|
||||
/**
|
||||
* Copy the slide to another slider
|
||||
*/
|
||||
$row['slider'] = $targetSliderId;
|
||||
|
||||
if (!$maintainOrdering) {
|
||||
$row['ordering'] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($row['generator_id'])) {
|
||||
$generatorModel = new ModelGenerator($this);
|
||||
$row['generator_id'] = $generatorModel->duplicate($row['generator_id']);
|
||||
}
|
||||
|
||||
$row['slide'] = json_encode(AbstractComponent::translateUniqueIdentifier(json_decode($row['slide'], true)), JSON_UNESCAPED_SLASHES);
|
||||
|
||||
$this->table->insert($row);
|
||||
|
||||
$id = $this->table->insertId();
|
||||
|
||||
$this->markChanged($row['slider']);
|
||||
|
||||
return $id;
|
||||
}
|
||||
|
||||
public function setTitle($id, $title) {
|
||||
$slide = $this->get($id);
|
||||
|
||||
$this->table->update(array(
|
||||
"title" => $title
|
||||
), array(
|
||||
"id" => $id
|
||||
));
|
||||
|
||||
$this->markChanged($slide['slider']);
|
||||
}
|
||||
|
||||
public function first($id) {
|
||||
$slide = $this->get($id);
|
||||
|
||||
$this->table->update(array(
|
||||
"first" => 0
|
||||
), array(
|
||||
"slider" => $slide['slider']
|
||||
));
|
||||
|
||||
$this->table->update(array(
|
||||
"first" => 1
|
||||
), array(
|
||||
"id" => $id
|
||||
));
|
||||
|
||||
$this->markChanged($slide['slider']);
|
||||
}
|
||||
|
||||
public function publish($id) {
|
||||
|
||||
$this->markChanged(Request::$REQUEST->getInt('sliderid'));
|
||||
|
||||
return $this->table->update(array(
|
||||
"published" => 1
|
||||
), array("id" => intval($id)));
|
||||
}
|
||||
|
||||
public function unPublish($id) {
|
||||
$this->table->update(array(
|
||||
"published" => 0
|
||||
), array(
|
||||
"id" => intval($id)
|
||||
));
|
||||
|
||||
$this->markChanged(Request::$REQUEST->getInt('sliderid'));
|
||||
|
||||
}
|
||||
|
||||
public function convertToSlide($id) {
|
||||
$slide = $this->get($id);
|
||||
|
||||
$data = new Data($slide['params'], true);
|
||||
$data->set('static-slide', 0);
|
||||
|
||||
$this->table->update(array(
|
||||
"params" => $data->toJSON()
|
||||
), array(
|
||||
"id" => intval($id)
|
||||
));
|
||||
|
||||
$this->markChanged($slide['slider']);
|
||||
}
|
||||
|
||||
public function deleteBySlider($sliderid) {
|
||||
|
||||
$slides = $this->getAll($sliderid);
|
||||
foreach ($slides as $slide) {
|
||||
$this->delete($slide['id']);
|
||||
}
|
||||
$this->markChanged($sliderid);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $sliderid
|
||||
* @param $ids
|
||||
*
|
||||
* @return bool|int
|
||||
*/
|
||||
public function order($sliderid, $ids) {
|
||||
if (is_array($ids) && count($ids) > 0) {
|
||||
$i = 0;
|
||||
foreach ($ids as $id) {
|
||||
$id = intval($id);
|
||||
if ($id > 0) {
|
||||
$this->table->update(array(
|
||||
'ordering' => $i + 1,
|
||||
), array(
|
||||
"id" => $id,
|
||||
"slider" => $sliderid
|
||||
));
|
||||
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
|
||||
$this->markChanged($sliderid);
|
||||
|
||||
return $i;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private function markChanged($sliderid) {
|
||||
|
||||
$helper = new HelperSliderChanged($this);
|
||||
$helper->setSliderChanged($sliderid, 1);
|
||||
}
|
||||
|
||||
public function convertDynamicSlideToSlides($slideId) {
|
||||
$slideData = $this->get($slideId);
|
||||
if ($slideData['generator_id'] > 0) {
|
||||
$sliderObj = new Slider($this, $slideData['slider'], array(), true);
|
||||
$rootSlide = new Slide($sliderObj, $slideData);
|
||||
$rootSlide->initGenerator(array());
|
||||
$slides = $rootSlide->expandSlide();
|
||||
|
||||
$this->shiftSlideOrdering($slideData['slider'], $slideData['ordering'], count($slides));
|
||||
|
||||
$firstUsed = false;
|
||||
$i = 1;
|
||||
foreach ($slides as $slide) {
|
||||
$row = $slide->getRow();
|
||||
$row['title'] = Str::substr($row['title'], 0, 200);
|
||||
$row['description'] = Str::substr($row['description'], 0, 2000);
|
||||
// set the proper ordering
|
||||
$row['ordering'] += $i;
|
||||
if ($row['first']) {
|
||||
// Make sure to mark only one slide as start slide
|
||||
if ($firstUsed) {
|
||||
$row['first'] = 0;
|
||||
} else {
|
||||
$firstUsed = true;
|
||||
}
|
||||
}
|
||||
$this->table->insert($row);
|
||||
$i++;
|
||||
}
|
||||
|
||||
Database::query("UPDATE {$this->getTableName()} SET published = 0, first = 0 WHERE id = :id", array(
|
||||
":id" => $slideData['id']
|
||||
));
|
||||
|
||||
return count($slides);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static function prepareSample(&$layers) {
|
||||
for ($i = 0; $i < count($layers); $i++) {
|
||||
|
||||
if (isset($layers[$i]['type'])) {
|
||||
switch ($layers[$i]['type']) {
|
||||
case 'content':
|
||||
ComponentContent::prepareSample($layers[$i]);
|
||||
break;
|
||||
case 'row':
|
||||
ComponentRow::prepareSample($layers[$i]);
|
||||
break;
|
||||
case 'col':
|
||||
ComponentCol::prepareSample($layers[$i]);
|
||||
break;
|
||||
default:
|
||||
ComponentLayer::prepareSample($layers[$i]);
|
||||
}
|
||||
} else {
|
||||
ComponentLayer::prepareSample($layers[$i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function convertSlideDataToDatabaseRow($slideData, $sliderID = false) {
|
||||
|
||||
$slideData['version'] = SmartSlider3Info::$version;
|
||||
|
||||
$publish_up = '1970-01-01 00:00:00';
|
||||
if (isset($slideData['publish_up'])) {
|
||||
if ($slideData['publish_up'] != '0000-00-00 00:00:00') {
|
||||
$publish_up = date('Y-m-d H:i:s', strtotime($slideData['publish_up']));
|
||||
} else {
|
||||
$publish_up = '1970-01-01 00:00:00';
|
||||
}
|
||||
}
|
||||
|
||||
$publish_down = '1970-01-01 00:00:00';
|
||||
if (isset($slideData['publish_down'])) {
|
||||
if ($slideData['publish_down'] != '0000-00-00 00:00:00') {
|
||||
$publish_down = date('Y-m-d H:i:s', strtotime($slideData['publish_down']));
|
||||
} else {
|
||||
$publish_down = '1970-01-01 00:00:00';
|
||||
}
|
||||
}
|
||||
|
||||
$row = array(
|
||||
'title' => $slideData['title'],
|
||||
'slide' => '',
|
||||
'description' => $slideData['description'],
|
||||
'thumbnail' => $slideData['thumbnail'],
|
||||
'published' => (isset($slideData['published']) ? $slideData['published'] : 1),
|
||||
'publish_up' => $publish_up,
|
||||
'publish_down' => $publish_down
|
||||
);
|
||||
|
||||
if ($sliderID !== false) {
|
||||
$row['slider'] = $sliderID;
|
||||
}
|
||||
|
||||
$row['slide'] = $slideData['layers'];
|
||||
|
||||
if (isset($slideData['first'])) {
|
||||
$row['first'] = intval($slideData['first']);
|
||||
}
|
||||
|
||||
if (isset($slideData['generator_id']) && $slideData['generator_id'] > 0) {
|
||||
$row['generator_id'] = intval($slideData['generator_id']);
|
||||
}
|
||||
|
||||
unset($slideData['title']);
|
||||
unset($slideData['layers']);
|
||||
unset($slideData['description']);
|
||||
unset($slideData['thumbnail']);
|
||||
unset($slideData['published']);
|
||||
unset($slideData['first']);
|
||||
unset($slideData['publish_up']);
|
||||
unset($slideData['publish_down']);
|
||||
unset($slideData['ordering']);
|
||||
unset($slideData['generator_id']);
|
||||
|
||||
$row['params'] = $slideData;
|
||||
|
||||
return $row;
|
||||
}
|
||||
|
||||
private function removeFourByteChars($text) {
|
||||
return preg_replace('/[\x{10000}-\x{10FFFF}]/u', "\xEF\xBF\xBD", $text);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $sliderID
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
private function getNextOrdering($sliderID) {
|
||||
|
||||
$query = "SELECT MAX(ordering) AS ordering FROM " . $this->getTableName() . " WHERE slider = :id";
|
||||
$result = Database::queryRow($query, array(
|
||||
":id" => intval($sliderID)
|
||||
));
|
||||
|
||||
if (isset($result['ordering'])) {
|
||||
return $result['ordering'] + 1;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $sliderID
|
||||
* @param int $offset
|
||||
* @param int $slidesCount
|
||||
*/
|
||||
private function shiftSlideOrdering($sliderID, $offset, $slidesCount = 1) {
|
||||
|
||||
// Shift the afterwards slides with the slides count
|
||||
Database::query("UPDATE {$this->getTableName()} SET ordering = ordering + " . $slidesCount . " WHERE slider = :sliderid AND ordering > :ordering", array(
|
||||
":sliderid" => intval($sliderID),
|
||||
":ordering" => intval($offset)
|
||||
), '');
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user