Current File : /home/kelaby89/cartel.express/wp-content/plugins/quickcal/includes/ajax/init_admin.php |
<?php
if(!class_exists('Booked_Admin_AJAX')) {
class Booked_Admin_AJAX {
public function __construct() {
add_action('admin_init', [ $this, 'init' ] );
}
public function init(){
if (current_user_can('edit_booked_appointments')):
// ------------ Actions ------------ //
add_action('wp_ajax_booked_admin_add_appt', array(&$this,'booked_admin_add_appt'));
add_action('wp_ajax_booked_admin_edit_appt', array(&$this,'booked_admin_edit_appt'));
add_action('wp_ajax_booked_admin_delete_custom_timeslot', array(&$this,'booked_admin_delete_custom_timeslot'));
add_action('wp_ajax_booked_admin_adjust_custom_timeslot_count', array(&$this,'booked_admin_adjust_custom_timeslot_count'));
add_action('wp_ajax_booked_admin_add_custom_timeslot', array(&$this,'booked_admin_add_custom_timeslot'));
add_action('wp_ajax_booked_admin_add_custom_timeslots', array(&$this,'booked_admin_add_custom_timeslots'));
add_action('wp_ajax_booked_admin_save_custom_time_slots', array(&$this,'booked_admin_save_custom_time_slots'));
add_action('wp_ajax_booked_admin_save_custom_fields', array(&$this,'booked_admin_save_custom_fields'));
add_action('wp_ajax_booked_admin_add_timeslots', array(&$this,'booked_admin_add_timeslots'));
add_action('wp_ajax_booked_admin_add_timeslot', array(&$this,'booked_admin_add_timeslot'));
add_action('wp_ajax_booked_admin_clear_timeslots', array(&$this,'booked_admin_clear_timeslots'));
add_action('wp_ajax_booked_admin_adjust_default_timeslot_count', array(&$this,'booked_admin_adjust_default_timeslot_count'));
add_action('wp_ajax_booked_admin_delete_timeslot', array(&$this,'booked_admin_delete_timeslot'));
add_action('wp_ajax_booked_admin_delete_appt', array(&$this,'booked_admin_delete_appt'));
add_action('wp_ajax_booked_admin_approve_appt', array(&$this,'booked_admin_approve_appt'));
add_action('wp_ajax_booked_admin_approve_all', array(&$this,'booked_admin_approve_all'));
add_action('wp_ajax_booked_admin_delete_all', array(&$this,'booked_admin_delete_all'));
add_action('wp_ajax_booked_admin_delete_past', array(&$this,'booked_admin_delete_past'));
add_action('wp_ajax_booked_date_formatting', array(&$this,'booked_date_formatting'));
add_action('wp_ajax_booked_admin_disable_slot', array(&$this,'booked_admin_disable_slot'));
// ------------ Loaders ------------ //
add_action('wp_ajax_booked_admin_load_timeslots', array(&$this,'booked_admin_load_timeslots'));
add_action('wp_ajax_booked_admin_load_full_timeslots', array(&$this,'booked_admin_load_full_timeslots'));
add_action('wp_ajax_booked_admin_load_full_customfields', array(&$this,'booked_admin_load_full_customfields'));
add_action('wp_ajax_booked_admin_calendar_picker', array(&$this,'booked_admin_calendar_picker'));
add_action('wp_ajax_booked_admin_calendar_month', array(&$this,'booked_admin_calendar_month'));
add_action('wp_ajax_booked_admin_calendar_date', array(&$this,'booked_admin_calendar_date'));
add_action('wp_ajax_booked_admin_refresh_date_square', array(&$this,'booked_admin_refresh_date_square'));
add_action('wp_ajax_booked_admin_user_info_modal', array(&$this,'booked_admin_user_info_modal'));
add_action('wp_ajax_booked_admin_new_appointment_form', array(&$this,'booked_admin_new_appointment_form'));
add_action('wp_ajax_booked_admin_custom_timeslots_list', array(&$this,'booked_admin_custom_timeslots_list'));
add_action('wp_ajax_booked_admin_get_timeslots_select', array(&$this,'booked_admin_get_timeslots_select'));
endif;
}
public static function nonce_check( $nonce ){
if ( !wp_verify_nonce( $_POST['nonce'], $nonce ) ){
die ( 'Required "nonce" value is not here, please let the developer know.');
}
}
// ------------ ACTIONS ------------ //
// Enable/Disable Time Slot
public function booked_admin_disable_slot(){
Booked_Admin_AJAX::nonce_check('ajax-admin-nonce');
booked_wpml_ajax();
$date = esc_html( $_POST['date'] );
$date = date( 'Y-m-d', strtotime( $date ) );
$timeslot = esc_html( $_POST['timeslot'] );
$calendar_id = esc_html( $_POST['calendar_id'] );
$disabled_timeslots = get_option( 'booked_disabled_timeslots', array() );
if ( $calendar_id ):
if ( isset( $disabled_timeslots[$calendar_id][$date][$timeslot] ) && $disabled_timeslots[$calendar_id][$date][$timeslot] ):
echo 'enabled';
unset( $disabled_timeslots[$calendar_id][$date][$timeslot] );
else:
echo 'disabled';
$disabled_timeslots[$calendar_id][$date][$timeslot] = true;
endif;
else:
if ( isset( $disabled_timeslots[0][$date][$timeslot] ) && $disabled_timeslots[0][$date][$timeslot] ):
echo 'enabled';
unset( $disabled_timeslots[0][$date][$timeslot] );
else:
echo 'disabled';
$disabled_timeslots[0][$date][$timeslot] = true;
endif;
endif;
update_option( 'booked_disabled_timeslots', $disabled_timeslots );
wp_die();
}
// Date Formatting
public function booked_date_formatting(){
Booked_Admin_AJAX::nonce_check('ajax-admin-nonce');
booked_wpml_ajax();
if (isset($_POST['date']) && $_POST['date']):
$date_format = get_option('date_format');
echo ucwords( date_i18n( $date_format,strtotime(esc_html( $_POST['date'] )) ) );
else:
echo '';
endif;
wp_die();
}
// Add Appointment
public function booked_admin_add_appt(){
Booked_Admin_AJAX::nonce_check('ajax-admin-add-appt-nonce');
booked_wpml_ajax();
if (isset($_POST['date']) && isset($_POST['timestamp']) && isset($_POST['timeslot']) && isset($_POST['customer_type'])):
include(QUICKCAL_AJAX_INCLUDES_DIR . 'admin/add-appointment.php');
endif;
wp_die();
}
public function booked_admin_edit_appt(){
Booked_Admin_AJAX::nonce_check('ajax-admin-edit-appt-nonce');
booked_wpml_ajax();
if ( is_user_logged_in() && current_user_can( 'edit_booked_appointments' ) ):
$email_required = get_option('booked_require_guest_email_address',false);
if ( isset($_POST['appt_date']) && isset($_POST['appt_timeslot']) && isset($_POST['name']) ):
if ( !$email_required || $email_required && isset($_POST['email']) ):
include(QUICKCAL_AJAX_INCLUDES_DIR . 'admin/edit-appointment.php');
endif;
endif;
else:
echo 'error###' . esc_html__( "Your user level does not have the ability to edit appointments.", "booked" );
endif;
wp_die();
}
// Delete Custom Timeslot
public function booked_admin_delete_custom_timeslot(){
Booked_Admin_AJAX::nonce_check('ajax-admin-nonce');
booked_wpml_ajax();
if (isset($_POST['timeslot']) && isset($_POST['currentArray'])):
$timeslot_to_delete = $_POST['timeslot'];
$current_times = json_decode(stripslashes($_POST['currentArray']),true);
$current_times_details = json_decode(stripslashes($_POST['currentArrayDetails']),true);
do_action('booked_deleting_custom_timeslot',$_POST['start_date'],$_POST['end_date'],$_POST['timeslot'],$_POST['calendar_id']);
if (isset($current_times[$timeslot_to_delete])):
unset($current_times[$timeslot_to_delete]);
unset($current_times_details[$timeslot_to_delete]);
endif;
echo json_encode(array(
'timeslot' => $current_times,
'timeslot_details' => $current_times_details
));
endif;
wp_die();
}
// Adjust Custom Timeslot Count
public function booked_admin_adjust_custom_timeslot_count(){
Booked_Admin_AJAX::nonce_check('ajax-admin-nonce');
booked_wpml_ajax();
if (isset($_POST['currentArray']) && isset($_POST['timeslot']) && isset($_POST['newCount'])):
$current_times = json_decode(stripslashes($_POST['currentArray']),true);
$timeslot = $_POST['timeslot'];
$newCount = $_POST['newCount'];
if (!empty($current_times[$timeslot])):
$current_count = $current_times[$timeslot];
if ($newCount > 0):
$current_times[$timeslot] = $newCount;
else :
$current_times[$timeslot] = 1;
endif;
$current_times_details[$timeslot]['title'] = $title;
endif;
echo json_encode($current_times);
endif;
wp_die();
}
// Add Custom Timeslot
public function booked_admin_add_custom_timeslot(){
Booked_Admin_AJAX::nonce_check('ajax-admin-nonce');
booked_wpml_ajax();
if (isset($_POST['startTime']) && isset($_POST['endTime']) && isset($_POST['count']) && isset($_POST['currentTimes'])):
$title = isset($_POST['title']) ? $_POST['title'] : '';
$startTime = $_POST['startTime'];
$endTime = $_POST['endTime'];
$count = $_POST['count'];
$current_times = json_decode(stripslashes($_POST['currentTimes']),true);
$current_times_details = !empty($_POST['currentTimesDetails']) ? json_decode(stripslashes($_POST['currentTimesDetails']),true) : array();
if ($startTime == 'allday'):
$startTime = '0000';
$endTime = '2400';
endif;
do_action('booked_creating_custom_timeslot',$_POST['start_date'],$_POST['end_date'],$startTime,$endTime,$_POST['calendar_id'],$title);
if (isset($current_times[$startTime.'-'.$endTime])):
$current_times[$startTime.'-'.$endTime] = $current_times[$startTime.'-'.$endTime] + $count;
else :
$current_times[$startTime.'-'.$endTime] = $count;
endif;
$current_times_details[$startTime.'-'.$endTime]['title'] = $title;
echo json_encode(array(
'timeslot' => $current_times,
'timeslot_details' => $current_times_details,
));
endif;
wp_die();
}
// Add Custom Timeslots
public function booked_admin_add_custom_timeslots(){
Booked_Admin_AJAX::nonce_check('ajax-admin-nonce');
booked_wpml_ajax();
if (isset($_POST['startTime']) && isset($_POST['endTime']) && isset($_POST['interval']) && isset($_POST['count']) && isset($_POST['time_between'])):
$title = isset($_POST['title']) ? $_POST['title'] : '';
$startTime = $_POST['startTime'];
$endTime = $_POST['endTime'];
if ($_POST['endTime'] == '2400'):
$endTime = '2400';
endif;
$interval = $_POST['interval'];
$count = $_POST['count'];
$time_between = $_POST['time_between'];
$current_times = json_decode(stripslashes($_POST['currentTimes']),true);
$current_times_details = !empty($_POST['currentTimesDetails']) ? json_decode(stripslashes($_POST['currentTimesDetails']),true) : array();
do {
$newStartTime = date_i18n("Hi", strtotime('+'.$interval.' minutes', strtotime($startTime)));
if (isset($current_times[$startTime.'-'.$newStartTime])):
$current_times[$startTime.'-'.$newStartTime] = $current_times[$startTime.'-'.$newStartTime] + $count;
else :
$current_times[$startTime.'-'.$newStartTime] = $count;
endif;
$current_times_details[$startTime.'-'.$newStartTime]['title'] = $title;
do_action('booked_creating_custom_timeslot',$_POST['start_date'],$_POST['end_date'],$startTime,$newStartTime,$_POST['calendar_id'],$title);
if ($time_between):
$time_to_add = $time_between + $interval;
else :
$time_to_add = $interval;
endif;
$startTime = date_i18n("Hi", strtotime('+'.$time_to_add.' minutes', strtotime($startTime)));
if ($startTime == '0000'):
$startTime = '2400';
endif;
} while ($startTime < $endTime);
echo json_encode(array(
'timeslot' => $current_times,
'timeslot_details' => $current_times_details,
));
endif;
wp_die();
}
// Save Custom Timeslots
public function booked_admin_save_custom_time_slots(){
Booked_Admin_AJAX::nonce_check('ajax-admin-nonce');
booked_wpml_ajax();
if (isset($_POST['custom_timeslots_encoded'])):
$custom_timeslots_encoded = htmlentities( stripslashes($_POST['custom_timeslots_encoded']), ENT_NOQUOTES );
update_option('booked_custom_timeslots_encoded',$custom_timeslots_encoded);
endif;
wp_die();
}
// Save Custom Fields
public function booked_admin_save_custom_fields(){
Booked_Admin_AJAX::nonce_check('ajax-admin-nonce');
booked_wpml_ajax();
if (isset($_POST['booked_custom_fields'])):
$custom_fields = $_POST['booked_custom_fields'];
$calendar_id = isset($_POST['booked_cf_calendar_id']) ? $_POST['booked_cf_calendar_id']: false;
if ($custom_fields != '[]'):
if ($calendar_id):
update_option('booked_custom_fields_'.$calendar_id,$custom_fields);
else:
update_option('booked_custom_fields',$custom_fields);
endif;
else:
if ($calendar_id):
delete_option('booked_custom_fields_'.$calendar_id);
else:
delete_option('booked_custom_fields');
endif;
endif;
endif;
wp_die();
}
// Add Timeslots
public function booked_admin_add_timeslots(){
Booked_Admin_AJAX::nonce_check('ajax-admin-nonce');
booked_wpml_ajax();
if ( isset($_POST['day']) && isset($_POST['startTime']) && isset($_POST['endTime']) ):
$calendar_id = (isset($_POST['calendar_id']) ? $_POST['calendar_id'] : false);
$title = isset($_POST['title']) ? $_POST['title'] : '';
$day = esc_html( $_POST['day'] );
$startTime = esc_html( $_POST['startTime'] );
$endTime = esc_html( $_POST['endTime'] );
$interval = esc_html( $_POST['interval'] );
$count = esc_html( $_POST['count'] );
$time_between = esc_html( $_POST['time_between'] );
if ($calendar_id):
$booked_defaults = get_option('booked_defaults_'.$calendar_id);
else :
$booked_defaults = get_option('booked_defaults');
endif;
if ( empty($booked_defaults) ): $booked_defaults = array(); endif;
$temp_date = date_i18n( 'Y-m-d' );
$loop_started = false;
do {
$newStartTime = date_i18n( "Hi", strtotime( '+' . $interval . ' minutes', strtotime( $temp_date . ' ' . $startTime ) ) );
if ( $newStartTime < $endTime ):
if (!empty($booked_defaults[$day][$startTime.'-'.$newStartTime])): $currentCount = $booked_defaults[$day][$startTime.'-'.$newStartTime]; else : $currentCount = 0; endif;
$booked_defaults[$day][$startTime.'-'.$newStartTime] = $count + $currentCount;
$booked_defaults[$day.'-details'][$startTime.'-'.$newStartTime]['title'] = $title;
endif;
if ( $time_between ):
$time_to_add = $time_between + $interval;
else :
$time_to_add = $interval;
endif;
$startTime = date_i18n("Hi", strtotime('+'.$time_to_add.' minutes', strtotime( $temp_date . ' ' . $startTime ) ) );
$mins = (int)$startTime;
if ( $loop_started && $last_mins > $mins ):
break;
else:
$last_mins = $mins;
$loop_started = true;
endif;
} while ( $startTime < $endTime );
if ($calendar_id):
update_option('booked_defaults_'.$calendar_id,apply_filters('booked_update_timeslots',$booked_defaults));
else :
update_option('booked_defaults',apply_filters('booked_update_timeslots',$booked_defaults));
endif;
endif;
wp_die();
}
// Clear Timeslots
public function booked_admin_clear_timeslots(){
Booked_Admin_AJAX::nonce_check('ajax-admin-nonce');
booked_wpml_ajax();
if ( isset($_POST['day']) ):
$calendar_id = (isset($_POST['calendar_id']) ? esc_html( $_POST['calendar_id'] ) : false);
$day = esc_html( $_POST['day'] );
if ($calendar_id):
$booked_defaults = get_option( 'booked_defaults_' . $calendar_id );
else :
$booked_defaults = get_option( 'booked_defaults' );
endif;
if ( isset( $booked_defaults[$day] ) ): unset( $booked_defaults[$day] ); endif;
if ( isset( $booked_defaults[$day . '-details'] ) ): unset( $booked_defaults[$day . '-details'] ); endif;
if ($calendar_id):
update_option('booked_defaults_'.$calendar_id,apply_filters('booked_update_timeslots',$booked_defaults));
else :
update_option('booked_defaults',apply_filters('booked_update_timeslots',$booked_defaults));
endif;
endif;
wp_die();
}
// Add Timeslot
public function booked_admin_add_timeslot(){
Booked_Admin_AJAX::nonce_check('ajax-admin-nonce');
booked_wpml_ajax();
if (isset($_POST['day']) && isset($_POST['startTime']) && isset($_POST['count'])):
$calendar_id = (isset($_POST['calendar_id']) ? $_POST['calendar_id'] : false);
$title = isset($_POST['title']) ? $_POST['title'] : '';
$day = $_POST['day'];
$startTime = $_POST['startTime'];
$endTime = isset($_POST['endTime']) ? $_POST['endTime'] : false;
$count = $_POST['count'];
if ($startTime == 'allday'):
$startTime = '0000';
$endTime = '2400';
endif;
if ($calendar_id):
$booked_defaults = get_option('booked_defaults_'.$calendar_id);
else :
$booked_defaults = get_option('booked_defaults');
endif;
if (empty($booked_defaults)): $booked_defaults = array(); endif;
if (!empty($booked_defaults[$day][$startTime.'-'.$endTime])): $currentCount = $booked_defaults[$day][$startTime.'-'.$endTime]; else : $currentCount = 0; endif;
$booked_defaults[$day][$startTime.'-'.$endTime] = $count + $currentCount;
$booked_defaults[$day.'-details'][$startTime.'-'.$endTime]['title'] = $title;
do_action('booked_creating_timeslot',$day,$startTime,$endTime,$calendar_id);
if ($calendar_id):
update_option('booked_defaults_'.$calendar_id,apply_filters('booked_update_timeslots',$booked_defaults));
else :
update_option('booked_defaults',apply_filters('booked_update_timeslots',$booked_defaults));
endif;
endif;
wp_die();
}
// Adjust Default Timeslot Count
public function booked_admin_adjust_default_timeslot_count(){
Booked_Admin_AJAX::nonce_check('ajax-admin-nonce');
booked_wpml_ajax();
if (isset($_POST['newCount']) && isset($_POST['day']) && isset($_POST['timeslot'])):
$calendar_id = (isset($_POST['calendar_id']) ? $_POST['calendar_id'] : false);
$day = $_POST['day'];
$timeslot = $_POST['timeslot'];
$newCount = $_POST['newCount'];
if ($calendar_id):
$booked_defaults = get_option('booked_defaults_'.$calendar_id);
else :
$booked_defaults = get_option('booked_defaults');
endif;
if (!empty($booked_defaults[$day][$timeslot])):
$booked_defaults[$day][$timeslot] = $newCount;
if ($calendar_id):
update_option('booked_defaults_'.$calendar_id,$booked_defaults);
else :
update_option('booked_defaults',$booked_defaults);
endif;
endif;
endif;
wp_die();
}
// Delete Timeslot
public function booked_admin_delete_timeslot(){
Booked_Admin_AJAX::nonce_check('ajax-admin-nonce');
booked_wpml_ajax();
if (isset($_POST['day']) && isset($_POST['timeslot'])):
$calendar_id = (isset($_POST['calendar_id']) ? $_POST['calendar_id'] : false);
$day = $_POST['day'];
$timeslot = $_POST['timeslot'];
if ($calendar_id):
$booked_defaults = get_option('booked_defaults_'.$calendar_id);
else :
$booked_defaults = get_option('booked_defaults');
endif;
do_action('booked_deleting_timeslot',$day,$timeslot,$calendar_id);
if (!empty($booked_defaults[$day][$timeslot])):
unset($booked_defaults[$day][$timeslot]);
unset($booked_defaults[$day.'-details'][$timeslot]);
$timeslot_total = 0;
foreach($booked_defaults as $default):
if (!empty($default)):
$timeslot_total++;
endif;
endforeach;
if ($calendar_id):
if ($timeslot_total):
update_option('booked_defaults_'.$calendar_id,$booked_defaults);
else :
delete_option('booked_defaults_'.$calendar_id);
endif;
else :
if ($timeslot_total):
update_option('booked_defaults',$booked_defaults);
else :
delete_option('booked_defaults');
endif;
endif;
endif;
endif;
wp_die();
}
// Delete Appointment
public function booked_admin_delete_appt(){
Booked_Admin_AJAX::nonce_check('ajax-admin-nonce');
booked_wpml_ajax();
if (isset($_POST['appt_id'])):
$appt_id = $_POST['appt_id'];
include(QUICKCAL_AJAX_INCLUDES_DIR . 'admin/delete-appointment.php');
endif;
wp_die();
}
// Approve Appointment
public function booked_admin_approve_appt(){
Booked_Admin_AJAX::nonce_check('ajax-admin-nonce');
booked_wpml_ajax();
if (isset($_POST['appt_id'])):
$appt_id = $_POST['appt_id'];
booked_send_user_approved_email($appt_id);
wp_publish_post($appt_id);
do_action('booked_appointment_approved',$appt_id);
endif;
wp_die();
}
// Approve All Appointments
public function booked_admin_approve_all(){
Booked_Admin_AJAX::nonce_check('ajax-admin-nonce');
booked_wpml_ajax();
$calendars = get_terms('booked_custom_calendars','orderby=slug&hide_empty=0');
$booked_none_assigned = true;
$default_calendar_id = false;
if (!empty($calendars)):
if (!current_user_can('manage_booked_options')):
$booked_current_user = wp_get_current_user();
$calendars = quickcal_filter_agent_calendars($booked_current_user,$calendars);
endif;
endif;
if (empty($calendars) && !current_user_can('manage_booked_options')):
wp_die();
elseif(current_user_can('manage_booked_options')):
$args = array(
'post_type' => 'booked_appointments',
'posts_per_page' => 500,
'post_status' => apply_filters('booked_admin_pending_post_status',array('draft')),
'meta_key' => '_appointment_timestamp',
'orderby' => 'meta_value_num',
'order' => 'ASC'
);
else:
$calendar_ids = array();
if (!empty($calendars)):
foreach($calendars as $cal):
$calendar_ids[] = $cal->term_id;
endforeach;
endif;
$args = array(
'post_type' => 'booked_appointments',
'posts_per_page' => 500,
'post_status' => apply_filters('booked_admin_pending_post_status',array('draft')),
'meta_key' => '_appointment_timestamp',
'orderby' => 'meta_value_num',
'order' => 'ASC'
);
if (!empty($calendar_ids)):
$args['tax_query'] = array(
array(
'taxonomy' => 'booked_custom_calendars',
'field' => 'term_id',
'terms' => $calendar_ids,
)
);
endif;
endif;
$appointments_array = array();
if ($args):
$bookedAppointments = new WP_Query($args);
if($bookedAppointments->have_posts()):
while ($bookedAppointments->have_posts()):
$bookedAppointments->the_post();
$appt_id = $bookedAppointments->post->ID;
booked_send_user_approved_email($appt_id);
wp_publish_post($appt_id);
do_action('booked_appointment_approved',$appt_id);
endwhile;
endif;
endif;
wp_die();
}
// Delete All Appointments
public function booked_admin_delete_all(){
Booked_Admin_AJAX::nonce_check('ajax-admin-nonce');
booked_wpml_ajax();
$calendars = get_terms('booked_custom_calendars','orderby=slug&hide_empty=0');
$booked_none_assigned = true;
$default_calendar_id = false;
if (!empty($calendars)):
if (!current_user_can('manage_booked_options')):
$booked_current_user = wp_get_current_user();
$calendars = quickcal_filter_agent_calendars($booked_current_user,$calendars);
endif;
endif;
if (empty($calendars) && !current_user_can('manage_booked_options')):
wp_die();
elseif(current_user_can('manage_booked_options')):
$args = array(
'post_type' => 'booked_appointments',
'posts_per_page' => 500,
'post_status' => apply_filters('booked_admin_pending_post_status',array('draft')),
'meta_key' => '_appointment_timestamp',
'orderby' => 'meta_value_num',
'order' => 'ASC'
);
else:
$calendar_ids = array();
if (!empty($calendars)):
foreach($calendars as $cal):
$calendar_ids[] = $cal->term_id;
endforeach;
endif;
$args = array(
'post_type' => 'booked_appointments',
'posts_per_page' => 500,
'post_status' => apply_filters('booked_admin_pending_post_status',array('draft')),
'meta_key' => '_appointment_timestamp',
'orderby' => 'meta_value_num',
'order' => 'ASC'
);
if (!empty($calendar_ids)):
$args['tax_query'] = array(
array(
'taxonomy' => 'booked_custom_calendars',
'field' => 'term_id',
'terms' => $calendar_ids,
)
);
endif;
endif;
$appointments_array = array();
if ($args):
$bookedAppointments = new WP_Query($args);
if($bookedAppointments->have_posts()):
while ($bookedAppointments->have_posts()):
$bookedAppointments->the_post();
global $post;
$appt_id = $post->ID;
include(QUICKCAL_AJAX_INCLUDES_DIR . 'admin/delete-appointment.php');
endwhile;
endif;
endif;
wp_die();
}
// Delete Past Appointments
public function booked_admin_delete_past(){
Booked_Admin_AJAX::nonce_check('ajax-admin-nonce');
booked_wpml_ajax();
$calendars = get_terms('booked_custom_calendars','orderby=slug&hide_empty=0');
$booked_none_assigned = true;
$default_calendar_id = false;
if (!empty($calendars)):
if (!current_user_can('manage_booked_options')):
$booked_current_user = wp_get_current_user();
$calendars = quickcal_filter_agent_calendars($booked_current_user,$calendars);
endif;
endif;
if (empty($calendars) && !current_user_can('manage_booked_options')):
wp_die();
elseif(current_user_can('manage_booked_options')):
$args = array(
'post_type' => 'booked_appointments',
'posts_per_page' => 500,
'post_status' => apply_filters('booked_admin_pending_post_status',array('draft')),
'meta_key' => '_appointment_timestamp',
'orderby' => 'meta_value_num',
'order' => 'ASC'
);
else:
$calendar_ids = array();
if (!empty($calendars)):
foreach($calendars as $cal):
$calendar_ids[] = $cal->term_id;
endforeach;
endif;
$args = array(
'post_type' => 'booked_appointments',
'posts_per_page' => 500,
'post_status' => apply_filters('booked_admin_pending_post_status',array('draft')),
'meta_key' => '_appointment_timestamp',
'orderby' => 'meta_value_num',
'order' => 'ASC'
);
if (!empty($calendar_ids)):
$args['tax_query'] = array(
array(
'taxonomy' => 'booked_custom_calendars',
'field' => 'term_id',
'terms' => $calendar_ids,
)
);
endif;
endif;
$late_date = current_time('timestamp');
$appointments_array = array();
if ($args):
$bookedAppointments = new WP_Query($args);
if($bookedAppointments->have_posts()):
while ($bookedAppointments->have_posts()):
$bookedAppointments->the_post();
global $post;
$appt_id = $post->ID;
$timestamp = get_post_meta($post->ID, '_appointment_timestamp',true);
$timeslot = get_post_meta($appt_id, '_appointment_timeslot',true);
$timeslots = explode('-',$timeslot);
$date_to_compare = strtotime(date_i18n('Y-m-d',$timestamp).' '.date_i18n('H:i:s',strtotime($timeslots[0])));
if ($late_date > $date_to_compare):
include(QUICKCAL_AJAX_INCLUDES_DIR . 'admin/delete-appointment.php');
endif;
endwhile;
endif;
endif;
wp_die();
}
// ------------ LOADERS ------------ //
// Timeslot Select Box
public function booked_admin_get_timeslots_select(){
Booked_Admin_AJAX::nonce_check('ajax-admin-nonce');
booked_wpml_ajax();
if ( !isset($_POST['date']) || !isset($_POST['appt_id']) )
wp_die();
$date = esc_html( $_POST['date'] );
$year = date_i18n( 'Y', strtotime($date) );
$month = date_i18n( 'm', strtotime($date) );
$day = date_i18n( 'd', strtotime($date) );
$appt_id = ( isset($_POST['appt_id'] ) ? esc_html( $_POST['appt_id'] ) : false );
booked_timeslots_select( $appt_id, $year, $month, $day );
wp_die();
}
// Timeslots
public function booked_admin_load_timeslots(){
Booked_Admin_AJAX::nonce_check('ajax-admin-nonce');
booked_wpml_ajax();
if (isset($_POST['day'])):
$calendar_id = (isset($_POST['calendar_id']) ? esc_html( $_POST['calendar_id'] ) : false);
if ($calendar_id):
$booked_defaults = get_option('booked_defaults_'.$calendar_id);
else :
$booked_defaults = get_option('booked_defaults');
endif;
$day = esc_html( $_POST['day'] );
$time_format = get_option('time_format');
if (!empty($booked_defaults[$day])):
ksort($booked_defaults[$day]);
foreach($booked_defaults[$day] as $time => $count):
echo booked_render_timeslot_info($time_format,$day,$time,$count,$calendar_id, $booked_defaults);
endforeach;
else :
echo '<p><small>'.esc_html__('No time slots.','booked').'</small></p>';
endif;
endif;
wp_die();
}
// Custom Timeslots
public function booked_admin_custom_timeslots_list(){
Booked_Admin_AJAX::nonce_check('ajax-admin-nonce');
booked_wpml_ajax();
if (isset($_POST['json_array'])):
$this_timeslot = array();
$this_timeslot['booked_custom_start_date'] = $_POST['start_date'];
if ($_POST['end_date']): $this_timeslot['booked_custom_end_date'] = $_POST['end_date']; else: $this_timeslot['booked_custom_end_date'] = $_POST['start_date']; endif;
$calendar_id = $_POST['calendar_id'];
$timeslots = json_decode(stripslashes($_POST['json_array']),true);
$timeslots_detailed = !empty($_POST['json_array_detailed']) ? json_decode(stripslashes($_POST['json_array_detailed']),true) : array();
if (!empty($timeslots)):
echo '<div class="cts-header"><span class="slotsTitle">'.esc_html__('Spaces Available','booked').'</span>'.esc_html__('Time Slot','booked').'</div>';
foreach ($timeslots as $timeslot => $count):
$time = explode('-',$timeslot);
$time_format = get_option('time_format');
echo '<span class="timeslot" data-timeslot="'.$timeslot.'">';
echo '<span class="slotsBlock"><span class="changeCount minus" data-count="-1"><i class="fa-solid fa-circle-minus"></i></span><span class="count"><em>'.$count.'</em> ' . _n('Space Available','Spaces Available',$count,'booked') . '</span><span class="changeCount add" data-count="1"><i class="fa-solid fa-circle-plus"></i></span></span>';
do_action( 'booked_single_custom_timeslot_start', $this_timeslot, $timeslot, $calendar_id );
if ( !empty( $timeslots_detailed[$timeslot] ) ) {
if ( !empty($timeslots_detailed[$timeslot]['title']) ) {
echo '<span class="title">' . esc_html($timeslots_detailed[$timeslot]['title']) . '</span>';
}
}
if ($time[0] == '0000' && $time[1] == '2400'):
echo '<span class="start"><i class="fa-solid fa-clock"></i> ' . strtoupper(esc_html__('All day','booked')) . '</span>';
else :
echo '<span class="start"><i class="fa-solid fa-clock"></i> ' . date_i18n($time_format,strtotime('2014-01-01 '.$time[0])) . '</span> – <span class="end">' . date_i18n($time_format,strtotime('2014-01-01 '.$time[1])) . '</span>';
endif;
do_action( 'booked_single_custom_timeslot_end', $this_timeslot, $timeslot, $calendar_id );
echo '<span class="delete"><i class="fa-solid fa-xmark"></i></span>';
echo '</span>';
endforeach;
echo '</div>';
endif;
endif;
wp_die();
}
// Full Timeslots
public function booked_admin_load_full_timeslots(){
Booked_Admin_AJAX::nonce_check('ajax-admin-nonce');
booked_wpml_ajax();
$calendar_id = (isset($_POST['calendar_id']) ? $_POST['calendar_id'] : false);
booked_render_timeslots($calendar_id);
wp_die();
}
// Full Custom Fields
public function booked_admin_load_full_customfields(){
Booked_Admin_AJAX::nonce_check('ajax-admin-nonce');
booked_wpml_ajax();
$calendar_id = (isset($_POST['calendar_id']) ? $_POST['calendar_id'] : false);
booked_render_custom_fields($calendar_id);
wp_die();
}
// Calendar Picker
public function booked_admin_calendar_picker(){
Booked_Admin_AJAX::nonce_check('ajax-admin-nonce');
booked_wpml_ajax();
if (isset($_POST['gotoMonth'])):
$timestamp = ($_POST['gotoMonth'] != 'false' ? strtotime($_POST['gotoMonth']) : current_time('timestamp'));
$year = date_i18n('Y',$timestamp);
$month = date_i18n('m',$timestamp);
booked_admin_calendar($year,$month,false,'small');
endif;
wp_die();
}
// Calendar Month
public function booked_admin_calendar_month(){
Booked_Admin_AJAX::nonce_check('ajax-admin-nonce');
booked_wpml_ajax();
if (isset($_POST['gotoMonth'])):
$calendar_id = (isset($_POST['calendar_id']) ? $_POST['calendar_id'] : false);
$timestamp = ($_POST['gotoMonth'] != 'false' ? strtotime($_POST['gotoMonth']) : current_time('timestamp'));
$year = date_i18n('Y',$timestamp);
$month = date_i18n('m',$timestamp);
booked_admin_calendar($year,$month,$calendar_id);
endif;
wp_die();
}
// Calendar Day
public function booked_admin_calendar_date(){
Booked_Admin_AJAX::nonce_check('ajax-admin-nonce');
booked_wpml_ajax();
if (isset($_POST['date'])):
$calendar_id = (isset($_POST['calendar_id']) ? esc_html( $_POST['calendar_id'] ) : false);
$date = esc_html( $_POST['date'] );
booked_admin_calendar_date_content($date,$calendar_id);
endif;
wp_die();
}
// Calendar Date Square
public function booked_admin_refresh_date_square(){
Booked_Admin_AJAX::nonce_check('ajax-admin-nonce');
booked_wpml_ajax();
if (isset($_POST['date'])):
$calendar_id = (isset($_POST['calendar_id']) ? $_POST['calendar_id'] : false);
$date = esc_html( $_POST['date'] );
booked_admin_calendar_date_square($date,$calendar_id);
endif;
wp_die();
}
// User Info Modal
public function booked_admin_user_info_modal(){
Booked_Admin_AJAX::nonce_check('ajax-admin-nonce');
booked_wpml_ajax();
if (isset($_POST['user_id'])):
include(QUICKCAL_AJAX_INCLUDES_DIR . 'admin/user-info.php');
endif;
wp_die();
}
// New Appointment Form
public function booked_admin_new_appointment_form(){
Booked_Admin_AJAX::nonce_check('ajax-admin-nonce');
booked_wpml_ajax();
if (isset($_POST['date']) && isset($_POST['timeslot'])):
include(QUICKCAL_AJAX_INCLUDES_DIR . 'admin/appointment-form.php');
endif;
wp_die();
}
}
}