diff -rup mailchimp/modules/mailchimp_lists/mailchimp_lists.admin.inc mailchimp-new/modules/mailchimp_lists/mailchimp_lists.admin.inc --- mailchimp/modules/mailchimp_lists/mailchimp_lists.admin.inc 2012-10-23 19:35:55.000000000 -0400 +++ mailchimp-new/modules/mailchimp_lists/mailchimp_lists.admin.inc 2012-12-11 10:54:03.000000000 -0500 @@ -14,7 +14,7 @@ function mailchimp_lists_overview_page() l(t('Edit'), 'admin/config/services/mailchimp/lists/' . $list->id . '/edit'), l(t('Delete'), 'admin/config/services/mailchimp/lists/' . $list->id . '/delete') ); - if ($list->list_type === MAILCHIMP_LISTTYPE_REQUIRED && isset($list->settings['cron']) && $list->settings['cron']) { + if ($list->list_type !== MAILCHIMP_LISTTYPE_FREEFORM && isset($list->settings['cron']) && $list->settings['cron']) { $actions[] = l(t('Queue existing'), 'mailchimp/lists/' . $list->id . '/queue_existing'); } $rows[] = array( @@ -112,7 +112,7 @@ function mailchimp_lists_list_form($form '#type' => 'select', '#title' => t('Type of list'), '#multiple' => FALSE, - '#description' => t('Required lists are automatically syncronized with the + '#description' => t('Required and optional lists are automatically syncronized with the sites users. Optional lists provide a checkbox allowing users to subscribe during registration or when updating their account. Free form lists, the only type allowed for the Anonymous role, present a signup form @@ -207,9 +207,9 @@ function mailchimp_lists_list_form($form '#description' => t('If this is set, users will be subscribed to the required list during cron runs. Otherwise subscription will take place when a user is added/edited.'), '#states' => array( - // Hide this option for required lists - 'visible' => array( - ':input[name="list_type"]' => array('value' => MAILCHIMP_LISTTYPE_REQUIRED), + // Hide this option for freeform lists. + 'invisible' => array( + ':input[name="list_type"]' => array('value' => MAILCHIMP_LISTTYPE_FREEFORM), ), ), ); diff -rup mailchimp/modules/mailchimp_lists/mailchimp_lists.module mailchimp-new/modules/mailchimp_lists/mailchimp_lists.module --- mailchimp/modules/mailchimp_lists/mailchimp_lists.module 2012-10-23 19:35:55.000000000 -0400 +++ mailchimp-new/modules/mailchimp_lists/mailchimp_lists.module 2012-12-11 10:57:10.000000000 -0500 @@ -110,7 +110,7 @@ function mailchimp_lists_user_subscribe_ */ function mailchimp_lists_queue_existing_access($list) { $ret = FALSE; - if ($list->list_type === MAILCHIMP_LISTTYPE_REQUIRED && $list->settings['cron'] && user_access('administer mailchimp')) { + if ($list->list_type != MAILCHIMP_LISTTYPE_FREEFORM && $list->settings['cron'] && user_access('administer mailchimp')) { $ret = TRUE; } return $ret; @@ -293,7 +293,7 @@ function mailchimp_lists_user_insert(&$e */ function mailchimp_lists_user_delete($account) { // unsubscribe a user from all required lists - $lists = mailchimp_lists_get_available_lists($account, MAILCHIMP_LISTTYPE_REQUIRED); + $lists = mailchimp_lists_get_available_lists($account, array(MAILCHIMP_LISTTYPE_REQUIRED, MAILCHIMP_LISTTYPE_OPTIONAL)); if (!empty($lists)) { $mcapi = mailchimp_get_api_object(); foreach ($lists as $list) { @@ -323,12 +323,10 @@ function mailchimp_lists_user_update(&$e */ function mailchimp_lists_user_sync($account, $old_email = '', $new_email = '', $removed_roles = array()) { // Remove subscriptions if necessary - if (!empty($removed_roles)) { + if (!empty($old_email) && (!empty($removed_roles) || $old_email != $new_email)) { $all_lists = mailchimp_lists_load_multiple(); foreach ($all_lists as $list) { - $is_subscribed = !empty($old_email) && mailchimp_is_subscribed($list->mc_list_id, $old_email); - - if ($is_subscribed) { + if (mailchimp_is_subscribed($list->mc_list_id, $old_email)) { foreach ($removed_roles as $role_id => $role) { if (array_key_exists($role_id, $list->settings['roles'])) { // queue up for cron processing @@ -352,11 +350,10 @@ function mailchimp_lists_user_sync($acco } // Add subscriptions if necessary - $lists = mailchimp_lists_get_available_lists($account, MAILCHIMP_LISTTYPE_REQUIRED); + $lists = mailchimp_lists_get_available_lists($account, array(MAILCHIMP_LISTTYPE_REQUIRED, MAILCHIMP_LISTTYPE_OPTIONAL)); if (!empty($lists)) { $mcapi = mailchimp_get_api_object(); foreach ($lists as $list) { - $is_subscribed = !empty($old_email) && mailchimp_is_subscribed($list->mc_list_id, $old_email); if ($account->status) { // queue up for cron processing if ($list->settings['cron']) { @@ -376,8 +373,13 @@ function mailchimp_lists_user_sync($acco if (!empty($new_email)) { $mergevars['EMAIL'] = $new_email; } - if ($is_subscribed) { - mailchimp_update_user($list, $old_email, $mergevars, FALSE, $mcapi); + // Include interest groups. + if (!empty($old_email) && !empty($list->settings['include_interest_groups'])) { + $memberinfo = mailchimp_get_memberinfo($list->mc_list_id, $old_email); + $mergevars['GROUPINGS'] = $memberinfo['merges']['GROUPINGS']; + } + if (!empty($old_email) && mailchimp_is_subscribed($list->mc_list_id, $old_email)) { + mailchimp_update_user($list, $old_email, $mergevars, FALSE, $mcapi); } else { mailchimp_subscribe_user($list, $account->mail, $mergevars, FALSE, $mcapi); Only in mailchimp-new/modules: mailchimp_sts