event_merge_tag_groups = array( 'wc_customer', 'wlm_forms' ); $this->event_name = esc_html__( 'User Submits a Registration Form', 'wp-marketing-automations-pro' ); $this->event_desc = esc_html__( 'This event runs after a user submit a registration form.', 'wp-marketing-automations-pro' ); $this->event_rule_groups = array( 'wlm', 'wc_customer', 'wlm_forms', 'bwf_contact_segments', 'bwf_contact', 'bwf_contact_fields', 'bwf_contact_user', 'bwf_contact_wc', 'bwf_contact_geo', 'bwf_engagement', 'bwf_broadcast', 'wp_user' ); $this->optgroup_label = esc_html__( 'WishList Member', 'wp-marketing-automations-pro' ); $this->support_lang = true; $this->priority = 20; $this->v2 = true; } public static function get_instance() { if ( null === self::$instance ) { self::$instance = new self(); } return self::$instance; } public function load_hooks() { add_action( 'wishlistmember_user_registered', [ $this, 'added_new_user' ], 20, 2 ); add_action( 'wp_ajax_bwfan_get_wlm_form_fields', array( $this, 'bwfan_get_wlm_form_fields' ) ); add_filter( 'bwfan_all_event_js_data', array( $this, 'add_form_data' ), 10, 2 ); } public function added_new_user( $user_id, $data ) { $this->process( $user_id, $data ); } /** * Make the required data for the current event and send it asynchronously. * * @param $user_id * @param $form_data */ public function process( $user_id, $form_data ) { $data = $this->get_default_data(); $user_data = get_userdata( $user_id ); if ( ! $user_data instanceof WP_User ) { return; } if ( ! isset( $form_data['wpm_id'] ) ) { return; } //Get form id from level settings global $wpdb; $wlm_option_table = $wpdb->prefix . 'wlm_options'; $wpm_levels = $wpdb->get_row( "Select * from {$wlm_option_table} WHERE option_name LIKE 'wpm_levels' LIMIT 1" ); //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching if ( ! empty( $wpm_levels ) ) { $wpm_levels = maybe_unserialize( $wpm_levels->option_value ); } else { return; } if ( ! isset( $wpm_levels[ $form_data['wpm_id'] ] ) ) { return; } $level_info = $wpm_levels[ $form_data['wpm_id'] ]; $regpage_form_id = 'default'; if ( isset( $level_info['custom_reg_form'] ) && isset( $level_info['enable_custom_reg_form'] ) ) { $regpage_form_id = $level_info['custom_reg_form']; } $data['level_id'] = $form_data['wpm_id']; $data['email'] = $user_data->user_email; $data['entry'] = $form_data; $data['form_id'] = $form_data['wlm_form_id']; $data['form_title'] = $this->get_form_title( $form_data['wlm_form_id'] ); $data['fields'] = $this->get_form_fields( $form_data['wlm_form_id'] ); $this->send_async_call( $data ); } /** get form title using form id * * @param $form_id * * @return mixed|string */ public function get_form_title( $form_id ) { $form_title = ''; $forms = $this->get_view_data(); if ( isset( $forms[ $form_id ] ) ) { $form_title = $forms[ $form_id ]; } else { $form_title = $forms['default']; } return $form_title; } /** get wishlist members levels * @return array */ public function get_view_data() { global $wpdb; $options = array(); $options['default'] = esc_attr__( 'Default registration form', 'uncanny-automator-pro' ); $forms = $wpdb->get_results( "SELECT option_name,option_value FROM `{$wpdb->prefix}wlm_options` WHERE `option_name` LIKE 'CUSTOMREGFORM-%' ORDER BY `option_name` ASC", ARRAY_A ); //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching foreach ( $forms as $k => $form ) { $form_value = maybe_unserialize( wlm_serialize_corrector( $form['option_value'] ) ); $all_forms[ $form['option_name'] ] = $form_value['form_name']; } if ( ! empty( $all_forms ) ) { foreach ( $all_forms as $key => $form ) { $options[ $key ] = $form; } } return $options; } /** form fields using form id */ public function get_form_fields( $form_id ) { global $wpdb; $fields = []; if ( $form_id != 'default' ) { $form = $wpdb->get_var( "SELECT option_value FROM `{$wpdb->prefix}wlm_options` WHERE `option_name` LIKE '%{$form_id}%' ORDER BY `option_name` ASC" ); //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching $form_value = maybe_unserialize( wlm_serialize_corrector( $form ) ); $form_fields = $form_value['form_dissected']['fields']; if ( is_array( $form_fields ) ) { foreach ( $form_fields as $field ) { if ( $field['attributes']['type'] != 'password' ) { $fields[ $field['attributes']['name'] ] = str_replace( ':', '', $field['label'] ); } } } } elseif ( $form_id == 'default' ) { $form_fields = $this->get_default_form_fields(); if ( is_array( $form_fields ) ) { foreach ( $form_fields as $key => $field ) { $fields[ $key ] = $field; } } } return $fields; } /** default fields for user registration in wishlist member * @return mixed|void */ public function get_default_form_fields() { $fields = [ 'firstname' => __( 'First name', 'wp-marketing-automations-pro' ), 'lastname' => __( 'Last name', 'wp-marketing-automations-pro' ), 'email' => __( 'Email', 'wp-marketing-automations-pro' ), 'username' => __( 'Username', 'wp-marketing-automations-pro' ), ]; return apply_filters( 'bwfan_wlm_default_form_field', $fields ); } /** localise wishlist members level options */ public function admin_enqueue_assets() { if ( BWFAN_Common::is_load_admin_assets( 'automation' ) ) { $registration_forms = $this->get_view_data(); BWFAN_Core()->admin->set_events_js_data( $this->get_slug(), 'registration_forms', $registration_forms ); } } /** * Show the html fields for the current event. */ public function get_view( $db_eventmeta_saved_value ) { ?> email = ( ! empty( $email_map ) && isset( $this->entry[ $email_map ] ) && is_email( trim( $this->entry[ $email_map ] ) ) ) ? $this->entry[ $email_map ] : ''; BWFAN_Core()->rules->setRulesData( $this->form_id, 'form_id' ); BWFAN_Core()->rules->setRulesData( $this->form_title, 'form_title' ); BWFAN_Core()->rules->setRulesData( $this->entry, 'entry' ); BWFAN_Core()->rules->setRulesData( $this->fields, 'fields' ); BWFAN_Core()->rules->setRulesData( $this->email, 'email' ); BWFAN_Core()->rules->setRulesData( $this->level_id, 'level_id' ); BWFAN_Core()->rules->setRulesData( BWFAN_Common::get_bwf_customer( $this->email, $this->get_user_id_event() ), 'bwf_customer' ); } public function get_user_id_event() { if ( is_email( $this->email ) ) { $user = get_user_by( 'email', $this->email ); return ( $user instanceof WP_User ) ? $user->ID : false; } return false; } /** * Registers the tasks for current event. * * @param $automation_id * @param $integration_data * @param $event_data */ public function register_tasks( $automation_id, $integration_data, $event_data ) { if ( ! is_array( $integration_data ) ) { return; } $data_to_send = $this->get_event_data(); $this->create_tasks( $automation_id, $integration_data, $event_data, $data_to_send ); } public function get_event_data() { $data_to_send = [ 'global' => [] ]; $data_to_send['global']['form_id'] = $this->form_id; $data_to_send['global']['form_title'] = $this->form_title; $data_to_send['global']['entry'] = $this->entry; $data_to_send['global']['fields'] = $this->fields; $data_to_send['global']['email'] = $this->email; $data_to_send['global']['level_id'] = $this->level_id; return $data_to_send; } /** * Make the view data for the current event which will be shown in task listing screen. * * @param $global_data * * @return false|string */ public function get_task_view( $global_data ) { ob_start(); ?>