diff --git a/includes/plugins.inc b/includes/plugins.inc index 9077d38..b4ccd4e 100644 --- a/includes/plugins.inc +++ b/includes/plugins.inc @@ -175,13 +175,27 @@ class panels_cache_object { // If there are any differences between the old and the new javascript then // store them to be added later. - if ($diff = array_diff_assoc($js, $start)) { - $this->js = $diff; - } - - // Special case the settings key and get the difference of the data. - if ($settings_diff = array_diff_assoc($js['settings']['data'], $start['settings']['data'])) { - $this->js['settings'] = $settings_diff; + if ($diff = drupal_array_diff_assoc_recursive($js, $start)) { + // Iterate over the diff to ensure we keep the keys on merge and don't add + // unnecessary items. + foreach ($diff as $key => $diff_data) { + // Special case the settings key and get the difference of the data. + if ($key === 'settings') { + // Iterate over the diff to ensure we keep the keys on merge and don't + // add unnecessary items. + if (isset($diff[$key]['data'])) { + foreach ($diff[$key]['data'] as $settings_key => $settings_data) { + // Merge the changes with the base to get a complete settings + // array. + $this->js['settings']['data'][$settings_key] = drupal_array_merge_deep($settings_data, $diff[$key]['data'][$settings_key]); + } + } + } + else { + // Merge the changes with the base to get a complete array. + $this->js[$key] = drupal_array_merge_deep($start[$key], $diff_data); + } + } } // And for tokens: diff --git a/panels.info b/panels.info index 70b961d..5aa334b 100644 --- a/panels.info +++ b/panels.info @@ -4,6 +4,7 @@ core = 7.x package = "Panels" configure = admin/structure/panels dependencies[] = ctools +dependencies[] = system (>=7.23) files[] = panels.module files[] = includes/common.inc files[] = includes/legacy.inc