Skip to content
Snippets Groups Projects
Commit baa75271 authored by Alex Barth's avatar Alex Barth
Browse files

Make configDefaults() implementation optional.

parent ecb63825
No related branches found
No related tags found
No related merge requests found
...@@ -89,7 +89,7 @@ abstract class FeedsConfigurable { ...@@ -89,7 +89,7 @@ abstract class FeedsConfigurable {
* returned by configDefaults(). * returned by configDefaults().
*/ */
public function setConfig($config) { public function setConfig($config) {
$default_keys = $this->configDefaults(); $default_keys = $this->configDefaultsMerged();
$this->config = array_intersect_key($config, $default_keys); $this->config = array_intersect_key($config, $default_keys);
} }
...@@ -102,7 +102,7 @@ abstract class FeedsConfigurable { ...@@ -102,7 +102,7 @@ abstract class FeedsConfigurable {
*/ */
public function addConfig($config) { public function addConfig($config) {
$this->config = array_merge($this->config, $config); $this->config = array_merge($this->config, $config);
$default_keys = $this->configDefaults(); $default_keys = $this->configDefaultsMerged();
$this->config = array_intersect_key($this->config, $default_keys); $this->config = array_intersect_key($this->config, $default_keys);
} }
...@@ -134,9 +134,30 @@ abstract class FeedsConfigurable { ...@@ -134,9 +134,30 @@ abstract class FeedsConfigurable {
* values are their default values. * values are their default values.
*/ */
public function configDefaults() { public function configDefaults() {
$fake_form_state = array(); return array();
$form = $this->configForm($fake_form_state); }
return element_children($form);
/**
* Return config defaults merged with the actual form definition. This is
* used for filtering values in setConfig and addConfig and allows
* implementers of configForm() to add form elements without necessarily
* declaring them in configDefaults().
*
* @todo Support nested form trees.
*/
protected function configDefaultsMerged() {
$form_state = array();
$form = $this->configForm($form_state);
// Mimic Form API behavior.
drupal_alter('form_'. get_class($this) .'_feeds_config_form', $form, $form_state);
drupal_alter('form', $form, $form_state, get_class($this) .'_feeds_config_form');
$defaults = array();
foreach (element_children($form) as $e) {
if (isset($form[$e]['#default_value'])) {
$defaults[$e] = $form[$e]['#default_value'];
}
}
return $this->configDefaults() + $defaults;
} }
/** /**
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment