diff --git a/feeds.feeds.inc b/feeds.feeds.inc index ba8c8f3..a51a7a6 100644 --- a/feeds.feeds.inc +++ b/feeds.feeds.inc @@ -55,16 +55,14 @@ function feeds_normalize_targets(array &$targets) { * The target arary. */ function _feeds_filter_callback_arrays(array &$target) { - static $normalize = array('summary_callback', 'form_callback'); - // Migrate keys summary_callback and form_callback to the new keys. - foreach ($normalize as $key) { - if (!empty($target[$key])) { - $target[$key . 's'][] = $target[$key]; - } - - unset($target[$key]); + if (isset($target['summary_callback'])) { + $target['summary_callbacks'][] = $target['summary_callback']; + } + if (isset($target['form_callback'])) { + $target['form_callbacks'][] = $target['form_callback']; } + unset($target['summary_callback'], $target['form_callback']); static $callback_keys = array( 'summary_callbacks', @@ -73,7 +71,7 @@ function _feeds_filter_callback_arrays(array &$target) { 'unique_callbacks', ); - // Filter out any incorect callbaks. Do it here so it only has to be done + // Filter out any incorrect callbacks. Do it here so it only has to be done // once. foreach ($callback_keys as $callback_key) { $target[$callback_key] = array_filter($target[$callback_key], 'is_callable'); diff --git a/feeds_ui/feeds_ui.admin.inc b/feeds_ui/feeds_ui.admin.inc index 6a794b8..f975ffe 100644 --- a/feeds_ui/feeds_ui.admin.inc +++ b/feeds_ui/feeds_ui.admin.inc @@ -637,7 +637,7 @@ function feeds_ui_mapping_settings_form($form, $form_state, $i, $mapping, $targe $settings_form = array(); foreach ($target['form_callbacks'] as $callback) { - $settings_form += $callback($mapping, $target, $form, $form_state); + $settings_form += call_user_func($callback, $mapping, $target, $form, $form_state); } // Merge in the optional unique form. @@ -665,7 +665,7 @@ function feeds_ui_mapping_settings_form($form, $form_state, $i, $mapping, $targe $summary = array(); foreach ($target['summary_callbacks'] as $callback) { - $summary[] = $callback($mapping, $target, $form, $form_state); + $summary[] = call_user_func($callback, $mapping, $target, $form, $form_state); } // Filter out empty summary values. diff --git a/plugins/FeedsProcessor.inc b/plugins/FeedsProcessor.inc index ebf532f..a332805 100644 --- a/plugins/FeedsProcessor.inc +++ b/plugins/FeedsProcessor.inc @@ -696,9 +696,7 @@ abstract class FeedsProcessor extends FeedsPlugin { $sources = $this->getCachedSources(); if (isset($sources[$source_key]['callback'])) { - $callback = $sources[$source_key]['callback']; - - return $callback($source, $result, $source_key); + return call_user_func($sources[$source_key]['callback'], $source, $result, $source_key); } return feeds_importer($this->id)->parser->getSourceElement($source, $result, $source_key); @@ -721,7 +719,7 @@ abstract class FeedsProcessor extends FeedsPlugin { if (isset($targets[$target]['preprocess_callbacks'])) { foreach ($targets[$target]['preprocess_callbacks'] as $callback) { - $callback($source, $target_item, $target, $mapping); + call_user_func($callback, $source, $target_item, $target, $mapping); } } @@ -730,14 +728,12 @@ abstract class FeedsProcessor extends FeedsPlugin { // setTargetElement(). if (isset($targets[$target]['callback'])) { - $callback = $targets[$target]['callback']; - // All target callbacks expect an array. if (!is_array($value)) { $value = array($value); } - $callback($source, $target_item, $target, $value, $mapping); + call_user_func($targets[$target]['callback'], $source, $target_item, $target, $value, $mapping); } else { @@ -957,7 +953,7 @@ abstract class FeedsProcessor extends FeedsPlugin { } foreach ($targets[$target]['unique_callbacks'] as $callback) { - if ($entity_id = $callback($source, $this->entityType(), $this->bundle(), $target, $value)) { + if ($entity_id = call_user_func($callback, $source, $this->entityType(), $this->bundle(), $target, $value)) { // Stop at the first unique ID returned by a callback. break; } diff --git a/tests/feeds_tests.module b/tests/feeds_tests.module index 99f4df3..19eb2c2 100644 --- a/tests/feeds_tests.module +++ b/tests/feeds_tests.module @@ -130,7 +130,11 @@ function feeds_tests_feeds_processor_targets($entity_type, $bundle) { 'callback' => 'feeds_tests_mapper_set_target', 'optional_unique' => TRUE, 'unique_callbacks' => array('feeds_tests_mapper_unique'), - 'preprocess_callbacks' => array(array('FeedsTestsPreprocess', 'callback')), + 'preprocess_callbacks' => array( + array('FeedsTestsPreprocess', 'callback'), + // Make sure that invalid callbacks are filtered. + '__feeds_tests_invalid_callback', + ), ); return $targets;