a12s-1.0.0-beta7/modules/layout/src/Entity/DisplayOptionsInstance.php

modules/layout/src/Entity/DisplayOptionsInstance.php
<?php

namespace Drupal\a12s_layout\Entity;

use Drupal\a12s_layout\DisplayOptions\DisplayTemplatePluginInterface;
use Drupal\Component\Plugin\Exception\PluginException;
use Drupal\Core\Config\Entity\ConfigEntityBase;
use Drupal\Core\Entity\EntityWithPluginCollectionInterface;
use Drupal\Core\Plugin\DefaultSingleLazyPluginCollection;
use Drupal\Core\Utility\Error;

/**
 * Defines the display options instance entity type.
 *
 * @ConfigEntityType(
 *   id = "a12s_layout_display_options",
 *   label = @Translation("Display Options instance"),
 *   label_collection = @Translation("Display Options instances"),
 *   label_singular = @Translation("display options instance"),
 *   label_plural = @Translation("display options instances"),
 *   label_count = @PluralTranslation(
 *     singular = "@count display options instance",
 *     plural = "@count display options instances",
 *   ),
 *   handlers = {
 *     "list_builder" = "Drupal\a12s_layout\DisplayOptions\InstanceListBuilder",
 *     "form" = {
 *       "add" = "Drupal\a12s_layout\Form\DisplayOptionsInstanceForm",
 *       "edit" = "Drupal\a12s_layout\Form\DisplayOptionsInstanceForm",
 *       "delete" = "Drupal\Core\Entity\EntityDeleteForm"
 *     }
 *   },
 *   config_prefix = "a12s_layout_display_options",
 *   admin_permission = "administer a12s layout display options",
 *   links = {
 *     "collection" = "/admin/structure/a12s-layout-display-options-instance",
 *     "add-form" = "/admin/structure/a12s-layout-display-options-instance/add",
 *     "edit-form" = "/admin/structure/a12s-layout-display-options-instance/{a12s_layout_display_options}",
 *     "delete-form" = "/admin/structure/a12s-layout-display-options-instance/{a12s_layout_display_options}/delete"
 *   },
 *   entity_keys = {
 *     "id" = "id",
 *     "label" = "label",
 *     "uuid" = "uuid"
 *   },
 *   config_export = {
 *     "id",
 *     "provider",
 *     "plugin",
 *     "optionsSets",
 *     "settings"
 *   }
 * )
 */
class DisplayOptionsInstance extends ConfigEntityBase implements DisplayOptionsInstanceInterface, EntityWithPluginCollectionInterface {

  /**
   * The display options instance ID.
   *
   * @var string
   */
  protected string $id;

  /**
   * The display options instance status.
   *
   * @var bool
   */
  protected $status;

  /**
   * The plugin instance ID.
   *
   * @var string|null
   */
  protected ?string $plugin = NULL;

  /**
   * The list of display options sets.
   *
   * @var array
   */
  protected array $optionsSets = [];

  /**
   * The plugin instance settings.
   *
   * @var array
   */
  protected array $settings = [];

  /**
   * The plugin collection that holds the plugins for this entity.
   *
   * @var \Drupal\Core\Plugin\DefaultSingleLazyPluginCollection
   */
  protected DefaultSingleLazyPluginCollection $pluginCollection;

  /**
   * The related display template.
   *
   * @var \Drupal\a12s_layout\DisplayOptions\DisplayTemplatePluginInterface|null|false
   */
  protected DisplayTemplatePluginInterface|false|null $template;

  /**
   * {@inheritDoc}
   */
  public function label(): string {
    $definition = $this->getPlugin()->getPluginDefinition();
    return implode(': ', [
      (string) $definition['category'],
      (string) $definition['label'],
    ]);
  }

  /**
   * {@inheritDoc}
   */
  public function hasPlugin(): bool {
    return !empty($this->plugin);
  }

  /**
   * {@inheritDoc}
   */
  public function getPluginId(): string {
    return $this->plugin;
  }

  /**
   * {@inheritDoc}
   */
  public function setPluginId(string $pluginId): void {
    $this->plugin = $pluginId;
  }

  /**
   * {@inheritDoc}
   */
  public function getPlugin(): DisplayTemplatePluginInterface {
    return $this->getPluginCollection()->get($this->plugin);
  }

  /**
   * {@inheritDoc}
   */
  public function getTemplate(): DisplayTemplatePluginInterface|null {
    if (!isset($this->template)) {
      $this->template = FALSE;

      if ($this->hasPlugin()) {
        try {
          // @todo wait for https://www.drupal.org/project/drupal/issues/2142515 in
          //   order to use dependency injection in entities.
          /** @var \Drupal\a12s_layout\DisplayOptions\DisplayTemplatePluginManager $thDisplayTemplateManager */
          $thDisplayTemplateManager = \Drupal::service('plugin.manager.a12s_layout_display_template');
          $this->template = $thDisplayTemplateManager->createInstance($this->getPluginId());
        }
        catch (PluginException $e) {
          Error::logException(\Drupal::logger('a12s_layout'), $e);
        }
      }
    }

    return $this->template ?: NULL;
  }

  /**
   * {@inheritDoc}
   */
  public function getPluginCollections(): array {
    return ['a12s_layout_display_template' => $this->getPluginCollection()];
  }

  /**
   * Encapsulates the creation of the display options' LazyPluginCollection.
   *
   * @return \Drupal\Core\Plugin\DefaultSingleLazyPluginCollection
   *   The plugin collection.
   */
  protected function getPluginCollection(): DefaultSingleLazyPluginCollection {
    if (!isset($this->pluginCollection)) {
      $this->pluginCollection = new DefaultSingleLazyPluginCollection(\Drupal::service('plugin.manager.a12s_layout_display_template'), $this->plugin, $this->get('settings'));
    }
    return $this->pluginCollection;
  }

}

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

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