Files
kalsport.pl/modules/blockgrouptop/blockgrouptop.php
2024-11-05 12:22:50 +01:00

425 lines
16 KiB
PHP

<?php
/**
* 2007-2015 Leotheme
*
* NOTICE OF LICENSE
*
* Leo Prestashop Blockleoblogs for Prestashop 1.6.x
*
* DISCLAIMER
*
* @author leotheme <leotheme@gmail.com>
* @copyright 2007-2015 Leotheme
* @license http://leotheme.com - prestashop template provider
*/
if (!defined('_PS_VERSION_')) {
# module validation
exit;
}
use PrestaShop\PrestaShop\Adapter\ObjectPresenter;
use PrestaShop\PrestaShop\Core\Module\WidgetInterface;
class Blockgrouptop extends Module implements WidgetInterface
{
public function __construct()
{
$this->name = 'blockgrouptop';
$this->tab = 'front_office_features';
$this->version = '1.3.4';
$this->author = 'LeoTheme';
$this->need_instance = 0;
$this->bootstrap = true;
parent::__construct();
$this->displayName = $this->l('Block Group Top');
$this->description = $this->l('Adds a block allowing customers to select a language for your stores content.');
$this->ps_versions_compliancy = array('min' => '1.7', 'max' => _PS_VERSION_);
}
public function install()
{
if (!parent::install() || !$this->registerLeoHook() || !Configuration::updateValue('LEO_BLOCKGROUPTOP_USEINFO', 0)) {
return false;
}
$this->_installDataSample();
Configuration::updateValue('AP_INSTALLED_BLOCKGROUPTOP', '1');
return true;
}
public function uninstall()
{
return Configuration::deleteByName('LEO_BLOCKGROUPTOP_USEINFO') &&
parent::uninstall() && $this->unregisterLeoHook();
}
private function _installDataSample()
{
if (!file_exists(_PS_MODULE_DIR_.'appagebuilder/libs/LeoDataSample.php')) {
return false;
}
require_once(_PS_MODULE_DIR_.'appagebuilder/libs/LeoDataSample.php');
$sample = new Datasample(1);
return $sample->processImport($this->name);
}
public function getWidgetVariables($hookName, array $params)
{
# module validation
// unset($params);
$languages = Language::getLanguages(true, $this->context->shop->id);
foreach ($languages as &$lang) {
$lang['name_simple'] = $this->getNameSimple($lang['name']);
}
if (!count($languages)) {
return false;
}
// $link = new Link();
// $list_variable = array();
// if ((int)Configuration::get('PS_REWRITING_SETTINGS')) {
// $default_rewrite = array();
// if (Dispatcher::getInstance()->getController() == 'product' && ($id_product = (int)Tools::getValue('id_product'))) {
// $rewrite_infos = Product::getUrlRewriteInformations((int)$id_product);
// foreach ($rewrite_infos as $infos) {
// $default_rewrite[$infos['id_lang']] = $link->getProductLink((int)$id_product, $infos['link_rewrite'], $infos['category_rewrite'], $infos['ean13'], (int)$infos['id_lang']);
// }
// }
// if (Dispatcher::getInstance()->getController() == 'category' && ($id_category = (int)Tools::getValue('id_category'))) {
// $rewrite_infos = Category::getUrlRewriteInformations((int)$id_category);
// foreach ($rewrite_infos as $infos) {
// $default_rewrite[$infos['id_lang']] = $link->getCategoryLink((int)$id_category, $infos['link_rewrite'], $infos['id_lang']);
// }
// }
// if (Dispatcher::getInstance()->getController() == 'cms' && (($id_cms = (int)Tools::getValue('id_cms')) || ($id_cms_category = (int)Tools::getValue('id_cms_category')))) {
// $rewrite_infos = (isset($id_cms) && !isset($id_cms_category)) ? CMS::getUrlRewriteInformations($id_cms) : CMSCategory::getUrlRewriteInformations($id_cms_category);
// foreach ($rewrite_infos as $infos) {
// $arr_link = (isset($id_cms) && !isset($id_cms_category)) ?
// $link->getCMSLink($id_cms, $infos['link_rewrite'], null, $infos['id_lang']) :
// $link->getCMSCategoryLink($id_cms_category, $infos['link_rewrite'], $infos['id_lang']);
// $default_rewrite[$infos['id_lang']] = $arr_link;
// }
// }
// $list_variable['lang_rewrite_urls'] = $default_rewrite;
// }
// FIX error http://screencast.com/t/yFeNH4BnBWkL
if (Configuration::get('PS_RESTRICT_DELIVERED_COUNTRIES')) {
$countries = Carrier::getDeliveredCountries($this->context->language->id, true, true);
} else {
$countries = Country::getCountries($this->context->language->id, true);
}
$current_currency = null;
$serializer = new ObjectPresenter;
$currencies = array_map(
function ($currency) use ($serializer, &$current_currency) {
$currencyArray = $serializer->present($currency);
// serializer doesn't see 'sign' because it is not a regular
// ObjectModel field.
$currencyArray['sign'] = $currency->sign;
$url = $this->context->link->getLanguageLink($this->context->language->id);
$extraParams = array(
'SubmitCurrency' => 1,
'id_currency' => $currency->id
);
$partialQueryString = http_build_query($extraParams);
$separator = empty(parse_url($url)['query']) ? '?' : '&';
$url .= $separator . $partialQueryString;
$currencyArray['url'] = $url;
if ($currency->id === $this->context->currency->id) {
$currencyArray['current'] = true;
$current_currency = $currencyArray;
} else {
$currencyArray['current'] = false;
}
return $currencyArray;
},
Currency::getCurrencies(true, true)
);
$list_variable = array();
$list_variable['lang_iso'] = $this->context->language->iso_code;
$list_variable['countries'] = $countries;
$list_variable['img_lang_url'] = _THEME_LANG_DIR_;
$list_variable['currencies'] = $currencies;
$list_variable['current_currency'] = $current_currency;
$list_variable['cookie'] = $this->context->cookie;
$list_variable['languages'] = $languages;
$list_variable['current_language'] = array(
'id_lang' => $this->context->language->id,
'name' => $this->context->language->name,
'name_simple' => $this->getNameSimple($this->context->language->name)
);
$list_variable['blockcurrencies_sign'] = $this->context->currency->sign;
$list_variable['catalog_mode'] = Configuration::get('PS_CATALOG_MODE');
//DONGND:: add parameters for user info
$enable_userinfo = Configuration::get('LEO_BLOCKGROUPTOP_USEINFO');
$list_variable['enable_userinfo'] = $enable_userinfo;
if ($enable_userinfo == 1) {
$logged = $this->context->customer->isLogged();
if ($logged) {
$customerName = $this->context->customer->firstname.' '.$this->context->customer->lastname;
} else {
$customerName = '';
}
$link = $this->context->link;
$list_variable['logged'] = $logged;
$list_variable['customerName'] = $customerName;
$list_variable['logout_url'] = $link->getPageLink('index', true, null, 'mylogout');
$list_variable['my_account_url'] = $link->getPageLink('my-account', true);
}
return $list_variable;
}
private function getNameSimple($name)
{
return preg_replace('/\s\(.*\)$/', '', $name);
}
/**
* Returns module content for header
*
* @param array $params Parameters
* @return string Content
*/
// public function hookDisplayTop($params)
// {
// }
public function renderWidget($hookName, array $params)
{
$this->smarty->assign($this->getWidgetVariables($hookName, $params));
return $this->fetch('module:blockgrouptop/views/templates/hook/blockgrouptop.tpl');
}
// public function hookDisplayNav2($params)
// {
// if (!$this->_prepareHook($params)) {
// return;
// }
// return $this->display(__FILE__, 'views/templates/hook/blockgrouptop.tpl');
// }
public function getContent()
{
$output = '';
if (Tools::isSubmit('submitBlockGroupTop')) {
Configuration::updateValue('LEO_BLOCKGROUPTOP_USEINFO', (int)(Tools::getValue('LEO_BLOCKGROUPTOP_USEINFO')));
$output .= $this->displayConfirmation($this->l('Settings updated.'));
}
return $this->renderForm();
}
public function renderForm()
{
$fields_form = array(
'form' => array(
'legend' => array(
'title' => $this->l('Settings'),
'icon' => 'icon-cogs'
),
'input' => array(
array(
'type' => 'switch',
'label' => $this->l('Block User Info'),
'name' => 'LEO_BLOCKGROUPTOP_USEINFO',
'is_bool' => true,
'desc' => $this->l('Enable/Disable Block User Info.'),
'values' => array(
array(
'id' => 'active_on',
'value' => 1,
'label' => $this->l('Enabled')
),
array(
'id' => 'active_off',
'value' => 0,
'label' => $this->l('Disabled')
)
),
),
),
'submit' => array(
'title' => $this->l('Save')
)
),
);
$helper = new HelperForm();
$helper->show_toolbar = false;
$helper->table = $this->table;
$lang = new Language((int)Configuration::get('PS_LANG_DEFAULT'));
$helper->default_form_language = $lang->id;
$helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') ? Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') : 0;
$this->fields_form = array();
$helper->identifier = $this->identifier;
$helper->submit_action = 'submitBlockGroupTop';
$helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false).'&configure='.$this->name.'&tab_module='.$this->tab
.'&module_name='.$this->name;
$helper->token = Tools::getAdminTokenLite('AdminModules');
$helper->tpl_vars = array(
'fields_value' => $this->getConfigFieldsValues(),
'languages' => $this->context->controller->getLanguages(),
'id_language' => $this->context->language->id
);
return $helper->generateForm(array($fields_form));
}
public function getConfigFieldsValues()
{
return array(
'LEO_BLOCKGROUPTOP_USEINFO' => (bool)Tools::getValue('LEO_BLOCKGROUPTOP_USEINFO', Configuration::get('LEO_BLOCKGROUPTOP_USEINFO')),
);
}
public function hookDisplayHeader($params)
{
$this->context->controller->registerStylesheet('modules-blockgrouptop-blockgrouptop', $this->getMediaDir().'css/blockgrouptop.css', array('media' => 'all', 'priority' => 150));
$this->context->controller->registerJavascript('modules-blockgrouptop-blockgrouptop', $this->getMediaDir().'js/blockgrouptop.js', array('position' => 'bottom', 'priority' => 150));
}
/**
* Add the CSS & JavaScript files you want to be loaded in the BO.
*/
public function hookActionAdminControllerSetMedia()
{
$this->autoRestoreSampleData();
}
/**
* Run only one when install/change Theme_of_Leo
*/
public function hookActionAdminBefore($params)
{
if (isset($params) && isset($params['controller']) && isset($params['controller']->theme_manager)) {
// Validate : call hook from theme_manager
} else {
// Other module call this hook -> duplicate data
return;
}
$this->unregisterHook('actionAdminBefore');
# FIX : update Prestashop by 1-Click module -> NOT NEED RESTORE DATABASE
$ap_version = Configuration::get('AP_CURRENT_VERSION');
if ($ap_version != false) {
$ps_version = Configuration::get('PS_VERSION_DB');
$versionCompare = version_compare($ap_version, $ps_version);
if ($versionCompare != 0) {
// Just update Prestashop
Configuration::updateValue('AP_CURRENT_VERSION', $ps_version);
return;
}
}
# WHENE INSTALL THEME, INSERT HOOK FROM DATASAMPLE IN THEME
$hook_from_theme = false;
if (file_exists(_PS_MODULE_DIR_.'appagebuilder/libs/LeoDataSample.php')) {
require_once(_PS_MODULE_DIR_.'appagebuilder/libs/LeoDataSample.php');
$sample = new Datasample();
if ($sample->processHook($this->name)) {
$hook_from_theme = true;
}
}
# INSERT HOOK FROM MODULE_DATASAMPLE
if ($hook_from_theme == false) {
$this->registerLeoHook();
}
# WHEN INSTALL MODULE, NOT NEED RESTORE DATABASE IN THEME
$install_module = (int)Configuration::get('AP_INSTALLED_BLOCKGROUPTOP', 0);
if ($install_module) {
Configuration::updateValue('AP_INSTALLED_BLOCKGROUPTOP', '0'); // next : allow restore sample
return;
}
}
/**
* Common method
* Resgister all hook for module
*/
public function registerLeoHook()
{
$res = true;
$res &= $this->registerHook('displayHeader');
$res &= $this->registerHook('displayNav2');
$res &= $this->registerHook('actionAdminControllerSetMedia');
return $res;
}
/**
* Common method
* Unresgister all hook for module
*/
public function unregisterLeoHook()
{
$res = true;
$res &= $this->unregisterHook('displayHeader');
$res &= $this->unregisterHook('displayNav2');
$res &= $this->unregisterHook('actionAdminControllerSetMedia');
return $res;
}
// public function isCached($template, $cache_id = null, $compile_id = null)
// {
// if (version_compare(_PS_VERSION_, '1.7.4.0', '>=') || version_compare(Configuration::get('PS_VERSION_DB'), '1.7.4.0', '>=')) {
// return false;
// }
// return parent::isCached($template, $cache_id, $compile_id);
// }
/**
* FIX BUG 1.7.3.3 : install theme lose hook displayHome, displayLeoProfileProduct
* because ajax not run hookActionAdminBefore();
*/
public function autoRestoreSampleData()
{
if(Hook::isModuleRegisteredOnHook($this, 'actionAdminBefore', (int)Context::getContext()->shop->id)) {
$theme_manager = new stdclass();
$theme_manager->theme_manager = 'theme_manager';
$this->hookActionAdminBefore(array(
'controller' => $theme_manager,
));
}
}
//DONGND:: update direction css, js, img for 1.7.4.0
public function getMediaDir()
{
$media_dir = '';
if (version_compare(_PS_VERSION_, '1.7.4.0', '>=') || version_compare(Configuration::get('PS_VERSION_DB'), '1.7.4.0', '>=')) {
$media_dir = 'modules/'.$this->name.'/views/';
}else{
$media_dir = 'modules/'.$this->name.'/';
}
return $media_dir;
}
}