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 ) ) { ?>