Unverified Commit 24d99ffd authored by larowlan's avatar larowlan

Issue #3065663 by phenaproxima, alexpott, amateescu, tim.plunkett, Wim Leers:...

Issue #3065663 by phenaproxima, alexpott, amateescu, tim.plunkett, Wim Leers: Several post-update functions try to update config entity types without checking if they exist
parent 7cb3afdc
......@@ -11,8 +11,11 @@
*
* Use this in a post update function like so:
* @code
* // Update the dependencies of all Vocabulary configuration entities.
* \Drupal::classResolver(ConfigEntityUpdater::class)->update($sandbox, 'taxonomy_vocabulary');
* // Ensure Taxonomy module installed before trying to update vocabularies.
* if (\Drupal::moduleHandler()->moduleExists('taxonomy')) {
* // Update the dependencies of all Vocabulary configuration entities.
* \Drupal::classResolver(ConfigEntityUpdater::class)->update($sandbox, 'taxonomy_vocabulary');
* }
* @endcode
*
* The number of entities processed in each batch is determined by the
......@@ -65,6 +68,9 @@ public static function create(ContainerInterface $container) {
* Stores information for batch updates.
* @param string $entity_type_id
* The configuration entity type ID. For example, 'view' or 'vocabulary'.
* The calling code should ensure that the entity type exists beforehand
* (i.e., by checking that the entity type is defined or that the module
* that provides it is installed).
* @param callable $callback
* (optional) A callback to determine if a configuration entity should be
* saved. The callback will be passed each entity of the provided type that
......
......@@ -12,6 +12,11 @@
* Adds a 'reusable' filter to all Custom Block views.
*/
function block_content_post_update_add_views_reusable_filter(&$sandbox = NULL) {
// If Views is not installed, there is nothing to do.
if (!\Drupal::moduleHandler()->moduleExists('views')) {
return;
}
$entity_type = \Drupal::entityTypeManager()->getDefinition('block_content');
$storage = \Drupal::entityTypeManager()->getStorage('block_content');
......
......@@ -150,4 +150,12 @@ public function testReusableFieldAddition() {
$assert_session->statusCodeEquals('403');
}
/**
* Tests that the update succeeds even if Views is not installed.
*/
public function testReusableFieldAdditionWithoutViews() {
$this->container->get('module_installer')->uninstall(['views']);
$this->runUpdates();
}
}
......@@ -175,6 +175,11 @@ function content_moderation_post_update_entity_display_dependencies(&$sandbox) {
* Update the moderation state views field plugin ID.
*/
function content_moderation_post_update_views_field_plugin_id(&$sandbox) {
// If Views is not installed, there is nothing to do.
if (!\Drupal::moduleHandler()->moduleExists('views')) {
return;
}
\Drupal::classResolver(ConfigEntityUpdater::class)->update($sandbox, 'view', function ($view) {
/** @var \Drupal\views\ViewEntityInterface $view */
$updated = FALSE;
......
......@@ -39,4 +39,12 @@ public function testViewsFieldIdUpdate() {
$this->assertEquals('moderation_state_field', $views_display['display_options']['fields']['moderation_state']['plugin_id']);
}
/**
* Tests that the update succeeds even if Views is not installed.
*/
public function testViewsFieldIdUpdateWithoutViews() {
$this->container->get('module_installer')->uninstall(['views']);
$this->runUpdates();
}
}
......@@ -30,6 +30,11 @@ function taxonomy_post_update_clear_entity_bundle_field_definitions_cache() {
* existing ones that were using the 'content_translation_status' field.
*/
function taxonomy_post_update_handle_publishing_status_addition_in_views(&$sandbox = NULL) {
// If Views is not installed, there is nothing to do.
if (!\Drupal::moduleHandler()->moduleExists('views')) {
return;
}
$definition_update_manager = \Drupal::entityDefinitionUpdateManager();
$entity_type = $definition_update_manager->getEntityType('taxonomy_term');
$published_key = $entity_type->getKey('published');
......
......@@ -91,6 +91,22 @@ public function testPublishable() {
$this->assertEquals('Another message', (string) taxonomy_update_8601());
}
/**
* Tests taxonomy term views updates succeed even if Views is not installed.
*/
public function testPublishingStatusUpdateForTaxonomyTermViewsWithoutViews() {
// Uninstalling Views will trigger some activity in the menu tree storage
// system, which will cause errors until system_update_8001() is run. This
// is because, in the drupal-8.filled.standard database fixture used for
// this update test, the menu link titles are not serialized (this is what
// gets done by system_update_8001()). Since this method is not testing
// anything relating to menu links, it's OK to just truncate the menu_tree
// table before uninstalling Views.
$this->container->get('database')->truncate('menu_tree')->execute();
$this->container->get('module_installer')->uninstall(['views']);
$this->runUpdates();
}
/**
* Tests handling of the publishing status in taxonomy term views updates.
*
......
......@@ -36,4 +36,18 @@ public function testViewsPostUpdateExposedFilterBlocks() {
$this->assertEquals('0', $config['label_display']);
}
/**
* Tests that the update succeeds even if Block is not installed.
*/
public function testViewsPostUpdateExposedFilterBlocksWithoutBlock() {
// This block is created during the update process, but since we are
// uninstalling the Block module for this test, it will fail config schema
// validation. Since that's okay for the purposes of this test, just make
// the config schema checker ignore the block.
static::$configSchemaCheckerExclusions[] = 'block.block.seven_secondary_local_tasks';
$this->container->get('module_installer')->uninstall(['block']);
$this->runUpdates();
}
}
......@@ -371,6 +371,11 @@ function views_post_update_table_display_cache_max_age(&$sandbox = NULL) {
* Update exposed filter blocks label display to be disabled.
*/
function views_post_update_exposed_filter_blocks_label_display(&$sandbox = NULL) {
// If Block is not installed, there's nothing to do.
if (!\Drupal::moduleHandler()->moduleExists('block')) {
return;
}
\Drupal::classResolver(ConfigEntityUpdater::class)->update($sandbox, 'block', function ($block) {
/** @var \Drupal\block\BlockInterface $block */
if (strpos($block->getPluginId(), 'views_exposed_filter_block:') === 0) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment