CRM-15476 - Only validate chainSelect fields if the control field exists
authorColeman Watts <coleman@civicrm.org>
Wed, 22 Oct 2014 18:27:38 +0000 (14:27 -0400)
committerColeman Watts <coleman@civicrm.org>
Wed, 22 Oct 2014 18:27:38 +0000 (14:27 -0400)
CRM/Core/Form.php

index d805d59f8c1253f78efd93122c4c0d97c3f79578..f328e17fe74f6e756763d6d6a4b7adb35a2e1e94 100644 (file)
@@ -1806,21 +1806,22 @@ class CRM_Core_Form extends HTML_QuickForm_Page {
    */
   private function validateChainSelectFields() {
     foreach ($this->_chainSelectFields as $control => $target) {
-      $controlValue = (array) $this->getElementValue($control);
-      $targetField = $this->getElement($target);
-      $controlType = $targetField->getAttribute('data-callback') == 'civicrm/ajax/jqCounty' ? 'stateProvince' : 'country';
-      $targetValue = array_filter((array) $targetField->getValue());
-      if ($targetValue || $this->getElementError($target)) {
-        $options = CRM_Core_BAO_Location::getChainSelectValues($controlValue, $controlType, TRUE);
-        if ($targetValue) {
-          if (!array_intersect($targetValue, array_keys($options))) {
-            $this->setElementError($target, $controlType == 'country' ? ts('State/Province does not match the selected Country') : ts('County does not match the selected State/Province'));
+      if ($this->elementExists($control)) {
+        $controlValue = (array)$this->getElementValue($control);
+        $targetField = $this->getElement($target);
+        $controlType = $targetField->getAttribute('data-callback') == 'civicrm/ajax/jqCounty' ? 'stateProvince' : 'country';
+        $targetValue = array_filter((array)$targetField->getValue());
+        if ($targetValue || $this->getElementError($target)) {
+          $options = CRM_Core_BAO_Location::getChainSelectValues($controlValue, $controlType, TRUE);
+          if ($targetValue) {
+            if (!array_intersect($targetValue, array_keys($options))) {
+              $this->setElementError($target, $controlType == 'country' ? ts('State/Province does not match the selected Country') : ts('County does not match the selected State/Province'));
+            }
+          } // Suppress "required" error for field if it has no options
+          elseif (!$options) {
+            $this->setElementError($target, NULL);
           }
         }
-        // Suppress "required" error for field if it has no options
-        elseif (!$options) {
-          $this->setElementError($target, NULL);
-        }
       }
     }
   }