%PDF- %PDF-
Direktori : /home/lightco1/www/lightcolab.com/libraries/nextend2/smartslider/smartslider/models/ |
Current File : /home/lightco1/www/lightcolab.com/libraries/nextend2/smartslider/smartslider/models/Sliders.php |
<?php N2Loader::import("libraries.slider.abstract", "smartslider"); N2Loader::import("models.SlidersXref", "smartslider"); N2Loader::import("models.Slides", "smartslider"); class N2SmartsliderSlidersModel extends N2Model { /** * @var N2SmartsliderSlidersXrefModel */ private $xref; public function __construct() { parent::__construct("nextend2_smartslider3_sliders"); $this->xref = new N2SmartsliderSlidersXrefModel(); } public function get($id) { return $this->db->queryRow("SELECT * FROM " . $this->getTable() . " WHERE id = :id", array( ":id" => $id )); } public function getByAlias($alias) { return $this->db->queryRow("SELECT id FROM " . $this->getTable() . " WHERE alias = :alias", array( ":alias" => $alias )); } public function getWithThumbnail($id) { $slidesModel = new N2SmartsliderSlidesModel(); return $this->db->queryRow("SELECT sliders.*, IF(sliders.thumbnail != '',sliders.thumbnail,(SELECT slides.thumbnail from " . $slidesModel->getTable() . " 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->getTable() . " AS slides2 WHERE slides2.slider = sliders.id GROUP BY slides2.slider), (SELECT count(*) FROM " . $this->xref->getTable() . " AS xref2 WHERE xref2.group_id = sliders.id GROUP BY xref2.group_id) ) AS slides FROM " . $this->getTable() . " AS sliders WHERE sliders.id = :id", array( ":id" => $id )); } public function refreshCache($sliderid) { N2Cache::clearGroup(N2SmartSliderAbstract::getCacheId($sliderid)); N2Cache::clearGroup(N2SmartSliderAbstract::getAdminCacheId($sliderid)); self::markChanged($sliderid); } /** * @return mixed */ public function getAll($groupID, $orderBy = 'ordering', $orderByDirection = 'ASC') { $slidesModel = new N2SmartsliderSlidesModel(); $_orderby = $orderBy . ' ' . $orderByDirection; if ($groupID != 0 && $orderBy == 'ordering') { $_orderby = 'xref.' . $orderBy . ' ' . $orderByDirection; } $sliders = $this->db->queryAll(" SELECT sliders.*, IF(sliders.thumbnail != '', sliders.thumbnail, IF(sliders.type != 'group', (SELECT slides.thumbnail FROM " . $slidesModel->getTable() . " 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->getTable() . " AS slides2 WHERE slides2.slider = sliders.id GROUP BY slides2.slider), (SELECT count(*) FROM " . $this->xref->getTable() . " AS xref2 WHERE xref2.group_id = sliders.id GROUP BY xref2.group_id) ) AS slides FROM " . $this->getTable() . " AS sliders LEFT JOIN " . $this->xref->getTable() . " AS xref ON xref.slider_id = sliders.id WHERE " . ($groupID == 0 ? "xref.group_id IS NULL OR xref.group_id = 0" : "xref.group_id = '" . $groupID . "'") . " ORDER BY " . $_orderby); return $sliders; } public function _getAll() { return $this->db->queryAll("SELECT sliders.* FROM " . $this->getTable() . " AS sliders"); } public function getGroups() { return $this->db->queryAll("SELECT id, title FROM " . $this->getTable() . " WHERE type LIKE 'group' ORDER BY title ASC"); } public static function renderAddForm($data = array()) { return self::editForm($data); } public static function renderEditForm($slider) { $data = json_decode($slider['params'], true); if ($data == null) $data = array(); $data['title'] = $slider['title']; $data['type'] = $slider['type']; $data['thumbnail'] = $slider['thumbnail']; $data['alias'] = isset($slider['alias']) ? $slider['alias'] : ''; return self::editForm($data); } private static function editForm($data = array()) { $configurationXmlFile = dirname(__FILE__) . '/forms/slider.xml'; N2Loader::import('libraries.form.form'); $form = new N2Form(N2Base::getApplication('smartslider') ->getApplicationType('backend')); $form->set('class', 'nextend-smart-slider-admin'); $form->loadArray($data); $form->loadXMLFile($configurationXmlFile); echo $form->render('slider'); N2Loader::import('libraries.form.element.url'); N2JS::addFirstCode('nextend.NextendElementUrlParams=' . N2ElementUrl::getNextendElementUrlParameters() . ';'); return $data; } public static function renderImportByUploadForm() { $configurationXmlFile = dirname(__FILE__) . '/forms/import/upload.xml'; N2Loader::import('libraries.form.form'); $form = new N2Form(N2Base::getApplication('smartslider') ->getApplicationType('backend')); $form->loadXMLFile($configurationXmlFile); echo $form->render('slider'); } function import($slider, $groupID = 0) { try { $this->db->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', N2Platform::getTime()) )); $sliderID = $this->db->insertId(); if(isset($slider['alias'])){ $this->updateAlias($sliderID, $slider['alias']); } $this->xref->add($groupID, $sliderID); return $sliderID; } catch (Exception $e) { throw new Exception($e->getMessage()); } } function restore($slider, $groupID) { if (isset($slider['id']) && $slider['id'] > 0) { $groups = $this->xref->getGroups($slider['id']); $this->delete($slider['id']); try { $this->db->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', N2Platform::getTime()) )); $sliderID = $this->db->insertId(); if(isset($slider['alias'])){ $this->updateAlias($sliderID, $slider['alias']); } if ($groupID) { $this->xref->add($groupID, $sliderID); } if (!empty($groups)) { foreach ($groups AS $group) { $this->xref->add($group['group_id'], $sliderID); } } return $sliderID; } catch (Exception $e) { throw new Exception($e->getMessage()); } } return $this->import($slider); } /** * @param $sliderId * @param $params N2Data */ function importUpdate($sliderId, $params) { $this->db->update(array( 'params' => $params->toJson() ), array( "id" => $sliderId )); } function create($slider, $groupID = 0) { if (!isset($slider['title'])) return false; if ($slider['title'] == '') $slider['title'] = n2_('New slider'); $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->db->insert(array( 'title' => $title, 'type' => $type, 'params' => json_encode($slider), 'thumbnail' => $thumbnail, 'time' => date('Y-m-d H:i:s', N2Platform::getTime()), 'ordering' => $this->getMaximalOrderValue() )); $sliderID = $this->db->insertId(); $this->xref->add($groupID, $sliderID); return $sliderID; } catch (Exception $e) { throw new Exception($e->getMessage()); } } function save($id, $slider) { 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']); $alias = $slider['alias']; unset($slider['alias']); $type = $slider['type']; unset($slider['type']); $thumbnail = ''; if (!empty($slider['thumbnail'])) { $thumbnail = $slider['thumbnail']; unset($slider['thumbnail']); } $this->db->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){ N2Message::notice( n2_( 'Alias removed' ) ); $response['changedFields']['slideralias'] = ''; } else if($aliasResult['newAlias'] === ''){ N2Message::error( n2_( 'Alias must contain one or more letters' ) ); $response['changedFields']['slideralias'] = ''; } else { N2Message::notice( sprintf( n2_( 'Alias updated to: %s' ), $aliasResult['newAlias'] ) ); $response['changedFields']['slideralias'] = $aliasResult['newAlias']; } } } self::markChanged($id); return $response; } 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 { $this->db->query( 'UPDATE ' . $this->db->tableName . ' 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->db->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; } function setThumbnail($id, $thumbnail) { $this->db->update(array( 'thumbnail' => $thumbnail ), array( "id" => $id )); self::markChanged($id); return $id; } function delete($id) { $slidesModel = new N2SmartsliderSlidesModel(); $slidesModel->deleteBySlider($id); $this->xref->deleteGroup($id); $this->xref->deleteSlider($id); $this->db->deleteByPk($id); N2Cache::clearGroup(N2SmartSliderAbstract::getCacheId($id)); N2Cache::clearGroup(N2SmartSliderAbstract::getAdminCacheId($id)); self::markChanged($id); } function deleteSlides($id) { $slidesModel = new N2SmartsliderSlidesModel(); $slidesModel->deleteBySlider($id); self::markChanged($id); } function duplicate($id, $withGroup = true) { $slider = $this->get($id); unset($slider['id']); $slider['title'] .= n2_(' - copy'); $slider['time'] = date('Y-m-d H:i:s', N2Platform::getTime()); try { $this->db->insert($slider); $newSliderId = $this->db->insertId(); } catch (Exception $e) { throw new Exception($e->getMessage()); } if (!$newSliderId) { return false; } if ($slider['type'] == 'group') { $subSliders = $this->xref->getSliders($id); foreach ($subSliders AS $subSlider) { $newSubSliderID = $this->duplicate($subSlider['slider_id'], false); $this->xref->add($newSliderId, $newSubSliderID); } } else { $slidesModel = new N2SmartsliderSlidesModel(); foreach ($slidesModel->getAll($id) AS $slide) { $slidesModel->copy($slide['id'], $newSliderId); } if ($withGroup) { $groups = $this->xref->getGroups($id); foreach ($groups AS $group) { $this->xref->add($group['group_id'], $newSliderId); } } } return $newSliderId; } function redirectToCreate() { N2Request::redirect($this->appType->router->createUrl(array("sliders/create")), 302, true); } function exportSlider($id) { } function exportSliderAsHTML($id) { } public static function markChanged($sliderid) { N2SmartSliderHelper::getInstance() ->setSliderChanged($sliderid, 1); } public static function box($slider, $widget, $appType) { $lt = array(); $lt[] = N2Html::tag('div', array( 'class' => 'n2-ss-box-select', ), N2Html::tag('i', array('class' => 'n2-i n2-it n2-i-tick2'), '')); $rt = array(); $rb = array(); $thumbnail = $slider['thumbnail']; if (empty($thumbnail)) { if ($slider['type'] == 'group') { $thumbnail = '$ss$/admin/images/group.png'; } else { $thumbnail = '$system$/images/placeholder/image.png'; } } $editUrl = $appType->router->createUrl(array( 'slider/edit', array( 'sliderid' => $slider['id'] ) )); $lb = array( N2Html::tag('div', array( 'class' => 'n2-button n2-button-normal n2-button-xs n2-radius-s n2-button-grey n2-h5', ), '#' . $slider['id']) ); if(!empty($slider['alias'])){ $lb[] = N2Html::tag('div', array( 'class' => 'n2-button n2-button-normal n2-button-xs n2-radius-s n2-button-grey n2-h5', 'style' => 'margin: 0 5px;' ), $slider['alias']); } $attributes = array( 'style' => 'background-image: URL("' . N2ImageHelper::fixed($thumbnail) . '");', 'class' => 'n2-ss-box-slider n2-box-selectable ' . ($slider['type'] == 'group' ? 'n2-ss-box-slider-group' : 'n2-ss-box-slider-slider'), 'data-title' => $slider['title'], 'data-editUrl' => $editUrl, 'data-sliderid' => $slider['id'] ); $widget->init("box", array( 'attributes' => $attributes, 'lt' => implode('', $lt), 'lb' => implode('', $lb), 'rt' => implode('', $rt), 'rtAttributes' => array('class' => 'n2-on-hover'), 'rb' => implode('', $rb), 'overlay' => N2Html::tag('div', array( 'class' => 'n2-box-overlay n2-on-hover' ), N2Html::tag('div', array('class' => 'n2-button n2-button-normal n2-button-s n2-button-green n2-radius-s n2-uc n2-h5'), n2_('Edit'))), 'placeholderContent' => N2Html::tag('div', array( 'class' => 'n2-box-placeholder-title' ), N2Html::link($slider['title'], $editUrl, array('class' => 'n2-h4'))) . N2Html::tag('div', array( 'class' => 'n2-box-placeholder-buttons' ), N2Html::tag('div', array( 'class' => 'n2-button n2-button-normal n2-button-s n2-radius-s n2-button-grey n2-h4 n2-right', ), $slider['slides'] | 0)) )); } public static function embedBox($mode, $slider, $widget, $appType) { $lt = array(); $rt = array(); $rb = array(); $thumbnail = $slider['thumbnail']; if (empty($thumbnail)) { if ($slider['type'] == 'group') { $thumbnail = '$ss$/admin/images/group.png'; } else { $thumbnail = '$system$/images/placeholder/image.png'; } } $lb = array( N2Html::tag('div', array( 'class' => 'n2-button n2-button-normal n2-button-xs n2-radius-s n2-button-grey n2-h5', ), '#' . $slider['id']) ); if(!empty($slider['alias'])){ $lb[] = N2Html::tag('div', array( 'class' => 'n2-button n2-button-normal n2-button-xs n2-radius-s n2-button-grey n2-h5', 'style' => 'margin: 0 5px;' ), $slider['alias']); } $attributes = array( 'style' => 'background-image: URL(' . N2ImageHelper::fixed($thumbnail) . ');', 'class' => 'n2-ss-box-slider n2-box-selectable ' . ($slider['type'] == 'group' ? 'n2-ss-box-slider-group' : 'n2-ss-box-slider-slider') ); if ($slider['type'] == 'group') { $attributes['onclick'] = 'window.location="' . $appType->router->createUrl(array( 'sliders/' . $mode, array( 'groupID' => $slider['id'] ) )) . '";'; } else { if(empty($slider['alias'])){ $attributes['onclick'] = 'window.parent.postMessage(JSON.stringify({"action":"ss3embed","mode":"id","id":' . json_encode($slider['id']) . '}), "*");'; } else { $attributes['onclick'] = 'window.parent.postMessage(JSON.stringify({"action":"ss3embed","mode":"alias","alias":' . json_encode($slider['alias']) . '}), "*");'; } } $widget->init("box", array( 'attributes' => $attributes, 'lt' => implode('', $lt), 'lb' => implode('', $lb), 'rt' => implode('', $rt), 'rtAttributes' => array('class' => 'n2-on-hover'), 'rb' => implode('', $rb), 'placeholderContent' => N2Html::tag('div', array( 'class' => 'n2-box-placeholder-title n2-h4' ), $slider['title']) . N2Html::tag('div', array( 'class' => 'n2-box-placeholder-buttons' ), N2Html::tag('div', array( 'class' => 'n2-button n2-button-normal n2-button-s n2-radius-s n2-button-grey n2-h4 n2-right', ), $slider['slides'] | 0)) )); } public function order($groupID, $ids, $isReverse = false) { if (is_array($ids) && count($ids) > 0) { if ($isReverse) { $ids = array_reverse($ids); } $groupID = intval($groupID); if ($groupID <= 0) { $groupID = false; } $i = 0; foreach ($ids AS $id) { $id = intval($id); if ($id > 0) { if (!$groupID) { $this->db->update(array( 'ordering' => $i, ), array( "id" => $id )); } else { $this->xref->db->update(array( 'ordering' => $i, ), array( "slider_id" => $id, "group_id" => $groupID )); } $i++; } } return $i; } return false; } protected function getMaximalOrderValue() { $query = "SELECT MAX(ordering) AS ordering FROM " . $this->getTable() . ""; $result = $this->db->queryRow($query); if (isset($result['ordering'])) return $result['ordering'] + 1; return 0; } public static function renderGroupEditForm($slider) { $data = json_decode($slider['params'], true); if ($data == null) $data = array(); $data['title'] = $slider['title']; $data['type'] = $slider['type']; $data['thumbnail'] = $slider['thumbnail']; $data['alias'] = isset($slider['alias']) ? $slider['alias'] : ''; return self::editGroupForm($data); } private static function editGroupForm($data = array()) { $configurationXmlFile = dirname(__FILE__) . '/forms/slidergroup.xml'; N2Loader::import('libraries.form.form'); $form = new N2Form(N2Base::getApplication('smartslider') ->getApplicationType('backend')); $form->set('class', 'nextend-smart-slider-admin'); $form->loadArray($data); $form->loadXMLFile($configurationXmlFile); echo $form->render('slider'); N2Loader::import('libraries.form.element.url'); N2JS::addFirstCode('nextend.NextendElementUrlParams=' . N2ElementUrl::getNextendElementUrlParameters() . ';'); return $data; } public static function renderShapeDividerForm() { } public static function renderParticleForm() { } }