You are here

function mailchimp_campaign_save_campaign in Mailchimp 7.3

Same name and namespace in other branches
  1. 8 modules/mailchimp_campaign/mailchimp_campaign.module \mailchimp_campaign_save_campaign()
  2. 7.5 modules/mailchimp_campaign/mailchimp_campaign.module \mailchimp_campaign_save_campaign()
  3. 7.2 modules/mailchimp_campaign/mailchimp_campaign.module \mailchimp_campaign_save_campaign()
  4. 7.4 modules/mailchimp_campaign/mailchimp_campaign.module \mailchimp_campaign_save_campaign()
  5. 2.x modules/mailchimp_campaign/mailchimp_campaign.module \mailchimp_campaign_save_campaign()

Save a campaign in MailChimp and as a Drupal entity.

Parameters

array $template: Associative array of template content indexed by section IDs.

array $options: Associative array of template values.

array $segment_options: Associative array of list segment options.

string $campaign_id: The ID of the campaign to save, if updating.

Return value

string New or existing campaign ID.

1 call to mailchimp_campaign_save_campaign()
mailchimp_campaign_campaign_form_submit in modules/mailchimp_campaign/includes/mailchimp_campaign.admin.inc
Submit handler for mailchimp_campaign_campaign_form().

File

modules/mailchimp_campaign/mailchimp_campaign.module, line 294
Module file for mailchimp_campaign.

Code

function mailchimp_campaign_save_campaign($template, $options, $segment_options = NULL, $campaign_id = NULL) {
  $mcapi = mailchimp_get_api_object();
  $options += array(
    'generate_text' => TRUE,
    'tracking' => array(
      'opens' => TRUE,
      'html_clicks' => TRUE,
      'text_clicks' => TRUE,
    ),
  );

  // Allow alter of template and options used in campaign
  drupal_alter('mailchimp_campaign', $options, $template, $campaign_id);

  // Convert template to content by running through formatter.
  if (isset($template['html'])) {
    $content = mailchimp_campaign_render_template($template);
  }
  else {
    $content = array(
      'sections' => mailchimp_campaign_render_template($template),
    );
  }

  // Test for valid list segment, if selected.
  if ($segment_options != NULL) {
    if (mailchimp_test_list_segment($options['list_id'], $segment_options['saved_segment_id']) === NULL) {
      return NULL;
    }
  }

  // Save campaign to MailChimp. (Only regular campaigns are supported).
  $is_new = empty($campaign_id);
  if ($is_new) {
    try {
      if (!$mcapi) {
        throw new MailchimpException('Cannot create campaign without Mailchimp API. Check API key has been entered.');
      }
      $result = $mcapi->campaigns
        ->create('regular', $options, $content, $segment_options);
    } catch (Mailchimp_Error $e) {
      drupal_set_message($e
        ->getMessage(), 'error');
      watchdog('mailchimp_campaign', 'An error occurred while creating this campaign: @msg', array(
        '@msg' => $e
          ->getMessage(),
      ), WATCHDOG_ERROR);
      return NULL;
    }
    if (isset($result['status']) && $result['status'] == 'save') {
      $campaign_id = $result['id'];
    }
  }
  else {

    // Updates must be sent one type at a time.
    try {
      if (!$mcapi) {
        throw new MailchimpException('Cannot update campaign without Mailchimp API. Check API key has been entered.');
      }
      $mcapi->campaigns
        ->update($campaign_id, 'options', $options);
      $mcapi->campaigns
        ->update($campaign_id, 'segment_opts', $segment_options);
      $mcapi->campaigns
        ->update($campaign_id, 'content', $content);
    } catch (Mailchimp_Error $e) {
      drupal_set_message($e
        ->getMessage(), 'error');
      watchdog('mailchimp_campaign', 'An error occurred while updating this campaign: @msg', array(
        '@msg' => $e
          ->getMessage(),
      ), WATCHDOG_ERROR);
      return NULL;
    }
  }
  if (isset($result['status']) && $result['status'] == 'error') {

    // Display and log error, if any.
    $message = 'MailChimp error. The campaign was not saved.';
    _mailchimp_campaign_mcapi_error_message($result, $message);
  }
  else {
    drupal_set_message(t('Campaign %name (%cid) was successfully saved.', array(
      '%name' => $options['title'],
      '%cid' => $campaign_id,
    )));

    // Save the campaign entity:
    $campaign = entity_create('mailchimp_campaign', array(
      'mc_campaign_id' => $campaign_id,
      'template' => $template,
      'is_new' => $is_new,
    ));
    mailchimp_campaign_save($campaign);

    // Clear cached data for this campaign.
    mailchimp_campaign_get_campaigns(array(
      $campaign_id,
    ), TRUE);
  }
  return $campaign_id;
}