dev/core#2743 fix api v3 to not unnecessarily load options
authorEileen McNaughton <emcnaughton@wikimedia.org>
Wed, 11 Aug 2021 22:28:50 +0000 (10:28 +1200)
committerEileen McNaughton <emcnaughton@wikimedia.org>
Wed, 11 Aug 2021 22:33:25 +0000 (10:33 +1200)
api/v3/utils.php

index cc2ee37cad274c0dc91476dce26804b0dd56e1f5..d3d6c882a71c8bd2fcad23e8495da158263b4655 100644 (file)
@@ -2078,9 +2078,14 @@ function _civicrm_api3_validate_integer(&$params, $fieldName, &$fieldInfo, $enti
         $fieldValue = NULL;
       }
     }
-    if (!empty($fieldInfo['pseudoconstant']) || !empty($fieldInfo['options']) || $fieldName === 'campaign_id') {
+    if (
+    (!empty($fieldInfo['pseudoconstant']) || !empty($fieldInfo['options']) || $fieldName === 'campaign_id')
+     // if it is already numeric AND it is an FK field we don't need to validate because
+     // sql will do that for us on insert (this also saves a big lookup)
+     && (!is_numeric($fieldValue) || empty($fieldInfo['FKClassName']))
+    ) {
       $additional_lookup_params = [];
-      if (strtolower($entity) == 'address' && $fieldName == 'state_province_id') {
+      if (strtolower($entity) === 'address' && $fieldName == 'state_province_id') {
         $country_id = _civicrm_api3_resolve_country_id($params);
         if (!empty($country_id)) {
           $additional_lookup_params = ['country_id' => $country_id];