Done !
Server IP : 162.0.217.223 / Your IP : 216.73.216.168 Web Server : LiteSpeed System : Linux premium269.web-hosting.com 4.18.0-553.lve.el8.x86_64 #1 SMP Mon May 27 15:27:34 UTC 2024 x86_64 User : mypckeys ( 1539) PHP Version : 8.1.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/mypckeys/www/wp-content/plugins/supportcandy/includes/admin/custom-fields/ |
Upload File : |
<?php if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly! } if ( ! class_exists( 'WPSC_TFF' ) ) : final class WPSC_TFF { /** * Ticket form fields * * @var array */ private static $tff = array(); /** * Initialize this class */ public static function init() { // List. add_action( 'wp_ajax_wpsc_get_tff', array( __CLASS__, 'get_tff' ) ); // Add new. add_action( 'wp_ajax_wpsc_get_add_new_tff', array( __CLASS__, 'get_add_new_tff' ) ); add_action( 'wp_ajax_wpsc_set_add_new_tff', array( __CLASS__, 'set_add_new_tff' ) ); // Edit. add_action( 'wp_ajax_wpsc_get_edit_tff', array( __CLASS__, 'get_edit_tff' ) ); add_action( 'wp_ajax_wpsc_set_edit_tff', array( __CLASS__, 'set_edit_tff' ) ); // Delete. add_action( 'wp_ajax_wpsc_delete_tff', array( __CLASS__, 'delete_tff' ) ); // Remove if custom field deleted. add_action( 'wpsc_delete_custom_field', array( __CLASS__, 'delete_custom_field' ), 10, 1 ); // visibility conditions filter. add_filter( 'wpsc_visibility_conditions', array( __CLASS__, 'visibility_conditions' ) ); } /** * Get ticket form fields * * @return void */ public static function get_tff() { if ( ! WPSC_Functions::is_site_admin() ) { wp_send_json_error( __( 'Unauthorized access!', 'supportcandy' ), 401 ); } $tff = get_option( 'wpsc-tff', array() ); ?> <div class="wpsc-setting-header"> <h2><?php esc_attr_e( 'Ticket Form Fields', 'supportcandy' ); ?></h2> </div> <div class="wpsc-setting-section-body"> <div class="wpsc-dock-container"> <?php printf( /* translators: Click here to see the documentation */ esc_attr__( '%s to see the documentation!', 'supportcandy' ), '<a href="https://supportcandy.net/docs/ticket-form-fields/" target="_blank">' . esc_attr__( 'Click here', 'supportcandy' ) . '</a>' ); ?> </div> <table class="form-fields wpsc-setting-tbl"> <thead> <tr> <th><?php esc_attr_e( 'Field', 'supportcandy' ); ?></th> <th><?php esc_attr_e( 'Actions', 'supportcandy' ); ?></th> </tr> </thead> <tbody> <?php foreach ( $tff as $slug => $settings ) : $cf = WPSC_Custom_Field::get_cf_by_slug( $slug ); if ( ! $cf ) { continue; } ?> <tr> <td><?php echo esc_attr( $cf->name ); ?></td> <td> <a href="javascript:wpsc_get_edit_tff(<?php echo esc_attr( $cf->id ); ?>, '<?php echo esc_attr( wp_create_nonce( 'wpsc_get_edit_tff' ) ); ?>');" class="wpsc-link"><?php esc_attr_e( 'Edit', 'supportcandy' ); ?></a> <?php if ( ! ( $cf->slug == 'name' || $cf->slug == 'email' ) ) : echo esc_attr( ' | ' ); ?> <a href="javascript:wpsc_delete_tff(<?php echo esc_attr( $cf->id ); ?>, '<?php echo esc_attr( wp_create_nonce( 'wpsc_delete_tff' ) ); ?>');" class="wpsc-link"><?php esc_attr_e( 'Delete', 'supportcandy' ); ?></a> <?php endif; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> </div> <script> jQuery('table.form-fields').DataTable({ ordering: false, pageLength: 20, bLengthChange: false, columnDefs: [ { targets: -1, searchable: false }, { targets: '_all', className: 'dt-left' } ], dom: 'Bfrtip', buttons: [ { text: '<?php esc_attr_e( 'Add new', 'supportcandy' ); ?>', className: 'wpsc-button small primary', action: function ( e, dt, node, config ) { wpsc_show_modal(); var data = { action: 'wpsc_get_add_new_tff' }; jQuery.post( supportcandy.ajax_url, data, function (response) { jQuery( '.wpsc-modal-header' ).text( response.title ); jQuery( '.wpsc-modal-body' ).html( response.body ); jQuery( '.wpsc-modal-footer' ).html( response.footer ); wpsc_show_modal_inner_container(); } ); } } ], language: supportcandy.translations.datatables }); </script> <?php wp_die(); } /** * Add new ticket form field modal popup UI * * @return void */ public static function get_add_new_tff() { if ( ! WPSC_Functions::is_site_admin() ) { wp_send_json_error( __( 'Unauthorized access!', 'supportcandy' ), 401 ); } $title = esc_attr__( 'Add new field', 'supportcandy' ); $custom_fields = WPSC_Custom_Field::$custom_fields; $tff = get_option( 'wpsc-tff', array() ); $unique_id = uniqid( 'wpsc_' ); ob_start(); ?> <form action="#" onsubmit="return false;" class="frm-add-new-ticket-form-field"> <div class="wpsc-input-group"> <div class="label-container"> <label for=""> <?php esc_attr_e( 'Select field', 'supportcandy' ); ?> <span class="required-char">*</span> </label> </div> <select id="wpsc-select-ticket-form-field" name="id" onchange="<?php echo esc_attr( $unique_id ); ?>(this)"> <option value=""></option> <?php foreach ( $custom_fields as $cf ) { if ( class_exists( $cf->type ) && in_array( $cf->field, WPSC_CF_Settings::$allowed_modules['ticket-form'] ) && $cf->type::$is_ctf && ! isset( $tff[ $cf->slug ] ) ) { if ( $cf->field == 'customer' && ! $cf->allow_ticket_form ) { continue; } ?> <option class="field_<?php echo esc_attr( $cf->id ); ?>" data-fieldtype="<?php echo esc_attr( $cf->type ); ?>" data-slug="<?php echo esc_attr( $cf->slug ); ?>" value="<?php echo esc_attr( $cf->id ); ?>"><?php echo esc_attr( $cf->name ); ?></option> <?php } } ?> </select> <script> jQuery('#wpsc-select-ticket-form-field').selectWoo({ allowClear: true, placeholder: "" }); function <?php echo esc_attr( $unique_id ); ?>(el) { var id = jQuery(el).val(); var option = jQuery('option.field_'+id); var slug = option.data('slug'); <?php do_action( 'wpsc_jse_add_tff_change_field', $unique_id ); ?> } jQuery(document).ready(function() { jQuery('#wpsc-select-ticket-form-field').change(function() { var slug = jQuery('option:selected', this).data('fieldtype'); if(slug =='WPSC_CF_HTML'){ jQuery('#wpsc-create-ticket-required').hide(); } }); }); </script> </div> <div class="wpsc-input-group" id="wpsc-create-ticket-required"> <div class="label-container"> <label for=""><?php esc_attr_e( 'Is required?', 'supportcandy' ); ?></label> </div> <select name="is-required"> <option value="1"><?php esc_attr_e( 'Yes', 'supportcandy' ); ?></option> <option value="0"><?php esc_attr_e( 'No', 'supportcandy' ); ?></option> </select> </div> <div class="wpsc-input-group"> <div class="label-container"> <label for=""><?php esc_attr_e( 'Width', 'supportcandy' ); ?></label> </div> <select id="wpsc-select-ticket-form-field-width" name="width"> <option value="1/3"><?php esc_attr_e( '1/3rd of row', 'supportcandy' ); ?></option> <option value="half"><?php esc_attr_e( 'Half-width of row', 'supportcandy' ); ?></option> <option value="full"><?php esc_attr_e( 'Full-width of row', 'supportcandy' ); ?></option> </select> </div> <div class="wpsc-input-group"> <div class="label-container"> <label for=""><?php esc_attr_e( 'Load after', 'supportcandy' ); ?></label> </div> <select name="load-after" class="load-after"> <option value="__TOP__">-- <?php esc_attr_e( 'TOP', 'supportcandy' ); ?> --</option> <?php foreach ( $tff as $slug => $settings ) { $cf = WPSC_Custom_Field::get_cf_by_slug( $slug ); if ( ! $cf ) { continue; } ?> <option value="<?php echo esc_attr( $slug ); ?>"><?php echo esc_attr( $cf->name ); ?></option> <?php } ?> <option value="__END__" selected>-- <?php esc_attr_e( 'END', 'supportcandy' ); ?> --</option> </select> <script>jQuery('select.load-after').selectWoo();</script> </div> <?php do_action( 'wpsc_get_add_new_tff', $unique_id ); ?> <?php WPSC_Ticket_Conditions::print( 'visibility', 'wpsc_visibility_conditions', '', false, __( 'Visibility conditions', 'supportcandy' ) ); ?> <input type="hidden" name="action" value="wpsc_set_add_new_tff"> <input type="hidden" name="_ajax_nonce" value="<?php echo esc_attr( wp_create_nonce( 'wpsc_set_add_new_tff' ) ); ?>"> </form> <?php $body = ob_get_clean(); ob_start(); ?> <button class="wpsc-button small primary" onclick="wpsc_set_add_new_tff(this);"> <?php esc_attr_e( 'Submit', 'supportcandy' ); ?> </button> <button class="wpsc-button small secondary" onclick="wpsc_close_modal();"> <?php esc_attr_e( 'Cancel', 'supportcandy' ); ?> </button> <?php $footer = ob_get_clean(); $response = array( 'title' => $title, 'body' => $body, 'footer' => $footer, ); wp_send_json( $response ); } /** * Insert form field * * @return void */ public static function set_add_new_tff() { if ( check_ajax_referer( 'wpsc_set_add_new_tff', '_ajax_nonce', false ) != 1 ) { wp_send_json_error( 'Unauthorised request!', 401 ); } if ( ! WPSC_Functions::is_site_admin() ) { wp_send_json_error( __( 'Unauthorized access!', 'supportcandy' ), 401 ); } $id = isset( $_POST['id'] ) ? intval( $_POST['id'] ) : 0; if ( ! $id ) { wp_send_json_error( __( 'Bad request!', 'supportcandy' ), 400 ); } $tff = get_option( 'wpsc-tff', array() ); $cf = new WPSC_Custom_Field( $id ); if ( ! $cf->id || ! $cf->type::$is_ctf || ! in_array( $cf->field, WPSC_CF_Settings::$allowed_modules['ticket-form'] ) || isset( $tff[ $cf->slug ] ) ) { wp_send_json_error( __( 'Bad request!', 'supportcandy' ), 400 ); } $is_required = isset( $_POST['is-required'] ) ? intval( $_POST['is-required'] ) : 1; $width = isset( $_POST['width'] ) ? sanitize_text_field( wp_unslash( $_POST['width'] ) ) : 'full'; $load_after = isset( $_POST['load-after'] ) ? sanitize_text_field( wp_unslash( $_POST['load-after'] ) ) : '__END__'; $visibility = isset( $_POST['visibility'] ) ? sanitize_text_field( wp_unslash( $_POST['visibility'] ) ) : ''; if ( ! WPSC_Ticket_Conditions::is_valid_input_conditions( 'wpsc_visibility_conditions', $visibility ) ) { wp_send_json_error( 'Bad request', 400 ); } $field = apply_filters( 'wpsc_tff_add_new', array( 'is-required' => $is_required, 'width' => $width, 'visibility' => $visibility, ), $cf ); switch ( $load_after ) { case '__TOP__': $tff = array_merge( array( $cf->slug => $field ), $tff ); break; case '__END__': $tff = array_merge( $tff, array( $cf->slug => $field ) ); break; default: $load_after = WPSC_Custom_Field::get_cf_by_slug( $load_after ); if ( ! $load_after || ! isset( $tff[ $load_after->slug ] ) ) { wp_send_json_error( __( 'Bad request!', 'supportcandy' ), 400 ); } if ( count( $tff ) == 0 ) { $tff = array_merge( $tff, array( $cf->slug => $field ) ); } else { $offset = array_search( $load_after->slug, array_keys( $tff ) ) + 1; $arr1 = array_slice( $tff, 0, $offset ); $arr2 = array_slice( $tff, $offset ); $tff = array_merge( $arr1, array( $cf->slug => $field ), $arr2 ); } break; } update_option( 'wpsc-tff', $tff ); wp_die(); } /** * Edit ticket form field modal * * @return void */ public static function get_edit_tff() { if ( check_ajax_referer( 'wpsc_get_edit_tff', '_ajax_nonce', false ) != 1 ) { wp_send_json_error( 'Unauthorised request!', 401 ); } if ( ! WPSC_Functions::is_site_admin() ) { wp_send_json_error( __( 'Unauthorized access!', 'supportcandy' ), 401 ); } $id = isset( $_POST['id'] ) ? intval( $_POST['id'] ) : 0; if ( ! $id ) { wp_send_json_error( __( 'Bad request!', 'supportcandy' ), 400 ); } $tff = get_option( 'wpsc-tff', array() ); $cf = new WPSC_Custom_Field( $id ); if ( ! $cf->id || ! $cf->type::$is_ctf || ! isset( $tff[ $cf->slug ] ) ) { wp_send_json_error( __( 'Bad request!', 'supportcandy' ), 400 ); } $field = $tff[ $cf->slug ]; $title = $cf->name; $unique_id = uniqid( 'wpsc_' ); // calculate load order. $tff_keys = array_keys( $tff ); $offset = array_search( $cf->slug, $tff_keys ); $load_after = $offset == 0 ? '__TOP__' : $tff_keys[ $offset - 1 ]; ob_start(); ?> <form action="#" onsubmit="return false;" class="frm-edit-ticket-form-field"> <?php if ( ! ( $cf->slug == 'name' || $cf->slug == 'email' ) ) : ?> <div class="wpsc-input-group" style="<?php echo esc_attr( $cf->type ) === 'WPSC_CF_HTML' ? 'display:none;' : ''; ?>" > <div class="label-container"> <label for=""><?php esc_attr_e( 'Is required?', 'supportcandy' ); ?></label> </div> <select name="is-required"> <option <?php selected( $field['is-required'], 1 ); ?> value="1"><?php esc_attr_e( 'Yes', 'supportcandy' ); ?></option> <option <?php selected( $field['is-required'], 0 ); ?> value="0"><?php esc_attr_e( 'No', 'supportcandy' ); ?></option> </select> </div> <?php endif; ?> <div class="wpsc-input-group"> <div class="label-container"> <label for=""><?php esc_attr_e( 'Width', 'supportcandy' ); ?></label> </div> <select id="wpsc-select-ticket-form-field-width" name="width"> <option <?php selected( $field['width'], '1/3' ); ?> value="1/3"><?php esc_attr_e( '1/3rd of row', 'supportcandy' ); ?></option> <option <?php selected( $field['width'], 'half' ); ?> value="half"><?php esc_attr_e( 'Half-width of row', 'supportcandy' ); ?></option> <option <?php selected( $field['width'], 'full' ); ?> value="full"><?php esc_attr_e( 'Full-width of row', 'supportcandy' ); ?></option> </select> </div> <div class="wpsc-input-group"> <div class="label-container"> <label for=""><?php esc_attr_e( 'Load after', 'supportcandy' ); ?></label> </div> <select name="load-after" class="load-after"> <option <?php selected( $load_after, '__TOP__', true ); ?> value="__TOP__">-- <?php esc_attr_e( 'TOP', 'supportcandy' ); ?> --</option> <?php foreach ( $tff as $slug => $settings ) { $cff = WPSC_Custom_Field::get_cf_by_slug( $slug ); if ( ! $cff || $cff == $cf ) { continue; } ?> <option <?php selected( $load_after, $cff->slug, true ); ?> value="<?php echo esc_attr( $slug ); ?>"><?php echo esc_attr( $cff->name ); ?></option> <?php } ?> <option value="__END__">-- <?php esc_attr_e( 'END', 'supportcandy' ); ?> --</option> </select> <script>jQuery('select.load-after').selectWoo();</script> </div> <?php do_action( 'wpsc_get_edit_tff', $field, $cf ); if ( ! ( $cf->slug == 'name' || $cf->slug == 'email' ) ) { WPSC_Ticket_Conditions::print( 'visibility', 'wpsc_visibility_conditions', $field['visibility'], false, __( 'Visibility conditions', 'supportcandy' ) ); } ?> <input type="hidden" name="id" value="<?php echo esc_attr( $cf->id ); ?>"> <input type="hidden" name="action" value="wpsc_set_edit_tff"> <input type="hidden" name="_ajax_nonce" value="<?php echo esc_attr( wp_create_nonce( 'wpsc_set_edit_tff' ) ); ?>"> </form> <?php $body = ob_get_clean(); ob_start(); ?> <button class="wpsc-button small primary" onclick="wpsc_set_edit_tff(this);"> <?php esc_attr_e( 'Submit', 'supportcandy' ); ?> </button> <button class="wpsc-button small secondary" onclick="wpsc_close_modal();"> <?php esc_attr_e( 'Cancel', 'supportcandy' ); ?> </button> <?php $footer = ob_get_clean(); $response = array( 'title' => $title, 'body' => $body, 'footer' => $footer, ); wp_send_json( $response ); } /** * Set edit data * * @return void */ public static function set_edit_tff() { if ( check_ajax_referer( 'wpsc_set_edit_tff', '_ajax_nonce', false ) != 1 ) { wp_send_json_error( 'Unauthorised request!', 401 ); } if ( ! WPSC_Functions::is_site_admin() ) { wp_send_json_error( __( 'Unauthorized access!', 'supportcandy' ), 401 ); } $id = isset( $_POST['id'] ) ? intval( $_POST['id'] ) : 0; if ( ! $id ) { wp_send_json_error( __( 'Bad request!', 'supportcandy' ), 400 ); } $tff = get_option( 'wpsc-tff', array() ); $cf = new WPSC_Custom_Field( $id ); $load_after = isset( $_POST['load-after'] ) ? sanitize_text_field( wp_unslash( $_POST['load-after'] ) ) : '__END__'; if ( ! $cf->id || ! $cf->type::$is_ctf || ! isset( $tff[ $cf->slug ] ) ) { wp_send_json_error( __( 'Bad request!', 'supportcandy' ), 400 ); } $visibility = isset( $_POST['visibility'] ) ? sanitize_text_field( wp_unslash( $_POST['visibility'] ) ) : ''; if ( ! WPSC_Ticket_Conditions::is_valid_input_conditions( 'wpsc_visibility_conditions', $visibility ) ) { wp_send_json_error( 'Bad request', 400 ); } // unset from tff so that load after should work. unset( $tff[ $cf->slug ] ); $field = apply_filters( 'wpsc_set_edit_tff', array( 'is-required' => isset( $_POST['is-required'] ) ? intval( $_POST['is-required'] ) : 1, 'width' => isset( $_POST['width'] ) ? sanitize_text_field( wp_unslash( $_POST['width'] ) ) : 'full', 'visibility' => $visibility, ), $cf ); // set load after. switch ( $load_after ) { case '__TOP__': $tff = array_merge( array( $cf->slug => $field ), $tff ); break; case '__END__': $tff = array_merge( $tff, array( $cf->slug => $field ) ); break; default: $load_after = WPSC_Custom_Field::get_cf_by_slug( $load_after ); if ( ! $load_after || ! isset( $tff[ $load_after->slug ] ) ) { wp_send_json_error( __( 'Bad request!', 'supportcandy' ), 400 ); } $offset = array_search( $load_after->slug, array_keys( $tff ) ) + 1; $arr1 = array_slice( $tff, 0, $offset ); $arr2 = array_slice( $tff, $offset ); $tff = array_merge( $arr1, array( $cf->slug => $field ), $arr2 ); break; } update_option( 'wpsc-tff', $tff ); wp_die(); } /** * Delete form field * * @return void */ public static function delete_tff() { if ( check_ajax_referer( 'wpsc_delete_tff', '_ajax_nonce', false ) != 1 ) { wp_send_json_error( 'Unauthorised request!', 401 ); } if ( ! WPSC_Functions::is_site_admin() ) { wp_send_json_error( __( 'Unauthorized access!', 'supportcandy' ), 401 ); } $id = isset( $_POST['id'] ) ? intval( $_POST['id'] ) : 0; if ( ! $id ) { wp_send_json_error( 'Unauthorised request!', 401 ); } $tff = get_option( 'wpsc-tff', array() ); $cf = new WPSC_Custom_Field( $id ); if ( ! $cf->id || ! $cf->type::$is_ctf || ! in_array( $cf->field, array( 'customer', 'ticket' ) ) || ! isset( $tff[ $cf->slug ] ) ) { wp_send_json_error( 'Unauthorised request!', 401 ); } unset( $tff[ $cf->slug ] ); update_option( 'wpsc-tff', $tff ); wp_die(); } /** * Return JSON object for tff * * @param WPSC_TFF $tff - ticket form field. * @param boolean $is_array - is array. * @return array */ public static function get_visibility( $tff, $is_array = false ) { $visibility = $tff['visibility'] ? html_entity_decode( $tff['visibility'] ) : ''; if ( $is_array ) { return $visibility ? json_decode( $visibility, true ) : array(); } else { return $visibility ? json_decode( $visibility ) : new stdClass(); } } /** * Remove tff if related custom field got deleted * * @param WPSC_CF $cf - tff custom field. * @return void */ public static function delete_custom_field( $cf ) { $tff = get_option( 'wpsc-tff', array() ); if ( array_key_exists( $cf->slug, $tff ) ) { unset( $tff[ $cf->slug ] ); update_option( 'wpsc-tff', $tff ); } } /** * Filter conditions for visibility * * @param array $conditions - conditions to filter. * @return array */ public static function visibility_conditions( $conditions ) { foreach ( $conditions as $slug => $item ) { if ( $item['type'] == 'cf' ) { $cf = WPSC_Custom_Field::get_cf_by_slug( $slug ); if ( ! $cf->type::$is_visibility_conditions || ! in_array( $cf->field, array( 'ticket', 'customer' ) ) ) { unset( $conditions[ $slug ] ); } } else { // not custom field type. unset( $conditions[ $slug ] ); } } return $conditions; } } endif; WPSC_TFF::init();