Tweak money/numeric error messages to not mention point (could be a comma)
authorMathieu Lu <mathieu@symbiotic.coop>
Sun, 22 Oct 2023 18:13:20 +0000 (14:13 -0400)
committerMathieu Lu <mathieu@symbiotic.coop>
Tue, 24 Oct 2023 16:07:40 +0000 (12:07 -0400)
CRM/Core/BAO/CustomField.php
CRM/Price/BAO/PriceField.php
tests/phpunit/CRM/Case/Form/CustomDataTest.php

index 1e9d48d0d799d4670e24b853e89d72bb48165caf..bc745b8db5db86618ce9461dd52e16d3494a07f7 100644 (file)
@@ -1153,21 +1153,21 @@ class CRM_Core_BAO_CustomField extends CRM_Core_DAO_CustomField {
 
       case 'Float':
         if ($field->is_search_range && $search) {
-          $qf->addRule($elementName . '_from', ts('%1 From must be a number (with or without decimal point).', [1 => $label]), 'numeric');
-          $qf->addRule($elementName . '_to', ts('%1 To must be a number (with or without decimal point).', [1 => $label]), 'numeric');
+          $qf->addRule($elementName . '_from', ts('%1 From must be a number (with or without decimals).', [1 => $label]), 'numeric');
+          $qf->addRule($elementName . '_to', ts('%1 To must be a number (with or without decimals).', [1 => $label]), 'numeric');
         }
         elseif ($widget == 'Text') {
-          $qf->addRule($elementName, ts('%1 must be a number (with or without decimal point).', [1 => $label]), 'numeric');
+          $qf->addRule($elementName, ts('%1 must be a number (with or without decimals).', [1 => $label]), 'numeric');
         }
         break;
 
       case 'Money':
         if ($field->is_search_range && $search) {
-          $qf->addRule($elementName . '_from', ts('%1 From must in proper money format. (decimal point/comma/space is allowed).', [1 => $label]), 'money');
-          $qf->addRule($elementName . '_to', ts('%1 To must in proper money format. (decimal point/comma/space is allowed).', [1 => $label]), 'money');
+          $qf->addRule($elementName . '_from', ts('%1 From must in money format (a number with or without decimals, ex: %2).', [1 => $label, 2 => Civi::format()->number(123.98)]), 'money');
+          $qf->addRule($elementName . '_to', ts('%1 To must in money format (a number with or without decimals, ex: %2).', [1 => $label, 2 => Civi::format()->number(123.98)]), 'money');
         }
         elseif ($widget == 'Text') {
-          $qf->addRule($elementName, ts('%1 must be in proper money format. (decimal point/comma/space is allowed).', [1 => $label]), 'money');
+          $qf->addRule($elementName, ts('%1 must be in money format (a number with or without decimals, ex: %2).', [1 => $label, 2 => Civi::format()->number(123.98)]), 'money');
         }
         break;
 
@@ -2754,30 +2754,22 @@ WHERE      f.id IN ($ids)";
       switch ($dataType) {
         case 'Int':
           $ruleName = 'integer';
-          $errorMsg = ts('%1 must be an integer (whole number).',
-            [1 => $fieldTitle]
-          );
+          $errorMsg = ts('%1 must be an integer (whole number).', [1 => $fieldTitle]);
           break;
 
         case 'Money':
           $ruleName = 'money';
-          $errorMsg = ts('%1 must in proper money format. (decimal point/comma/space is allowed).',
-            [1 => $fieldTitle]
-          );
+          $errorMsg = ts('%1 must be in money format (a number with or without decimals, ex: %2).', [1 => $fieldTitle, 2 => Civi::format()->number(123.98)]);
           break;
 
         case 'Float':
           $ruleName = 'numeric';
-          $errorMsg = ts('%1 must be a number (with or without decimal point).',
-            [1 => $fieldTitle]
-          );
+          $errorMsg = ts('%1 must be a number (with or without decimals).', [1 => $fieldTitle]);
           break;
 
         case 'Link':
           $ruleName = 'wikiURL';
-          $errorMsg = ts('%1 must be valid Website.',
-            [1 => $fieldTitle]
-          );
+          $errorMsg = ts('%1 must be valid Website.', [1 => $fieldTitle]);
           break;
       }
 
index cb5903a138a3dae1c7df91b3d487c38d3c485290..ac5255e6247218de7e31a19b7114c64b7053fd3e 100644 (file)
@@ -349,7 +349,7 @@ class CRM_Price_BAO_PriceField extends CRM_Price_DAO_PriceField {
           $type = 'money';
         }
         else {
-          $message = ts('%1 must be a number (with or without decimal point).', [1 => $label]);
+          $message = ts('%1 must be a number (with or without decimals).', [1 => $label]);
           $type = 'numeric';
         }
         // integers will have numeric rule applied to them.
index 10de0a43712f6372722744732ae0901c74646629..437d766918489f8f26417ecbe158f11f04c8e2af 100644 (file)
@@ -11,10 +11,22 @@ class CRM_Case_Form_CustomDataTest extends CiviCaseTestCase {
 
   public function setUp(): void {
     parent::setUp();
+    CRM_Core_I18n::singleton()->setLocale('en_US');
+    CRM_Core_Config::singleton()->defaultCurrency = 'USD';
+    CRM_Core_Config::singleton()->monetaryThousandSeparator = ',';
+    CRM_Core_Config::singleton()->monetaryDecimalPoint = '.';
     $this->custom_group = $this->customGroupCreate(['extends' => 'Case']);
     $this->custom_group = $this->custom_group['values'][$this->custom_group['id']];
   }
 
+  public function tearDown(): void {
+    parent::tearDown();
+    CRM_Core_Config::singleton()->defaultCurrency = 'USD';
+    CRM_Core_Config::singleton()->monetaryThousandSeparator = ',';
+    CRM_Core_Config::singleton()->monetaryDecimalPoint = '.';
+    CRM_Core_I18n::singleton()->setLocale('en_US');
+  }
+
   /**
    * Test that changes to custom fields on cases generate the correct details
    * body for ChangeCustomData.
@@ -93,11 +105,6 @@ class CRM_Case_Form_CustomDataTest extends CiviCaseTestCase {
     CRM_Core_Config::singleton()->monetaryDecimalPoint = ',';
 
     $this->testChangeCustomDataFormattedDetails($input, $expected);
-
-    CRM_Core_Config::singleton()->defaultCurrency = 'USD';
-    CRM_Core_Config::singleton()->monetaryThousandSeparator = ',';
-    CRM_Core_Config::singleton()->monetaryDecimalPoint = '.';
-    CRM_Core_I18n::singleton()->setLocale('en_US');
   }
 
   /**