hotel_commerce/modules/blocknavigationmenu/controllers/admin/AdminCustomNavigationLinkSettingController.php
2023-06-26 13:09:26 +05:30

390 lines
16 KiB
PHP

<?php
/**
* 2010-2019 Webkul.
*
* NOTICE OF LICENSE
*
* All right is reserved,
* Please go through this link for complete license : https://store.webkul.com/license.html
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade this module to newer
* versions in the future. If you wish to customize this module for your
* needs please refer to https://store.webkul.com/customisation-guidelines/ for more information.
*
* @author Webkul IN <support@webkul.com>
* @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 '<a target="_blank" href="'.$link.'">'.$link.'</a>';
}
public function getShowAtNavigationStatus($showAtNavigation, $row)
{
$link = self::$currentIndex.'&id='.$row['id_navigation_link'].'&navigation_display_status&'.$this->table.
'&token='.$this->token;
if ($showAtNavigation) {
return '<a class="list-action-enable action-enabled" href="'.$link.'"><i class="icon-check"></i></a>';
} else {
return '<a class="list-action-enable action-disabled" href="'.$link.'"><i class="icon-close"></i></a>';
}
}
public function getShowAtFooterStatus($showAtFooter, $row)
{
$link = self::$currentIndex.'&id='.$row['id_navigation_link'].'&footer_display_status&'.$this->table.
'&token='.$this->token;
if ($showAtFooter) {
return '<a class="list-action-enable action-enabled" href="'.$link.'"><i class="icon-check"></i></a>';
} else {
return '<a class="list-action-enable action-disabled" href="'.$link.'"><i class="icon-close"></i></a>';
}
}
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');
}
}