* @copyright 2007-2022 Leotheme
* @license http://leotheme.com - prestashop template provider
*/
namespace LeoElements;
use LeoElements\Leo_Helper;
if ( ! defined( '_PS_VERSION_' ) ) {
exit; // Exit if accessed directly.
}
class Widget_LeoBootstrapmenu extends Widget_Base
{
/**
* Get widget name.
*
* Retrieve accordion widget name.
*
* @since 1.0
* @access public
*
* @return string Widget name.
*/
public function get_name() {
return 'LeoBootstrapmenu';
}
/**
* Get widget title.
*
* Retrieve accordion widget title.
*
* @since 1.0
* @access public
*
* @return string Widget title.
*/
public function get_title() {
return Leo_Helper::__( 'Leo Megamenu Module', 'elementor' );
}
/**
* Get widget icon.
*
* Retrieve accordion widget icon.
*
* @since 1.0
* @access public
*
* @return string Widget icon.
*/
public function get_icon() {
return 'eicon-nav-menu';
}
/**
* Get widget keywords.
*
* Retrieve the list of keywords the widget belongs to.
*
* @since 1.0.0
* @access public
*
* @return array Widget keywords.
*/
public function get_keywords() {
return [ 'leo', 'ap', 'menu', 'megamenu', 'bootstrapmenu'];
}
public function get_categories() {
return [ 'leoelements' ];
}
/**
* Register accordion widget controls.
*
* Adds different input fields to allow the user to change and customize the widget settings.
*
* @since 1.0
* @access protected
*/
protected function _register_controls()
{
$this->_register_content_controls();
}
protected function _register_content_controls()
{
$source = [
'n' => Leo_Helper::__('None', 'elementor'),
];
$module = \Module::getInstanceByName( 'leobootstrapmenu' );
$megamenus = $module->getGroups();
if ($megamenus && count($megamenus) > 0) {
foreach( $megamenus as $slideshow ) {
$value = $slideshow['randkey'];
$title = $slideshow['title'];
$source[$value] = $title;
}
}
$this->start_controls_section(
'section_options',
[
'label' => Leo_Helper::__( 'Megamenu Options', 'elementor' ),
]
);
$this->add_control(
'source',
[
'label' => Leo_Helper::__('Source of Megamenu', 'elementor'),
'type' => Controls_Manager::SELECT,
'frontend_available' => true,
'default' => 'n',
'tablet_default' => 'n',
'mobile_default' => 'n',
'options' => $source,
'frontend_available' => true,
]
);
$link_leobootstrapmenu = '';
if(isset($GLOBALS['gb_leoelements']['url'])) {
$link_leobootstrapmenu = $GLOBALS['gb_leoelements']['url']['link_leobootstrapmenu'];
}
$this->add_control(
'anchor_note',
[
'type' => Controls_Manager::RAW_HTML,
'raw' => sprintf( 'Click to the link to manage Megamenu
Leo Megamenu Module ', $link_leobootstrapmenu ),
]
);
$this->end_controls_section();
}
/**
* Render accordion widget output on the frontend.
*
* Written in PHP and used to generate the final HTML.
*
* @since 1.0
* @access protected
*/
protected function render()
{
$return = '';
if ( Leo_Helper::is_admin() ) {
return $return;
}
$settings = $this->get_settings_for_display();
$assign = array(
'apContent' => '',
'formAtts' => array(
'form_id' => 'form_'.$settings['source'],
'megamenu_group' => $settings['source'], // 'ac70e5b81cccd4671f8c75a464e569bd',
'class' => 'LeoBootstrapmenu',
'override_folder' => '',
'rtl' => '0',
),
'homeSize' => array(
'width' => '500',
'height' => '563',
),
'mediumSize' => array(
'width' => '378',
'height' => '472',
),
'img_manu_dir' => '/task_live_editor/leo_1782_elements_free/img/m/',
'comparator_max_item' => '0',
'compared_products' => array(),
'tpl_dir' => 'D:\HOST\localhost\leo_tuanvu\task_live_editor\leo_1782_elements_free/themes/classic/',
'PS_CATALOG_MODE' => '0',
'priceDisplay' => '1',
'PS_STOCK_MANAGEMENT' => '1',
'page_name' => 'index',
);
if (\Module::isInstalled('leobootstrapmenu') && \Module::isEnabled('leobootstrapmenu')) {
$module = \Module::getInstanceByName( 'leobootstrapmenu' );
$id_shop = (int)\Context::getContext()->shop->id;
$assign['formAtts']['isEnabled'] = true;
$link_array = explode(',', $assign['formAtts']['megamenu_group']);
if ($link_array && !is_numeric($link_array['0'])) {
$result = array();
foreach ($link_array as $val) {
//my module call this function from menu and we import it
$temp = \BtmegamenuGroup::cacheGroupsByFields(array('randkey' => $val));
if ($temp) {
$result[] = $temp;
}
}
if (is_array($result) && !empty($result)) {
$where = '';
foreach ($result as $group) {
// validate module
$where .= ($where == '') ? $group['id_btmegamenu_group'] : ','.$group['id_btmegamenu_group'];
$where .= ',0';
}
$assign['formAtts']['megamenu_group'] = $where;
$form_id = explode("_", $assign['formAtts']['form_id']);
$assign['content_megamenu'] = $module->processHookCallBack($assign['formAtts']['megamenu_group'], $form_id[1]);
}else{
$assign['formAtts']['isEnabled'] = false;
$assign['formAtts']['lib_has_error'] = true;
$assign['formAtts']['lib_error'] = 'Can not show LeoBootstrapMenu via Leoelements. Please check that The Group of LeoBootstrapMenu is exist.';
}
}
} else {
// validate module
$assign['formAtts']['isEnabled'] = false;
$assign['formAtts']['lib_has_error'] = true;
$assign['formAtts']['lib_error'] = 'Can not show LeoBootstrapmenu via Leoelements. Please enable LeoBootstrapmenu module.';
}
$context = \Context::getContext();
if ($assign) {
foreach ($assign as $key => $ass) {
$context->smarty->assign(array($key => $ass));
}
}
$template_file_name = 'module:/leoelements/views/templates/front/LeoBootstrapmenu.tpl';
$out_put = '';
$out_put .= $context->smarty->fetch( $template_file_name );
echo $out_put;
return $return;
}
/**
* Render accordion widget output in the editor.
*
* Written as a Backbone JavaScript template and used to generate the live preview.
*
* @since 1.0
* @access protected
*/
protected function _content_template()
{
# here
}
protected function _render_view_setting_attributes( $settings, $attr_class_section = [], $attr_class_wrapper = [] )
{
$options = $settings;
return $options;
}
public function wp_parse_args( $args, $defaults = [] ) {
if ( is_object( $args ) ) {
$parsed_args = get_object_vars( $args );
} elseif ( is_array( $args ) ) {
$parsed_args =& $args;
} else {
self::wp_parse_str( $args, $parsed_args );
}
if ( is_array( $defaults ) && $defaults ) {
return array_merge( $defaults, $parsed_args );
}
return $parsed_args;
}
public function wp_parse_str( $string, &$array ) {
parse_str( $string, $array );
$array = Leo_Helper::apply_filters( 'wp_parse_str', $array );
}
public function renderProduct($settings = array(), $item)
{
$module = \Module::getInstanceByName('leoelements');
$context = \Context::getContext();
$settings = $this->wp_parse_args( $settings, $item );
$data = array();
if( $settings['source'] != 's' ){
$data = $module->_prepProducts( $settings );
}else{
$data = $module->_prepProductsSelected( $settings );
}
if($data) {
$products_for_template = $data;
$context->smarty->assign(
array(
'leo_products' => $products_for_template,
'elementprefix' => 'single-product',
'theme_template_path' => _PS_THEME_DIR_ . 'templates/catalog/_partials/miniatures/product.tpl',
'settings' => $settings,
)
);
$template_file_name = 'module:/leoelements/views/templates/front/ApProductTab2.tpl';
$out_put = $context->smarty->fetch( $template_file_name );
return $out_put;
}
return '';
}
}