You are here

public function MessageForm::buildForm in Courier 8

Same name and namespace in other branches
  1. 2.x courier_message_composer/src/Form/MessageForm.php \Drupal\courier_message_composer\Form\MessageForm::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

courier_message_composer/src/Form/MessageForm.php, line 83

Class

MessageForm
Create a message.

Namespace

Drupal\courier_message_composer\Form

Code

public function buildForm(array $form, FormStateInterface $form_state, ContentEntityTypeInterface $courier_channel = NULL) {
  $form['#title'] = $courier_channel
    ->getLabel();
  $t_args = [
    '@channel' => $courier_channel
      ->getLabel(),
  ];

  /** @var \Drupal\courier\ChannelInterface $message */
  $message = $this->entityManager
    ->getStorage($courier_channel
    ->id())
    ->create();
  $form_state
    ->set('message_entity', $message);

  // Identity.
  $form['identity_information'] = [
    '#type' => 'details',
    '#title' => $this
      ->t('Recipient'),
    '#description' => $this
      ->t('Select a recipient for the message.'),
    '#open' => TRUE,
  ];
  $form['identity_information']['identity'] = [
    '#type' => 'radios',
    '#options' => NULL,
    '#title' => $this
      ->t('Recipient'),
    '#required' => TRUE,
  ];
  $channels = $this->identityChannelManager
    ->getChannels();
  foreach ($channels[$courier_channel
    ->id()] as $entity_type_id) {
    $permission = 'courier_message_composer compose ' . $courier_channel
      ->id() . ' to ' . $entity_type_id;
    if (!$this
      ->currentUser()
      ->hasPermission($permission)) {
      continue;
    }
    $entity_type = $this->entityManager
      ->getDefinition($entity_type_id);
    $form['identity_information']['identity'][$entity_type_id] = [
      '#prefix' => '<div class="form-item container-inline">',
      '#suffix' => '</div>',
    ];
    $form['identity_information']['identity'][$entity_type_id]['radio'] = [
      '#type' => 'radio',
      '#title' => $entity_type
        ->getLabel(),
      '#return_value' => "{$entity_type_id}:*",
      '#parents' => [
        'identity',
      ],
      '#default_value' => $entity_type_id == 'user' ?: '',
      '#error_no_message' => TRUE,
    ];
    $form['identity_information']['identity'][$entity_type_id]['autocomplete'] = [
      '#type' => 'entity_autocomplete',
      '#title' => $entity_type
        ->getLabel(),
      '#title_display' => 'invisible',
      '#target_type' => $entity_type_id,
      '#tags' => FALSE,
      '#parents' => [
        'entity',
        $entity_type_id,
      ],
    ];
    if ($entity_type_id == 'user' && !$this
      ->currentUser()
      ->isAnonymous()) {
      $user = User::load($this
        ->currentUser()
        ->id());
      $form['identity_information']['identity'][$entity_type_id]['autocomplete']['#default_value'] = $user;
    }
  }

  // Form display.
  $display = entity_get_form_display($courier_channel
    ->id(), $courier_channel
    ->id(), 'default');
  $form_state
    ->set([
    'form_display',
  ], $display);
  $form['message'] = [
    '#tree' => TRUE,
  ];
  $display
    ->buildForm($message, $form['message'], $form_state);

  // Tokens.
  $form['tokens'] = [
    '#type' => 'container',
    '#title' => $this
      ->t('Tokens'),
    '#weight' => 51,
  ];
  $form['tokens']['list'] = $this
    ->courierTokenElement();
  $form['actions'] = [
    '#type' => 'actions',
  ];
  $form['actions']['submit'] = [
    '#type' => 'submit',
    '#value' => t('Send @channel', $t_args),
    '#button_type' => 'primary',
  ];
  return $form;
}