Added params option for mergeConfig method

This commit is contained in:
Sommerregen
2015-05-02 14:19:45 +02:00
parent b2a78d587c
commit 7ceb0dd065

View File

@@ -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;
}