153 lines
5.9 KiB
PHP
153 lines
5.9 KiB
PHP
<?php
|
|
|
|
namespace Websmid\CustomHtml\Model;
|
|
|
|
use ObjectModel;
|
|
use Db;
|
|
|
|
class CustomHtmlBlock extends ObjectModel
|
|
{
|
|
/** @var int */
|
|
public $id;
|
|
|
|
/** @var int */
|
|
public $id_ws_customhtml_group;
|
|
|
|
/** @var string */
|
|
public $title = '';
|
|
|
|
/** @var string */
|
|
public $type = 'html';
|
|
|
|
/** @var string */
|
|
public $content = '';
|
|
|
|
/** @var string */
|
|
public $custom_class = '';
|
|
|
|
/** @var string */
|
|
public $description = '';
|
|
|
|
/** @var string */
|
|
public $extra_description = '';
|
|
|
|
/** @var string */
|
|
public $link = '';
|
|
|
|
/** @var string */
|
|
public $link_text = '';
|
|
|
|
/** @var string */
|
|
public $image = '';
|
|
|
|
/** @var string */
|
|
public $alert_type = 'info';
|
|
|
|
/** @var int */
|
|
public $timeout = 0;
|
|
|
|
/** @var string */
|
|
public $slider_mode = 'always';
|
|
|
|
/** @var float */
|
|
public $slides_per_view_mobile = 1;
|
|
|
|
/** @var float */
|
|
public $slides_per_view_tablet = 2;
|
|
|
|
/** @var float */
|
|
public $slides_per_view_desktop = 3;
|
|
|
|
/** @var int */
|
|
public $autoplay_delay = 0;
|
|
|
|
/** @var int */
|
|
public $active = 1;
|
|
|
|
/** @var int */
|
|
public $show_title = 0;
|
|
|
|
/** @var int */
|
|
public $ordering = 0;
|
|
|
|
/** @var string */
|
|
public $date_add;
|
|
|
|
/** @var string */
|
|
public $date_upd;
|
|
|
|
public static $definition = [
|
|
'table' => 'ws_customhtml',
|
|
'primary' => 'id_ws_customhtml',
|
|
'multilang' => true,
|
|
'fields' => [
|
|
'id_ws_customhtml_group' => ['type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true],
|
|
'title' => ['type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'required' => true, 'size' => 256, 'lang' => true],
|
|
'type' => ['type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'required' => true, 'size' => 32],
|
|
'content' => ['type' => self::TYPE_HTML, 'validate' => 'isCleanHtml', 'lang' => true],
|
|
'custom_class' => ['type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'required' => false, 'size' => 128],
|
|
'description' => ['type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'required' => false, 'size' => 1024, 'lang' => true],
|
|
'extra_description' => ['type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'required' => false, 'size' => 1024, 'lang' => true],
|
|
'link' => ['type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'required' => false, 'size' => 512, 'lang' => true],
|
|
'link_text' => ['type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'required' => false, 'size' => 128, 'lang' => true],
|
|
'image' => ['type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'required' => false, 'size' => 255],
|
|
'alert_type' => ['type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'required' => false, 'size' => 16],
|
|
'timeout' => ['type' => self::TYPE_INT, 'validate' => 'isUnsignedInt', 'required' => false],
|
|
'slider_mode' => ['type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'required' => false, 'size' => 16],
|
|
'slides_per_view_mobile' => ['type' => self::TYPE_FLOAT, 'validate' => 'isUnsignedFloat', 'required' => false],
|
|
'slides_per_view_tablet' => ['type' => self::TYPE_FLOAT, 'validate' => 'isUnsignedFloat', 'required' => false],
|
|
'slides_per_view_desktop' => ['type' => self::TYPE_FLOAT, 'validate' => 'isUnsignedFloat', 'required' => false],
|
|
'autoplay_delay' => ['type' => self::TYPE_INT, 'validate' => 'isUnsignedInt', 'required' => false],
|
|
'active' => ['type' => self::TYPE_BOOL, 'validate' => 'isBool'],
|
|
'show_title' => ['type' => self::TYPE_BOOL, 'validate' => 'isBool'],
|
|
'ordering' => ['type' => self::TYPE_INT, 'validate' => 'isInt'],
|
|
'date_add' => ['type' => self::TYPE_DATE, 'validate' => 'isDate'],
|
|
'date_upd' => ['type' => self::TYPE_DATE, 'validate' => 'isDate'],
|
|
],
|
|
];
|
|
|
|
public static function getBannerImageDir(): string
|
|
{
|
|
return _PS_MODULE_DIR_ . 'ws_customhtml/views/img/banners/';
|
|
}
|
|
|
|
public static function getBannerImageUrl(string $filename): string
|
|
{
|
|
if (empty($filename)) {
|
|
return '';
|
|
}
|
|
|
|
return _MODULE_DIR_ . 'ws_customhtml/views/img/banners/' . $filename;
|
|
}
|
|
|
|
public static function getActiveByGroupIds(array $groupIds, int $idLang): array
|
|
{
|
|
$groupIds = array_map('intval', $groupIds);
|
|
|
|
if (empty($groupIds)) {
|
|
return [];
|
|
}
|
|
|
|
$result = Db::getInstance()->executeS(
|
|
'SELECT wch.`id_ws_customhtml`, wch.`id_ws_customhtml_group`, wchl.`title`, wch.`type`, wchl.`content`, wch.`custom_class`,
|
|
wchl.`description`, wchl.`extra_description`, wchl.`link`, wchl.`link_text`, wch.`image`, wch.`alert_type`, wch.`timeout`,
|
|
wch.`slider_mode`, wch.`slides_per_view_mobile`, wch.`slides_per_view_tablet`, wch.`slides_per_view_desktop`, wch.`autoplay_delay`,
|
|
wch.`active`, wch.`show_title`, wch.`ordering`
|
|
FROM `' . _DB_PREFIX_ . 'ws_customhtml` wch
|
|
LEFT JOIN `' . _DB_PREFIX_ . 'ws_customhtml_lang` wchl
|
|
ON wchl.`id_ws_customhtml` = wch.`id_ws_customhtml` AND wchl.`id_lang` = ' . (int) $idLang . '
|
|
WHERE wch.`id_ws_customhtml_group` IN (' . implode(',', $groupIds) . ')
|
|
AND wch.`active` = 1
|
|
ORDER BY wch.`ordering` ASC'
|
|
);
|
|
|
|
$blocksByGroup = [];
|
|
|
|
foreach ($result as $row) {
|
|
$blocksByGroup[(int) $row['id_ws_customhtml_group']][] = $row;
|
|
}
|
|
|
|
return $blocksByGroup;
|
|
}
|
|
}
|