headless_cms-1.0.3/modules/headless_cms_notify/headless_cms_notify.basefields.inc

modules/headless_cms_notify/headless_cms_notify.basefields.inc
<?php

/**
 * @file
 * Basefields.
 */

declare(strict_types=1);

use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\field\FieldStorageConfigInterface;
use Drupal\headless_cms_notify\NotifyMessage\HeadlessNotifyMessageDiscoveryService;

/**
 * Defines basefields for the consumer entity.
 *
 * Adds fields for preview and revision URLs.
 */
function headless_cms_notify_consumer_basefields_01(): array {
  $fields = [];

  /** @var \Drupal\headless_cms_notify\NotifyMessage\HeadlessNotifyMessageDiscoveryService $discovery */
  $discovery = \Drupal::service(HeadlessNotifyMessageDiscoveryService::class);
  $messageTypeOptions = array_reduce($discovery->getMessageTypes(), function ($carry, $item) {
    $carry[$item->messageTypeId] = $item->messageTypeLabel;
    return $carry;
  }, []);

  $fields['headless_cms_notify_enabled'] = BaseFieldDefinition::create('boolean')
    ->setLabel(new TranslatableMarkup('Enabled'))
    ->setDescription(new TranslatableMarkup('Whether notifications are enabled for this consumer.'))
    ->setDisplayOptions('view', [
      'label' => 'above',
      'type' => 'boolean',
      'weight' => 5,
    ])
    ->setDisplayOptions('form', [
      'type' => 'boolean_checkbox',
      'weight' => 5,
    ])
    ->setRevisionable(TRUE)
    ->setTranslatable(FALSE)
    ->setRequired(FALSE)
    ->setDefaultValue(FALSE);

  $fields['headless_cms_notify_transport'] = BaseFieldDefinition::create('entity_reference')
    ->setLabel(new TranslatableMarkup('Transport'))
    ->setDescription(new TranslatableMarkup('The transport to use for sending notifications.'))
    ->setSetting('target_type', 'headless_notify_transport')
    ->setDisplayOptions('view', [
      'label' => 'above',
      'type' => 'entity_reference_label',
      'weight' => 6,
    ])
    ->setDisplayOptions('form', [
      'type' => 'options_select',
      'weight' => 6,
    ])
    ->setRevisionable(TRUE)
    ->setTranslatable(FALSE)
    ->setRequired(FALSE)
    ->setDefaultValue(FALSE);

  $fields['headless_cms_notify_notification_types'] = BaseFieldDefinition::create('list_string')
    ->setLabel(new TranslatableMarkup('Notification Types'))
    ->setDescription(new TranslatableMarkup('Select which types of notifications should be sent.'))
    ->setCardinality(FieldStorageConfigInterface::CARDINALITY_UNLIMITED)
    ->setDisplayOptions('view', [
      'label' => 'above',
      'type' => 'list_default',
      'weight' => 7,
    ])
    ->setDisplayOptions('form', [
      'type' => 'options_buttons',
      'weight' => 7,
    ])
    ->setSetting('allowed_values', $messageTypeOptions)
    ->setRevisionable(TRUE)
    ->setTranslatable(FALSE)
    ->setRequired(FALSE)
    ->setDefaultValue(FALSE);

  $fields['headless_cms_notify_entity_types'] = BaseFieldDefinition::create('list_string')
    ->setLabel(new TranslatableMarkup('Entity Notifications'))
    ->setDescription(new TranslatableMarkup('Notifications about entity operations are sent for the selected entity types.'))
    ->setCardinality(FieldStorageConfigInterface::CARDINALITY_UNLIMITED)
    ->setDisplayOptions('view', [
      'label' => 'above',
      'type' => 'list_default',
      'weight' => 6,
    ])
    ->setDisplayOptions('form', [
      'type' => 'options_buttons',
      'weight' => 6,
    ])
    ->setSetting('allowed_values_function', 'headless_cms_notify_entity_type_values')
    ->setRevisionable(TRUE)
    ->setTranslatable(FALSE)
    ->setRequired(FALSE)
    ->setDefaultValue(FALSE);

  return $fields;
}

/**
 * Get allowed_values for each known entity type.
 */
function headless_cms_notify_entity_type_values(): array {
  $values = [];

  foreach (\Drupal::entityTypeManager()->getDefinitions() as $entityType) {
    $values[$entityType->id()] = sprintf('[%s] - %s', $entityType->id(), $entityType->getLabel());
  }

  return $values;
}

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

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