function bat_event_type_add_target_entity_field in Booking and Availability Management Tools for Drupal 8
Same name and namespace in other branches
- 7 modules/bat_event/bat_event.module \bat_event_type_add_target_entity_field()
Create fields of type 'Entity Reference' to reference the target entity.
We need to create a field/instance for each possible target entity type.
1 call to bat_event_type_add_target_entity_field()
- EventType::save in modules/
bat_event/ src/ Entity/ EventType.php - Saves an entity permanently.
File
- modules/
bat_event/ bat_event.module, line 151 - Manage Events - Events store the EventValue of a Unit over a period of time.
Code
function bat_event_type_add_target_entity_field($entity) {
// Prevent interruption of config sync.
if (Drupal::isConfigSyncing()) {
return;
}
$entity_info = \Drupal::entityTypeManager()
->getDefinition($entity
->getTargetEntityType());
$field_name = 'event_' . $entity
->getTargetEntityType() . '_reference';
$field_storage = FieldStorageConfig::loadByName('bat_event', $field_name);
$field = FieldConfig::loadByName('bat_event', $entity
->id(), $field_name);
if (empty($field_storage)) {
$field_storage = FieldStorageConfig::create([
'field_name' => $field_name,
'entity_type' => 'bat_event',
'type' => 'entity_reference',
'cardinality' => 1,
'locked' => 1,
'settings' => [
'target_type' => $entity
->getTargetEntityType(),
],
]);
$field_storage
->save();
}
if (empty($field)) {
$field = FieldConfig::create([
'field_storage' => $field_storage,
'entity_type' => 'bat_event',
'label' => $entity_info
->getLabel()
->__toString(),
'bundle' => $entity
->id(),
'required' => TRUE,
'settings' => [
'handler' => 'default',
'handler_settings' => [],
],
]);
$field
->save();
$form_display = \Drupal::entityTypeManager()
->getStorage('entity_form_display')
->load('bat_event.' . $entity
->id() . '.default');
if (!$form_display) {
$form_display = EntityFormDisplay::create([
'targetEntityType' => 'bat_event',
'bundle' => $entity
->id(),
'mode' => 'default',
'status' => TRUE,
]);
}
$form_display
->setComponent($field_name, [
'type' => 'entity_reference_autocomplete',
'weight' => 3,
]);
$form_display
->save();
}
}