Fixed regression when search for location types.
authorMattias Michaux <mattias.michaux@gmail.com>
Sun, 8 May 2016 08:02:25 +0000 (10:02 +0200)
committerMattias Michaux <mattias.michaux@gmail.com>
Sun, 8 May 2016 08:02:25 +0000 (10:02 +0200)
CRM/Utils/Rule.php
tests/phpunit/CRM/Utils/TypeTest.php

index 3251d26bbefb4991a76b4cbe15b501e21a1a38f5..efb64eb8589eb38fb4b626dcca37bafaabaafffe 100644 (file)
@@ -100,11 +100,12 @@ class CRM_Utils_Rule {
       return FALSE;
     }
 
-    // Ensure it only contains valid characters (alphanumeric and underscores).
+    // Ensure it only contains valid characters (alphanumeric, hyphens and
+    // underscores).
     //
     // MySQL permits column names that don't match this (eg containing spaces),
     // but CiviCRM won't create those ...
-    if (!preg_match('/^\w{1,64}(\.\w{1,64})?$/i', $str)) {
+    if (!preg_match('/^[\w-]{1,64}(\.[\w-]{1,64})?$/i', $str)) {
       return FALSE;
     }
 
@@ -138,7 +139,7 @@ class CRM_Utils_Rule {
     // at all, so we split and loop over.
     $parts = explode(',', $str);
     foreach ($parts as $part) {
-      if (!preg_match('/^((\w{1,64})((\.)(\w{1,64}))?( (asc|desc))?)$/i', trim($part))) {
+      if (!preg_match('/^(([\w-]{1,64})((\.)([\w-]{1,64}))?( (asc|desc))?)$/i', trim($part))) {
         return FALSE;
       }
     }
index 4e51944f313359d0d4f01ea4cbfa6e7b7ce4b405..793a5334bc121f4b7903d3c32d9f72993a94a79f 100644 (file)
@@ -40,7 +40,7 @@ class CRM_Utils_TypeTest extends CiviUnitTestCase {
       array('civicrm_column_name', 'MysqlColumnName', 'civicrm_column_name'),
       array('table.civicrm_column_name', 'MysqlColumnName', 'table.civicrm_column_name'),
       array('table.civicrm_column_name.toomanydots', 'MysqlColumnName', NULL),
-      array('invalid-column-name', 'MysqlColumnName', NULL),
+      array('Home-street_address', 'MysqlColumnName', 'Home-street_address'),
       array('column_name, sleep(5)', 'MysqlColumnName', NULL),
       array(str_repeat('a', 64), 'MysqlColumnName', str_repeat('a', 64)),
       array(str_repeat('a', 65), 'MysqlColumnName', NULL),