Mercurial > hg > isophonics-drupal-site
diff core/modules/system/src/Entity/Action.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 129ea1e6d783 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/system/src/Entity/Action.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,153 @@ +<?php + +namespace Drupal\system\Entity; + +use Drupal\Core\Config\Entity\ConfigEntityBase; +use Drupal\Core\Config\Entity\ConfigEntityInterface; +use Drupal\Core\Entity\EntityWithPluginCollectionInterface; +use Drupal\system\ActionConfigEntityInterface; +use Drupal\Core\Action\ActionPluginCollection; +use Drupal\Component\Plugin\ConfigurablePluginInterface; + +/** + * Defines the configured action entity. + * + * @ConfigEntityType( + * id = "action", + * label = @Translation("Action"), + * admin_permission = "administer actions", + * entity_keys = { + * "id" = "id", + * "label" = "label" + * }, + * config_export = { + * "id", + * "label", + * "type", + * "plugin", + * "configuration", + * } + * ) + */ +class Action extends ConfigEntityBase implements ActionConfigEntityInterface, EntityWithPluginCollectionInterface { + + /** + * The name (plugin ID) of the action. + * + * @var string + */ + protected $id; + + /** + * The label of the action. + * + * @var string + */ + protected $label; + + /** + * The action type. + * + * @var string + */ + protected $type; + + /** + * The configuration of the action. + * + * @var array + */ + protected $configuration = []; + + /** + * The plugin ID of the action. + * + * @var string + */ + protected $plugin; + + /** + * The plugin collection that stores action plugins. + * + * @var \Drupal\Core\Action\ActionPluginCollection + */ + protected $pluginCollection; + + /** + * Encapsulates the creation of the action's LazyPluginCollection. + * + * @return \Drupal\Component\Plugin\LazyPluginCollection + * The action's plugin collection. + */ + protected function getPluginCollection() { + if (!$this->pluginCollection) { + $this->pluginCollection = new ActionPluginCollection(\Drupal::service('plugin.manager.action'), $this->plugin, $this->configuration); + } + return $this->pluginCollection; + } + + /** + * {@inheritdoc} + */ + public function getPluginCollections() { + return ['configuration' => $this->getPluginCollection()]; + } + + /** + * {@inheritdoc} + */ + public function getPlugin() { + return $this->getPluginCollection()->get($this->plugin); + } + + /** + * {@inheritdoc} + */ + public function setPlugin($plugin_id) { + $this->plugin = $plugin_id; + $this->getPluginCollection()->addInstanceId($plugin_id); + } + + /** + * {@inheritdoc} + */ + public function getPluginDefinition() { + return $this->getPlugin()->getPluginDefinition(); + } + + /** + * {@inheritdoc} + */ + public function execute(array $entities) { + return $this->getPlugin()->executeMultiple($entities); + } + + /** + * {@inheritdoc} + */ + public function isConfigurable() { + return $this->getPlugin() instanceof ConfigurablePluginInterface; + } + + /** + * {@inheritdoc} + */ + public function getType() { + return $this->type; + } + + /** + * {@inheritdoc} + */ + public static function sort(ConfigEntityInterface $a, ConfigEntityInterface $b) { + /** @var \Drupal\system\ActionConfigEntityInterface $a */ + /** @var \Drupal\system\ActionConfigEntityInterface $b */ + $a_type = $a->getType(); + $b_type = $b->getType(); + if ($a_type != $b_type) { + return strnatcasecmp($a_type, $b_type); + } + return parent::sort($a, $b); + } + +}