Created
May 27, 2020 15:06
-
-
Save paulschreiber/53a2fba050e509577df983daa5824416 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?php | |
| /** | |
| * Plugin Name: Contact Form Entries | |
| * Description: Save form submissions to the database from <a href="https://wordpress.org/plugins/contact-form-7/">Contact Form 7</a>, <a href="https://wordpress.org/plugins/jetpack/">JetPack Contact Form</a>, <a href="https://wordpress.org/plugins/ninja-forms/">Ninja Forms</a>, <a href="https://wordpress.org/plugins/formidable/">Formidable Forms</a>, <a href="http://codecanyon.net/item/quform-wordpress-form-builder/706149">Quform</a>, <a href="https://wordpress.org/plugins/cforms2/">cformsII</a>, <a href="https://wordpress.org/plugins/contact-form-plugin/">Contact Form by BestWebSoft</a>, <a href="https://wordpress.org/plugins/ultimate-form-builder-lite/">Ultimate Form Builder</a>, <a href="https://wordpress.org/plugins/caldera-forms/">Caldera Forms</a> and <a href="https://wordpress.org/plugins/wpforms-lite/">WP Forms</a>. | |
| * Version: 1.1.1 | |
| * Requires at least: 3.8 | |
| * Tested up to: 5.4 | |
| * Author URI: https://www.crmperks.com | |
| * Plugin URI: https://www.crmperks.com/plugins/contact-form-plugins/crm-perks-forms/ | |
| * Author: CRM Perks | |
| */ | |
| // Exit if accessed directly | |
| if ( ! defined( 'ABSPATH' ) ) { | |
| exit; | |
| } | |
| if ( ! class_exists( 'vxcf_form' ) ) : | |
| class vxcf_form { | |
| public $domain = 'vxcf-leads'; | |
| public $fields = null; | |
| public static $id = 'vxcf_leads'; | |
| public static $type = 'vxcf_form'; | |
| public static $path = ''; | |
| public static $version = '1.1.1'; | |
| public static $upload_folder = 'crm_perks_uploads'; | |
| public static $db_version = ''; | |
| public static $base_url = ''; | |
| public static $vx_plugins; | |
| public static $note; | |
| public static $feeds_res; | |
| public static $tooltips; | |
| public static $plugin; | |
| public static $pages; | |
| public static $show_screen_options = false; | |
| public static $sql_join = ''; | |
| public static $sql_where = ''; | |
| public static $sql_field_name = ''; | |
| public static $sql_select_fields = ''; | |
| public static $sql_order_by = ''; | |
| public static $forms; | |
| public static $form_id; | |
| public static $user_id; | |
| public static $is_pr; | |
| public static $form_id_string; | |
| public static $form_fields; | |
| public static $form_fields_temp; | |
| // data object | |
| public static $data = null; | |
| // settings | |
| public static $meta = null; | |
| public function instance() { | |
| add_action( 'plugins_loaded', [ $this, 'setup_main' ] ); | |
| register_deactivation_hook( __FILE__, [ $this, 'deactivate' ] ); | |
| register_activation_hook( __FILE__, ( [ $this, 'activate' ] ) ); | |
| self::$path = $this->get_base_path(); | |
| self::$base_url = self::get_base_url(); | |
| add_action( 'init', [ $this, 'init' ] ); | |
| add_filter( 'crmperks_forms_field_validation_message', [ $this, 'validate_crmperks_field' ], 10, 4 ); | |
| } | |
| public function init() { | |
| // save screen and url for all forms | |
| add_action( 'wp_footer', [ $this, 'footer_js' ], 33 ); | |
| wp_register_script( 'vx-tablesorter-js', self::$base_url . 'js/jquery.tablesorter.js', [ 'jquery' ] ); | |
| wp_register_script( 'vx-tablepager-js', self::$base_url . 'js/jquery.tablesorter.pager.js', [ 'jquery' ] ); | |
| wp_register_script( 'vx-tablewidgets-js', self::$base_url . 'js/jquery.tablesorter.widgets.js', [ 'jquery' ] ); | |
| } | |
| public function setup_main() { | |
| // WordPress sets current user to 0 here wp-includes/rest-api.php rest_cookie_check_errors function | |
| add_action( 'rest_api_init', [ $this, 'verify_logged_in_user' ], 10 ); | |
| add_filter( 'wpcf7_before_send_mail', [ $this, 'create_entry_cf' ], 10 ); | |
| add_action( 'gform_entry_created', [ $this, 'create_entry_gf' ], 30, 2 ); | |
| // formidable | |
| add_action( 'frm_after_create_entry', [ $this, 'create_entry_fd' ], 30, 2 ); | |
| add_action( 'ninja_forms_after_submission', [ $this, 'create_entry_na' ], 30 ); | |
| add_action( 'iphorm_post_process', [ $this, 'create_entry_qu' ], 30 ); | |
| add_action( 'caldera_forms_submit_post_process_end', [ $this, 'create_entry_ca' ], 10, 3 ); | |
| add_action( 'cforms2_after_processing_action', [ &$this, 'create_entry_c2' ], 30 ); | |
| add_action( 'cntctfrm_get_mail_data', [ &$this, 'create_entry_be' ], 30 ); | |
| add_action( 'ufbl_email_send', [ &$this, 'create_entry_ul' ], 30 ); | |
| add_action( 'grunion_pre_message_sent', [ &$this, 'create_entry_jp' ], 30, 3 ); | |
| add_filter( 'crmperks_forms_new_submission', [ &$this, 'create_entry_vf' ], 40, 3 ); | |
| add_action( 'wpforms_process_entry_save', [ &$this, 'create_entry_wp' ], 30, 4 ); | |
| add_shortcode( 'vx-entries', [ $this, 'entries_shortcode' ] ); | |
| if ( is_admin() ) { | |
| load_plugin_textdomain( 'contact-form-entries', false, self::plugin_dir_name() . '/languages/' ); | |
| self::$db_version = get_option( self::$type . '_version' ); | |
| if ( self::$db_version != self::$version && current_user_can( 'manage_options' ) ) { | |
| $data = self::get_data_object(); | |
| $data->update_table(); | |
| require_once self::$path . 'includes/install.php'; | |
| $install = new vxcf_form_install(); | |
| $install->create_roles(); | |
| $install->create_upload_dir(); | |
| $meta = $this->get_meta(); | |
| if ( ! empty( $meta['save_forms'] ) ) { | |
| $forms = self::get_forms(); | |
| $forms_arr = self::forms_list( $forms ); | |
| $new_ids = array_diff_key( $forms_arr, $meta['save_forms'] ); | |
| if ( ! empty( $new_ids ) ) { | |
| $disable = []; | |
| foreach ( $new_ids as $k => $v ) { | |
| $disable[ $k ] = 'yes'; | |
| } | |
| $meta['disable_track'] = $disable; | |
| unset( $meta['save_forms'] ); | |
| self::$meta = $meta; | |
| update_option( self::$id . '_meta', $meta ); | |
| } | |
| } | |
| update_option( self::$type . '_version', self::$version ); | |
| } | |
| // plugin api | |
| $this->plugin_api( true ); | |
| require_once self::$path . 'includes/crmperks-cf.php'; | |
| require_once self::$path . 'includes/plugin-pages.php'; | |
| self::$pages = new vxcf_form_pages(); | |
| $pro_file = self::$path . 'pro/pro.php'; | |
| if ( file_exists( $pro_file ) ) { | |
| include_once $pro_file; | |
| self::$is_pr = '1'; } | |
| $pro_file = self::$path . 'pro/add-ons.php'; | |
| if ( file_exists( $pro_file ) ) { | |
| include_once $pro_file; } | |
| $pro_file = self::$path . 'wp/crmperks-notices.php'; | |
| if ( file_exists( $pro_file ) ) { | |
| include_once $pro_file; } | |
| } | |
| if ( ! empty( $_GET['vx_crm_form_action'] ) && $_GET['vx_crm_form_action'] == 'download_csv' ) { | |
| $key = $this->post( 'vx_crm_key' ); | |
| $form_ids = get_option( 'vx_crm_forms_ids' ); | |
| if ( is_array( $form_ids ) ) { | |
| $form_id = array_search( $key, $form_ids ); | |
| if ( ! empty( $form_id ) ) { | |
| self::set_form_fields( $form_id ); | |
| self::download_csv( $form_id, [ 'vx_links' => 'false' ] ); | |
| die(); | |
| } | |
| } | |
| } | |
| } | |
| public function plugin_api( $start_instance = false ) { | |
| $file = self::$path . 'pro/plugin-api.php'; | |
| if ( file_exists( $file ) ) { | |
| if ( ! class_exists( 'vxcf_plugin_api' ) ) { | |
| include_once $file; } | |
| if ( class_exists( 'vxcf_plugin_api' ) ) { | |
| $update_id = '400001'; | |
| $title = 'Contact Form Entries Plugin'; | |
| $slug = self::get_slug(); | |
| $settings_link = self::link_to_settings(); | |
| $is_plugin_page = self::is_crm_page(); | |
| self::$plugin = new vxcf_plugin_api( self::$id, self::$version, self::$type, $this->domain, $update_id, $title, $slug, self::$path, $settings_link, $is_plugin_page ); | |
| if ( $start_instance ) { | |
| self::$plugin->instance(); | |
| } | |
| } | |
| } | |
| } | |
| public function entries_shortcode( $atts ) { | |
| $form_id = ''; | |
| if ( ! empty( $atts['form-id'] ) ) { | |
| $form_id = $atts['form-id']; | |
| } | |
| if ( ! empty( $atts['form-name'] ) ) { | |
| $forms_arr = get_option( 'vxcf_all_forms', [] ); | |
| if ( is_array( $forms_arr ) && count( $forms_arr ) > 0 ) { | |
| foreach ( $forms_arr as $form_key => $form_type ) { | |
| if ( ! empty( $form_type['forms'] ) && is_array( $form_type['forms'] ) && count( $form_type['forms'] ) > 0 ) { | |
| foreach ( $form_type['forms'] as $k => $v ) { | |
| if ( $v == $atts['form-name'] ) { | |
| $form_id = $form_key . '_' . $k; | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| $fields = self::get_form_fields( $form_id ); | |
| $fields['created'] = [ | |
| 'name' => 'created', | |
| '_id' => 'created', | |
| 'label' => __( 'Created', 'contact-form-entries' ), | |
| ]; | |
| $col_end = count( $fields ); | |
| if ( ! empty( $atts['cols'] ) ) { | |
| $col_end = (int) $atts['cols']; | |
| } | |
| $col_start = 0; | |
| if ( ! empty( $atts['col-start'] ) ) { | |
| $col_start = (int) $atts['col-start']; | |
| } | |
| if ( ! empty( $atts['col-labels'] ) ) { | |
| $col_labels = array_map( 'trim', array_map( 'strtolower', explode( ',', $atts['col-labels'] ) ) ); | |
| if ( is_array( $fields ) && count( $fields ) > 0 ) { | |
| foreach ( $fields as $k => $v ) { | |
| if ( isset( $v['label'] ) && ! in_array( strtolower( $v['label'] ), $col_labels ) ) { | |
| unset( $fields[ $k ] ); | |
| } | |
| } | |
| } | |
| } else { | |
| $fields = array_splice( $fields, $col_start, $col_end ); | |
| } | |
| self::$form_fields = $fields; | |
| $css = ''; | |
| $css = empty( $atts['font-size'] ) ? '' : ' style="font-size: ' . $atts['font-size'] . '"'; | |
| $class = 'vx_entries_table '; | |
| if ( ! empty( $atts['class'] ) ) { | |
| $class .= $atts['class']; | |
| } | |
| $class = ' class="' . $class . '"'; | |
| $table_id = empty( $atts['id'] ) ? '' : 'id="' . $atts['font-size'] . '"'; | |
| $limit = '20'; | |
| if ( ! empty( $atts['limit'] ) ) { | |
| $limit = $atts['limit']; | |
| } | |
| $start = '0'; | |
| if ( ! empty( $atts['start'] ) ) { | |
| $start = $atts['start']; | |
| } | |
| $search = $export = ''; | |
| if ( $this->do_actions() ) { | |
| if ( ! empty( $atts['search'] ) ) { | |
| $search = $atts['search']; | |
| } | |
| if ( ! empty( $atts['export'] ) ) { | |
| $form_ids = get_option( 'vx_crm_forms_ids' ); | |
| if ( ! is_array( $form_ids ) ) { | |
| $form_ids = []; } | |
| if ( ! isset( $form_ids[ $form_id ] ) ) { | |
| $form_ids[ $form_id ] = wp_rand( 99999, 999999999 ) . uniqid() . time() . wp_rand( 999, 9999999 ) . uniqid(); | |
| update_option( 'vx_crm_forms_ids', $form_ids ); | |
| } | |
| $export = $form_ids[ $form_id ]; | |
| } | |
| } | |
| $page_size = '3'; | |
| if ( ! empty( $atts['per-page'] ) ) { | |
| $page_size = $atts['per-page']; | |
| } | |
| $offset = $this->time_offset(); | |
| $req = [ | |
| 'start' => $start, | |
| 'vx_links' => 'false', | |
| ]; | |
| if ( isset( $atts['user-id'] ) ) { | |
| $req['user_id'] = ! empty( $atts['user-id'] ) ? (int) $atts['user-id'] : get_current_user_id(); | |
| } | |
| $data = self::get_data_object(); | |
| $entries = $data->get_entries( $form_id, $limit, $req ); | |
| $leads = []; | |
| if ( ! empty( $entries['result'] ) ) { | |
| $leads = $entries['result']; | |
| } | |
| $base_url = self::get_base_url(); | |
| if ( ! empty( $atts['sortable'] ) ) { | |
| wp_enqueue_script( 'vx-tablesorter-js' ); | |
| wp_enqueue_script( 'vx-tablewidgets-js' ); | |
| if ( ! empty( $atts['pager'] ) ) { | |
| wp_enqueue_script( 'vx-tablepager-js' ); | |
| } | |
| wp_enqueue_style( 'vx-tablesorter-css' ); | |
| } | |
| $leads_table = apply_filters( 'crmperks_entries_template', self::$path . 'templates/leads-table.php' ); | |
| ob_start(); | |
| include $leads_table; | |
| return ob_get_clean(); | |
| } | |
| public function verify_logged_in_user() { | |
| self::$user_id = get_current_user_id(); | |
| } | |
| public function create_entry_auto( $entry = '' ) { | |
| $form_id = 0; | |
| if ( ! empty( $data['_wpcf7'] ) ) { | |
| $form_id = $data['_wpcf7']; | |
| } | |
| $tags = self::get_form_fields( $form_id ); | |
| $arr = []; | |
| if ( is_array( $tags ) ) { | |
| foreach ( $tags as $k => $v ) { | |
| if ( ! empty( $k ) && isset( $data[ $k ] ) ) { | |
| $arr[ $k ] = $data[ $k ]; | |
| } | |
| } | |
| } | |
| if ( is_array( $arr ) && count( $arr ) > 0 ) { | |
| $data = self::get_data_object(); | |
| $lead = $data->create_lead( $arr, $form_id ); | |
| } | |
| } | |
| public function create_entry( $lead, $form, $type, $info = '', $save = true, $entry_id = '' ) { | |
| if ( ! is_array( $info ) ) { | |
| $info = []; } | |
| if ( is_array( $lead ) && count( $lead ) > 0 ) { | |
| $data = self::get_data_object(); | |
| $form_id = $type . '_' . $form['id']; | |
| $main = [ 'form_id' => $form_id ]; | |
| $forms = self::get_forms(); | |
| if ( ! isset( $forms[ $type ]['forms'][ $form['id'] ] ) ) { | |
| return; | |
| } | |
| $meta = get_option( self::$id . '_meta', [] ); | |
| if ( empty( $meta['ip'] ) ) { | |
| $main = $this->get_lead_info( $main, $info ); | |
| } else { | |
| $url_temp = $this->get_lead_info( [] ); | |
| if ( ! empty( $url_temp['url'] ) ) { | |
| $main['url'] = $url_temp['url']; | |
| } | |
| } | |
| if ( ! empty( self::$user_id ) ) { | |
| $main['user_id'] = self::$user_id; | |
| } | |
| $main = apply_filters( 'vxcf_entries_plugin_before_saving_lead_main', $main, $lead, $entry_id ); | |
| self::get_form_fields( $form_id ); | |
| $lead = apply_filters( 'vxcf_entries_plugin_before_saving_lead', $lead, $main ); | |
| $vis_id = ''; | |
| if ( $save ) { | |
| if ( empty( $meta['cookies'] ) && empty( $entry_id ) ) { | |
| $vis_id = $this->vx_id(); | |
| $entry_id = $data->get_vis_info_of_day( $vis_id, $form_id, '1' ); | |
| } | |
| $main['type'] = '0'; | |
| $main['is_read'] = '0'; | |
| $entry_id = $this->create_update_lead( $lead, $main, $entry_id ); | |
| } | |
| $main['id'] = $entry_id; | |
| $lead['__vx_entry'] = $main; | |
| if ( $this->do_actions() ) { | |
| do_action( 'vx_addons_save_entry', $entry_id, $lead, 'cf', $form ); | |
| } | |
| $lead = apply_filters( 'vxcf_after_saving_addons', $lead, $entry_id, $type, $form ); | |
| $form['form_id'] = $form['id'] = $form_id; | |
| do_action( 'vxcf_entry_created', $lead, $entry_id, $form ); | |
| } | |
| return $entry_id; | |
| } | |
| public function create_update_lead( $detail, $lead, $entry_id = '' ) { | |
| $data = self::get_data_object(); | |
| if ( empty( $entry_id ) ) { // no partial entry | |
| $entry_id = $data->update_lead( '', $detail, '', $lead ); | |
| } else { | |
| $detail_db = $data->get_lead_detail( $entry_id ); | |
| $update = $insert = []; | |
| if ( ! empty( $detail ) ) { | |
| foreach ( $detail as $k => $v ) { | |
| if ( isset( $detail_db[ $k ]['value'] ) ) { | |
| if ( $detail_db[ $k ]['value'] != $v ) { | |
| $update[ $detail_db[ $k ]['id'] ] = $v; | |
| } | |
| } else { | |
| $insert[ $k ] = $v; | |
| } | |
| } | |
| } | |
| $data->update_lead( $update, $insert, $entry_id, $lead ); | |
| } | |
| return $entry_id; | |
| } | |
| public static function update_entry_meta( $entry_id, $meta_key, $meta ) { | |
| if ( ! empty( $entry_id ) && ! empty( $meta ) && is_array( $meta ) ) { | |
| $entry = self::get_entry( $entry_id ); | |
| $detail = ! empty( $entry['meta'] ) ? json_decode( $entry['meta'], true ) : []; | |
| $data = self::get_data_object(); | |
| if ( ! empty( $detail[ $meta_key ] ) && is_array( $detail[ $meta_key ] ) ) { | |
| $meta = array_merge( $detail[ $meta_key ], $meta ); | |
| } | |
| $detail[ $meta_key ] = $meta; | |
| $data->update_lead( '', '', $entry_id, [ 'meta' => wp_json_encode( $detail ) ] ); | |
| } | |
| } | |
| public function get_lead_info( $info, $meta_info = [] ) { | |
| $info['user_id'] = get_current_user_id(); | |
| if ( ! empty( $meta_info['ip'] ) ) { | |
| $ip = $meta_info['ip']; | |
| } else { | |
| $ip = $this->get_ip(); | |
| } | |
| $info['ip'] = $ip; | |
| $resolution = ''; | |
| if ( isset( $_POST['vx_width'] ) ) { | |
| $width = self::post( 'vx_width' ); | |
| $height = self::post( 'vx_height' ); | |
| $resolution = $width . ' x ' . $height; | |
| $info['screen'] = $resolution; | |
| } | |
| $user_agent = ! empty( $meta_info['user_agent'] ) ? $meta_info['user_agent'] : ''; | |
| $bro_info = self::browser_info( $user_agent ); | |
| // get page url | |
| $page_url = "//$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; | |
| if ( isset( $_REQUEST['vx_url'] ) ) { | |
| $page_url = self::post( 'vx_url' ); | |
| } | |
| if ( ! empty( $meta_info['url'] ) ) { | |
| $page_url = $meta_info['url']; | |
| } | |
| $page_url = substr( $page_url, 0, 250 ); | |
| $info['url'] = $page_url; | |
| $info['browser'] = $bro_info['name']; | |
| $info['os'] = $bro_info['platform']; | |
| if ( ! empty( $meta_info['vis_id'] ) ) { | |
| $info['vis_id'] = $meta_info['vis_id']; | |
| } else { | |
| $info['vis_id'] = $this->vx_id(); | |
| } | |
| return $info; | |
| } | |
| public function create_entry_vf( $entry_id, $entry, $form ) { | |
| $track = empty( $form['settings']['disable_db'] ); | |
| return $this->create_entry( $entry, $form, 'vf', '', $track, $entry_id ); | |
| } | |
| public function create_entry_wp( $fields, $entry, $form_id, $form_data ) { | |
| $track = $this->track_form_entry( 'wp', $form_id ); | |
| $upload_files = $lead = []; | |
| if ( ! empty( $fields ) ) { | |
| foreach ( $fields as $v ) { | |
| if ( $v['type'] == 'file-upload' ) { | |
| $upload_files[ $v['id'] ] = $v['value']; | |
| } else { | |
| $val = $v['value']; | |
| if ( in_array( $v['type'], [ 'payment-select', 'payment-multiple' ] ) ) { | |
| $val = $v['amount']; | |
| } elseif ( $v['type'] == 'checkbox' ) { | |
| $val = array_map( 'trim', explode( "\n", $val ) ); | |
| } | |
| $lead[ $v['id'] ] = $val; | |
| } | |
| } | |
| if ( $track ) { | |
| $upload_files = $this->copy_files( $upload_files ); | |
| } | |
| if ( is_array( $upload_files ) ) { | |
| foreach ( $upload_files as $k => $v ) { | |
| $lead[ $k ] = $v; | |
| } | |
| } | |
| $form_arr = [ | |
| 'id' => $form_data['id'], | |
| 'name' => 'WP Forms', | |
| 'fields' => $form_data['fields'], | |
| ]; | |
| if ( ! empty( $form_data['fields']['settings']['form_title'] ) ) { | |
| $form_arr['name'] = $form_data['fields']['settings']['form_title']; | |
| } | |
| $this->create_entry( $lead, $form_arr, 'wp', '', $track ); | |
| } | |
| } | |
| public function create_entry_wc( $id, $posted ) { | |
| $track = $this->track_form_entry( 'wc', '1' ); | |
| $tags = self::get_form_fields( 'wc_1' ); | |
| $order = get_post_meta( $id ); | |
| $_order = new WC_Order( $id ); | |
| $order['qty'] = $_order->get_item_count(); | |
| $order['order_note'] = $_order->customer_note; | |
| $order['order_id'] = $id; | |
| $lead = []; | |
| if ( ! empty( $tags ) ) { | |
| foreach ( $tags as $v ) { | |
| if ( isset( $order[ $v['id'] ] ) ) { | |
| $k = $v['id']; | |
| $val = $order[ $k ]; | |
| $lead[ $k ] = is_array( $val ) && isset( $val[0] ) ? $val[0] : $val; | |
| } | |
| } | |
| } | |
| $form_arr = [ | |
| 'id' => '1', | |
| 'name' => 'WooCommerce', | |
| 'fields' => $tags, | |
| ]; | |
| $this->create_entry( $lead, $form_arr, 'wc', '', $track ); | |
| } | |
| public function create_entry_cf( $form ) { | |
| $form_id = $form->id(); | |
| $track = $this->track_form_entry( 'cf', $form_id ); | |
| $submission = WPCF7_Submission::get_instance(); | |
| $uploaded_files = $submission->uploaded_files(); | |
| if ( $track ) { | |
| $uploaded_files = $this->copy_files( $uploaded_files ); | |
| } | |
| $form_title = $form->title(); | |
| $tags = self::get_form_fields( 'cf_' . $form_id ); | |
| $lead = []; | |
| if ( is_array( $tags ) ) { | |
| foreach ( $tags as $k => $v ) { | |
| $name = $v['name']; | |
| $val = $submission->get_posted_data( $name ); | |
| if ( isset( $uploaded_files[ $name ] ) ) { | |
| $val = $uploaded_files[ $name ]; | |
| } | |
| if ( ! empty( $val ) && isset( $v['basetype'] ) && $v['basetype'] == 'mfile' && function_exists( 'dnd_get_upload_dir' ) ) { | |
| $dir = dnd_get_upload_dir(); | |
| $f_arr = []; | |
| foreach ( $val as $file ) { | |
| $file_name = explode( '/', $file ); | |
| if ( count( $file_name ) > 1 ) { | |
| $f_arr[] = $dir['upload_url'] . '/' . $file_name[1]; | |
| } | |
| } | |
| $val = $f_arr; | |
| } | |
| $lead[ $k ] = wp_unslash( $val ); | |
| } | |
| } | |
| $form_arr = [ | |
| 'id' => $form_id, | |
| 'name' => $form_title, | |
| 'fields' => $tags, | |
| ]; | |
| $this->create_entry( $lead, $form_arr, 'cf', '', $track ); | |
| } | |
| public function create_entry_na( $data ) { | |
| $form_id = $data['form_id']; | |
| $track = $this->track_form_entry( 'na', $form_id ); | |
| if ( empty( $data['form_id'] ) ) { | |
| return; | |
| } | |
| $form_title = $data['settings']['title']; | |
| $lead = $upload_files = []; | |
| if ( ! empty( $data['fields'] ) ) { | |
| foreach ( $data['fields'] as $v ) { | |
| $field_id = $v['id']; | |
| if ( ! empty( $v['value'] ) ) { | |
| if ( $v['type'] == 'file_upload' ) { | |
| $upload_files[ $field_id ] = $v['value']; | |
| } else { | |
| $lead[ $field_id ] = $v['value']; | |
| } | |
| } | |
| } | |
| if ( $track ) { | |
| $upload_files = $this->copy_files( $upload_files ); | |
| } | |
| if ( is_array( $upload_files ) ) { | |
| foreach ( $upload_files as $k => $v ) { | |
| $lead[ $k ] = $v; | |
| } | |
| } | |
| $form_arr = [ | |
| 'id' => $form_id, | |
| 'name' => $form_title, | |
| 'fields' => $data['fields'], | |
| ]; | |
| $this->create_entry( $lead, $form_arr, 'na', '', $track ); | |
| } | |
| } | |
| public function create_entry_qu( $form ) { | |
| $form_id = $form->getId(); | |
| $track = $this->track_form_entry( 'qu', $form_id ); | |
| if ( empty( $form ) ) { | |
| return; | |
| } | |
| $vals = $form->getValues(); | |
| $fields = self::get_form_fields( 'qu_' . $form_id ); | |
| $lead = $upload_files = []; | |
| $field_text = 'iphorm_' . $form_id . '_'; | |
| if ( is_array( $fields ) && count( $fields ) > 0 ) { | |
| foreach ( $fields as $field ) { | |
| if ( isset( $field['id'] ) && ! empty( $vals[ $field_text . $field['id'] ] ) ) { | |
| $type = $field['type']; | |
| $id = $field['id']; | |
| $val = $vals[ $field_text . $field['id'] ]; | |
| $files = []; | |
| if ( $type == 'file' ) { | |
| if ( is_array( $val ) && count( $val ) > 0 ) { | |
| foreach ( $val as $file ) { | |
| if ( isset( $file['fullPath'] ) ) { | |
| $files[] = $file['fullPath']; | |
| } | |
| } | |
| } | |
| $upload_files[ $id ] = $files; | |
| } else { | |
| $lead[ $id ] = $val; | |
| } | |
| } | |
| } | |
| if ( $track ) { | |
| $upload_files = $this->copy_files( $upload_files ); | |
| } | |
| if ( is_array( $upload_files ) ) { | |
| foreach ( $upload_files as $k => $v ) { | |
| $lead[ $k ] = $v; | |
| } | |
| } | |
| if ( count( $lead ) > 0 ) { | |
| $form_arr = [ | |
| 'id' => $form_id, | |
| 'name' => $form->getName(), | |
| 'fields' => $fields, | |
| ]; | |
| $this->create_entry( $lead, $form_arr, 'qu', '', $track ); | |
| } | |
| } | |
| } | |
| public function create_entry_ca( $form ) { | |
| $form_id = $form['ID']; | |
| $track = $this->track_form_entry( 'ca', $form_id ); | |
| global $processed_data; | |
| if ( empty( $form ) ) { | |
| return; | |
| } | |
| $vals = $processed_data[ $form_id ]; | |
| $fields = self::get_form_fields( 'ca_' . $form_id ); | |
| $lead = []; | |
| $upload_files = []; | |
| if ( is_array( $fields ) && count( $fields ) > 0 ) { | |
| foreach ( $fields as $field ) { | |
| if ( isset( $field['name'] ) && isset( $vals[ $field['name'] ] ) ) { | |
| $type = $field['type']; | |
| $id = $field['name']; | |
| $val = $vals[ $field['name'] ]; | |
| $files = []; | |
| if ( $type == 'file' ) { | |
| if ( ! is_array( $val ) && ! empty( $val ) ) { | |
| $val = [ $val ]; | |
| } | |
| if ( is_array( $val ) && count( $val ) > 0 ) { | |
| $upload_files[ $id ] = $val; | |
| } | |
| } | |
| $lead[ $id ] = $val; | |
| } | |
| } | |
| if ( $track ) { | |
| $upload_files = $this->copy_files( $upload_files ); | |
| } | |
| if ( is_array( $upload_files ) ) { | |
| foreach ( $upload_files as $k => $v ) { | |
| $lead[ $k ] = $v; | |
| } | |
| } | |
| if ( count( $lead ) > 0 ) { | |
| $form_arr = [ | |
| 'id' => $form_id, | |
| 'name' => $form['name'], | |
| 'fields' => $fields, | |
| ]; | |
| $this->create_entry( $lead, $form_arr, 'ca', '', $track ); | |
| } | |
| } | |
| } | |
| public function create_entry_be() { | |
| $track = $this->track_form_entry( 'be', '1' ); | |
| global $cntctfrm_path_of_uploaded_file; | |
| $fields = self::get_form_fields( 'be_' ); | |
| $lead = []; | |
| if ( is_array( $fields ) && count( $fields ) > 0 ) { | |
| foreach ( $fields as $k => $field ) { | |
| if ( isset( $_POST[ 'cntctfrm_contact_' . $k ] ) ) { | |
| $lead[ $k ] = self::post( 'cntctfrm_contact_' . $k ); | |
| } elseif ( $field['type'] == 'file' && ! empty( $cntctfrm_path_of_uploaded_file ) ) { | |
| $files = [ $k => $cntctfrm_path_of_uploaded_file ]; | |
| if ( $track ) { | |
| $files = $this->copy_files( $files ); | |
| } | |
| if ( isset( $files[ $k ] ) ) { | |
| $lead[ $k ] = $files[ $k ]; | |
| } | |
| } | |
| } | |
| } | |
| if ( count( $lead ) > 0 ) { | |
| $form_arr = [ | |
| 'id' => '', | |
| 'name' => 'BestSoft Contact Form', | |
| 'fields' => $fields, | |
| ]; | |
| $this->create_entry( $lead, $form_arr, 'be', '', $track ); | |
| } | |
| } | |
| public function create_entry_ul( $to_email ) { | |
| $entry = []; | |
| if ( ! empty( $_POST['form_data'] ) ) { | |
| $form_data = self::post( 'form_data' ); | |
| foreach ( $form_data as $k => $v ) { | |
| $id = $v['name']; | |
| if ( strpos( $id, '[' ) !== false ) { | |
| $id = substr( $id, 0, strlen( $id ) - 2 ); | |
| } | |
| $value = $v['value']; | |
| if ( isset( $entry[ $id ] ) ) { | |
| $value = $entry[ $id ]; | |
| if ( ! is_array( $value ) ) { | |
| $value = [ $value ]; | |
| } | |
| $value[] = $v['value']; | |
| } | |
| $entry[ $id ] = $value; | |
| } | |
| } | |
| if ( empty( $entry['form_id'] ) ) { | |
| return; | |
| } | |
| $track = $this->track_form_entry( 'ul', $entry['form_id'] ); | |
| $form_id = $entry['form_id']; | |
| $fields = self::get_form_fields( 'ul_' . $form_id ); | |
| $lead = []; | |
| if ( is_array( $entry ) && count( $entry ) > 0 ) { | |
| foreach ( $entry as $k => $v ) { | |
| if ( isset( $fields[ $k ] ) ) { | |
| $lead[ $k ] = $v; | |
| } | |
| } | |
| } | |
| if ( count( $lead ) > 0 ) { | |
| $form = UFBL_Model::get_form_detail( $form_id ); | |
| $form_arr = [ | |
| 'id' => $form_id, | |
| 'name' => $form['form_title'], | |
| 'fields' => $fields, | |
| ]; | |
| $this->create_entry( $lead, $form_arr, 'ul', '', $track ); | |
| } | |
| } | |
| public function create_entry_c2( $data ) { | |
| if ( empty( $data ) ) { | |
| return; } | |
| $form_id = $data['id']; | |
| $track = $this->track_form_entry( 'c2', $form_id ); | |
| if ( $track === false ) { | |
| return; | |
| } | |
| $entry = $data['data']; | |
| $fields = self::get_form_fields( 'c2_' . $form_id ); | |
| $vals = []; | |
| if ( is_array( $entry ) && count( $entry ) > 0 ) { | |
| foreach ( $entry as $k => $v ) { | |
| if ( strpos( $k, '$$$' ) === 0 && isset( $entry[ $v ] ) ) { | |
| $k = substr( $k, 3 ); | |
| $vals[ $k ] = $entry[ $v ]; | |
| } | |
| } | |
| } | |
| $lead = []; | |
| $upload_files = []; | |
| if ( is_array( $fields ) && count( $fields ) > 0 ) { | |
| foreach ( $fields as $field ) { | |
| if ( isset( $field['name'] ) && isset( $vals[ $field['name'] ] ) ) { | |
| $type = $field['type']; | |
| $id = $field['name']; | |
| $val = $vals[ $field['name'] ]; | |
| $files = []; | |
| if ( $type == 'file' ) { | |
| $upload_files[] = [ | |
| 'id' => $id, | |
| 'val' => $val, | |
| ]; | |
| } else { | |
| if ( isset( $field['values'] ) ) { | |
| $val = explode( ',', $val ); | |
| } | |
| $lead[ $id ] = $val; | |
| } | |
| } | |
| } | |
| $files = []; | |
| if ( is_array( $upload_files ) && isset( $data['uploaded_files'] ) && is_array( $data['uploaded_files'] ) ) { | |
| foreach ( $upload_files as $k => $v ) { | |
| if ( isset( $data['uploaded_files'][ $k ]['name'] ) ) { | |
| $files[ $v['id'] ] = $data['uploaded_files'][ $k ]['name']; | |
| } | |
| } | |
| } | |
| $uploaded_files = $this->copy_files( $files ); | |
| if ( is_array( $uploaded_files ) && count( $uploaded_files ) > 0 ) { | |
| foreach ( $uploaded_files as $k => $v ) { | |
| $lead[ $k ] = $v; | |
| } | |
| } | |
| if ( count( $lead ) > 0 ) { | |
| $form_arr = [ | |
| 'id' => $form_id, | |
| 'name' => $form['name'], | |
| 'fields' => $fields, | |
| ]; | |
| $this->create_entry( $lead, $form_arr, 'c2' ); | |
| } | |
| } | |
| } | |
| public function create_entry_jp( $post_i, $all_values, $extra_values ) { | |
| $post_id = get_the_ID(); | |
| $track = $this->track_form_entry( 'jp', $post_id ); | |
| $title = get_the_title(); | |
| $fields = self::get_form_fields( 'jp_' . $post_id ); | |
| if ( ! is_array( $all_values ) ) { | |
| $all_values = []; | |
| } | |
| $lead = []; | |
| if ( count( $all_values ) > 0 ) { | |
| foreach ( $all_values as $k => $v ) { | |
| $k = explode( '_', $k ); | |
| if ( isset( $fields[ $k[1] ] ) ) { | |
| $lead[ $k[1] ] = $v; | |
| } | |
| } | |
| if ( count( $lead ) > 0 ) { | |
| $form_arr = [ | |
| 'id' => $post_id, | |
| 'name' => $title, | |
| 'fields' => $fields, | |
| ]; | |
| $this->create_entry( $lead, $form_arr, 'jp', '', $track ); | |
| } | |
| } | |
| if ( empty( $data ) ) { | |
| return; | |
| } | |
| $form_id = $data['id']; | |
| $entry = $data['data']; | |
| $fields = self::get_form_fields( 'c2_' . $form_id ); | |
| $vals = []; | |
| if ( is_array( $entry ) && count( $entry ) > 0 ) { | |
| foreach ( $entry as $k => $v ) { | |
| if ( strpos( $k, '$$$' ) === 0 && isset( $entry[ $v ] ) ) { | |
| $k = substr( $k, 3 ); | |
| $vals[ $k ] = $entry[ $v ]; | |
| } | |
| } | |
| } | |
| $lead = []; | |
| $upload_files = []; | |
| if ( is_array( $fields ) && count( $fields ) > 0 ) { | |
| foreach ( $fields as $field ) { | |
| if ( isset( $field['name'] ) && isset( $vals[ $field['name'] ] ) ) { | |
| $type = $field['type']; | |
| $id = $field['name']; | |
| $val = $vals[ $field['name'] ]; | |
| $files = []; | |
| if ( $type == 'file' ) { | |
| $upload_files[] = [ | |
| 'id' => $id, | |
| 'val' => $val, | |
| ]; | |
| } else { | |
| if ( isset( $field['values'] ) ) { | |
| $val = explode( ',', $val ); | |
| } | |
| $lead[ $id ] = $val; | |
| } | |
| } | |
| } | |
| $files = []; | |
| if ( is_array( $upload_files ) && isset( $data['uploaded_files'] ) && is_array( $data['uploaded_files'] ) ) { | |
| foreach ( $upload_files as $k => $v ) { | |
| if ( isset( $data['uploaded_files'][ $k ]['name'] ) ) { | |
| $files[ $v['id'] ] = $data['uploaded_files'][ $k ]['name']; | |
| } | |
| } | |
| } | |
| $uploaded_files = $this->copy_files( $files ); | |
| if ( is_array( $uploaded_files ) && count( $uploaded_files ) > 0 ) { | |
| foreach ( $uploaded_files as $k => $v ) { | |
| $lead[ $k ] = $v; | |
| } | |
| } | |
| if ( count( $lead ) > 0 ) { | |
| $form_arr = [ | |
| 'id' => $form_id, | |
| 'name' => $form['name'], | |
| 'fields' => $fields, | |
| ]; | |
| $this->create_entry( $lead, $form_arr, 'c2' ); | |
| } | |
| } | |
| } | |
| public function create_entry_fd( $entry_id, $form_id ) { | |
| $track = $this->track_form_entry( 'fd', $form_id ); | |
| $fields = self::get_form_fields( 'fd_' . $form_id ); | |
| global $wpdb; | |
| $table = $wpdb->prefix . 'frm_item_metas'; | |
| $sql = $wpdb->prepare( "Select * from $table where item_id=%d", $entry_id ); | |
| $entry = $wpdb->get_results( $sql, ARRAY_A ); | |
| $detail = []; | |
| if ( is_array( $entry ) && count( $entry ) > 0 ) { | |
| foreach ( $entry as $v ) { | |
| $detail[ $v['field_id'] ] = $v['meta_value']; | |
| } | |
| } | |
| $lead = []; | |
| if ( is_array( $fields ) ) { | |
| $uploaded_files_form = []; | |
| foreach ( $fields as $k => $v ) { | |
| $name = $v['name']; | |
| if ( isset( $detail[ $name ] ) ) { | |
| $val = $detail[ $name ]; | |
| if ( $v['type'] == 'file' ) { | |
| $val = wp_get_attachment_url( $val ); | |
| $base_url = get_site_url(); | |
| $val = str_replace( $base_url, trim( ABSPATH, '/' ), $val ); | |
| $uploaded_files_form[ $name ] = $val; | |
| } | |
| $lead[ $name ] = $detail[ $name ]; | |
| } | |
| } | |
| if ( $track ) { | |
| $uploaded_files_form = $this->copy_files( $uploaded_files_form ); | |
| } | |
| if ( is_array( $uploaded_files_form ) ) { | |
| foreach ( $uploaded_files_form as $k => $v ) { | |
| $lead[ $k ] = $v; | |
| } | |
| } | |
| } | |
| $table = $wpdb->prefix . 'frm_forms'; | |
| $sql = $wpdb->prepare( "Select name from $table where id=%d", $form_id ); | |
| $form_name = $wpdb->get_var( $sql ); | |
| $form_arr = [ | |
| 'id' => $form_id, | |
| 'name' => $form_name, | |
| 'fields' => $fields, | |
| ]; | |
| $this->create_entry( $lead, $form_arr, 'fd', '', $track ); | |
| } | |
| public function create_entry_gf( $entry, $form ) { | |
| $track = $this->track_form_entry( 'gf', $form['id'] ); | |
| $fields = self::get_form_fields( 'gf_' . $form['id'] ); | |
| $uploaded_files_form = $lead = []; | |
| if ( is_array( $fields ) ) { | |
| foreach ( $fields as $field ) { | |
| $id = $field['id']; | |
| $is_name = false; | |
| if ( isset( $field['type'] ) && in_array( $field['type'], [ 'name', 'address' ] ) ) { | |
| $id = (string) $id; | |
| $is_name = true; | |
| } | |
| if ( isset( $entry[ $id ] ) ) { | |
| $val = $entry[ $id ]; | |
| if ( isset( $field['type'] ) ) { | |
| if ( $field['type'] == 'file' ) { | |
| $file_arr = json_decode( $val, true ); | |
| if ( is_array( $file_arr ) ) { | |
| $val = $file_arr; | |
| } | |
| $uploaded_files_form[ $id ] = $val; | |
| } elseif ( in_array( $field['type'], [ 'radio', 'multiselect' ] ) ) { | |
| $val = explode( ',', $val ); | |
| } | |
| } | |
| if ( ! empty( $val ) ) { | |
| $lead[ $id ] = $val; | |
| } | |
| } elseif ( ! $is_name ) { | |
| // This is for checkboxes | |
| $elements = []; | |
| foreach ( $entry as $key => $value ) { | |
| if ( is_numeric( $key ) && floor( $key ) == floor( $id ) && ! empty( $value ) ) { | |
| $elements[] = htmlspecialchars( $value ); | |
| } | |
| } | |
| $lead[ $id ] = $elements; | |
| } | |
| } | |
| } | |
| if ( $track ) { | |
| $uploaded_files_form = $this->copy_files( $uploaded_files_form ); | |
| } | |
| if ( is_array( $uploaded_files_form ) ) { | |
| foreach ( $uploaded_files_form as $k => $v ) { | |
| $lead[ $k ] = $v; | |
| } | |
| } | |
| $form_arr = [ | |
| 'id' => $form['id'], | |
| 'name' => $form['title'], | |
| 'fields' => $form['fields'], | |
| ]; | |
| $this->create_entry( $lead, $form_arr, 'gf', '', $track ); | |
| } | |
| public function create_entry_fscf( $data ) { | |
| if ( ! isset( $data->posted_data ) ) { | |
| return; | |
| } | |
| $form_id = $data->form_number; | |
| $track = $this->track_form_entry( 'fs', $form_id ); | |
| if ( $track === false ) { | |
| return; | |
| } | |
| $form_title = $data->title; | |
| $post = $data->posted_data; | |
| $files = $data->uploaded_files; | |
| $uploaded_files = $this->copy_files( $files ); | |
| $fields = self::get_form_fields( 'fs_' . $form_id ); | |
| $lead = []; | |
| if ( is_array( $fields ) ) { | |
| foreach ( $fields as $k => $v ) { | |
| $name = $v['name']; | |
| $val = ''; | |
| if ( isset( $uploaded_files[ $name ] ) ) { | |
| $val = $uploaded_files[ $name ]; | |
| } elseif ( isset( $_POST[ $name ] ) ) { | |
| $val = self::post( $name ); | |
| } | |
| if ( ! empty( $val ) ) { | |
| $lead[ $name ] = $val; | |
| } | |
| } | |
| } | |
| $form_arr = [ | |
| 'id' => $form_id, | |
| 'name' => $form_title, | |
| 'fields' => $fields, | |
| ]; | |
| $this->create_entry( $lead, $form_arr, 'fs' ); | |
| } | |
| public function copy_files( $uploaded_files_form ) { | |
| $uploaded_files = []; | |
| if ( is_array( $uploaded_files_form ) && count( $uploaded_files_form ) > 0 ) { | |
| $upload = self::get_upload_dir(); | |
| $upload_path = $upload['path']; | |
| $folder = $upload['folder']; | |
| if ( $upload_path ) { | |
| foreach ( $uploaded_files_form as $k => $file_arr ) { | |
| if ( empty( $file_arr ) ) { | |
| continue; | |
| } | |
| if ( ! is_array( $file_arr ) ) { | |
| $file_arr = [ $file_arr ]; | |
| } | |
| $files = []; | |
| foreach ( $file_arr as $file ) { | |
| $base_url = get_site_url(); | |
| if ( strpos( $file, $base_url ) === 0 ) { | |
| $file = str_replace( $base_url, trim( ABSPATH, '/' ), $file ); | |
| } | |
| $file_name_arr = explode( '/', $file ); | |
| $file_name = $file_name_arr[ count( $file_name_arr ) - 1 ]; | |
| $file_name = sanitize_file_name( $file_name ); | |
| $file_name = wp_unique_filename( $upload_path, $file_name ); | |
| $dest = $upload_path . '/' . $file_name; | |
| $copy = copy( $file, $dest ); | |
| chmod( $dest, 0644 ); | |
| $uploaded_file = $file; | |
| $path = ''; | |
| if ( $copy ) { | |
| $uploaded_file = $folder . '/' . $file_name; | |
| $files[] = $uploaded_file; | |
| } | |
| } | |
| $uploaded_files[ $k ] = $files; | |
| } | |
| } | |
| } | |
| return $uploaded_files; | |
| } | |
| public function get_forms_jetpack() { | |
| return get_posts( | |
| [ | |
| 'numberposts' => -1, | |
| 'orderby' => 'ID', | |
| 'order' => 'ASC', | |
| 'post_type' => 'jetpack', | |
| ] | |
| ); | |
| } | |
| public function get_meta() { | |
| if ( is_null( self::$meta ) ) { | |
| self::$meta = get_option( self::$id . '_meta', [] ); | |
| } | |
| return self::$meta; | |
| } | |
| public function track_form_entry( $type, $form_id ) { | |
| $meta = $this->get_meta(); | |
| $res = true; | |
| if ( ! empty( $meta['save_forms'] ) && empty( $meta['save_forms'][ $type . '_' . $form_id ] ) ) { | |
| $res = false; | |
| } elseif ( ! empty( $meta['disable_track'] ) && ! empty( $meta['disable_track'][ $type . '_' . $form_id ] ) ) { | |
| $res = false; | |
| } | |
| return $res; | |
| } | |
| public function get_form_jetpack( $id = '' ) { | |
| return get_post( $id ); | |
| } | |
| public function get_fields_jetpack( $post ) { | |
| $text = $post->post_content; | |
| $pattern = '/\[(\[?)(contact-field)(?![\w-])([^\]\/]*(?:\/(?!\])[^\]\/]*)*?)(?:(\/)\]|\](?:([^\[]*+(?:\[(?!\/\2\])[^\[]*+)*+)\[\/\2\])?)(\]?)/'; | |
| preg_match_all( $pattern, $text, $matches, PREG_SET_ORDER ); | |
| $fields = []; | |
| if ( is_array( $matches ) && count( $matches ) > 0 ) { | |
| foreach ( $matches as $m ) { | |
| if ( isset( $m[3] ) ) { | |
| $str = trim( $m[3] ); | |
| $fields[] = shortcode_parse_atts( trim( $m[3] ) ); | |
| } | |
| } | |
| } | |
| return $fields; | |
| } | |
| public function get_forms_fscf() { | |
| // fast secure form | |
| $global = get_option( 'fs_contact_global' ); | |
| $forms = []; | |
| if ( isset( $global['form_list'] ) ) { | |
| $forms = $global['form_list']; | |
| } | |
| return $forms; | |
| } | |
| public function get_fields_fscf( $form_id ) { | |
| $fields_arr = []; | |
| if ( method_exists( 'FSCF_Util', 'get_form_options' ) ) { | |
| $options = FSCF_Util::get_form_options( $form_id, true ); | |
| if ( isset( $options['fields'] ) && is_array( $options['fields'] ) ) { | |
| $fields = $options['fields']; | |
| foreach ( $fields as $field ) { | |
| $field['name'] = $field['slug']; | |
| $fields_arr[] = $field; | |
| } | |
| } | |
| } | |
| return $fields_arr; | |
| } | |
| public function validate_crmperks_field( $err_msg, $field_val, $field, $form ) { | |
| if ( empty( $err_msg ) && ! empty( $field_val ) && ! empty( $field['dup_check'] ) && ! empty( $form['id'] ) ) { | |
| $data = self::get_data_object(); | |
| $row = $data->search_lead_detail( $field_val, 'vf_' . $form['id'] ); | |
| // varify no duplicate fields | |
| if ( ! empty( $row ) ) { | |
| if ( $field['valid_err_msg'] != '' ) { | |
| $err_msg = str_replace( [ '%field_value%' ], [ $field_val ], $field['valid_err_msg'] ); | |
| } else { | |
| $err_msg = sprintf( __( '%s Already Exists', 'contact-form-entries' ), $field_val ); | |
| } | |
| } | |
| } | |
| return $err_msg; | |
| } | |
| public static function file_link( $file_url, $base_url = '' ) { | |
| if ( filter_var( $file_url, FILTER_VALIDATE_URL ) === false ) { | |
| if ( empty( $base_url ) ) { | |
| $upload = self::get_upload_dir(); | |
| $base_url = $upload['url']; | |
| } | |
| $file_url = $base_url . $file_url; | |
| } | |
| if ( filter_var( $file_url, FILTER_VALIDATE_URL ) ) { | |
| $file_arr = explode( '/', $file_url ); | |
| $file_name = $file_arr[ count( $file_arr ) - 1 ]; | |
| $file_url = "<div><a href='$file_url' target='_blank'>" . $file_name . '</a></div>'; | |
| } | |
| return $file_url; | |
| } | |
| public function get_ip() { | |
| $ip = ''; | |
| if ( ! empty( $_SERVER['HTTP_CLIENT_IP'] ) ) { | |
| $ip = $_SERVER['HTTP_CLIENT_IP']; | |
| } elseif ( ! empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) { | |
| $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; | |
| } else { | |
| $ip = $_SERVER['REMOTE_ADDR']; | |
| } | |
| return $ip; | |
| } | |
| /** | |
| * all form fields + addon fields | |
| * | |
| * @param mixed $form_id | |
| */ | |
| public function get_all_fields( $form_id ) { | |
| if ( $this->fields ) { | |
| return $this->fields; | |
| } | |
| $tags = self::get_form_fields( $form_id ); | |
| if ( is_array( $tags ) ) { | |
| foreach ( $tags as $id => $tag ) { | |
| $fields[ $id ] = [ | |
| 'id' => $id, | |
| 'label' => $tag, | |
| ]; | |
| } | |
| } | |
| $this->fields = $fields = apply_filters( | |
| 'vx_mapping_standard_fields', | |
| [ | |
| 'gf' => [ | |
| 'title' => __( 'Contact Form Fields', 'contact-form-entries' ), | |
| 'fields' => $fields, | |
| ], | |
| ] | |
| ); | |
| return $fields; | |
| } | |
| /** | |
| * Create or edit crm feed page | |
| */ | |
| public function print_page() { | |
| if ( ! current_user_can( self::$id . '_edit_settings' ) ) { | |
| die(); | |
| } | |
| $id = self::post( 'id' ); | |
| $form_id = self::post( 'form_id' ); | |
| $ids = []; | |
| if ( ! empty( $id ) ) { | |
| $ids = explode( ',', $id ); | |
| } | |
| self::$data = self::get_data_object(); | |
| $msgs = []; | |
| $is_valid = true; | |
| $fields = $leads = []; | |
| $include_notes = isset( $_GET['notes'] ) && $_GET['notes'] == '1' ? true : false; | |
| if ( is_array( $ids ) && count( $ids ) > 0 ) { | |
| foreach ( $ids as $id ) { | |
| $id = (int) $id; | |
| if ( ! empty( $id ) ) { | |
| $entry = apply_filters( 'vxcf_entries_print_lead', self::$data->get_lead_detail( $id ), $id ); | |
| if ( ! empty( $entry ) ) { | |
| $lead = []; | |
| $lead['lead'] = $entry; | |
| if ( $include_notes ) { | |
| $lead['notes'] = self::$data->get_lead_notes( $id ); | |
| } | |
| $leads[ $id ] = $lead; | |
| } | |
| } | |
| } | |
| } | |
| if ( empty( $leads ) ) { | |
| _e( 'No Entry Found', 'contact-form-entries' ); | |
| } | |
| if ( ! empty( self::$form_fields ) ) { | |
| $fields = self::$form_fields; | |
| } else { | |
| $fields = self::get_form_fields( $form_id ); | |
| } | |
| include_once self::$path . 'templates/print.php'; | |
| exit; | |
| } | |
| /** | |
| * gravity forms field select options | |
| * | |
| * @param mixed $form_id | |
| * @param mixed $selected_val | |
| */ | |
| public function form_fields_options( $form_id, $selected_val = '' ) { | |
| if ( $this->fields == null ) { | |
| $this->fields = $this->get_all_fields( $form_id ); | |
| } | |
| $sel = "<option value=''></option>"; | |
| $fields = $this->fields; | |
| if ( is_array( $fields ) ) { | |
| foreach ( $fields as $key => $fields_arr ) { | |
| if ( is_array( $fields_arr['fields'] ) ) { | |
| $sel .= "<optgroup label='" . $fields_arr['title'] . "'>"; | |
| foreach ( $fields_arr['fields'] as $k => $v ) { | |
| $option_k = $k; | |
| $option_name = $v; | |
| $option_name = $v['label']; | |
| $select = ''; | |
| if ( $selected_val == $option_k ) { | |
| $select = 'selected="selected"'; | |
| } | |
| $sel .= '<option value="' . $option_k . '" ' . $select . '>' . $option_name . '</option>'; | |
| } | |
| } | |
| } | |
| } | |
| return $sel; | |
| } | |
| /** | |
| * uninstall plugin | |
| */ | |
| public function uninstall() { | |
| // droping all tables | |
| require_once self::$path . 'includes/install.php'; | |
| $install = new vxg_install_nimble(); | |
| do_action( 'plugin_status_' . $install->id ); | |
| $install->remove_data(); | |
| $install->remove_roles(); | |
| } | |
| /** | |
| * deactivate | |
| * | |
| * @param mixed $action | |
| */ | |
| public function deactivate( $action = 'deactivate' ) { | |
| do_action( 'plugin_status_' . self::$type, $action ); | |
| } | |
| /** | |
| * activate plugin | |
| */ | |
| public function activate() { | |
| $this->plugin_api( true ); | |
| do_action( 'plugin_status_' . self::$type, 'activate' ); | |
| } | |
| /** | |
| * display admin notice | |
| * | |
| * @param mixed $type | |
| * @param mixed $message | |
| * @param mixed $id | |
| */ | |
| public static function display_msg( $type, $message, $id = '' ) { | |
| // exp | |
| global $wp_version; | |
| $ver = floatval( $wp_version ); | |
| if ( $type == 'admin' ) { | |
| ?> | |
| <div class="error vx_notice below-h2 notice is-dismissible" data-id="<?php echo $id; ?>"><p><span class="dashicons dashicons-megaphone"></span> <b><?php _e( 'Contact Form Entries Plugin', 'contact-form-entries' ); ?>. </b> <?php echo wp_kses_post( $message ); ?> </p> | |
| </div> | |
| <?php | |
| } else { | |
| ?> | |
| <tr class="plugin-update-tr"><td colspan="5" class="plugin-update"> | |
| <style type="text/css"> .vx_msg a{color: #fff; text-decoration: underline;} .vx_msg a:hover{color: #eee} </style> | |
| <div style="background-color: rgba(224, 224, 224, 0.5); padding: 9px; margin: 0px 10px 10px 28px "><div style="background-color: #d54d21; padding: 5px 10px; color: #fff" class="vx_msg"> <span class="dashicons dashicons-info"></span> <?php echo wp_kses_post( $message ); ?> | |
| </div></div></td></tr> | |
| <?php | |
| } | |
| } | |
| public function do_actions() { | |
| if ( ! is_object( self::$plugin ) ) { | |
| $this->plugin_api(); } | |
| if ( method_exists( self::$plugin, 'valid_addons' ) ) { | |
| return self::$plugin->valid_addons(); | |
| } | |
| return false; | |
| } | |
| public static function get_upload_folder() { | |
| $folder = get_option( 'crm_perks_upload_folder', '' ); | |
| if ( empty( $folder ) ) { | |
| $folder = uniqid() . wp_rand( 999999, 999999999 ) . wp_rand( 9999, 9999999 ); | |
| update_option( 'crm_perks_upload_folder', $folder ); | |
| } | |
| return self::$upload_folder . '/' . $folder; | |
| } | |
| public static function get_upload_dir() { | |
| $upload_dir = wp_upload_dir(); | |
| $plugin_folder = self::get_upload_folder(); | |
| $time = current_time( 'mysql' ); | |
| $y = substr( $time, 0, 4 ); | |
| $m = substr( $time, 5, 2 ); | |
| $folder = $y . '/' . $m; | |
| $upload_path = $upload_dir['basedir'] . '/' . $plugin_folder . '/' . $folder; | |
| if ( ! file_exists( $upload_path ) ) { | |
| $dir = wp_mkdir_p( $upload_path ); | |
| if ( ! $dir ) { | |
| $upload_path = ''; } else { | |
| $files = [ $upload_path . '/index.html', $upload_dir['basedir'] . '/' . $plugin_folder . '/' . $y . '/index.html' ]; | |
| foreach ( $files as $file_name ) { | |
| if ( ! file_exists( $file_name ) ) { | |
| if ( $file_handle = @fopen( $file_name, 'w' ) ) { | |
| fwrite( $file_handle, '' ); | |
| fclose( $file_handle ); | |
| } | |
| } | |
| } | |
| } | |
| } | |
| return [ | |
| 'path' => $upload_path, | |
| 'folder' => $folder, | |
| 'folder_name' => self::$upload_folder, | |
| 'url' => $upload_dir['baseurl'] . '/' . $plugin_folder . '/', | |
| 'dir' => $upload_dir['basedir'] . '/' . $plugin_folder . '/', | |
| 'basedir' => $upload_dir['basedir'], | |
| ]; | |
| } | |
| /** | |
| * Returns true if the current page is an Feed pages. Returns false if not | |
| * | |
| * @param mixed $page | |
| */ | |
| public static function is_crm_page( $page = '' ) { | |
| if ( empty( $page ) ) { | |
| $page = self::post( 'page' ); | |
| } | |
| $tab = self::post( 'tab' ); | |
| if ( $page == self::$id ) { | |
| if ( $tab == 'entries' ) { | |
| return true; | |
| } elseif ( $tab == 'settings' ) { | |
| $ret = true; | |
| if ( ! empty( $_GET['section'] ) && $_GET['section'] != 'entries_settings' ) { | |
| $ret = false; | |
| } | |
| return $ret; | |
| } | |
| } | |
| return false; | |
| } | |
| public static function get_entry( $lead_id ) { | |
| $data = self::get_data_object(); | |
| return $data->get_lead( $lead_id ); | |
| } | |
| public static function get_entry_detail( $lead_id ) { | |
| $data = self::get_data_object(); | |
| return $data->get_lead_detail( $lead_id ); | |
| } | |
| public static function get_forms() { | |
| // function submission($components, $contact_form, $mail) | |
| // prepare list of contact forms -- | |
| // *NOTE* CF7 changed how it stores forms at some point, support legacy? | |
| // $all_forms=get_option('vxcf_all_forms',array()); //disable saving forms | |
| $all_forms = []; | |
| if ( ! is_array( $all_forms ) ) { | |
| $all_forms = []; | |
| } | |
| if ( class_exists( 'WPCF7_ContactForm' ) ) { | |
| if ( ! function_exists( 'wpcf7_contact_forms' ) ) { | |
| $cf_forms = get_posts( | |
| [ | |
| 'numberposts' => -1, | |
| 'orderby' => 'ID', | |
| 'order' => 'ASC', | |
| 'post_type' => 'wpcf7_contact_form', | |
| ] | |
| ); | |
| } else { | |
| $forms = wpcf7_contact_forms(); | |
| $cf_forms = []; | |
| if ( count( $forms ) > 0 ) { | |
| foreach ( $forms as $k => $f ) { | |
| $v = new stdClass(); | |
| if ( isset( $f->id ) ) { | |
| $v->ID = $f->id; // as serialized option data | |
| } | |
| if ( isset( $f->title ) ) { | |
| $v->post_title = $f->title; // as serialized option data | |
| } | |
| $cf_forms[] = $v; | |
| } | |
| } | |
| } | |
| $forms_arr = isset( $all_forms['cf']['forms'] ) && is_array( $all_forms['cf']['forms'] ) ? $all_forms['cf']['forms'] : []; // do not show deleted forms | |
| if ( is_array( $cf_forms ) && count( $cf_forms ) > 0 ) { | |
| $forms_arr = []; | |
| foreach ( $cf_forms as $form ) { | |
| if ( ! empty( $form->post_title ) ) { | |
| $forms_arr[ $form->ID ] = $form->post_title; | |
| } | |
| } | |
| $all_forms['cf'] = [ | |
| 'label' => 'Contact Form 7', | |
| 'forms' => $forms_arr, | |
| ]; | |
| } | |
| } | |
| if ( class_exists( 'cfx_form' ) ) { | |
| $forms = cfx_form::get_forms(); | |
| $forms_arr = []; | |
| if ( is_array( $forms ) && count( $forms ) > 0 ) { | |
| foreach ( $forms as $form ) { | |
| if ( ! empty( $form['id'] ) ) { | |
| $forms_arr[ $form['id'] ] = ! empty( $form['name'] ) ? $form['name'] : '#' . $form['id']; | |
| } | |
| } | |
| $all_forms['vf'] = [ | |
| 'label' => 'CRM Perks Forms', | |
| 'forms' => $forms_arr, | |
| ]; | |
| } | |
| } | |
| if ( class_exists( 'GFFormsModel' ) ) { | |
| $gf_forms = GFFormsModel::get_forms(); | |
| $forms_arr = []; | |
| if ( is_array( $gf_forms ) && count( $gf_forms ) > 0 ) { | |
| foreach ( $gf_forms as $form ) { | |
| if ( ! empty( $form->title ) ) { | |
| $forms_arr[ $form->id ] = $form->title; | |
| } | |
| } | |
| $all_forms['gf'] = [ | |
| 'label' => 'Gravity Forms', | |
| 'forms' => $forms_arr, | |
| ]; | |
| } | |
| } | |
| // formidable | |
| if ( class_exists( 'FrmForm' ) ) { | |
| $gf_forms = FrmForm::getAll( | |
| [ | |
| 'status' => 'published', | |
| 'is_template' => '0', | |
| ] | |
| ); | |
| $forms_arr = isset( $all_forms['fd']['forms'] ) && is_array( $all_forms['fd']['forms'] ) ? $all_forms['fd']['forms'] : []; | |
| if ( is_array( $gf_forms ) && count( $gf_forms ) > 0 ) { | |
| foreach ( $gf_forms as $form ) { | |
| if ( ! empty( $form->id ) ) { | |
| $forms_arr[ $form->id ] = $form->name; | |
| } | |
| } | |
| $all_forms['fd'] = [ | |
| 'label' => 'Formidable Forms', | |
| 'forms' => $forms_arr, | |
| ]; | |
| } | |
| } | |
| if ( class_exists( 'siContactForm' ) ) { | |
| // fast secure form | |
| $global = get_option( 'fs_contact_global' ); | |
| $fs_forms = []; | |
| if ( isset( $global['form_list'] ) ) { | |
| $fs_forms = $global['form_list']; | |
| } | |
| $forms_arr = isset( $all_forms['fs']['forms'] ) && is_array( $all_forms['fs']['forms'] ) ? $all_forms['fs']['forms'] : []; | |
| if ( is_array( $fs_forms ) && count( $fs_forms ) > 0 ) { | |
| foreach ( $fs_forms as $k => $v ) { | |
| $forms_arr[ $k ] = $v; | |
| } | |
| $all_forms['fs'] = [ | |
| 'label' => 'Fast Secure Contact Forms', | |
| 'forms' => $forms_arr, | |
| ]; | |
| } | |
| } | |
| if ( class_exists( 'Grunion_Contact_Form_Plugin' ) ) { | |
| global $wpdb; | |
| $sql = "Select * from {$wpdb->postmeta} where meta_key='_g_feedback_shortcode' limit 300"; | |
| $posts = $wpdb->get_results( $sql, ARRAY_A ); | |
| $forms_arr = isset( $all_forms['jp']['forms'] ) && is_array( $all_forms['jp']['forms'] ) ? $all_forms['jp']['forms'] : []; | |
| if ( is_array( $posts ) && count( $posts ) > 0 ) { | |
| foreach ( $posts as $k => $v ) { | |
| $title = get_the_title( $v['post_id'] ); | |
| if ( ! empty( $title ) ) { | |
| $forms_arr[ $v['post_id'] ] = $title; | |
| } | |
| } | |
| $all_forms['jp'] = [ | |
| 'label' => 'Jetpack Contact Forms', | |
| 'forms' => $forms_arr, | |
| ]; | |
| } | |
| } | |
| if ( class_exists( 'Ninja_Forms' ) && method_exists( Ninja_Forms(), 'form' ) ) { | |
| $forms_arr = isset( $all_forms['na']['forms'] ) && is_array( $all_forms['na']['forms'] ) ? $all_forms['na']['forms'] : []; | |
| $sql = "SELECT `id`, `title`, `created_at` FROM `{$wpdb->prefix}nf3_forms` ORDER BY `title`"; | |
| $nf_forms = $wpdb->get_results( $sql, ARRAY_A ); | |
| if ( is_array( $nf_forms ) && count( $nf_forms ) > 0 ) { | |
| foreach ( $nf_forms as $form ) { | |
| if ( ! empty( $form['id'] ) ) { | |
| $forms_arr[ $form['id'] ] = $form['title']; | |
| } | |
| } | |
| $all_forms['na'] = [ | |
| 'label' => 'Ninja Forms', | |
| 'forms' => $forms_arr, | |
| ]; | |
| } | |
| } | |
| if ( function_exists( 'iphorm_get_all_forms' ) ) { | |
| $nf_forms = iphorm_get_all_forms(); | |
| $forms_arr = isset( $all_forms['qu']['forms'] ) && is_array( $all_forms['qu']['forms'] ) ? $all_forms['qu']['forms'] : []; | |
| if ( is_array( $nf_forms ) && count( $nf_forms ) > 0 ) { | |
| foreach ( $nf_forms as $form ) { | |
| if ( ! empty( $form['id'] ) ) { | |
| $forms_arr[ $form['id'] ] = $form['name']; | |
| } | |
| } | |
| $all_forms['qu'] = [ | |
| 'label' => 'Quform Forms', | |
| 'forms' => $forms_arr, | |
| ]; | |
| } | |
| } | |
| if ( function_exists( 'cforms2_insert' ) ) { | |
| $settings = get_option( 'cforms_settings' ); | |
| $count = $settings['global']['cforms_formcount']; | |
| $forms_arr = isset( $all_forms['c2']['forms'] ) && is_array( $all_forms['c2']['forms'] ) ? $all_forms['c2']['forms'] : []; | |
| for ( $i = 1; $i <= $count; $i++ ) { | |
| $j = ( $i > 1 ) ? $i : ''; | |
| $forms_arr[ $j ] = stripslashes( $settings[ 'form' . $j ][ 'cforms' . $j . '_fname' ] ); | |
| } | |
| $all_forms['c2'] = [ | |
| 'label' => 'CForms2 Forms', | |
| 'forms' => $forms_arr, | |
| ]; | |
| } | |
| if ( class_exists( 'Caldera_Forms_Forms' ) ) { | |
| $nf_forms = Caldera_Forms_Forms::get_forms( true, true ); | |
| $forms_arr = isset( $all_forms['ca']['forms'] ) && is_array( $all_forms['ca']['forms'] ) ? $all_forms['ca']['forms'] : []; | |
| if ( is_array( $nf_forms ) && count( $nf_forms ) > 0 ) { | |
| foreach ( $nf_forms as $form ) { | |
| if ( ! empty( $form['ID'] ) ) { | |
| $forms_arr[ $form['ID'] ] = $form['name']; | |
| } | |
| } | |
| $all_forms['ca'] = [ | |
| 'label' => 'Caldera Forms', | |
| 'forms' => $forms_arr, | |
| ]; | |
| } | |
| } | |
| if ( class_exists( 'UFBL_Model' ) ) { | |
| $forms_arr = isset( $all_forms['ul']['forms'] ) && is_array( $all_forms['ul']['forms'] ) ? $all_forms['ul']['forms'] : []; | |
| $ul_forms = UFBL_Model::get_all_forms(); | |
| if ( is_array( $ul_forms ) && count( $ul_forms ) > 0 ) { | |
| foreach ( $ul_forms as $k => $v ) { | |
| $forms_arr[ $v->form_id ] = $v->form_title; | |
| } | |
| } | |
| $all_forms['ul'] = [ | |
| 'label' => 'Ultimate Contact Form Builder', | |
| 'forms' => $forms_arr, | |
| ]; | |
| } | |
| if ( function_exists( 'cntctfrm_settings' ) ) { | |
| $all_forms['be'] = [ | |
| 'label' => 'BestSoft Contact Forms', | |
| 'forms' => [ '' => 'Default Contact Form' ], | |
| ]; | |
| } | |
| if ( function_exists( 'wpforms' ) && method_exists( wpforms()->form, 'get' ) ) { | |
| $forms_arr = wpforms()->form->get( '' ); | |
| if ( ! empty( $forms_arr ) ) { | |
| $forms = []; | |
| foreach ( $forms_arr as $v ) { | |
| $forms[ $v->ID ] = $v->post_title; | |
| } | |
| $all_forms['wp'] = [ | |
| 'label' => 'WP Forms', | |
| 'forms' => $forms, | |
| ]; | |
| } | |
| } | |
| ksort( $all_forms ); | |
| return apply_filters( 'vx_entries_plugin_forms', $all_forms ); | |
| } | |
| public static function forms_list( $forms ) { | |
| $forms_arr = []; | |
| foreach ( $forms as $k => $v ) { | |
| if ( in_array( $k, [ 'vf' ] ) ) { | |
| continue; } | |
| if ( ! empty( $v['forms'] ) ) { | |
| foreach ( $v['forms'] as $form_id => $form_title ) { | |
| $forms_arr[ $k . '_' . $form_id ] = $v['label'] . ' - ' . $form_title; | |
| } | |
| } | |
| } | |
| return $forms_arr; | |
| } | |
| /** | |
| * form fields | |
| * | |
| * @param mixed $form_id | |
| */ | |
| public static function get_form_fields( $form_id ) { | |
| $form_arr = explode( '_', $form_id ); | |
| $type = $id = ''; | |
| $fields = []; | |
| if ( isset( $form_arr[0] ) ) { | |
| $type = $form_arr[0]; | |
| } | |
| if ( isset( $form_arr[1] ) ) { | |
| $id = $form_arr[1]; | |
| } | |
| switch ( $type ) { | |
| case 'cf': | |
| if ( method_exists( 'WPCF7_ShortcodeManager', 'get_instance' ) || method_exists( 'WPCF7_FormTagsManager', 'get_instance' ) ) { | |
| $form_text = get_post_meta( $id, '_form', true ); | |
| if ( method_exists( 'WPCF7_FormTagsManager', 'get_instance' ) ) { | |
| $manager = WPCF7_FormTagsManager::get_instance(); | |
| $contents = $manager->scan( $form_text ); | |
| $tags = $manager->get_scanned_tags(); | |
| } elseif ( method_exists( 'WPCF7_ShortcodeManager', 'get_instance' ) ) { | |
| $manager = WPCF7_ShortcodeManager::get_instance(); | |
| $contents = $manager->do_shortcode( $form_text ); | |
| $tags = $manager->get_scanned_tags(); | |
| } | |
| if ( is_array( $tags ) ) { | |
| foreach ( $tags as $tag ) { | |
| if ( is_object( $tag ) ) { | |
| $tag = (array) $tag; } | |
| if ( ! empty( $tag['name'] ) ) { | |
| $id = str_replace( ' ', '', $tag['name'] ); | |
| $field = [ 'name' => $id ]; | |
| $field['label'] = ucwords( str_replace( [ '-', '_' ], ' ', $tag['name'] ) ); | |
| $field['type_'] = $tag['type']; | |
| $field['type'] = $tag['basetype']; | |
| $field['req'] = strpos( $tag['type'], '*' ) !== false ? 'true' : ''; | |
| if ( ! empty( $tag['raw_values'] ) ) { | |
| $ops = []; | |
| foreach ( $tag['raw_values'] as $v ) { | |
| if ( strpos( $v, '|' ) !== false ) { | |
| $v_arr = explode( '|', $v ); | |
| if ( ! isset( $v_arr[1] ) ) { | |
| $v_arr[1] = $v_arr[0]; } | |
| $ops[] = [ | |
| 'label' => $v_arr[0], | |
| 'value' => $v_arr[1], | |
| ]; | |
| } else { | |
| $ops[] = [ | |
| 'label' => $v, | |
| 'value' => $v, | |
| ]; | |
| } | |
| } | |
| $field['values'] = $ops; | |
| } | |
| $fields[ $id ] = $field; | |
| } | |
| } | |
| } | |
| } | |
| break; | |
| case 'fs': | |
| if ( method_exists( 'FSCF_Util', 'get_form_options' ) ) { | |
| $options = FSCF_Util::get_form_options( $id, true ); | |
| if ( isset( $options['fields'] ) && is_array( $options['fields'] ) ) { | |
| $fs_fields = $options['fields']; | |
| foreach ( $fs_fields as $field ) { | |
| $field['name'] = $field['slug']; | |
| if ( $field['type'] == 'attachment' ) { | |
| $field['type'] = 'file'; | |
| } elseif ( $field['type'] == 'checkbox-multiple' ) { | |
| $field['type'] = 'checkbox'; | |
| } elseif ( $field['type'] == 'select-multiple' ) { | |
| $field['type'] = 'multiselect'; | |
| } | |
| if ( isset( $field['options'] ) ) { | |
| $opts_array = explode( "\n", $field['options'] ); | |
| $options_arr = []; | |
| $i = 0; | |
| foreach ( $opts_array as $k => $v ) { | |
| $i++; | |
| if ( $field['type'] == 'select' && preg_match( '/^\[(.*)]$/', $v, $matches ) ) { | |
| $v = $matches[1]; | |
| $i = 0; | |
| } elseif ( preg_match( '/^(.*)(==)(.*)$/', $v, $matches ) ) { | |
| // is this key==value set? Just display the value | |
| $v = $matches[3]; | |
| } | |
| $options_arr[] = [ | |
| 'text' => $v, | |
| 'value' => $i, | |
| ]; | |
| } | |
| $field['values'] = $options_arr; | |
| } | |
| $fields[] = $field; | |
| } | |
| } | |
| } | |
| break; | |
| case 'jp': | |
| $text = get_post_meta( $id, '_g_feedback_shortcode', true ); | |
| $pattern = '/\[(\[?)(contact-field)(?![\w-])([^\]\/]*(?:\/(?!\])[^\]\/]*)*?)(?:(\/)\]|\](?:([^\[]*+(?:\[(?!\/\2\])[^\[]*+)*+)\[\/\2\])?)(\]?)/'; | |
| preg_match_all( $pattern, $text, $matches, PREG_SET_ORDER ); | |
| if ( is_array( $matches ) && count( $matches ) > 0 ) { | |
| foreach ( $matches as $m ) { | |
| if ( isset( $m[3] ) ) { | |
| $str = trim( $m[3] ); | |
| $field = shortcode_parse_atts( trim( $m[3] ) ); | |
| $field['req'] = $field['required'] == '1' ? 'true' : ''; | |
| if ( isset( $field['type'] ) ) { | |
| $field['values'] = [ | |
| [ | |
| 'text' => '', | |
| 'value' => 'Yes', | |
| ], | |
| ]; | |
| if ( $field['type'] == 'checkbox-multiple' ) { | |
| $field['type'] = 'checkbox'; | |
| } | |
| } | |
| if ( ! empty( $field['options'] ) ) { | |
| $field['values'] = explode( ',', $field['options'] ); | |
| } | |
| $field['name'] = $field['label']; | |
| $fields[ $field['label'] ] = $field; | |
| } | |
| } | |
| } | |
| break; | |
| case 'na': | |
| if ( class_exists( 'Ninja_Forms' ) ) { | |
| $form_fields = Ninja_Forms()->form( $id )->get_fields(); | |
| foreach ( $form_fields as $obj ) { | |
| $field = []; | |
| if ( is_object( $obj ) ) { | |
| $field = $obj->get_settings(); | |
| $field['id'] = $obj->get_id(); | |
| } | |
| $arr = [ 'name' => $field['id'] ]; | |
| $type = $field['type']; | |
| if ( $type == 'textbox' ) { | |
| $type = 'text'; } | |
| if ( $type == 'starrating' ) { | |
| $type = 'text'; } | |
| if ( $type == 'file_upload' ) { | |
| $type = 'file'; } | |
| if ( in_array( $type, [ 'spam', 'confirm' ] ) || ! isset( $field['required'] ) ) { | |
| continue; } | |
| if ( $type == 'checkbox' ) { | |
| $arr['values'] = [ | |
| [ | |
| 'text' => $field['label'], | |
| 'value' => '1', | |
| ], | |
| ]; | |
| } | |
| if ( in_array( $type, [ 'listmultiselect', 'listcheckbox', 'listradio', 'listselect' ] ) ) { | |
| $type = ltrim( $type, 'list' ); | |
| $vals = []; | |
| if ( ! empty( $field['options'] ) ) { | |
| foreach ( $field['options'] as $v ) { | |
| $vals[] = [ | |
| 'text' => $v['label'], | |
| 'value' => $v['value'], | |
| ]; | |
| } | |
| } | |
| $arr['values'] = $vals; | |
| } | |
| $arr['type'] = $type; | |
| $arr['label'] = $field['label']; | |
| $arr['req'] = ! empty( $field['required'] ) ? 'true' : 'false'; | |
| $fields[ $field['id'] ] = $arr; | |
| } | |
| } | |
| break; | |
| case 'fd': | |
| global $wpdb; | |
| $table = $wpdb->prefix . 'frm_fields'; | |
| $sql = $wpdb->prepare( "Select * from $table where form_id=%d", $id ); | |
| $fields_arr = $wpdb->get_results( $sql, ARRAY_A ); | |
| if ( count( $fields_arr ) > 0 ) { | |
| foreach ( $fields_arr as $field ) { | |
| $field['label'] = $field['name']; | |
| $field['name'] = $field['id']; | |
| if ( ! empty( $field['options'] ) ) { | |
| $field['values'] = maybe_unserialize( $field['options'] ); | |
| } | |
| $fields[] = $field; | |
| } | |
| } | |
| break; | |
| case 'na_test': | |
| global $ninja_forms_fields; | |
| if ( is_array( $ninja_forms_fields ) && count( $ninja_forms_fields ) > 0 ) { | |
| foreach ( $ninja_forms_fields as $field ) { | |
| $field['type'] = trim( $field['type'], '_' ); | |
| if ( ! empty( $field['options'] ) ) { | |
| $field['values'] = maybe_unserialize( $field['options'] ); | |
| } | |
| $fields[] = $field; | |
| } | |
| } | |
| break; | |
| case 'c2': | |
| $settings = get_option( 'cforms_settings' ); | |
| $count = $settings['global']['cforms_formcount']; | |
| $forms = []; | |
| for ( $i = 1; $i < 500; $i++ ) { | |
| if ( isset( $settings[ 'form' . $id ][ 'cforms' . $id . '_count_field_' . $i ] ) ) { | |
| $field_str = stripslashes( $settings[ 'form' . $id ][ 'cforms' . $id . '_count_field_' . $i ] ); | |
| $field_stat = explode( '$#$', $field_str ); | |
| $field_name = $field_stat[0]; | |
| $field_type = $field_stat[1]; | |
| $field_required = $field_stat[2] == '1' ? 'true' : ''; | |
| $field = [ 'req' => $field_required ]; | |
| if ( in_array( $field_type, [ 'multiselectbox', 'selectbox', 'radiobuttons', 'checkbox', 'checkboxgroup', 'ccbox', 'emailtobox' ] ) ) { | |
| $field_name_arr = explode( '#', $field_name ); | |
| $field_name = $field_name_arr[0]; | |
| unset( $field_name_arr[0] ); | |
| $options = []; | |
| if ( count( $field_name_arr ) > 0 ) { | |
| foreach ( $field_name_arr as $v ) { | |
| $v = explode( '|', $v ); | |
| $option = []; | |
| $option['value'] = $option['label'] = $v[0]; | |
| if ( isset( $v[1] ) && $field_type != 'selectbox' ) { | |
| $option['value'] = $v[1]; | |
| } | |
| $options[] = $option; | |
| } | |
| } | |
| $field['values'] = $options; | |
| } | |
| if ( in_array( $field_type, [ 'checkbox', 'checkboxgroup' ] ) ) { | |
| $field_type = 'checkbox'; | |
| } elseif ( in_array( $field_type, [ 'selectbox', 'ccbox', 'emailtobox' ] ) ) { | |
| $field_type = 'select'; | |
| } elseif ( in_array( $field_type, [ 'multiselectbox' ] ) ) { | |
| $field_type = 'multiselect'; | |
| } elseif ( in_array( $field_type, [ 'radiobuttons' ] ) ) { | |
| $field_type = 'radio'; | |
| } elseif ( in_array( $field_type, [ 'upload' ] ) ) { | |
| $field_type = 'file'; | |
| } | |
| if ( ! empty( $field_name ) ) { | |
| $field_name = explode( '|', $field_name ); | |
| $field_name = $field_name[0]; | |
| $field['label'] = $field_name; | |
| $field['name'] = $i; | |
| $field['type'] = $field_type; | |
| $fields[ $i ] = $field; | |
| } | |
| } else { | |
| break; | |
| } | |
| } | |
| break; | |
| case 'ca': | |
| if ( class_exists( 'Caldera_Forms' ) ) { | |
| $field_types = Caldera_Forms::get_field_types(); | |
| $form = get_option( $id ); | |
| if ( isset( $form['fields'] ) && is_array( $form['fields'] ) && count( $form['fields'] ) > 0 ) { | |
| foreach ( $form['fields'] as $field ) { | |
| $type = $field['type']; | |
| $field_id = $field['ID']; | |
| if ( isset( $field_types[ $type ] ) ) { | |
| if ( ! isset( $form['fields'][ $field_id ] ) || ! isset( $field_types[ $form['fields'][ $field_id ]['type'] ] ) ) { | |
| continue; | |
| } | |
| if ( isset( $field_types[ $form['fields'][ $field_id ]['type'] ]['setup']['not_supported'] ) ) { | |
| if ( in_array( 'entry_list', $field_types[ $form['fields'][ $field_id ]['type'] ]['setup']['not_supported'] ) ) { | |
| continue; | |
| } | |
| } | |
| if ( $type == 'paragraph' ) { | |
| $type = 'textarea'; | |
| } elseif ( $type == 'filtered_select2' ) { | |
| $type = 'select'; | |
| } elseif ( $type == 'advanced_file' ) { | |
| $type = 'file'; | |
| } | |
| $req = false; | |
| if ( isset( $field['data']['required'] ) ) { | |
| $req = $field['data']['required'] == 1 ? 'true' : 'false'; | |
| } | |
| $field['req'] = $req; | |
| if ( isset( $field['config']['option'] ) && is_array( $field['config']['option'] ) ) { | |
| $options = []; | |
| foreach ( $field['config']['option'] as $k => $v ) { | |
| if ( $v['value'] == '' ) { | |
| $v['value'] = $v['label']; | |
| } | |
| $options[] = $v; | |
| } | |
| $field['values'] = $options; | |
| } | |
| $field['type'] = $type; | |
| $field['name'] = $field_id; | |
| $fields[ $field_id ] = $field; | |
| } | |
| } | |
| } | |
| } | |
| break; | |
| case 'qu': | |
| if ( function_exists( 'iphorm_get_form_config' ) ) { | |
| $form = iphorm_get_form_config( $id ); | |
| if ( isset( $form['elements'] ) && is_array( $form['elements'] ) ) { | |
| foreach ( $form['elements'] as $k => $v ) { | |
| if ( isset( $v['save_to_database'] ) && $v['save_to_database'] == true ) { | |
| if ( isset( $v['options'] ) ) { | |
| $v['values'] = $v['options']; | |
| } | |
| $v['req'] = isset( $v['required'] ) && $v['required'] == true ? 'true' : 'false'; | |
| $v['name'] = $v['id']; | |
| $fields[] = $v; | |
| } | |
| } | |
| } | |
| } | |
| break; | |
| case 'be': | |
| $be_fields = [ | |
| 'name' => 'Name', | |
| 'email' => 'Email', | |
| 'address' => 'Address', | |
| 'phone' => 'Phone Number', | |
| 'subject' => 'Subject', | |
| 'message' => 'Message', | |
| 'file' => 'Attachment', | |
| ]; | |
| $fields = []; | |
| foreach ( $be_fields as $k => $v ) { | |
| $type = 'text'; | |
| if ( in_array( $k, [ 'subject', 'address' ] ) ) { | |
| $type = 'textarea'; | |
| } elseif ( $k == 'file' ) { | |
| $type = 'file'; | |
| } | |
| $fields[ $k ] = [ | |
| 'name' => $k, | |
| 'label' => $v, | |
| 'type' => $type, | |
| ]; | |
| } | |
| break; | |
| case 'vxad': | |
| global $vxcf_crm; | |
| if ( method_exists( $vxcf_crm, 'get_form_fields' ) ) { | |
| $fields = $vxcf_crm->get_form_fields( true ); | |
| } | |
| break; | |
| case 'vf': | |
| if ( method_exists( 'cfx_form', 'get_form' ) ) { | |
| $fields = []; | |
| $form = cfx_form::get_form( $id, true ); | |
| if ( ! empty( $form['fields'] ) ) { | |
| foreach ( $form['fields'] as $f_id => $tag ) { | |
| if ( ! empty( $tag['label'] ) ) { | |
| $field = [ 'id' => $f_id ]; | |
| $field['name'] = $f_id; | |
| $field['label'] = $tag['label']; | |
| $field['type'] = $tag['type']; | |
| $field['req'] = ! empty( $tag['required'] ) ? 'true' : ''; | |
| if ( ! empty( $tag['options'] ) ) { | |
| $field['values'] = $tag['options']; | |
| } | |
| $fields[ $f_id ] = $field; | |
| } | |
| } | |
| } | |
| } | |
| break; | |
| case 'ul': | |
| if ( method_exists( 'UFBL_Model', 'get_form_detail' ) ) { | |
| $form = UFBL_Model::get_form_detail( $id ); | |
| if ( ! empty( $form['form_detail'] ) ) { | |
| $ul_fields = maybe_unserialize( $form['form_detail'] ); | |
| if ( is_array( $ul_fields['field_data'] ) && count( $ul_fields['field_data'] ) > 0 ) { | |
| foreach ( $ul_fields['field_data'] as $k => $field ) { | |
| if ( isset( $field['error_message'] ) ) { | |
| $type = $field['field_type']; | |
| if ( $type == 'dropdown' ) { | |
| $type = 'select'; | |
| if ( isset( $field['multiple'] ) && $field['multiple'] == '1' ) { | |
| $type = 'multiselect'; | |
| } | |
| } | |
| $field['type'] = $type; | |
| $field['name'] = $k; | |
| $field['label'] = $field['field_label']; | |
| $field['req'] = isset( $field['required'] ) && $field['required'] == '1' ? 'true' : ''; | |
| if ( isset( $field['option'] ) ) { | |
| $field['values'] = $field['option']; | |
| } | |
| $fields[ $k ] = $field; | |
| } | |
| } | |
| } | |
| } | |
| } | |
| break; | |
| case 'gf': | |
| if ( method_exists( 'RGFormsModel', 'get_form_meta' ) ) { | |
| $form = RGFormsModel::get_form_meta( $id ); | |
| $fields = []; | |
| if ( isset( $form['fields'] ) && is_array( $form['fields'] ) && count( $form['fields'] ) > 0 ) { | |
| foreach ( $form['fields'] as $field ) { | |
| $tag = [ | |
| 'id' => $field->id, | |
| 'name' => $field->id . '', | |
| 'label' => $field->label, | |
| ]; | |
| $type = $field->type; | |
| if ( $type == 'fileupload' ) { | |
| $type = 'file'; | |
| } elseif ( $type == 'text' ) { | |
| $type = 'textarea'; | |
| } elseif ( $type == 'website' ) { | |
| $type = 'url'; | |
| } elseif ( $type == 'phone' ) { | |
| $type = 'tel'; | |
| } elseif ( $type == 'list' ) { | |
| $type = 'textarea'; | |
| } | |
| $tag['req'] = $field->isRequired !== false ? 'true' : ''; | |
| if ( isset( $field->choices ) ) { | |
| $tag['values'] = $field->choices; | |
| } | |
| $tag['type'] = $type; | |
| if ( in_array( $type, [ 'name', 'address' ] ) && isset( $field->inputs ) && count( $field->inputs ) > 0 ) { | |
| foreach ( $field->inputs as $k => $v ) { | |
| if ( isset( $v['isHidden'] ) ) { | |
| continue; | |
| } | |
| $v['name'] = (string) $v['id']; | |
| $v['type'] = $field['type']; | |
| if ( isset( $v['choices'] ) && is_array( $v['choices'] ) && count( $v['choices'] ) > 0 ) { | |
| $v['type'] = 'select'; | |
| $v['values'] = $v['choices']; | |
| } | |
| $fields[] = $v; | |
| } | |
| } else { | |
| $fields[] = $tag; | |
| } | |
| } | |
| } | |
| } | |
| break; | |
| case 'wc': | |
| $json = '{"billing_first_name":"First name","billing_last_name":"Last name","billing_company":"Company name","billing_country":"Country","billing_address_1":"Address","billing_address_2":"Address 2","billing_city":"Town \/ City","billing_state":"State \/ County","billing_postcode":"Postcode \/ ZIP","billing_phone":"Phone","billing_email":"Email address","shipping_first_name":"First name","shipping_last_name":"Last name","shipping_company":"Company name","shipping_country":"Country","shipping_address_1":"Address","shipping_address_2":"Address 2","shipping_city":"Town \/ City","shipping_state":"State \/ County","shipping_postcode":"Postcode \/ ZIP","order_note":"Order Note","order_id":"Order ID","_customer_user":"User ID","qty":"Quantity","_order_total":"Order Total"}'; | |
| $arr = json_decode( $json, true ); | |
| $fields = []; | |
| foreach ( $arr as $k => $v ) { | |
| $label = 'Shipping '; | |
| if ( strpos( $k, 'billing' ) !== false ) { | |
| $label = 'Billing '; } | |
| $field = [ | |
| 'id' => '_' . $k, | |
| 'name' => '_' . $k, | |
| 'label' => $label . $v, | |
| 'type' => 'text', | |
| ]; | |
| if ( $k == 'billing_email' ) { | |
| $field['type'] = 'email'; | |
| } elseif ( $k == 'billing_phone' ) { | |
| $field['type'] = 'tel'; | |
| } elseif ( in_array( $k, [ 'billing_address_1', 'billing_address_2', 'shipping_address_1', 'shipping_address_2', 'order_note' ] ) ) { | |
| $field['type'] = 'textarea'; | |
| } elseif ( in_array( $k, [ 'billing_state', 'shipping_state' ] ) ) { | |
| $field['type'] = 'state'; | |
| } elseif ( in_array( $k, [ 'billing_country', 'shipping_country' ] ) ) { | |
| $field['type'] = 'country'; | |
| } | |
| $fields[] = $field; | |
| } | |
| break; | |
| case 'wp': | |
| if ( function_exists( 'wpforms' ) && method_exists( wpforms()->form, 'get' ) ) { | |
| $forms_arr = wpforms()->form->get( $id ); | |
| if ( ! empty( $forms_arr ) ) { | |
| $form = json_decode( $forms_arr->post_content, true ); | |
| $fields = []; | |
| foreach ( $form['fields'] as $v ) { | |
| $type = $v['type']; | |
| if ( $type == 'name' ) { | |
| $type = 'text'; } | |
| if ( $type == 'payment-select' ) { | |
| $type = 'select'; } | |
| if ( $type == 'payment-multiple' ) { | |
| $type = 'radio'; } | |
| if ( $type == 'payment-single' ) { | |
| $type = 'text'; } | |
| if ( $type == 'file-upload' ) { | |
| $type = 'file'; } | |
| if ( $type == 'date-time' ) { | |
| $type = 'date'; } | |
| if ( $type == 'address' ) { | |
| $type = 'textarea'; } | |
| if ( $type == 'phone' ) { | |
| $type = 'tel'; } | |
| if ( in_array( $type, [ 'text', 'textarea', 'email', 'number', 'hidden', 'select', 'checkbox', 'radio', 'url', 'password', 'tel', 'date', 'file' ] ) ) { | |
| $field = [ | |
| 'id' => $v['id'], | |
| 'name' => $v['id'], | |
| 'label' => $v['label'], | |
| 'type' => $type, | |
| ]; | |
| $field['req'] = ! empty( $v['required'] ) ? true : false; | |
| if ( in_array( $type, [ 'radio', 'checkbox', 'select' ] ) ) { | |
| $is_val = false; | |
| if ( in_array( $v['type'], [ 'payment-select', 'payment-multiple' ] ) ) { | |
| $is_val = true; } | |
| $choices = []; | |
| if ( ! empty( $v['choices'] ) ) { | |
| foreach ( $v['choices'] as $c ) { | |
| $c_val = $is_val ? $c['value'] : $c['label']; | |
| $choices[] = [ | |
| 'text' => $c['label'], | |
| 'value' => $c_val, | |
| ]; | |
| } | |
| } | |
| $field['values'] = $choices; | |
| } | |
| $fields[] = $field; | |
| } | |
| } | |
| } | |
| } | |
| break; | |
| } | |
| // allow custom form fields | |
| if ( empty( $fields ) ) { | |
| $fields = apply_filters( 'vx_entries_plugin_form_fields', $fields, $id, $type ); | |
| } | |
| if ( empty( $fields ) ) { | |
| // try from stored option | |
| $option = get_option( 'vxcf_all_fields', [] ); | |
| if ( ! empty( $option[ $type ]['fields'][ $id ] ) && is_array( $option[ $type ]['fields'][ $id ] ) ) { | |
| $fields = $option[ $type ]['fields'][ $id ]; | |
| } | |
| } | |
| $fields_a = []; | |
| if ( is_array( $fields ) && count( $fields ) > 0 ) { | |
| foreach ( $fields as $k => $v ) { | |
| if ( isset( $v['name'] ) && $v['name'] != '' ) { | |
| $v['_id'] = $form_id . '-vxvx-' . preg_replace( '/[^a-zA-Z0-9]+/', '', $v['name'] ); | |
| $fields_a[ $v['name'] ] = $v; | |
| } | |
| } | |
| } | |
| $fields_b = apply_filters( 'vxcf_entries_plugin_fields', $fields_a, $form_id ); | |
| self::$form_fields_temp[ $form_id ] = $fields_b; | |
| return $fields_b; | |
| } | |
| public static function check_option_value( $options, $value ) { | |
| $arr = []; | |
| if ( ! is_array( $value ) ) { | |
| $value = [ $value ]; } | |
| foreach ( $value as $v ) { | |
| $arr[ $v ] = $v; | |
| } | |
| if ( ! empty( $options ) ) { | |
| foreach ( $value as $val ) { | |
| foreach ( $options as $option ) { | |
| if ( is_array( $option ) ) { | |
| if ( isset( $option['text'] ) ) { | |
| $label = $option['text']; | |
| } elseif ( isset( $option['label'] ) ) { | |
| $label = $option['label']; | |
| } | |
| if ( isset( $option['value'] ) && $option['value'] == $val ) { | |
| $arr[ $val ] = $label; | |
| } | |
| } | |
| } | |
| } | |
| } | |
| return array_values( $arr ); | |
| } | |
| public static function get_entries( $form_id, $per_page, $page = '', $req = [] ) { | |
| $data = []; | |
| $data_obj = self::get_data_object(); | |
| if ( ! empty( $form_id ) ) { | |
| $data = $data_obj->get_entries( $form_id, $per_page, $req ); | |
| if ( ! empty( $data['result'] ) ) { | |
| $data['result'] = apply_filters( 'vxcf_entries_plugin_leads_table', $data['result'], $form_id, $page ); | |
| } | |
| } | |
| return $data; | |
| } | |
| /** | |
| * admin_screen_message function. | |
| * | |
| * @param mixed $message | |
| * @param mixed $level | |
| */ | |
| public static function screen_msg( $message, $level = 'updated' ) { | |
| echo '<div class="' . esc_attr( $level ) . ' fade below-h2 notice is-dismissible"><p>'; | |
| echo $message; | |
| echo '</p></div>'; | |
| } | |
| /** | |
| * settings link | |
| * | |
| * @param mixed $escaped | |
| */ | |
| public static function link_to_settings( $tab = 'entries' ) { | |
| $q = [ 'page' => self::$id ]; | |
| if ( ! empty( $tab ) ) { | |
| $q['tab'] = $tab; | |
| } | |
| $url = admin_url( 'admin.php?' . http_build_query( $q ) ); | |
| return $url; | |
| } | |
| public static function set_form_fields( $form_id = '' ) { | |
| if ( empty( self::$form_fields ) ) { | |
| self::$forms = $forms = self::get_forms(); | |
| if ( empty( $form_id ) ) { | |
| $form_id = self::post( 'form_id' ); | |
| } | |
| self::$form_id = esc_sql( $form_id ); | |
| if ( empty( self::$form_id ) && ! empty( self::$forms ) ) { | |
| $form_key = key( $forms ); | |
| if ( isset( $forms[ $form_key ]['forms'] ) && is_array( $forms[ $form_key ]['forms'] ) ) { | |
| $form_i = key( $forms[ $form_key ]['forms'] ); | |
| } | |
| self::$form_id = $form_key . '_' . $form_i; | |
| } | |
| if ( ! empty( self::$form_id ) ) { | |
| $fields_arr = self::get_form_fields( self::$form_id ); | |
| $fields_arr['vxbrowser'] = [ | |
| '_id' => self::$form_id . '-vxvx-vxbrowser', | |
| 'name' => 'vxbrowser', | |
| 'label' => __( 'System', 'contact-form-entries' ), | |
| 'is_main' => 'true', | |
| ]; | |
| $fields_arr['vxurl'] = [ | |
| '_id' => self::$form_id . '-vxvx-vxurl', | |
| 'name' => 'vxurl', | |
| 'label' => __( 'Source', 'contact-form-entries' ), | |
| 'is_main' => 'true', | |
| ]; | |
| $fields_arr['vxscreen'] = [ | |
| '_id' => self::$form_id . '-vxvx-vxscreen', | |
| 'name' => 'vxscreen', | |
| 'label' => __( 'Screen', 'contact-form-entries' ), | |
| 'is_main' => 'true', | |
| ]; | |
| $fields_arr['vxupdated'] = [ | |
| '_id' => self::$form_id . '-vxvx-vxupdated', | |
| 'name' => 'vxupdated', | |
| 'label' => __( 'Updated', 'contact-form-entries' ), | |
| 'hide_in_search' => 'true', | |
| 'is_main' => 'true', | |
| ]; | |
| $fields_arr['vxcreated'] = [ | |
| '_id' => self::$form_id . '-vxvx-vxcreated', | |
| 'name' => 'vxcreated', | |
| 'label' => __( 'Created', 'contact-form-entries' ), | |
| 'hide_in_search' => 'true', | |
| 'is_main' => 'true', | |
| ]; | |
| self::$form_fields = $fields_arr; | |
| } | |
| } | |
| } | |
| public function footer_js() { | |
| ?> | |
| <script type="text/javascript"> | |
| window.addEventListener("load", function(event) { | |
| jQuery(".cfx_form_main,.wpcf7-form,.wpforms-form,.gform_wrapper form").each(function(){ | |
| var form=jQuery(this); | |
| var screen_width=""; var screen_height=""; | |
| if (screen_width == "") { | |
| if (screen) { | |
| screen_width = screen.width; | |
| } else { | |
| screen_width = jQuery(window).width(); | |
| } | |
| } | |
| if (screen_height == "") { | |
| if (screen) { | |
| screen_height = screen.height; | |
| } else { | |
| screen_height = jQuery(window).height(); | |
| } | |
| } | |
| form.append('<input type="hidden" name="vx_width" value="' + screen_width + '">'); | |
| form.append('<input type="hidden" name="vx_height" value="' + screen_height + '">'); | |
| form.append('<input type="hidden" name="vx_url" value="' + window.location.href + '">'); | |
| }); | |
| }); | |
| </script> | |
| <?php | |
| } | |
| /** | |
| * Send CURL Request | |
| * | |
| * @param mixed $body | |
| * @param mixed $path | |
| * @param mixed $method | |
| */ | |
| public static function request( $path = '', $method = 'POST', $body = '', $head = [] ) { | |
| $args = [ | |
| 'body' => $body, | |
| 'headers' => $head, | |
| 'method' => strtoupper( $method ), // GET, POST, PUT, DELETE, etc. | |
| 'sslverify' => false, | |
| 'timeout' => 20, | |
| ]; | |
| $response = wp_remote_request( $path, $args ); | |
| $result = wp_remote_retrieve_body( $response ); | |
| return $result; | |
| } | |
| /** | |
| * Get variable from array | |
| * | |
| * @param mixed $key | |
| * @param mixed $arr | |
| */ | |
| public static function post( $key, $arr = '' ) { | |
| if ( $arr != '' ) { | |
| return isset( $arr[ $key ] ) ? self::clean( $arr[ $key ] ) : ''; | |
| } | |
| return isset( $_REQUEST[ $key ] ) ? self::clean( $_REQUEST[ $key ] ) : ''; | |
| } | |
| public static function clean( $var ) { | |
| if ( is_array( $var ) ) { | |
| return array_map( [ 'self', 'clean' ], $var ); | |
| } else { | |
| return sanitize_text_field( wp_unslash( $var ) ); | |
| } | |
| } | |
| /** | |
| * Get WP Encryption key | |
| * | |
| * @return string Encryption key | |
| */ | |
| public static function get_key() { | |
| $k = 'Wezj%+l-x.4fNzx%hJ]FORKT5Ay1w,iczS=DZrp~H+ve2@1YnS;;g?_VTTWX~-|t'; | |
| if ( defined( 'AUTH_KEY' ) ) { | |
| $k = AUTH_KEY; | |
| } | |
| return substr( $k, 0, 30 ); | |
| } | |
| /** | |
| * Parse User Agent to get Browser and OS | |
| * | |
| * @param string $u_agent (optional) User Agent | |
| * @return array Browser Informations | |
| */ | |
| public static function browser_info( $u_agent = '' ) { | |
| $bname = ''; | |
| $platform = ''; | |
| $version = ''; | |
| $ub = ''; | |
| if ( $u_agent == '' && ! empty( $_SERVER['HTTP_USER_AGENT'] ) ) { | |
| $u_agent = $_SERVER['HTTP_USER_AGENT']; | |
| } | |
| // First get the platform? | |
| if ( preg_match( '/linux/i', $u_agent ) ) { | |
| $platform = 'linux'; | |
| } elseif ( preg_match( '/macintosh|mac os x/i', $u_agent ) ) { | |
| $platform = 'Mac'; | |
| } elseif ( preg_match( '/windows|win32/i', $u_agent ) ) { | |
| $platform = 'Windows'; | |
| } | |
| // further refine platform | |
| if ( preg_match( '/iphone/i', $u_agent ) ) { | |
| $platform = 'iPhone'; | |
| } elseif ( preg_match( '/android/i', $u_agent ) ) { | |
| $platform = 'Android'; | |
| } elseif ( preg_match( '/blackberry/i', $u_agent ) ) { | |
| $platform = 'BlackBerry'; | |
| } elseif ( preg_match( '/webos/i', $u_agent ) ) { | |
| $platform = 'Mobile'; | |
| } elseif ( preg_match( '/ipod/i', $u_agent ) ) { | |
| $platform = 'iPod'; | |
| } elseif ( preg_match( '/ipad/i', $u_agent ) ) { | |
| $platform = 'iPad'; | |
| } | |
| // Next get the name of the useragent yes seperately and for good reason | |
| if ( preg_match( '/MSIE/i', $u_agent ) && ! preg_match( '/Opera/i', $u_agent ) ) { | |
| $bname = 'Internet Explorer'; | |
| $ub = 'MSIE'; | |
| } elseif ( preg_match( '/Firefox/i', $u_agent ) ) { | |
| $bname = 'Mozilla Firefox'; | |
| $ub = 'Firefox'; | |
| } elseif ( preg_match( '/OPR/i', $u_agent ) ) { | |
| $bname = 'Opera'; | |
| $ub = 'Opera'; | |
| } elseif ( preg_match( '/Chrome/i', $u_agent ) ) { | |
| $bname = 'Google Chrome'; | |
| $ub = 'Chrome'; | |
| } elseif ( preg_match( '/Safari/i', $u_agent ) ) { | |
| $bname = 'Apple Safari'; | |
| $ub = 'Safari'; | |
| } elseif ( preg_match( '/Netscape/i', $u_agent ) ) { | |
| $bname = 'Netscape'; | |
| $ub = 'Netscape'; | |
| } | |
| // finally get the correct version number | |
| $known = [ 'Version', $ub, 'other' ]; | |
| $pattern = '#(?<browser>' . join( '|', $known ) . | |
| ')[/ ]+(?<version>[0-9.|a-zA-Z.]*)#'; | |
| if ( ! preg_match_all( $pattern, $u_agent, $matches ) ) { | |
| // we have no matching number just continue | |
| } | |
| // see how many we have | |
| $i = count( $matches['browser'] ); | |
| if ( $i > 1 ) { | |
| // see if version is before or after the name | |
| if ( strripos( $u_agent, 'Version' ) < strripos( $u_agent, $ub ) ) { | |
| $version = $matches['version'][0]; | |
| } else { | |
| $version = $matches['version'][1]; | |
| } | |
| } elseif ( $i > 0 ) { | |
| $version = $matches['version'][0]; | |
| } | |
| // check if we have a number | |
| if ( $version == null || $version == '' ) { | |
| $version = '?';} | |
| return [ | |
| 'userAgent' => $u_agent, | |
| 'full_name' => $bname, | |
| 'name' => $ub, | |
| 'version' => $version, | |
| 'platform' => $platform, | |
| 'pattern' => $pattern, | |
| ]; | |
| } | |
| public static function download_csv( $form_id, $req = [] ) { | |
| header( 'Content-disposition: attachment; filename=' . date( 'Y-m-d', current_time( 'timestamp' ) ) . '.csv' ); | |
| header( 'Content-Transfer-Encoding: binary' ); | |
| $now = gmdate( 'D, d M Y H:i:s' ); | |
| header( 'Expires: Tue, 03 Jul 2000 06:00:00 GMT' ); | |
| header( 'Cache-Control: max-age=0, no-cache, must-revalidate, proxy-revalidate' ); | |
| header( "Last-Modified: {$now} GMT" ); | |
| // force download | |
| header( 'Content-Type: application/force-download' ); | |
| header( 'Content-Type: application/octet-stream' ); | |
| header( 'Content-Type: application/download' ); | |
| $data = self::get_entries( $form_id, 'all', '', $req ); | |
| $leads = $data['result']; | |
| $extra_keys = [ | |
| 'vxbrowser' => 'browser', | |
| 'vxurl' => 'url', | |
| 'vxscreen' => 'screen', | |
| 'vxcreated' => 'created', | |
| 'vxupdated' => 'updated', | |
| ]; | |
| $fields = self::$form_fields; | |
| $field_titles = [ '#' ]; | |
| if ( is_array( $fields ) ) { | |
| foreach ( $fields as $field ) { | |
| $field_titles[] = $field['label']; | |
| } | |
| } | |
| $fp = fopen( 'php://output', 'w' ); | |
| fputcsv( $fp, $field_titles ); | |
| $sno = 0; | |
| foreach ( $leads as $lead_row ) { | |
| $row = ! empty( $lead_row['detail'] ) ? $lead_row['detail'] : []; | |
| $sno++; | |
| $_row = [ $sno ]; | |
| foreach ( $fields as $k => $field ) { | |
| $val = ''; | |
| if ( ! empty( $field['name'] ) && isset( $row[ $field['name'] . '_field' ] ) ) { | |
| $val = maybe_unserialize( $row[ $field['name'] . '_field' ] ); | |
| } | |
| if ( isset( $extra_keys[ $k ] ) && isset( $lead_row[ $extra_keys[ $k ] ] ) ) { | |
| if ( $k == 'vxbrowser' ) { | |
| $val = isset( $lead_row['browser'] ) ? $lead_row['browser'] . ' ' : ''; | |
| $val .= isset( $lead_row['os'] ) ? $lead_row['os'] : ''; | |
| } else { | |
| $val = $lead_row[ $extra_keys[ $k ] ]; | |
| } | |
| } | |
| if ( is_array( $val ) ) { | |
| $val = implode( ' - ', $val ); | |
| } | |
| $_row[] = $val; | |
| } | |
| $_row[] = $lead_row['created']; | |
| fputcsv( $fp, $_row ); | |
| } | |
| fclose( $fp ); | |
| } | |
| public function vx_id() { | |
| $vx_id = ''; | |
| if ( ! empty( $_COOKIE['vx_user'] ) ) { | |
| $vx_id = $_COOKIE['vx_user']; | |
| } else { | |
| $vx_id = uniqid() . time() . wp_rand( 9, 99999999 ); | |
| $_COOKIE['vx_user'] = $vx_id; | |
| setcookie( 'vx_user', $vx_id, time() + 25920000, '/' ); | |
| } | |
| return $vx_id; | |
| } | |
| /** | |
| * Get time Offset | |
| */ | |
| public static function time_offset() { | |
| $offset = (int) get_option( 'gmt_offset' ); | |
| return $offset * 3600; | |
| } | |
| /** | |
| * Get variable from array | |
| * | |
| * @param mixed $key | |
| * @param mixed $key2 | |
| * @param mixed $arr | |
| */ | |
| public static function post2( $key, $key2, $arr = '' ) { | |
| if ( is_array( $arr ) ) { | |
| return isset( $arr[ $key ][ $key2 ] ) ? $arr[ $key ][ $key2 ] : ''; | |
| } | |
| return isset( $_REQUEST[ $key ][ $key2 ] ) ? $_REQUEST[ $key ][ $key2 ] : ''; | |
| } | |
| /** | |
| * Get variable from array | |
| * | |
| * @param mixed $key | |
| * @param mixed $key2 | |
| * @param mixed $arr | |
| */ | |
| public static function post3( $key, $key2, $key3, $arr = '' ) { | |
| if ( is_array( $arr ) ) { | |
| return isset( $arr[ $key ][ $key2 ][ $key3 ] ) ? $arr[ $key ][ $key2 ][ $key3 ] : ''; | |
| } | |
| return isset( $_REQUEST[ $key ][ $key2 ][ $key3 ] ) ? $_REQUEST[ $key ][ $key2 ][ $key3 ] : ''; | |
| } | |
| /** | |
| * get base url | |
| */ | |
| public static function get_base_url() { | |
| return plugin_dir_url( __FILE__ ); | |
| } | |
| /** | |
| * get plugin direcotry name | |
| */ | |
| public static function plugin_dir_name() { | |
| $path = self::get_base_path(); | |
| return basename( $path ); | |
| } | |
| /** | |
| * get plugin slug | |
| */ | |
| public static function get_slug() { | |
| return plugin_basename( __FILE__ ); | |
| } | |
| /** | |
| * Returns the physical path of the plugin's root folder | |
| */ | |
| public static function get_base_path() { | |
| return plugin_dir_path( __FILE__ ); | |
| } | |
| /** | |
| * get data object | |
| */ | |
| public static function get_data_object() { | |
| require_once self::$path . 'includes/data.php'; | |
| if ( ! is_object( self::$data ) ) { | |
| self::$data = new vxcf_form_data(); | |
| } | |
| return self::$data; | |
| } | |
| } | |
| endif; | |
| $vxcf_form = new vxcf_form(); | |
| $vxcf_form->instance(); | |
| if ( ! isset( $vx_cf ) ) { | |
| $vx_cf = []; } | |
| $vx_cf['vxcf_form'] = 'vxcf_form'; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment