You are here

function mailchimp_lists_auth_newsletter_form in Mailchimp 7.2

Return a form element for a single newsletter.

2 calls to mailchimp_lists_auth_newsletter_form()
mailchimp_lists_form_user_register_form_alter in modules/mailchimp_lists/mailchimp_lists.module
Implements hook_form_FORM_ID_alter().
mailchimp_lists_user_subscribe_form in modules/mailchimp_lists/mailchimp_lists.module
Returns a subscription form, or forms, for a given user as a single form.

File

modules/mailchimp_lists/mailchimp_lists.module, line 461
Mailchimp lists module.

Code

function mailchimp_lists_auth_newsletter_form(&$form, $list, $account, $add_header = FALSE) {

  // Determine if a user is subscribed to the list.
  $is_subscribed = FALSE;
  $default_subscribed = FALSE;
  $is_anonymous = !empty($account->roles[DRUPAL_ANONYMOUS_RID]) && empty($account->roles[DRUPAL_AUTHENTICATED_RID]);
  if ($account && $account->uid > 0) {
    $is_subscribed = mailchimp_is_subscribed($list->mc_list_id, $account->mail);
  }
  elseif (!$list->settings['required']) {
    $default_subscribed = !empty($list->settings['default_register_form_optin']);
  }

  // Wrap in a div:
  $wrapper_key = 'mailchimp_' . $list->name;
  $form[$wrapper_key] = array(
    '#prefix' => '<div id="mailchimp-newsletter-' . $list->name . '" class="mailchimp-newsletter-wrapper">',
    '#suffix' => '</div>',
  );
  $form[$wrapper_key]['list'] = array(
    '#type' => 'value',
    '#value' => $list,
  );

  // Add the title and description to lists for anonymous users or if requested:
  if ($add_header || $list->settings['allow_anonymous'] && $is_anonymous) {
    $label_text = isset($list->settings['form_label']) ? $list->settings['form_label'] : 'Sign up for ' . $list
      ->label();
    $label = html_entity_decode(check_plain($label_text, ENT_QUOTES, 'UTF-8'));
    $form[$wrapper_key]['title'] = array(
      '#type' => 'item',
      '#markup' => $label,
      '#description' => t('@mc_list_description', array(
        '@mc_list_description' => $list->description,
      )),
    );
  }

  // Add merge vars for anonymous forms:
  if ($list->settings['allow_anonymous'] && $is_anonymous) {
    $mergevalues = NULL;
    $mc_list = mailchimp_get_list($list->mc_list_id);
    if (!empty($mc_list['mergevars'])) {
      foreach ($mc_list['mergevars'] as $mergevar) {
        if (!empty($list->settings['mergefields_display'][$mergevar['tag']])) {
          $form[$wrapper_key]['mergevars'][$mergevar['tag']] = mailchimp_lists_insert_drupal_form_tag($mergevar);
        }
      }
    }
  }
  elseif (!$list->settings['required']) {
    $form[$wrapper_key]['subscribe'] = array(
      '#type' => 'checkbox',
      '#title' => isset($list->settings['form_label']) ? t($list->settings['form_label']) : t('Subscribe to the @newsletter newsletter', array(
        '@newsletter' => $list
          ->label(),
      )),
      '#default_value' => $default_subscribed && !$account->uid || $is_subscribed,
      '#description' => $list->description,
    );
  }
  elseif (!$add_header) {
    $form[$wrapper_key]['description'] = array(
      '#markup' => $list->description,
    );
  }

  // Present interest groups:
  if ($list->settings['include_interest_groups']) {
    $mc_list = mailchimp_get_list($list->mc_list_id);

    // Perform test in case error comes back from MCAPI when getting groups:
    if (is_array($mc_list['intgroups'])) {
      $form[$wrapper_key]['interest_groups'] = array(
        '#type' => 'fieldset',
        '#title' => isset($list->settings['interest_groups_label']) ? t($list->settings['interest_groups_label']) : t('Interest Groups'),
        '#weight' => 100,
        '#states' => array(
          'collapsed' => array(
            ':input[name="mailchimp_lists[mailchimp_' . $list->name . '][subscribe]"]' => array(
              'checked' => FALSE,
            ),
          ),
        ),
      );
      foreach ($mc_list['intgroups'] as $group) {

        // Ignore hidden fields:
        // @todo: consider merging to hidden values.
        if ($group['form_field'] == 'hidden') {
          continue;
        }

        // Set the form field type:
        switch ($group['form_field']) {
          case 'radio':
            $field_type = 'radios';
            break;
          case 'dropdown':
            $field_type = 'select';
            break;
          default:
            $field_type = $group['form_field'];
        }

        // Extract the field options:
        $options = array();
        foreach ((array) $group['groups'] as $option) {
          $options[$option['name']] = $option['name'];
        }

        // Grab the default values for this group:
        // @todo: find a better way.
        $default_merge_values = array();
        $default_opt_in = FALSE;
        if ($account->uid) {
          $memberinfo = mailchimp_get_memberinfo($list->mc_list_id, $account->mail);
          if (isset($memberinfo['merges']['GROUPINGS'])) {
            foreach ($memberinfo['merges']['GROUPINGS'] as $membergroup) {
              if ($membergroup['id'] == $group['id']) {
                $default_merge_values = preg_split('#(?<!\\\\)\\,#', str_replace(', ', ',', $membergroup['groups']));
                $default_merge_values = str_replace('\\,', ', ', $default_merge_values);
                break;
              }
            }
          }
        }
        elseif (isset($list->settings['opt_in_interest_groups']) && $list->settings['opt_in_interest_groups']) {
          $default_opt_in = TRUE;
          $default_merge_values = $options;
        }
        $form[$wrapper_key]['interest_groups'][$group['id']] = array(
          '#type' => $field_type,
          '#title' => $group['name'],
          '#options' => $options,
          '#default_value' => $is_subscribed || $default_opt_in ? $default_merge_values : array(),
          '#attributes' => array(
            'class' => array(
              'mailchimp-newsletter-interests-' . $list->id,
            ),
          ),
        );
      }
    }
  }
  return $form;
}