From 21bb2f0bff56c94a176669f08b13a28c66482344 Mon Sep 17 00:00:00 2001 From: Michael Stenta Date: Fri, 29 Dec 2017 16:04:21 -0500 Subject: [PATCH] Add a Feeds Tamper plugin that will convert a text value to a boolean (from a list of multiple allowed values), with a default value. --- modules/farm/farm_import/farm_import.module | 9 +++ .../feeds_tamper/plugins/boolean_default.inc | 71 +++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 modules/farm/farm_import/includes/feeds_tamper/plugins/boolean_default.inc diff --git a/modules/farm/farm_import/farm_import.module b/modules/farm/farm_import/farm_import.module index be38b9827..6ce0c8944 100644 --- a/modules/farm/farm_import/farm_import.module +++ b/modules/farm/farm_import/farm_import.module @@ -18,6 +18,15 @@ function farm_import_ctools_plugin_api($module = NULL, $api = NULL) { return $return; } +/** + * Implements hook_ctools_plugin_directory(). + */ +function farm_import_ctools_plugin_directory($owner, $plugin_type) { + if ($owner == 'feeds_tamper' && $plugin_type == 'plugins') { + return 'includes/feeds_tamper/plugins/'; + } +} + /** * Implements hook_farm_access_perms(). */ diff --git a/modules/farm/farm_import/includes/feeds_tamper/plugins/boolean_default.inc b/modules/farm/farm_import/includes/feeds_tamper/plugins/boolean_default.inc new file mode 100644 index 000000000..25b0e3825 --- /dev/null +++ b/modules/farm/farm_import/includes/feeds_tamper/plugins/boolean_default.inc @@ -0,0 +1,71 @@ + 'farm_import_boolean_default_form', + 'callback' => 'farm_import_boolean_default_callback', + 'name' => 'Convert to boolean (with default)', + 'multi' => 'direct', + 'category' => 'Text', +); + +function farm_import_boolean_default_form($importer, $element_key, $settings) { + $form = array(); + $form['default_value'] = array( + '#type' => 'radios', + '#title' => t('Default value'), + '#options' => array( + 0 => 'False', + 1 => 'True', + ), + '#default_value' => !empty($settings['default_value']) ? 1 : 0, + ); + return $form; +} + +function farm_import_boolean_default_callback($result, $item_key, $element_key, &$field, $settings, $source) { + + // Get the value. + $value = $field; + + // Get the default value (default to TRUE). + $default_value = isset($settings['default_value']) ? $settings['default_value'] : TRUE; + + // Convert to lowercase. + $value = drupal_strtolower($value); + + // Define allowed true/false values. + $allowed_values = array( + 0 => array( + 'false', + 'f', + 'no', + 'n', + '0', + ), + 1 => array( + 'true', + 't', + 'yes', + 'y', + '1', + ), + ); + + // Iterate through allowed values to see if a match is found. + foreach ($allowed_values as $boolean => $options) { + foreach ($options as $option) { + if ($value == $option) { + $field = $boolean; + return; + } + } + } + + // If a match was not found, use the default value. + $field = $default_value; +}