get_row("SELECT * FROM ".$wpdb->prefix."advanced_booking_calendar_bookings WHERE id = '".$bookingId ."'", ARRAY_A); if(getAbcAvailability($row["calendar_id"], $row["start"], $row["end"], 1)){ $wpdb->update($wpdb->prefix.'advanced_booking_calendar_bookings', array('state' => 'confirmed'), array('id' => $bookingId)); // Setting booking-state to confirmed if (filter_var($row["email"], FILTER_VALIDATE_EMAIL)) { $row["state"] = 'confirmed'; $row["extras"] = getAbcExtrasForBooking($bookingId); sendAbcGuestMail($row); } wp_redirect( admin_url( "admin.php?page=advanced_booking_calendar&setting=confirmed" ) ); } else { wp_redirect( admin_url( "admin.php?page=advanced_booking_calendar&setting=error" ) ); } } exit; } //==>abc_booking_confBooking() add_action( 'admin_post_abc_booking_confBooking', 'abc_booking_confBooking' ); //Deleting a booking by id function abc_booking_delBooking() { global $wpdb; if ( !current_user_can( 'manage_options' ) ) { wp_die("Go away"); } if ( isset($_GET["id"]) && intval($_GET["id"]) > 0 ) { $wpdb->delete($wpdb->prefix.'advanced_booking_calendar_bookings', array('id' => intval($_GET["id"]))); wp_redirect( admin_url( "admin.php?page=advanced_booking_calendar&setting=deleted" ) ); }else{ echo 'Something went wrong.'; } exit; } //==>abc_booking_delBooking() add_action( 'admin_post_abc_booking_delBooking', 'abc_booking_delBooking' ); //Redirect confirm- or reject-call when logged out function abc_booking_loggedOut() { if (isset($_GET['action']) && isset($_GET['id']) && intval($_GET['id']) > 0 && ($_GET['action'] == 'abc_booking_confBooking' || $_GET['action'] == 'abc_booking_rejBooking')){ wp_redirect( wp_login_url( admin_url( "admin-post.php?action=".$_GET['action']."&id=".intval($_GET['id']) ) )); } }//==>abc_booking_loggedOut() add_action( 'admin_post_nopriv_abc_booking_confBooking', 'abc_booking_loggedOut' ); add_action( 'admin_post_nopriv_abc_booking_rejBooking', 'abc_booking_loggedOut' ); //Cancel a confirmed booking by id function abc_booking_cancBooking() { global $wpdb; if ( !current_user_can( 'manage_options' ) ) { wp_die("Go away"); } if (isset($_GET["id"])) { $bookingId = intval($_GET["id"]); $wpdb->update($wpdb->prefix.'advanced_booking_calendar_bookings', array('state' => 'canceled'), array('id' => $bookingId )); // Setting booking-state to confirmed $row = $wpdb->get_row("SELECT * FROM ".$wpdb->prefix."advanced_booking_calendar_bookings WHERE id = '".$bookingId."'", ARRAY_A); if (filter_var($row["email"], FILTER_VALIDATE_EMAIL)) { $row["extras"] = getAbcExtrasForBooking($bookingId); sendAbcGuestMail($row); } wp_redirect( admin_url( "admin.php?page=advanced_booking_calendar&setting=canceled" ) ); } else { wp_redirect( admin_url( "admin.php?page=advanced_booking_calendar&setting=error" ) ); } exit; } //==>abc_booking_cancBooking() add_action( 'admin_post_abc_booking_cancBooking', 'abc_booking_cancBooking' ); //Reject an open booking by id function abc_booking_rejBooking() { global $wpdb; if ( !current_user_can( 'manage_options' ) ) { wp_die("Go away"); } if ( isset($_GET["id"]) ) { $bookingId = intval($_GET["id"]); $wpdb->update($wpdb->prefix.'advanced_booking_calendar_bookings', array('state' => 'rejected'), array('id' => $bookingId)); $row = $wpdb->get_row("SELECT * FROM ".$wpdb->prefix."advanced_booking_calendar_bookings WHERE id = '".$bookingId."'", ARRAY_A); if (filter_var($row["email"], FILTER_VALIDATE_EMAIL)) { $row["extras"] = getAbcExtrasForBooking($bookingId); sendAbcGuestMail($row); } } wp_redirect( admin_url( "admin.php?page=advanced_booking_calendar&setting=rejected" ) ); exit; } //==>abc_booking_rejBooking() add_action( 'admin_post_abc_booking_rejBooking', 'abc_booking_rejBooking' ); function ajax_abc_booking_getBookingContent(){ if(!isset( $_POST['abc_bookings_nonce'] ) || !wp_verify_nonce($_POST['abc_bookings_nonce'], 'abc-bookings-nonce') ){ die('Permissions check failed!'); } if(isset($_POST["offset"]) && isset($_POST["state"]) && isset($_POST["itemsOnPage"])){ $offset = intval($_POST["offset"]); $state = sanitize_text_field($_POST["state"]); $itemsOnPage = intval($_POST["itemsOnPage"]); echo abc_booking_getBookingContent($state, $offset, $itemsOnPage); } die(); } //==>ajax_abc_booking_getBookingContent() add_action('wp_ajax_abc_booking_getBookingContent', 'ajax_abc_booking_getBookingContent'); function abc_booking_getBookingContent($state, $offset = 0, $itemsOnPage = 10) { // Returns table and accordion with all booking items, depending on the booking-state and the offset (used by ajax_getBookingContent()) global $wpdb; // Getting Calendar Names $calendarNames = array(); $er = $wpdb->get_results('SELECT * FROM '.$wpdb->prefix.'advanced_booking_calendar_calendars ORDER BY id', ARRAY_A); foreach($er as $row) { $calendarNames[$row["id"]] = $row["name"]; } $roomNames = array(); $er = $wpdb->get_results('SELECT * FROM '.$wpdb->prefix.'advanced_booking_calendar_rooms ORDER BY id', ARRAY_A); foreach($er as $row) { $roomNames[$row["id"]] = $row["name"]; } $extras = array(); $er = $wpdb->get_results('SELECT * FROM '.$wpdb->prefix.'advanced_booking_calendar_extras ORDER BY id', ARRAY_A); foreach($er as $row) { $extras[$row["id"]] = $row["name"]; } $coupons = array(); if($state == 'canceled'){ $state = 'canceled", "rejected'; } $paymentArr = get_option('abc_paymentSettings'); $paymentArr = unserialize($paymentArr); $paymentActive = false; $paymentTitle = ''; //Getting actual booking items $query = 'SELECT * FROM '.$wpdb->prefix.'advanced_booking_calendar_bookings WHERE state in ("'.$state.'") ORDER BY end DESC LIMIT '.$offset.', '.$itemsOnPage; $er = $wpdb->get_results($query, ARRAY_A); $foreachcount = 1; $dateformat = getAbcSetting('dateformat'); $tables = '
'.$paymentTitle.' '; $accordion = '
'; foreach($er as $row) { // Cutting message to 20 characters if(strlen($row["message"]) > 20) { $message = ''.esc_html(substr($row["message"],0,strpos($row["message"], " ", 20))).'...'; } else { $message = esc_textarea($row["message"]); } $extraOutput = ''; if(count($extras) > 0){ $er = $wpdb->get_results('SELECT * FROM '.$wpdb->prefix.'advanced_booking_calendar_booking_extras WHERE booking_id = "'.$row["id"].'"', ARRAY_A); foreach($er as $extrarow) { if(strlen($extraOutput) > 0){ $extraOutput .= ', '; } $extraOutput .= $extras[$extrarow["extra_id"]]; } } $extraOutputTable = ''; if(strlen($extraOutput) > 0){ $extraOutputTable = '
'.$extraOutput; }else{ $extraOutput = __('No extras', 'advanced-booking-calendar'); } $couponOutput = ''; $payment = ''; $paymentAccordion = __('n/a', 'advanced-booking-calendar'); if($paymentActive){ if($row["payment"] !== 'paypal' && strlen($row["payment"]) > 0){ $paymentAccordion = $paymentArr['cash']["text"]; }elseif($row["payment"] == 'paypal'){ $paymentAccordion = 'PayPal, ('.__('Transaction ID', 'advanced-booking-calendar').': '.$row["payment_reference"].')'; } $payment .= '
'; $paymentAccordion = __('Payment', 'advanced-booking-calendar').': '.$paymentAccordion.'
'; } $tables .= ' '.$payment.' '; $accordion .= '
'.$buttons.'
'; $accordion .= '
'; $foreachcount++; } $tables .= '
'.__('Checkin', 'advanced-booking-calendar').' - '.__('Checkout', 'advanced-booking-calendar').' '.__('Calendar', 'advanced-booking-calendar').', '.__('Room', 'advanced-booking-calendar').' '.__('Name', 'advanced-booking-calendar').', '.__('Email', 'advanced-booking-calendar').', '.__('Phone', 'advanced-booking-calendar').' '.__('Address', 'advanced-booking-calendar').' '.__('Price', 'advanced-booking-calendar').', '.__('Extras', 'advanced-booking-calendar').''.__('Message', 'advanced-booking-calendar').'  
'.$paymentAccordion.'
'.date_i18n($dateformat, strtotime($row["start"])).' - '.date_i18n($dateformat, strtotime($row["end"])).' '.esc_html($calendarNames[$row["calendar_id"]]).', '.esc_html($roomNames[$row["room_id"]]).' '.esc_html($row["first_name"]).' '.esc_html($row["last_name"]).', '.esc_html($row["email"]).',
'.esc_html($row["phone"]).'
'.esc_html($row["address"]).',
'.esc_html($row["zip"]).' '.esc_html($row["city"]).',
'.esc_html($row["county"]).', '.esc_html($row["country"]).'
'.abc_booking_formatPrice(esc_html($row["price"])).$couponOutput.$extraOutputTable.''.$message.' '; $accordion .= '

'.esc_html($row["last_name"]).', '.date_i18n($dateformat, strtotime($row["start"])).' - '.date_i18n($dateformat, strtotime($row["end"])).', '.esc_html($calendarNames[$row["calendar_id"]]).', '.$roomNames[$row["room_id"]].'

'.esc_html($row["first_name"]).' '.esc_html($row["last_name"]).'
'.esc_html($row["email"]).'
'.esc_html($row["phone"]).'
'.esc_html($row["address"]).', '.esc_html($row["zip"]).' '.esc_html($row["city"]).', '.esc_html($row["county"]).', '.esc_html($row["country"]).'
'.__('Extras', 'advanced-booking-calendar').': '.$extraOutput.'
'.__('Total price', 'advanced-booking-calendar').': '.abc_booking_formatPrice(esc_html($row["price"])).$couponOutput.'
'.$paymentAccordion.' '.__('Message', 'advanced-booking-calendar').': '.esc_textarea($row["message"]).'

'; $buttons = ''; switch ($row["state"]) { case 'open': $buttons .= '
'; break; case 'confirmed': $buttons .= '
'; break; case 'canceled': $buttons .= '
'; break; case 'rejected': $buttons .= '
'; break; } $tables .= $buttons.'
'; $accordion .= ''; $bookings = $tables.$accordion; return $bookings; } // ==>getBookingContent() function abc_booking_getBookings($state){ global $wpdb; global $abcUrl; $bookings = ''; $pagination = ''; $itemsOnPage = 10; // Defines number of items been shown on one page $divId = 'abc-'.preg_replace ( '/[^a-z0-9]/i', '', $state ); // Used to identify the div-element in jQuery // Getting number of Bookings $er = $wpdb->get_results('SELECT * FROM '.$wpdb->prefix.'advanced_booking_calendar_bookings WHERE state in ("'.$state.'") ORDER BY id DESC', ARRAY_A); if($wpdb->num_rows > $itemsOnPage){ // Checking if pagination is needed $pagination = ''; $bookings = abc_booking_getBookingContent($state, 0, $itemsOnPage); } elseif($wpdb->num_rows > 0) { // Checking if there are any Bookings for $state $bookings = abc_booking_getBookingContent($state, 0, $itemsOnPage); // Getting content } else { $bookings = '

'.__('No Bookings found.', 'advanced-booking-calendar').'

'; } return $pagination.'
'.$bookings.'
'; } // Returns an option list for the manual booking function function abc_booking_getCalOptList(){ global $wpdb; $optionList = ''; $er = $wpdb->get_results('SELECT * FROM '.$wpdb->prefix.'advanced_booking_calendar_calendars ORDER BY id', ARRAY_A); foreach($er as $row) { $optionList .= ''; } return $optionList; } // Returns an option list for the manual booking function function ajax_abc_booking_getPersonList(){ if(!isset( $_POST['abc_bookings_nonce'] ) || !wp_verify_nonce($_POST['abc_bookings_nonce'], 'abc-bookings-nonce') ){ die('Permissions check failed!'); } if(isset($_POST["calId"])){ global $wpdb; $optionList = ''; $row = $wpdb->get_results("SELECT * FROM ".$wpdb->prefix."advanced_booking_calendar_calendars WHERE id = '".intval($_POST["calId"])."'", ARRAY_A); for ($i=1; $i <= $row[0]["maxUnits"]; $i++) { $optionList .= ''; } echo $optionList; } die(); } //==>ajax_getPersonList() add_action('wp_ajax_abc_booking_getPersonList', 'ajax_abc_booking_getPersonList'); // Returns a status for to dates in a calendar function ajax_abc_booking_checkDates(){ if(!isset( $_POST['abc_bookings_nonce'] ) || !wp_verify_nonce($_POST['abc_bookings_nonce'], 'abc-bookings-nonce') ){ die('Permissions check failed!'); } $output = ''; if(isset($_POST["calId"]) && isset($_POST["from"]) && isset($_POST["to"])){ global $wpdb; $abcFromValue = sanitize_text_field($_POST["from"]); $abcToValue = sanitize_text_field($_POST["to"]); $calId = intval($_POST["calId"]); $output = ''; $dateformat = getAbcSetting("dateformat"); // Normalizing entered dates $normFromValue = abc_booking_formatDateToDB($abcFromValue); $normToValue = abc_booking_formatDateToDB($abcToValue); if(getAbcAvailability($calId, $normFromValue, $normToValue, 1)){ // Checking if calendar is available for the time frame $numberOfDays = floor((strtotime($normToValue) - strtotime($normFromValue))/(60*60*24)); $totalPrice = abc_booking_getTotalPrice($calId, $normFromValue, $numberOfDays); $output = ''.__('Calendar is available.', 'advanced-booking-calendar').' '; $output .= __('Room price for the stay', 'advanced-booking-calendar').': '.abc_booking_formatPrice($totalPrice).''; if(getAbcRoomId($calId, $normFromValue, $normToValue, 1)<1){ $output .= '
'.__('There is an overlap in the bookings. Check if you can move other bookings to other rooms. The booking can only be saved as "open"', 'advanced-booking-calendar').'.'; } } else { $output .= ''.__('No rooms available for this calendar during the selected time period', 'advanced-booking-calendar').''; } } else { $output = ''.__('Something went wrong.', 'advanced-booking-calendar').''; } echo $output; die(); } add_action('wp_ajax_abc_booking_checkDates', 'ajax_abc_booking_checkDates'); // Returns all optional Extras including the prices for a date range function ajax_abc_booking_getOptionalExtras(){ if(!isset( $_POST['abc_bookings_nonce'] ) || !wp_verify_nonce($_POST['abc_bookings_nonce'], 'abc-bookings-nonce') ){ die('Permissions check failed!'); } $output = ''; if(isset($_POST["persons"]) && isset($_POST["from"]) && isset($_POST["to"])){ $extrasSelected = explode(',', sanitize_text_field($_POST["extrasList"])); $normFromValue = abc_booking_formatDateToDB($_POST["from"]); $normToValue = abc_booking_formatDateToDB($_POST["to"]); $numberOfDays = floor((strtotime($normToValue) - strtotime($normFromValue))/(60*60*24)); $abcPersons = intval($_POST["persons"]); $extrasOptional = getAbcExtrasList($numberOfDays, $abcPersons, 1); foreach($extrasOptional as $extra){ $checked = ''; $priceClass = ''; if(in_array($extra["id"], $extrasSelected)){ $checked = ' checked'; $priceClass = ' abc-priceindicator'; } $tempText = ''.$extra["name"].', '.abc_booking_formatPrice($extra["priceValue"]).''; if(strlen($extra["explanation"]) > 1){ $tempText .= '
('.$extra["priceText"].')
'; } $output .= '
'; } echo $output; die(); } } add_action('wp_ajax_abc_booking_getOptionalExtras', 'ajax_abc_booking_getOptionalExtras'); // Returns all mandatory Extras including the prices for a date range function ajax_abc_booking_getMandatoryExtras(){ if(!isset( $_POST['abc_bookings_nonce'] ) || !wp_verify_nonce($_POST['abc_bookings_nonce'], 'abc-bookings-nonce') ){ die('Permissions check failed!'); } $output = ''; if(isset($_POST["persons"]) && isset($_POST["from"]) && isset($_POST["to"])){ $normFromValue = abc_booking_formatDateToDB($_POST["from"]); $normToValue = abc_booking_formatDateToDB($_POST["to"]); $numberOfDays = floor((strtotime($normToValue) - strtotime($normFromValue))/(60*60*24)); $abcPersons = intval($_POST["persons"]); $extrasOptional = getAbcExtrasList($numberOfDays, $abcPersons, 2); foreach($extrasOptional as $extra){ $tempText = ''.$extra["name"].', '.abc_booking_formatPrice($extra["priceValue"]).''; if(strlen($extra["explanation"]) > 1){ $tempText .= '
('.$extra["priceText"].')
'; } $output .= '
'.$tempText.'
'; } echo $output; die(); } } add_action('wp_ajax_abc_booking_getMandatoryExtras', 'ajax_abc_booking_getMandatoryExtras'); function postAbcBooking() { if (!current_user_can('manage_options')) { wp_die("Go away"); } $_POST['start'] = abc_booking_formatDateToDB($_POST['start']); $_POST['end'] = abc_booking_formatDateToDB($_POST['end']); if($_POST["emailconfirmation"] == 'yes'){ sendAbcGuestMail($_POST); } setAbcBooking($_POST); wp_redirect(admin_url("admin.php?page=advanced_booking_calendar&setting=booked-".$_POST["state"])); exit; } //==>postAbcBooking add_action('admin_post_postAbcBooking', 'postAbcBooking'); function abc_booking_editBookingRoom() { if (!current_user_can('manage_options')) { wp_die("Go away"); } $success = false; if(isset($_POST["id"]) && isset($_POST["room_id"])){ global $wpdb; $er = $wpdb->get_results('SELECT * FROM '.$wpdb->prefix.'advanced_booking_calendar_rooms ORDER BY id', ARRAY_A); $calendarIds = array(); foreach($er as $row) { $calendarIds[$row["id"]] = $row["calendar_id"]; } $wpdb->update($wpdb->prefix.'advanced_booking_calendar_bookings', array( 'room_id' => sanitize_text_field($_POST["room_id"]), 'calendar_id' => $calendarIds[intval($_POST["room_id"])]), array('id' => intval($_POST["id"]))); $success = true; } wp_redirect(admin_url("admin.php?page=advanced_booking_calendar&setting=room-changed")); exit; } //==>editBookingRoom add_action('admin_post_abc_booking_editBookingRoom', 'abc_booking_editBookingRoom'); function abc_booking_editBookingRoomContent() { if (!current_user_can('manage_options')) { wp_die("Go away"); } if(isset($_GET["id"])){ $bookingId = intval($_GET["id"]); global $wpdb; $dateformat = getAbcSetting("dateformat"); $er = $wpdb->get_results('SELECT * FROM '.$wpdb->prefix.'advanced_booking_calendar_calendars ORDER BY id', ARRAY_A); foreach($er as $row) { $calendarNames[$row["id"]] = $row["name"]; } $er = $wpdb->get_results('SELECT * FROM '.$wpdb->prefix.'advanced_booking_calendar_rooms ORDER BY id', ARRAY_A); foreach($er as $row) { $roomNames[$row["id"]] = $row["name"]; } $er = $wpdb->get_row('SELECT * FROM '.$wpdb->prefix.'advanced_booking_calendar_bookings WHERE id = '.$bookingId, ARRAY_A); $query = 'SELECT r.id, r.calendar_id FROM '.$wpdb->prefix.'advanced_booking_calendar_rooms r LEFT JOIN ( SELECT DISTINCT room_id FROM '.$wpdb->prefix.'advanced_booking_calendar_bookings WHERE state = \'confirmed\' AND ( (start <= \''.$er["start"].'\' AND end >=\''.$er["end"].'\') OR (start >= \''.$er["start"].'\' AND end <= \''.$er["end"].'\') OR (start <= \''.$er["start"].'\' AND end >= \''.$er["end"].'\') ) ) b ON r.id = b.room_id WHERE b.room_id IS NULL ORDER BY r.id'; $availRooms = $wpdb->get_results($query, ARRAY_A); $roomSelect = ''; $output = '

'.__('Change room for a booking', 'advanced-booking-calendar').'

'.abc_booking_getAvailabilityTable($er["start"], $bookingId).'
'; $output .= '
'.__('Booking', 'advanced-booking-calendar').' '.esc_html($er["first_name"]).' '.esc_html($er["last_name"]).', '.sprintf( _n('%d person', '%d persons', esc_html($er["persons"]), 'advanced-booking-calendar'), esc_html($er["persons"]) ).'.
'.date_i18n($dateformat, strtotime($er["start"])).' - '.date_i18n($dateformat, strtotime($er["end"])).'

'.esc_html($er["email"]).', '.esc_html($er["phone"]).'
'.esc_html($er["address"]).', '.esc_html($er["zip"]).' '.esc_html($er["city"]).', '.esc_html($row["county"]).', '.esc_html($er["country"]).'
'.__('state', 'advanced-booking-calendar').': "'.$er["state"].'"
'.__('message', 'advanced-booking-calendar').': '.esc_textarea($er["message"]).'
'.$roomSelect.'

'.__('Room changes will not affect any price changes!', 'advanced-booking-calendar').'

'; return $output; } } //==>editBookingRoomContent function ajax_setAbcNewsletter(){ if(!isset( $_POST['abc_bookings_nonce'] ) || !wp_verify_nonce($_POST['abc_bookings_nonce'], 'abc-bookings-nonce') ){ die('Permissions check failed!'); } if(isset($_POST["email"]) && filter_var($_POST["email"], FILTER_VALIDATE_EMAIL)){ subscribeAbcNewsletter($_POST["email"]); update_option ('abc_newsletter', 1); } die(); } //==>setAbcNewsletter() add_action('wp_ajax_abc_setAbcNewsletter', 'ajax_setAbcNewsletter'); // Generating an availability table function abc_booking_getAvailabilityTable($initialDate, $bookingId = 0) { if (!current_user_can('manage_options')) { wp_die("Go away"); } global $abcUrl; global $wpdb; $startDate = strtotime($initialDate); $dateformat = getAbcSetting("dateformat"); if (date_i18n('w', $startDate) < 6) { // Availability always starts on the last saturday $dayDiff = date_i18n('w', $startDate)+1; $startDate = strtotime('-'.$dayDiff.' days', $startDate); } $tempDate = $startDate; $tableHead = ''; for($i=0; $i<=28; $i++){ // Creating dates for table head $tableHead .= ' '.date_i18n('D', $tempDate).'
'.date_i18n('j', $tempDate).'
'.date_i18n('M', $tempDate).''; $tempDate = strtotime('+1 day', $tempDate); } $endDate = strtotime('-1 day', $tempDate); $initialYear = date_i18n("Y", strtotime($initialDate)); $output = '
'; $output .= $tableHead.' '; $bookings = array(); $bookingQuery = $wpdb->get_results('SELECT * FROM '.$wpdb->prefix.'advanced_booking_calendar_bookings WHERE end >= "'.date_i18n("Y-m-d", $startDate).'" AND start <= "'.date_i18n("Y-m-d", strtotime('+29 days', $startDate)).'" AND state = "confirmed" ORDER BY end', ARRAY_A); foreach($bookingQuery as $bookingRow){ $bookings[$bookingRow["calendar_id"]][$bookingRow["room_id"]][] = $bookingRow; // Getting all confirmed bookings for the current timeframe } $er = $wpdb->get_results('SELECT * FROM '.$wpdb->prefix.'advanced_booking_calendar_calendars ORDER BY name', ARRAY_A); $currCalendar = ''; // Necessary for drawing a bold line at the first room foreach($er as $row) { // Creating rows for table $calendar = $wpdb->get_results('SELECT * FROM '.$wpdb->prefix.'advanced_booking_calendar_rooms WHERE calendar_id='.$row["id"].' ORDER BY name', ARRAY_A); if($wpdb->num_rows > 1){ $output .= ''; } foreach($calendar as $rooms) { // Getting room names and bookings if($wpdb->num_rows > 1){ $output .= ''; } else { $output .= ''; } $roomRowDate = $startDate; for($i = 0; $i <= 57; $i++){ $colSpan = 1; if (isset($bookings[$row["id"]][$rooms["id"]])){ // Checking for bookings for the current room $success = false; for($j = 0; $j < count($bookings[$row["id"]][$rooms["id"]]); $j++){ // Checking if a booking started before startDate if($bookings[$row["id"]][$rooms["id"]][$j]["start"] < date_i18n("Y-m-d", $startDate) && $i==0){ $tempEndDate = strtotime($bookings[$row["id"]][$rooms["id"]][$j]["end"]); $dayOffset = 0; $cssClass = ' abcAvailabilityTableStarting'; if ($tempEndDate > $endDate){ $tempEndDate = strtotime('-1 day', $endDate); $dayOffset = 1; $success = true; $cssClass .= ' abcAvailabilityTableStartingEnding'; } $dateDiff = abc_booking_dateDiffInDays($tempEndDate, $startDate); $colSpan = ($dateDiff*2)+1; $title = date_i18n($dateformat, strtotime($bookings[$row["id"]][$rooms["id"]][$j]["start"])).' - '.date_i18n($dateformat, strtotime($bookings[$row["id"]][$rooms["id"]][$j]["end"])).'
'.$bookings[$row["id"]][$rooms["id"]][$j]["last_name"].', '.$bookings[$row["id"]][$rooms["id"]][$j]["first_name"].'
'.sprintf( _n('%d person', '%d persons', $bookings[$row["id"]][$rooms["id"]][$j]["persons"], 'advanced-booking-calendar'), $bookings[$row["id"]][$rooms["id"]][$j]["persons"] ).'
'.abc_booking_formatPrice($bookings[$row["id"]][$rooms["id"]][$j]["price"]).'
'.$bookings[$row["id"]][$rooms["id"]][$j]["country"].'
'.$bookings[$row["id"]][$rooms["id"]][$j]["phone"].'
'.$bookings[$row["id"]][$rooms["id"]][$j]["email"]; $text = $bookings[$row["id"]][$rooms["id"]][$j]["last_name"].', '.sprintf( _n('%d person', '%d persons', $bookings[$row["id"]][$rooms["id"]][$j]["persons"], 'advanced-booking-calendar'), $bookings[$row["id"]][$rooms["id"]][$j]["persons"] ).', '.abc_booking_formatPrice($bookings[$row["id"]][$rooms["id"]][$j]["price"]).'. '.$bookings[$row["id"]][$rooms["id"]][$j]["country"].'. '. date_i18n($dateformat, strtotime($bookings[$row["id"]][$rooms["id"]][$j]["start"])).' - '.date_i18n($dateformat, strtotime($bookings[$row["id"]][$rooms["id"]][$j]["end"])); if(mb_strlen($text, "utf-8") > $colSpan*1.5){ $text = mb_substr($text, 0, $colSpan*1.5, "utf-8").'...'; } $output .= ''; $i += ((abc_booking_dateDiffInDays($tempEndDate, $startDate))*2)+1+$dayOffset; $roomRowDate = strtotime('+'.$dateDiff.' day', $roomRowDate); }elseif($bookings[$row["id"]][$rooms["id"]][$j]["start"] == date_i18n("Y-m-d", $roomRowDate) && $i%2==1) { $tempEndDate = strtotime($bookings[$row["id"]][$rooms["id"]][$j]["end"]); $dayOffset = 0; $cssClass = ''; if ($tempEndDate > $endDate){ $tempEndDate = strtotime('-1 day', $endDate); $dayOffset = 3; $success = true; $cssClass .= ' abcAvailabilityTableEnding'; } if ($bookingId == $bookings[$row["id"]][$rooms["id"]][$j]["id"]){ $cssClass .= ' abcBookingHighlighted'; } $title = date_i18n($dateformat, strtotime($bookings[$row["id"]][$rooms["id"]][$j]["start"])).' - '.date_i18n($dateformat, strtotime($bookings[$row["id"]][$rooms["id"]][$j]["end"])).'
'.$bookings[$row["id"]][$rooms["id"]][$j]["last_name"].', '.$bookings[$row["id"]][$rooms["id"]][$j]["first_name"].'
'.sprintf( _n('%d person', '%d persons', $bookings[$row["id"]][$rooms["id"]][$j]["persons"], 'advanced-booking-calendar'), $bookings[$row["id"]][$rooms["id"]][$j]["persons"] ).'
'.abc_booking_formatPrice($bookings[$row["id"]][$rooms["id"]][$j]["price"]).'
'.$bookings[$row["id"]][$rooms["id"]][$j]["country"].'
'.$bookings[$row["id"]][$rooms["id"]][$j]["phone"].'
'.$bookings[$row["id"]][$rooms["id"]][$j]["email"]; $dateDiff = abs(abc_booking_dateDiffInDays(strtotime($bookings[$row["id"]][$rooms["id"]][$j]["start"]), $tempEndDate)); $colSpan = ($dateDiff*2)+$dayOffset; $text = $bookings[$row["id"]][$rooms["id"]][$j]["last_name"].', '.sprintf( _n('%d person', '%d persons', $bookings[$row["id"]][$rooms["id"]][$j]["persons"], 'advanced-booking-calendar'), $bookings[$row["id"]][$rooms["id"]][$j]["persons"] ).', '.abc_booking_formatPrice($bookings[$row["id"]][$rooms["id"]][$j]["price"]). '. '.$bookings[$row["id"]][$rooms["id"]][$j]["country"].'. '. date_i18n($dateformat, strtotime($bookings[$row["id"]][$rooms["id"]][$j]["start"])).' - '.date_i18n($dateformat, strtotime($bookings[$row["id"]][$rooms["id"]][$j]["end"])); if(mb_strlen($text, "utf-8") > $colSpan*1.5){ $text = mb_substr($text, 0, $colSpan*1.5, "utf-8").'...'; } $output .= ''; $i += ($dateDiff*2)+$dayOffset; $roomRowDate = strtotime('+'.$dateDiff.' day', $roomRowDate); } } if(!$success){ $output .= '
'.esc_html($row["name"]).'
'.esc_html($rooms["name"]).'
'.esc_html($row["name"]).''.$text.''.$text.''."\r\n"; wp_mail("info@booking-calendar-plugin.com", "Feedback of ".get_option('blogname'), $text, $headers); echo "

".__('Thank you for your Feedback!', 'advanced-booking-calendar')."

"; } die(); } add_action('wp_ajax_abc_booking_sendFeedbackModal', 'ajax_abc_booking_sendFeedbackModal'); function ajax_abc_booking_activatePoweredby() { if(!isset( $_POST['abc_bookings_nonce'] ) || !wp_verify_nonce($_POST['abc_bookings_nonce'], 'abc-bookings-nonce') ){ die('Permissions check failed!'); } if(!isset($_POST['poweredby']) && $_POST['poweredby'] == 1){ echo 'Value missing.'; } else { update_option('abc_poweredby', 1); echo "

".__('Thank you! The link is now activated.', 'abc-booking')."

"; } die(); } add_action('wp_ajax_abc_booking_activatePoweredby', 'ajax_abc_booking_activatePoweredby'); function ajax_abc_booking_activateCommitUsage() { if(!isset( $_POST['abc_bookings_nonce'] ) || !wp_verify_nonce($_POST['abc_bookings_nonce'], 'abc-bookings-nonce') ){ die('Permissions check failed!'); } if(isset($_POST['commitusage']) && $_POST['commitusage'] == 1){ activate_commitUsage(); update_option ('abc_usage', 1); echo "

".__('Thank you!', 'abc-booking')."

"; } else { echo 'Value missing.'; } die(); } add_action('wp_ajax_abc_booking_activateCommitUsage', 'ajax_abc_booking_activateCommitUsage'); function ajax_abc_booking_getSearchResults() { if(!isset( $_POST['abc_bookings_nonce'] ) || !wp_verify_nonce($_POST['abc_bookings_nonce'], 'abc-bookings-nonce') ){ die('Permissions check failed!'); } if(!isset($_POST['search'])){ echo _e('Search not set.', 'advanced-booking-calendar'); } else { global $wpdb; $search = sanitize_text_field($_POST["search"]); // Getting calendar and room names $er = $wpdb->get_results('SELECT * FROM '.$wpdb->prefix.'advanced_booking_calendar_calendars ORDER BY id', ARRAY_A); foreach($er as $row) { $calendarNames[$row["id"]] = $row["name"]; } $er = $wpdb->get_results('SELECT * FROM '.$wpdb->prefix.'advanced_booking_calendar_rooms ORDER BY id', ARRAY_A); foreach($er as $row) { $roomNames[$row["id"]] = $row["name"]; } //Getting booking items $query = 'SELECT * FROM '.$wpdb->prefix.'advanced_booking_calendar_bookings WHERE last_name like \'%'.$search.'%\' OR first_name like \'%'.$search.'%\' OR email like \'%'.$search.'%\' OR message like \'%'.$search.'%\' ORDER BY end DESC LIMIT 0, 50'; $er = $wpdb->get_results($query, ARRAY_A); $foreachcount = 1; $dateformat = getAbcSetting('dateformat'); $accordion = '
'; foreach($er as $row) { $accordion .= '

'.$row["last_name"].', '.date_i18n($dateformat, strtotime($row["start"])).' - '.date_i18n($dateformat, strtotime($row["end"])).', '.$calendarNames[$row["calendar_id"]].', '.$roomNames[$row["room_id"]].'

'.$row["state"].'

'.esc_html($row["first_name"]).' '.esc_html($row["last_name"]).'
'.esc_html($row["email"]).'
'.esc_html($row["phone"]).'
'.esc_html($row["address"]).', '.esc_html($row["zip"]).' '.esc_html($row["city"]).', '.esc_html($row["county"]).', '.esc_html($row["country"]).'
'.__('Total price', 'advanced-booking-calendar').': '.abc_booking_formatPrice($row["price"]).'
'.__('Message', 'advanced-booking-calendar').': '.esc_textarea($row["message"]).'

'; $buttons = ''; switch ($row["state"]) { case 'open': $buttons .= '
'; break; case 'confirmed': $buttons .= '
'; break; case 'canceled': $buttons .= '
'; break; case 'rejected': $buttons .= '
'; break; } $accordion .= '
'; $accordion .= '
'; $foreachcount++; } $accordion .= '
'; echo $accordion; } die(); } add_action('wp_ajax_abc_booking_getSearchResults', 'ajax_abc_booking_getSearchResults'); // Output to front end function advanced_booking_calendar_show_bookings() { if (!current_user_can('manage_options')) { wp_die("Go away"); } global $abcUrl; global $wpdb; $dateformat = abc_booking_dateFormatToJS(getAbcSetting("dateformat")); $nlAsked = false; $nlText = ''; $nlEmail = ''; if(getAbcSetting("newsletter") == 0){ $er = $wpdb->get_row('SELECT COUNT(id) as bookings, SUM(price) as revenue FROM '.$wpdb->prefix.'advanced_booking_calendar_bookings WHERE state = \'confirmed\'', ARRAY_A); if ($er["bookings"] > 10 && getAbcSetting("newsletter_10th_asked") == 0) { $nlAsked = true; $nlEmail = getAbcSetting("email"); update_option ('abc_newsletter_10th_asked', 1); $nlText = '

'.__('Congratulations on your 10th confirmed Booking!', 'advanced-booking-calendar').'

'.__('We would like to give your more tips on how to raise your occupation rate via our Newsletter. We promise to never spam you. You can unsubscribe anytime.', 'advanced-booking-calendar').'

'.__('Click OK to subscribe now!', 'advanced-booking-calendar').''; } elseif($er["bookings"] > 100 && getAbcSetting("newsletter_100th_asked") == 0){ $nlAsked = true; $nlEmail = getAbcSetting("email"); update_option ('abc_newsletter_100th_asked', 1); $nlText = '

'.__('Wow! Congratulations on your 100th confirmed Booking!', 'advanced-booking-calendar').'

'.__('You are obviously doing a great job! But still, maybe you could learn something by our tips on how to raise your occupation rate via our Newsletter. We promise to never spam you. You can unsubscribe anytime.', 'advanced-booking-calendar').'

'.__('Click OK to subscribe now!', 'advanced-booking-calendar').''; } elseif($er["revenue"] > 20000 && getAbcSetting("newsletter_20000revenue_asked") == 0){ $nlAsked = true; $nlEmail = getAbcSetting("email"); update_option ('abc_newsletter_20000revenue_asked', 1); $nlText = '

'.sprintf( __('Congratulations! You just surpassed a total revenue of 20000 %s!', 'advanced-booking-calendar'), getAbcSetting('currency')).'

'.__('You are obviously doing a great job! But still, maybe you could learn something by our tips on how to raise your occupation rate via our Newsletter. We promise to never spam you. You can unsubscribe anytime.', 'advanced-booking-calendar').'

'.__('Click OK to subscribe now!', 'advanced-booking-calendar').''; } } $feedbackModal = ''; if(!$nlAsked && getAbcSetting('feedbackModal01') == 0 && getAbcSetting('installdate') <= date("Y-m-d", strtotime('-1 week'))){ update_option('abc_feedbackModal01', 1); $feedbackModal = '

'.__('Do you like this Plugin?', 'advanced-booking-calendar').'

'; } if(!$nlAsked && getAbcSetting('feedbackModal01') == 1 && get_option('abc_usage') == 0 && ( (getAbcSetting('usageModal01') == 0 && getAbcSetting('installdate') <= date("Y-m-d", strtotime('-2 weeks'))) || (getAbcSetting('usageModal02') == 0 && getAbcSetting('installdate') <= date("Y-m-d", strtotime('-4 weeks'))) ) ){ if(getAbcSetting('usageModal01') == 1){ update_option('abc_usageModal02', 1); } update_option('abc_usageModal01', 1); $feedbackModal = '

'.__('Please help us!', 'advanced-booking-calendar').'
'.__('Lets make this plugin better!', 'advanced-booking-calendar').'

'.__('Help us to make this plugin better by committing some usage data.', 'advanced-booking-calendar').' '.__('Your visitors will not be affected. No sensible data will be transmitted.', 'advanced-booking-calendar').'

'; } wp_enqueue_script('abc-bookings', $abcUrl.'backend/js/abc-bookings.js', array('jquery')); wp_localize_script( 'abc-bookings', 'ajax_abc_bookings', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ), 'abc_bookings_nonce' => wp_create_nonce('abc-bookings-nonce'), 'nlAsked' => $nlAsked, 'nlEmail' => $nlEmail, 'nlText' => $nlText ) ); wp_enqueue_script('jquery-ui-datepicker'); wp_enqueue_script('uikit-js', $abcUrl.'backend/js/uikit.min.js', array('jquery')); wp_enqueue_script('uikit-accordion-js', $abcUrl.'backend/js/accordion.min.js', array('jquery')); wp_enqueue_script('uikit-tooltip-js', $abcUrl.'backend/js/tooltip.min.js', array('jquery')); wp_enqueue_script('uikit-pagination-js', $abcUrl.'backend/js/pagination.min.js', array('jquery')); wp_enqueue_script('jquery-validate', $abcUrl.'frontend/js/jquery.validate.min.js', array('jquery')); wp_enqueue_script('abc-functions', $abcUrl.'backend/js/abc-functions.js', array('jquery')); wp_localize_script( 'abc-functions', 'abc_functions_vars', array( 'dateformat' => $dateformat, 'firstday' => getAbcSetting("firstdayofweek"))); wp_enqueue_style('abc-datepicker', $abcUrl.'/frontend/css/jquery-ui.min.css'); wp_enqueue_style('uk-accordion', $abcUrl.'backend/css/accordion.gradient.min.css'); wp_enqueue_style('uk-tooltip', $abcUrl.'backend/css/tooltip.gradient.min.css'); wp_enqueue_style('uikit', $abcUrl.'/frontend/css/uikit.gradient.min.css'); wp_enqueue_style('abc-adminstyle', $abcUrl.'/backend/css/admin.css'); wp_enqueue_style( 'font-awesome', $abcUrl.'frontend/css/font-awesome.min.css' ); $datepickerLang = array('af','ar-DZ','ar','az','be','bg','bs','ca','cs','cy-GB','da','de','el','en-AU','en-GB','en-NZ', 'eo','es','et','eu','fa','fi','fo','fr-CA','fr-CH','fr','gl','he','hi','hr','hu','hy','id','is', 'it-CH','it','ja','ka','kk','km','ko','ky','lb','lt','lv','mk','ml','ms','nb','nl-BE','nl','nn', 'no','pl','pt-BR','pt','rm','ro','ru','sk','sl','sq','sr-SR','sr','sv','ta','th','tj','tr','uk', 'vi','zh-CN','zh-HK','zh-TW'); if(substr(get_locale(), 0,2) != 'en' && in_array(get_locale(), $datepickerLang)){ wp_enqueue_script('jquery-datepicker-lang', $abcUrl.'frontend/js/datepicker_lang/datepicker-'.get_locale().'.js', array('jquery')); }elseif(substr(get_locale(), 0,2) != 'en' && in_array(substr(get_locale(), 0,2), $datepickerLang)){ wp_enqueue_script('jquery-datepicker-lang', $abcUrl.'frontend/js/datepicker_lang/datepicker-'.substr(get_locale(), 0,2).'.js', array('jquery')); } $settingsMessage = ''; if ( isset($_GET["setting"]) ) { switch ($_GET["setting"]) { case 'booked-open': $settingsMessage .= '

'.__('Booking has been saved. Has yet to be confirmed.', 'advanced-booking-calendar').'

'; break; case 'booked-confirmed': $settingsMessage .= '

'.__('Booking has been saved and state set to confirmed.', 'advanced-booking-calendar').'

'; break; case 'confirmed': $settingsMessage .= '

'.__('Booking confirmed.', 'advanced-booking-calendar').'

'; break; case 'canceled': $settingsMessage .= '

'.__('Booking canceled.', 'advanced-booking-calendar').'

'; break; case 'rejected': $settingsMessage .= '

'.__('Booking rejected.', 'advanced-booking-calendar').'

'; break; case 'deleted': $settingsMessage .= '

'.__('Booking deleted.', 'advanced-booking-calendar').'

'; break; case 'error': $settingsMessage .= '

'.__('Something went wrong, change didn\'t work.', 'advanced-booking-calendar').'

'; break; case 'room-changed': $settingsMessage .= '

'.__('Room has been changed.', 'advanced-booking-calendar').'

'; break; } } $setupMessage = ''; $er = $wpdb->get_row('SELECT COUNT(id) as bookings FROM '.$wpdb->prefix.'advanced_booking_calendar_bookings', ARRAY_A); if($er["bookings"] == 0){ // Check if there are bookings $setupUrl = ''.__('setup guide', 'advanced-booking-calendar').''; $calendarLink = ''.__('Seasons & Calendars', 'advanced-booking-calendar').''; $createBooking = __('Create a Booking', 'advanced-booking-calendar'); $setupCalendars = '

'.__('Create a Calendar', 'advanced-booking-calendar').'

'; $er = $wpdb->get_row('SELECT COUNT(id) as calendars FROM '.$wpdb->prefix.'advanced_booking_calendar_calendars', ARRAY_A); if($er["calendars"] == 0){ $setupCalendars = '

'.__('Create a Calendar', 'advanced-booking-calendar').'

'.sprintf(__('A calendar is one room or even a group of rooms of the same room type. Start by adding a calendar here: "%s"', 'advanced-booking-calendar'), $calendarLink).'

'; } $setupAssignments = '

'.__('Create a Season & assign it to a Calendar', 'advanced-booking-calendar').'

'; $er = $wpdb->get_row('SELECT COUNT(id) as assignments FROM '.$wpdb->prefix.'advanced_booking_calendar_seasons_assignment', ARRAY_A); if($er["assignments"] == 0){ $setupAssignments = '

'.__('Create a Season & assign it to a Calendar', 'advanced-booking-calendar').'

'.sprintf(__('With seasons you can create differnt rates for different time periods. Go to "%s" and add a season and assign it to a calendar.', 'advanced-booking-calendar'), $calendarLink).'

'; } $setupMessage = '

'.sprintf(__('There are currently no bookings. Check out our %s to get started.', 'advanced-booking-calendar'), $setupUrl).'

'.sprintf(__('If you have a question, feel free to contact us:', 'advanced-booking-calendar'), $setupUrl).' '.__('Contact Support', 'advanced-booking-calendar').'

'.$setupCalendars.' '.$setupAssignments.'

'.__('Create a Booking', 'advanced-booking-calendar').'

'.sprintf(__('When everything is set up, add shortcodes to your WordPress pages and wait for the first guest.', 'advanced-booking-calendar'), $setupUrl).'

'.sprintf(__('You can also click on "%s" and add your first Booking manually.', 'advanced-booking-calendar'), $createBooking).'

'; } if(isset($_GET["action"])) { $getAction = $_GET["action"]; } else { $getAction = ""; } if($getAction == 'editBookingRoom'){ echo abc_booking_editBookingRoomContent(); }else { $priceOutput = '0 '.getAbcSetting('currency'); if(getAbcSetting('currencyPosition') == 0 ){ $priceOutput = getAbcSetting('currency').' 0'; } echo '

'.__('Bookings', 'advanced-booking-calendar').'

'.$settingsMessage.' '.abc_booking_getAvailabilityTable(date_i18n("Y-m-d")).'
  • '.abc_booking_getBookings('open').'
  • '.abc_booking_getBookings('confirmed').'
  • '.abc_booking_getBookings('canceled", "rejected').'
  • '.__('State', 'advanced-booking-calendar').'
    '.__('Extras', 'advanced-booking-calendar').'
    '.__('Additional costs', 'advanced-booking-calendar').'
    '.__('Total price', 'advanced-booking-calendar').'
    '.$priceOutput.'
    '.__('Set Booking State to', 'advanced-booking-calendar').'

    '.__('Send confirmation email to guest', 'advanced-booking-calendar').'

'.$setupMessage.'
'.$feedbackModal; } }//==>advanced_booking_calendar_show_bookings()