contacts_events-8.x-1.x-dev/modules/accommodation/contacts_events_accommodation.module
modules/accommodation/contacts_events_accommodation.module
<?php
/**
* @file
* Provide bookable accommodation for events.
*/
use Drupal\Core\Entity\ContentEntityForm;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\entity\BundleFieldDefinition;
/**
* Implements hook_entity_type_alter().
*/
function contacts_events_accommodation_entity_type_alter(array &$entity_types) {
$entity_types['commerce_order']->setFormClass('booking_admin_accom_camping', ContentEntityForm::class);
}
/**
* Implements hook_entity_field_storage_info().
*/
function contacts_events_accommodation_entity_field_storage_info(EntityTypeInterface $entity_type) {
$fields = [];
if ($entity_type->id() == 'c_events_accommodation') {
$fields['pitch_size'] = BundleFieldDefinition::create('decimal')
->setName('pitch_size')
->setTargetEntityTypeId($entity_type->id());
}
return $fields;
}
/**
* Implements hook_entity_base_field_info().
*/
function contacts_events_accommodation_entity_base_field_info(EntityTypeInterface $entity_type) {
$fields = [];
if ($entity_type->id() == 'contacts_event') {
$fields['accommodation_types'] = BaseFieldDefinition::create('entity_reference')
->setName('accommodation_types')
->setTargetEntityTypeId($entity_type->id())
->setLabel(new TranslatableMarkup('Accommodation types'))
->setDescription(new TranslatableMarkup('Select which accommodation types are available for this event. If none are selected, accommodation will be disabled.'))
->setDisplayConfigurable('form', TRUE)
->setDisplayOptions('form', [
'type' => 'options_buttons',
'label' => 'above',
'weight' => 8,
])
->setSetting('target_type', 'c_events_accommodation_type')
->setCardinality(FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED);
}
return $fields;
}
/**
* Implements hook_entity_bundle_field_info_alter().
*/
function contacts_events_accommodation_entity_bundle_field_info_alter(&$fields, EntityTypeInterface $entity_type, $bundle) {
if ($entity_type->id() == 'commerce_order_item' && substr($bundle, 0, 9) == 'ce_accom_') {
$handler_settings = $fields['purchased_entity']->getSetting('handler_settings');
$handler_settings['target_bundles'] = [substr($bundle, 9)];
$fields['purchased_entity']->setSetting('handler_settings', $handler_settings);
}
return $fields;
}
