bootstrap = true; $this->table = 'htl_amenity'; $this->className = 'HotelAmenities'; $this->identifier = 'id_amenity'; $this->toolbar_title = $this->l('Manage Amenities'); parent::__construct(); $this->display = 'view'; } public function initToolbar() { parent::initToolbar(); if ($this->display == 'view') { $this->page_header_toolbar_btn['add_category'] = array( 'href' => self::$currentIndex.'&add'.$this->table.'&token='.$this->token, 'desc' => $this->l('Add new Amenity Category'), 'imgclass' => 'new', ); } } public function initContent() { if (Tools::isSubmit('add'.$this->table) || Tools::isSubmit('update'.$this->table) || Tools::isSubmit('add'.$this->table.'_item') || Tools::isSubmit('update'.$this->table.'_item') ) { $this->display = 'edit'; } $this->initTabModuleList(); $this->initToolbar(); $this->initPageHeaderToolbar(); if ($this->display == 'edit') { $this->content = $this->renderForm(); } else { $this->content = $this->renderView(); } $this->context->smarty->assign(array( 'content' => $this->content, 'url_post' => self::$currentIndex.'&token='.$this->token, 'show_page_header_toolbar' => $this->show_page_header_toolbar, 'page_header_toolbar_title' => $this->page_header_toolbar_title, 'page_header_toolbar_btn' => $this->page_header_toolbar_btn, )); } public function renderView() { $objHotelAmenities = new HotelAmenities(); $this->context->smarty->assign(array( 'amenities_tree' => $objHotelAmenities->getAmenitiesTree(), 'img_base_url' => $this->module->getPathUri().self::IMG_DIR, 'current_index' => self::$currentIndex, 'token' => $this->token, 'admin_link' => Context::getContext()->link->getAdminLink('AdminHotelAmenities'), )); return parent::renderView(); } public function renderForm() { $languages = Language::getLanguages(false); $defaultLang = (int)Configuration::get('PS_LANG_DEFAULT'); $adminLink = Context::getContext()->link->getAdminLink('AdminHotelAmenities'); $this->context->smarty->assign(array( 'languages' => $languages, 'default_lang_id' => $defaultLang, 'current_index' => self::$currentIndex, 'token' => $this->token, 'admin_link' => $adminLink, )); if (Tools::isSubmit('add'.$this->table.'_item') || Tools::isSubmit('update'.$this->table.'_item')) { $idAmenity = (int)Tools::getValue('id'); $idCategory = (int)Tools::getValue('id_category'); $amenity = array(); if ($idAmenity) { $objHotelAmenities = new HotelAmenities($idAmenity); if (Validate::isLoadedObject($objHotelAmenities)) { $idCategory = (int)$objHotelAmenities->id_parent; $amenity = array( 'id' => $objHotelAmenities->id, 'id_parent' => $idCategory, 'active' => (int)$objHotelAmenities->active, 'logo_type' => $objHotelAmenities->logo_type, 'logo' => $objHotelAmenities->logo, 'name' => is_array($objHotelAmenities->name) ? $objHotelAmenities->name : array(), ); } } $imgPath = $this->module->getLocalPath().self::IMG_DIR.$idAmenity.'.jpg'; $this->context->smarty->assign(array( 'amenity' => $amenity, 'id_category' => $idCategory, 'existing_img' => ($idAmenity && file_exists($imgPath)) ? $this->module->getPathUri().self::IMG_DIR.$idAmenity.'.jpg' : false, )); } else { $idCategory = (int)Tools::getValue('id'); $category = array(); if ($idCategory) { $objHotelAmenities = new HotelAmenities($idCategory); if (Validate::isLoadedObject($objHotelAmenities)) { $category = array( 'id' => $objHotelAmenities->id, 'position' => $objHotelAmenities->position, 'name' => is_array($objHotelAmenities->name) ? $objHotelAmenities->name : array(), ); } } $this->context->smarty->assign('category', $category); } $this->fields_form = array('submit' => array('title' => $this->l('Save'))); return parent::renderForm(); } public function postProcess() { if (Tools::isSubmit('submitHtlCategory') || Tools::isSubmit('submitHtlCategoryAndStay')) { $idCategory = (int)Tools::getValue('id'); $pos = (int)Tools::getValue('position'); $languages = Language::getLanguages(false); $defaultLang = (int)Configuration::get('PS_LANG_DEFAULT'); if (!$pos || !Validate::isUnsignedInt($pos)) { $this->errors[] = $this->l('Position is invalid.'); } $nameDefault = trim(Tools::getValue('cat_name_'.$defaultLang)); if (!$nameDefault) { $this->errors[] = $this->l('Category name is required in default language.'); } elseif (!Validate::isGenericName($nameDefault)) { $this->errors[] = $this->l('Category name is invalid.'); } if (count($this->errors)) { $this->display = 'edit'; return; } $objHotelAmenities = $idCategory ? new HotelAmenities($idCategory) : new HotelAmenities(); foreach ($languages as $lang) { $val = trim(Tools::getValue('cat_name_'.$lang['id_lang'])); $objHotelAmenities->name[$lang['id_lang']] = $val ?: $nameDefault; } $objHotelAmenities->id_parent = 0; $objHotelAmenities->position = $pos; $objHotelAmenities->active = 1; if (!$objHotelAmenities->save()) { $this->errors[] = $this->l('Error saving category.'); $this->display = 'edit'; return; } $conf = $idCategory ? 4 : 3; if (Tools::isSubmit('submitHtlCategoryAndStay')) { Tools::redirectAdmin(self::$currentIndex.'&id='.(int)$objHotelAmenities->id.'&update'.$this->table.'&conf='.$conf.'&token='.$this->token); } else { Tools::redirectAdmin(self::$currentIndex.'&conf='.$conf.'&token='.$this->token); } return; } if (Tools::isSubmit('submitHtlAmenityItem') || Tools::isSubmit('submitHtlAmenityItemAndStay')) { $idAmenity = (int)Tools::getValue('id'); $idCategory = (int)Tools::getValue('id_category'); $active = (int)Tools::getValue('active'); $logoType = Tools::getValue('logo_type'); $languages = Language::getLanguages(false); $defaultLang = (int)Configuration::get('PS_LANG_DEFAULT'); if (!$idCategory) { $this->errors[] = $this->l('Category is required.'); } $nameDefault = trim(Tools::getValue('amenity_name_'.$defaultLang)); if (!$nameDefault) { $this->errors[] = $this->l('Amenity name is required in default language.'); } elseif (!Validate::isGenericName($nameDefault)) { $this->errors[] = $this->l('Amenity name is invalid.'); } $logoValue = ''; if ($logoType === 'icon') { $logoValue = trim(Tools::getValue('logo_icon')); if (!$logoValue) { $this->errors[] = $this->l('Icon class is required.'); } elseif (!preg_match('/^icon-/', $logoValue)) { $this->errors[] = $this->l('Icon class must start with "icon-" (e.g. icon-wifi).'); } elseif (!Validate::isGenericName(str_replace('-', ' ', $logoValue))) { $this->errors[] = $this->l('Icon name is invalid.'); } } else { $hasUpload = isset($_FILES['logo_image']) && !empty($_FILES['logo_image']['tmp_name']); $hasExisting = $idAmenity && file_exists($this->module->getLocalPath().self::IMG_DIR.$idAmenity.'.jpg'); if (!$hasUpload && !$hasExisting) { $this->errors[] = $this->l('Please upload an image for this amenity.'); } } if (count($this->errors)) { $this->display = 'edit'; return; } $objHotelAmenities = $idAmenity ? new HotelAmenities($idAmenity) : new HotelAmenities(); foreach ($languages as $lang) { $val = trim(Tools::getValue('amenity_name_'.$lang['id_lang'])); $objHotelAmenities->name[$lang['id_lang']] = $val ?: $nameDefault; } $objHotelAmenities->id_parent = $idCategory; $objHotelAmenities->active = $active; $objHotelAmenities->logo_type = ($logoType === 'icon') ? 'icon' : 'image'; $objHotelAmenities->logo = ($logoType === 'icon') ? $logoValue : $objHotelAmenities->logo; if (!$objHotelAmenities->save()) { $this->errors[] = $this->l('Error saving amenity.'); $this->display = 'edit'; return; } if ($logoType === 'icon') { $imgFile = $this->module->getLocalPath().self::IMG_DIR.$objHotelAmenities->id.'.jpg'; if (file_exists($imgFile)) { unlink($imgFile); } } if ($logoType === 'image' && isset($_FILES['logo_image']) && $_FILES['logo_image']['tmp_name']) { $imgFile = $_FILES['logo_image']; if ($error = ImageManager::validateUpload($imgFile, Tools::getMaxUploadSize())) { $this->errors[] = $error; } else { $imgDir = $this->module->getLocalPath().self::IMG_DIR; if (!is_dir($imgDir)) { mkdir($imgDir, 0755, true); } if (ImageManager::resize($imgFile['tmp_name'], $imgDir.$objHotelAmenities->id.'.jpg')) { $objHotelAmenities->logo = $objHotelAmenities->id.'.jpg'; $objHotelAmenities->save(); } else { $this->errors[] = $this->l('Error uploading amenity image.'); } } } if (count($this->errors)) { $this->display = 'edit'; return; } $conf = $idAmenity ? 4 : 3; if (Tools::isSubmit('submitHtlAmenityItemAndStay')) { Tools::redirectAdmin(self::$currentIndex.'&id='.(int)$objHotelAmenities->id.'&id_category='.(int)$idCategory.'&update'.$this->table.'_item&conf='.$conf.'&token='.$this->token); } else { Tools::redirectAdmin(self::$currentIndex.'&conf='.$conf.'&token='.$this->token); } return; } if (empty($this->errors)) { parent::postProcess(); } } public function ajaxProcessDeleteCategory() { $response = array('status' => false); if ($this->tabAccess['delete']) { $objHotelAmenities = new HotelAmenities(); if ($objHotelAmenities->deleteCategory((int)Tools::getValue('id_category'))) { $response['status'] = true; } else { $response['msg'] = $this->l('Error deleting category.'); } } else { $response['msg'] = $this->l('You do not have permission to delete.'); } $this->ajaxDie(json_encode($response)); } public function ajaxProcessDeleteAmenityItem() { $response = array('status' => false); if ($this->tabAccess['delete']) { $objHotelAmenities = new HotelAmenities((int)Tools::getValue('id_amenity')); if (Validate::isLoadedObject($objHotelAmenities) && $objHotelAmenities->delete()) { $response['status'] = true; } else { $response['msg'] = $this->l('Error deleting amenity.'); } } else { $response['msg'] = $this->l('You do not have permission to delete.'); } $this->ajaxDie(json_encode($response)); } public function setMedia() { parent::setMedia(); $this->addJs(_MODULE_DIR_.'hotelreservationsystem/views/js/hotelAmenity.js'); $this->addCSS(_MODULE_DIR_.'hotelreservationsystem/views/css/hotelAmenity.css'); } }