812 lines
27 KiB
PHP
812 lines
27 KiB
PHP
<?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;
|
|
}
|
|
} |