'.date_i18n('D', $tempDate).'
'.date('j', $tempDate).'
'; $tempDate = strtotime('+1 day', $tempDate); } $endDate = strtotime('-1 day', $tempDate); $initialYear = date("Y", $startDate); $output = '
'; $output .= $tableHead.' '; $bookings = array(); $normFromValue = strtotime("-1 day", $startDate); $normToValue = date("Y-m-d", strtotime("+".$maxday."days", $startDate)); $unconfirmedBookings = 'state = \'confirmed\''; if(get_option ('abc_unconfirmed') == 1){ $unconfirmedBookings = '(state = \'confirmed\' OR state = \'open\')'; } $bookingQuery = $wpdb->get_results('SELECT * FROM '.$wpdb->prefix.'abc_bookings WHERE '.$unconfirmedBookings.' AND ( (start <= \''.$normFromValue.'\' AND end >=\''.$normToValue.'\') OR (start >= \''.$normFromValue.'\' AND end <= \''.$normToValue.'\') OR (start >= \''.$normFromValue.'\' AND start <= \''.$normToValue.'\') OR (start <= \''.$normFromValue.'\' AND end >= \''.$normToValue.'\') OR (end <= \''.$normFromValue.'\' AND end >= \''.$normToValue.'\') OR (end >= \''.$normFromValue.'\' AND end <= \''.$normToValue.'\') )', ARRAY_A); foreach($bookingQuery as $bookingRow){ $bookings[$bookingRow["calendar_id"]][] = $bookingRow; // Getting all confirmed bookings for the current month } $maxAvailability = array(); $maxAvailabilityQuery = $wpdb->get_results('SELECT calendar_id, count(calendar_id) as availability FROM '.$wpdb->prefix.'abc_rooms GROUP BY calendar_id ORDER BY calendar_id', ARRAY_A); foreach($maxAvailabilityQuery as $maxAvailabilityRow){ $maxAvailability[$maxAvailabilityRow["calendar_id"]] = $maxAvailabilityRow["availability"]; // Getting max availabilities per calendar } $er = $wpdb->get_results('SELECT * FROM '.$wpdb->prefix.'abc_calendars ORDER BY name', ARRAY_A); foreach($er as $row) { // Creating rows for table $partlyBooked = intval($row["partlyBooked"]); $output .= ''; }else{ $output .= ''.esc_html($row["name"]).''; } $cTime = $normFromValue; for ($i=0; $i<($maxday*2); $i++) { $cAvailability = ''; $availDates[date('Y-m-d', $cTime)] = $maxAvailability[$row["id"]]; $cssClass = 'abc-box abc-col-day '; $titleText = ''; if(isset($bookings[$row["id"]])){ foreach($bookings[$row["id"]] as $br) { if ($cTime >= strtotime($br["start"]) && $cTime < strtotime($br["end"])){ $availDates[date('Y-m-d', $cTime)] -= 1; } } } $cssClass = ''; if($availDates[date('Y-m-d', $cTime)] == $maxAvailability[$row["id"]] || (($maxAvailability[$row["id"]] - $availDates[date('Y-m-d', $cTime)]) < $partlyBooked && $availDates[date('Y-m-d', $cTime)] > 0) ){ $cssClass .= " abcDayAvail"; $titleText = __('Available', 'advanced-booking-calendar'); }elseif($availDates[date('Y-m-d', $cTime)] < $maxAvailability[$row["id"]] && $availDates[date('Y-m-d', $cTime)] !=0){ $cssClass .= " abcDayPartly"; $titleText = __('Partly booked', 'advanced-booking-calendar'); }else{ $cssClass .= " abcDayBooked"; $titleText = __('Fully booked', 'advanced-booking-calendar'); } if($i%2 ==0){ $cssClass .= ' abcCellBorderLeft'; } $output .= ''; if($i%2==0 ){ $cTime = strtotime('+1 day', $cTime); } } $output .= ''; } $output .= '
'; if ($row["infoPage"] == 0){ $output .= esc_html($row["name"]).' 
'; $output .= abc_booking_setPageview('calendar-overview/'.date('Y-m', $startDate)); // Google Analytics Tracking return $output; } //AJAX-Request for updating the overview in the shortcode without reload. function ajax_abc_booking_getCalOverview () { if(!isset( $_POST['abc_nonce'] ) || !wp_verify_nonce($_POST['abc_nonce'], 'abc-nonce') ){ die('Permissions check failed!'); } if(!isset($_POST['month'])){ echo 'Month not set.'; } else { echo abc_booking_getCalOverview($_POST); } die(); } add_action('wp_ajax_abc_booking_getCalOverview', 'ajax_abc_booking_getCalOverview'); add_action( 'wp_ajax_nopriv_abc_booking_getCalOverview', 'ajax_abc_booking_getCalOverview'); //Function for shortcode "abc-overview". Shows availabilities for all calendars. function abc_booking_showCalOverview ( $atts ) { global $abcUrl; $divId = uniqid(); wp_enqueue_style( 'styles-css', $abcUrl.'frontend/css/styles.css' ); wp_enqueue_style( 'font-awesome', $abcUrl.'frontend/css/font-awesome.min.css' ); wp_enqueue_style( 'tooltip', $abcUrl.'backend/css/tooltip.gradient.min.css' ); wp_enqueue_script('jquery-ui-button'); wp_enqueue_script('abc-ajax', $abcUrl.'frontend/js/abc-ajax.js', array('jquery')); wp_enqueue_script('uikit-js', $abcUrl.'backend/js/uikit.min.js', array('jquery')); wp_enqueue_script('jqury-tooltip', $abcUrl.'backend/js/tooltip.min.js', array('jquery')); wp_localize_script( 'abc-ajax', 'ajax_abc_booking_calOverview', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ), 'abc_nonce' => wp_create_nonce('abc-nonce'))); $calOverviewResult = ''.abcEnqueueCustomCss(); $legend = ''; if(isset($atts['legend']) && intval($atts['legend']) == 1){ global $wpdb; $row = $wpdb->get_row('SELECT max(maxAvailabilities) as roomMax FROM '.$wpdb->prefix.'abc_calendars', ARRAY_A); $legend .= '
'.__('Available', 'advanced-booking-calendar'); if($row["roomMax"] > 1){ $legend .= ' '.__('Partly booked', 'advanced-booking-calendar'); } $legend .= ' '.__('Fully booked', 'advanced-booking-calendar').'
'; } $atts = shortcode_atts( array( 'hidetext' => 'no', 'days' => 0, 'uniqid' => $divId ), $atts, 'abc-overview' ); $calOverviewResult .= '
'.abc_booking_getCalOverview($atts).'
'.$legend; if(getAbcSetting('poweredby') == 1){ $calOverviewResult .= '
'.__('Powered by:', 'advanced-booking-calender').'  Advanced Booking Calendar
'; } $calOverviewResult .=''; return $calOverviewResult; } ?>