get_row('SELECT SUM(maxAvailabilities) as rooms FROM '.$wpdb->prefix.'advanced_booking_calendar_calendars', ARRAY_A); $rooms = $er["rooms"]; $maxAvailabilities = intval($_POST["maxAvailabilities"]); if($rooms + $maxAvailabilities <= 15){ $name = sanitize_text_field($_POST["name"]); $maxUnits = intval($_POST["maxUnits"]); $pricePreset = sanitize_text_field($_POST["pricePreset"]); $infoPage = intval($_POST["page_id"]); $infoText = implode( "\n", array_map( 'sanitize_text_field', explode( "\n", $_POST["infotext"]) ) ); $wpdb->insert( $wpdb->prefix.'advanced_booking_calendar_calendars', array('name' => $name, 'maxUnits' => $maxUnits, 'maxAvailabilities' => $maxAvailabilities, 'pricePreset' => $pricePreset, 'infoPage' => $infoPage, 'infoText' => $infoText )); $calendarId = $wpdb->insert_id; for ($i =1; $i <= $maxAvailabilities; $i++) { $wpdb->insert( $wpdb->prefix.'advanced_booking_calendar_rooms', array( 'calendar_id' => $calendarId, 'name' => $name.'-'.$i )); } } else { $roomLimit = "&setting=roomLimit"; } } wp_redirect( admin_url( "admin.php?page=advanced-booking-calendar-show-seasons-calendars".$roomLimit ) ); exit; } //==>addCalendar() add_action( 'admin_post_abc_booking_addCalendar', 'abc_booking_addCalendar' ); // Edit Calendar after update via form function abc_booking_editCalendar() { global $wpdb; if ( !current_user_can( 'manage_options' ) ) { wp_die("Go away"); } $roomLimit = '&setting=changeSaved'; if ( isset($_POST["id"]) && isset($_POST["name"]) && isset($_POST["maxAvailabilities"]) && isset($_POST["maxUnits"]) && isset($_POST["page_id"])) { $er = $wpdb->get_row('SELECT SUM(maxAvailabilities) as rooms FROM '.$wpdb->prefix.'advanced_booking_calendar_calendars', ARRAY_A); $rooms = $er["rooms"]; $er = $wpdb->get_row('SELECT * FROM '.$wpdb->prefix.'advanced_booking_calendar_calendars WHERE id = '.$_POST["id"], ARRAY_A); $rooms -= $er["maxAvailabilities"]; $maxAvailabilities = intval($_POST["maxAvailabilities"]); $name = sanitize_text_field($_POST["name"]); $maxUnits = intval($_POST["maxUnits"]); $pricePreset = sanitize_text_field($_POST["pricePreset"]); $infoPage = intval($_POST["page_id"]); $infoText = implode( "\n", array_map( 'sanitize_text_field', explode( "\n", $_POST["infotext"]) ) ); if($rooms + $maxAvailabilities <= 15 && $er['maxAvailabilities'] <= intval($_POST["maxAvailabilities"])){ $wpdb->update($wpdb->prefix.'advanced_booking_calendar_calendars', array('name' => $name, 'maxUnits' => $maxUnits, 'maxAvailabilities' => $maxAvailabilities, 'pricePreset' => $pricePreset, 'infoPage' => $infoPage, 'infoText' => $infoText ), array('id' => intval($_POST["id"]))); } else { $roomLimit = "&setting=roomLimit"; } if ($er['maxAvailabilities'] < $maxAvailabilities) { // Adding new rooms when room number is raised for($i=$er["maxAvailabilities"]; $i< $maxAvailabilities; $i++){ $wpdb->insert( $wpdb->prefix.'advanced_booking_calendar_rooms', array('calendar_id' => $er['id'], 'name' => $er['name'].'-'.($i+1) )); } } if ($er['maxAvailabilities'] > $maxAvailabilities) {// Deleting unused rooms when room number is reduced $roomCounter = intval($er["maxAvailabilities"]); for($i=$maxAvailabilities; $i< $er['maxAvailabilities']; $i++){ $subEr = $wpdb->get_row('SELECT max(id) as roomId FROM '.$wpdb->prefix.'advanced_booking_calendar_rooms WHERE calendar_id = '.intval($_POST["id"]).' AND id not in ( SELECT DISTINCT room_id FROM '.$wpdb->prefix.'advanced_booking_calendar_bookings WHERE calendar_id = '.intval($_POST["id"]).')', ARRAY_A); if(isset($subEr['roomId'])){ $wpdb->delete( $wpdb->prefix.'advanced_booking_calendar_rooms', array('id' => $subEr['roomId'])); $roomCounter--; } } $wpdb->update($wpdb->prefix.'advanced_booking_calendar_calendars', array('name' => $name, 'maxUnits' => $maxUnits, 'maxAvailabilities' => $roomCounter, 'pricePreset' => $pricePreset, 'infoPage' => $infoPage, 'infoText' => $infoText ), array('id' => intval($_POST["id"]))); if($roomCounter == intval($er["maxAvailabilities"])){ $roomCounter = 0; } $roomLimit = '&setting=changeSaved&room='.$roomCounter; } } wp_redirect( admin_url( "admin.php?page=advanced-booking-calendar-show-seasons-calendars".$roomLimit ) ); exit; } //==>editCalendar() add_action( 'admin_post_abc_booking_editCalendar', 'abc_booking_editCalendar' ); // Delete Calendar function abc_booking_delCalendar() { global $wpdb; if ( !current_user_can( 'manage_options' ) ) { wp_die("Go away"); } if ( isset($_POST["id"]) ) { $er = $wpdb->get_row('SELECT count(id) as bookings FROM '.$wpdb->prefix.'advanced_booking_calendar_bookings WHERE calendar_id = '.intval($_POST["id"]), ARRAY_A); if($er["bookings"] > 0){ // There are still bookings for this calendar. Calendar can not be deleted. wp_redirect( admin_url( "admin.php?page=advanced-booking-calendar-show-seasons-calendars&setting=calNotDeleted" ) ); }else{ $wpdb->delete($wpdb->prefix.'advanced_booking_calendar_calendars', array('id' => intval($_POST["id"]))); $wpdb->delete($wpdb->prefix.'advanced_booking_calendar_rooms', array('calendar_id' => intval($_POST["id"]))); wp_redirect( admin_url( "admin.php?page=advanced-booking-calendar-show-seasons-calendars&setting=calDeleted" ) ); } } exit; } //==>delCalendar() add_action( 'admin_post_abc_booking_delCalendar', 'abc_booking_delCalendar' ); // Add season to DB function abc_booking_addSeason() { global $wpdb; if ( !current_user_can( 'manage_options' ) ) { wp_die("Go away"); } if ( isset($_POST["title"]) && isset($_POST["price"]) ) { $wpdb->insert( $wpdb->prefix.'advanced_booking_calendar_seasons', array('title' => sanitize_text_field($_POST["title"]), 'price' => sanitize_text_field($_POST["price"]), 'lastminute' => 0)); } wp_redirect( admin_url( "admin.php?page=advanced-booking-calendar-show-seasons-calendars&setting=seasonAdded" ) ); exit; } //==>addSeason() add_action( 'admin_post_abc_booking_addSeason', 'abc_booking_addSeason' ); // Edit season function abc_booking_editSeason() { global $wpdb; if ( !current_user_can( 'manage_options' ) ) { wp_die("Go away"); } if ( isset($_POST["id"]) && isset($_POST["title"]) && isset($_POST["price"])) { $wpdb->update($wpdb->prefix.'advanced_booking_calendar_seasons', array('title' => sanitize_text_field($_POST["title"]), 'price' => sanitize_text_field($_POST["price"])), array('id' => sanitize_text_field($_POST["id"]))); } wp_redirect( admin_url( "admin.php?page=advanced-booking-calendar-show-seasons-calendars&setting=changeSaved" ) ); exit; } //==>editSeason() add_action( 'admin_post_abc_booking_editSeason', 'abc_booking_editSeason' ); // Delete season function abc_booking_delSeason() { global $wpdb; if ( !current_user_can( 'manage_options' ) ) { wp_die("Go away"); } if ( isset($_POST["id"]) ) { $wpdb->delete($wpdb->prefix.'advanced_booking_calendar_seasons', array('id' => sanitize_text_field($_POST["id"]))); } wp_redirect( admin_url( "admin.php?page=advanced-booking-calendar-show-seasons-calendars&setting=seasonDeleted" ) ); exit; } //==>delSeasons() add_action( 'admin_post_abc_booking_delSeason', 'abc_booking_delSeason' ); // Edit room names function abc_booking_editRoomNames() { global $wpdb; if ( !current_user_can( 'manage_options' ) ) { wp_die("Go away"); } if ( isset($_POST["name-0"]) && isset($_POST["calendarId"])) { $er = $wpdb->get_row('SELECT * FROM '.$wpdb->prefix.'advanced_booking_calendar_calendars WHERE id = '.intval($_POST["calendarId"]), ARRAY_A); $maxAvailabilities = $er["maxAvailabilities"]; for ($i = 0; $i <= ($maxAvailabilities-1); $i++){ $wpdb->update($wpdb->prefix.'advanced_booking_calendar_rooms', array('name' => sanitize_text_field($_POST["name-".$i])), array('id' => sanitize_text_field($_POST["id-".$i] ))); } } wp_redirect( admin_url( "admin.php?page=advanced-booking-calendar-show-seasons-calendars&setting=roomnamesChanged" ) ); exit; } //==>editSeason() add_action( 'admin_post_abc_booking_editRoomNames', 'abc_booking_editRoomNames' ); // Adding assignment function abc_booking_addSeasonAssignment() { global $wpdb; if (!current_user_can('manage_options')) { wp_die("Go away"); } if (isset($_POST["calendar"]) && isset($_POST["season"]) && isset($_POST["dateStart"]) && isset($_POST["dateEnd"])) { // Check if end date later as start date $normFromValue = abc_booking_formatDateToDB($_POST["dateStart"]); $normToValue = abc_booking_formatDateToDB($_POST["dateEnd"]); if($normFromValue > $normToValue) { wp_die("End Date > Start Date", "Seasons assignment", array('back_link' => true)); } //check if dates overlap somehow $query = "SELECT COUNT(*) as co FROM ".$wpdb->prefix."advanced_booking_calendar_seasons_assignment WHERE calendar_id = '".sanitize_text_field($_POST["calendar"])."' AND (start < '".$normToValue."' AND end > '".$normFromValue."')"; $row = $wpdb->get_results($query, ARRAY_A); if($row[0]["co"] > 0) { wp_die("Overlap", "Seasons assignment", array('back_link' => true)); } $wpdb->insert( $wpdb->prefix.'advanced_booking_calendar_seasons_assignment', array('calendar_id' => sanitize_text_field($_POST["calendar"]), 'season_id' => sanitize_text_field($_POST["season"]), 'start' => $normFromValue, 'end' => $normToValue )); } wp_redirect(admin_url("admin.php?page=advanced-booking-calendar-show-seasons-calendars&setting=seasassAdded")); exit; } //==>addSeasonAssignment() add_action('admin_post_abc_booking_addSeasonAssignment', 'abc_booking_addSeasonAssignment'); // Edit Assignment function abc_booking_editSeasonAssignment() { global $wpdb; if (!current_user_can('manage_options')) { wp_die("Go away"); } if ( isset($_POST["id"]) && isset($_POST["calendar"]) && isset($_POST["season"]) && isset($_POST["dateStart"]) && isset($_POST["dateEnd"])) { $normFromValue = abc_booking_formatDateToDB($_POST["dateStart"]); $normToValue = abc_booking_formatDateToDB($_POST["dateEnd"]); // Check if start end is larger than end date if($normFromValue > $normToValue) { wp_die("End Date < Start Date", "Seasons assignment", array('back_link' => true)); } // Check if dates overlap $row = $wpdb->get_results("SELECT COUNT(*) as co FROM ".$wpdb->prefix."advanced_booking_calendar_seasons_assignment WHERE calendar_id = '".sanitize_text_field($_POST["calendar"])."' AND id != '".intval($_POST["id"])."' AND (start < '".$normToValue."' AND end > '".$normFromValue."')", ARRAY_A); if($row[0]["co"] > 0) { wp_die("Overlap", "Seasons assignment", array('back_link' => true)); } $wpdb->update($wpdb->prefix.'advanced_booking_calendar_seasons_assignment', array('calendar_id' => sanitize_text_field($_POST["calendar"]), 'season_id' => intval($_POST["season"]), 'start' => $normFromValue, 'end' => $normToValue ), array('id' => intval($_POST["id"]))); } wp_redirect( admin_url( "admin.php?page=advanced-booking-calendar-show-seasons-calendars&setting=changeSaved" ) ); exit; } //==>editSeason() add_action( 'admin_post_abc_booking_editSeasonAssignment', 'abc_booking_editSeasonAssignment' ); // Delete Assignment function abc_booking_delSeasonAssignment() { global $wpdb; if (!current_user_can( 'manage_options')) { wp_die("Go away"); } if (isset($_POST["id"])) { $wpdb->delete($wpdb->prefix.'advanced_booking_calendar_seasons_assignment', array('id' => intval($_POST["id"]))); } wp_redirect(admin_url("admin.php?page=advanced-booking-calendar-show-seasons-calendars&setting=seasassDeleted")); exit; } //==>delSeasons() add_action('admin_post_abc_booking_delSeasonAssignment', 'abc_booking_delSeasonAssignment'); // Output to backend function advanced_booking_calendar_show_seasons_calendars() { if (!current_user_can('manage_options')) { wp_die("Go away"); } global $wpdb; global $abcUrl; wp_enqueue_script('uikit-js', $abcUrl.'backend/js/uikit.min.js', array('jquery')); wp_enqueue_style('uikit', $abcUrl.'/frontend/css/uikit.gradient.min.css'); wp_enqueue_style('abc-datepicker', $abcUrl.'/frontend/css/jquery-ui.min.css'); wp_enqueue_script('jquery-ui-datepicker'); wp_enqueue_script('abc-functions', plugin_dir_url(__FILE__) . 'js/abc-functions.js', array('jquery')); wp_localize_script( 'abc-functions', 'abc_functions_vars', array( 'dateformat' => abc_booking_dateFormatToJS(getAbcSetting('dateformat')), 'firstday' => getAbcSetting('firstdayofweek'))); if(isset($_GET["action"])) { $getAction = $_GET["action"]; } else { $getAction = ""; } $calendars = ""; $output = ""; $seasons = ""; $calendarsAs = ""; $seasonsAs = ""; $assignments = ""; $priceformat = getAbcSetting('priceformat'); $currency = getAbcSetting('currency'); $notices = ""; if(isset($_GET["setting"]) ){ switch($_GET["setting"]){ case 'roomLimit': $notices .= '
'.__('Number of rooms is limited to 15 rooms! If you need more rooms, please download our Pro-Version.', 'advanced-booking-calendar' ).'
'.__('Change has been saved.', 'advanced-booking-calendar' ).' '; if(isset($_GET["room"])){ if($_GET["room"] == 0){ $notices .= __('Rooms could not be deleted. There are still active bookings.', 'advanced-booking-calendar' ); }else{ $notices .= sprintf( __('Rooms reduced to %s rooms', 'abc-bookings'), $_GET["room"]); } } $notices .='
'.__('Season has been added.', 'advanced-booking-calendar' ).'
'.__('Calendar has been deleted.', 'advanced-booking-calendar' ).'
'.__('Calendar was not deleted. There still exist bookings in this calendar.', 'advanced-booking-calendar' ).'
'.__('Calendar has been added.', 'advanced-booking-calendar' ).'
'.__('Season has been deleted.', 'advanced-booking-calendar' ).'
'.__('Room names have been saved.', 'advanced-booking-calendar' ).'
'.__('Season assignment has been added.', 'advanced-booking-calendar' ).'
'.__('Season assignment has been deleted.', 'advanced-booking-calendar' ).'
| '.__('Name', 'advanced-booking-calendar').' | '.__('Number of rooms', 'advanced-booking-calendar').' | '.__('Max. Persons', 'advanced-booking-calendar').' | '.__('Price Preset', 'advanced-booking-calendar').' | '.__('Info Page', 'advanced-booking-calendar').' | '.__('Info Text', 'advanced-booking-calendar').' | '.__('Shortcode', 'advanced-booking-calendar').' |
| '.__('Name', 'advanced-booking-calendar').' | '.__('Price', 'advanced-booking-calendar').' |
| '.__('Calendar', 'advanced-booking-calendar').' | '.__('Season', 'advanced-booking-calendar').' | '.__('Date', 'advanced-booking-calendar').' |