function multiversion_entity_type_alter in Multiversion 8.2
Same name and namespace in other branches
- 8 multiversion.module \multiversion_entity_type_alter()
Implements hook_entity_type_alter().
Parameters
\Drupal\Core\Entity\EntityTypeInterface[] $entity_types:
File
- ./
multiversion.module, line 31
Code
function multiversion_entity_type_alter(array &$entity_types) {
/** @var \Drupal\multiversion\MultiversionManagerInterface $manager */
$manager = \Drupal::service('multiversion.manager');
foreach ($entity_types as $entity_type) {
if ($manager
->allowToAlter($entity_type)) {
$entity_keys = $entity_type
->getKeys();
// Add the 'published' entity key to the entity type.
if (empty($entity_keys['published'])) {
$entity_keys['published'] = 'status';
$entity_type
->set('entity_keys', $entity_keys);
}
// Make all content entity types revisionable.
if (!$entity_type
->isRevisionable()) {
// We only need to set the revision key to make an entity type
// revisionable. The table names will be handled by the storage class.
// @see \Drupal\Core\Entity\Sql\SqlContentEntityStorage::initTableLayout
$entity_keys['revision'] = 'revision_id';
$entity_type
->set('entity_keys', $entity_keys);
if ($entity_type
->getRevisionTable() === null) {
$entity_type
->set('revision_table', $entity_type
->id() . '_revision');
}
if ($entity_type
->getRevisionDataTable() === null) {
$entity_type
->set('revision_data_table', $entity_type
->id() . '_field_revision');
}
}
$namespace = 'Drupal\\multiversion\\Entity\\Storage\\Sql';
$original_storage_class = $entity_type
->getHandlerClass('storage');
$entity_type
->setHandlerClass('original_storage', $original_storage_class);
switch ($entity_type
->id()) {
case 'node':
$entity_type
->setHandlerClass('storage', "{$namespace}\\NodeStorage");
break;
case 'taxonomy_term':
$entity_type
->setHandlerClass('storage', "{$namespace}\\TermStorage");
break;
case 'comment':
$entity_type
->setHandlerClass('storage', "{$namespace}\\CommentStorage");
break;
case 'menu_link_content':
$entity_type
->setClass('Drupal\\multiversion\\Entity\\MenuLinkContent');
$entity_type
->setHandlerClass('storage', "{$namespace}\\MenuLinkContentStorage");
break;
case 'file':
$entity_type
->setClass('Drupal\\multiversion\\Entity\\File');
$entity_type
->setHandlerClass('storage', "{$namespace}\\FileStorage");
break;
case 'media':
$entity_type
->setHandlerClass('storage', "{$namespace}\\MediaStorage");
break;
case 'shortcut':
$entity_type
->setClass('Drupal\\multiversion\\Entity\\Shortcut');
if (in_array($original_storage_class, [
NULL,
'Drupal\\Core\\Entity\\Sql\\SqlContentEntityStorage',
])) {
$entity_type
->setHandlerClass('storage', "{$namespace}\\ContentEntityStorage");
}
break;
case 'entity_test':
$entity_type
->setClass('Drupal\\multiversion\\Entity\\EntityTest');
if (in_array($original_storage_class, [
NULL,
'Drupal\\Core\\Entity\\Sql\\SqlContentEntityStorage',
])) {
$entity_type
->setHandlerClass('storage', "{$namespace}\\ContentEntityStorage");
}
break;
case 'entity_test_mul':
$entity_type
->setClass('Drupal\\multiversion\\Entity\\EntityTestMul');
if (in_array($original_storage_class, [
NULL,
'Drupal\\Core\\Entity\\Sql\\SqlContentEntityStorage',
])) {
$entity_type
->setHandlerClass('storage', "{$namespace}\\ContentEntityStorage");
}
break;
case 'entity_test_rev':
$entity_type
->setClass('Drupal\\multiversion\\Entity\\EntityTestRev');
if (in_array($original_storage_class, [
NULL,
'Drupal\\Core\\Entity\\Sql\\SqlContentEntityStorage',
])) {
$entity_type
->setHandlerClass('storage', "{$namespace}\\ContentEntityStorage");
}
break;
case 'entity_test_mulrev':
$entity_type
->setClass('Drupal\\multiversion\\Entity\\EntityTestMulRev');
if (in_array($original_storage_class, [
NULL,
'Drupal\\Core\\Entity\\Sql\\SqlContentEntityStorage',
])) {
$entity_type
->setHandlerClass('storage', "{$namespace}\\ContentEntityStorage");
}
break;
default:
$storage_class = $entity_type
->getHandlerClass('storage');
// We can only override the storage handler for entity types we know
// what to expect of.
if (in_array($storage_class, [
NULL,
'Drupal\\Core\\Entity\\Sql\\SqlContentEntityStorage',
])) {
$entity_type
->setHandlerClass('storage', "{$namespace}\\ContentEntityStorage");
}
break;
}
}
}
if (isset($entity_types['block_content']) && $manager
->allowToAlter($entity_types['block_content'])) {
$entity_types['block']
->setHandlerClass('storage', 'Drupal\\multiversion\\Entity\\Storage\\Sql\\BlockStorage');
}
}