From 4d06ff66ddcca57bf5354afed9719a7aafc79b86 Mon Sep 17 00:00:00 2001
From: josebc <jose_bc@live.co.uk>
Date: Mon, 4 Nov 2013 16:21:24 +0300
Subject: [PATCH 1/2] Issue #2126949 by josebc: added views handler filter to
 number field to strip non-numerical chars

---
 cck_phone.info   |    2 ++
 cck_phone.module |   10 ++++++++++
 2 files changed, 12 insertions(+)

diff --git a/cck_phone.info b/cck_phone.info
index 9879c34..5f3cda2 100644
--- a/cck_phone.info
+++ b/cck_phone.info
@@ -7,6 +7,8 @@ core = 7.x
 files[] = cck_phone.module
 files[] = includes/cck_phone_countrycodes.inc
 files[] = includes/cck_phone.token.inc
+files[] = includes/views/cck_phone.views.inc
+files[] = includes/views/cck_phone_views_handler_filter_number.inc
 files[] = includes/phone.au.inc
 files[] = includes/phone.ca.inc
 files[] = includes/phone.gb.inc
diff --git a/cck_phone.module b/cck_phone.module
index d261f7a..3983d35 100644
--- a/cck_phone.module
+++ b/cck_phone.module
@@ -26,6 +26,16 @@ function cck_phone_init() {
 }
 
 /**
+ * Implements hook_views_api().
+ */
+function cck_phone_views_api() {
+  return array(
+    'api' => 3,
+    'path' => drupal_get_path('module', 'cck_phone') . '/includes/views',
+  );
+}
+
+/**
  * Implements hook_theme().
  */
 function cck_phone_theme() {
-- 
1.7.9.5


From acc5432712c2a363079c7e12a71e520b36e9efa5 Mon Sep 17 00:00:00 2001
From: josebc <jose_bc@live.co.uk>
Date: Mon, 4 Nov 2013 16:22:14 +0300
Subject: [PATCH 2/2] Issue #2126949 by josebc: added views handler filter to
 number field to strip non-numerical chars

---
 includes/views/cck_phone.views.inc                 |   26 +++++++++++
 .../cck_phone_views_handler_filter_number.inc      |   49 ++++++++++++++++++++
 2 files changed, 75 insertions(+)
 create mode 100644 includes/views/cck_phone.views.inc
 create mode 100644 includes/views/cck_phone_views_handler_filter_number.inc

diff --git a/includes/views/cck_phone.views.inc b/includes/views/cck_phone.views.inc
new file mode 100644
index 0000000..e652401
--- /dev/null
+++ b/includes/views/cck_phone.views.inc
@@ -0,0 +1,26 @@
+<?php
+
+/**
+ * Implements hook_field_views_data().
+ */
+function cck_phone_field_views_data($field) {
+  $data = field_views_field_default_views_data($field);
+
+  // Add a handler for number.
+  foreach ($field['storage']['details']['sql'] as $type => $tables) {
+    foreach ($tables as $table_name => $columns) {
+      if (!isset($columns['number'])) {
+        continue;
+      }
+
+      $column_real_name = $columns['number'];
+      if (!isset($data[$table_name][$column_real_name]['filter'])) {
+        continue;
+      }
+
+      $data[$table_name][$column_real_name]['filter']['handler'] = 'cck_phone_views_handler_filter_number';
+    }
+  }
+
+  return $data;
+}
diff --git a/includes/views/cck_phone_views_handler_filter_number.inc b/includes/views/cck_phone_views_handler_filter_number.inc
new file mode 100644
index 0000000..6c9bf84
--- /dev/null
+++ b/includes/views/cck_phone_views_handler_filter_number.inc
@@ -0,0 +1,49 @@
+<?php
+
+class cck_phone_views_handler_filter_number extends views_handler_filter_string {
+
+  function accept_exposed_input($input) {
+    if (empty($this->options['exposed'])) {
+      return TRUE;
+    }
+
+
+    if (!empty($this->options['expose']['use_operator']) && !empty($this->options['expose']['operator_id']) && isset($input[$this->options['expose']['operator_id']])) {
+      $this->operator = $input[$this->options['expose']['operator_id']];
+    }
+
+    if (!empty($this->options['expose']['identifier'])) {
+      $value = $input[$this->options['expose']['identifier']];
+
+      // Various ways to check for the absence of non-required input.
+      if (empty($this->options['expose']['required'])) {
+        if (($this->operator == 'empty' || $this->operator == 'not empty') && $value === '') {
+          $value = ' ';
+        }
+
+        if ($this->operator != 'empty' && $this->operator != 'not empty') {
+          if ($value == 'All' || $value === array()) {
+            return FALSE;
+          }
+        }
+
+        if (!empty($this->always_multiple) && $value === '') {
+          return FALSE;
+        }
+      }
+
+
+      if (isset($value)) {
+        $this->value = cck_phone_clean_number($value);
+        if (empty($this->always_multiple) && empty($this->options['expose']['multiple'])) {
+          $this->value = array($value);
+        }
+      }
+      else {
+        return FALSE;
+      }
+    }
+
+    return TRUE;
+  }
+}
\ No newline at end of file
-- 
1.7.9.5

