public function ContentModerationNotificationsFormBase::buildForm in Content Moderation Notifications 8.2
Same name and namespace in other branches
- 8.3 src/Form/ContentModerationNotificationsFormBase.php \Drupal\content_moderation_notifications\Form\ContentModerationNotificationsFormBase::buildForm()
- 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\FormCode
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;
}