View source
<?php
namespace Drupal\media_migration;
use Drupal\Component\Plugin\Exception\PluginException;
use Drupal\Core\Cache\CacheBackendInterface;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\Core\Plugin\DefaultPluginManager;
use Drupal\media_migration\Annotation\FileEntityDealer;
class FileEntityDealerManager extends DefaultPluginManager implements FileEntityDealerManagerInterface {
protected $logger;
public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler) {
parent::__construct('Plugin/media_migration/file_entity', $namespaces, $module_handler, FileEntityDealerPluginInterface::class, FileEntityDealer::class);
$this
->alterInfo('media_migration_file_entity_dealer_info');
$this
->setCacheBackend($cache_backend, 'file_entity_dealer_plugins');
}
protected function getDefinitionsByTypeAndScheme(string $type, string $scheme) {
$definitions = $this
->getDefinitions();
$strict_list = array_filter($this
->getDefinitions(), function ($definition) use ($type, $scheme) {
return in_array($type, $definition['types'], TRUE) && in_array($scheme, $definition['schemes'], TRUE);
});
if (!empty($strict_list)) {
return $strict_list;
}
$only_type_list = array_filter($definitions, function ($definition) use ($type) {
return in_array($type, $definition['types'], TRUE) && empty($definition['schemes']);
});
if (!empty($only_type_list)) {
return $only_type_list;
}
$only_scheme_list = array_filter($definitions, function ($definition) use ($scheme) {
return empty($definition['types']) && in_array($scheme, $definition['schemes'], TRUE);
});
if (!empty($only_scheme_list)) {
return $only_scheme_list;
}
if (array_key_exists('fallback', $definitions)) {
return [
'fallback' => $definitions['fallback'],
];
}
return [];
}
public function createInstanceFromTypeAndScheme(string $type, string $scheme) {
$filtered_definitions = $this
->getDefinitionsByTypeAndScheme($type, $scheme);
if (!empty($filtered_definitions)) {
try {
$configuration = [
'type' => $type,
'scheme' => $scheme,
];
$plugin_id = array_keys($filtered_definitions)[0];
return $this
->createInstance($plugin_id, $configuration);
} catch (PluginException $e) {
return NULL;
}
}
return NULL;
}
}