CRM-19006: Unit test to assert special characters in custom value
authordeb.monish <monish.deb@webaccessglobal.com>
Mon, 11 Jul 2016 11:45:37 +0000 (17:15 +0530)
committerdeb.monish <monish.deb@webaccessglobal.com>
Mon, 11 Jul 2016 14:50:39 +0000 (20:20 +0530)
CRM/Core/BAO/CustomQuery.php
tests/phpunit/api/v3/CustomValueTest.php

index ce3586a5fa5329ff4e5420beca431ecc3e5d5cb0..ab510d164b45463602fb9836d093d42057d249aa 100644 (file)
@@ -348,7 +348,7 @@ SELECT f.id, f.label, f.data_type,
                 // CRM-19006: escape characters like comma, | before building regex pattern
                 $value = (array) $value;
                 foreach ($value as $key => $val) {
-                  $value[$key] = str_replace(array('|', '[', ']', ','), array('\|', '\[', '\]', '[:comma:]'), $val);
+                  $value[$key] = str_replace(array('|', '[', ']', ','), array('[:spearator:]', '\[', '\]', '[:comma:]'), $val);
                 }
                 $value = implode(',', $value);
               }
@@ -364,10 +364,12 @@ SELECT f.id, f.label, f.data_type,
                 $value = $sp . $value . $sp;
                 if (!$wildcard) {
                   foreach (explode("|", $value) as $val) {
+                    $val = str_replace('[:separator:]', '\|', $val);
                     $this->_where[$grouping][] = CRM_Contact_BAO_Query::buildClause($fieldName, $op, $val, 'String');
                   }
                 }
                 else {
+                  $value = str_replace('[:separator:]', '\|', $value);
                   $this->_where[$grouping][] = CRM_Contact_BAO_Query::buildClause($fieldName, $op, $value, 'String');
                 }
               }
index 3d7764132e409917d02e9ace3a64ac53a76edc5a..6e63b6e7983c20de3dea10f0ecad5df031c8c20a 100644 (file)
@@ -44,7 +44,7 @@ class api_v3_CustomValueTest extends CiviUnitTestCase {
     $dataValues = array(
       'integer' => array(1, 2, 3),
       'number' => array(10.11, 20.22, 30.33),
-      'string' => array(substr(sha1(rand()), 0, 4), substr(sha1(rand()), 0, 3), substr(sha1(rand()), 0, 2)),
+      'string' => array(substr(sha1(rand()), 0, 4) . '(', substr(sha1(rand()), 0, 3) . '|', substr(sha1(rand()), 0, 2) . ','),
       // 'country' => array_rand(CRM_Core_PseudoConstant::country(FALSE, FALSE), 3),
       // This does not work in the test at the moment due to caching issues.
       //'state_province' => array_rand(CRM_Core_PseudoConstant::stateProvince(FALSE, FALSE), 3),