You are here

public function SocialEventManagersAddEnrolleeForm::buildForm in Open Social 10.0.x

Same name and namespace in other branches
  1. 8.9 modules/social_features/social_event/modules/social_event_managers/src/Form/SocialEventManagersAddEnrolleeForm.php \Drupal\social_event_managers\Form\SocialEventManagersAddEnrolleeForm::buildForm()
  2. 8.5 modules/social_features/social_event/modules/social_event_managers/src/Form/SocialEventManagersAddEnrolleeForm.php \Drupal\social_event_managers\Form\SocialEventManagersAddEnrolleeForm::buildForm()
  3. 8.6 modules/social_features/social_event/modules/social_event_managers/src/Form/SocialEventManagersAddEnrolleeForm.php \Drupal\social_event_managers\Form\SocialEventManagersAddEnrolleeForm::buildForm()
  4. 8.7 modules/social_features/social_event/modules/social_event_managers/src/Form/SocialEventManagersAddEnrolleeForm.php \Drupal\social_event_managers\Form\SocialEventManagersAddEnrolleeForm::buildForm()
  5. 8.8 modules/social_features/social_event/modules/social_event_managers/src/Form/SocialEventManagersAddEnrolleeForm.php \Drupal\social_event_managers\Form\SocialEventManagersAddEnrolleeForm::buildForm()
  6. 10.3.x modules/social_features/social_event/modules/social_event_managers/src/Form/SocialEventManagersAddEnrolleeForm.php \Drupal\social_event_managers\Form\SocialEventManagersAddEnrolleeForm::buildForm()
  7. 10.1.x modules/social_features/social_event/modules/social_event_managers/src/Form/SocialEventManagersAddEnrolleeForm.php \Drupal\social_event_managers\Form\SocialEventManagersAddEnrolleeForm::buildForm()
  8. 10.2.x modules/social_features/social_event/modules/social_event_managers/src/Form/SocialEventManagersAddEnrolleeForm.php \Drupal\social_event_managers\Form\SocialEventManagersAddEnrolleeForm::buildForm()

Defines the settings form for Post entities.

Parameters

array $form: An associative array containing the structure of the form.

\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.

Return value

array Form definition array.

Overrides FormInterface::buildForm

File

modules/social_features/social_event/modules/social_event_managers/src/Form/SocialEventManagersAddEnrolleeForm.php, line 152

Class

SocialEventManagersAddEnrolleeForm
Class SocialEventTypeSettings.

Namespace

Drupal\social_event_managers\Form

Code

