From a320d98f5f26df9eab36a750ea52bf6cc904e248 Mon Sep 17 00:00:00 2001
From: Oleg Chemerys <oleg.chemerys@lemberg.co.uk>
Date: Thu, 9 Oct 2014 16:38:05 +0300
Subject: [PATCH] Added range field value wrapper.

---
 range.install |  7 +++++++
 range.module  | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 58 insertions(+), 1 deletion(-)

diff --git a/range.install b/range.install
index 6003492..d3056ab 100644
--- a/range.install
+++ b/range.install
@@ -89,3 +89,10 @@ function range_update_7002() {
     }
   }
 }
+
+/**
+ * Updates range field instances' settings.
+ */
+function range_update_7003() {
+  field_cache_clear();
+}
diff --git a/range.module b/range.module
index d736bec..02fcac4 100644
--- a/range.module
+++ b/range.module
@@ -12,6 +12,8 @@ function range_field_info() {
   $instance_settings = array(
     'min' => '',
     'max' => '',
+    'wrapper_prefix' => '',
+    'wrapper_suffix' => '',
     'from' => array(
       'label' => t('From'),
       'prefix' => '',
@@ -138,11 +140,16 @@ function range_field_instance_settings_form($field, $instance) {
  *  Field instance settings.
  */
 function _range_field_instance_subelements_settings_form(&$form, $name, $settings) {
+  $form['wrapper_prefix'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Prefix(wrapper)'),
+    '#default_value' => $settings['wrapper_prefix'],
+    '#description' => t("Define a string that should be prefixed to the whole field value. Leave blank for none."),
+  );
   $form[$name] = array(
     '#type' => 'fieldset',
     '#title' => $settings[$name]['label'],
   );
-
   $form[$name]['label'] = array(
     '#type' => 'textfield',
     '#title' => t('Form element label'),
@@ -163,6 +170,14 @@ function _range_field_instance_subelements_settings_form(&$form, $name, $setting
     '#size' => 60,
     '#description' => t("Define a string that should be suffixed to the value, like ' m', ' kb/s'. Leave blank for none."),
   );
+  if ($name === 'to') {
+    $form['wrapper_suffix'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Suffix(wrapper)'),
+      '#default_value' => $settings['wrapper_suffix'],
+      '#description' => t("Define a string that should be suffixed to the whole field value. Leave blank for none."),
+    );
+  }
 }
 
 /**
@@ -256,6 +271,7 @@ function range_field_formatter_info() {
         'scale' => 0,
         'from_prefix_suffix' => TRUE,
         'to_prefix_suffix' => TRUE,
+        'wrapper_prefix_suffix' => TRUE,
       ),
     ),
     'range_decimal' => array(
@@ -269,6 +285,7 @@ function range_field_formatter_info() {
         'scale' => 2,
         'from_prefix_suffix' => TRUE,
         'to_prefix_suffix' => TRUE,
+        'wrapper_prefix_suffix' => TRUE,
       ),
     ),
     'range_unformatted' => array(
@@ -339,6 +356,11 @@ function range_field_formatter_settings_form($field, $instance, $view_mode, $for
       '#title' => t('Display <em>TO value</em> prefix and suffix.'),
       '#default_value' => $settings['to_prefix_suffix'],
     );
+    $element['wrapper_prefix_suffix'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Display <em>Wrapper</em> prefix and suffix.'),
+      '#default_value' => $settings['wrapper_prefix_suffix'],
+    );
   }
 
   return $element;
@@ -365,6 +387,9 @@ function range_field_formatter_settings_summary($field, $instance, $view_mode) {
     if ($settings['to_prefix_suffix']) {
       $summary[] = t('Display with <em>TO value</em> prefix and suffix.');
     }
+    if ($settings['wrapper_prefix_suffix']) {
+      $summary[] = t('Display with <em>Wrapper</em> prefix and suffix.');
+    }
   }
 
   return implode('<br />', $summary);
@@ -392,6 +417,10 @@ function range_field_formatter_view($entity_type, $entity, $field, $instance, $l
           $output = _range_field_formatter_view_separate_values($from_value, $to_value, $settings, $instance['settings']);
         }
 
+        if ($settings['wrapper_prefix_suffix']) {
+          $output = _range_field_formatter_wrapper_prefix_suffix($output, $instance['settings']);
+        }
+
         $element[$delta] = array('#markup' => $output);
       }
       break;
@@ -499,6 +528,27 @@ function _range_field_formatter_view_prefix_suffix($value, $display_prefix, $ins
 }
 
 /**
+ * Helper function. Adds prefix and suffix to the given range field value.
+ *
+ * @param string $output
+ *  Range field output without wrapper prefix/suffix.
+ * @param array $instance_settings
+ *  Field instance FROM/TO value settings.
+ * @return string
+ *  Range field output with wrapper prefix/suffix.
+ */
+function _range_field_formatter_wrapper_prefix_suffix($output, $instance_settings) {
+  if (!empty($instance_settings['wrapper_prefix'])) {
+    $output = $instance_settings['wrapper_prefix'] . $output;
+  }
+  if (!empty($instance_settings['wrapper_suffix'])) {
+    $output = $output . $instance_settings['wrapper_suffix'];
+  }
+
+  return $output;
+}
+
+/**
  * Implements hook_field_widget_info().
  */
 function range_field_widget_info() {
-- 
1.8.0.msysgit.0

