From baa75271053e00900dfa44bffed748f15a0aa78b Mon Sep 17 00:00:00 2001 From: Alex Barth <alex_b@53995.no-reply.drupal.org> Date: Thu, 18 Feb 2010 16:43:40 +0000 Subject: [PATCH] Make configDefaults() implementation optional. --- includes/FeedsConfigurable.inc | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/includes/FeedsConfigurable.inc b/includes/FeedsConfigurable.inc index eed4ace5..1951a7c1 100644 --- a/includes/FeedsConfigurable.inc +++ b/includes/FeedsConfigurable.inc @@ -89,7 +89,7 @@ abstract class FeedsConfigurable { * returned by configDefaults(). */ public function setConfig($config) { - $default_keys = $this->configDefaults(); + $default_keys = $this->configDefaultsMerged(); $this->config = array_intersect_key($config, $default_keys); } @@ -102,7 +102,7 @@ abstract class FeedsConfigurable { */ public function addConfig($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); } @@ -134,9 +134,30 @@ abstract class FeedsConfigurable { * values are their default values. */ public function configDefaults() { - $fake_form_state = array(); - $form = $this->configForm($fake_form_state); - return element_children($form); + return array(); + } + + /** + * 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; } /** -- GitLab