View source
<?php
namespace Drupal\migrate_drupal\Plugin\migrate\source;
use Drupal\Component\Plugin\DependentPluginInterface;
use Drupal\Core\Entity\DependencyTrait;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\State\StateInterface;
use Drupal\migrate\Plugin\MigrationInterface;
use Drupal\migrate\Exception\RequirementsException;
use Drupal\migrate\Plugin\migrate\source\SqlBase;
use Symfony\Component\DependencyInjection\ContainerInterface;
abstract class DrupalSqlBase extends SqlBase implements DependentPluginInterface {
use DependencyTrait;
protected $systemData;
protected $requirements = TRUE;
protected $entityTypeManager;
public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, StateInterface $state, EntityTypeManagerInterface $entity_type_manager) {
parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $state);
$this->entityTypeManager = $entity_type_manager;
}
public function getSystemData() {
if (!isset($this->systemData)) {
$this->systemData = [];
try {
$results = $this
->select('system', 's')
->fields('s')
->execute();
foreach ($results as $result) {
$this->systemData[$result['type']][$result['name']] = $result;
}
} catch (\Exception $e) {
}
}
return $this->systemData;
}
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration = NULL) {
return new static($configuration, $plugin_id, $plugin_definition, $migration, $container
->get('state'), $container
->get('entity_type.manager'));
}
public function checkRequirements() {
parent::checkRequirements();
if ($this->pluginDefinition['requirements_met'] === TRUE) {
if (isset($this->pluginDefinition['source_module'])) {
if ($this
->moduleExists($this->pluginDefinition['source_module'])) {
if (isset($this->pluginDefinition['minimum_version'])) {
$minimum_version = $this->pluginDefinition['minimum_version'];
$installed_version = $this
->getModuleSchemaVersion($this->pluginDefinition['source_module']);
if ($minimum_version > $installed_version) {
throw new RequirementsException('Required minimum version ' . $this->pluginDefinition['minimum_version'], [
'minimum_version' => $this->pluginDefinition['minimum_version'],
]);
}
}
}
else {
throw new RequirementsException('The module ' . $this->pluginDefinition['source_module'] . ' is not enabled in the source site.', [
'source_module' => $this->pluginDefinition['source_module'],
]);
}
}
}
}
protected function getModuleSchemaVersion($module) {
$system_data = $this
->getSystemData();
return $system_data['module'][$module]['schema_version'] ?? FALSE;
}
protected function moduleExists($module) {
$system_data = $this
->getSystemData();
return !empty($system_data['module'][$module]['status']);
}
protected function variableGet($name, $default) {
try {
$result = $this
->select('variable', 'v')
->fields('v', [
'value',
])
->condition('name', $name)
->execute()
->fetchField();
} catch (\Exception $e) {
$result = FALSE;
}
return $result !== FALSE ? unserialize($result) : $default;
}
public function calculateDependencies() {
if (isset($this->configuration['constants']['entity_type'])) {
$this
->addDependency('module', $this->entityTypeManager
->getDefinition($this->configuration['constants']['entity_type'])
->getProvider());
}
if (isset($this->configuration['constants']['module'])) {
$this
->addDependency('module', $this->configuration['constants']['module']);
}
return $this->dependencies;
}
}