get_api_key(); } /* Mailchimp tab */ public function add_mailchimp_tab() { ?>
mailchimp_api = $mailchimp_options['uacf7_mailchimp_api_key']; } $this->mailchimp_connection(); } /* mailchimp Connection check */ public function mailchimp_connection() { $api_key = $this->mailchimp_api; if ($api_key != '') { $response = $this->set_config($api_key, 'ping'); $response = json_decode($response); if (isset($response->health_status)) { //Display success message $this->mailchimlConnection = true; } else { $this->mailchimlConnection = false; } } } /* Mailchimp config set */ private function set_config($api_key = '', $path = '') { $server_prefix = explode("-",$api_key); $server_prefix = $server_prefix[1]; $url = "https://$server_prefix.api.mailchimp.com/3.0/$path"; $curl = curl_init($url); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $headers = array( "Authorization: Bearer $api_key" ); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); //for debug only! curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); $resp = curl_exec($curl); curl_close($curl); return $resp; } /* Mailchimp connection status */ public function connection_status() { $api_key = $this->mailchimp_api; $status = ''; if ($api_key != '') { $response = $this->set_config($api_key, 'ping'); $response = json_decode($response); $status .= '' . esc_html__('Status: ', 'ultimate-addons-cf7') . ''; if ($this->is_internet_connected() == false) { //Checking internet connection $status .= '' . esc_html__('Can\'t connect to the server. Please check internet connection.', 'ultimate-addons-cf7') . ''; } if (isset($response->health_status)) { //Display success message $status .= '' . esc_html($response->health_status) . ''; } if (isset($response->title)) { //Display error title $status .= '' . esc_html($response->title) . ''; } $status .= ''; if (isset($response->detail)) { //Display error mdetails $status .= '' . esc_html($response->detail) . ''; } } else { $status .= '' . esc_html('Please enter your Mailchimp API key.', 'ultimate-addons-cf7') . ''; } return $status; } /* Create tab panel */ public function uacf7_cf_add_panel($panels) { $panels['uacf7-mailchimp-panel'] = array( 'title' => __('UACF7 Mailchimp', 'ultimate-addons-cf7'), 'callback' => array($this, 'uacf7_create_mailchimp_panel_fields'), ); return $panels; } /* Mailchimp form settings fields */ public function uacf7_create_mailchimp_panel_fields($post) { require_once( 'inc/template/form-fields.php' ); } /* Save form data */ public function uacf7_save_contact_form($post) { if (!isset($_POST) || empty($_POST)) { return; } if (!wp_verify_nonce($_POST['uacf7_mailchimp_nonce'], 'uacf7_mailchimp_nonce_action')) { return; } update_post_meta( $post->id(), 'uacf7_mailchimp_form_enable', sanitize_text_field($_POST['uacf7_mailchimp_form_enable']) ); update_post_meta( $post->id(), 'uacf7_mailchimp_form_type', sanitize_text_field($_POST['uacf7_mailchimp_form_type']) ); update_post_meta( $post->id(), 'uacf7_mailchimp_audience', sanitize_text_field($_POST['uacf7_mailchimp_audience']) ); update_post_meta( $post->id(), 'uacf7_mailchimp_subscriber_email', sanitize_text_field($_POST['uacf7_mailchimp_subscriber_email']) ); update_post_meta( $post->id(), 'uacf7_mailchimp_subscriber_fname', sanitize_text_field($_POST['uacf7_mailchimp_subscriber_fname']) ); update_post_meta( $post->id(), 'uacf7_mailchimp_subscriber_lname', sanitize_text_field($_POST['uacf7_mailchimp_subscriber_lname']) ); $all_fields = $post->scan_form_tags(); $x = 1; $data = []; foreach( $all_fields as $field ) { if( $field['type'] != 'submit' ){ if( !empty( $_POST['uacf7_mailchimp_extra_field_mailtag_'.$x] ) && !empty( $_POST['uacf7_mailchimp_extra_field_mergefield_'.$x] ) ){ $data[$x] = array( 'mailtag' => sanitize_text_field($_POST['uacf7_mailchimp_extra_field_mailtag_'.$x]), 'mergefield' => sanitize_text_field($_POST['uacf7_mailchimp_extra_field_mergefield_'.$x]) ); } $x++; } } update_post_meta( $post->id(), 'uacf7_mailchimp_merge_fields', $data ); } /* Add members to mailchimp */ public function add_members( $id, $audience, $posted_data ) { $this->mailchimp_connection(); $api_key = $this->mailchimp_api; $subscriber_email = get_post_meta( $id, 'uacf7_mailchimp_subscriber_email', true ); $subscriber_email = !empty($subscriber_email) ? $posted_data[$subscriber_email] : ''; if( $this->mailchimlConnection == true && $api_key != '' && $subscriber_email != '' ) { $server_prefix = explode("-",$api_key); $server_prefix = $server_prefix[1]; $subscriber_fname = get_post_meta( $id, 'uacf7_mailchimp_subscriber_fname', true ); $subscriber_fname = !empty($subscriber_fname) ? $posted_data[$subscriber_fname] : ''; $subscriber_lname = get_post_meta( $id, 'uacf7_mailchimp_subscriber_lname', true ); $subscriber_lname = !empty($subscriber_lname) ? $posted_data[$subscriber_lname] : ''; $extra_fields = empty(get_post_meta( $id, 'uacf7_mailchimp_merge_fields', true )) ? array() : get_post_meta( $id, 'uacf7_mailchimp_merge_fields', true ); $extra_merge_fields = ''; foreach( $extra_fields as $extra_field ){ $extra_merge_fields .= '"'.$extra_field['mergefield'] . '": "' . $posted_data[$extra_field['mailtag']].'",'; } $extra_merge_fields = trim($extra_merge_fields,','); if( $extra_merge_fields != '' ){ $extra_merge_fields = ','.$extra_merge_fields; } $url = "https://$server_prefix.api.mailchimp.com/3.0/lists/".$audience."/members"; $curl = curl_init($url); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $headers = array( "Authorization: Bearer $api_key", "Content-Type: application/json", ); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); //Mailchimp data $data = '{"email_address":"'.sanitize_email($subscriber_email).'","status":"subscribed","merge_fields":{"FNAME": "'.sanitize_text_field($subscriber_fname).'", "LNAME": "'.sanitize_text_field($subscriber_lname).'"'.$extra_merge_fields.'},"vip":false,"location":{"latitude":0,"longitude":0}}'; curl_setopt($curl, CURLOPT_POSTFIELDS, $data); //for debug only! curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); $resp = curl_exec($curl); curl_close($curl); // return $url; } } /* Send data before sent email */ public function send_data($cf7) { // get the contact form object $wpcf = WPCF7_Submission::get_instance(); $posted_data = $wpcf->get_posted_data(); $id = $cf7->id(); $form_enable = get_post_meta( $id, 'uacf7_mailchimp_form_enable', true ); $form_type = get_post_meta( $id, 'uacf7_mailchimp_form_type', true ); $audience = get_post_meta( $id, 'uacf7_mailchimp_audience', true ); if( $form_enable == 'enable' && $form_type == 'subscribe' && $audience != '' ){ //$wpcf->skip_mail = true; $response = $this->add_members( $id, $audience, $posted_data ); } } /* Enqueue admin scripts */ public function admin_scripts() { wp_enqueue_style('mailchimp-css', UACF7_ADDONS . '/mailchimp/assets/css/admin-style.css'); } } new UACF7_MAILCHIMP();