hotel_commerce/modules/hotelreservationsystem/classes/HotelImage.php
2023-06-26 13:09:26 +05:30

312 lines
11 KiB
PHP

<?php
/**
* 2010-2020 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-2020 Webkul IN
* @license https://store.webkul.com/license.html
*/
class HotelImage extends ObjectModel
{
public $id;
public $id_hotel;
public $cover;
public $image_format = 'jpg';
protected static $access_rights = 0755;
public static $definition = array(
'table' => 'htl_image',
'primary' => 'id',
'fields' => array(
'id_hotel' => array('type' => self::TYPE_INT, 'validate' => 'isInt'),
'cover' => array('type' => self::TYPE_BOOL,'validate' => 'isBool')
),
);
public function __construct($id = null, $id_lang = null, $id_shop = null)
{
parent::__construct($id, $id_lang, $id_shop);
$this->source_index = _PS_HOTEL_IMG_DIR_.'index.php';
$this->image_dir = _PS_HOTEL_IMG_DIR_.$this->getImgFolder();
}
/**
* Deletes current hotel image from the database
* @return bool `true` if delete was successful
*/
public function delete()
{
if (!parent::delete()
|| !$this->deleteImage(true)
) {
return false;
}
return true;
}
/**
* Delete the hotel image from disk and remove the containing folder if empty
* Handles both legacy and new image filesystems
*/
public function deleteImage($force_delete = false)
{
parent::deleteImage();
// Can we delete the image folder?
if (is_dir($this->image_dir)) {
$delete_folder = true;
foreach (scandir($this->image_dir) as $file) {
if (($file != '.' && $file != '..' && $file != 'index.php')) {
$delete_folder = false;
break;
}
}
}
if (isset($delete_folder) && $delete_folder) {
// delete index image before deleting folder
unlink($this->image_dir.'index.php');
@rmdir($this->image_dir);
}
return true;
}
/**
* [getImagesByHotelId :: To get paginated hotel images data]
* @param [int] $id_hotel [id_hotel to get images of]
* @param [int] $p [page number of the paginated images data]
* @param [int] $n [number of images per page for paginated images data]
* @return [array|boolean] [if data found returns array containing information of the images of the hotel which id is passed]
*/
public function getImagesByHotelId($id_hotel, $p = 1, $n = null)
{
$p = (int) $p;
$n = $n !== null ? (int) $n : $n; // n = null for no pagination
if ($p <= 1) {
$p = 1;
}
$sql = 'SELECT *
FROM `'._DB_PREFIX_.'htl_image`
WHERE `id_hotel` = '.(int) $id_hotel.
($n ? ' LIMIT '.(int) (($p - 1) * $n).', '.(int) ($n) : '');
return Db::getInstance()->executeS($sql);
}
// for backward compatibility, use getImagesByHotelId() instead
public function getAllImagesByHotelId($id_hotel)
{
return $this->getImagesByHotelId($id_hotel);
}
/**
* [deleteByHotelId :: To delete hotel's images data of a hotel by its hotel Id]
* @param [int] $htl_id [Id of the hotel which images data you want to delete]
* @return [boolean] [Returns true if deleted successfully else returns false]
*/
public function deleteByHotelId($htl_id)
{
$delete = Db::getInstance()->delete('htl_image', '`id_hotel`='.(int)$htl_id);
return $delete;
}
public static function getCover($idHotel)
{
return Db::getInstance()->getRow(
'SELECT * FROM `'._DB_PREFIX_.'htl_image` WHERE `id_hotel` = '.(int)$idHotel.' AND `cover`=1'
);
}
public function getImageLink($id, $type = null)
{
return _PS_HOTEL_IMG_.self::getImageHotelId($id).'/'.$id.($type ? '-'.$type : '' ).'.'.$this->image_format;
}
public function getImagePath()
{
if (!$this->id) {
return false;
}
$path = $this->getImgFolder().$this->id;
return $path;
}
public function getImgFolder()
{
if ($this->id) {
if ($idHotel = self::getImageHotelId($this->id)) {
return $idHotel.'/';
}
}
return false;
}
public static function getImageHotelId($id)
{
return Db::getInstance()->getValue('
SELECT `id_hotel`
FROM `'._DB_PREFIX_.'htl_image`
WHERE `id` = '. (int)$id
);
}
public function uploadHotelImages($images, $idHotel)
{
if (isset($images) && $idHotel) {
$objHotelHelper = new HotelHelper();
$hotelImages = $images['tmp_name'];
if (is_array($images['tmp_name'])) {
foreach ($hotelImages as $image) {
$objHtlImage = new HotelImage();
$objHtlImage->id_hotel = $idHotel;
if ($coverImgExist = HotelImage::getCover($idHotel)) {
$objHtlImage->cover = 0;
} else {
$objHtlImage->cover = 1;
}
if ($objHtlImage->save()) {
if ($path = $objHtlImage->getPathForCreation()) {
if (ImageManager::resize(
$image,
$path.$objHtlImage->id.'.'.$objHtlImage->image_format
)) {
// add hotel images in all required sizes
$imagesTypes = ImageType::getImagesTypes('hotels');
$generate_hight_dpi_images = (bool)Configuration::get('PS_HIGHT_DPI');
foreach ($imagesTypes as $imageType) {
if (!ImageManager::resize(
$image,
$path.$objHtlImage->id.'-'.stripslashes($imageType['name']).'.'.$objHtlImage->image_format,
$imageType['width'],
$imageType['height']
)) {
continue;
}
if ($generate_hight_dpi_images) {
if (!ImageManager::resize(
$image,
$path.$objHtlImage->id.'-'.stripslashes($imageType['name']).'.'.$objHtlImage->image_format,
(int)$imageType['width']*2,
(int)$imageType['height']*2
)) {
continue;
}
}
}
}
}
}
}
} else {
$objHtlImage = new HotelImage();
$objHtlImage->id_hotel = $idHotel;
if ($coverImgExist = HotelImage::getCover($idHotel)) {
$objHtlImage->cover = 0;
} else {
$objHtlImage->cover = 1;
}
if ($objHtlImage->save()) {
if ($path = $objHtlImage->getPathForCreation()) {
if (ImageManager::resize(
$hotelImages,
$path.$objHtlImage->id.'.'.$objHtlImage->image_format
)) {
$imagesTypes = ImageType::getImagesTypes('hotels');
$generate_hight_dpi_images = (bool)Configuration::get('PS_HIGHT_DPI');
foreach ($imagesTypes as $imageType) {
if (!ImageManager::resize(
$hotelImages,
$path.$objHtlImage->id.'-'.stripslashes($imageType['name']).'.'.$objHtlImage->image_format,
$imageType['width'],
$imageType['height']
)) {
continue;
}
if ($generate_hight_dpi_images) {
if (!ImageManager::resize(
$hotelImages,
$path.$objHtlImage->id.'-'.stripslashes($imageType['name']).'.'.$objHtlImage->image_format,
(int)$imageType['width']*2,
(int)$imageType['height']*2
)) {
continue;
}
}
}
$addedImage = array(
'id' => $objHtlImage->id,
'cover' => $objHtlImage->cover,
'image_link' => Context::getContext()->link->getMediaLink($objHtlImage->getImageLink($objHtlImage->id)),
);
return $addedImage;
}
}
}
}
return true;
}
return false;
}
public function getPathForCreation()
{
if (!$this->id) {
return false;
}
$path = $this->getImgFolder();
$this->createImgFolder();
return _PS_HOTEL_IMG_DIR_.$path;
}
public function createImgFolder()
{
if (!$this->id) {
return false;
}
if (!file_exists(_PS_HOTEL_IMG_DIR_.$this->getImgFolder())) {
// Apparently sometimes mkdir cannot set the rights, and sometimes chmod can't. Trying both.
$success = @mkdir(_PS_HOTEL_IMG_DIR_.$this->getImgFolder(), self::$access_rights, true);
$chmod = @chmod(_PS_HOTEL_IMG_DIR_.$this->getImgFolder(), self::$access_rights);
// Create an index.php file in the new folder
if (($success || $chmod)
&& !file_exists(_PS_HOTEL_IMG_DIR_.$this->getImgFolder().'index.php')
&& file_exists($this->source_index)) {
return @copy($this->source_index, _PS_HOTEL_IMG_DIR_.$this->getImgFolder().'index.php');
}
}
return true;
}
public function getAllImages()
{
return Db::getInstance()->executeS('SELECT * FROM `'._DB_PREFIX_.'htl_image`');
}
}