706 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			706 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?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)
 | 
						|
        ), '');
 | 
						|
    }
 | 
						|
} |