From adaad5f54cb7275476c41c3a5da6d257327a70ec Mon Sep 17 00:00:00 2001 From: Nathaniel Catchpole <catch@35733.no-reply.drupal.org> Date: Tue, 8 Mar 2016 11:46:29 +0900 Subject: [PATCH] Issue #2679903 by thpoul, Dave Reid, Wim Leers: CKEditor uses separate cache-busting query string from Drupal's --- core/modules/ckeditor/ckeditor.libraries.yml | 1 + core/modules/ckeditor/ckeditor.module | 12 ++++++++++++ core/modules/ckeditor/js/ckeditor.js | 3 +++ .../ckeditor/src/Tests/CKEditorLoadingTest.php | 10 ++++++++++ 4 files changed, 26 insertions(+) diff --git a/core/modules/ckeditor/ckeditor.libraries.yml b/core/modules/ckeditor/ckeditor.libraries.yml index 67c46dcfd433..902cb993238a 100644 --- a/core/modules/ckeditor/ckeditor.libraries.yml +++ b/core/modules/ckeditor/ckeditor.libraries.yml @@ -8,6 +8,7 @@ drupal.ckeditor: dependencies: - core/jquery - core/drupal + - core/drupalSettings - core/drupal.debounce - core/ckeditor - editor/drupal.editor diff --git a/core/modules/ckeditor/ckeditor.module b/core/modules/ckeditor/ckeditor.module index 80af8e9bf904..f166d94c19ac 100644 --- a/core/modules/ckeditor/ckeditor.module +++ b/core/modules/ckeditor/ckeditor.module @@ -102,3 +102,15 @@ function _ckeditor_theme_css($theme = NULL) { } return $css; } + +/** + * Implements hook_library_info_alter(). + */ +function ckeditor_library_info_alter(&$libraries, $extension) { + // Pass Drupal's JS cache-busting string via settings along to CKEditor. + // @see http://docs.ckeditor.com/#!/api/CKEDITOR-property-timestamp + if ($extension === 'ckeditor' && isset($libraries['drupal.ckeditor'])) { + $query_string = \Drupal::state()->get('system.css_js_query_string') ?: '0'; + $libraries['drupal.ckeditor']['drupalSettings']['ckeditor']['timestamp'] = $query_string; + } +} diff --git a/core/modules/ckeditor/js/ckeditor.js b/core/modules/ckeditor/js/ckeditor.js index 313621f26f11..497393f9a1ac 100644 --- a/core/modules/ckeditor/js/ckeditor.js +++ b/core/modules/ckeditor/js/ckeditor.js @@ -273,4 +273,7 @@ } }); + // Set the CKEditor cache-busting string to the same value as Drupal. + CKEDITOR.timestamp = drupalSettings.ckeditor.timestamp; + })(Drupal, Drupal.debounce, CKEDITOR, jQuery); diff --git a/core/modules/ckeditor/src/Tests/CKEditorLoadingTest.php b/core/modules/ckeditor/src/Tests/CKEditorLoadingTest.php index feba8ecd7d50..9aa2ce2b5a4b 100644 --- a/core/modules/ckeditor/src/Tests/CKEditorLoadingTest.php +++ b/core/modules/ckeditor/src/Tests/CKEditorLoadingTest.php @@ -148,6 +148,16 @@ function testLoading() { $this->assertIdentical($expected, $this->castSafeStrings($settings['editor']), "Text Editor module's JavaScript settings on the page are correct."); $this->assertTrue($editor_js_present, 'Text Editor JavaScript is present.'); $this->assertTrue(in_array('ckeditor/drupal.ckeditor', explode(',', $settings['ajaxPageState']['libraries'])), 'CKEditor glue library is present.'); + + // Assert that CKEditor uses Drupal's cache-busting query string by + // comparing the setting sent with the page with the current query string. + $settings = $this->getDrupalSettings(); + $expected = $settings['ckeditor']['timestamp']; + $this->assertIdentical($expected, \Drupal::state()->get('system.css_js_query_string'), "CKEditor scripts cache-busting string is correct before flushing all caches."); + // Flush all caches then make sure that $settings['ckeditor']['timestamp'] + // still matches. + drupal_flush_all_caches(); + $this->assertIdentical($expected, \Drupal::state()->get('system.css_js_query_string'), "CKEditor scripts cache-busting string is correct after flushing all caches."); } protected function getThingsToCheck() { -- GitLab