public function ExtensionCollection::__construct in Markdown 8.2
ExtensionCollection constructor.
Parameters
\Drupal\markdown\PluginManager\ExtensionManagerInterface $manager: The Markdown Extension Plugin Manager service.
\Drupal\markdown\Plugin\Markdown\ExtensibleParserInterface $parser: A markdown parser instance.
Overrides DefaultLazyPluginCollection::__construct
File
- src/
PluginManager/ ExtensionCollection.php, line 31
Class
- ExtensionCollection
- Collection of extension plugins based on relevant parser.
Namespace
Drupal\markdown\PluginManagerCode
public function __construct(ExtensionManagerInterface $manager, ExtensibleParserInterface $parser) {
$this->parser = $parser;
$extensionInterfaces = $parser
->extensionInterfaces();
// Filter out extensions that the parser doesn't support.
$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;
});
// Process passed configurations with known extension definitions.
$configurations = $parser
->config()
->get('extensions') ?: [];
foreach ($configurations as $key => &$configuration) {
$originalKey = $key;
// Ensure the plugin key is set in the configuration.
if (isset($definitions[$key])) {
$configuration[$this->pluginKey] = $key;
continue;
}
// Configuration defined a plugin key, use it.
$key = isset($configuration[$this->pluginKey]) ? $configuration[$this->pluginKey] : NULL;
if (isset($key)) {
$configurations[$key] = $configuration;
}
// Remove unknown configurations.
if ($key !== $originalKey) {
unset($configurations[$originalKey]);
}
}
// Ensure required dependencies are enabled.
// Note: property is prefixed with an underscore to denote it as internal.
// @see \Drupal\markdown\PluginManager\ExtensionManager::alterDefinitions
// @todo Figure out a better way to handle this.
foreach ($definitions as $pluginId => $definition) {
if (!empty($definition['_requiredBy'])) {
foreach ($definition['_requiredBy'] as $dependent) {
// Ensure dependent is a string.
$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;
}
}
}
}
// Fill in missing definitions.
$pluginIds = array_keys($definitions);
$configurations += array_combine($pluginIds, array_map(function ($pluginId) {
return [
$this->pluginKey => $pluginId,
];
}, $pluginIds));
// Sort configurations by using the keys of the already sorted definitions.
$configurations = array_replace(array_flip(array_keys(array_intersect_key($definitions, $configurations))), $configurations);
parent::__construct($manager, $configurations);
}