Chris@17: getEntityType('taxonomy_term'); Chris@17: $published_key = $entity_type->getKey('published'); Chris@17: Chris@17: $status_filter = [ Chris@17: 'id' => 'status', Chris@17: 'table' => 'taxonomy_term_field_data', Chris@17: 'field' => $published_key, Chris@17: 'relationship' => 'none', Chris@17: 'group_type' => 'group', Chris@17: 'admin_label' => '', Chris@17: 'operator' => '=', Chris@17: 'value' => '1', Chris@17: 'group' => 1, Chris@17: 'exposed' => FALSE, Chris@17: 'expose' => [ Chris@17: 'operator_id' => '', Chris@17: 'label' => '', Chris@17: 'description' => '', Chris@17: 'use_operator' => FALSE, Chris@17: 'operator' => '', Chris@17: 'identifier' => '', Chris@17: 'required' => FALSE, Chris@17: 'remember' => FALSE, Chris@17: 'multiple' => FALSE, Chris@17: 'remember_roles' => [ Chris@17: 'authenticated' => 'authenticated', Chris@17: 'anonymous' => '0', Chris@17: 'administrator' => '0', Chris@17: ], Chris@17: ], Chris@17: 'is_grouped' => FALSE, Chris@17: 'group_info' => [ Chris@17: 'label' => '', Chris@17: 'description' => '', Chris@17: 'identifier' => '', Chris@17: 'optional' => TRUE, Chris@17: 'widget' => 'select', Chris@17: 'multiple' => FALSE, Chris@17: 'remember' => FALSE, Chris@17: 'default_group' => 'All', Chris@17: 'default_group_multiple' => [], Chris@17: 'group_items' => [], Chris@17: ], Chris@17: 'entity_type' => 'taxonomy_term', Chris@17: 'entity_field' => $published_key, Chris@17: 'plugin_id' => 'boolean', Chris@17: ]; Chris@17: Chris@17: \Drupal::classResolver(ConfigEntityUpdater::class)->update($sandbox, 'view', function ($view) use ($published_key, $status_filter) { Chris@17: /** @var \Drupal\views\ViewEntityInterface $view */ Chris@17: // Only alter taxonomy term views. Chris@17: if ($view->get('base_table') !== 'taxonomy_term_field_data') { Chris@17: return FALSE; Chris@17: } Chris@17: Chris@17: $displays = $view->get('display'); Chris@17: foreach ($displays as $display_name => &$display) { Chris@17: // Update any existing 'content_translation_status fields. Chris@17: $fields = isset($display['display_options']['fields']) ? $display['display_options']['fields'] : []; Chris@17: foreach ($fields as $id => $field) { Chris@17: if (isset($field['field']) && $field['field'] == 'content_translation_status') { Chris@17: $fields[$id]['field'] = $published_key; Chris@17: } Chris@17: } Chris@17: $display['display_options']['fields'] = $fields; Chris@17: Chris@17: // Update any existing 'content_translation_status sorts. Chris@17: $sorts = isset($display['display_options']['sorts']) ? $display['display_options']['sorts'] : []; Chris@17: foreach ($sorts as $id => $sort) { Chris@17: if (isset($sort['field']) && $sort['field'] == 'content_translation_status') { Chris@17: $sorts[$id]['field'] = $published_key; Chris@17: } Chris@17: } Chris@17: $display['display_options']['sorts'] = $sorts; Chris@17: Chris@17: // Update any existing 'content_translation_status' filters or add a new Chris@17: // one if necessary. Chris@17: $filters = isset($display['display_options']['filters']) ? $display['display_options']['filters'] : []; Chris@17: $has_status_filter = FALSE; Chris@17: foreach ($filters as $id => $filter) { Chris@17: if (isset($filter['field']) && $filter['field'] == 'content_translation_status') { Chris@17: $filters[$id]['field'] = $published_key; Chris@17: $has_status_filter = TRUE; Chris@17: } Chris@17: } Chris@17: Chris@17: if (!$has_status_filter) { Chris@17: $status_filter['id'] = ViewExecutable::generateHandlerId($published_key, $filters); Chris@17: $filters[$status_filter['id']] = $status_filter; Chris@17: } Chris@17: $display['display_options']['filters'] = $filters; Chris@17: } Chris@17: $view->set('display', $displays); Chris@17: Chris@17: return TRUE; Chris@17: }); Chris@17: } Chris@18: Chris@18: /** Chris@18: * Remove the 'hierarchy' property from vocabularies. Chris@18: */ Chris@18: function taxonomy_post_update_remove_hierarchy_from_vocabularies(&$sandbox = NULL) { Chris@18: \Drupal::classResolver(ConfigEntityUpdater::class)->update($sandbox, 'taxonomy_vocabulary', function () { Chris@18: return TRUE; Chris@18: }); Chris@18: } Chris@18: Chris@18: /** Chris@18: * Update taxonomy terms to be revisionable. Chris@18: */ Chris@18: function taxonomy_post_update_make_taxonomy_term_revisionable(&$sandbox) { Chris@18: $definition_update_manager = \Drupal::entityDefinitionUpdateManager(); Chris@18: /** @var \Drupal\Core\Entity\EntityLastInstalledSchemaRepositoryInterface $last_installed_schema_repository */ Chris@18: $last_installed_schema_repository = \Drupal::service('entity.last_installed_schema.repository'); Chris@18: Chris@18: $entity_type = $definition_update_manager->getEntityType('taxonomy_term'); Chris@18: $field_storage_definitions = $last_installed_schema_repository->getLastInstalledFieldStorageDefinitions('taxonomy_term'); Chris@18: Chris@18: // Update the entity type definition. Chris@18: $entity_keys = $entity_type->getKeys(); Chris@18: $entity_keys['revision'] = 'revision_id'; Chris@18: $entity_keys['revision_translation_affected'] = 'revision_translation_affected'; Chris@18: $entity_type->set('entity_keys', $entity_keys); Chris@18: $entity_type->set('revision_table', 'taxonomy_term_revision'); Chris@18: $entity_type->set('revision_data_table', 'taxonomy_term_field_revision'); Chris@18: $revision_metadata_keys = [ Chris@18: 'revision_default' => 'revision_default', Chris@18: 'revision_user' => 'revision_user', Chris@18: 'revision_created' => 'revision_created', Chris@18: 'revision_log_message' => 'revision_log_message', Chris@18: ]; Chris@18: $entity_type->set('revision_metadata_keys', $revision_metadata_keys); Chris@18: Chris@18: // Update the field storage definitions and add the new ones required by a Chris@18: // revisionable entity type. Chris@18: $field_storage_definitions['langcode']->setRevisionable(TRUE); Chris@18: $field_storage_definitions['name']->setRevisionable(TRUE); Chris@18: $field_storage_definitions['description']->setRevisionable(TRUE); Chris@18: $field_storage_definitions['changed']->setRevisionable(TRUE); Chris@18: Chris@18: $field_storage_definitions['revision_id'] = BaseFieldDefinition::create('integer') Chris@18: ->setName('revision_id') Chris@18: ->setTargetEntityTypeId('taxonomy_term') Chris@18: ->setTargetBundle(NULL) Chris@18: ->setLabel(new TranslatableMarkup('Revision ID')) Chris@18: ->setReadOnly(TRUE) Chris@18: ->setSetting('unsigned', TRUE); Chris@18: Chris@18: $field_storage_definitions['revision_default'] = BaseFieldDefinition::create('boolean') Chris@18: ->setName('revision_default') Chris@18: ->setTargetEntityTypeId('taxonomy_term') Chris@18: ->setTargetBundle(NULL) Chris@18: ->setLabel(new TranslatableMarkup('Default revision')) Chris@18: ->setDescription(new TranslatableMarkup('A flag indicating whether this was a default revision when it was saved.')) Chris@18: ->setStorageRequired(TRUE) Chris@18: ->setInternal(TRUE) Chris@18: ->setTranslatable(FALSE) Chris@18: ->setRevisionable(TRUE); Chris@18: Chris@18: $field_storage_definitions['revision_translation_affected'] = BaseFieldDefinition::create('boolean') Chris@18: ->setName('revision_translation_affected') Chris@18: ->setTargetEntityTypeId('taxonomy_term') Chris@18: ->setTargetBundle(NULL) Chris@18: ->setLabel(new TranslatableMarkup('Revision translation affected')) Chris@18: ->setDescription(new TranslatableMarkup('Indicates if the last edit of a translation belongs to current revision.')) Chris@18: ->setReadOnly(TRUE) Chris@18: ->setRevisionable(TRUE) Chris@18: ->setTranslatable(TRUE); Chris@18: Chris@18: $field_storage_definitions['revision_created'] = BaseFieldDefinition::create('created') Chris@18: ->setName('revision_created') Chris@18: ->setTargetEntityTypeId('taxonomy_term') Chris@18: ->setTargetBundle(NULL) Chris@18: ->setLabel(new TranslatableMarkup('Revision create time')) Chris@18: ->setDescription(new TranslatableMarkup('The time that the current revision was created.')) Chris@18: ->setRevisionable(TRUE); Chris@18: $field_storage_definitions['revision_user'] = BaseFieldDefinition::create('entity_reference') Chris@18: ->setName('revision_user') Chris@18: ->setTargetEntityTypeId('taxonomy_term') Chris@18: ->setTargetBundle(NULL) Chris@18: ->setLabel(new TranslatableMarkup('Revision user')) Chris@18: ->setDescription(new TranslatableMarkup('The user ID of the author of the current revision.')) Chris@18: ->setSetting('target_type', 'user') Chris@18: ->setRevisionable(TRUE); Chris@18: $field_storage_definitions['revision_log_message'] = BaseFieldDefinition::create('string_long') Chris@18: ->setName('revision_log_message') Chris@18: ->setTargetEntityTypeId('taxonomy_term') Chris@18: ->setTargetBundle(NULL) Chris@18: ->setLabel(new TranslatableMarkup('Revision log message')) Chris@18: ->setDescription(new TranslatableMarkup('Briefly describe the changes you have made.')) Chris@18: ->setRevisionable(TRUE) Chris@18: ->setDefaultValue(''); Chris@18: Chris@18: $definition_update_manager->updateFieldableEntityType($entity_type, $field_storage_definitions, $sandbox); Chris@18: Chris@18: return t('Taxonomy terms have been converted to be revisionable.'); Chris@18: }