function campaignmonitor_registration_form_user_register_form_alter in Campaign Monitor 8.2
Same name and namespace in other branches
- 8 modules/campaignmonitor_registration/campaignmonitor_registration.module \campaignmonitor_registration_form_user_register_form_alter()
- 7 modules/campaignmonitor_registration/campaignmonitor_registration.module \campaignmonitor_registration_form_user_register_form_alter()
Implements hook_form_BASE_FORM_ID_alter().
Hooks into the registration form and adds the option to select one of the available Campaign Monitor lists on registration.
File
- modules/
campaignmonitor_registration/ campaignmonitor_registration.module, line 17 - Select newsletter lists users want to subscribe on the registration page.
Code
function campaignmonitor_registration_form_user_register_form_alter(&$form, FormStateInterface &$form_state) {
$config = \Drupal::config('campaignmonitor_registration.settings');
$config = $config
->getRawData();
$form['campaignmonitor_subscribe'] = [
'#type' => 'checkbox',
'#title' => $config['checkbox_text'],
'#attributes' => [
'class' => [
'campaignmonitor-subscribe',
],
],
];
switch ($config['list']) {
case 'single':
$campaignManager = \Drupal::service('campaignmonitor.manager');
// Get the settings for this list.
$settings = $campaignManager
->getListSettings($config['list_id']);
$campaignSubscriptionManager = \Drupal::service('campaignmonitor.subscription_manager');
$subscription_form = $campaignSubscriptionManager
->singleSubscribeForm($config);
// Drupal flattens array and we lose CustomFields on submit.
$custom_fields = [];
foreach ($subscription_form['CustomFields'] as $field_name => $value) {
$custom_fields[] = $field_name;
}
$form['custom_fields'] = [
'#type' => 'hidden',
'#value' => serialize($custom_fields),
];
// Make field visibility conditional.
if (isset($subscription_form['name'])) {
$subscription_form['name']['#states'] = [
'visible' => [
'input[name="campaignmonitor_subscribe"]' => [
'checked' => TRUE,
],
],
];
}
if (isset($subscription_form['explanation'])) {
$subscription_form['explanation']['#states'] = [
'visible' => [
'input[name="campaignmonitor_subscribe"]' => [
'checked' => TRUE,
],
],
];
}
if (isset($subscription_form['CustomFields'])) {
foreach ($subscription_form['CustomFields'] as $key => &$item) {
$item['#states'] = [
'visible' => [
'input[name="campaignmonitor_subscribe"]' => [
'checked' => TRUE,
],
],
];
if ($settings['CustomFields'][$key]['required']) {
unset($item['#required']);
$item['#states']['required'] = [
'input[name="campaignmonitor_subscribe"]' => [
'checked' => TRUE,
],
];
}
}
}
$form += $subscription_form;
break;
default:
$campaignManager = \Drupal::service('campaignmonitor.manager');
$lists = $campaignManager
->getLists();
$config = Drupal::config('campaignmonitor_registration.settings');
// Build options for the form selector.
$options = [];
$option_descriptions = [];
foreach ($lists as $list_id => $list) {
// Check if the list is selected to be shown.
$list_options = $campaignManager
->getListSettings($list_id);
if ($campaignManager
->isListEnabled($list_id) && $list_options && isset($list_options['display']['registration']) && $list_options['display']['registration']) {
$options[$list_id] = $list['name'];
$defaults = $campaignManager
->getListSettings($list_id);
if (isset($defaults['display']['description'])) {
$option_descriptions[$list_id] = $defaults['display']['description'];
}
}
}
if (!empty($options)) {
$defaults = $lists;
$form['selection'] = [
'#type' => 'checkboxes',
'#description' => !empty($defaults['instructions']) ? $defaults['instructions'] : t('Select the news lists that you want to subscribe to.'),
'#options' => $options,
'#option_descriptions' => $option_descriptions,
'#after_build' => [
'_campaignmonitor_registration_option_descriptions',
],
];
}
}
$form['config'] = [
'#type' => 'hidden',
'#value' => serialize($config),
];
foreach (array_keys($form['actions']) as $action) {
if ($action != 'preview' && isset($form['actions'][$action]['#type']) && $form['actions'][$action]['#type'] === 'submit') {
$form['actions'][$action]['#submit'][] = 'campaignmonitor_registration_form_user_register_submit';
}
}
}