utils->is_step_post_type( $screen->post_type ) ) { wp_enqueue_style( 'woocommerce_admin_styles' ); wp_enqueue_script( 'select2' ); wp_enqueue_script( 'wc-enhanced-select' ); wp_enqueue_script( 'wcf-admin-meta', CARTFLOWS_URL . 'admin/meta-assets/js/admin-edit.js', array( 'jquery', 'select2', 'wp-color-picker' ), CARTFLOWS_VER, true ); wp_enqueue_style( 'wcf-admin-meta', CARTFLOWS_URL . 'admin/meta-assets/css/admin-edit.css', array( 'wp-color-picker' ), CARTFLOWS_VER ); wp_style_add_data( 'wcf-admin-meta', 'rtl', 'replace' ); $localize = array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'google_fonts' => CartFlows_Font_Families::get_google_fonts(), 'system_fonts' => CartFlows_Font_Families::get_system_fonts(), 'font_weights' => array( '100' => __( 'Thin 100', 'cartflows' ), '200' => __( 'Extra-Light 200', 'cartflows' ), '300' => __( 'Light 300', 'cartflows' ), '400' => __( 'Normal 400', 'cartflows' ), '500' => __( 'Medium 500', 'cartflows' ), '600' => __( 'Semi-Bold 600', 'cartflows' ), '700' => __( 'Bold 700', 'cartflows' ), '800' => __( 'Extra-Bold 800', 'cartflows' ), '900' => __( 'Ultra-Bold 900', 'cartflows' ), ) ); wp_localize_script( 'jquery', 'wcf', apply_filters( 'wcf_js_localize', $localize ) ); do_action( 'cartflows_admin_meta_scripts' ); } } /** * Function to search coupons */ public function json_search_coupons() { check_admin_referer( 'wcf-json-search-coupons', 'security' ); global $wpdb; $term = (string) urldecode( sanitize_text_field( wp_unslash( $_GET['term'] ) ) ); // phpcs:ignore if ( empty( $term ) ) { die(); } $posts = wp_cache_get( 'wcf_search_coupons', 'wcf_funnel_Cart' ); if ( false === $posts ) { $posts = $wpdb->get_results( // phpcs:ignore $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}posts WHERE post_type = %s AND post_title LIKE %s AND post_status = %s", 'shop_coupon', $wpdb->esc_like( $term ) . '%', 'publish' ) ); wp_cache_set( 'wcf_search_coupons', $posts, 'wcf_funnel_Cart' ); } $coupons_found = array(); $all_discount_types = wc_get_coupon_types(); if ( $posts ) { foreach ( $posts as $post ) { $discount_type = get_post_meta( $post->ID, 'discount_type', true ); if ( ! empty( $all_discount_types[ $discount_type ] ) ) { $coupons_found[ get_the_title( $post->ID ) ] = get_the_title( $post->ID ) . ' (Type: ' . $all_discount_types[ $discount_type ] . ')'; } } } wp_send_json( $coupons_found ); } /** * [add_checkout_custom_field description] * * @hook wcf_add_checkout_custom_field */ public function add_checkout_custom_field() { check_ajax_referer( 'wcf-add-checkout-custom-field', 'security' ); $post_id = intval( $_POST['post_id'] ); $add_to = sanitize_text_field( wp_unslash( $_POST['add_to'] ) ); $type = sanitize_text_field( wp_unslash( $_POST['type'] ) ); $options = sanitize_text_field( wp_unslash( $_POST['options'] ) ); $label = sanitize_text_field( wp_unslash( $_POST['label'] ) ); $name = sanitize_text_field( wp_unslash( $_POST['name'] ) ); if ( '' !== $name ) { $fields = Cartflows_Helper::get_checkout_fields( $add_to, $post_id ); $field_keys = array_keys($fields); $name = $add_to . '_' . sanitize_key( $name ); if( in_array($name, $field_keys) ) { $name = $name . '_' . rand( 0000, 9999 ); } $field_data = array( 'type' => $type, 'label' => $label, 'placeholder' => '', 'class' => array( 'form-row-wide' ), 'label_class' => array(), 'required' => true, 'custom' => true, ); if ( 'select' === $type ) { $options = explode( ',', $options ); $field_data['options'] = array(); if ( is_array( $options ) && ! empty( $options ) ) { foreach ( $options as $key => $value ) { $field_data['options'][ $value ] = $value; } } } Cartflows_Helper::add_checkout_field( $add_to, $name, $field_data, $post_id ); $key = sanitize_key( $name ); $name = 'wcf-' . $key; $field_args = array( 'label' => $label, 'name' => $name, 'value' => 'yes', 'after' => 'Enable', ); $field_args['after_html'] = ' | '; $field_args['after_html'] .= '' . __( 'Remove', 'cartflows' ) . ''; $field_args['after_html'] .= ''; $field_markup = wcf()->meta->get_checkbox_field( $field_args ); if( 'billing' === $add_to ) { $add_to_class = 'wcf-cb-fields'; } else if( 'shipping' === $add_to ) { $add_to_class = 'wcf-sb-fields'; } $data = array( 'field_data' => $field_data, 'field_args' => $field_args, 'add_to_class' => $add_to_class, 'markup' => $field_markup, ); wp_send_json( $data ); } wp_send_json( false ); } /** * [delete_checkout_custom_field description] * * @hook wcf_delete_checkout_custom_field * @return [type] [description] */ public function delete_checkout_custom_field() { check_ajax_referer( 'wcf-delete-checkout-custom-field', 'security' ); $post_id = intval( $_POST['post_id'] ); $type = sanitize_text_field( wp_unslash( $_POST['type'] ) ); $key = sanitize_text_field( wp_unslash( $_POST['key'] ) ); if ( '' !== $key ) { Cartflows_Helper::delete_checkout_field( $type, $key, $post_id ); wp_send_json( true ); } wp_send_json( false ); } /** * Function to search coupons */ public function json_search_pages() { check_ajax_referer( 'wcf-json-search-pages', 'security' ); $term = (string) urldecode( sanitize_text_field( wp_unslash( $_GET['term'] ) ) ); // phpcs:ignore if ( empty( $term ) ) { die( 'not found' ); } $search_string = $term; $data = array(); $result = array(); add_filter( 'posts_search', array( $this, 'search_only_titles' ), 10, 2 ); $query = new WP_Query( array( 's' => $search_string, 'post_type' => 'page', 'posts_per_page' => - 1, ) ); if ( $query->have_posts() ) { while ( $query->have_posts() ) { $query->the_post(); $title = get_the_title(); $title .= ( 0 != $query->post->post_parent ) ? ' (' . get_the_title( $query->post->post_parent ) . ')' : ''; $id = get_the_id(); $data[] = array( 'id' => $id, 'text' => $title, ); } } if ( is_array( $data ) && ! empty( $data ) ) { $result[] = array( 'text' => '', 'children' => $data, ); } wp_reset_postdata(); // return the result in json. wp_send_json( $result ); } public function search_only_titles( $search, $wp_query ) { if ( ! empty( $search ) && ! empty( $wp_query->query_vars['search_terms'] ) ) { global $wpdb; $q = $wp_query->query_vars; $n = ! empty( $q['exact'] ) ? '' : '%'; $search = array(); foreach ( (array) $q['search_terms'] as $term ) { $search[] = $wpdb->prepare( "$wpdb->posts.post_title LIKE %s", $n . $wpdb->esc_like( $term ) . $n ); } if ( ! is_user_logged_in() ) { $search[] = "$wpdb->posts.post_password = ''"; } $search = ' AND ' . implode( ' AND ', $search ); } return $search; } function get_field( $field_data, $field_content ) { $label = isset( $field_data['label'] ) ? $field_data['label'] : ''; $help = isset( $field_data['help'] ) ? $field_data['help'] : ''; $after_html = isset( $field_data['after_html'] ) ? $field_data['after_html'] : ''; $name_class = 'field-' . $field_data['name']; $field_html = '
'; if( ! empty( $label ) || ! empty( $help ) ) { $field_html .= '
'; if( ! empty( $label ) ) { $field_html .= ''; } if ( ! empty( $help ) ) { $field_html .= ''; // $field_html .= ''; $field_html .= ''; $field_html .= ''; $field_html .= $help; $field_html .= ''; } $field_html .= '
'; } $field_html .= '
'; $field_html .= $field_content; if ( ! empty( $after_html ) ) { $field_html .= $after_html; } $field_html .= '
'; $field_html .= '
'; return $field_html; } function get_text_field( $field_data ) { $value = $field_data['value']; $attr = ''; if ( isset( $field_data['attr'] ) && is_array( $field_data['attr'] ) ) { foreach ( $field_data['attr'] as $attr_key => $attr_value ) { $attr .= ' ' . $attr_key . '="' . $attr_value . '"'; } } $field_content = ''; return $this->get_field( $field_data, $field_content ); } function get_shortcode_field( $field_data ) { $attr = ''; $attr_fields = array( 'readonly' => 'readonly', 'onfocus' => 'this.select()', 'onmouseup' => 'return false', ); if ( $attr_fields && is_array( $attr_fields ) ) { foreach ( $attr_fields as $attr_key => $attr_value ) { $attr .= ' ' . $attr_key . '="' . $attr_value . '"'; } } $field_content = ''; return $this->get_field( $field_data, $field_content ); } function get_display_field( $field_data ) { $field_content = $field_data['content']; return $this->get_field( $field_data, $field_content ); } function get_hr_line_field( $field_data ) { $field_data = array( 'name' => 'wcf-hr-line', 'content' => '
' ); $field_content = $field_data['content']; return $this->get_field( $field_data, $field_content ); } function get_number_field( $field_data ) { $value = $field_data['value']; $attr = ''; if ( isset( $field_data['attr'] ) && is_array( $field_data['attr'] ) ) { foreach ( $field_data['attr'] as $attr_key => $attr_value ) { $attr .= ' ' . $attr_key . '="' . $attr_value . '"'; } } $field_content = ''; return $this->get_field( $field_data, $field_content ); } function get_hidden_field( $field_data ) { $value = $field_data['value']; $attr = ''; if ( isset( $field_data['attr'] ) && is_array( $field_data['attr'] ) ) { foreach ( $field_data['attr'] as $attr_key => $attr_value ) { $attr .= ' ' . $attr_key . '="' . $attr_value . '"'; } } $field_content = ''; return $this->get_field( $field_data, $field_content ); } function get_area_field( $field_data ) { $value = $field_data['value']; $field_content = ''; return $this->get_field( $field_data, $field_content ); } function get_checkbox_field( $field_data ) { $value = $field_data['value']; $field_content = ''; if ( isset( $field_data['before'] ) ) { $field_content .= '' . $field_data['before'] . ''; } $field_content .= ''; $field_content .= ''; if ( isset( $field_data['after'] ) ) { $field_content .= '' . $field_data['after'] . ''; } return $this->get_field( $field_data, $field_content ); } function get_radio_field( $field_data ) { $value = $field_data['value']; $field_content = ''; if ( is_array( $field_data['options'] ) && ! empty( $field_data['options'] ) ) { foreach ( $field_data['options'] as $data_key => $data_value ) { $field_content .= '
'; $field_content .= ''; $field_content .= $data_value; $field_content .= '
'; } } return $this->get_field( $field_data, $field_content ); } function get_font_family_field( $field_data ) { $value = $field_data['value']; $pro_options = isset( $field_data['pro-options'] ) ? $field_data['pro-options'] : array(); $field_content = ''; return $this->get_field( $field_data, $field_content ); } function get_font_weight_field( $field_data ) { $value = $field_data['value']; $pro_options = isset( $field_data['pro-options'] ) ? $field_data['pro-options'] : array(); $field_content = ''; return $this->get_field( $field_data, $field_content ); } function get_select_field( $field_data ) { $value = $field_data['value']; $pro_options = isset( $field_data['pro-options'] ) ? $field_data['pro-options'] : array(); $field_content = ''; if ( isset( $field_data['after'] ) ) { $field_content .= '' . $field_data['after'] . ''; } return $this->get_field( $field_data, $field_content ); } function get_color_picker_field( $field_data ) { $value = $field_data['value']; $field_content = ''; return $this->get_field( $field_data, $field_content ); } function get_product_selection_field( $field_data ) { $value = $field_data['value']; $multiple = ''; if ( isset( $field_data['multiple'] ) && $field_data['multiple'] ) { $multiple = ' multiple="multiple"'; } $allow_clear = ''; if ( isset( $field_data['allow_clear'] ) && $field_data['allow_clear'] ) { $allow_clear = ' data-allow_clear="allow_clear"'; } $field_content = ''; return $this->get_field( $field_data, $field_content ); } function get_coupon_selection_field( $field_data ) { $value = $field_data['value']; $multiple = ''; if ( isset( $field_data['multiple'] ) && $field_data['multiple'] ) { $multiple = ' multiple="multiple"'; } $allow_clear = ''; if ( isset( $field_data['allow_clear'] ) && $field_data['allow_clear'] ) { $allow_clear = ' data-allow_clear="allow_clear"'; } $field_content = ''; return $this->get_field( $field_data, $field_content ); } function get_page_selection_field( $field_data ) { $value = $field_data['value']; $multiple = ''; if ( isset( $field_data['multiple'] ) && $field_data['multiple'] ) { $multiple = 'multiple="multiple"'; } $field_content = ''; return $this->get_field( $field_data, $field_content ); } function get_section( $field_data ) { $field_html = '
'; $field_html .= '
'; $field_html .= ''; if ( isset( $field_data['help'] ) ) { $field_html .= ''; } $field_html .= '
'; $field_html .= '
'; return $field_html; } function get_description_field( $field_data ) { $field_html = '
'; $field_html .= '
'; $field_html .= $field_data['content']; $field_html .= '
'; $field_html .= '
'; return $field_html; } function get_checkout_field_repeater( $field_data ) { $value = array(); $value[0] = array( 'add_to' => '', 'type' => '', 'label' => '', 'name' => '', ); $field_content = ''; $field_content .= '
'; // $field_content .= '
'; // $field_content .= ''; // $field_content .= '
'; $field_content .= '
'; $field_content .= '
'; foreach ( $value as $p_key => $p_data ) { $field_content .= '
'; $field_content .= '
'; $field_content .= 'Add New Custom Field'; $field_content .= '
'; $field_content .= '
'; /* Add To */ $field_content .= '
'; $field_content .= 'Add to'; $field_content .= ''; $field_content .= ''; $field_content .= ''; $field_content .= '
'; /* Type */ $field_content .= '
'; $field_content .= 'Type'; $field_content .= ''; $field_content .= ''; $field_content .= ''; $field_content .= '
'; /* Textarea */ $field_content .= '
'; $field_content .= 'Options *'; $field_content .= ''; $field_content .= ''; $field_content .= ''; $field_content .= '
'; /* Label */ $field_content .= '
'; $field_content .= 'Label *'; $field_content .= ''; $field_content .= ''; $field_content .= ''; $field_content .= '
'; /* Name */ $field_content .= '
'; $field_content .= 'Name *'; $field_content .= ''; $field_content .= ''; $field_content .= ''; $field_content .= '
'; $field_content .= '
'; $field_content .= '
'; } /* Add New Custom Field */ $field_content .= '
'; $field_content .= '
'; $field_content .= ''; $field_content .= '
'; $field_content .= '
'; /* End Add new custom field */ $field_content .= '
'; $field_content .= '
'; $field_content .= '
'; return $field_content; } function get_product_selection_repeater( $field_data ) { $value = $field_data['value']; if ( ! is_array( $value ) ) { $value[0] = array( 'product' => '', ); } else { if ( ! isset( $value[0] ) ) { $value[0] = array( 'product' => '', ); } } $field_html = ''; $field_html .= ''; $field_html .= '
'; $field_html .= '
'; $field_html .= '
'; if ( is_array( $value ) ) { foreach ( $value as $p_key => $p_data ) { $selected_options = ''; if ( isset( $p_data['product'] ) ) { $product = wc_get_product( $p_data['product'] ); // posts. if ( ! empty( $product ) ) { $post_title = $product->get_name() . ' (#' . $p_data['product'] . ')'; $selected_options = ''; } } $field_html .= $this->generate_product_repeater_html( $p_key, $selected_options ); } } $field_html .= '
'; $field_html .= '
'; $field_html .= ''; $field_html .= '
'; $field_html .= '
'; $field_html .= '
'; $field_html .= '
'; $field_html .= '
'; $field_html .= '
'; /*$field_html .= '

The selected products will be automatically added in the cart for this checkout.

';*/ $field_html .= '
'; return $field_html; } function generate_product_repeater_html( $id, $options = '' ) { $field_html = '
'; $field_html .= '
'; /* Product Name */ $field_html .= '
'; $field_html .= ''; $field_html .= ''; $field_html .= ''; $field_html .= ''; $field_html .= ''; $field_html .= ''; $field_html .= ''. __( 'Remove', 'cartflows' ).''; $field_html .= ''; $field_html .= ''; $field_html .= '
'; $field_html .= '
'; $field_html .= '
'; return $field_html; } function get_image_field( $field_data ) { $value = $field_data['value']; $attr = ''; if ( isset( $field_data['attr'] ) && is_array( $field_data['attr'] ) ) { foreach ( $field_data['attr'] as $attr_key => $attr_value ) { $attr .= ' ' . $attr_key . '="' . $attr_value . '"'; } } $display_preview_box = ( isset( $value ) && '' != $value ) ? 'display:block;' : 'display:none'; $field_content = '
'; if( isset( $value ) ){ $field_content .= ''; } $field_content .= '
'; // $field_content .= ''; $field_content .= ''; $field_content .= ''; $display_remove_button = ( isset( $value ) && '' != $value ) ? 'display:inline-block; margin-left: 5px;' : 'display:none'; $field_content .= ''; return $this->get_field( $field_data, $field_content ); } /** * Localize variables in admin * * @param array $vars variables. */ function localize_vars( $vars ) { $ajax_actions = array( 'wcf_add_checkout_custom_field', 'wcf_delete_checkout_custom_field', 'wcf_json_search_pages', 'wcf_json_search_coupons' ); foreach ( $ajax_actions as $action ) { $vars[ $action . '_nonce' ] = wp_create_nonce( str_replace( '_', '-', $action ) ); } return $vars; } } // @codingStandardsIgnoreEnd