/**
  * use the field config mapping to lookup a meta (ex. if MERGE1 maps to
  * user_registered, look that up)
  *
  * @param string $field the field name. this is always uppercase
  * @param string $list_id id of the email list to use
  * @return the field mapping config if set, or NULL if not
  */
 public function get_field_config($field, $list_id)
 {
     $config = go_mailchimp()->config();
     $field_config = NULL;
     if (isset($config['lists'][$list_id]['field_map'][strtoupper($field)])) {
         $field_config = $config['lists'][$list_id]['field_map'][strtoupper($field)];
     }
     return $field_config;
 }
 /**
  * test the api functions
  */
 public function test_api()
 {
     $list_id = 'a3e91a3095';
     // id for the Test General Users list
     $email = '*****@*****.**';
     $new_email = '*****@*****.**';
     $new_user_id = wp_insert_user(array('user_login' => 'user1', 'user_email' => $email));
     $user = get_user_by('email', $email);
     $this->assertFalse(is_wp_error($user));
     $lists = go_mailchimp()->api()->lists('mc');
     $this->assertGreaterThan(0, count($lists));
     $merge_vars = go_mailchimp()->api()->list_merge_vars($list_id);
     $this->assertGreaterThan(0, count($merge_vars));
     $member = go_mailchimp()->api()->subscribe($user, $list_id);
     $this->assertTrue(is_array($member));
     $this->assertFalse(empty($member['euid']));
     $member = go_mailchimp()->api()->subscribed($user, $list_id);
     $this->assertTrue(is_array($member));
     $this->assertFalse(empty($member['euid']));
     $unsubscribed = go_mailchimp()->api()->unsubscribed($user, $list_id);
     $this->assertTrue(empty($unsubscribed));
     $member = go_mailchimp()->api()->member($user, $list_id);
     $this->assertTrue(is_array($member));
     $this->assertFalse(empty($member['id']));
     // update the email
     $result = go_mailchimp()->api()->update_email($user, $new_email);
     $this->assertTrue($result);
     // change it back. make sure the email address in the user is
     // consistent with what we just updated (to $new_email)
     $user->user_email = $new_email;
     $result = go_mailchimp()->api()->update_email($user, $email);
     $this->assertTrue($result);
     // make sure user's email is consistent with what was updated
     $user->user_email = $email;
     $result = go_mailchimp()->api()->unsubscribe($user, $list_id);
     $this->assertTrue($result['complete']);
 }
 /**
  * sync some of $user's MailChimp subscriber info into our user meta.
  * the information include the user's MC web_id, member_rating, and
  * geo latitude/longitude.
  *
  * @param WP_User $user a user object
  * @param string $list_id id of the list user is on
  * @return bool TRUE if successful, FALSE if not
  */
 public function sync_subscriber_info($user, $list_id)
 {
     $saved_subscriber_info = get_user_meta($user->ID, go_mailchimp()->meta_key('subscriber_info'), TRUE);
     if (empty($saved_subscriber_info) && !is_array($saved_subscriber_info)) {
         $saved_subscriber_info = array();
     }
     $membership_info = $this->member($user, $list_id);
     if (empty($membership_info)) {
         // user is not subscribed to the list any more
         unset($saved_subscriber_info[$list_id]);
     } else {
         $saved_subscriber_info[$list_id] = array('web_id' => $membership_info['web_id'], 'member_rating' => $membership_info['member_rating']);
         // assume if geo->latitude is set then so is geo->longitude
         if (isset($membership_info['geo']['latitude'])) {
             $saved_subscriber_info[$list_id]['geo'] = array('lat' => $membership_info['geo']['latitude'], 'lon' => $membership_info['geo']['longitude']);
         }
         //END if
     }
     //END else
     return update_user_meta($user->ID, go_mailchimp()->meta_key('subscriber_info'), $saved_subscriber_info);
 }
 /**
  * @param WP_User $user a user object
  * @return the MC member rating from $user's user meta, or '' if we
  *  don't have one.
  */
 public function get_subscriber_rating($user)
 {
     if (empty($user->ID)) {
         return '';
     }
     if (!($usermeta = get_user_meta($user->ID, go_mailchimp()->meta_key('subscriber_info'), TRUE))) {
         return '';
     }
     if (empty($usermeta)) {
         return '';
     }
     // in our set up the user is generally only subscribed to one list
     // so we just pick the rating from the first list in the user meta
     foreach ($usermeta as $list_info) {
         if (empty($list_info['member_rating'])) {
             continue;
         }
         return $list_info['member_rating'];
     }
     return '';
 }
<?php

/**
 * Plugin Name: Gigaom MailChimp Synchronization Plugin
 * Plugin URI: http://gigaom.com/
 * Description: Custom plugin to to synchronize arbitrary data to MailChimp email service.
 * Version: 0.2
 * Author: Gigaom <*****@*****.**>
 * Author URI: http://gigaom.com/
 * License: All Rights Reserved.
 */
require_once __DIR__ . '/components/class-go-mailchimp.php';
go_mailchimp();