diff --git a/feeds_ui/feeds_ui.admin.inc b/feeds_ui/feeds_ui.admin.inc index beb1930..3f7e9c9 100644 --- a/feeds_ui/feeds_ui.admin.inc +++ b/feeds_ui/feeds_ui.admin.inc @@ -618,7 +618,6 @@ function feeds_ui_mapping_settings_form($form, $form_state, $i, $mapping, $targe if (isset($form_state['mapping_settings'][$i])) { $mapping = $form_state['mapping_settings'][$i] + $mapping; } - if ($form_state['mapping_settings_edit'] === $i) { // Build the form. if (isset($target['form_callback'])) { @@ -627,9 +626,9 @@ function feeds_ui_mapping_settings_form($form, $form_state, $i, $mapping, $targe else { $settings_form = array(); } - // Merge in the optional unique form. $settings_form += feeds_ui_mapping_settings_optional_unique_form($mapping, $target, $form, $form_state); + $settings_form += feeds_ui_mapping_settings_allow_empty_form($mapping, $target, $form, $form_state); return array( '#type' => 'container', @@ -661,7 +660,9 @@ function feeds_ui_mapping_settings_form($form, $form_state, $i, $mapping, $targe if ($optional_unique_summary = feeds_ui_mapping_settings_optional_unique_summary($mapping, $target, $form, $form_state)) { $summary .= ' ' . $optional_unique_summary; } - + if ($allow_empty_summary = feeds_ui_mapping_settings_allow_empty_summary($mapping, $target, $form, $form_state)) { + $summary .= ' ' . $allow_empty_summary; + } if ($summary) { return array( 'summary' => array( @@ -848,12 +849,25 @@ function feeds_ui_mapping_settings_optional_unique_summary($mapping, $target, $f } /** + * Per mapping settings summary callback. Shows whether a mapping is can + * be saved with a null value. + */ +function feeds_ui_mapping_settings_allow_empty_summary($mapping, $target, $form, $form_state) { + if ($mapping['allow_empty']) { + return t('Empty values allowed.'); + } + else { + return t('Empty values ignored.'); + } +} + + +/** * Per mapping settings form callback. Lets the user choose if a target is as * unique or not. */ function feeds_ui_mapping_settings_optional_unique_form($mapping, $target, $form, $form_state) { $settings_form = array(); - if (!empty($target['optional_unique'])) { $settings_form['unique'] = array( '#type' => 'checkbox', @@ -866,6 +880,22 @@ function feeds_ui_mapping_settings_optional_unique_form($mapping, $target, $form } /** + * Per mapping settings form callback. Lets the user choose if a target's null + * values are ignored or not. + */ +function feeds_ui_mapping_settings_allow_empty_form($mapping, $target, $form, $form_state) { + $settings_form = array(); + $settings_form['allow_empty'] = array( + '#type' => 'checkbox', + '#title' => t('Allow empty values'), + '#default_value' => !empty($mapping['allow_empty']), + ); + + return $settings_form; +} + + +/** * Theme feeds_ui_overview_form(). */ function theme_feeds_ui_overview_form($variables) { diff --git a/mappers/text.inc b/mappers/text.inc index 48447d7..6fba38c 100644 --- a/mappers/text.inc +++ b/mappers/text.inc @@ -19,12 +19,13 @@ function text_feeds_processor_targets_alter(&$targets, $entity_type, $bundle_nam ); foreach (field_info_instances($entity_type, $bundle_name) as $name => $instance) { $info = field_info_field($name); - + $allow_empty = $targets[$name]['allow_empty']; if (in_array($info['type'], $text_types)) { $targets[$name] = array( 'name' => check_plain($instance['label']), 'callback' => 'text_feeds_set_target', 'description' => t('The @label field of the entity.', array('@label' => $instance['label'])), + 'allow_empty' => $allow_empty, ); } } @@ -34,7 +35,12 @@ function text_feeds_processor_targets_alter(&$targets, $entity_type, $bundle_nam * Callback for mapping text fields. */ function text_feeds_set_target($source, $entity, $target, $value) { - if (empty($value)) { + foreach ($source->importer->processor->config['mappings'] as $mapping) { + if ($mapping['target'] == $target && $mapping['allow_empty']) { + $allow_empty = TRUE; + } + } + if (empty($value) && !$allow_empty) { return; }