You are here

function mailchimp_lists_list_form_submit in Mailchimp 7.2

Submit handler for mailchimp_lists_list_form().

File

modules/mailchimp_lists/includes/mailchimp_lists.admin.inc, line 439
mailchimp_lists module admin settings.

Code

function mailchimp_lists_list_form_submit($form, &$form_state) {
  $list = isset($form_state['list']) ? $form_state['list'] : mailchimp_list_create();
  $is_new = isset($list->is_new) && $list->is_new;

  // Set this value here for use in webhook call below:
  $list->mc_list_id = $form_state['values']['mc_list_id'];
  $mcapi = mailchimp_get_api_object();
  $webhook_ret = FALSE;

  // If the webhook was enabled before, check to see if it should be disabled:
  if (!empty($list->settings['webhooks'])) {
    if (!$is_new && !$form_state['values']['webhooks']) {
      $webhook_ret = $mcapi
        ->listWebhookDel($list->mc_list_id, mailchimp_webhook_url());
    }
  }
  else {
    if ($form_state['values']['webhooks']) {
      $webhook_ret = $mcapi
        ->listWebhookAdd($list->mc_list_id, mailchimp_webhook_url(), array(
        'subscribe' => FALSE,
        'unsubscribe' => TRUE,
        'profile' => TRUE,
        'cleaned' => TRUE,
        'upemail' => TRUE,
        'campaign' => FALSE,
      ), array(
        'user' => TRUE,
        'admin' => TRUE,
        'api' => TRUE,
      ));

      // Handle errors in setting webooks:
      if (!$webhook_ret) {
        drupal_set_message(t('Unable to connect webhooks: @msg', array(
          '@msg' => $mcapi->errorMessage,
        )), 'error');
      }
    }
  }

  // Check for altered roles.
  $added_roles = FALSE;
  $removed_roles = FALSE;

  // We intuit the anonymous RID based on the Allow Anonymous setting:
  $form_state['values']['roles'][DRUPAL_ANONYMOUS_RID] = $form_state['values']['allow_anonymous'];
  if (!$is_new) {
    foreach ($form_state['values']['roles'] as $role_id => $role) {
      $was_on = !empty($form_state['list']->settings['roles'][$role_id]);
      $set_on = !empty($role);
      if ($was_on && !$set_on) {
        $removed_roles = TRUE;
      }
      if (!$was_on && $set_on) {
        $added_roles = TRUE;
      }
      if ($added_roles && $removed_roles) {
        break;
      }
    }
  }
  if ($added_roles || $removed_roles) {
    mailchimp_lists_queue_existing($list, $removed_roles);
  }
  $list->label = $form_state['values']['label'];
  $list->name = $form_state['values']['name'];
  $list->description = $form_state['values']['description'];
  $list->settings = array(
    'roles' => array_filter($form_state['values']['roles']),
    'mergefields' => isset($form_state['values']['mergefields']) ? $form_state['values']['mergefields'] : NULL,
    'mergefields_display' => isset($form_state['values']['mergefields_display']) ? $form_state['values']['mergefields_display'] : NULL,
    'doublein' => $form_state['values']['doublein'],
    'show_register_form' => $form_state['values']['show_register_form'],
    'default_register_form_optin' => $form_state['values']['default_register_form_optin'],
    'show_account_form' => $form_state['values']['show_account_form'],
    'form_label' => $form_state['values']['form_label'],
    'submit_label' => $form_state['values']['submit_label'],
    'include_interest_groups' => $form_state['values']['include_interest_groups'],
    'opt_in_interest_groups' => $form_state['values']['opt_in_interest_groups'],
    'interest_groups_label' => $form_state['values']['interest_groups_label'],
    'cron' => $form_state['values']['cron'],
    'webhooks' => $webhook_ret & $form_state['values']['webhooks'],
    'allow_anonymous' => $form_state['values']['allow_anonymous'],
    'required' => $form_state['values']['required'],
  );
  if ($ret = mailchimp_lists_save($list)) {
    drupal_set_message(t('List @name has been saved.', array(
      '@name' => $list->label,
    )));
    $form_state['redirect'] = 'admin/config/services/mailchimp/lists';
  }
  else {
    drupal_set_message(t('There has been an error saving your list.'), 'error');
  }
}