public function ContentModerationNotificationsFormBase::buildForm in Content Moderation Notifications 8.3
Same name and namespace in other branches
- 8 src/Form/ContentModerationNotificationsFormBase.php \Drupal\content_moderation_notifications\Form\ContentModerationNotificationsFormBase::buildForm()
- 8.2 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 53
Class
- ContentModerationNotificationsFormBase
- Class ContentModerationNotificationFormBase.
Namespace
Drupal\content_moderation_notifications\FormCode
public function buildForm(array $form, FormStateInterface $form_state) {
// Retrieve a list of all possible workflows.
/** @var \Drupal\workflows\WorkflowInterface[] $workflows */
$workflows = $this->entityTypeManager
->getStorage('workflow')
->loadMultiple();
// Return early if there are no available workflows.
if (empty($workflows)) {
$form['no_workflows'] = [
'#type' => 'markup',
'#markup' => $this
->t('No workflows available. <a href=":url">Manage workflows</a>.', [
':url' => Url::fromRoute('entity.workflow.collection')
->toString(),
]),
];
return $form;
}
// 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.
/** @var \Drupal\content_moderation_notifications\ContentModerationNotificationInterface $content_moderation_notification */
$content_moderation_notification = $this->entity;
// 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['label'] = [
'#title' => $this
->t('Label'),
'#type' => 'textfield',
'#default_value' => $content_moderation_notification
->label(),
'#description' => $this
->t('The label for this notification.'),
'#required' => TRUE,
'#size' => 30,
];
$form['id'] = [
'#type' => 'machine_name',
'#title' => $this
->t('Machine name'),
'#default_value' => $content_moderation_notification
->id(),
'#machine_name' => [
'exists' => [
$this,
'exists',
],
'source' => [
'label',
],
],
'#disabled' => !$content_moderation_notification
->isNew(),
];
// 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' => $this
->t('Select a workflow'),
'#ajax' => [
'wrapper' => 'workflow_transitions_wrapper',
'callback' => static::class . '::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]
->getTypePlugin()
->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' => $this
->t('Select which transitions triggers this notification.'),
];
// Role selection.
$roles_options = user_role_names(TRUE);
$form['roles'] = [
'#type' => 'checkboxes',
'#title' => $this
->t('Roles'),
'#options' => $roles_options,
'#default_value' => $content_moderation_notification
->getRoleIds(),
'#description' => $this
->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' => $content_moderation_notification
->sendToAuthor(),
'#description' => $this
->t('Send notifications to the current author of the content.'),
];
$form['site_mail'] = [
'#type' => 'checkbox',
'#title' => $this
->t('Disable the site email address'),
'#default_value' => $content_moderation_notification
->disableSiteMail(),
'#description' => $this
->t('Do not send notifications to the site email address.'),
];
$form['emails'] = [
'#type' => 'textarea',
'#title' => $this
->t('Adhoc email addresses'),
'#default_value' => $content_moderation_notification
->getEmails(),
'#description' => $this
->t('Send notifications to these email addresses, emails should be entered as a comma separated list and optionally on separate lines.'),
];
// Email subject line.
$form['subject'] = [
'#type' => 'textfield',
'#title' => $this
->t('Email Subject'),
'#default_value' => $content_moderation_notification
->getSubject(),
'#required' => TRUE,
'#maxlength' => 1024,
];
// Email body content.
$form['body'] = [
'#type' => 'text_format',
'#format' => $content_moderation_notification
->getMessageFormat() ?: filter_default_format(),
'#title' => $this
->t('Email Body'),
'#default_value' => $content_moderation_notification
->getMessage(),
];
// Add token tree link if module exists.
if ($this->moduleHandler
->moduleExists('token')) {
$form['body']['token_tree_link'] = [
'#theme' => 'token_tree_link',
'#token_types' => array_unique([
'user',
$selected_workflow,
'node',
]),
'#weight' => 10,
];
}
// Return the form.
return $form;
}