Files
kalsport.pl/modules/appagebuilder/classes/shortcodes/ApBlockLink.php
2024-11-05 12:22:50 +01:00

480 lines
20 KiB
PHP

<?php
/**
* 2007-2015 Apollotheme
*
* NOTICE OF LICENSE
*
* ApPageBuilder is module help you can build content for your shop
*
* DISCLAIMER
*
* @author Apollotheme <apollotheme@gmail.com>
* @copyright 2007-2019 Apollotheme
* @license http://apollotheme.com - prestashop template provider
*/
if (!defined('_PS_VERSION_')) {
# module validation
exit;
}
class ApBlockLink extends ApShortCodeBase
{
public $name = 'ApBlockLink';
public $for_module = 'manage';
public function getInfo()
{
return array('label' => $this->l('Block Link'),
'position' => 5,
'desc' => $this->l('Create List Block Links'),
'icon_class' => 'icon icon-list',
'tag' => 'content');
}
public function getConfigList()
{
$types = array(
array(
'value' => 'link-url',
'text' => $this->l('URL')
),
array(
'value' => 'link-category',
'text' => $this->l('Category')
),
array(
'value' => 'link-product',
'text' => $this->l('Product')
),
array(
'value' => 'link-manufacture',
'text' => $this->l('Manufacture')
),
array(
'value' => 'link-supplier',
'text' => $this->l('Supplier')
),
array(
'value' => 'link-cms',
'text' => $this->l('CMS')
),
array(
'value' => 'link-page',
'text' => $this->l('Page Controller')
),
);
$target = array(
array(
'value' => '_blank',
'text' => $this->l('Blank ( New Tab)')
),
array(
'value' => '_self',
'text' => $this->l('Self ( Same Tab)')
),
array(
'value' => '_parent',
'text' => $this->l('Parent')
),
array(
'value' => '_top',
'text' => $this->l('Top')
),
);
$accordion_type = array(
array(
'value' => 'full',
'text' => $this->l('Always Full')
),
array(
'value' => 'accordion',
'text' => $this->l('Always Accordion')
),
array(
'value' => 'accordion_small_screen',
'text' => $this->l('Accordion at small screen')
),
);
$page_controller = array();
foreach (Meta::getPages() as $page) {
if (strpos($page, 'module') === false) {
$array_tmp = array();
$array_tmp['link'] = $page;
$array_tmp['name'] = $page;
array_push($page_controller, $array_tmp);
}
}
# $sqlFilter : NOT SHOW ROOT CATEOGRY, ONLY SHOW FROM HOME
$list_categories = Category::getAllCategoriesName(null, Context::getContext()->language->id, true, null, true, ' AND c.id_parent != 0 ');
$languages = Language::getLanguages(true, Context::getContext()->shop->id);
$languages = Language::getLanguages();
$list_id_lang = array();
foreach ($languages as $languages_val) {
array_push($list_id_lang, $languages_val['id_lang']);
}
// Get value with keys special
$languages = Language::getLanguages(false);
$config_val = array();
$list_field = Tools::getValue('list_field');
$list_field = array_filter(explode(',', $list_field));
foreach ($list_field as $field) {
$key = $field;
$config_val[$key] = str_replace($this->str_search, $this->str_relace_html_admin, Tools::getValue($key));
}
$list_field_lang = Tools::getValue('list_field_lang');
$list_field_lang = array_filter(explode(',', $list_field_lang));
foreach ($languages as $lang) {
foreach ($list_field_lang as $field) {
$key = $field.'_'.$lang['id_lang'];
$config_val[$key] = str_replace($this->str_search, $this->str_relace_html_admin, Tools::getValue($key));
}
}
$inputs = array(
array(
'type' => 'html',
'name' => 'default_html',
'html_content' => '<script>var listData = '.Tools::jsonEncode($config_val).';</script>',
'form_group_class' => 'hidden',
),
array(
'type' => 'html',
'name' => 'default_html',
'html_content' => '<script>
var totalLanguage = "'.count($languages).'";
var list_id_lang = \''.Tools::jsonEncode($list_id_lang).'\';
var remove_button_text = "'.$this->l('Remove Link').'";
var duplicate_button_text = "'.$this->l('Duplicate Link').'";
</script>',
'form_group_class' => 'hidden',
),
array(
'type' => 'hidden',
'name' => 'total_link',
'default' => '0',
'form_group_class' => 'hidden',
),
array(
'type' => 'hidden',
'name' => 'list_id_link',
'default' => '',
'form_group_class' => 'hidden',
),
array(
'type' => 'hidden',
'name' => 'list_field',
'default' => '',
'form_group_class' => 'hidden',
),
array(
'type' => 'hidden',
'name' => 'list_field_lang',
'default' => '',
'form_group_class' => 'hidden',
),
array(
'type' => 'blockLink',
'name' => 'title',
'lang' => 'true',
'label' => $this->l('Title'),
'default' => '',
'form_group_class' => 'hidden',
),
array(
'type' => 'text',
'name' => 'title',
'label' => $this->l('Widget Title'),
'hint' => $this->l('Auto hide if leave it blank'),
'lang' => 'true',
'default' => '',
),
array(
'type' => 'textarea',
'name' => 'sub_title',
'label' => $this->l('Widget Sub Title'),
'lang' => true,
'values' => '',
'autoload_rte' => false,
'default' => '',
),
array(
'type' => 'text',
'name' => 'class',
'label' => $this->l('CSS Class'),
'default' => '',
),
array(
'type' => 'select',
'label' => $this->l('Accordion Type'),
'name' => 'accordion_type',
'options' => array(
'query' => $accordion_type,
'id' => 'value',
'name' => 'text' ),
'default' => 'full',
'hint' => $this->l('Select a Accordion Type'),
),
array(
'type' => 'html',
'name' => 'default_html',
'html_content' => '<button type="button" class="add-new-link btn btn-default">
<i class="process-icon-new"></i> '.$this->l('Add new link').'</button>',
'form_group_class' => 'frm-add-new-link',
),
array(
'type' => 'text',
'label' => $this->l('Title'),
'name' => 'link_title',
'lang' => true,
'default' => '',
'class' => 'tmp',
'form_group_class' => 'parent-tmp hidden',
),
array(
'type' => 'select',
'label' => $this->l('Target Type'),
'name' => 'target_type',
'options' => array(
'query' => $target,
'id' => 'value',
'name' => 'text' ),
'default' => '_self',
'class' => 'tmp',
'form_group_class' => 'parent-tmp hidden',
),
array(
'type' => 'select',
'label' => $this->l('Link Type'),
'name' => 'link_type',
'options' => array(
'query' => $types,
'id' => 'value',
'name' => 'text' ),
'default' => 'link-url',
'class' => 'form-action tmp',
'hint' => $this->l('Select a link type'),
'form_group_class' => 'parent-tmp hidden',
),
array(
'type' => 'text',
'label' => $this->l('URL'),
'name' => 'link_url',
'lang' => true,
'default' => '',
'class' => 'tmp',
'form_group_class' => 'link_type_sub link_type-link-url parent-tmp hidden',
),
array(
'type' => 'select',
'label' => $this->l('CMS'),
'name' => 'cmspage_id',
'options' => array('query' => CMS::listCms(Context::getContext()->language->id, false, true),
'id' => 'id_cms',
'name' => 'meta_title'),
'default' => '',
'class' => 'tmp',
'form_group_class' => 'link_type_sub link_type-link-cms parent-tmp hidden',
),
array(
'type' => 'select',
'label' => $this->l('Categories'),
'name' => 'category_id',
'options' => array('query' => $list_categories,
'id' => 'id_category',
'name' => 'name'),
'default' => '',
'class' => 'tmp',
'form_group_class' => 'link_type_sub link_type-link-category parent-tmp hidden',
),
array(
'type' => 'text',
'label' => $this->l('Product ID'),
'name' => 'product_id',
'default' => '',
'class' => 'tmp',
'form_group_class' => 'link_type_sub link_type-link-product parent-tmp hidden',
'hint' => $this->l('Enter a product id'),
),
array(
'type' => 'select',
'label' => $this->l('Manufacture'),
'name' => 'manufacture_id',
'options' => array('query' => Manufacturer::getManufacturers(false, Context::getContext()->language->id, true),
'id' => 'id_manufacturer',
'name' => 'name'),
'default' => '',
'class' => 'tmp',
'form_group_class' => 'link_type_sub link_type-link-manufacture parent-tmp hidden',
),
array(
'type' => 'select',
'label' => $this->l('Supplier'),
'name' => 'supplier_id',
'options' => array('query' => Supplier::getSuppliers(false, Context::getContext()->language->id, true),
'id' => 'id_supplier',
'name' => 'name'),
'default' => '',
'class' => 'tmp',
'form_group_class' => 'link_type_sub link_type-link-supplier parent-tmp hidden',
),
array(
'type' => 'select',
'label' => $this->l('Page'),
'name' => 'page_id',
'options' => array('query' => $page_controller,
'id' => 'link',
'name' => 'name'),
'default' => '',
'class' => 'tmp',
'form_group_class' => 'link_type_sub link_type-link-page parent-tmp hidden',
),
array(
'type' => 'text',
'label' => $this->l('Parameter of page'),
'name' => 'page_param',
'default' => '',
'hint' => $this->l('Param on URL. Example var=100&var2=110&var3=120'),
'class' => 'tmp',
'form_group_class' => 'link_type_sub link_type-link-page parent-tmp hidden',
),
);
return $inputs;
}
public function getConfigValue()
{
$config_val = parent::getConfigValue();
$config_val['target_type'] = '_self';
return $config_val;
}
public function endRenderForm()
{
$this->helper->module = new $this->module_name();
}
public function prepareFontContent($assign, $module = null)
{
unset($module);
$formAtts = $assign['formAtts'];
$formAtts['links'] = array();
if (!isset($formAtts['list_id_link'])) {
$assign['formAtts']['lib_has_error'] = true;
$assign['formAtts']['lib_error'] = 'Can not show this Blocklink. Please remove it and create new Blocklink in Appbuilder Profile.';
return $assign;
}
$id_forms = $formAtts['list_id_link'];
$id_forms = array_filter(explode(',', $id_forms));
foreach ($id_forms as $id_form) {
$index = '_'.$id_form;
$indexlang = $index.'_'.Context::getContext()->language->id;
$link = array();
switch ($formAtts['link_type'.$index]) {
case 'link-url':
if (isset($formAtts['link_title'.$indexlang]) && $formAtts['link_title'.$indexlang]) {
$link['title'] = (isset($formAtts['link_title'.$indexlang]) && $formAtts['link_title'.$indexlang]) ? $formAtts['link_title'.$indexlang] : $formAtts['link_url'.$indexlang];
$link['link'] = isset($formAtts['link_url'.$indexlang]) ? $formAtts['link_url'.$indexlang] : '';
$link['target_type'] = isset($formAtts['target_type'.$index]) ? $formAtts['target_type'.$index] : '_self';
$formAtts['links'][] = $link;
}
break;
case 'link-category':
if (isset($formAtts['category_id'.$index]) && $formAtts['category_id'.$index]) {
$category = new Category((int)$formAtts['category_id'.$index], Context::getContext()->language->id, Context::getContext()->shop->id);
$link['title'] = (isset($formAtts['link_title'.$indexlang]) && $formAtts['link_title'.$indexlang]) ? $formAtts['link_title'.$indexlang] : $category->name;
$link['link'] = Context::getContext()->link->getCategoryLink($category);
$link['target_type'] = isset($formAtts['target_type'.$index]) ? $formAtts['target_type'.$index] : '_self';
$formAtts['links'][] = $link;
}
break;
case 'link-product':
$product_id = isset($formAtts['product_id'.$index]) ? (int)$formAtts['product_id'.$index] : 0;
$product = new Product($product_id, true, Context::getContext()->language->id, Context::getContext()->shop->id);
$link['title'] = (isset($formAtts['link_title'.$indexlang]) && $formAtts['link_title'.$indexlang]) ? $formAtts['link_title'.$indexlang] : $product->name;
if ((int)$product->id > 0) {
$link['link'] = Context::getContext()->link->getProductLink($product);
} else {
$link['link'] = '';
}
$link['target_type'] = isset($formAtts['target_type'.$index]) ? $formAtts['target_type'.$index] : '_self';
$formAtts['links'][] = $link;
break;
case 'link-manufacture':
if (isset($assign['formAtts']['manufacture_id'.$index]) && $assign['formAtts']['manufacture_id'.$index]) {
$manufacture = new Manufacturer($assign['formAtts']['manufacture_id'.$index], Context::getContext()->language->id);
$link['title'] = (isset($formAtts['link_title'.$indexlang]) && $formAtts['link_title'.$indexlang]) ? $formAtts['link_title'.$indexlang] : $manufacture->name;
$link['link'] = Context::getContext()->link->getManufacturerLink((int)$manufacture->id, $manufacture->link_rewrite, Context::getContext()->language->id);
$link['target_type'] = isset($formAtts['target_type'.$index]) ? $formAtts['target_type'.$index] : '_self';
$formAtts['links'][] = $link;
}
break;
case 'link-supplier':
$supplier = new Supplier($assign['formAtts']['supplier_id'], Context::getContext()->language->id);
$link['title'] = (isset($formAtts['link_title'.$indexlang]) && $formAtts['link_title'.$indexlang]) ? $formAtts['link_title'.$indexlang] : $supplier->name;
$link['link'] = Context::getContext()->link->getSupplierLink((int)$supplier->id, $supplier->link_rewrite, Context::getContext()->language->id);
$link['target_type'] = isset($formAtts['target_type'.$index]) ? $formAtts['target_type'.$index] : '_self';
$formAtts['links'][] = $link;
break;
case 'link-cms':
if (isset($formAtts['cmspage_id'.$index]) && $formAtts['cmspage_id'.$index]) {
$cms = new CMS((int)$formAtts['cmspage_id'.$index], Context::getContext()->language->id, Context::getContext()->shop->id);
$link['title'] = (isset($formAtts['link_title'.$indexlang]) && $formAtts['link_title'.$indexlang]) ? $formAtts['link_title'.$indexlang] : $cms->meta_title;
$link['link'] = Context::getContext()->link->getCMSLink($cms, $cms->link_rewrite, (bool)Configuration::get('PS_SSL_ENABLED'));
$link['target_type'] = isset($formAtts['target_type'.$index]) ? $formAtts['target_type'.$index] : '_self';
$formAtts['links'][] = $link;
}
break;
case 'link-page':
$param = isset($formAtts['page_param'.$index]) ? $formAtts['page_param'.$index] : '';
// $front_link = $this->getFronTLink($formAtts['page_id'.$index]);
// if ($front_link != false) {
// $formAtts['page_id'.$index] = $front_link;
// }
$link['link'] = Context::getContext()->link->getPageLink($formAtts['page_id'.$index], null, Context::getContext()->language->id, $param);
$link['title'] = (isset($formAtts['link_title'.$indexlang]) && $formAtts['link_title'.$indexlang]) ? $formAtts['link_title'.$indexlang] : Tools::ucfirst($formAtts['page_id'.$index]);
$link['target_type'] = isset($formAtts['target_type'.$index]) ? $formAtts['target_type'.$index] : '_self';
$formAtts['links'][] = $link;
break;
}
}
$assign['formAtts']['links'] = $formAtts['links'];
return $assign;
}
public function getFronTLink($controller_param)
{
$controllers = Dispatcher::getControllers(array(_PS_FRONT_CONTROLLER_DIR_, _PS_OVERRIDE_DIR_.'controllers/front/'));
$controllers['index'] = 'IndexController';
if (isset($controllers['auth'])) {
$controllers['authentication'] = $controllers['auth'];
}
if (isset($controllers['contact'])) {
$controllers['contactform'] = $controllers['contact'];
}
if (!isset($controllers[Tools::strtolower($controller_param)])) {
return false;
}
$controller_class = $controllers[Tools::strtolower($controller_param)];
$controller_obj = Controller::getController($controller_class);
return $controller_obj->php_self;
}
}