You are here

public function EventAnEnrollForm::submitForm in Open Social 8.6

Same name and namespace in other branches
  1. 8.9 modules/social_features/social_event/modules/social_event_an_enroll/src/Form/EventAnEnrollForm.php \Drupal\social_event_an_enroll\Form\EventAnEnrollForm::submitForm()
  2. 8.3 modules/social_features/social_event/modules/social_event_an_enroll/src/Form/EventAnEnrollForm.php \Drupal\social_event_an_enroll\Form\EventAnEnrollForm::submitForm()
  3. 8.4 modules/social_features/social_event/modules/social_event_an_enroll/src/Form/EventAnEnrollForm.php \Drupal\social_event_an_enroll\Form\EventAnEnrollForm::submitForm()
  4. 8.5 modules/social_features/social_event/modules/social_event_an_enroll/src/Form/EventAnEnrollForm.php \Drupal\social_event_an_enroll\Form\EventAnEnrollForm::submitForm()
  5. 8.7 modules/social_features/social_event/modules/social_event_an_enroll/src/Form/EventAnEnrollForm.php \Drupal\social_event_an_enroll\Form\EventAnEnrollForm::submitForm()
  6. 8.8 modules/social_features/social_event/modules/social_event_an_enroll/src/Form/EventAnEnrollForm.php \Drupal\social_event_an_enroll\Form\EventAnEnrollForm::submitForm()
  7. 10.3.x modules/social_features/social_event/modules/social_event_an_enroll/src/Form/EventAnEnrollForm.php \Drupal\social_event_an_enroll\Form\EventAnEnrollForm::submitForm()
  8. 10.0.x modules/social_features/social_event/modules/social_event_an_enroll/src/Form/EventAnEnrollForm.php \Drupal\social_event_an_enroll\Form\EventAnEnrollForm::submitForm()
  9. 10.1.x modules/social_features/social_event/modules/social_event_an_enroll/src/Form/EventAnEnrollForm.php \Drupal\social_event_an_enroll\Form\EventAnEnrollForm::submitForm()
  10. 10.2.x modules/social_features/social_event/modules/social_event_an_enroll/src/Form/EventAnEnrollForm.php \Drupal\social_event_an_enroll\Form\EventAnEnrollForm::submitForm()

Form submission handler.

Parameters

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

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

Overrides EnrollActionForm::submitForm

File

modules/social_features/social_event/modules/social_event_an_enroll/src/Form/EventAnEnrollForm.php, line 115

Class

EventAnEnrollForm
Class EventAnEnrollForm.

Namespace

Drupal\social_event_an_enroll\Form

Code

public function submitForm(array &$form, FormStateInterface $form_state) {
  $current_user = $this->currentUser;
  $uid = $current_user
    ->id();
  if ($current_user
    ->isAnonymous()) {
    $nid = $form_state
      ->getValue('field_event');
    $values = $form_state
      ->getValues();
    $values['user_id'] = $uid;
    $values['field_account'] = $uid;
    $values['field_enrollment_status'] = '1';

    // Check if there is enrollment with the same email.
    $conditions = [
      'field_email' => $values['field_email'],
      'field_event' => $nid,
    ];
    $enrollments = $this->entityStorage
      ->loadByProperties($conditions);
    if ($enrollment = array_pop($enrollments)) {
      $values['field_token'] = $enrollment
        ->get('field_token')
        ->getString();
      drupal_set_message($this
        ->t('You have been already enrolled to this event. You have also received a notification via email.'));
    }
    else {
      $values['field_token'] = Crypt::randomBytesBase64();

      // Create a new enrollment for the event.
      $enrollment = EventEnrollment::create($values);
      $enrollment
        ->save();

      // Invalidate cache for our enrollment cache tag in
      // social_event_node_view_alter().
      $cache_tags[] = 'enrollment:' . $nid . '-' . $uid;
      $cache_tags[] = 'node:' . $nid;
      Cache::invalidateTags($cache_tags);
      drupal_set_message($this
        ->t('You have successfully enrolled to this event. You have also received a notification via email.'));
    }

    // Redirect anonymous use to login page before enrolling to an event.
    $form_state
      ->setRedirect('entity.node.canonical', [
      'node' => $nid,
    ], [
      'query' => [
        'token' => $values['field_token'],
      ],
    ]);

    // Send email if the setting is enabled.
    $event_an_enroll_config = $this
      ->config('social_event_an_enroll.settings');
    if ($event_an_enroll_config
      ->get('event_an_enroll_email_notify')) {
      social_event_an_enroll_send_mail($values);
    }
  }
}