You are here

function mailchimp_get_mergevars in Mailchimp 7.4

Same name and namespace in other branches
  1. 8 mailchimp.module \mailchimp_get_mergevars()
  2. 7.5 mailchimp.module \mailchimp_get_mergevars()
  3. 7.3 mailchimp.module \mailchimp_get_mergevars()
  4. 2.x mailchimp.module \mailchimp_get_mergevars()

Wrapper around MailchimpLists->getMergeFields().

Parameters

array $list_ids: Array of Mailchimp list IDs.

bool $reset: Set to TRUE if mergevars should not be loaded from cache.

Return value

array Struct describing mergevars for the specified lists.

4 calls to mailchimp_get_mergevars()
MailchimpListsTestCase::testGetMergevars in modules/mailchimp_lists/tests/mailchimp_lists.test
Tests retrieval of mergevars for a set of lists.
mailchimp_campaign_campaign_form in modules/mailchimp_campaign/includes/mailchimp_campaign.admin.inc
Returns a form for creating a campaign.
mailchimp_signup_form in modules/mailchimp_signup/includes/mailchimp_signup.admin.inc
Return a form for adding/editing a Mailchimp signup form.
_mailchimp_lists_field_instance_settings_form_process in modules/mailchimp_lists/includes/mailchimp_lists.field.inc
Element processor. Expand the mergefields mapping form.

File

./mailchimp.module, line 415
Mailchimp module.

Code

function mailchimp_get_mergevars($list_ids, $reset = FALSE) {
  $mergevars = array();
  if (!$reset) {
    foreach ($list_ids as $key => $list_id) {
      $cache = cache_get($list_id . '-mergevars', 'cache_mailchimp');

      // Get cached data and unset from our remaining lists to query.
      if ($cache) {
        $mergevars[$list_id] = $cache->data;
        unset($list_ids[$key]);
      }
    }
  }

  /* @var \Mailchimp\MailchimpLists $mc_lists */
  $mc_lists = mailchimp_get_api_object('MailchimpLists');
  try {
    if (!$mc_lists) {
      throw new MailchimpException('Cannot get merge vars without Mailchimp API. Check API key has been entered.');
    }

    // Get the uncached merge vars from Mailchimp.
    foreach ($list_ids as $list_id) {

      // Add default EMAIL merge var for all lists.
      $mergevars[$list_id] = array(
        (object) array(
          'tag' => 'EMAIL',
          'name' => t('Email Address'),
          'type' => 'email',
          'required' => TRUE,
          'default_value' => '',
          'public' => TRUE,
          'display_order' => 1,
          'options' => (object) array(
            'size' => 25,
          ),
        ),
      );
      $result = $mc_lists
        ->getMergeFields($list_id, array(
        'count' => 500,
      ));
      if ($result->total_items > 0) {
        $mergevars[$list_id] = array_merge($mergevars[$list_id], $result->merge_fields);
      }
      cache_set($list_id . '-mergevars', $mergevars[$list_id], 'cache_mailchimp', CACHE_TEMPORARY);
    }
  } catch (Exception $e) {
    watchdog('mailchimp', 'An error occurred requesting mergevars for list @list. "%message"', array(
      '@list' => $list_id,
      '%message' => $e
        ->getMessage(),
    ), WATCHDOG_ERROR);
  }
  return $mergevars;
}