content_only = true;
}
public function checkAccess()
{
return strcmp(Tools::getValue('token', ''), $this->module->secure_key) === 0;
}
public function displayAjaxAddReview()
{
$idHotel = Tools::getValue('id_hotel');
$idOrder = Tools::getValue('id_order');
$ratingOverall = Tools::getValue('rating_overall');
$ratingCategories = Tools::getValue('rating_categories');
$subject = Tools::getValue('subject');
$description = Tools::getValue('description');
$maxImages = (int) Configuration::get('QHR_MAX_IMAGES_PER_REVIEW');
$approvalEnabled = (int) Configuration::get('QHR_ADMIN_APPROVAL_ENABLED');
$status = false;
$errors = array('by_key' => array(), 'general' => array());
$objModule = new QloHotelReview();
$objHotel = new HotelBranchInformation($idHotel);
$objOrder = new Order($idOrder);
// Validations
if (!Validate::isLoadedObject($objHotel)) {
$errors['general'][] = $objModule->l('Invalid hotel ID.', 'default');
}
if (!Validate::isLoadedObject($objOrder)) {
$errors['general'][] = $objModule->l('Invalid order ID.', 'default');
}
if (!$subject) {
$errors['by_key']['subject'] = $objModule->l('This field can not be empty.', 'default');
} elseif(!Validate::isGenericName($subject)) {
$errors['by_key']['subject'] = $objModule->l('This field is invalid.', 'default');
} elseif(Tools::strlen($subject) > 255) {
$errors['by_key']['subject'] = $objModule->l('This field is too long.', 'default');
}
if(!Validate::isMessage($description)) {
$errors['by_key']['description'] = $objModule->l('Review description is invalid.', 'default');
} elseif(Tools::strlen($description) > 65535) {
$errors['by_key']['description'] = $objModule->l('This field is too long.', 'default');
}
if (is_array($_FILES) && array_key_exists('images', $_FILES)) {
if (count($_FILES['images']['name']) > $maxImages) {
$errors['general'][] = sprintf(
$objModule->l('Please upload a maximum of %d images.', 'default'),
$maxImages
);
}
}
if (!count($errors['by_key']) && !count($errors['general'])) {
$customerReview = QhrHotelReview::getByCustomer(
$objOrder->id_customer,
$idHotel,
$idOrder
);
if (!$customerReview) {
$objHotelReview = new QhrHotelReview();
$objHotelReview->id_hotel = (int) $idHotel;
$objHotelReview->id_order = (int) $idOrder;
$objHotelReview->description = strip_tags($description);
$objHotelReview->subject = $subject;
$objHotelReview->rating = $ratingOverall;
$objHotelReview->status_abusive = QhrHotelReview::QHR_STATUS_ABUSIVE_NOT_ABUSIVE;
$objHotelReview->status = $approvalEnabled ? QhrHotelReview::QHR_STATUS_PENDING :
QhrHotelReview::QHR_STATUS_APPROVED;
if ($objHotelReview->save()) {
$objHotelReview->addCategoryRatings($ratingCategories);
if ($maxImages) {
$objHotelReview->saveReviewImages();
}
$status = true;
}
} else {
$status = false;
$errors['general'][] = $objModule->l('Something went wrong.', 'default');
}
} else {
$status = false;
}
if (is_array($errors['general']) && count($errors['general'])) {
$html = '
';
foreach ($errors['general'] as $error) {
$html .= '- '.$error.'
';
}
$html .= '
';
$errors['general'] = $html;
}
$this->ajaxDie(json_encode(array('status' => $status, 'errors' => $errors)));
}
public function displayAjaxMarkReviewHelpful()
{
$response = array('status' => false);
$idHotelReview = (int) Tools::getValue('id_hotel_review');
if (!$idHotelReview) {
$this->ajaxDie(json_encode($response));
}
if (QhrHotelReview::isAlreadyMarkedHelpful($idHotelReview, $this->context->cookie->id_customer)) {
$this->ajaxDie(json_encode($response));
}
if (QhrHotelReview::markHelpful($idHotelReview, $this->context->cookie->id_customer)) {
$response['status'] = true;
$objHotelReview = new QhrHotelReview($idHotelReview);
$response['count_useful'] = $objHotelReview->getTotalUseful();
$this->ajaxDie(json_encode($response));
}
}
public function displayAjaxReportAbuse()
{
$response = array('status' => false);
$idHotelReview = (int) Tools::getValue('id_hotel_review');
if (!$idHotelReview) {
$this->ajaxDie(json_encode($response));
}
if (QhrHotelReview::isAlreadyReportedAbuse($idHotelReview, $this->context->cookie->id_customer)) {
$this->ajaxDie(json_encode($response));
}
if (QhrHotelReview::reportAbuse($idHotelReview, $this->context->cookie->id_customer)) {
$response['status'] = true;
$this->ajaxDie(json_encode($response));
}
}
public function displayAjaxGetReviews()
{
$response = array('status' => false);
$idHotel = (int) Tools::getValue('id_hotel');
$sortBy = (int) Tools::getValue('sort_by');
$page = (int)Tools::getValue('page');
$reviewsAtOnce = (int) Configuration::get('QHR_REVIEWS_AT_ONCE');
$reviews = QhrHotelReview::getByHotel(
$idHotel,
$page,
$reviewsAtOnce,
$sortBy,
$this->context->cookie->id_customer
);
$hasNextPage = QhrHotelReview::hasNextPage($idHotel, $page, $reviewsAtOnce);
if (is_array($reviews) && count($reviews)) {
$response['html'] = $this->renderReviews($reviews);
$response['status'] = true;
$response['message'] = 'HTML_OK';
$response['has_next_page'] = (bool) $hasNextPage;
}
$this->ajaxDie(json_encode($response));
}
public function displayAjaxSortBy()
{
$response = array('status' => false);
$idHotel = (int) Tools::getValue('id_hotel');
$sortBy = (int) Tools::getValue('sort_by');
$reviewsAtOnce = (int) Configuration::get('QHR_REVIEWS_AT_ONCE');
$reviews = QhrHotelReview::getByHotel(
$idHotel,
1,
$reviewsAtOnce,
$sortBy,
$this->context->cookie->id_customer
);
$hasNextPage = QhrHotelReview::hasNextPage($idHotel, 1, $reviewsAtOnce);
if (is_array($reviews) && count($reviews)) {
$response['html'] = $this->renderReviews($reviews);
$response['status'] = true;
$response['message'] = 'HTML_OK';
$response['has_next_page'] = (bool) $hasNextPage;
}
$this->ajaxDie(json_encode($response));
}
public function renderReviews($reviews)
{
if (is_array($reviews) && count($reviews)) {
foreach ($reviews as &$review) {
$review['images'] = QhrHotelReview::getImagesById($review['id_hotel_review']);
}
$html = '';
foreach ($reviews as &$review) {
$this->context->smarty->assign(array('review' => $review));
$html .= $this->context->smarty->fetch(
$this->module->getTemplatePath('_partials/review.tpl')
);
}
return $html;
}
return false;
}
}