Files
redline.com.pl/modules/steasyvideo/controllers/admin/AdminStEasyVideoMiniatureBaseController.php
Jacek Pyziak eacf500d18 feat: Add YouTube video support and update admin templates
- Introduced a new YouTube tech integration in `youtube.min.js` for enhanced video playback.
- Created new admin template files for managing video settings, including `index.php` and `steasyvideo-pro.tpl`.
- Updated hook templates (`device_mode.tpl`, `forquickview.tpl`, `header.tpl`, `miniature.tpl`, `miniature_tb.tpl`, and predefined templates) to include video functionality.
- Implemented caching headers in several PHP files to improve performance.
- Ensured all new templates include proper licensing information and copyright notices.
2025-05-23 19:27:41 +02:00

318 lines
16 KiB
PHP

<?php
/**
* @author PrestaShop SA and Contributors <contact@prestashop.com>
* @copyright Since 2007 PrestaShop SA and Contributors
* @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0)
*/
if (!defined('_PS_VERSION_')) {
exit;
}
class AdminStEasyVideoMiniatureBaseController extends ModuleAdminController
{
protected $contr = '';
public function __construct()
{
$this->bootstrap = true;
parent::__construct();
$image_types_arr = array(
array('id' => '','name' => $this->l('Use the predefined value.'),)
);
$imagesTypes = ImageType::getImagesTypes('products');
foreach ($imagesTypes as $k => $imageType) {
if (Tools::substr($imageType['name'], -3) == '_2x') {
continue;
}
$image_types_arr[] = array('id' => $imageType['name'], 'name' => $imageType['name'].'('.$imageType['width'].'x'.$imageType['height'].')');
}
$display_options = array(
0 => $this->l('No'),
1 => $this->l('Buttons'),
2 => $this->l('Video players'),
3 => $this->l('Play on hover'),
4 => $this->l('Show buttons, play on hover'),
);
if($this->contr=='MOBILE')
unset($display_options[3], $display_options[4]);
$this->fields_options = array(
'general' => array(
'title' => $this->l('General Settings'),
'icon' => 'icon-cogs',
'fields' => array(
$this->module->_prefix_st.'MINIATURE_DISPLAY_'.$this->contr => array(
'type' => 'radio',
'cast' => 'intval',
'title' => $this->l('How to display videos'),
'validation' => 'isUnsignedInt',
'choices' => $display_options,
),
$this->module->_prefix_st.'MINIATURE_VIDEO_SELECTOR_'.$this->contr => array(
'type' => 'text',
'title' => $this->l('Video selector'),
'validation' => 'isAnything',
'desc' => $this->l('A slector inside the miniature.'),
),
$this->module->_prefix_st.'MINIATURE_VIDEO_APPEND_'.$this->contr => [
'title' => $this->l('How to add videos'),
'cast' => 'intval',
'type' => 'select',
'identifier' => 'id',
'list' => $this->module::$_appends,
],
$this->module->_prefix_st.'MINIATURE_VIDEO_POSITION_'.$this->contr => [
'type' => 'radio',
'cast' => 'intval',
'title' => $this->l('How to display players'),
'validation' => 'isUnsignedInt',
'choices' => array(
0 => $this->l('Display on an element (Position: absolute)'),
1 => $this->l('Normal document flow (Position: static)'),
),
],
$this->module->_prefix_st.'MINIATURE_BUTTON_SELECTOR_'.$this->contr => array(
'type' => 'text',
'title' => $this->l('Button selector'),
'validation' => 'isAnything',
'desc' => $this->l('A slector inside the miniature.'),
),
$this->module->_prefix_st.'MINIATURE_BUTTON_APPEND_'.$this->contr => [
'title' => $this->l('How to add buttons'),
'cast' => 'intval',
'type' => 'select',
'identifier' => 'id',
'list' => $this->module::$_appends,
],
$this->module->_prefix_st.'MINIATURE_BUTTON_POSITION_'.$this->contr => [
'type' => 'radio',
'cast' => 'intval',
'title' => $this->l('How to display buttons'),
'validation' => 'isUnsignedInt',
'choices' => array(
0 => $this->l('Display on an element (Position: absolute)'),
1 => $this->l('Normal document flow (Position: static)'),
),
],
$this->module->_prefix_st.'MINIATURE_BUTTON_LAYOUT_'.$this->contr => array(
'type' => 'radio',
'cast' => 'intval',
'title' => $this->l('Play button layout'),
'validation' => 'isUnsignedInt',
'choices' => array(
0 => $this->l('Icon'),
1 => $this->l('Text'),
2 => $this->l('Icon + text horizontally'),
3 => $this->l('Icon + text vertically'),
),
),
$this->module->_prefix_st.'MINIATURE_BUTTON_HIDE_'.$this->contr => array(
'title' => $this->l('Hide the play button when videos start play'),
'validation' => 'isBool',
'type' => 'bool',
'is_bool' => true,
),
$this->module->_prefix_st.'MINIATURE_SELECTOR_'.$this->contr => array(
'type' => 'text',
'title' => $this->l('Miniature selector'),
'validation' => 'isAnything',
'desc' => $this->l('The default value .js-product-miniature works for amolst all sites'),
),
$this->module->_prefix_st.'MINIATURE_VIDEO_TEMPLATE_'.$this->contr => [
'title' => $this->l('Video template'),
'validation' => 'isAnything',
'type' => 'textarea',
'cols' => 30,
'rows' => 5,
'desc' => array(
$this->l('They are four variables you can use: @placeholder_url@, @placeholder_width@, @placeholder_height@, and @thumbnail_url@.'),
$this->l('Disable the "Use HTMLPurifier Library" setting on the "BO>Preferences>General" page, otherwise the value won\'t be saved.'),
),
],
$this->module->_prefix_st.'MINIATURE_VIDEO_IMAGE_TYPE_'.$this->contr => [
'title' => $this->l('Placeholder image for videos'),
'validation' => 'isAnything',
'required' => false,
'type' => 'select',
'list' => $image_types_arr,
'identifier' => 'id',
],
$this->module->_prefix_st.'MINIATURE_BUTTON_TEMPLATE_'.$this->contr => [
'title' => $this->l('Button template'),
'validation' => 'isAnything',
'type' => 'textarea',
'cols' => 30,
'rows' => 5,
'desc' => array(
$this->l('They are four variables you can use: @placeholder_url@, @placeholder_width@, @placeholder_height@, and @thumbnail_url@.'),
$this->l('Disable the "Use HTMLPurifier Library" setting on the "BO>Preferences>General" page, otherwise the value won\'t be saved.'),
),
],
$this->module->_prefix_st.'MINIATURE_BUTTON_IMAGE_TYPE_'.$this->contr => [
'title' => $this->l('Placeholder image for buttons'),
'validation' => 'isAnything',
'required' => false,
'type' => 'select',
'list' => $image_types_arr,
'identifier' => 'id',
],
$this->module->_prefix_st.'MINIATURE_VIDEO_ZINDEX_'.$this->contr => [
'title' => $this->l('Z-index:'),
'validation' => 'isUnsignedId',
'required' => false,
'cast' => 'intval',
'type' => 'text',
],
$this->module->_prefix_st.'MINIATURE_POINTER_EVENTS_NONE_'.$this->contr => array(
'title' => $this->l('Link to the product page'),
'validation' => 'isBool',
'type' => 'bool',
'is_bool' => true,
'desc' => $this->l('In most cases, clicking on the video goes to the product page without enabling this setting. But if that\'s not your case, then enable this setting may help.'),
),
),
'submit' => array('title' => $this->l('Save all')),
),
'player' => array(
'title' => $this->l('Player'),
'icon' => 'icon-cogs',
'fields' => array(
$this->module->_prefix_st.'MINIATURE_AUTOPLAY_'.$this->contr => array(
'title' => $this->l('Autoplay'),
'validation' => 'isBool',
'type' => 'bool',
'is_bool' => true,
'desc' => $this->l('When videos are displayed in video palyers'),
),
$this->module->_prefix_st.'MINIATURE_MUTED_'.$this->contr => array(
'title' => $this->l('Muted'),
'validation' => 'isBool',
'type' => 'bool',
'is_bool' => true,
'desc' => $this->l('Only muted videos can be autoplay'),
),
$this->module->_prefix_st.'MINIATURE_LOOP_'.$this->contr => array(
'title' => $this->l('Loop'),
'validation' => 'isBool',
'type' => 'bool',
'is_bool' => true,
),
$this->module->_prefix_st.'MINIATURE_CONTROLS_'.$this->contr => array(
'title' => $this->l('Show controls'),
'validation' => 'isBool',
'type' => 'bool',
'is_bool' => true,
),
),
'submit' => array('title' => $this->l('Save all')),
),
'player_style' => array(
'title' => $this->l('Player style'),
'icon' => 'icon-cogs',
'fields' => array(
$this->module->_prefix_st.'MINIATURE_PLAYER_BG_'.$this->contr => [
'title' => $this->l('Color'),
'validation' => 'isColor',
'type' => 'color',
'size' => 5,
'name' => $this->module->_prefix_st.'MINIATURE_PLAYER_BG_'.$this->contr,
],
),
'submit' => array('title' => $this->l('Save all')),
),
'button_style' => array(
'title' => $this->l('Play button style'),
'icon' => 'icon-cogs',
'fields' => array(
$this->module->_prefix_st.'MINIATURE_PLAY_BTN_POSITION_'.$this->contr => [
'type' => 'radio',
'cast' => 'intval',
'title' => $this->l('Position'),
'validation' => 'isUnsignedInt',
'choices' => array(
0 => $this->l('Center'),
1 => $this->l('Top left'),
2 => $this->l('Top right'),
3 => $this->l('Bottom right'),
4 => $this->l('Bottom left'),
),
],
$this->module->_prefix_st.'MINIATURE_PLAY_BTN_OFFSET_X_'.$this->contr => [
'title' => $this->l('Offset x'),
'validation' => 'isUnsignedInt',
'cast' => 'intval',
'type' => 'text',
'suffix' => $this->l('pixels'),
],
$this->module->_prefix_st.'MINIATURE_PLAY_BTN_OFFSET_Y_'.$this->contr => [
'title' => $this->l('Offset y'),
'validation' => 'isUnsignedInt',
'cast' => 'intval',
'type' => 'text',
'suffix' => $this->l('pixels'),
],
) + $this->module->getButtonFiledsOptions('MINIATURE_PLAY', '_'.$this->contr) + array(
$this->module->_prefix_st.'MINIATURE_PLAY_TEXT_COLOR_'.$this->contr => [
'title' => $this->l('"Play" text color'),
'validation' => 'isColor',
'type' => 'color',
'size' => 5,
'name' => $this->module->_prefix_st.'MINIATURE_PLAY_TEXT_COLOR_'.$this->contr,
],
$this->module->_prefix_st.'MINIATURE_PLAY_TEXT_BG_'.$this->contr => [
'title' => $this->l('"Play" text background'),
'validation' => 'isColor',
'type' => 'color',
'size' => 5,
'name' => $this->module->_prefix_st.'MINIATURE_PLAY_TEXT_BG_'.$this->contr,
],
),
'submit' => array('title' => $this->l('Save all')),
),
'close_style' => array(
'title' => $this->l('Close button style'),
'icon' => 'icon-cogs',
'fields' => array(
$this->module->_prefix_st.'MINIATURE_CLOSE_BTN_POSITION_'.$this->contr => [
'type' => 'radio',
'cast' => 'intval',
'title' => $this->l('Position'),
'validation' => 'isUnsignedInt',
'choices' => array(
0 => $this->l('Center'),
1 => $this->l('Top left'),
2 => $this->l('Top right'),
3 => $this->l('Bottom right'),
4 => $this->l('Bottom left'),
),
],
$this->module->_prefix_st.'MINIATURE_CLOSE_BTN_OFFSET_X_'.$this->contr => [
'title' => $this->l('Offset x'),
'validation' => 'isUnsignedInt',
'cast' => 'intval',
'type' => 'text',
'suffix' => $this->l('pixels'),
],
$this->module->_prefix_st.'MINIATURE_CLOSE_BTN_OFFSET_Y_'.$this->contr => [
'title' => $this->l('Offset y'),
'validation' => 'isUnsignedInt',
'cast' => 'intval',
'type' => 'text',
'suffix' => $this->l('pixels'),
],
) + $this->module->getButtonFiledsOptions('MINIATURE_CLOSE', '_'.$this->contr),
'submit' => array('title' => $this->l('Save all')),
),
);
}
public function postProcess()
{
parent::postProcess();
}
public function setMedia($isNewTheme = false)
{
parent::setMedia($isNewTheme);
$this->addJs(_MODULE_DIR_.$this->module->name.'/views/js/admin.js?108');
}
}