function AddEventFormTrait::buildEventForm
2 calls to AddEventFormTrait::buildEventForm()
- AddEventForm::buildForm in src/Form/AddEventForm.php
- Form constructor.
- ReactionRuleAddForm::form in src/Form/ReactionRuleAddForm.php
- Gets the actual form array to be built.
File
-
src/Form/AddEventFormTrait.php, line 39
Class
- AddEventFormTrait
- Trait for adding an event.
Namespace
Drupal\rules\Form
Code
public function buildEventForm(array $form, FormStateInterface $form_state) {
$event_definitions = $this->eventManager
->getGroupedDefinitions();
$options = [];
foreach ($event_definitions as $group => $definitions) {
foreach ($definitions as $id => $definition) {
$options[$group][$id] = $definition['label'];
}
}
$form['#entity_builders'][] = '::entityBundleBuilder';
$form['selection'] = [
'#type' => 'details',
'#title' => $this->t('Event selection'),
'#open' => TRUE,
];
$form['selection']['events'] = [
'#tree' => TRUE,
];
$form['selection']['events'][]['event_name'] = [
'#type' => 'select',
'#title' => $this->t('React on event'),
'#options' => $options,
'#description' => $this->t('Rule evaluation is triggered whenever the selected event occurs.'),
'#required' => TRUE,
'#ajax' => [
'event' => 'change',
'wrapper' => 'entity-bundle-restriction',
'callback' => '::bundleSelectCallback',
],
];
$form['selection']['container'] = [
'#type' => 'container',
'#attributes' => [
'id' => 'entity-bundle-restriction',
],
];
$event_name = $form_state->getValue([
'events',
0,
'event_name',
]);
if (!empty($event_name)) {
$event_definition = $this->eventManager
->getDefinition($event_name);
$handler_class = $event_definition['class'];
if (is_subclass_of($handler_class, RulesConfigurableEventHandlerInterface::class)) {
$bundles = $this->entityBundleInfo
->getBundleInfo($event_definition['entity_type_id']);
array_walk($bundles, function (&$value, $key) {
$value = $value['label'];
});
$form['selection']['container']['bundle'] = [
'#type' => 'select',
'#title' => $this->t('Restrict by type'),
'#empty_option' => '- None -',
'#empty_value' => 'notselected',
'#options' => $bundles,
'#description' => $this->t('If you need to filter for multiple values, either add multiple events or use the "Entity is of bundle" condition. These options are available after saving this form.'),
];
}
}
return $form;
}