Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 2 |
CRAP | |
0.00% |
0 / 22 |
BundleConfigImportValidate | |
0.00% |
0 / 1 |
|
0.00% |
0 / 2 |
42 | |
0.00% |
0 / 22 |
__construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
onConfigImporterValidate | |
0.00% |
0 / 1 |
30 | |
0.00% |
0 / 19 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\Core\Entity\Event\BundleConfigImportValidate. | |
*/ | |
namespace Drupal\Core\Entity\Event; | |
use Drupal\Core\Config\ConfigImporterEvent; | |
use Drupal\Core\Config\ConfigImportValidateEventSubscriberBase; | |
use Drupal\Core\Config\ConfigManagerInterface; | |
use Drupal\Core\Config\Entity\ConfigEntityStorage; | |
use Drupal\Core\Entity\EntityManagerInterface; | |
/** | |
* Entity config importer validation event subscriber. | |
*/ | |
class BundleConfigImportValidate extends ConfigImportValidateEventSubscriberBase { | |
/** | |
* The config manager. | |
* | |
* @var \Drupal\Core\Config\ConfigManagerInterface | |
*/ | |
protected $configManager; | |
/** | |
* The entity manager. | |
* | |
* @var \Drupal\Core\Entity\EntityManagerInterface | |
*/ | |
protected $entityManager; | |
/** | |
* Constructs the event subscriber. | |
* | |
* @param \Drupal\Core\Config\ConfigManagerInterface $config_manager | |
* The config manager | |
* @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager | |
* The entity manager. | |
*/ | |
public function __construct(ConfigManagerInterface $config_manager, EntityManagerInterface $entity_manager) { | |
$this->configManager = $config_manager; | |
$this->entityManager = $entity_manager; | |
} | |
/** | |
* Ensures bundles that will be deleted are not in use. | |
* | |
* @param \Drupal\Core\Config\ConfigImporterEvent $event | |
* The config import event. | |
*/ | |
public function onConfigImporterValidate(ConfigImporterEvent $event) { | |
foreach ($event->getChangelist('delete') as $config_name) { | |
// Get the config entity type ID. This also ensure we are dealing with a | |
// configuration entity. | |
if ($entity_type_id = $this->configManager->getEntityTypeIdByName($config_name)) { | |
$entity_type = $this->entityManager->getDefinition($entity_type_id); | |
// Does this entity type define a bundle of another entity type. | |
if ($bundle_of = $entity_type->getBundleOf()) { | |
// Work out if there are entities with this bundle. | |
$bundle_of_entity_type = $this->entityManager->getDefinition($bundle_of); | |
$bundle_id = ConfigEntityStorage::getIDFromConfigName($config_name, $entity_type->getConfigPrefix()); | |
$entity_query = $this->entityManager->getStorage($bundle_of)->getQuery(); | |
$entity_ids = $entity_query->condition($bundle_of_entity_type->getKey('bundle'), $bundle_id) | |
->accessCheck(FALSE) | |
->range(0, 1) | |
->execute(); | |
if (!empty($entity_ids)) { | |
$entity = $this->entityManager->getStorage($entity_type_id)->load($bundle_id); | |
$event->getConfigImporter()->logError($this->t('Entities exist of type %entity_type and %bundle_label %bundle. These entities need to be deleted before importing.', array('%entity_type' => $bundle_of_entity_type->getLabel(), '%bundle_label' => $bundle_of_entity_type->getBundleLabel(), '%bundle' => $entity->label()))); | |
} | |
} | |
} | |
} | |
} | |
} |