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++) {
$name = $name.'-'.$i;
$wpdb->insert( $wpdb->prefix.'advanced_booking_calendar_rooms',
array( 'calendar_id' => $calendarId,
'name' => $name
));
}
} 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 = '';
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 maxAvailabilities FROM '.$wpdb->prefix.'advanced_booking_calendar_calendars WHERE id = '.$_POST["id"], ARRAY_A);
$rooms -= $er["maxAvailabilities"];
$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->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";
}
}
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"]) ) {
$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" ) );
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" ) );
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" ) );
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" ) );
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" ) );
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
if($_POST["dateStart"] > $_POST["dateEnd"]) {
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 < '".abc_booking_formatDateToDB($_POST["dateEnd"])."' AND
end > '".abc_booking_formatDateToDB($_POST["dateStart"])."')";
$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' => abc_booking_formatDateToDB($_POST["dateStart"]),
'end' => abc_booking_formatDateToDB($_POST["dateEnd"])
));
}
wp_redirect(admin_url("admin.php?page=advanced-booking-calendar-show-seasons-calendars"));
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");
}
// Check if start end is larger than end date
if($_POST["dateStart"] > $_POST["dateEnd"]) {
wp_die("End Date < Start Date", "Seasons assignment", array('back_link' => true));
}
if ( isset($_POST["id"]) && isset($_POST["calendar"]) && isset($_POST["season"]) && isset($_POST["dateStart"]) && isset($_POST["dateEnd"])) {
// 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
(start < '".abc_booking_formatDateToDB($_POST["dateEnd"])."' AND
end > '".abc_booking_formatDateToDB($_POST["dateStart"])."')", 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' => abc_booking_formatDateToDB($_POST["dateStart"]),
'end' => abc_booking_formatDateToDB($_POST["dateEnd"])
), array('id' => intval($_POST["id"])));
}
wp_redirect( admin_url( "admin.php?page=advanced-booking-calendar-show-seasons-calendars" ) );
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"));
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"]) && $_GET["setting"] == 'roomLimit') {
$notices .= '
'.__('Number of rooms is limited to 15 rooms! If you need more rooms, please download our Pro-Version.', 'abc-booking' ).'
';
}
//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', 'abc-booking').'
';
}
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', 'abc-booking').'
';
}
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', 'abc-booking').'
';
}
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 ).'
';
// ----- CALENDAR SETTINGS -----
$er = $wpdb->get_results('SELECT * FROM '.$wpdb->prefix.'advanced_booking_calendar_calendars ORDER BY name', ARRAY_A);
//Count, for adding a
at every second row
$foreachcount = 1;
foreach($er as $row) {
if ($foreachcount%2 == 1) {
$class = 'class="alternate"';
} else {
$class = '';
}
//Max 50 char for Info Text
if(strlen($row["infoText"]) > 50) {
$infoText = substr(esc_textarea($row["infoText"]),0,strpos(esc_textarea($row["infoText"]), ' ', 50))."...";
} else {
$infoText = esc_textarea($row["infoText"]);
}
//Page Link
if($row["infoPage"] == 0 || $row["infoPage"] == "") {
$infopage = ''.__('No Page selected', 'abc-booking').'';
} else {
$infopage = ''.get_post(esc_html($row["infoPage"]))->post_title.'';
}
$calendars .= '
'.$row["id"].'
'.esc_html($row["name"]).'
'.esc_html($row["maxAvailabilities"]).'
'.esc_html($row["maxUnits"]).'
'.esc_html($row["pricePreset"]).' '.$currency.'
'.$infopage.'
'.$infoText.'
';
$foreachcount++;
}
$output .= '
'.__('Existing Calendars', 'abc-booking').'
ID
'.__('Name', 'abc-booking').'
'.__('Number of rooms', 'abc-booking').'
'.__('Max. Persons', 'abc-booking').'
'.__('Price Preset', 'abc-booking').'
'.__('Info Page', 'abc-booking').'
'.__('Info Text', 'abc-booking').'
'.$calendars.'
'.__('Add new Calendar', 'abc-booking').'
';
// ----- SEASONS SETTINGS -----
$er = $wpdb->get_results('SELECT * FROM '.$wpdb->prefix.'advanced_booking_calendar_seasons WHERE lastminute = 0 ORDER BY title', ARRAY_A);
//Count, for adding a
at every second row
$foreachcount = 1;
foreach($er as $row) {
if ($foreachcount%2 == 1) {
$class = 'class="alternate"';
} else {
$class = '';
}
$seasons .= '
';
// ----- SEASON ASSIGNMENTS SETTINGS ------
// Calendars
$calendarRows = $wpdb->get_results("SELECT * FROM ".$wpdb->prefix."advanced_booking_calendar_calendars", ARRAY_A);
foreach($calendarRows as $row) {
$calendarsAs .= '';
}
// Seasons
$seasonRows = $wpdb->get_results("SELECT * FROM ".$wpdb->prefix."advanced_booking_calendar_seasons", ARRAY_A);
foreach($seasonRows as $row) {
$seasonsAs .= '';
}
$er = $wpdb->get_results('SELECT assignments.id as ID,
calendars.name as calendar,
seasons.title as season,
seasons.price as price,
assignments.start as start,
assignments.end as end
FROM '.$wpdb->prefix.'advanced_booking_calendar_seasons_assignment as assignments
INNER JOIN '.$wpdb->prefix.'advanced_booking_calendar_seasons as seasons ON seasons.id = assignments.season_id
INNER JOIN '.$wpdb->prefix.'advanced_booking_calendar_calendars as calendars ON calendars.id = assignments.calendar_id
WHERE seasons.lastminute = 0
ORDER BY calendars.name, assignments.start', ARRAY_A);
//Count, for adding a
at every second row
$foreachcount = 1;
foreach($er as $row) {
if ($foreachcount%2 == 1) {
$class = 'class="alternate"';
} else {
$class = '';
}
$assignments .= '