'id_widget', 'primary_key' => true ), array( 'name' => 'title', 'multi_lang' => true ), array( 'name' => 'subtitle', 'multi_lang' => true ), array( 'name' => 'description', 'multi_lang' => true ), array( 'name' => 'link' ), array( 'name' => 'icon' ), array( 'name' => 'image' ), array( 'name' => 'hook' ), array( 'name' => 'enabled', 'default' => 1 ), array( 'name' => 'show_title', 'default' => 1 ), array( 'name' => 'show_image', 'default' => 1 ), array( 'name' => 'show_description', 'default' => 1 ), ); private $_hooks = array(); public function __construct() { $this->name = 'ybc_widget'; $this->tab = 'front_office_features'; $this->version = '1.0.1'; $this->author = 'YBC-Theme'; $this->need_instance = 0; $this->secure_key = Tools::encrypt($this->name); $this->bootstrap = true; parent::__construct(); $this->displayName = $this->l('HTML widgets'); $this->description = $this->l('Add custom HTML widgets to various postions on frontend'); $this->ps_versions_compliancy = array('min' => '1.6.0.0', 'max' => _PS_VERSION_); $this->_hooks = array( array( 'hook' => 'displayTopColumn', 'name' => $this->l('Hook Top Column') ), array( 'hook' => 'displayHome', 'name' => $this->l('Hook Home') ), array( 'hook' => 'displayNav', 'name' => $this->l('Hook Top Navigation') ), array( 'hook' => 'displayTop', 'name' => $this->l('Hook Top') ), array( 'hook' => 'displayLeftColumn', 'name' => $this->l('Hook Left Column') ), array( 'hook' => 'displayRightColumn', 'name' => $this->l('Hook Right Column') ), array( 'hook' => 'displayFooter', 'name' => $this->l('Hook Footer') ), array( 'hook' => 'ybcCustom1', 'name' => $this->l('Banner under "popular product"') ), array( 'hook' => 'ybcCustom2', 'name' => $this->l('Banner under "Best Selling product"') ), array( 'hook' => 'ybcCustom3', 'name' => $this->l('Banner under "Special product"') ), array( 'hook' => 'ybcCustom4', 'name' => $this->l('link menu top nav') ), ); if(isset($this->context->controller->controller_type) && $this->context->controller->controller_type =='admin') $this->baseAdminPath = $this->context->link->getAdminLink('AdminModules').'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name; } /** * @see Module::install() */ public function install() { $res = parent::install(); foreach($this->_hooks as $hook) { $res &= $this->registerHook($hook['hook']); } $res &= $this->registerHook('displayBackOfficeHeader') && $this->registerHook('displayHeader') && $this->_installDb(); return $res; } public function _installDb() { $tbls = array( "CREATE TABLE IF NOT EXISTS `"._DB_PREFIX_."ybc_widget_widget` ( `id_widget` int(10) unsigned NOT NULL AUTO_INCREMENT, `hook` varchar(200) DEFAULT NULL, `enabled` tinyint(1) NOT NULL DEFAULT '1', `show_title` tinyint(1) NOT NULL DEFAULT '1', `show_image` tinyint(1) NOT NULL DEFAULT '1', `show_description` tinyint(1) NOT NULL DEFAULT '1', `image` varchar(500) DEFAULT NULL, `icon` varchar(200) DEFAULT NULL, `link` varchar(500) DEFAULT NULL, `sort_order` int(11) unsigned NOT NULL DEFAULT '1', PRIMARY KEY (`id_widget`) )", "CREATE TABLE IF NOT EXISTS `"._DB_PREFIX_."ybc_widget_widget_lang` ( `id_widget` int(11) NOT NULL, `id_lang` int(11) NOT NULL, `title` varchar(5000) CHARACTER SET utf8 NOT NULL, `subtitle` varchar(5000) CHARACTER SET utf8, `description` text CHARACTER SET utf8 ) " ); foreach($tbls as $tbl) Db::getInstance()->execute($tbl); //Install sample data $this->installSample(); return true; } /** * @see Module::uninstall() */ public function uninstall() { return parent::uninstall() && $this->_uninstallDb(); } private function _uninstallDb() { $tbls = array('widget', 'widget_lang'); foreach($tbls as $tbl) { Db::getInstance()->execute('DROP TABLE IF EXISTS `'._DB_PREFIX_.'ybc_widget_'.$tbl.'`'); } $dirs = array('widget'); foreach($dirs as $dir) { $files = glob(dirname(__FILE__).'/images/'.$dir.'/*'); foreach($files as $file){ if(is_file($file)) @unlink($file); } } return true; } public function getContent() { if(Tools::isSubmit('reorder')) { $this->_updateOrders(); die(Tools::jsonEncode(array('updated' => 'true'))); } $control = trim(Tools::getValue('control')); if(!$control) Tools::redirectAdmin($this->context->link->getAdminLink('AdminModules', true).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&control=main'); if($control == 'main') $this->context->controller->addJqueryUI('ui.sortable'); //Process widget $this->_html .= ''; if($control=='widget') { $this->_postWidget(); } else { $this->_postMain(); } //Display errors if have if($this->errorMessage) $this->_html .= $this->errorMessage; if($control=='widget') { $this->renderWidgetForm(); } else { $this->renderMainForm(); } return '
'.$this->_html.'
'.$this->displayIframe(); } public function displayIframe() { switch($this->context->language->iso_code) { case 'en': $url = 'https://cdn.prestahero.com/prestahero-product-feed?utm_source=feed_'.$this->name.'&utm_medium=iframe'; break; case 'it': $url = 'https://cdn.prestahero.com/it/prestahero-product-feed?utm_source=feed_'.$this->name.'&utm_medium=iframe'; break; case 'fr': $url = 'https://cdn.prestahero.com/fr/prestahero-product-feed?utm_source=feed_'.$this->name.'&utm_medium=iframe'; break; case 'es': $url = 'https://cdn.prestahero.com/es/prestahero-product-feed?utm_source=feed_'.$this->name.'&utm_medium=iframe'; break; default: $url = 'https://cdn.prestahero.com/prestahero-product-feed?utm_source=feed_'.$this->name.'&utm_medium=iframe'; } $this->smarty->assign( array( 'url_iframe' => $url ) ); return $this->display(__FILE__,'iframe.tpl'); } public function renderWidgetForm() { $fields_form = array( 'form' => array( 'legend' => array( 'title' => (int)Tools::getValue('id_widget') ? $this->l('Edit widget') : $this->l('Add new widget'), 'icon' => 'icon-AdminAdmin' ), 'input' => array( array( 'type' => 'text', 'label' => $this->l('Title'), 'name' => 'title', 'lang' => true, 'required' => true ), array( 'type' => 'text', 'label' => $this->l('Sub Title'), 'name' => 'subtitle', 'lang' => true ), array( 'type' => 'select', 'label' => $this->l('Hook'), 'name' => 'hook', 'required' => true, 'options' => array( 'query' => $this->_getHookOptions(), 'id' => 'id_option', 'name' => 'name' ) ), array( 'type' => 'textarea', 'label' => $this->l('Description'), 'name' => 'description', 'lang' => true, 'autoload_rte' => true ), array( 'type' => 'text', 'label' => $this->l('Link'), 'name' => 'link', 'desc' => $this->l('Eg: http://yourwebsite.com') ), array( 'type' => 'file', 'label' => $this->l('Image'), 'name' => 'image' ), array( 'type' => 'text', 'label' => $this->l('Awesome icon'), 'name' => 'icon', 'desc' => $this->l('Eg: fa-home, fa-phone') ), array( 'type' => 'switch', 'label' => $this->l('Show title'), 'name' => 'show_title', 'is_bool' => true, 'values' => array( array( 'id' => 'active_on', 'value' => 1, 'label' => $this->l('Yes') ), array( 'id' => 'active_off', 'value' => 0, 'label' => $this->l('No') ) ) ), array( 'type' => 'switch', 'label' => $this->l('Show image'), 'name' => 'show_image', 'is_bool' => true, 'values' => array( array( 'id' => 'active_on', 'value' => 1, 'label' => $this->l('Yes') ), array( 'id' => 'active_off', 'value' => 0, 'label' => $this->l('No') ) ) ), array( 'type' => 'switch', 'label' => $this->l('Show description'), 'name' => 'show_description', 'is_bool' => true, 'values' => array( array( 'id' => 'active_on', 'value' => 1, 'label' => $this->l('Yes') ), array( 'id' => 'active_off', 'value' => 0, 'label' => $this->l('No') ) ) ), array( 'type' => 'switch', 'label' => $this->l('Enabled'), 'name' => 'enabled', 'is_bool' => true, 'values' => array( array( 'id' => 'active_on', 'value' => 1, 'label' => $this->l('Yes') ), array( 'id' => 'active_off', 'value' => 0, 'label' => $this->l('No') ) ) ), array( 'type' => 'hidden', 'name' => 'control' ) ), '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->module = $this; $helper->identifier = $this->identifier; $helper->submit_action = 'saveWidget'; $helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name; $helper->token = Tools::getAdminTokenLite('AdminModules'); $language = new Language((int)Configuration::get('PS_LANG_DEFAULT')); $fieldValues = $this->getFieldsValues($this->widgetFields,'id_widget','Ybc_widget_widget_class','saveWidget'); $helper->tpl_vars = array( 'base_url' => $this->context->shop->getBaseURL(), 'language' => array( 'id_lang' => $language->id, 'iso_code' => $language->iso_code ), 'PS_ALLOW_ACCENTED_CHARS_URL', (int)Configuration::get('PS_ALLOW_ACCENTED_CHARS_URL'), 'fields_value' => $fieldValues, 'languages' => $this->context->controller->getLanguages(), 'id_language' => $this->context->language->id, 'image_baseurl' => $this->_path.'images/', 'link' => $this->context->link, 'cancel_url' => $this->baseAdminPath.'&control=main', 'add_url' => $this->baseAdminPath.'&control=widget' ); if(Tools::isSubmit('id_widget') && $this->itemExists('widget','id_widget',(int)Tools::getValue('id_widget'))) { $fields_form['form']['input'][] = array('type' => 'hidden', 'name' => 'id_widget'); $widget = new Ybc_widget_widget_class((int)Tools::getValue('id_widget')); if($widget->image) { $helper->tpl_vars['display_img'] = $this->_path.'images/widget/'.$widget->image; $helper->tpl_vars['img_del_link'] = $this->baseAdminPath.'&id_widget='.Tools::getValue('id_widget').'&delwidgetimage=true&control=widget'; } } $helper->override_folder = '/'; $languages = Language::getLanguages(false); $this->_html .= $helper->generateForm(array($fields_form)); } private function _getHookOptions() { $options = array(); $options[] = array( 'id_option' => '', 'name' => $this->l('-- Choose a hook --') ); foreach($this->_hooks as $hook) { $item = array( 'id_option' => $hook['hook'], 'name' => $hook['name'] ); $options[] = $item; } return $options; } private function _getHooks() { $hooks = array(); foreach($this->_hooks as $hook) { $hooks[] = $hook['hook']; } return $hooks; } private function _postWidget() { $errors = array(); $id_widget = (int)Tools::getValue('id_widget'); if($id_widget && !$this->itemExists('widget','id_widget',$id_widget)) Tools::redirectAdmin($this->baseAdminPath); /** * Change status */ if(Tools::isSubmit('change_enabled')) { $status = (int)Tools::getValue('change_enabled') ? 1 : 0; $id_widget = (int)Tools::getValue('id_widget'); if($id_widget) { $this->changeStatus('widget',$field,$id_widget,$status); Tools::redirectAdmin($this->context->link->getAdminLink('AdminModules', true).'&conf=4&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&control=main'); } } /** * Delete image */ if($id_widget && $this->itemExists('widget','id_widget',$id_widget) && Tools::isSubmit('delwidgetimage')) { $widget = new Ybc_widget_widget_class($id_widget); if($widget->image) { $imgUrl = dirname(__FILE__).'/images/widget/'.$widget->image; if(file_exists($imgUrl)) { @unlink($imgUrl); $widget->image = ''; $widget->update(); } } else $errors[] = $this->l('Image does not exist'); } /** * Delete widget */ if(Tools::isSubmit('del')) { $id_widget = (int)Tools::getValue('id_widget'); if(!$this->itemExists('widget','id_widget',$id_widget)) $errors[] = $this->l('Widget does not exist'); elseif($this->_deleteWidget($id_widget)) { Tools::redirectAdmin($this->context->link->getAdminLink('AdminModules', true).'&conf=4&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&control=main'); } else $errors[] = $this->l('Could not delete the widget. Please try again'); } /** * Save widget */ if(Tools::isSubmit('saveWidget')) { if($id_widget && $this->itemExists('widget','id_widget',$id_widget)) { $widget = new Ybc_widget_widget_class($id_widget); } else { $widget = new Ybc_widget_widget_class(); $widget->sort_order = 1; } $widget->enabled = trim(Tools::getValue('enabled',1)) ? 1 : 0; $widget->show_title = trim(Tools::getValue('show_title',1)) ? 1 : 0; $widget->show_image = trim(Tools::getValue('show_image',1)) ? 1 : 0; $widget->show_description = trim(Tools::getValue('show_description',1)) ? 1 : 0; $widget->icon = trim(Tools::getValue('icon')); $widget->link = trim(Tools::getValue('link')); $widget->hook = trim(Tools::getValue('hook')); $languages = Language::getLanguages(false); foreach ($languages as $language) { $widget->title[$language['id_lang']] = trim(Tools::getValue('title_'.$language['id_lang'])) != '' ? trim(Tools::getValue('title_'.$language['id_lang'])) : trim(Tools::getValue('title_'.Configuration::get('PS_LANG_DEFAULT'))); if($widget->title[$language['id_lang']] && !Validate::isCleanHtml($widget->title[$language['id_lang']])) $errors[] = $this->l('Title in '.$language['name'].' is not valid'); $widget->subtitle[$language['id_lang']] = trim(Tools::getValue('subtitle_'.$language['id_lang'])) != '' ? trim(Tools::getValue('subtitle_'.$language['id_lang'])) : trim(Tools::getValue('subtitle_'.Configuration::get('PS_LANG_DEFAULT'))); if($widget->subtitle[$language['id_lang']] && !Validate::isCleanHtml($widget->subtitle[$language['id_lang']])) $errors[] = $this->l('Sub Title in '.$language['name'].' is not valid'); $widget->description[$language['id_lang']] = trim(Tools::getValue('description_'.$language['id_lang'])) != '' ? trim(Tools::getValue('description_'.$language['id_lang'])) : trim(Tools::getValue('description_'.Configuration::get('PS_LANG_DEFAULT'))); if($widget->description[$language['id_lang']] && !Validate::isCleanHtml($widget->description[$language['id_lang']], true)) $errors[] = $this->l('Description in '.$language['name'].' is not valid'); } $hooks = $this->_getHooks(); if($widget->hook == '') $errors[] = $this->l('Please choose a hook'); elseif(!in_array($widget->hook, $hooks)) $errors[] = $this->l('Hook is not valid'); if($widget->icon!='' && !preg_match('/^fa-(.)+$/', $widget->icon)) $errors[] = $this->l('Awesome icon is not vaild'); if($widget->link!='' && !preg_match('/^http(.)+$/', $widget->link) && $widget->link!='#') $errors[] = $this->l('Link is not vaild'); if(Tools::getValue('title_'.Configuration::get('PS_LANG_DEFAULT'))=='') $errors[] = $this->l('Title is required'); /** * Upload image */ $oldImage = false; $newImage = false; if(isset($_FILES['image']['tmp_name']) && isset($_FILES['image']['name']) && $_FILES['image']['name']) { if(file_exists(dirname(__FILE__).'/images/widget/'.$_FILES['image']['name'])) { $errors[] = $this->l('Image file name already exists. Try to rename the file name then reupload it'); } else { $type = Tools::strtolower(Tools::substr(strrchr($_FILES['image']['name'], '.'), 1)); $imagesize = @getimagesize($_FILES['image']['tmp_name']); if (isset($_FILES['image']) && !empty($_FILES['image']['tmp_name']) && !empty($imagesize) && in_array($type, array('jpg', 'gif', 'jpeg', 'png')) ) { $temp_name = tempnam(_PS_TMP_IMG_DIR_, 'PS'); if ($error = ImageManager::validateUpload($_FILES['image'])) $errors[] = $error; elseif (!$temp_name || !move_uploaded_file($_FILES['image']['tmp_name'], $temp_name)) $errors[] = $this->l('Can not upload the file'); elseif(!ImageManager::resize($temp_name, dirname(__FILE__).'/images/widget/'.$_FILES['image']['name'], null, null, $type)) $errors[] = $this->displayError($this->l('An error occurred during the image upload process.')); if($widget->image) { $oldImage = dirname(__FILE__).'/images/widget/'.$widget->image; } $widget->image = $_FILES['image']['name']; $newImage = dirname(__FILE__).'/images/widget/'.$widget->image; if(isset($temp_name)) @unlink($temp_name); } } } /** * Save */ if(!$errors) { if (!Tools::getValue('id_widget')) { if (!$widget->add()) { $errors[] = $this->displayError($this->l('The item could not be added.')); if($newImage && file_exists($newImage)) @unlink($newImage); } } elseif (!$widget->update()) { if($newImage && file_exists($newImage)) @unlink($newImage); $errors[] = $this->displayError($this->l('The item could not be updated.')); } else { if($oldImage && file_exists($oldImage)) @unlink($oldImage); } } } if (count($errors)) { if($newImage && file_exists($newImage)) @unlink($newImage); $this->errorMessage = $this->displayError(implode('
', $errors)); } elseif (Tools::isSubmit('saveWidget') && Tools::isSubmit('id_widget')) Tools::redirectAdmin($this->context->link->getAdminLink('AdminModules', true).'&conf=4&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&id_widget='.Tools::getValue('id_widget').'&control=widget'); elseif (Tools::isSubmit('saveWidget')) { Tools::redirectAdmin($this->context->link->getAdminLink('AdminModules', true).'&conf=3&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name.'&id_widget='.$this->getMaxId('widget','id_widget').'&control=widget'); } } private function _postMain() { } public function renderMainForm() { $this->_html .= ''; $this->_html .= '
'.$this->l('Widgets').'
'; $this->_html .= '
'; $i = 0; foreach($this->_hooks as $hook) { $i++; if($i==1) $this->_html .= '
'; $this->_html .= '
'.$hook['name'].'
'; $this->_html .= '
    '; $widgets = $this->getWidgetsByHook($hook['hook']); if($widgets) { foreach($widgets as $widget) { $this->_html .= '
  • '.$widget['title'].'
  • '; } } $this->_html .= '
'; $this->_html .= '
'; if($i == 3 || $i == 6 || $i == 9 || $i == 11) $this->_html .= '
'; if($i == 18) $this->_html .= '
'; } $this->_html .= '
'; } public function itemExists($tbl, $primaryKey, $id) { $req = 'SELECT `'.$primaryKey.'` FROM `'._DB_PREFIX_.'ybc_widget_'.$tbl.'` tbl WHERE tbl.`'.$primaryKey.'` = '.(int)$id; $row = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($req); return ($row); } public function getMaxId($tbl, $primaryKey) { $req = 'SELECT max(`'.$primaryKey.'`) as maxid FROM `'._DB_PREFIX_.'ybc_widget_'.$tbl.'` tbl'; $row = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($req); return isset($row['maxid']) ? (int)$row['maxid'] : 0; } public function getFieldsValues($formFields, $primaryKey, $objClass, $saveBtnName) { $fields = array(); $id_lang_default = Configuration::get('PS_LANG_DEFAULT'); if (Tools::isSubmit($primaryKey)) { $obj = new $objClass((int)Tools::getValue($primaryKey)); $fields[$primaryKey] = (int)Tools::getValue($primaryKey, $obj->$primaryKey); } else { $obj = new $objClass(); } foreach($formFields as $field) { if(!isset($field['primary_key']) && !isset($field['multi_lang']) && !isset($field['connection'])) { $fieldName = $field['name']; $fields[$field['name']] = trim(Tools::getValue($field['name'], $obj->$fieldName)); } } $languages = Language::getLanguages(false); /** * Default */ if(!Tools::isSubmit($saveBtnName) && !Tools::isSubmit($primaryKey)) { foreach($formFields as $field) { if(isset($field['default']) && !isset($field['multi_lang'])) { if(isset($field['default_submit'])) $fields[$field['name']] = (int)Tools::getValue($field['name']) ? (int)Tools::getValue($field['name']) : $field['default']; else $fields[$field['name']] = $field['default']; } } } /** * Multiple language */ foreach ($languages as $lang) { foreach($formFields as $field) { if(!Tools::isSubmit($saveBtnName) && !Tools::isSubmit($primaryKey)) { if(isset($field['multi_lang'])) { if(isset($field['default'])) $fields[$field['name']][$lang['id_lang']] = $field['default']; else $fields[$field['name']][$lang['id_lang']] = ''; } } elseif(Tools::isSubmit($saveBtnName)) { if(isset($field['multi_lang'])) $fields[$field['name']][$lang['id_lang']] = Tools::getValue($field['name'].'_'.(int)$lang['id_lang']); } else{ if(isset($field['multi_lang'])) { $fieldName = $field['name']; $field_langs = $obj->$fieldName; $fields[$field['name']][$lang['id_lang']] = $field_langs[$lang['id_lang']]; } } } } $fields['control'] = trim(Tools::getValue('control')) ? trim(Tools::getValue('control')) : ''; return $fields; } public function getWidgetsByHook($hook, $enabled = false) { $where = ''; if(class_exists('ybc_themeconfig') && isset($this->context->controller->controller_type) && $this->context->controller->controller_type=='front') { $tc = new Ybc_themeconfig(); if($tc->devMode && ($ids = $tc->getLayoutConfiguredField('widgets'))) { $where = " AND w.id_widget IN(".implode(',',$ids).") "; } } $sql = "SELECT w.*, wl.title, wl.subtitle, wl.description FROM "._DB_PREFIX_."ybc_widget_widget w LEFT JOIN "._DB_PREFIX_."ybc_widget_widget_lang wl ON w.id_widget = wl.id_widget AND wl.id_lang = ".($this->context->language->id)." WHERE w.hook = '$hook' ".($enabled ? ' AND enabled=1 ' : '').$where." ORDER BY w.sort_order ASC, wl.title ASC "; return Db::getInstance()->executeS($sql); } private function _updateOrders() { $hooks = $this->_getHooks(); $orderData = Tools::getValue('widget'); if($orderData && is_array($orderData)) { foreach($orderData as $key => $widget) { $temp = explode(',', $widget); if(count($temp) == 2 && in_array($temp[1], $hooks)) { $sql = "UPDATE "._DB_PREFIX_."ybc_widget_widget SET sort_order = ".(int)$temp[0].", hook='".$temp[1]."' WHERE id_widget = $key"; Db::getInstance()->execute($sql); } } } } public function hookDisplayBackOfficeHeader() { $this->context->controller->addCSS((__PS_BASE_URI__).'modules/'.$this->name.'/css/admin.css', 'all'); } public function hookDisplayHeader() { $this->context->controller->addCSS((__PS_BASE_URI__).'modules/'.$this->name.'/css/widget.css', 'all'); } public function changeStatus($tbl, $field, $id , $status) { $req = "UPDATE "._DB_PREFIX_."ybc_widget_$tbl SET `enabled`=$status WHERE id_$tbl=$id"; return Db::getInstance()->execute($req); } private function _deleteWidget($id_widget) { if($this->itemExists('widget','id_widget',$id_widget)) { $widget = new Ybc_widget_widget_class($id_widget); if($widget->image && file_exists(dirname(__FILE__).'/images/widget/'.$widget->image)) { @unlink(dirname(__FILE__).'/images/widget/'.$widget->image); } return $widget->delete(); } return false; } public function hookDisplayNav() { $widgets = $this->getWidgetsByHook('displayNav', true); $this->smarty->assign( array( 'widgets' => $widgets, 'widget_module_path' => $this->_path, 'widget_hook' => 'display-nav' ) ); return $this->display(__FILE__, 'widgets.tpl'); } public function hookDisplayTop() { $widgets = $this->getWidgetsByHook('displayTop', true); $this->smarty->assign( array( 'widgets' => $widgets, 'widget_module_path' => $this->_path, 'widget_hook' => 'display-top' ) ); return $this->display(__FILE__, 'widgets.tpl'); } public function hookDisplayFooter() { $widgets = $this->getWidgetsByHook('displayFooter', true); $this->smarty->assign( array( 'widgets' => $widgets, 'widget_module_path' => $this->_path, 'widget_hook' => 'display-footer' ) ); return $this->display(__FILE__, 'widgets.tpl'); } public function hookDisplayHome() { $widgets = $this->getWidgetsByHook('displayHome', true); $this->smarty->assign( array( 'widgets' => $widgets, 'widget_module_path' => $this->_path, 'widget_hook' => 'display-home' ) ); return $this->display(__FILE__, 'widgets.tpl'); } public function hookDisplayLeftColumn() { $widgets = $this->getWidgetsByHook('displayLeftColumn', true); $this->smarty->assign( array( 'widgets' => $widgets, 'widget_module_path' => $this->_path, 'widget_hook' => 'display-left-column' ) ); return $this->display(__FILE__, 'widgets.tpl'); } public function hookDisplayRightColumn() { $widgets = $this->getWidgetsByHook('displayRightColumn', true); $this->smarty->assign( array( 'widgets' => $widgets, 'widget_module_path' => $this->_path, 'widget_hook' => 'display-right-column' ) ); return $this->display(__FILE__, 'widgets.tpl'); } public function hookDisplayRightColumnProduct() { $widgets = $this->getWidgetsByHook('displayRightColumnProduct', true); $this->smarty->assign( array( 'widgets' => $widgets, 'widget_module_path' => $this->_path, 'widget_hook' => 'display-right-column-product' ) ); return $this->display(__FILE__, 'widgets.tpl'); } public function hookDisplayLeftColumnProduct() { $widgets = $this->getWidgetsByHook('displayLeftColumnProduct', true); $this->smarty->assign( array( 'widgets' => $widgets, 'widget_module_path' => $this->_path, 'widget_hook' => 'display-left-column-product' ) ); return $this->display(__FILE__, 'widgets.tpl'); } public function hookDisplayTopColumn() { $widgets = $this->getWidgetsByHook('displayTopColumn', true); $this->smarty->assign( array( 'widgets' => $widgets, 'widget_module_path' => $this->_path, 'widget_hook' => 'display-top-column' ) ); return $this->display(__FILE__, 'widgets.tpl'); } public function hookYbcCustomHook() { $widgets = $this->getWidgetsByHook('ybcCustomHook', true); $this->smarty->assign( array( 'widgets' => $widgets, 'widget_module_path' => $this->_path, 'widget_hook' => 'ybc-custom-hook' ) ); return $this->display(__FILE__, 'widgets.tpl'); } public function hookYbcPaymentLogo() { $widgets = $this->getWidgetsByHook('ybcPaymentLogo', true); $this->smarty->assign( array( 'widgets' => $widgets, 'widget_module_path' => $this->_path, 'widget_hook' => 'ybc-ybcpaymentlogo-hook' ) ); return $this->display(__FILE__, 'widgets.tpl'); } public function hookYbcFooterLinks() { $widgets = $this->getWidgetsByHook('ybcFooterLinks', true); $this->smarty->assign( array( 'widgets' => $widgets, 'widget_module_path' => $this->_path, 'widget_hook' => 'ybc-footer-links' ) ); return $this->display(__FILE__, 'widgets.tpl'); } public function hookYbcCustom1() { $widgets = $this->getWidgetsByHook('ybcCustom1', true); $this->smarty->assign( array( 'widgets' => $widgets, 'widget_module_path' => $this->_path, 'widget_hook' => 'ybc-custom-1' ) ); return $this->display(__FILE__, 'widgets.tpl'); } public function hookYbcCustom2() { $widgets = $this->getWidgetsByHook('ybcCustom2', true); $this->smarty->assign( array( 'widgets' => $widgets, 'widget_module_path' => $this->_path, 'widget_hook' => 'ybc-custom-2' ) ); return $this->display(__FILE__, 'widgets.tpl'); } public function hookYbcCustom3() { $widgets = $this->getWidgetsByHook('ybcCustom3', true); $this->smarty->assign( array( 'widgets' => $widgets, 'widget_module_path' => $this->_path, 'widget_hook' => 'ybc-custom-3' ) ); return $this->display(__FILE__, 'widgets.tpl'); } public function hookYbcCustom4() { $widgets = $this->getWidgetsByHook('ybcCustom4', true); $this->smarty->assign( array( 'widgets' => $widgets, 'widget_module_path' => $this->_path, 'widget_hook' => 'ybc-custom-4' ) ); return $this->display(__FILE__, 'widgets.tpl'); } public function hookYbcCustom5() { $widgets = $this->getWidgetsByHook('ybcCustom5', true); $this->smarty->assign( array( 'widgets' => $widgets, 'widget_module_path' => $this->_path, 'widget_hook' => 'ybc-custom-5' ) ); return $this->display(__FILE__, 'widgets.tpl'); } public function hookYbcCustom6() { $widgets = $this->getWidgetsByHook('ybcCustom6', true); $this->smarty->assign( array( 'widgets' => $widgets, 'widget_module_path' => $this->_path, 'widget_hook' => 'ybc-custom-6' ) ); return $this->display(__FILE__, 'widgets.tpl'); } private function installSample() { $languages = Language::getLanguages(false); $id_lang_default = (int)Configuration::get('PS_LANG_DEFAULT'); $sqlFile = dirname(__FILE__).'/data/sql/widget.sql'; if(file_exists($sqlFile) && ($sql = Tools::file_get_contents($sqlFile))) { $tbs = array('ybc_widget_widget','ybc_widget_widget_lang'); foreach($tbs as $tbl) { Db::getInstance()->execute("DELETE FROM "._DB_PREFIX_.$tbl); } if(!$this->parseSql($sql)) { $sqlLangFile = dirname(__FILE__).'/data/sql/widget_lang.sql'; if(file_exists($sqlLangFile) && ($sql = Tools::file_get_contents($sqlLangFile)) && $languages) { foreach($languages as $lang) { $subsql = str_replace('_ID_LANG_',$lang['id_lang'],$sql); $this->parseSql($subsql); } } } } if($oldFiles = glob(dirname(__FILE__).'/images/widget/*')) { foreach($oldFiles as $file){ if(is_file($file)) @unlink($file); } } $this->copyDir(dirname(__FILE__).'/data/img/',dirname(__FILE__).'/images/widget/'); } public function parseSql($sql) { $errors = array(); $sql = str_replace('_DB_PREFIX_',_DB_PREFIX_, $sql); $queries = preg_split('#;\s*[\r\n]+#', $sql); foreach ($queries as $query) { $query = trim($query); if (!$query) { continue; } if (!Db::getInstance()->execute($query)) { $errors[] = Db::getInstance()->getMsgError(); } } return $errors; } private function copyDir($src,$dst) { if(file_exists($src) && file_exists($dst) && is_dir($src) && is_dir($dst)) { $dir = opendir($src); @mkdir($dst); while(false !== ( $file = readdir($dir)) ) { if (( $file != '.' ) && ( $file != '..' )) { @copy($src . '/' . $file,$dst . '/' . $file); } } closedir($dir); } } }