You are here

function campaignmonitor_registration_form_user_register_form_alter in Campaign Monitor 8.2

Same name and namespace in other branches
  1. 8 modules/campaignmonitor_registration/campaignmonitor_registration.module \campaignmonitor_registration_form_user_register_form_alter()
  2. 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';
    }
  }
}