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_activity.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['activity']) && is_numeric($_POST['activity'])) $activity_id = $_POST['activity'];
        else $activity_id = 0;

        $bookings = array();
        $booked_sessions = array();
        $sessions = 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');
        $today = pms_gm_strtotime(gmdate('Y').'-'.gmdate('n').'-'.gmdate('j').' 00:00:00');

        $query_session = 'SELECT start_date, end_date, days, id_activity_session, start_h, start_m FROM pm_activity, pm_activity_session, pm_activity_session_hour WHERE start_date <= '.$end_month.' AND end_date >= '.$start_month.' AND id_activity_session = pm_activity_session.id AND id_activity = pm_activity.id';
        if($activity_id != 0) $query_session .= ' AND id_activity = '.$activity_id;
        $query_session .= ' GROUP BY pm_activity_session_hour.id ORDER BY id_activity_session';
        $result_session = $pms_db->query($query_session);
        if($result_session !== false){
            foreach($result_session as $i => $row){
                $start_date = $row['start_date'];
                $end_date = $row['end_date'];
                $start_h = $row['start_h'];
                $start_m = $row['start_m'];
                $opening_days = explode(',', $row['days']);
                
                $d = 0;

                $start = ($start_date < $start_month) ? $start_month : $start_date;
                $end = ($end_date > $end_month) ? $end_month : $end_date;
                
                if($start < $today) $start = $today;
                
                $d = (int)gmdate('j', $start);
                //$dst = gmdate('I', $start);
                
                for($date = $start; $date <= $end; $date += 86400){
                    
                    /*$cur_dst = gmdate('I', $date);
                    if($dst != $cur_dst){
                        if($cur_dst == 0) $date += 3600;
                        else $date -= 3600;
                        $dst = $cur_dst;
                    }*/

                    $n = ((gmdate('w', $date)+6)%7)+1;
                    
                    $time = pms_gm_strtotime($currentYear.'-'.$currentMonth.'-'.$d.' '.$start_h.':'.$start_m.':00');
                    
                    $sessions[$d][] = $time;
                    
                    if(in_array($n, $opening_days) && !in_array($d, $days['free']) && $time > pms_gmtime()+86400)
                        $days['free'][] = $d;
                    
                    $d++;
                }
            }
        }
        
        $query_book = '
            SELECT date, max_people, ba.adults, ba.children, id_activity, from_date, to_date
            FROM pm_booking as b, pm_booking_activity as ba, pm_activity as a
            WHERE lang = '.PMS_DEFAULT_LANG.'
                AND id_booking = b.id
                AND id_activity = a.id
                AND (status = 4 OR (status = 1 AND (add_date > '.(time()-900).' OR payment_option IN(\'arrival\',\'check\'))))
                AND date <= '.$end_month.'
                AND date >= '.$start_month;
        if($activity_id != 0) $query_book .= ' AND id_activity = '.$activity_id;
        $query_book .= ' GROUP BY b.id';
        $result_book = $pms_db->query($query_book);
        if($result_book !== false){
            foreach($result_book as $i => $row){
                $date = $row['date'];
                $max_people = $row['max_people'];
                $num_adults = $row['adults'];
                $num_children = $row['children'];
                
                $num_people = $num_adults+$num_children;
                
                $bookings[$date] = isset($bookings[$date]) ? $bookings[$date]+$num_people : $num_people;
                if($bookings[$date] >= $max_people && !in_array($date, $booked_sessions)) $booked_sessions[] = $date;
                $d++;
            }
        }
        
        for($d = 1; $d <= $nb_days; $d++){
            if(isset($sessions[$d])){
                $booked = true;
                foreach($sessions[$d] as $time){
                    if(!in_array($time, $booked_sessions)){
                        $booked = false;
                        break;
                    }
                }
                if($booked === true) $days['booked'][] = $d;
            }
        }
        $days['free'] = array_values(array_diff($days['free'], $days['booked']));
        
        echo json_encode($days);
    }
}