Файл: concrete5.7.5.6/concrete/blocks/image_slider/controller.php
Строк: 189
<?php
namespace ConcreteBlockImageSlider;
use ConcreteCoreBlockBlockController;
use Database;
use Page;
use ConcreteCoreEditorLinkAbstractor;
use Core;
class Controller extends BlockController
{
protected $btTable = 'btImageSlider';
protected $btExportTables = array('btImageSlider', 'btImageSliderEntries');
protected $btInterfaceWidth = "600";
protected $btWrapperClass = 'ccm-ui';
protected $btInterfaceHeight = "550";
protected $btCacheBlockRecord = true;
protected $btExportFileColumns = array('fID');
protected $btCacheBlockOutput = true;
protected $btCacheBlockOutputOnPost = true;
protected $btCacheBlockOutputForRegisteredUsers = false;
protected $btIgnorePageThemeGridFrameworkContainer = true;
public function getBlockTypeDescription()
{
return t("Display your images and captions in an attractive slideshow format.");
}
public function getBlockTypeName()
{
return t("Image Slider");
}
public function getSearchableContent()
{
$content = '';
$db = Database::get();
$v = array($this->bID);
$q = 'select * from btImageSliderEntries where bID = ?';
$r = $db->query($q, $v);
foreach ($r as $row) {
$content .= $row['title'].' ';
$content .= $row['description'].' ';
}
return $content;
}
public function add()
{
$this->requireAsset('core/file-manager');
$this->requireAsset('core/sitemap');
$this->requireAsset('redactor');
}
public function edit()
{
$this->requireAsset('core/file-manager');
$this->requireAsset('core/sitemap');
$this->requireAsset('redactor');
$db = Database::get();
$query = $db->GetAll('SELECT * from btImageSliderEntries WHERE bID = ? ORDER BY sortOrder', array($this->bID));
$this->set('rows', $query);
}
public function composer()
{
$this->edit();
}
public function registerViewAssets($outputContent = '')
{
$al = ConcreteCoreAssetAssetList::getInstance();
$this->requireAsset('javascript', 'jquery');
$this->requireAsset('responsive-slides');
$al->register('javascript', 'responsiveslides', 'blocks/image_slider/responsiveslides.js');
$this->requireAsset('javascript', 'blocks/image_slider/responsiveslides');
$al->register('css', 'responsiveslides', 'blocks/image_slider/responsiveslides.css');
$this->requireAsset('css', 'blocks/image_slider/responsiveslides');
}
public function getEntries()
{
$db = Database::get();
$r = $db->GetAll('SELECT * from btImageSliderEntries WHERE bID = ? ORDER BY sortOrder', array($this->bID));
// in view mode, linkURL takes us to where we need to go whether it's on our site or elsewhere
$rows = array();
foreach ($r as $q) {
if (!$q['linkURL'] && $q['internalLinkCID']) {
$c = Page::getByID($q['internalLinkCID'], 'ACTIVE');
$q['linkURL'] = $c->getCollectionLink();
$q['linkPage'] = $c;
}
$q['description'] = LinkAbstractor::translateFrom($q['description']);
$rows[] = $q;
}
return $rows;
}
public function view()
{
$this->set('rows', $this->getEntries());
}
public function duplicate($newBID)
{
parent::duplicate($newBID);
$db = Database::get();
$v = array($this->bID);
$q = 'select * from btImageSliderEntries where bID = ?';
$r = $db->query($q, $v);
while ($row = $r->FetchRow()) {
$db->execute('INSERT INTO btImageSliderEntries (bID, fID, linkURL, title, description, sortOrder, internalLinkCID) values(?,?,?,?,?,?,?)',
array(
$newBID,
$row['fID'],
$row['linkURL'],
$row['title'],
$row['description'],
$row['sortOrder'],
$row['internalLinkCID'],
)
);
}
}
public function delete()
{
$db = Database::get();
$db->delete('btImageSliderEntries', array('bID' => $this->bID));
parent::delete();
}
public function validate($args)
{
$error = Core::make('helper/validation/error');
$timeout = intval($args['timeout']);
$speed = intval($args['speed']);
if (!$timeout) {
$error->add(t('Slide Duration must be greater than 0.'));
}
if (!$speed) {
$error->add(t('Slide Transition Speed must be greater than 0.'));
}
// https://github.com/viljamis/ResponsiveSlides.js/issues/132#issuecomment-12543345
// "The 'timeout' (amount of time spent on one slide) has to be at least 100 bigger than 'speed', otherwise the function simply returns."
if(($timeout - $speed) < 100) {
$error->add(t('Slide Duration must be at least 100 ms greater than the Slide Transition Speed.'));
}
return $error;
}
public function save($args)
{
$args += array(
'timeout' => 4000,
'speed' => 500,
);
$args['timeout'] = intval($args['timeout']);
$args['speed'] = intval($args['speed']);
$args['noAnimate'] = isset($args['noAnimate']) ? 1 : 0;
$args['pause'] = isset($args['pause']) ? 1 : 0;
$db = Database::get();
$db->execute('DELETE from btImageSliderEntries WHERE bID = ?', array($this->bID));
parent::save($args);
if (isset($args['sortOrder'])) {
$count = count($args['sortOrder']);
$i = 0;
while ($i < $count) {
$linkURL = $args['linkURL'][$i];
$internalLinkCID = $args['internalLinkCID'][$i];
switch (intval($args['linkType'][$i])) {
case 1:
$linkURL = '';
break;
case 2:
$internalLinkCID = 0;
break;
default:
$linkURL = '';
$internalLinkCID = 0;
break;
}
if (isset($args['description'][$i])) {
$args['description'][$i] = LinkAbstractor::translateTo($args['description'][$i]);
}
$db->execute('INSERT INTO btImageSliderEntries (bID, fID, title, description, sortOrder, linkURL, internalLinkCID) values(?, ?, ?, ?,?,?,?)',
array(
$this->bID,
intval($args['fID'][$i]),
$args['title'][$i],
$args['description'][$i],
$args['sortOrder'][$i],
$linkURL,
$internalLinkCID,
)
);
++$i;
}
}
}
}