From 7ceb0dd06522e67a3c0716bf03354bce33d81995 Mon Sep 17 00:00:00 2001 From: Sommerregen Date: Sat, 2 May 2015 14:19:45 +0200 Subject: [PATCH] Added params option for mergeConfig method --- system/src/Grav/Common/Plugin.php | 62 +++++++++++++++++++++++-------- 1 file changed, 46 insertions(+), 16 deletions(-) diff --git a/system/src/Grav/Common/Plugin.php b/system/src/Grav/Common/Plugin.php index 8643a89c0..474c69b30 100644 --- a/system/src/Grav/Common/Plugin.php +++ b/system/src/Grav/Common/Plugin.php @@ -136,44 +136,74 @@ class Plugin implements EventSubscriberInterface /** * Merge global and page configurations. * - * @param Page $page The page to merge the configurations with the - * plugin settings. + * @param Page $page The page to merge the configurations with the + * plugin settings. + * @param array $params Array of additional configuration options to + * merge with the plugin settings. * - * @param bool $deep Should you use deep or shallow merging + * @param bool $deep Should you use deep or shallow merging * * @return \Grav\Common\Data\Data */ - protected function mergeConfig(Page $page, $deep = false) + protected function mergeConfig(Page $page, $params = [], $deep = false) { $class_name = $this->name; $class_name_merged = $class_name . '.merged'; - $defaults = $this->config->get('plugins.' . $class_name, array()); - $header = array(); + $defaults = $this->config->get('plugins.'. $class_name, []); + $page_header = $page->header(); + $header = []; - if (isset($page->header()->$class_name_merged)) { - $merged = $page->header()->$class_name_merged; + if (isset($page_header->$class_name_merged)) { + $merged = $page_header->$class_name_merged; if (count($merged) > 0) { - return $merged; + $header = $merged->toArray(); } else { - return new Data($defaults); + $header = $defaults; } + + // Merge additional parameter with configuration options + if ($deep) { + $header = array_replace_recursive($header, $params); + } else { + $header = array_merge($header, $params); + } + + $config = new Data($header); + return $config; } // Get default plugin configurations and retrieve page header configuration - if (isset($page->header()->$class_name)) { - if ($deep) { - $header = array_replace_recursive($defaults, $page->header()->$class_name); - } else { - $header = array_merge($defaults, $page->header()->$class_name); + if (isset($page_header->$class_name)) { + $config = $page_header->$class_name; + if (is_bool($config)) { + // Overwrite enabled option with boolean value in page header + $config = ['enabled' => $config]; } } else { - $header = $defaults; + $config = []; + } + + // Merge page header settings using deep or shallow merging technique + if ($deep) { + $header = array_replace_recursive($defaults, $config); + } else { + $header = array_merge($defaults, $config); } // Create new config object and set it on the page object so it's cached for next time $config = new Data($header); $page->modifyHeader($class_name_merged, $config); + // Merge additional parameter with configuration options + if ($deep) { + $header = array_replace_recursive($header, $params); + } else { + $header = array_merge($header, $params); + } + + // Create config data object again (now with addtional parameters) + $config = new Data($header); + // Return configurations as a new data config class return $config; }