MgvPluginManager.php in More Global Variables 8
File
src/MgvPluginManager.php
View source
<?php
namespace Drupal\mgv;
use Drupal\Component\Plugin\Factory\DefaultFactory;
use Drupal\Component\Utility\NestedArray;
use Drupal\Core\Cache\CacheBackendInterface;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\Core\Plugin\DefaultPluginManager;
use Drupal\mgv\Plugin\GlobalVariableInterface;
class MgvPluginManager extends DefaultPluginManager implements MgvPluginManagerInterface {
private $variables = [];
public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler) {
parent::__construct('Plugin' . DIRECTORY_SEPARATOR . 'GlobalVariable', $namespaces, $module_handler, 'Drupal\\mgv\\Plugin\\GlobalVariableInterface', 'Drupal\\mgv\\Annotation\\Mgv');
$this
->setCacheBackend($cache_backend, 'mgv');
$this->factory = new DefaultFactory($this
->getDiscovery());
}
public function getVariables() {
if (empty($this->variables)) {
$this->variables = [];
$all = $this
->getDefinitions();
foreach ($all as $definition_info) {
$variable = $this
->createInstance($definition_info['id'], $definition_info);
$this->variables = NestedArray::mergeDeep($this->variables, $this
->getNamespacedValue($definition_info['id'], $variable));
}
}
return $this->variables;
}
public function getNamespacedValue($plugin_id, GlobalVariableInterface $variable) {
$value = $variable
->getValue();
$namespaces = explode('\\', $plugin_id);
foreach (array_reverse($namespaces) as $name) {
$value = [
$name => $value,
];
}
return $value;
}
public function createInstance($plugin_id, array $configuration = []) {
if (!empty($configuration['variableDependencies'])) {
foreach ($configuration['variableDependencies'] as $key => $plugin) {
$definition = $this
->getDefinition($plugin);
$instance = $this
->createInstance($definition['id'], $definition);
$configuration['variableDependencies'][$plugin] = $instance
->getValue();
unset($configuration['variableDependencies'][$key]);
}
}
return parent::createInstance($plugin_id, $configuration);
}
}