ExtensionCollection.php in Markdown 8.2
File
src/PluginManager/ExtensionCollection.php
View source
<?php
namespace Drupal\markdown\PluginManager;
use Drupal\Core\Plugin\DefaultLazyPluginCollection;
use Drupal\markdown\Plugin\Markdown\ExtensibleParserInterface;
use Drupal\markdown\Util\ParserAwareInterface;
class ExtensionCollection extends DefaultLazyPluginCollection {
protected $parser;
public function __construct(ExtensionManagerInterface $manager, ExtensibleParserInterface $parser) {
$this->parser = $parser;
$extensionInterfaces = $parser
->extensionInterfaces();
$definitions = array_filter($manager
->getDefinitions(FALSE), function ($definition) use ($extensionInterfaces) {
$supported = FALSE;
foreach ($extensionInterfaces as $interface) {
if (is_subclass_of($definition
->getClass(), $interface)) {
$supported = TRUE;
break;
}
}
return $supported;
});
$configurations = $parser
->config()
->get('extensions') ?: [];
foreach ($configurations as $key => &$configuration) {
$originalKey = $key;
if (isset($definitions[$key])) {
$configuration[$this->pluginKey] = $key;
continue;
}
$key = isset($configuration[$this->pluginKey]) ? $configuration[$this->pluginKey] : NULL;
if (isset($key)) {
$configurations[$key] = $configuration;
}
if ($key !== $originalKey) {
unset($configurations[$originalKey]);
}
}
foreach ($definitions as $pluginId => $definition) {
if (!empty($definition['_requiredBy'])) {
foreach ($definition['_requiredBy'] as $dependent) {
$dependent = (string) $dependent;
if (isset($configurations[$dependent]) && (!isset($configurations[$dependent]['enabled']) || !empty($configurations[$dependent]['enabled']))) {
if (!isset($configurations[$pluginId])) {
$configurations[$pluginId] = [
'id' => $pluginId,
];
}
$configurations[$pluginId]['enabled'] = TRUE;
break;
}
}
}
}
$pluginIds = array_keys($definitions);
$configurations += array_combine($pluginIds, array_map(function ($pluginId) {
return [
$this->pluginKey => $pluginId,
];
}, $pluginIds));
$configurations = array_replace(array_flip(array_keys(array_intersect_key($definitions, $configurations))), $configurations);
parent::__construct($manager, $configurations);
}
public function addInstanceId($id, $configuration = NULL) {
parent::addInstanceId((string) $id, $configuration);
}
public function &get($instance_id) {
return parent::get((string) $instance_id);
}
public function has($instance_id) {
return parent::has((string) $instance_id);
}
protected function initializePlugin($instance_id) {
$instance_id = (string) $instance_id;
parent::initializePlugin($instance_id);
$extension = $this
->get($instance_id);
if ($extension instanceof ParserAwareInterface) {
$extension
->setParser($this->parser);
}
}
public function remove($instance_id) {
parent::remove((string) $instance_id);
}
public function removeInstanceId($instance_id) {
parent::removeInstanceId((string) $instance_id);
}
public function set($instance_id, $value) {
parent::set((string) $instance_id, $value);
}
public function sort() {
return $this;
}
}