Update to Drupal 8.0.0. For more information, see https://www.drupal.org/node/2619030
This commit is contained in:
parent
7784f4c23d
commit
25a6735fb3
49 changed files with 1394 additions and 281 deletions
|
@ -5,6 +5,9 @@
|
|||
* Post update functions for Views.
|
||||
*/
|
||||
|
||||
use Drupal\Core\StringTranslation\TranslatableMarkup;
|
||||
use Drupal\views\Views;
|
||||
|
||||
/**
|
||||
* @addtogroup updates-8.0.0-beta
|
||||
* @{
|
||||
|
@ -31,6 +34,99 @@ function views_post_update_update_cacheability_metadata() {
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* Update some views fields that were previously duplicated.
|
||||
*/
|
||||
function views_post_update_cleanup_duplicate_views_data() {
|
||||
$config_factory = \Drupal::configFactory();
|
||||
$ids = [];
|
||||
$message = NULL;
|
||||
$data_tables = [];
|
||||
$base_tables = [];
|
||||
$revision_tables = [];
|
||||
$entities_by_table = [];
|
||||
$duplicate_fields = [];
|
||||
$handler_types = Views::getHandlerTypes();
|
||||
|
||||
/** @var \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager */
|
||||
$entity_type_manager = \Drupal::service('entity_type.manager');
|
||||
// This will allow us to create an index of all entity types of the site.
|
||||
foreach ($entity_type_manager->getDefinitions() as $entity_type_id => $entity_type) {
|
||||
// Store the entity keyed by base table. If it has a data table, use that as
|
||||
// well.
|
||||
if ($data_table = $entity_type->getDataTable()) {
|
||||
$entities_by_table[$data_table] = $entity_type;
|
||||
}
|
||||
if ($base_table = $entity_type->getBaseTable()) {
|
||||
$entities_by_table[$base_table] = $entity_type;
|
||||
}
|
||||
|
||||
// The following code basically contains the same kind of logic as
|
||||
// \Drupal\Core\Entity\Sql\SqlContentEntityStorage::initTableLayout() to
|
||||
// prefetch all tables (base, data, revision, and revision data).
|
||||
$base_tables[$entity_type_id] = $entity_type->getBaseTable() ?: $entity_type->id();
|
||||
$revisionable = $entity_type->isRevisionable();
|
||||
|
||||
$revision_table = '';
|
||||
if ($revisionable) {
|
||||
$revision_table = $entity_type->getRevisionTable() ?: $entity_type->id() . '_revision';
|
||||
}
|
||||
$revision_tables[$entity_type_id] = $revision_table;
|
||||
|
||||
$translatable = $entity_type->isTranslatable();
|
||||
$data_table = '';
|
||||
// For example the data table just exists, when the entity type is
|
||||
// translatable.
|
||||
if ($translatable) {
|
||||
$data_table = $entity_type->getDataTable() ?: $entity_type->id() . '_field_data';
|
||||
}
|
||||
$data_tables[$entity_type_id] = $data_table;
|
||||
|
||||
$duplicate_fields[$entity_type_id] = array_intersect_key($entity_type->getKeys(), array_flip(['id', 'revision', 'bundle']));
|
||||
}
|
||||
|
||||
foreach ($config_factory->listAll('views.view.') as $view_config_name) {
|
||||
$changed = FALSE;
|
||||
$view = $config_factory->getEditable($view_config_name);
|
||||
|
||||
$displays = $view->get('display');
|
||||
if (isset($entities_by_table[$view->get('base_table')])) {
|
||||
$entity_type = $entities_by_table[$view->get('base_table')];
|
||||
$entity_type_id = $entity_type->id();
|
||||
$data_table = $data_tables[$entity_type_id];
|
||||
$base_table = $base_tables[$entity_type_id];
|
||||
$revision_table = $revision_tables[$entity_type_id];
|
||||
|
||||
if ($data_table) {
|
||||
foreach ($displays as $display_name => &$display) {
|
||||
foreach ($handler_types as $handler_type) {
|
||||
if (!empty($display['display_options'][$handler_type['plural']])) {
|
||||
foreach ($display['display_options'][$handler_type['plural']] as $field_name => &$field) {
|
||||
$table = $field['table'];
|
||||
if (($table === $base_table || $table === $revision_table) && in_array($field_name, $duplicate_fields[$entity_type_id])) {
|
||||
$field['table'] = $data_table;
|
||||
$changed = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($changed) {
|
||||
$view->set('display', $displays);
|
||||
$view->save();
|
||||
$ids[] = $view->get('id');
|
||||
}
|
||||
}
|
||||
if (!empty($ids)) {
|
||||
$message = new TranslatableMarkup('Updated tables for field handlers for views: @ids', ['@ids' => implode(', ', array_unique($ids))]);
|
||||
}
|
||||
|
||||
return $message;
|
||||
}
|
||||
|
||||
/**
|
||||
* @} End of "addtogroup updates-8.0.0-beta".
|
||||
*/
|
||||
|
|
Reference in a new issue