public function buildForm(array $form, FormStateInterface $form_state) {
  $form['#attributes']['class'][] = 'form--default';
  $nid = $this->routeMatch
    ->getRawParameter('node');
  if (empty($nid)) {
    $node = $this->routeMatch
      ->getParameter('node');
    if ($node instanceof NodeInterface) {

      // You can get nid and anything else you need from the node object.
      $nid = $node
        ->id();
    }
    elseif (!is_object($node)) {
      $nid = $node;
    }
  }

  // Load the current Event enrollments so we can check duplicates.
  $storage = $this->entityTypeManager
    ->getStorage('event_enrollment');
  $enrollments = $storage
    ->loadByProperties([
    'field_event' => $nid,
  ]);
  $enrollmentIds = [];
  foreach ($enrollments as $enrollment) {
    $enrollmentIds[] = $enrollment
      ->getAccount();
  }
  $form['users_fieldset'] = [
    '#type' => 'fieldset',
    '#tree' => TRUE,
    '#collapsible' => FALSE,
    '#collapsed' => FALSE,
    '#attributes' => [
      'class' => [
        'form-horizontal',
      ],
    ],
  ];

  // @todo Validation should go on the element and return a nice list.
  $form['users_fieldset']['user'] = [
    '#title' => $this
      ->t('Find people by name or email address'),
    '#type' => 'select2',
    '#multiple' => TRUE,
    '#tags' => TRUE,
    '#autocomplete' => TRUE,
    '#select2' => [
      'placeholder' => t('Jane Doe'),
      'tokenSeparators' => [
        ',',
        ';',
      ],
    ],
    '#selection_handler' => 'social',
    '#selection_settings' => [
      'skip_entity' => $enrollmentIds,
    ],
    '#target_type' => 'user',
    '#element_validate' => [
      [
        $this,
        'uniqueMembers',
      ],
    ],
  ];

  // Add the params that the email preview needs.
  $params = [
    'user' => $this
      ->currentUser(),
    'node' => $this->entityTypeManager
      ->getStorage('node')
      ->load($nid),
  ];
  $variables = [
    '%site_name' => \Drupal::config('system.site')
      ->get('name'),
  ];

  // Load event invite configuration.
  $add_directly_config = $this->configFactory
    ->get('message.template.member_added_by_event_organiser')
    ->getRawData();
  $invite_config = $this->configFactory
    ->get('social_event_invite.settings');

  // Replace the tokens with similar ones since these rely
  // on the message object which we don't have in the preview.
  $add_directly_config['text'][2]['value'] = str_replace('[message:author:display-name]', '[user:display-name]', $add_directly_config['text'][2]['value']);
  $add_directly_config['text'][2]['value'] = str_replace('[social_event:event_iam_organizing]', '[node:title]', $add_directly_config['text'][2]['value']);

  // Cleanup message body and replace any links on invite preview page.
  $body = $this->token
    ->replace($add_directly_config['text'][2]['value'], $params);
  $body = preg_replace('/href="([^"]*)"/', 'href="#"', $body);

  // Get default logo image and replace if it overridden with email settings.
  $theme_id = $this->configFactory
    ->get('system.theme')
    ->get('default');
  $logo = $this
    ->getRequest()
    ->getBaseUrl() . theme_get_setting('logo.url', $theme_id);
  $email_logo = theme_get_setting('email_logo', $theme_id);
  if (is_array($email_logo) && !empty($email_logo)) {
    $file = File::load(reset($email_logo));
    if ($file instanceof File) {
      $logo = file_create_url($file
        ->getFileUri());
    }
  }
  $form['email_preview'] = [
    '#type' => 'fieldset',
    '#title' => [
      'text' => [
        '#markup' => t('Preview your email'),
      ],
      'icon' => [
        '#markup' => '<svg class="icon icon-expand_more"><use xlink:href="#icon-expand_more" /></svg>',
        '#allowed_tags' => [
          'svg',
          'use',
        ],
      ],
    ],
    '#tree' => TRUE,
    '#collapsible' => TRUE,
    '#collapsed' => TRUE,
    '#attributes' => [
      'class' => [
        'form-horizontal',
        'form-preview-email',
      ],
    ],
  ];
  $form['email_preview']['preview'] = [
    '#theme' => 'invite_email_preview',
    '#title' => $this
      ->t('Message'),
    '#logo' => $logo,
    '#subject' => $this
      ->t('Notification from %site_name', $variables),
    '#body' => $body,
    '#helper' => $this->token
      ->replace($invite_config
      ->get('invite_helper'), $params),
  ];
  $form['actions']['cancel'] = [
    '#type' => 'link',
    '#title' => t('Cancel'),
    '#url' => Url::fromRoute('view.event_manage_enrollments.page_manage_enrollments', [
      'node' => $nid,
    ]),
  ];
  $form['actions']['submit'] = [
    '#type' => 'submit',
    '#value' => $this
      ->t('Save'),
    '#button_type' => 'primary',
  ];

  // Ensure form actions are nicely wrapped.
  $form['actions']['#prefix'] = '<div class="form-actions">';
  $form['actions']['#suffix'] = '</div>';

  // Add some classes to make it consistent with GroupMember add.
  $form['actions']['submit']['#attributes']['class'] = [
    'button button--primary js-form-submit form-submit btn js-form-submit btn-raised btn-primary waves-effect waves-btn waves-light',
  ];
  $form['actions']['cancel']['#attributes']['class'] = [
    'button button--danger btn btn-flat waves-effect waves-btn',
  ];
  $form['#cache']['contexts'][] = 'user';
  return $form;
}