You are here

public function EnrollActionForm::buildForm in Open Social 8

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

Form constructor.

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 The form structure.

Overrides FormInterface::buildForm

File

modules/social_features/social_event/src/Form/EnrollActionForm.php, line 121

Class

EnrollActionForm
Class EnrollActionForm.

Namespace

Drupal\social_event\Form

Code

public function buildForm(array $form, FormStateInterface $form_state) {
  $nid = $this->routeMatch
    ->getRawParameter('node');
  $current_user = $this->currentUser;
  $uid = $current_user
    ->id();

  // We check if the node is placed in a Group I am a member of. If not,
  // we are not going to build anything.
  if (!empty($nid)) {
    if (!is_object($nid) && !is_null($nid)) {
      $node = $this->entityTypeManager
        ->getStorage('node')
        ->load($nid);
    }
    $groups = $this
      ->getGroups($node);
    if (!empty($groups)) {
      $group_type_ids = $this->configFactory
        ->getEditable('social_event.settings')
        ->get('enroll');
      foreach ($groups as $group) {
        $group_type_id = $group
          ->bundle();
        if (in_array($group_type_id, $group_type_ids) && $group
          ->hasPermission('join group', $current_user)) {
          break;
        }
        if ($group
          ->hasPermission('enroll to events in groups', $current_user) == FALSE) {
          return [];
        }
      }
    }
  }
  $form['event'] = [
    '#type' => 'hidden',
    '#value' => $nid,
  ];
  $submit_text = $this
    ->t('Enroll');
  $enrollment_open = TRUE;

  // Add the enrollment closed label.
  if ($this
    ->eventHasBeenFinished($node)) {
    $submit_text = $this
      ->t('Event has passed');
    $enrollment_open = FALSE;
  }
  $conditions = [
    'field_account' => $uid,
    'field_event' => $nid,
  ];
  $to_enroll_status = '1';
  $enrollments = $this->entityStorage
    ->loadByProperties($conditions);
  if ($enrollment = array_pop($enrollments)) {
    $current_enrollment_status = $enrollment->field_enrollment_status->value;
    if ($current_enrollment_status === '1') {
      $submit_text = $this
        ->t('Enrolled');
      $to_enroll_status = '0';
    }
  }
  $form['to_enroll_status'] = [
    '#type' => 'hidden',
    '#value' => $to_enroll_status,
  ];
  $form['enroll_for_this_event'] = [
    '#type' => 'submit',
    '#value' => $submit_text,
    '#disabled' => !$enrollment_open,
  ];
  $form['#attributes']['name'] = 'enroll_action_form';
  if (isset($enrollment->field_enrollment_status->value) && $enrollment->field_enrollment_status->value === '1') {

    // Extra attributes needed for when a user is logged in. This will make
    // sure the button acts like a dropwdown.
    $form['enroll_for_this_event']['#attributes'] = [
      'class' => [
        'btn',
        'btn-accent brand-bg-accent',
        'btn-lg btn-raised',
        'dropdown-toggle',
        'waves-effect',
      ],
      'autocomplete' => 'off',
      'data-toggle' => 'dropdown',
      'aria-haspopup' => 'true',
      'aria-expanded' => 'false',
      'data-caret' => 'true',
    ];
    $cancel_text = $this
      ->t('Cancel enrollment');

    // Add markup for the button so it will be a dropdown.
    $form['feedback_user_has_enrolled'] = [
      '#markup' => '<ul class="dropdown-menu dropdown-menu-right"><li><a href="#" class="enroll-form-submit"> ' . $cancel_text . ' </a></li></ul>',
    ];
    $form['#attached']['library'][] = 'social_event/form_submit';
  }
  return $form;
}