* @copyright 2010-2019 Webkul IN * @license https://store.webkul.com/license.html */ class AdminCustomNavigationLinkSettingController extends ModuleAdminController { protected $position_identifier = 'id_navigation_link_to_move'; public function __construct() { $this->table = 'htl_custom_navigation_link'; $this->className = 'WkCustomNavigationLink'; $this->_defaultOrderBy = 'position'; $this->bootstrap = true; $this->identifier = 'id_navigation_link'; parent::__construct(); $this->_join .= 'LEFT JOIN `'._DB_PREFIX_.'htl_custom_navigation_link_lang` cel ON (a.id_navigation_link = cel.id_navigation_link AND cel.`id_lang` = '.(int) $this->context->language->id.')'; $this->_join .= 'LEFT JOIN `'._DB_PREFIX_.'cms_lang` cmsl ON (a.id_cms = cmsl.id_cms AND cmsl.`id_lang` = '.(int) $this->context->language->id.')'; $this->_select = ' IF(a.`id_cms`, cmsl.`meta_title`, cel.`name`) as name'; $this->fields_options = array( 'moduleSetting' => array( 'title' => $this->l('Global Settings'), 'fields' => array( 'WK_SHOW_FOOTER_NAVIGATION_BLOCK' => array( 'title' => $this->l('Show navigation block at footer'), 'hint' => $this->l('Enable, if you want to display navigation block at footer.'), 'validation' => 'isBool', 'cast' => 'intval', 'type' => 'bool', ), ), 'submit' => array('title' => $this->l('Save')) ), ); $this->addRowAction('edit'); $this->addRowAction('delete'); $this->fields_list = array( 'id_navigation_link' => array( 'title' => $this->l('ID'), 'align' => 'center', ), 'name' => array( 'title' => $this->l('Name'), 'align' => 'center', 'havingFilter' => true, ), 'link' => array( 'title' => $this->l('Link'), 'align' => 'center', 'search' => false, 'callback' => 'getNavigationRedirectUrl', ), 'show_at_navigation' => array( 'title' => $this->l('Show at navigation menu'), 'callback' => 'getShowAtNavigationStatus', 'align' => 'center', 'type' => 'bool', ), 'show_at_footer' => array( 'title' => $this->l('Show at footer block'), 'callback' => 'getShowAtFooterStatus', 'align' => 'center', 'type' => 'bool', ), 'active' => array( 'title' => $this->l('Active'), 'align' => 'center', 'active' => 'status', 'type' => 'bool', ), 'position' => array( 'title' => $this->l('Position'), 'filter_key' => 'a!position', 'position' => 'position', 'align' => 'center', ), ); $this->bulk_actions = array( 'delete' => array( 'text' => $this->l('Delete selected'), 'icon' => 'icon-trash', 'confirm' => $this->l('Delete selected items?'), ), 'enableSelection' => array( 'text' => $this->l('Enable selection'), 'icon' => 'icon-power-off text-success', ), 'disableSelection' => array( 'text' => $this->l('Disable selection'), 'icon' => 'icon-power-off text-danger', ), ); $this->list_no_link = true; } public function initToolbar() { parent::initToolbar(); $this->page_header_toolbar_btn['new'] = array( 'href' => self::$currentIndex.'&add'.$this->table.'&token='.$this->token, 'desc' => $this->l('Add New Navigation Link') ); } public function initContent() { parent::initContent(); // to customize the view as per our requirements if ($this->display != 'add' && $this->display != 'edit') { $this->content = $this->renderOptions(); $this->content .= $this->renderList(); $this->context->smarty->assign('content', $this->content); } } public function getNavigationRedirectUrl($link, $row) { if ($row['id_cms']) { if (Validate::isLoadedObject($objCMS = new CMS($row['id_cms']))) { $link = $this->context->link->getCMSLink((int)$objCMS->id); } } elseif (!$row['is_custom_link']) { $link = $this->context->link->getPageLink($link); } return ''.$link.''; } public function getShowAtNavigationStatus($showAtNavigation, $row) { $link = self::$currentIndex.'&id='.$row['id_navigation_link'].'&navigation_display_status&'.$this->table. '&token='.$this->token; if ($showAtNavigation) { return ''; } else { return ''; } } public function getShowAtFooterStatus($showAtFooter, $row) { $link = self::$currentIndex.'&id='.$row['id_navigation_link'].'&footer_display_status&'.$this->table. '&token='.$this->token; if ($showAtFooter) { return ''; } else { return ''; } } public function renderForm() { $smartyVars = array(); $objNavigationLink = $this->loadObject(true); if (Validate::isLoadedObject($objNavigationLink)) { $smartyVars['navigationLinkInfo'] = (array) $objNavigationLink; $smartyVars['edit'] = 1; } // send theme's front pages $themePages = array(); if (Validate::isLoadedObject($objTheme = new Theme($this->context->shop->id_theme))) { if ($themePages = $objTheme->getMetas()) { foreach ($themePages as &$page) { if ($page['id_meta']) { if (Validate::isLoadedObject($objMeta = new Meta($page['id_meta']))) { $page['page'] = $objMeta->page; } } } } } $smartyVars['themePages'] = $themePages; $smartyVars['languages'] = Language::getLanguages(false); $smartyVars['currentLang'] = Language::getLanguage((int) Configuration::get('PS_LANG_DEFAULT')); $smartyVars['cmsPages'] = CMS::getCMSPages($smartyVars['currentLang'], 1); $this->context->smarty->assign($smartyVars); $this->fields_form = array( 'submit' => array( 'title' => $this->l('Save'), ), ); return parent::renderForm(); } public function processSave() { $isCmsPage = Tools::getValue('is_cms_block_link'); $idNavigationLink = Tools::getValue('id_navigation_link'); $active = Tools::getValue('active'); $isCustomLink = Tools::getValue('is_custom_redirect_link'); $link = Tools::getValue('link'); $redirectPage = Tools::getValue('redirect_page'); $showAtNavigation = Tools::getValue('show_at_navigation'); $showAtFooter = Tools::getValue('show_at_footer'); $defaultLangId = Configuration::get('PS_LANG_DEFAULT'); $objDefaultLanguage = Language::getLanguage((int) $defaultLangId); $languages = Language::getLanguages(false); $idCms = Tools::getValue('id_cms'); if ($isCmsPage) { if (!$idCms) { $this->errors[] = $this->l('Please choose a cms page.'); } elseif (!Validate::isUnsignedInt($idCms)) { $this->errors[] = $this->l('Invalid cms page.'); } } else { if (!trim(Tools::getValue('navigation_link_name_'.$defaultLangId))) { $this->errors[] = $this->l('Navigation link name is required at least in ').$objDefaultLanguage['name']; } else { foreach ($languages as $language) { if (!Validate::isGenericName(Tools::getValue('navigation_link_name_'.$language['id_lang']))) { $this->errors[] = $this->l('Invalid navigation link name for the language ').$language['name']; break; } } } if ($isCustomLink) { if (!trim($link)) { $this->errors[] = $this->l('Custom redirect url is required.'); } elseif (!Validate::isUrl($link)) { $this->errors[] = $this->l('Invalid custom redirect url.'); } } elseif (!trim($redirectPage)) { $this->errors[] = $this->l('Invalid page selected.'); } } if (!count($this->errors)) { $objCustomNavigationLink = new WkCustomNavigationLink(); if ($idNavigationLink) { $objCustomNavigationLink = new WkCustomNavigationLink($idNavigationLink); } else { if ($objCustomNavigationLink->position <= 0) { $objCustomNavigationLink->position = $objCustomNavigationLink->getHigherPosition(); } } if ($isCmsPage) { $objCustomNavigationLink->id_cms = $idCms; } else { $objCustomNavigationLink->id_cms = 0; foreach ($languages as $language) { if (!trim(Tools::getValue('navigation_link_name_'.$language['id_lang']))) { $objCustomNavigationLink->name[$language['id_lang']] = Tools::getValue( 'navigation_link_name_'.$defaultLangId ); } else { $objCustomNavigationLink->name[$language['id_lang']] = Tools::getValue( 'navigation_link_name_'.$language['id_lang'] ); } } if ($isCustomLink) { $objCustomNavigationLink->is_custom_link = 1; $objCustomNavigationLink->link = $link; } else { $objCustomNavigationLink->is_custom_link = 0; $objCustomNavigationLink->link = $redirectPage; } } $objCustomNavigationLink->show_at_navigation = $showAtNavigation; $objCustomNavigationLink->show_at_footer = $showAtFooter; $objCustomNavigationLink->active = $active; if ($objCustomNavigationLink->save()) { if (Tools::isSubmit('submitAdd'.$this->table.'AndStay')) { if ($idNavigationLink) { Tools::redirectAdmin( self::$currentIndex.'&id_navigation_link='.(int) $objCustomNavigationLink->id. '&update'.$this->table.'&conf=4&token='.$this->token ); } else { Tools::redirectAdmin( self::$currentIndex.'&id_navigation_link='.(int) $objCustomNavigationLink->id. '&update'.$this->table.'&conf=3&token='.$this->token ); } } else { if ($idNavigationLink) { Tools::redirectAdmin(self::$currentIndex.'&conf=4&token='.$this->token); } else { Tools::redirectAdmin(self::$currentIndex.'&conf=3&token='.$this->token); } } } } if (isset($idNavigationLink) && $idNavigationLink) { $this->display = 'edit'; } else { $this->display = 'add'; } } public function postProcess() { // change show_at_navigation status if (Tools::getIsset('navigation_display_status')) { if ($id = Tools::getValue('id')) { if (Validate::isLoadedObject($objNavigationLink = new WkCustomNavigationLink($id))) { $objNavigationLink->show_at_navigation = !(int)$objNavigationLink->show_at_navigation; if ($objNavigationLink->save()) { Tools::redirectAdmin(self::$currentIndex.'&conf=4&token='.$this->token); } else { $this->errors[] = $this->l('Some error occurred. Please try again.'); } } else { $this->errors[] = $this->l('Object not loaded. Please try again.'); } } else { $this->errors[] = $this->l('Object not loaded. Please try again.'); } } elseif (Tools::getIsset('footer_display_status')) { if ($id = Tools::getValue('id')) { if (Validate::isLoadedObject($objNavigationLink = new WkCustomNavigationLink($id))) { $objNavigationLink->show_at_footer = !(int)$objNavigationLink->show_at_footer; if ($objNavigationLink->save()) { Tools::redirectAdmin(self::$currentIndex.'&conf=4&token='.$this->token); } else { $this->errors[] = $this->l('Some error occurred. Please try again.'); } } else { $this->errors[] = $this->l('Object not loaded. Please try again.'); } } else { $this->errors[] = $this->l('Object not loaded. Please try again.'); } } Parent::postProcess(); } // update positions public function ajaxProcessUpdatePositions() { $way = (int) Tools::getValue('way'); $idNavigationLink = (int) Tools::getValue('id'); $positions = Tools::getValue('navigation_link'); foreach ($positions as $position => $value) { $pos = explode('_', $value); if (isset($pos[2]) && (int) $pos[2] === $idNavigationLink) { if ($objFeatureBlock = new WkCustomNavigationLink((int) $pos[2])) { if (isset($position) && $objFeatureBlock->updatePosition($way, $position, $idNavigationLink) ) { echo 'ok position '.(int) $position.' for custom navigation link '.(int) $pos[1].'\r\n'; } else { echo '{"hasError" : true, "errors" : "Can not update navigation link position '. (int) $idNavigationLink.' to position '.(int) $position.' "}'; } } else { echo '{"hasError" : true, "errors" : "This navigation link ('.(int) $idNavigationLink. ') can t be loaded"}'; } break; } } } public function setMedia() { parent::setMedia(); $this->addJS(_MODULE_DIR_.$this->module->name.'/views/js/admin/wk_navigation_link.js'); } }