bcubed-8.x-1.0-beta5/src/Entity/ConditionSet.php

src/Entity/ConditionSet.php
<?php

namespace Drupal\bcubed\Entity;

use Drupal\Core\Config\Entity\ConfigEntityBase;

/**
 * Defines the Condition Set entity.
 *
 * @ConfigEntityType(
 *   id = "condition_set",
 *   label = @Translation("Condition Set"),
 *   handlers = {
 *     "list_builder" = "Drupal\bcubed\ConditionSetListBuilder",
 *     "form" = {
 *       "add" = "Drupal\bcubed\Form\ConditionSetForm",
 *       "edit" = "Drupal\bcubed\Form\ConditionSetForm",
 *       "delete" = "Drupal\bcubed\Form\ConditionSetDeleteForm"
 *     },
 *     "route_provider" = {
 *       "html" = "Drupal\bcubed\ConditionSetHtmlRouteProvider",
 *     },
 *   },
 *   config_prefix = "condition_set",
 *   admin_permission = "administer site configuration",
 *   entity_keys = {
 *     "id" = "id",
 *     "label" = "label",
 *     "weight" = "weight",
 *     "uuid" = "uuid"
 *   },
 *   config_export = {
 *     "id" = "id",
 *     "label" = "label",
 *     "description" = "description",
 *     "actions" = "actions",
 *     "events" = "events",
 *     "conditions" = "conditions",
 *   },
 *   links = {
 *     "canonical" = "/admin/config/system/bcubed/condition_set/{condition_set}",
 *     "add-form" = "/admin/config/system/bcubed/condition_set/add",
 *     "edit-form" = "/admin/config/system/bcubed/condition_set/{condition_set}/edit",
 *     "delete-form" = "/admin/config/system/bcubed/condition_set/{condition_set}/delete",
 *     "collection" = "/admin/config/system/bcubed/condition_set"
 *   }
 * )
 */
class ConditionSet extends ConfigEntityBase implements ConditionSetInterface {

  /**
   * The Condition Set ID.
   *
   * @var string
   */
  protected $id;

  /**
   * The Condition Set label.
   *
   * @var string
   */
  protected $label;

  /**
   * The Condition Set weight.
   *
   * @var int
   */
  protected $weight;

  /**
   * The Condition Set status.
   *
   * @var bool
   */
  protected $status;

  /**
   * The Condition Set description.
   *
   * @var string
   */
  protected $description;

  /**
   * Configured events.
   *
   * @var array
   */
  protected $events;

  /**
   * Configured conditions.
   *
   * @var array
   */
  protected $conditions;

  /**
   * Configured actions.
   *
   * @var array
   */
  protected $actions;

  /**
   * {@inheritdoc}
   */
  public function status() {
    return $this->status;
  }

  /**
   * {@inheritdoc}
   */
  public function getJsPlugins() {
    $plugins = [];

    $items = [
      [
        'manager' => \Drupal::service('plugin.manager.bcubed.event'),
        'config' => $this->events,
      ],
      [
        'manager' => \Drupal::service('plugin.manager.bcubed.condition'),
        'config' => $this->conditions,
      ],
      [
        'manager' => \Drupal::service('plugin.manager.bcubed.action'),
        'config' => $this->actions,
      ],
    ];

    foreach ($items as $item) {
      foreach ((array) $item['config'] as $config) {
        try {
          // Fetch plugin instance.
          if (!empty($config['data'])) {
            // Create pre-configured instance.
            $plugin = $item['manager']->createInstance($config['id'], ['settings' => $config['data']]);
          }
          else {
            // Create instance without configuration.
            $plugin = $item['manager']->createInstance($config['id']);
          }
          // Get library.
          $lib = $plugin->getLibrary();
          if (!empty($lib) && !in_array($lib, $plugins)) {
            $plugins[] = $lib;
          }
        }
        catch (PluginNotFoundException $e) {
          // Ignore missing plugin.
        }
      }
    }

    return $plugins;
  }

  /**
   * {@inheritdoc}
   */
  public function calculateDependencies() {
    parent::calculateDependencies();

    $eventdefs = \Drupal::service('plugin.manager.bcubed.event')->getDefinitions();
    $conditiondefs = \Drupal::service('plugin.manager.bcubed.condition')->getDefinitions();
    $actiondefs = \Drupal::service('plugin.manager.bcubed.action')->getDefinitions();

    $modules = [];

    // Calculate plugin providers.
    foreach ((array) $this->events as $event) {
      if (!in_array($eventdefs[$event['id']]['provider'], $modules)) {
        $modules[] = $eventdefs[$event['id']]['provider'];
      }
    }

    foreach ((array) $this->actions as $action) {
      if (!in_array($actiondefs[$action['id']]['provider'], $modules)) {
        $modules[] = $actiondefs[$action['id']]['provider'];
      }
    }

    foreach ((array) $this->conditions as $condition) {
      if (!in_array($conditiondefs[$condition['id']]['provider'], $modules)) {
        $modules[] = $conditiondefs[$condition['id']]['provider'];
      }
      // Add config dependency for originating condition set.
      if ($condition['id'] == 'originating_condition_set') {
        $this->addDependency('config', 'bcubed.condition_set.' . $condition['data']['condition_set']);
      }
    }

    foreach ($modules as $module) {
      $this->addDependency('module', $module);
    }

    return $this;
  }

}

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

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