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 1/2] 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


From 2572ae84bae1ebd9d43a7b7d686b1514c0f2722c Mon Sep 17 00:00:00 2001
From: Oleg Chemerys <oleg.chemerys@lemberg.co.uk>
Date: Fri, 10 Oct 2014 14:56:05 +0300
Subject: [PATCH 2/2] Simplified field prefixe/suffix formatting and added
 prefix/suffix to field form element.

---
 range.module | 87 ++++++++++++++++++++++++++++++++++++------------------------
 1 file changed, 53 insertions(+), 34 deletions(-)

diff --git a/range.module b/range.module
index 02fcac4..0b7fe51 100644
--- a/range.module
+++ b/range.module
@@ -12,8 +12,8 @@ function range_field_info() {
   $instance_settings = array(
     'min' => '',
     'max' => '',
-    'wrapper_prefix' => '',
-    'wrapper_suffix' => '',
+    'field_prefix' => '',
+    'field_suffix' => '',
     'from' => array(
       'label' => t('From'),
       'prefix' => '',
@@ -140,11 +140,17 @@ 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(
+  $form['field_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."),
+    '#title' => t('Field prefix'),
+    '#default_value' => $settings['field_prefix'],
+    '#description' => t('Define a string that should be prefixed to the whole field value. Leave blank for none.'),
+  );
+  $form['field_suffix'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Field suffix'),
+    '#default_value' => $settings['field_suffix'],
+    '#description' => t('Define a string that should be suffixed to the whole field value. Leave blank for none.'),
   );
   $form[$name] = array(
     '#type' => 'fieldset',
@@ -170,14 +176,6 @@ 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."),
-    );
-  }
 }
 
 /**
@@ -271,7 +269,7 @@ function range_field_formatter_info() {
         'scale' => 0,
         'from_prefix_suffix' => TRUE,
         'to_prefix_suffix' => TRUE,
-        'wrapper_prefix_suffix' => TRUE,
+        'field_prefix_suffix' => TRUE,
       ),
     ),
     'range_decimal' => array(
@@ -285,7 +283,7 @@ function range_field_formatter_info() {
         'scale' => 2,
         'from_prefix_suffix' => TRUE,
         'to_prefix_suffix' => TRUE,
-        'wrapper_prefix_suffix' => TRUE,
+        'field_prefix_suffix' => TRUE,
       ),
     ),
     'range_unformatted' => array(
@@ -356,10 +354,10 @@ 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(
+    $element['field_prefix_suffix'] = array(
       '#type' => 'checkbox',
-      '#title' => t('Display <em>Wrapper</em> prefix and suffix.'),
-      '#default_value' => $settings['wrapper_prefix_suffix'],
+      '#title' => t('Display <em>field</em> prefix and suffix.'),
+      '#default_value' => $settings['field_prefix_suffix'],
     );
   }
 
@@ -387,8 +385,8 @@ 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.');
+    if ($settings['field_prefix_suffix']) {
+      $summary[] = t('Display with <em>field</em> prefix and suffix.');
     }
   }
 
@@ -417,8 +415,8 @@ 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']);
+        if ($settings['field_prefix_suffix']) {
+          $output = _range_field_formatter_field_prefix_suffix($output, $instance['settings']);
         }
 
         $element[$delta] = array('#markup' => $output);
@@ -531,21 +529,14 @@ 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.
+ *  Range field output without field prefix/suffix.
  * @param array $instance_settings
  *  Field instance FROM/TO value settings.
  * @return string
- *  Range field output with wrapper prefix/suffix.
+ *  Range field output with field 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;
+function _range_field_formatter_field_prefix_suffix($output, $instance_settings) {
+  return $instance_settings['field_prefix'] . $output . $instance_settings['field_suffix'];
 }
 
 /**
@@ -608,6 +599,7 @@ function range_field_widget_form(&$form, &$form_state, $field, $instance, $langc
   // Add prefixes and suffixes.
   _range_field_widget_form_subelement_prefix_suffix($element, 'from', $instance['settings']);
   _range_field_widget_form_subelement_prefix_suffix($element, 'to', $instance['settings']);
+  _range_field_widget_form_element_prefix_suffix($element, $instance['settings']);
 
   $element['#element_validate'][] = 'range_field_widget_validate';
 
@@ -639,6 +631,33 @@ function _range_field_widget_form_subelement_prefix_suffix(&$element, $name, $se
 }
 
 /**
+ * Helper function. Adds prefix and suffix to a range field widget elements.
+ *
+ * @param array $element
+ *  Range field widget definition array.
+ * @param array $settings
+ *  Field instance settings.
+ */
+function _range_field_widget_form_element_prefix_suffix(&$element, $settings) {
+  $prefix = field_filter_xss($settings['field_prefix']);
+  $suffix = field_filter_xss($settings['field_suffix']);
+  if (!empty($element['from']['#field_prefix'])) {
+    $from_prefix = $element['from']['#field_prefix'];
+    $element['from']['#field_prefix'] = $prefix . $from_prefix;
+  }
+  else {
+    $element['from']['#field_prefix'] = $prefix;
+  }
+  if (!empty($element['to']['#field_suffix'])) {
+    $from_suffix = $element['to']['#field_suffix'];
+    $element['to']['#field_suffix'] = $from_suffix . $suffix;
+  }
+  else {
+    $element['to']['#field_suffix'] = $suffix;
+  }
+}
+
+/**
  * FAPI validation of an individual range element.
  */
 function range_field_widget_validate($element, &$form_state) {
-- 
1.8.0.msysgit.0

