hotel_commerce/modules/qlohotelreview/qlohotelreview.php
2023-06-26 13:09:26 +05:30

379 lines
13 KiB
PHP

<?php
/**
* 2010-2022 Webkul.
*
* NOTICE OF LICENSE
*
* All right is reserved,
* Please go through LICENSE.txt file inside our module
*
* 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 CustomizationPolicy.txt file inside our module for more information.
*
* @author Webkul IN
* @copyright 2010-2022 Webkul IN
* @license LICENSE.txt
*/
if (!defined('_PS_VERSION_')) {
exit;
}
require_once 'classes/RequiredFiles.php';
class QloHotelReview extends Module
{
public function __construct()
{
$this->name = 'qlohotelreview';
$this->tab = 'front_office_features';
$this->version = '1.0.0';
$this->ps_versions_compliancy = array('min' => '1.6', 'max' => '1.6');
$this->author = 'Webkul';
$this->bootstrap = true;
parent::__construct();
$this->secure_key = Tools::encrypt($this->name);
$this->displayName = $this->l('QloApps Hotel Reviews');
$this->description = $this->l('This module allows guests to review hotels on specific categories.');
$this->confirmUnsinstall = $this->l('Are you sure you want to uninstall?');
}
public function install()
{
if (!parent::install()
|| !$this->registerModuleHooks()
|| !$this->installModuleTabs()
|| !QhrHotelReviewDb::createTables()
|| !$this->saveModuleDefaultConfig()
) {
return false;
}
return true;
}
public function getContent()
{
Tools::redirectAdmin($this->context->link->getAdminLink('AdminHotelReviewHotelReview'));
}
public function registerModuleHooks()
{
return $this->registerHook(
array(
'actionFrontControllerSetMedia',
'displayProductTab',
'displayProductTabContent',
'displayFooterBefore',
'displayRoomTypeDetailRoomTypeNameAfter',
'actionRoomBookingStatusUpdateAfter',
'displayBookingAction',
'displayBackOfficeHeader',
'displayAdminAfterHeader',
)
);
}
public function saveModuleDefaultConfig()
{
$config = QhrHotelReviewDb::getModuleDefaultConfig();
foreach ($config as $key => $value) {
if (!Configuration::updateValue($key, $value)) {
return false;
}
}
if (!QhrHotelReviewDb::saveDefaultCategories()) {
return false;
}
return true;
}
public function hookActionFrontControllerSetMedia()
{
// review popup resources
$this->reviewPopupResources();
// review list resources
$this->reviewListResources();
// room type detail page resources
$this->roomTypeDetailResources();
}
public function reviewPopupResources()
{
$controllers = array('history', 'guesttracking');
$controller = Tools::getValue('controller');
if (!in_array($controller, $controllers)) {
return;
}
$idOrder = 0;
if ($controller == 'history') {
$idOrder = (int) Tools::getValue('id_order');
}
$this->loadMedia($idOrder);
}
public function reviewListResources()
{
if (Tools::getValue('controller') == 'product') {
$idProduct = Tools::getValue('id_product');
$objHotelRoomType = new HotelRoomType();
$roomTypeInfo = $objHotelRoomType->getRoomTypeInfoByIdProduct($idProduct);
$idHotel = $roomTypeInfo['id_hotel'];
$reviewImages = QhrHotelReview::getAllImages($idHotel);
Media::addJsDef(array('qlo_hotel_review_js_vars' => array(
'review_ajax_link' => $this->context->link->getModuleLink($this->name),
'review_ajax_token' => $this->secure_key,
'raty_img_path' => $this->getPathUri().'views/img/raty',
'review_images' => $reviewImages,
)));
$this->context->controller->addCSS(_PS_JS_DIR_.'raty/jquery.raty.css');
$this->context->controller->addJS(_PS_JS_DIR_.'raty/jquery.raty.js');
$this->context->controller->addJS(_PS_JS_DIR_.'jquery-circle-progress/circle-progress.min-1.2.2.js');
$this->context->controller->addCSS($this->getPathUri().'views/css/front/review-list.css');
$this->context->controller->addJS($this->getPathUri().'views/js/front/review-list.js');
}
}
public function roomTypeDetailResources()
{
if (Tools::getValue('controller') == 'product') {
Media::addJsDef(array('qlo_hotel_review_rtd_js_vars' => array(
'raty_img_path' => $this->getPathUri().'views/img/raty',
)));
$this->context->controller->addCSS(_PS_JS_DIR_.'raty/jquery.raty.css');
$this->context->controller->addJS(_PS_JS_DIR_.'raty/jquery.raty.js');
$this->context->controller->addCSS($this->getPathUri().'views/css/front/room-type-detail.css');
$this->context->controller->addJS($this->getPathUri().'views/js/front/room-type-detail.js');
}
}
public function loadMedia($idOrder)
{
Media::addJsDef(array('qlo_hotel_review_js_vars' => array(
'id_order' => (int) $idOrder, // 0 for guesttracking
'link' => $this->context->link->getPageLink('order-detail', true),
'review_ajax_link' => $this->context->link->getModuleLink($this->name),
'review_ajax_token' => $this->secure_key,
'raty_img_path' => $this->getPathUri().'views/img/raty',
'num_images_max' => (int) Configuration::get('QHR_MAX_IMAGES_PER_REVIEW'),
'admin_approval_enabled' => (int) Configuration::get('QHR_ADMIN_APPROVAL_ENABLED'),
'texts' => array(
'num_files' => sprintf(
$this->l('You can upload a maximum of %d images.', false, true),
(int) Configuration::get('QHR_MAX_IMAGES_PER_REVIEW')
),
),
)));
$this->context->controller->addCSS(_PS_JS_DIR_.'raty/jquery.raty.css');
$this->context->controller->addJS(_PS_JS_DIR_.'raty/jquery.raty.js');
$this->context->controller->addCSS($this->getPathUri().'views/css/front/review.css');
$this->context->controller->addJS($this->getPathUri().'views/js/hook/review.js');
}
public function hookDisplayBookingAction($params)
{
$idOrder = $params['id_order'];
if (QhrHotelReviewHelper::getIsReviewable($idOrder)
&& !QhrHotelReview::getByIdOrder($idOrder)
) {
$hotel = QhrHotelReviewHelper::getHotelByOrder($idOrder);
$this->smarty->assign(array(
'id_order' => (int) $idOrder,
'id_hotel' => $hotel['id_hotel'],
'hotel_name' => $hotel['hotel_name'],
));
return $this->display(__FILE__, 'booking-action.tpl');
}
}
public function hookDisplayFooterBefore()
{
$controllers = array('history', 'guesttracking');
$controller = Tools::getValue('controller');
if (in_array($controller, $controllers)) {
$categories = QhrCategory::getAll();
$this->smarty->assign(array(
'categories' => $categories,
'action' => $this->context->link->getModuleLink($this->name),
));
return $this->display(__FILE__, 'add-review-popup.tpl');
}
}
public function hookDisplayRoomTypeDetailRoomTypeNameAfter($params)
{
$idProduct = $params['id_product'];
$objHotelRoomType = new HotelRoomType();
$roomTypeInfo = $objHotelRoomType->getRoomTypeInfoByIdProduct($idProduct);
$idHotel = $roomTypeInfo['id_hotel'];
$this->smarty->assign(array(
'num_reviews' => QhrHotelReview::getReviewCountByIdHotel($idHotel),
'avg_rating' => QhrHotelReview::getAverageRatingByIdHotel($idHotel),
'ratting_img_path' => _MODULE_DIR_.'hotelreservationsystem/views/img/Slices/icons-sprite.png',
));
return $this->display(__FILE__, 'room-type-name-after.tpl');
}
public function hookActionRoomBookingStatusUpdateAfter($params)
{
$idOrder = $params['id_order'];
if (QhrHotelReviewHelper::getIsOrderCheckedOut($idOrder)) {
QhrHotelReviewHelper::sendReviewRequestMail($idOrder);
}
}
public function hookDisplayProductTab()
{
return $this->display(__FILE__, 'product-tab.tpl');
}
public function hookDisplayProductTabContent()
{
$idProduct = Tools::getValue('id_product');
$objHotelRoomType = new HotelRoomType();
$roomTypeInfo = $objHotelRoomType->getRoomTypeInfoByIdProduct($idProduct);
$idHotel = $roomTypeInfo['id_hotel'];
$reviewsAtOnce = (int) Configuration::get('QHR_REVIEWS_AT_ONCE');
$reviews = QhrHotelReview::getByHotel(
$idHotel,
1,
$reviewsAtOnce,
QhrHotelReview::QHR_SORT_BY_TIME_NEW,
$this->context->cookie->id_customer
);
if (is_array($reviews) && count($reviews)) {
foreach ($reviews as &$review) {
$review['images'] = QhrHotelReview::getImagesById($review['id_hotel_review']);
}
}
$summary = QhrHotelReview::getSummaryByHotel($idHotel);
if (is_array($summary['categories']) && count($summary['categories'])) {
$summary = QhrHotelReviewHelper::prepareCategoriesData($summary);
}
$hasNextPage = QhrHotelReview::hasNextPage($idHotel, 1, $reviewsAtOnce);
$this->smarty->assign(array(
'id_hotel' => $idHotel,
'reviews' => $reviews,
'summary' => $summary,
'images' => QhrHotelReview::getAllImages($idHotel),
'logged' => $this->context->customer->isLogged(true),
'show_load_more_btn' => $hasNextPage,
));
return $this->display(__FILE__, 'product-tab-content.tpl');
}
public function installModuleTabs()
{
$tabs = array(
array('AdminParentHotelReview', 'Hotel Reviews', false, true),
array('AdminHotelReviewCategory', 'Configuration', 'AdminParentHotelReview', true),
array('AdminHotelReviewHotelReview', 'Reviews', 'AdminParentHotelReview', false),
);
foreach ($tabs as $tab) {
$this->installTab($tab[0], $tab[1], $tab[2], $tab[3]);
}
return true;
}
public function installTab($className, $tabName, $tabParentName = false, $hidden = false)
{
$tab = new Tab();
$tab->active = 1;
$tab->class_name = $className;
$tab->name = array();
foreach (Language::getLanguages(false) as $lang) {
$tab->name[$lang['id_lang']] = $tabName;
}
if ($tabParentName) {
$tab->id_parent = (int) Tab::getIdFromClassName($tabParentName);
} elseif ($hidden) {
$tab->id_parent = -1;
} else {
$tab->id_parent = 0;
}
$tab->module = $this->name;
return $tab->add();
}
public function hookDisplayBackOfficeHeader()
{
$this->context->controller->addCSS($this->getPathUri().'views/css/hook/global.css');
}
public function hookDisplayAdminAfterHeader()
{
if ($currentController = Tools::getValue('controller')) {
$controllers = array(
'AdminHotelReviewHotelReview',
'AdminHotelReviewCategory',
);
if (in_array($currentController, $controllers)) {
return $this->display(__FILE__, 'admin-after-header.tpl');
}
}
}
public function deleteModuleConfigKeys()
{
$config = QhrHotelReviewDb::getModuleDefaultConfig();
foreach ($config as $key => $value) {
Configuration::deleteByName($key);
}
return true;
}
public function uninstallModuleTabs()
{
$moduleTabs = Tab::getCollectionFromModule($this->name);
if (!empty($moduleTabs)) {
foreach ($moduleTabs as $moduleTab) {
$moduleTab->delete();
}
}
return true;
}
public function reset()
{
if (!$this->uninstall(false)) {
return false;
}
if (!$this->install(false)) {
return false;
}
return true;
}
public function uninstall($keep = true)
{
if (!parent::uninstall()
|| ($keep && !QhrHotelReviewDb::deleteTables())
|| ($keep && !QhrHotelReview::cleanImagesDirectory())
|| !$this->uninstallModuleTabs()
|| !$this->deleteModuleConfigKeys()
) {
return false;
}
return true;
}
}