HEX
Server: LiteSpeed
System: Linux s1049.use1.mysecurecloudhost.com 4.18.0-477.27.2.lve.el8.x86_64 #1 SMP Wed Oct 11 12:32:56 UTC 2023 x86_64
User: xedaptot (3356)
PHP: 8.3.31
Disabled: NONE
Upload Files
File: /home/xedaptot/cms.naniguide.com/templates/default/common/get_days.php
<?php
require_once('../../../common/lib.php');
require_once('../../../common/define.php');

if(isset($pms_db) && $pms_db !== false){
    
    if(isset($_POST['currentMonth']) && is_numeric($_POST['currentMonth'])
    && isset($_POST['currentYear']) && is_numeric($_POST['currentYear'])){

        $currentMonth = $_POST['currentMonth'];
        $currentYear = $_POST['currentYear'];
        
        if(isset($_POST['room']) && is_numeric($_POST['room'])) $room_id = $_POST['room'];
        else $room_id = 0;

        $bookings = array();
        $days = array('booked' => array(), 'free' => array());
        
        $start_month = pms_gm_strtotime($currentYear.'-'.$currentMonth.'-1 00:00:00');
        $nb_days = gmdate('t', $start_month);
        $end_month = pms_gm_strtotime($currentYear.'-'.$currentMonth.'-'.$nb_days.' 00:00:00');
        
        $query_rate = '
            SELECT start_date, end_date, stock, days
            FROM pm_rate, pm_room as r, pm_package as p
            WHERE id_room = r.id
                AND id_package = p.id
                AND start_date <= '.$end_month.'
                AND end_date >= '.$start_month;
        if($room_id != 0) $query_rate .= ' AND id_room = '.$room_id;
        $result_rate = $pms_db->query($query_rate);
        if($result_rate !== false){
            foreach($result_rate as $i => $row){
                $start_date = $row['start_date'];
                $end_date = $row['end_date'];
                $stock = $row['stock'];
                $w_days = explode(',', $row['days']);

                $start = ($start_date < $start_month) ? $start_month : $start_date;
                $end = ($end_date > $end_month) ? $end_month : $end_date;
                
                $d = (int)gmdate('j', $start);
                
                for($date = $start; $date <= $end; $date += 86400){
                    $wd = (int)gmdate('N', $date);
                    
                    if($stock > 0 && in_array($wd, $w_days) && !in_array($d, $days['free'])) $days['free'][] = $d;
                    $d++;
                }
            }
        }
        
        $query_book = '
            SELECT stock, br.id_room as room_id, from_date, to_date
            FROM pm_booking as b, pm_booking_room as br, pm_room as r
            WHERE
                lang = '.PMS_DEFAULT_LANG.'
                AND br.id_room = r.id
                AND br.id_booking = b.id
                AND (status = 4 OR (status = 1 AND (add_date > '.(time()-900).' OR payment_option IN(\'arrival\',\'check\'))))
                AND from_date <= '.$end_month.'
                AND to_date >= '.$start_month;
				if($room_id != 0) $query_book .= '
				AND id_room = '.$room_id;
				$query_book .= '
			GROUP BY br.id
		
			UNION ALL
			
			SELECT stock, r.id as room_id, from_date, to_date
			FROM pm_room as r, pm_room_lock as rl
			WHERE
				lang = '.PMS_DEFAULT_LANG.'
				AND rl.id_room = r.id
				AND rl.add_date > '.(time()-900).'
				AND r.checked = 1';
				if(!empty($room_id)) $query_book .= '
				AND r.id = '.$room_id;
				if(isset($_SESSION['book']['sessid'])) $query_book .= '
				AND sessid != '.$pms_db->quote($_SESSION['book']['sessid']);
				$query_book .= '
				
			UNION ALL
			
			SELECT (r.stock-rc.stock)+1 as stock, r.id as room_id, from_date, to_date
			FROM pm_room as r, pm_room_closing as rc
			WHERE
				lang = '.PMS_DEFAULT_LANG.'
				AND rc.id_room = r.id
				AND r.checked = 1
                AND from_date <= '.$end_month.'
                AND to_date >= '.$start_month;
				if(!empty($room_id)) $query_book .= '
				AND r.id = '.$room_id;
				
				$query_book .= '
			
			UNION ALL
			
			SELECT stock, r.id as room_id, from_date, to_date
			FROM pm_room as r, pm_ical_event as ev
			WHERE
				lang = '.PMS_DEFAULT_LANG.'
				AND ev.id_room = r.id
				AND r.checked = 1
				AND from_date <= '.$end_month.'
				AND to_date >= '.$start_month;
				if(!empty($room_id)) $query_book .= '
				AND r.id = '.$room_id;
        
        $result_book = $pms_db->query($query_book);
        if($result_book !== false){
            foreach($result_book as $i => $row){
                $start_date = $row['from_date'];
                $end_date = $row['to_date'];
                $stock = $row['stock'];

                $start = ($start_date < $start_month) ? $start_month : $start_date;
                $end = ($end_date > $end_month) ? $end_month : $end_date;
                
                $d = (int)gmdate('j', $start);
                
                for($date = $start; $date < $end; $date += 86400){
                    
                    $bookings[$d] = isset($bookings[$d]) ? $bookings[$d]+1 : 1;
                    if($bookings[$d] >= $stock && !in_array($d, $days['booked'])) $days['booked'][] = $d;
                    $d++;
                }
            }
        }
        echo json_encode($days);
    }
}