apply_filters('pickuppt_update_trans_success_msg', __('Transaction updated!', 'pickuppointment')),
'status' => 'success',
)
);
} else {
wp_send_json( array(
'msg' => apply_filters('pickuppt_update_trans_error_msg', __('Transaction was not updated!', 'pickuppointment')),
'status' => 'error',
)
);
}
wp_die();
}
add_action('wp_ajax_pickuppt_update_trans', 'pickuppt_wp_ajax_pickuppt_update_trans_cb');
function pickuppt_wp_ajax_pickuppt_submit_public_appointment_cb() {
if ( ! isset($_POST['nonce']) || ! wp_verify_nonce( sanitize_text_field(wp_unslash($_POST['nonce'])), 'pu_submit_public_appointment' ) ) {
wp_send_json( array(
'msg' => __('Security check failed.', 'pickuppointment'),
'status' => 'danger',
)
);
}
// phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
parse_str(wp_unslash($_POST['formData'] ?? ''), $formData);
$sanitized_form_data = pickuppt_sanitize_array($formData);
// get email
$pickuppt_email = $sanitized_form_data['pickuppt_email'] ?? '';
// timeslot checker
$pickuppt_date = $sanitized_form_data['pickuppt_date'] ?? '';
$pickuppt_time = $sanitized_form_data['pickuppt_time'] ?? '';
$time_slot_interval = pickuppt_time_slot_interval();
$disabled_dates = pickuppt_get_disable_time_ranges($pickuppt_date, $time_slot_interval, true);
if( in_array( $pickuppt_time, $disabled_dates ) ) {
wp_send_json( array(
'msg' => __('This appointment time has reached its maximum capacity.', 'pickuppointment'),
'status' => 'danger',
)
);
wp_die();
}
// prepare post args
$post_title = apply_filters('pickuppt_generate_public_post_appt_title', pickuppt_generate_title(), $sanitized_form_data);
$post_status = apply_filters('pickuppt_generate_public_post_appt_status', 'publish', $sanitized_form_data);
$args = array(
'post_title' => $post_title,
'post_status' => $post_status,
'post_type' => PICKUPPOINTMENT_POST_TYPE,
);
// create new post
$appt_id = wp_insert_post($args);
if(is_wp_error($appt_id)) {
wp_send_json( array(
'msg' => __('An error occurred. Please try again.', 'pickuppointment'),
'status' => 'danger',
)
);
}
$old_status = get_post_meta($appt_id, 'pickuppt_status', true);
// save post meta
foreach($sanitized_form_data as $meta_key => $meta_value) {
if(is_array($meta_value)) {
$meta_value = maybe_serialize($meta_value);
}
update_post_meta($appt_id, $meta_key, $meta_value);
}
// assign the appointment if user email exists on the system
if($pickuppt_email) {
$user_data = get_user_by('email', $pickuppt_email);
if($user_data && is_object($user_data)) {
update_post_meta($appt_id, 'pickuppt_appt_owner', $user_data->ID);
}
// send email to appointment setter
pickuppt_send_appt_emails($appt_id);
}
// save history
$pickuppt_default_status = apply_filters('pickuppt_generate_public_appt_status', pickuppt_default_status(), $sanitized_form_data);
update_post_meta($appt_id, 'pickuppt_status', $pickuppt_default_status);
pickuppt_save_history($appt_id, $old_status, $pickuppt_default_status);
do_action('pickuppt_after_save_public_appt', $appt_id, $sanitized_form_data, $pickuppt_default_status);
wp_send_json( array(
/* translators: %s: Appointment title. */
'msg' => sprintf(__('Appointment %s has been submitted!', 'pickuppointment'), $post_title),
'status' => 'success',
)
);
wp_die();
}
add_action('wp_ajax_pickuppt_submit_public_appointment', 'pickuppt_wp_ajax_pickuppt_submit_public_appointment_cb');
add_action('wp_ajax_nopriv_pickuppt_submit_public_appointment', 'pickuppt_wp_ajax_pickuppt_submit_public_appointment_cb');
function pickuppt_wp_ajax_pickuppt_get_current_month_year_appts_cb() {
check_ajax_referer('pickupptGetCurrentMonthYearApptsNonce', 'nonce');
$month = sanitize_text_field(wp_unslash($_POST['month'] ?? ''));
$year = sanitize_text_field(wp_unslash($_POST['year'] ?? ''));
$pickuppt_all_appointments = pickuppt_all_appointments(true, $month, $year);
wp_send_json( $pickuppt_all_appointments );
wp_die();
}
add_action('wp_ajax_pickuppt_get_current_month_year_appts', 'pickuppt_wp_ajax_pickuppt_get_current_month_year_appts_cb');
function pickuppt_wp_ajax_pickuppt_dynamic_time_slot_cb() {
check_ajax_referer('pickupptDynamicTimeslotNonce', 'nonce');
$date = sanitize_text_field(wp_unslash($_POST['date'] ?? ''));
$time_slot_interval = pickuppt_time_slot_interval();
wp_send_json(pickuppt_get_disable_time_ranges($date, $time_slot_interval));
wp_die();
}
add_action('wp_ajax_pickuppt_dynamic_time_slot', 'pickuppt_wp_ajax_pickuppt_dynamic_time_slot_cb');
add_action('wp_ajax_nopriv_pickuppt_dynamic_time_slot', 'pickuppt_wp_ajax_pickuppt_dynamic_time_slot_cb');
function pickuppt_wp_ajax_pickuppt_assign_appointments_to_driver_cb() {
check_ajax_referer('pickupptAssignAppointmentsToDriverNonce', 'nonce');
$driverId = sanitize_text_field(wp_unslash(( $_POST['driverId'] ?? '' ) ?: ''));
// phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
$_selectedItems = wp_unslash(( $_POST['selectedItems'] ?? array() ) ?: array());
$selectedItems = pickuppt_sanitize_array( $_selectedItems );
if( is_array( $selectedItems ) && count( $selectedItems ) > 0 ) {
$pufd_get_driver_assigned_status = pickuppt_get_general_setting( 'driver_assigned_status' ) ?: 'Driver Assigned';
foreach( $selectedItems as $appt_id ) {
$old_status = get_post_meta($appt_id, 'pickuppt_status', true);
$old_assigned_driver = get_post_meta($appt_id, 'pickuppt_assigned_driver', true);
update_post_meta( $appt_id, 'pickuppt_assigned_driver', $driverId );
if( $driverId ) {
$first_email_sent = false;
$is_updated = pickuppt_save_history($appt_id, $old_status, $pufd_get_driver_assigned_status, '', 'appointment assigned to driver');
if($is_updated) {
$first_email_sent = pickuppt_send_appt_email($appt_id);
}
// send email to newly assigned driver
if( $old_assigned_driver != $driverId && $first_email_sent ) {
pickuppt_send_assigned_driver_email( $appt_id );
}
do_action( 'pickuppt_after_assign_appt', $appt_id );
}
}
}
wp_send_json_success( __('Selected booking(s) have been assigned to driver.', 'pickuppointment') );
wp_die();
}
add_action( 'wp_ajax_pickuppt_assign_appointments_to_driver', 'pickuppt_wp_ajax_pickuppt_assign_appointments_to_driver_cb' );
// send payment link
function pickuppt_wp_ajax_pickuppt_send_payment_link_cb() {
check_ajax_referer('pickupptSendPaymentLinkNonce', 'nonce');
$apptId = sanitize_text_field(wp_unslash(( $_POST['apptId'] ?? '' ) ?: ''));
if( empty( $apptId ) ) {
wp_send_json_error( __('Cannot perform the action. Missing appointment ID.', 'pickuppointment') );
}
$payment_link = pickuppt_get_general_setting( 'payment_link' ) ?: '';
$qr_code_link = pickuppt_get_general_setting( 'qr_code_link' ) ?: '';
if( empty( $payment_link ) && empty( $qr_code_link ) ) {
wp_send_json_error( pickuppt_unconfigured_payment_settings_label() );
}
$old_status = get_post_meta( $apptId, 'pickuppt_status', true );
$new_status = pickuppt_get_general_setting( 'pending_payment_status' ) ?: '';
$is_email_sent = pickuppt_send_payment_link_email( $apptId );
if( $is_email_sent ) {
$is_updated = pickuppt_save_history( $apptId, $old_status, $new_status, '', 'payment link sent to customer' );
if($is_updated) {
pickuppt_send_appt_email( $apptId );
}
}
do_action('pickuppt_after_payment_link_sent', $apptId, $old_status, $new_status);
wp_send_json_success( pickuppt_payment_link_sent_label() );
wp_die();
}
add_action( 'wp_ajax_pickuppt_send_payment_link', 'pickuppt_wp_ajax_pickuppt_send_payment_link_cb' );
// save order charges
function pickuppt_wp_ajax_pickuppt_save_order_charges_cb() {
check_ajax_referer('pickupptSaveOrderChargesNonce', 'nonce');
// phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
parse_str( wp_unslash($_POST['formData'] ?? ''), $formData );
$sanitized_form_data = pickuppt_sanitize_array($formData);
$pickuppt_order_charges = ( $sanitized_form_data['pickuppt_order_charges'] ?? array() ) ?: array();
$appointment_id = sanitize_text_field(( $sanitized_form_data['appointment_id'] ?? '' ) ?: '');
if( empty( $pickuppt_order_charges ) ) {
wp_send_json_error( __( 'Charges are empty. Please add charges.', 'pickuppointment' ) );
}
if( empty( $appointment_id ) ) {
wp_send_json_error( __( 'Form has been modified. Please reload the page and try again.', 'pickuppointment' ) );
}
update_post_meta( $appointment_id, 'pickuppt_order_charges', $pickuppt_order_charges );
wp_send_json_success( __( 'Charges saved!', 'pickuppointment' ) );
wp_die();
}
add_action( 'wp_ajax_pickuppt_save_order_charges', 'pickuppt_wp_ajax_pickuppt_save_order_charges_cb' );
// get charges info
function pickuppt_wp_ajax_pickuppt_get_order_charges_cb() {
check_ajax_referer('pickupptGetOrderChargesNonce', 'nonce');
$apptId = sanitize_text_field(wp_unslash(( $_POST['apptId'] ?? '' ) ?: ''));
if( empty( $apptId ) ) {
?>