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' ).'

'; break; case 'changeSaved': $notices .= '

'.__('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 .='

'; break; case 'seasonAdded': $notices .= '

'.__('Season has been added.', 'advanced-booking-calendar' ).'

'; break; case 'calDeleted': $notices .= '

'.__('Calendar has been deleted.', 'advanced-booking-calendar' ).'

'; break; case 'calNotDeleted': $notices .= '

'.__('Calendar was not deleted. There still exist bookings in this calendar.', 'advanced-booking-calendar' ).'

'; break; case 'calAdded': $notices .= '

'.__('Calendar has been added.', 'advanced-booking-calendar' ).'

'; break; case 'seasonDeleted': $notices .= '

'.__('Season has been deleted.', 'advanced-booking-calendar' ).'

'; break; case 'roomnamesChanged': $notices .= '

'.__('Room names have been saved.', 'advanced-booking-calendar' ).'

'; break; case 'seasassAdded': $notices .= '

'.__('Season assignment has been added.', 'advanced-booking-calendar' ).'

'; break; case 'seasassDeleted': $notices .= '

'.__('Season assignment has been deleted.', 'advanced-booking-calendar' ).'

'; break; } } //Show standard page or action page switch($getAction){ case "abc_booking_editCalendar": // Does the ID exist? $row = $wpdb->get_row("SELECT COUNT(*) as co FROM ".$wpdb->prefix."advanced_booking_calendar_calendars WHERE id = '".$_GET["id"]."'", ARRAY_A); if($row["co"] == 0) { // ID doesn't exist wp_die("Error! Unknown id
Please go back"); } else { //ID exists $row = $wpdb->get_results("SELECT * FROM ".$wpdb->prefix."advanced_booking_calendar_calendars WHERE id = '".$_GET["id"]."'", ARRAY_A); $output = '

'.__('Edit existing Calendar', 'advanced-booking-calendar').'

'.__('Please choose a meaningful title.', 'advanced-booking-calendar').'

'.__('eg. max. 10 Rooms available', 'advanced-booking-calendar').'

'.__('eg. max. 5 persons in one room', 'advanced-booking-calendar').'

'.__('If no season is active, the price preset will be used for price calculations', 'advanced-booking-calendar').'

'.wp_dropdown_pages(array('echo' => 0, 'show_option_none' => "Don't link", 'option_none_value' => "0", 'selected' => $row[0]["infoPage"])).' '.__('Manage Pages', 'advanced-booking-calendar').'

'.__('You can link to an existing Page for further information.', 'advanced-booking-calendar').'


'.__('Maximum 200 chars', 'advanced-booking-calendar').'


'; } break; case "abc_booking_editSeason": //Does the ID exist? $row = $wpdb->get_results("SELECT COUNT(*) as co FROM ".$wpdb->prefix."advanced_booking_calendar_seasons WHERE id = '".intval($_GET["id"])."'", ARRAY_A); if($row[0]["co"] == 0) { // ID doesn't exist wp_die("Error! Unknown id
Please go back"); } else { //ID exists $row = $wpdb->get_results("SELECT title,price FROM ".$wpdb->prefix."advanced_booking_calendar_seasons WHERE id = '".intval($_GET["id"])."'", ARRAY_A); $output = '

'.__('Edit existing Season', 'advanced-booking-calendar').'

'.__('Please choose a meaningful title.', 'advanced-booking-calendar').'

'.__('The currency code will be attached automatically.', 'advanced-booking-calendar').'


'; } break; case "abc_booking_editSeasonAssignment": //Does the ID exist? $row = $wpdb->get_results("SELECT COUNT(*) as co FROM ".$wpdb->prefix."advanced_booking_calendar_seasons_assignment WHERE id = '".intval($_GET["id"])."'", ARRAY_A); if($row[0]["co"] == 0) { // ID doesn't exist wp_die("Error! Unknown id
Please go back"); } else { $row = $wpdb->get_results("SELECT * FROM ".$wpdb->prefix."advanced_booking_calendar_seasons_assignment WHERE id = '".intval($_GET["id"])."'", ARRAY_A); $row = $row[0]; // Getting calendars $calendarRows = $wpdb->get_results("SELECT * FROM ".$wpdb->prefix."advanced_booking_calendar_calendars", ARRAY_A); foreach($calendarRows as $crow) { if($crow["id"] == $row["calendar_id"]) { $selected = 'selected'; } else { $selected = ""; } $calendarsAs .= ''; } // Getting seasons $seasonRows = $wpdb->get_results("SELECT * FROM ".$wpdb->prefix."advanced_booking_calendar_seasons", ARRAY_A); foreach($seasonRows as $srow) { if($srow["id"] == $row["season_id"]) { $selected = 'selected'; } else { $selected = ""; } $seasonsAs .= ''; } //ID exists $output .= '

'.__('Edit existing Assignment', 'advanced-booking-calendar').'


'; } break; case "abc_booking_editRoomNames": //Does the ID exist? $row = $wpdb->get_results("SELECT COUNT(*) as co FROM ".$wpdb->prefix."advanced_booking_calendar_rooms WHERE calendar_id = '".intval($_GET["id"])."'", ARRAY_A); if($row[0]["co"] == 0) { // ID doesn't exist wp_die("Error! Unknown id
Please go back"); } else { $er = $wpdb->get_row('SELECT * FROM '.$wpdb->prefix.'advanced_booking_calendar_calendars WHERE id = '.intval($_GET["id"]), ARRAY_A); $calendarName = esc_html($er["name"]); $maxAvailabilities = esc_html($er["maxAvailabilities"]); $row = $wpdb->get_results("SELECT * FROM ".$wpdb->prefix."advanced_booking_calendar_rooms WHERE calendar_id = '".intval($_GET["id"])."'", ARRAY_A); $output = '

'.sprintf( __('Edit room names for calendar "%s"', 'abc-bookings'), $calendarName ).'

'; for ($i = 0; $i <= ($maxAvailabilities-1); $i++){ $output .= ''; } $output .= '

'; } break; default: $output .= '

'.__('Seasons & Calendars', 'advanced-booking-calendar').'

'.$notices.'
'; } echo $output; }//==>advanced_booking_calendar_show_calendars() ?>