* @copyright 2022 Anvanto * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) */ if (!defined('_PS_VERSION_')) { exit; } use PrestaShop\PrestaShop\Core\Module\WidgetInterface; require_once _PS_MODULE_DIR_ . 'an_banners/classes/anBanners.php'; require_once _PS_MODULE_DIR_ . 'an_banners/hooks_ignore.php'; class an_banners extends Module implements WidgetInterface { const PREFIX = 'an_b_'; protected $_tabs = [ [ 'class_name' => 'AdminAnBanners', 'parent' => 'AdminParentModulesSf', 'name' => 'Banners', 'active' => 0 ], ]; public function __construct() { $this->name = 'an_banners'; $this->tab = 'others'; $this->version = '1.0.8'; $this->author = 'Anvanto'; $this->need_instance = 0; $this->bootstrap = true; $this->module_key = ''; parent::__construct(); $this->displayName = $this->l('Banners, Simple text and others for theme'); $this->description = $this->l('Banners, Simple Text and others for themes y Anvanto'); $this->confirmUninstall = $this->l('Are you sure you want to uninstall the module?'); $this->ps_versions_compliancy = array('min' => '1.7', 'max' => _PS_VERSION_); } /** * @return bool */ public function install() { $sql = include _PS_MODULE_DIR_ . $this->name . '/sql/install.php'; foreach ($sql as $_sql) { Db::getInstance()->Execute($_sql); } $languages = Language::getLanguages(); foreach ($this->_tabs as $tab) { $_tab = new Tab(); $_tab->active = $tab['active']; $_tab->class_name = $tab['class_name']; $_tab->id_parent = Tab::getIdFromClassName($tab['parent']); if (empty($_tab->id_parent)) { $_tab->id_parent = 0; } $_tab->module = $this->name; foreach ($languages as $language) { $_tab->name[$language['id_lang']] = $this->l($tab['name']); } $_tab->add(); } $parent = parent::install(); $hooks = anBanners::importJsonBanners(); $listHooksForRegister = []; foreach ($hooks as $hook) { $listHooksForRegister[$hook] = $hook; } $this->registerHook('displayHeader'); foreach ($listHooksForRegister as $hook) { $this->registerHook($hook); } return $parent; } /** * @return bool */ public function uninstall() { $sql = include _PS_MODULE_DIR_ . $this->name . '/sql/uninstall.php'; foreach ($sql as $_sql) { Db::getInstance()->Execute($_sql); } foreach ($this->_tabs as $tab) { $_tab_id = Tab::getIdFromClassName($tab['class_name']); $_tab = new Tab($_tab_id); $_tab->delete(); } return parent::uninstall(); } /** * @param $hookName * @param array $params * @return mixed|void */ public function renderWidget($hookName, array $params) { $banners = anBanners::getBanners($hookName); $this->smarty->assign('banners', $banners); return $this->fetch('module:' . $this->name . '/views/templates/front/banners.tpl'); } /** * @param $hookName * @param array $params * @return array */ public function getWidgetVariables($hookName, array $params) { return; } public function getHooksList($file = 'hooks') { if (Tools::file_exists_no_cache(_PS_MODULE_DIR_ . 'an_banners/'.$file.'.php')) { return include _PS_MODULE_DIR_ . 'an_banners/'.$file.'.php'; } else { return array(); } } /** * @return bool */ public function hookFilter($hook) { $res = strpos(Tools::strtolower($hook['name']), 'admin') === false; $res &= strpos(Tools::strtolower($hook['name']), 'backoffice') === false; $ignoreHooks = $this->getHooksList('hooks_ignore'); if (in_array($hook['name'], $ignoreHooks)){ $res &= false; } return $res; } /** * @return array */ public function getHooksQuery() { $hooksQuery = array(); $hooks = Hook::getHooks(true, true); $prestaHooks = array_filter($hooks, array($this, 'hookFilter')); if (version_compare(_PS_VERSION_, '1.7.0.0', '<') == 1) { foreach ($this->getHooksList() as $hookname) { $hooksQuery[] = array('name' => $hookname); } return array_merge($hooksQuery); } else { foreach ($this->getHooksList() as $hookname) { if (!in_array($hookname, array_column($prestaHooks, 'name'))) { $hooksQuery[] = array('name' => $hookname); } } return array_merge($hooksQuery, $prestaHooks); } } public function getContent() { Tools::redirectAdmin($this->context->link->getAdminLink('AdminAnBanners')); } public function hookHeader() { $this->hookDisplayHeader(); } public function hookDisplayHeader() { $this->context->controller->registerStylesheet( $this->name . "_css", 'modules/' . $this->name . '/views/css/front.css', ['server' => 'local', 'priority' => 150] ); $this->context->controller->registerJavascript( $this->name . "_js", 'modules/' . $this->name . '/views/js/front.js', ['server' => 'local', 'priority' => 150] ); } public function topPromo() { $this->context->smarty->assign('theme', $this->getThemeInfo()); return $this->display(__FILE__, 'views/templates/admin/top.tpl'); } public function getThemeInfo() { $theme = []; $themeFileJson = _PS_THEME_DIR_.'/config/theme.json'; if (Tools::file_exists_no_cache($themeFileJson)) { $theme = (array)json_decode(Tools::file_get_contents($themeFileJson), 1); } if (!isset($theme['url_contact_us']) || $theme['url_contact_us'] == ''){ $urlContactUs = 'https://addons.prestashop.com/contact-form.php'; if (isset($theme['addons_id']) && $theme['addons_id'] != ''){ $urlContactUs .= '?id_product=' .$theme['addons_id']; } elseif (isset($this->url_contact_us) && $this->url_contact_us != ''){ $urlContactUs = $this->url_contact_us; } elseif (isset($this->addons_product_id) && $this->addons_product_id != ''){ $urlContactUs .= '?id_product=' .$this->addons_product_id; } $theme['url_contact_us'] = $urlContactUs; } if (!isset($theme['url_rate']) || $theme['url_rate'] == ''){ $urlRate = 'https://addons.prestashop.com/ratings.php'; if (isset($theme['addons_id']) && $theme['addons_id'] != ''){ $urlRate .= '?id_product=' .$theme['addons_id']; } elseif (isset($this->url_rate) && $this->url_rate != ''){ $urlRate = $this->url_rate; } elseif (isset($this->addons_product_id) && $this->addons_product_id != ''){ $urlRate .= '?id_product=' .$this->addons_product_id; } $theme['url_rate'] = $urlRate; } return $theme; } }