function multiversion_entity_type_alter in Multiversion 8
Same name and namespace in other branches
- 8.2 multiversion.module \multiversion_entity_type_alter()
Implements hook_entity_type_alter().
Parameters
\Drupal\Core\Entity\EntityTypeInterface[] $entity_types:
File
- ./
multiversion.module, line 39
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)) {
// 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
$keys = $entity_type
->getKeys();
$keys['revision'] = 'revision_id';
$entity_type
->set('entity_keys', $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
->setHandlerClass('storage', "{$namespace}\\FileStorage");
break;
case 'media':
$entity_type
->setHandlerClass('storage', "{$namespace}\\MediaStorage");
break;
case 'paragraph':
$entity_type
->setClass('Drupal\\multiversion\\Entity\\Paragraph');
$entity_type
->setHandlerClass('storage', "{$namespace}\\ContentEntityStorage");
break;
case 'poll':
$entity_type
->setHandlerClass('storage', "{$namespace}\\PollStorage");
break;
case 'crop':
$entity_type
->setHandlerClass('storage', "{$namespace}\\CropStorage");
break;
case 'redirect':
$entity_type
->setHandlerClass('storage_schema', 'Drupal\\multiversion\\Redirect\\RedirectStorageSchema');
if (in_array($original_storage_class, [
NULL,
'Drupal\\Core\\Entity\\Sql\\SqlContentEntityStorage',
])) {
$entity_type
->setHandlerClass('storage', "{$namespace}\\ContentEntityStorage");
}
break;
default:
// We can only override the storage handler for entity types we know
// what to expect of.
if (in_array($original_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');
}
}