tracardi-1.0.x-dev/src/Plugin/Field/FieldType/PersonalizationItem.php

src/Plugin/Field/FieldType/PersonalizationItem.php
<?php

namespace Drupal\tracardi\Plugin\Field\FieldType;

use Drupal\Core\Field\FieldDefinitionInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\TypedData\DataDefinitionInterface;
use Drupal\Core\TypedData\TypedDataInterface;
use Drupal\options\Plugin\Field\FieldType\ListStringItem;
use Drupal\tracardi\PersonalizationManager;

/**
 * Defines the 'Personalization' field type.
 *
 * @FieldType(
 *   id = "personalization",
 *   label = @Translation("Personalization"),
 *   description = @Translation("An entity field containing an option list of
 *   personalization plugins."), default_widget = "options_select",
 *   default_formatter = "list_default",
 * )
 */
class PersonalizationItem extends ListStringItem {

  /**
   * @var \Drupal\tracardi\PersonalizationManager
   */
  private PersonalizationManager $pluginManager;

  /**
   * @param \Drupal\Core\TypedData\DataDefinitionInterface $definition
   * @param $name
   * @param \Drupal\Core\TypedData\TypedDataInterface|NULL $parent
   */
  public function __construct(DataDefinitionInterface $definition, $name = NULL, TypedDataInterface $parent = NULL) {
    parent::__construct($definition, $name, $parent);
    $this->pluginManager = \Drupal::service('plugin.manager.personalization');
  }

  public static function defaultStorageSettings() {
    return [
      'selected_plugin' => [],
    ] + parent::defaultStorageSettings();
  }

  public function storageSettingsForm(array &$form, FormStateInterface $form_state, $has_data) {
    $plugins = $this->pluginManager->loadEnabledPlugins();
    $options = [];
    foreach ($plugins as $plugin) {
      $options[$plugin->getId()] = $plugin->label();
    }

    $element['selected_plugin'] = [
      '#type' => 'select',
      '#title' => $this->t('Select plugin'),
      '#options' => $options,
      '#default_value' => $this->getSetting('selected_plugin'),
    ];

    return $element;

  }

  /**
   * {@inheritdoc}
   */
  public function getSettableOptions(AccountInterface $account = NULL): array {
    $selectedPlugin = $this->getSetting('selected_plugin');
    $plugin = $this->pluginManager->loadPlugin($selectedPlugin);

    return $plugin->getOptionsList();
  }

  /**
   * {@inheritdoc}
   */
  public static function generateSampleValue(FieldDefinitionInterface $field_definition): array {
    $values['value'] = ['- None -'];
    return $values;
  }

}

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

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