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;
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc