diff --git a/config/sync/views.view.content.yml b/config/sync/views.view.content.yml index 265eb0c8a..871413948 100644 --- a/config/sync/views.view.content.yml +++ b/config/sync/views.view.content.yml @@ -271,7 +271,8 @@ display: options: perm: 'access content overview' cache: - type: tag + type: none + options: { } empty: area_text_custom: id: area_text_custom diff --git a/web/modules/custom/server_general/server_general.module b/web/modules/custom/server_general/server_general.module index 70dfa4d2c..35f9f2603 100644 --- a/web/modules/custom/server_general/server_general.module +++ b/web/modules/custom/server_general/server_general.module @@ -6,6 +6,7 @@ */ use Drupal\Core\Access\AccessResult; +use Drupal\Core\Cache\CacheableMetadata; use Drupal\Core\Entity\ContentEntityFormInterface; use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Form\FormStateInterface; @@ -353,3 +354,27 @@ function server_general_preprocess_media_oembed_iframe(array &$variables) { $variables['media'] = IFrameMarkup::create(str_replace('youtube.com/', 'youtube-nocookie.com/', $variables['media'])); } } + +/** + * Implements hook_preprocess_HOOK(). + * + * Dump the Content view cache if main_settings config page gets updated. + */ +function server_general_preprocess_views_view__content(array &$variables): void { + /** @var \Drupal\config_pages\ConfigPagesLoaderServiceInterface $config_pages_loader */ + $config_pages_loader = \Drupal::service('config_pages.loader'); + $main_settings = $config_pages_loader->load('main_settings'); + if (empty($main_settings)) { + return; + } + + CacheableMetadata::createFromRenderArray($variables) + ->addCacheableDependency($main_settings) + ->addCacheTags([ + 'config:config_pages.type.main_settings', + 'config:core.entity_form_display.config_pages.main_settings.default', + 'config:field.field.config_pages.main_settings.field_locked_pages', + 'config:field.storage.config_pages.field_locked_pages', + ]) + ->applyTo($variables); +} diff --git a/web/modules/custom/server_general/tests/src/ExistingSite/ServerGeneralLockedPagesTest.php b/web/modules/custom/server_general/tests/src/ExistingSite/ServerGeneralLockedPagesTest.php index bd2dd94fd..79e3f7c17 100644 --- a/web/modules/custom/server_general/tests/src/ExistingSite/ServerGeneralLockedPagesTest.php +++ b/web/modules/custom/server_general/tests/src/ExistingSite/ServerGeneralLockedPagesTest.php @@ -87,6 +87,15 @@ public function testLockedLandingPage() { $this->drupalGet("/node/{$node->id()}/delete"); $this->assertSession()->statusCodeEquals(Response::HTTP_OK); + $this->drupalGet('/admin/content', [ + 'query' => [ + 'title' => 'locked', + 'type' => 'landing_page', + ], + ]); + $this->assertSession() + ->linkByHrefExists("/node/{$node->id()}/delete"); + // Make page locked. $main_settings = $this->loadOrCreateConfigPages('main_settings'); @@ -102,6 +111,15 @@ public function testLockedLandingPage() { $this->drupalGet("/node/{$node->id()}/delete"); $this->assertSession()->statusCodeEquals(Response::HTTP_FORBIDDEN); + $this->drupalGet('/admin/content', [ + 'query' => [ + 'title' => 'locked', + 'type' => 'landing_page', + ], + ]); + $this->assertSession() + ->linkByHrefNotExists("/node/{$node->id()}/delete"); + // Test translations. $node_es = $node->addTranslation('es', $node->toArray()); $node_es->setTitle('Not locked page ES');