You are here

public function ContentModerationNotificationsFormBase::buildForm in Content Moderation Notifications 8.2

Same name and namespace in other branches
  1. 8.3 src/Form/ContentModerationNotificationsFormBase.php \Drupal\content_moderation_notifications\Form\ContentModerationNotificationsFormBase::buildForm()
  2. 8 src/Form/ContentModerationNotificationsFormBase.php \Drupal\content_moderation_notifications\Form\ContentModerationNotificationsFormBase::buildForm()

Overrides Drupal\Core\Entity\EntityFormController::form().

Builds the entity add/edit form.

Parameters

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

\Drupal\Core\Form\FormStateInterface $form_state: An associative array containing the current state of the form.

Return value

array An associative array containing the content_moderation_notification add/edit form.

Overrides EntityForm::buildForm

File

src/Form/ContentModerationNotificationsFormBase.php, line 106

Class

ContentModerationNotificationsFormBase
Class ContentModerationNotificationFormBase.

Namespace

Drupal\content_moderation_notifications\Form

Code

public function buildForm(array $form, FormStateInterface $form_state) {

  // Get anything we need from the base class.
  $form = parent::buildForm($form, $form_state);

  // Drupal provides the entity to us as a class variable. If this is an
  // existing entity, it will be populated with existing values as class
  // variables. If this is a new entity, it will be a new object with the
  // class of our entity. Drupal knows which class to call from the
  // annotation on our ContentModerationNotification class.
  $content_moderation_notification = $this->entity;

  // Retrieve a list of all possible workflows.
  $workflows = $this->entityTypeManager
    ->getStorage('workflow')
    ->loadMultiple();

  // Build the options array of workflows.
  $workflow_options = [];
  foreach ($workflows as $workflow_id => $workflow) {
    $workflow_options[$workflow_id] = $workflow
      ->label();
  }

  // Default to the first workflow in the list.
  $workflow_keys = array_keys($workflow_options);
  if ($form_state
    ->getValue('workflow')) {
    $selected_workflow = $form_state
      ->getValue('workflow');
  }
  elseif (isset($content_moderation_notification->workflow)) {
    $selected_workflow = $content_moderation_notification->workflow;
  }
  else {
    $selected_workflow = array_shift($workflow_keys);
  }
  $form['id'] = [
    '#type' => 'machine_name',
    '#title' => $this
      ->t('Machine name'),
    '#default_value' => $content_moderation_notification
      ->id(),
    '#machine_name' => [
      'exists' => [
        $this,
        'exists',
      ],
      'replace_pattern' => '([^a-z0-9_]+)|(^custom$)',
      'error' => 'The machine-readable name must be unique, and can only contain lowercase letters, numbers, and underscores. Additionally, it can not be the reserved word "custom".',
    ],
    '#disabled' => !$content_moderation_notification
      ->isNew(),
  ];
  $options = [
    0 => $this
      ->t('Disabled'),
    1 => $this
      ->t('Enabled'),
  ];
  $form['status'] = [
    '#type' => 'select',
    '#title' => $this
      ->t('Status'),
    '#options' => $options,
    '#default_value' => $content_moderation_notification
      ->status(),
    '#description' => t('Enable or disable notification.'),
  ];

  // Allow the workflow to be selected, this will dynamically update the
  // available transition lists.
  $form['workflow'] = [
    '#type' => 'select',
    '#title' => $this
      ->t('Workflow'),
    '#options' => $workflow_options,
    '#default_value' => $selected_workflow,
    '#required' => TRUE,
    '#description' => t('Select a workflow'),
    '#ajax' => [
      'wrapper' => 'workflow_transitions_wrapper',
      'callback' => 'Drupal\\content_moderation_notifications\\Form\\ContentModerationNotificationsFormBase::updateWorkflowTransitions',
    ],
  ];

  // Ajax replaceable fieldset.
  $form['transitions_wrapper'] = [
    '#type' => 'container',
    '#prefix' => '<div id="workflow_transitions_wrapper">',
    '#suffix' => '</div>',
  ];

  // Transitions.
  $state_transitions_options = [];
  $state_transitions = $workflows[$selected_workflow]
    ->getTransitions();
  foreach ($state_transitions as $key => $transition) {
    $state_transitions_options[$key] = $transition
      ->label();
  }
  $form['transitions_wrapper']['transitions'] = [
    '#type' => 'checkboxes',
    '#title' => $this
      ->t('Transitions'),
    '#options' => $state_transitions_options,
    '#default_value' => isset($content_moderation_notification->transitions) ? $content_moderation_notification->transitions : [],
    '#required' => TRUE,
    '#description' => t('Select which transitions triggers this notification.'),
  ];

  // Role selection.
  $roles_options = [];
  foreach (user_roles(TRUE) as $name => $role) {
    $roles_options[$name] = $role
      ->label();
  }
  $form['roles'] = [
    '#type' => 'checkboxes',
    '#title' => $this
      ->t('Roles'),
    '#options' => $roles_options,
    '#default_value' => isset($content_moderation_notification->roles) ? $content_moderation_notification->roles : [],
    '#description' => t('Send notifications to all users with these roles.'),
  ];

  // Send email to author?
  $form['author'] = [
    '#type' => 'checkbox',
    '#title' => $this
      ->t('Email the author?'),
    '#default_value' => isset($content_moderation_notification->author) ? $content_moderation_notification->author : 0,
    '#description' => t('Send notifications to the current author of the content.'),
  ];
  $form['emails'] = [
    '#type' => 'textfield',
    '#title' => $this
      ->t('Adhoc email addresses'),
    '#default_value' => isset($content_moderation_notification->emails) ? $content_moderation_notification->emails : '',
    '#description' => t('Send notifications to these email addresses, emails should be entered as a comma separated list.'),
  ];

  // Email subject line.
  $form['subject'] = [
    '#type' => 'textfield',
    '#title' => t('Email Subject'),
    '#default_value' => isset($content_moderation_notification->subject) ? $content_moderation_notification->subject : '',
    '#empty_value' => '',
  ];

  // Email body content.
  $form['body'] = [
    '#type' => 'text_format',
    '#format' => isset($content_moderation_notification->body) ? $content_moderation_notification->body['format'] : filter_default_format(),
    '#title' => t('Email Body'),
    '#default_value' => isset($content_moderation_notification->body) ? $content_moderation_notification->body['value'] : '',
    '#empty_value' => '',
  ];

  // Return the form.
  return $form;
}