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;
}