[REF][PHP8.1] Another batch of fixes for passing in NULL values into functions that...
authorSeamus Lee <seamuslee001@gmail.com>
Thu, 28 Jul 2022 21:41:45 +0000 (07:41 +1000)
committerSeamus Lee <seamuslee001@gmail.com>
Mon, 1 Aug 2022 20:59:19 +0000 (06:59 +1000)
32 files changed:
CRM/Contact/Page/View.php
CRM/Contribute/BAO/ContributionPage.php
CRM/Contribute/BAO/ContributionRecur.php
CRM/Contribute/Form/ContributionBase.php
CRM/Contribute/Form/Task/TaskTrait.php
CRM/Core/CommunityMessages.php
CRM/Core/Key.php
CRM/Core/Page/Basic.php
CRM/Core/Payment/Dummy.php
CRM/Core/Payment/PayPalImpl.php
CRM/Event/ActionMapping.php
CRM/Event/BAO/Participant.php
CRM/Extension/Manager/Payment.php
CRM/Mailing/BAO/Mailing.php
CRM/Member/ActionMapping.php
CRM/Price/Form/Field.php
CRM/Profile/Form.php
CRM/Profile/Form/Edit.php
CRM/Report/Form.php
CRM/Utils/Address.php
CRM/Utils/Date.php
CRM/Utils/Hook.php
CRM/Utils/JS.php
CRM/Utils/JSON.php
CRM/Utils/Mail/EmailProcessor.php
CRM/Utils/REST.php
CRM/Utils/Rule.php
CRM/Utils/System.php
CRM/Utils/Type.php
CRM/Utils/Verp.php
Civi/Api4/Provider/ActionObjectProvider.php
Civi/Test/DbTestTrait.php

index 3069497500633771de664b406648d3ac33c961ff..e93d8925b8a2d62c80ddc6b0051bf6e671ddec35 100644 (file)
@@ -162,7 +162,7 @@ class CRM_Contact_Page_View extends CRM_Core_Page {
     $this->set('contactType', $contactType);
 
     // note: there could still be multiple subtypes. We just trimming the outer separator.
-    $this->set('contactSubtype', trim($contactSubtype, CRM_Core_DAO::VALUE_SEPARATOR));
+    $this->set('contactSubtype', trim(($contactSubtype ?? ''), CRM_Core_DAO::VALUE_SEPARATOR));
 
     // add to recently viewed block
     $isDeleted = (bool) CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $this->_contactId, 'is_deleted');
index f184d191165b880c40b81410d9234139e8b947aa..3b18216f3b96b92e9a8fc5039faf8bc7215a26b6 100644 (file)
@@ -917,7 +917,7 @@ LEFT JOIN  civicrm_premiums            ON ( civicrm_premiums.entity_id = civicrm
       $ufJoinDAO->module = $module;
       $ufJoinDAO->entity_id = $params['id'];
       $ufJoinDAO->find(TRUE);
-      $jsonData = json_decode($ufJoinDAO->module_data);
+      $jsonData = json_decode($ufJoinDAO->module_data ?? '');
       if ($jsonData) {
         $json[$module] = array_merge((array) $jsonData->$module, $json[$module]);
       }
index e54cd915faed91f88ad048ed57ff861b46008628..06829110fc014c8891a9f8be6a0dca3c24714032 100644 (file)
@@ -543,8 +543,8 @@ INNER JOIN civicrm_contribution       con ON ( con.id = mp.contribution_id )
     // we filter out null, '' and FALSE but not zero - I'm on the fence about zero.
     $overrides = array_filter([
       'is_test' => $inputOverrides['is_test'] ?? $recurringContribution['is_test'],
-      'financial_type_id' => $inputOverrides['financial_type_id'] ?? $recurringContribution['financial_type_id'],
-      'campaign_id' => $inputOverrides['campaign_id'] ?? ($recurringContribution['campaign_id'] ?? NULL),
+      'financial_type_id' => $inputOverrides['financial_type_id'] ?? ($recurringContribution['financial_type_id'] ?? ''),
+      'campaign_id' => $inputOverrides['campaign_id'] ?? ($recurringContribution['campaign_id'] ?? ''),
       'total_amount' => $inputOverrides['total_amount'] ?? $recurringContribution['amount'],
     ], 'strlen');
 
index f687ac0a850d70933622ef34875ed0a9e16a0b51..964340fb3b402592d9cc5c6b74040353c6262c6b 100644 (file)
@@ -353,7 +353,7 @@ class CRM_Contribute_Form_ContributionBase extends CRM_Core_Form {
 
       $this->_paymentProcessorIDs = array_filter(explode(
         CRM_Core_DAO::VALUE_SEPARATOR,
-        CRM_Utils_Array::value('payment_processor', $this->_values)
+        ($this->_values['payment_processor'] ?? '')
       ));
 
       $this->assignPaymentProcessor($isPayLater);
index 69bcf25b647c906d7b1cbe0e31bcc9d16da94d12..00a8bfcd20270eaccf8e61ce399621d5c64a1d29 100644 (file)
@@ -122,6 +122,7 @@ trait CRM_Contribute_Form_Task_TaskTrait {
     $ids = $this->getSelectedIDs($this->getSearchFormValues());
     if (!$ids) {
       $result = $this->getSearchQueryResults();
+      $ids = [];
       while ($result->fetch()) {
         $ids[] = $result->contribution_id;
       }
index 081457351cd1a218a839a847965f4fe6c0e8cc01..ebf881cdbe9bc375c86ebcf5536cf2b0b4a92f3c 100644 (file)
@@ -197,7 +197,7 @@ class CRM_Core_CommunityMessages {
       'sid' => CRM_Utils_System::getSiteID(),
       'baseUrl' => $config->userFrameworkBaseURL,
       'lang' => $config->lcMessages,
-      'co' => $config->defaultContactCountry,
+      'co' => $config->defaultContactCountry ?? '',
     ];
     $vars = [];
     foreach ($vals as $k => $v) {
index 58b0a3912ca86eb4bcfeda0454a529255dcc9c1e..40708b180a590328f3377e250ccd5524cf3f5b25 100644 (file)
@@ -140,7 +140,7 @@ class CRM_Core_Key {
   public static function valid($key) {
     // ensure that key is an alphanumeric string of at least HASH_LENGTH with
     // an optional underscore+digits at the end.
-    return preg_match('#^[0-9a-zA-Z]{' . self::HASH_LENGTH . ',}+(_\d+)?$#', $key) ? TRUE : FALSE;
+    return preg_match('#^[0-9a-zA-Z]{' . self::HASH_LENGTH . ',}+(_\d+)?$#', ($key ?? '')) ? TRUE : FALSE;
   }
 
   /**
index 32f912c964133f1b05ed2300486e822b5c531453..52730c05d0273cfa3aeb1686ba396e969274e774 100644 (file)
@@ -360,7 +360,7 @@ abstract class CRM_Core_Page_Basic extends CRM_Core_Page {
       $key = 'name';
     }
 
-    if (trim($sort)) {
+    if (trim($sort ?? '')) {
       $object->orderBy($sort);
     }
     elseif ($key) {
index d52efbb4108c5b5958e2175ab04759e1ee4d5fa0..4b6735d8195e454eb06e750a89e4a7ef456c6048 100644 (file)
@@ -332,7 +332,7 @@ class CRM_Core_Payment_Dummy extends CRM_Core_Payment {
    */
   protected function getTrxnID() {
     $string = $this->_mode;
-    $trxn_id = CRM_Core_DAO::singleValueQuery("SELECT MAX(trxn_id) FROM civicrm_contribution WHERE trxn_id LIKE '{$string}_%'");
+    $trxn_id = CRM_Core_DAO::singleValueQuery("SELECT MAX(trxn_id) FROM civicrm_contribution WHERE trxn_id LIKE '{$string}_%'") ?? '';
     $trxn_id = str_replace($string, '', $trxn_id);
     $trxn_id = (int) $trxn_id + 1;
     return $string . '_' . $trxn_id . '_' . uniqid();
index f16370d206ef723c8e969e5ebe487488a018cc6d..1420b32600feb5b91af97cc76a28d3c949af4c60 100644 (file)
@@ -566,7 +566,7 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment {
     $args['state'] = $params['state_province'];
     $args['countryCode'] = $params['country'];
     $args['zip'] = $params['postal_code'];
-    $args['desc'] = substr(CRM_Utils_Array::value('description', $params), 0, 127);
+    $args['desc'] = substr(($params['description'] ?? ''), 0, 127);
     $args['custom'] = $params['accountingCode'] ?? NULL;
 
     // add CiviCRM BN code
@@ -1096,7 +1096,7 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment {
 
     $p = [];
     foreach ($args as $n => $v) {
-      $p[] = "$n=" . urlencode($v);
+      $p[] = "$n=" . urlencode($v ?? '');
     }
 
     //NVPRequest for submitting to server
index ae76bf3df2c7d6adb850559be16539b6d665654c..c474a8dba6aaf87b5afd7ffaf7a5533fd66bdebd 100644 (file)
@@ -140,7 +140,7 @@ class CRM_Event_ActionMapping extends \Civi\ActionSchedule\Mapping {
     $query['casContactIdField'] = 'e.contact_id';
     $query['casEntityIdField'] = 'e.id';
     $query['casContactTableAlias'] = NULL;
-    $query['casDateField'] = str_replace('event_', 'r.', $schedule->start_action_date);
+    $query['casDateField'] = str_replace('event_', 'r.', ($schedule->start_action_date ?? ''));
     if (empty($query['casDateField']) && $schedule->absolute_date) {
       $query['casDateField'] = "'" . CRM_Utils_Type::escape($schedule->absolute_date, 'String') . "'";
     }
index b48daaa4b3485f9c409693072f493f9e84ab47b3..9ab5ab46e47083b84c545676696eb95f1be89f2a 100644 (file)
@@ -1859,7 +1859,7 @@ WHERE    civicrm_participant.contact_id = {$contactID} AND
       $details['eligible'] = TRUE;
       $details['status']  = $dao->status;
       $details['role'] = $dao->role;
-      $details['fee_level'] = trim($dao->fee_level, CRM_Core_DAO::VALUE_SEPARATOR);
+      $details['fee_level'] = trim(($dao->fee_level ?? ''), CRM_Core_DAO::VALUE_SEPARATOR);
       $details['fee_amount'] = $dao->fee_amount;
       $details['register_date'] = $dao->register_date;
       $details['event_start_date'] = $dao->start_date;
index 0919690a6a41c52669ef5f60cdcd633062e78b06..e5256278b6f58d5298a7ffba4087836e1c03e128 100644 (file)
@@ -56,18 +56,18 @@ class CRM_Extension_Manager_Payment extends CRM_Extension_Manager_Base {
     $dao->name = trim($info->name);
     $dao->description = trim($info->description);
 
-    $dao->user_name_label = trim($info->typeInfo['userNameLabel']);
-    $dao->password_label = trim($info->typeInfo['passwordLabel']);
-    $dao->signature_label = trim($info->typeInfo['signatureLabel']);
-    $dao->subject_label = trim($info->typeInfo['subjectLabel']);
-    $dao->url_site_default = trim($info->typeInfo['urlSiteDefault']);
-    $dao->url_api_default = trim($info->typeInfo['urlApiDefault']);
-    $dao->url_recur_default = trim($info->typeInfo['urlRecurDefault']);
-    $dao->url_site_test_default = trim($info->typeInfo['urlSiteTestDefault']);
-    $dao->url_api_test_default = trim($info->typeInfo['urlApiTestDefault']);
-    $dao->url_recur_test_default = trim($info->typeInfo['urlRecurTestDefault']);
-    $dao->url_button_default = trim($info->typeInfo['urlButtonDefault']);
-    $dao->url_button_test_default = trim($info->typeInfo['urlButtonTestDefault']);
+    $dao->user_name_label = trim($info->typeInfo['userNameLabel'] ?? '');
+    $dao->password_label = trim($info->typeInfo['passwordLabel'] ?? '');
+    $dao->signature_label = trim($info->typeInfo['signatureLabel'] ?? '');
+    $dao->subject_label = trim($info->typeInfo['subjectLabel'] ?? '');
+    $dao->url_site_default = trim($info->typeInfo['urlSiteDefault'] ?? '');
+    $dao->url_api_default = trim($info->typeInfo['urlApiDefault'] ?? '');
+    $dao->url_recur_default = trim($info->typeInfo['urlRecurDefault'] ?? '');
+    $dao->url_site_test_default = trim($info->typeInfo['urlSiteTestDefault'] ?? '');
+    $dao->url_api_test_default = trim($info->typeInfo['urlApiTestDefault'] ?? '');
+    $dao->url_recur_test_default = trim($info->typeInfo['urlRecurTestDefault'] ?? '');
+    $dao->url_button_default = trim($info->typeInfo['urlButtonDefault'] ?? '');
+    $dao->url_button_test_default = trim($info->typeInfo['urlButtonTestDefault'] ?? '');
 
     switch (trim($info->typeInfo['billingMode'])) {
       case 'form':
@@ -86,8 +86,8 @@ class CRM_Extension_Manager_Payment extends CRM_Extension_Manager_Base {
         throw new CRM_Core_Exception(ts('Billing mode in info file has wrong value.'));
     }
 
-    $dao->is_recur = trim($info->typeInfo['isRecur']);
-    $dao->payment_type = trim($info->typeInfo['paymentType']);
+    $dao->is_recur = trim($info->typeInfo['isRecur'] ?? '');
+    $dao->payment_type = trim($info->typeInfo['paymentType'] ?? '');
 
     $dao->save();
   }
index 24c2cfba7e6d26f31dadb7664b20b6536c396321..1d2ceafc81deab32b55c63b268ca4597b56cb16e 100644 (file)
@@ -1560,7 +1560,7 @@ ORDER BY   civicrm_email.is_bulkmail DESC
       if (empty($defaults['from_email'])) {
         $defaultAddress = CRM_Core_BAO_Domain::getNameAndEmail(TRUE, TRUE);
         foreach ($defaultAddress as $id => $value) {
-          if (preg_match('/"(.*)" <(.*)>/', $value, $match)) {
+          if (preg_match('/"(.*)" <(.*)>/', ($value ?? ''), $match)) {
             $defaults['from_email'] = $match[2];
             $defaults['from_name'] = $match[1];
           }
index e42add868298b81d1dac16546f3f3bb566667469..24977439d943b973e49bee8315cac51ccc75773a 100644 (file)
@@ -82,7 +82,7 @@ class CRM_Member_ActionMapping extends \Civi\ActionSchedule\Mapping {
     $query['casContactTableAlias'] = NULL;
 
     // Leaving this in case of legacy databases
-    $query['casDateField'] = str_replace('membership_', 'e.', $schedule->start_action_date);
+    $query['casDateField'] = str_replace('membership_', 'e.', ($schedule->start_action_date ?? ''));
 
     // Options currently are just 'join_date', 'start_date', and 'end_date':
     // they need an alias
index ed12cd3e77338ece0d5234763a2d523a60e1ec70..cdfea438f8cf5de88481837132af3e08ccbb321c 100644 (file)
@@ -473,7 +473,7 @@ class CRM_Price_Form_Field extends CRM_Core_Form {
 
           // allow for 0 value.
           if (!empty($fields['option_amount'][$index]) ||
-            strlen($fields['option_amount'][$index]) > 0
+            strlen($fields['option_amount'][$index] ?? '') > 0
           ) {
             $noAmount = 0;
           }
index 74ed2ca620c674b3c07c955d56003d8a9cb53592..2e0a437139b74ea7ad4cf8ff27cc06d668715d2b 100644 (file)
@@ -331,7 +331,7 @@ class CRM_Profile_Form extends CRM_Core_Form {
     }
     $this->_duplicateButtonName = $this->getButtonName('upload', 'duplicate');
 
-    $gids = explode(',', CRM_Utils_Request::retrieve('gid', 'String', CRM_Core_DAO::$_nullObject, FALSE, 0));
+    $gids = explode(',', (CRM_Utils_Request::retrieve('gid', 'String', CRM_Core_DAO::$_nullObject, FALSE, 0) ?? ''));
 
     if ((count($gids) > 1) && !$this->_profileIds && empty($this->_profileIds)) {
       if (!empty($gids)) {
index c0f7ec2076a90fd09b35e482ecb3901e2b28ae1f..5f1d668b2d7506cdaf0c08ea570b1df0eff7748c 100644 (file)
@@ -183,8 +183,8 @@ SELECT module,is_reserved
       }
 
       // we do this gross hack since qf also does entity replacement
-      $this->_postURL = str_replace('&amp;', '&', $this->_postURL);
-      $this->_cancelURL = str_replace('&amp;', '&', $this->_cancelURL);
+      $this->_postURL = str_replace('&amp;', '&', ($this->_postURL ?? ''));
+      $this->_cancelURL = str_replace('&amp;', '&', ($this->_cancelURL ?? ''));
 
       // also retain error URL if set
       $this->_errorURL = $_POST['errorURL'] ?? NULL;
index 1649a77ff61b12b6e62fc3cf7221409b5c54502a..1b1d1788aade6c9d662127420d43e47b9adaa51f 100644 (file)
@@ -5134,13 +5134,13 @@ LEFT JOIN civicrm_contact {$field['alias']} ON {$field['alias']}.id = {$this->_a
    *   is that we might print a bar chart as a pdf.
    */
   protected function setOutputMode() {
-    $this->_outputMode = str_replace('report_instance.', '', CRM_Utils_Request::retrieve(
+    $this->_outputMode = str_replace('report_instance.', '', (CRM_Utils_Request::retrieve(
       'output',
       'String',
       CRM_Core_DAO::$_nullObject,
       FALSE,
       CRM_Utils_Array::value('task', $this->_params)
-    ));
+    ) ?? ''));
     // if contacts are added to group
     if (!empty($this->_params['groups']) && empty($this->_outputMode)) {
       $this->_outputMode = 'group';
index ff54a5b83b56ac42f42389c02fa8ccdc8196c931..56b79fa6ed68c32bf227fb0f7274ce22ff4a8ce3 100644 (file)
@@ -183,7 +183,7 @@ class CRM_Utils_Address {
     }
 
     // replacements in case of Custom Token
-    if (stristr($formatted, 'custom_')) {
+    if (stristr(($formatted ?? ''), 'custom_')) {
       $customToken = array_keys($fields);
       foreach ($customToken as $value) {
         if (substr($value, 0, 7) == 'custom_') {
@@ -203,10 +203,10 @@ class CRM_Utils_Address {
     // the value is not empty, otherwise drop the whole {fooTOKENbar}
     foreach ($replacements as $token => $value) {
       if ($value && is_string($value) || is_numeric($value)) {
-        $formatted = preg_replace("/{([^{}]*)\b{$token}\b([^{}]*)}/u", "\${1}{$value}\${2}", $formatted);
+        $formatted = preg_replace("/{([^{}]*)\b{$token}\b([^{}]*)}/u", "\${1}{$value}\${2}", ($formatted ?? ''));
       }
       else {
-        $formatted = preg_replace("/{[^{}]*\b{$token}\b[^{}]*}/u", '', $formatted);
+        $formatted = preg_replace("/{[^{}]*\b{$token}\b[^{}]*}/u", '', ($formatted ?? ''));
       }
     }
 
index f3add192515bdbb05801284e1dec91cf1f1a735f..98819be857a05d0e9988e4205c153e7b495b4345 100644 (file)
@@ -342,8 +342,8 @@ class CRM_Utils_Date {
     $fullWeekdayNames = self::getFullWeekdayNames();
     $abbrWeekdayNames = self::getAbbrWeekdayNames();
 
-    // backwards compatability with %D being the equivilant of %m/%d/%y
-    $format = str_replace('%D', '%m/%d/%y', $format);
+    // backwards compatibility with %D being the equivalent of %m/%d/%y
+    $format = str_replace('%D', '%m/%d/%y', ($format ?? ''));
 
     if (!$format) {
       $config = CRM_Core_Config::singleton();
index c697851787d8ad3eafce484fe25accd10a148696..aafffbd469d05fb345d2840e148f36c20f141b7b 100644 (file)
@@ -311,7 +311,7 @@ abstract class CRM_Utils_Hook {
   public function requireCiviModules(&$moduleList) {
     $civiModules = CRM_Core_PseudoConstant::getModuleExtensions();
     foreach ($civiModules as $civiModule) {
-      if (!file_exists($civiModule['filePath'])) {
+      if (!file_exists($civiModule['filePath'] ?? '')) {
         CRM_Core_Session::setStatus(
           ts('Error loading module file (%1). Please restore the file or disable the module.',
             [1 => $civiModule['filePath']]),
index 27c4d4524525724a1d52b16eb9941e8da45d9b60..6b5c03735c9b76673f26cdd6dfa6a12b2060cfe1 100644 (file)
@@ -147,7 +147,7 @@ class CRM_Utils_JS {
       }
       return $obj;
     }
-    $result = json_decode($js);
+    $result = json_decode($js ?? '');
     if ($throwException && $result === NULL && $js !== 'null') {
       throw new CRM_Core_Exception(json_last_error_msg());
     }
index 5f3bcabd85a2e3c275ca917e77d5f413a67d3d73..86b3f5d3154e9528b13a59dbf2a754f8c186bc1d 100644 (file)
@@ -75,7 +75,7 @@ class CRM_Utils_JSON {
         // CRM-7130 --lets addslashes to only double quotes,
         // since we are using it to quote the field value.
         // str_replace helps to provide a break for new-line
-        $sOutput .= '"' . addcslashes(str_replace(["\r\n", "\n", "\r"], '<br />', $value[$element]), '"\\') . '"';
+        $sOutput .= '"' . addcslashes(str_replace(["\r\n", "\n", "\r"], '<br />', ($value[$element] ?? '')), '"\\') . '"';
 
         // remove extra spaces and tab character that breaks dataTable CRM-12551
         $sOutput = preg_replace("/\s+/", " ", $sOutput);
index 353ce5d1ca1b7558c8c5b763c9ea23523e635c67..cb72edc273e41a81484bfc955859dc21575d1e0f 100644 (file)
@@ -105,23 +105,23 @@ class CRM_Utils_Mail_EmailProcessor {
     }
 
     $config = CRM_Core_Config::singleton();
-    $verpSeparator = preg_quote($config->verpSeparator);
+    $verpSeparator = preg_quote($config->verpSeparator ?? '');
     $twoDigitStringMin = $verpSeparator . '(\d+)' . $verpSeparator . '(\d+)';
     $twoDigitString = $twoDigitStringMin . $verpSeparator;
     $threeDigitString = $twoDigitString . '(\d+)' . $verpSeparator;
 
     // FIXME: legacy regexen to handle CiviCRM 2.1 address patterns, with domain id and possible VERP part
-    $commonRegex = '/^' . preg_quote($dao->localpart) . '(b|bounce|c|confirm|o|optOut|r|reply|re|e|resubscribe|u|unsubscribe)' . $threeDigitString . '([0-9a-f]{16})(-.*)?@' . preg_quote($dao->domain) . '$/';
-    $subscrRegex = '/^' . preg_quote($dao->localpart) . '(s|subscribe)' . $twoDigitStringMin . '@' . preg_quote($dao->domain) . '$/';
+    $commonRegex = '/^' . preg_quote($dao->localpart ?? '') . '(b|bounce|c|confirm|o|optOut|r|reply|re|e|resubscribe|u|unsubscribe)' . $threeDigitString . '([0-9a-f]{16})(-.*)?@' . preg_quote($dao->domain ?? '') . '$/';
+    $subscrRegex = '/^' . preg_quote($dao->localpart ?? '') . '(s|subscribe)' . $twoDigitStringMin . '@' . preg_quote($dao->domain ?? '') . '$/';
 
     // a common-for-all-actions regex to handle CiviCRM 2.2 address patterns
-    $regex = '/^' . preg_quote($dao->localpart) . '(b|c|e|o|r|u)' . $twoDigitString . '([0-9a-f]{16})@' . preg_quote($dao->domain) . '$/';
+    $regex = '/^' . preg_quote($dao->localpart ?? '') . '(b|c|e|o|r|u)' . $twoDigitString . '([0-9a-f]{16})@' . preg_quote($dao->domain ?? '') . '$/';
 
     // a tighter regex for finding bounce info in soft bounces’ mail bodies
-    $rpRegex = '/Return-Path:\s*' . preg_quote($dao->localpart) . '(b)' . $twoDigitString . '([0-9a-f]{16})@' . preg_quote($dao->domain) . '/';
+    $rpRegex = '/Return-Path:\s*' . preg_quote($dao->localpart ?? '') . '(b)' . $twoDigitString . '([0-9a-f]{16})@' . preg_quote($dao->domain ?? '') . '/';
 
     // a regex for finding bound info X-Header
-    $rpXheaderRegex = '/X-CiviMail-Bounce: ' . preg_quote($dao->localpart) . '(b)' . $twoDigitString . '([0-9a-f]{16})@' . preg_quote($dao->domain) . '/i';
+    $rpXheaderRegex = '/X-CiviMail-Bounce: ' . preg_quote($dao->localpart ?? '') . '(b)' . $twoDigitString . '([0-9a-f]{16})@' . preg_quote($dao->domain ?? '') . '/i';
     // CiviMail in regex and Civimail in header !!!
 
     // retrieve the emails
@@ -145,16 +145,16 @@ class CRM_Utils_Mail_EmailProcessor {
 
         if ($usedfor == 1) {
           foreach ($mail->to as $address) {
-            if (preg_match($regex, $address->email, $matches)) {
+            if (preg_match($regex, ($address->email ?? ''), $matches)) {
               list($match, $action, $job, $queue, $hash) = $matches;
               break;
               // FIXME: the below elseifs should be dropped when we drop legacy support
             }
-            elseif (preg_match($commonRegex, $address->email, $matches)) {
+            elseif (preg_match($commonRegex, ($address->email ?? ''), $matches)) {
               list($match, $action, $_, $job, $queue, $hash) = $matches;
               break;
             }
-            elseif (preg_match($subscrRegex, $address->email, $matches)) {
+            elseif (preg_match($subscrRegex, ($address->email ?? ''), $matches)) {
               list($match, $action, $_, $job) = $matches;
               break;
             }
@@ -162,13 +162,13 @@ class CRM_Utils_Mail_EmailProcessor {
 
           // CRM-5471: if $matches is empty, it still might be a soft bounce sent
           // to another address, so scan the body for ‘Return-Path: …bounce-pattern…’
-          if (!$matches and preg_match($rpRegex, $mail->generateBody(), $matches)) {
+          if (!$matches and preg_match($rpRegex, ($mail->generateBody() ?? ''), $matches)) {
             list($match, $action, $job, $queue, $hash) = $matches;
           }
 
           // if $matches is still empty, look for the X-CiviMail-Bounce header
           // CRM-9855
-          if (!$matches and preg_match($rpXheaderRegex, $mail->generateBody(), $matches)) {
+          if (!$matches and preg_match($rpXheaderRegex, ($mail->generateBody() ?? ''), $matches)) {
             list($match, $action, $job, $queue, $hash) = $matches;
           }
           // With Mandrilla, the X-CiviMail-Bounce header is produced by generateBody
@@ -180,7 +180,7 @@ class CRM_Utils_Mail_EmailProcessor {
               if ($v_part instanceof ezcMailFile) {
                 $p_file = $v_part->__get('fileName');
                 $c_file = file_get_contents($p_file);
-                if (preg_match($rpXheaderRegex, $c_file, $matches)) {
+                if (preg_match($rpXheaderRegex, ($c_file ?? ''), $matches)) {
                   list($match, $action, $job, $queue, $hash) = $matches;
                 }
               }
@@ -188,7 +188,7 @@ class CRM_Utils_Mail_EmailProcessor {
           }
 
           // if all else fails, check Delivered-To for possible pattern
-          if (!$matches and preg_match($regex, $mail->getHeader('Delivered-To'), $matches)) {
+          if (!$matches and preg_match($regex, ($mail->getHeader('Delivered-To') ?? ''), $matches)) {
             list($match, $action, $job, $queue, $hash) = $matches;
           }
         }
index c34b9e1be3ac51c1ece992a2b325134eb2d8be1c..0848fdeac3de951f7df7dcacb98155050a5e2f19 100644 (file)
@@ -569,7 +569,7 @@ class CRM_Utils_REST {
    */
   public function loadCMSBootstrap() {
     $requestParams = CRM_Utils_Request::exportValues();
-    $q = $requestParams['q'] ?? NULL;
+    $q = $requestParams['q'] ?? '';
     $args = explode('/', $q);
 
     // Proceed with bootstrap for "?entity=X&action=Y"
index 746d578a33f639e533ec6b0988295aa6200f29f2..1a1a6e9a67f0967b8c388e600c9cef0684705786 100644 (file)
@@ -549,7 +549,7 @@ class CRM_Utils_Rule {
    */
   public static function cleanMoney($value) {
     // first remove all white space
-    $value = str_replace([' ', "\t", "\n"], '', $value);
+    $value = str_replace([' ', "\t", "\n"], '', ($value ?? ''));
 
     $config = CRM_Core_Config::singleton();
 
index f1e6cc6d028e137aa3acb70073a310a47125fe0e..43148fb6a228ef8dd39a040e50ac456ee50cb6bb 100644 (file)
@@ -1030,7 +1030,7 @@ class CRM_Utils_System {
    * @return string[]
    */
   public static function explode($separator, $string, $limit) {
-    $result = explode($separator, $string, $limit);
+    $result = explode($separator, ($string ?? ''), $limit);
     for ($i = count($result); $i < $limit; $i++) {
       $result[$i] = NULL;
     }
index 9eb9702f016abcb03a221cfc8d02be3334d303bd..56e465cbac195f47875d24751ed0d82f4384789c 100644 (file)
@@ -421,8 +421,8 @@ class CRM_Utils_Type {
       case 'Date':
       case 'Timestamp':
         // a null timestamp is valid
-        if (strlen(trim($data)) == 0) {
-          return trim($data);
+        if (strlen(trim($data ?? '')) == 0) {
+          return trim($data ?? '');
         }
 
         if ((preg_match('/^\d{14}$/', $data) ||
index 133a8bde38a2a8ec336dad75efc7dc7d01a12d01..bfcf7877eb3ae97341d5ac5c8479f86076761273 100644 (file)
@@ -64,8 +64,8 @@ class CRM_Utils_Verp {
     $sdomain = $match[2];
 
     preg_match('/(.+)\@([^\@]+)$/', $recipient, $match);
-    $rlocal = $match[1] ?? NULL;
-    $rdomain = $match[2] ?? NULL;
+    $rlocal = $match[1] ?? '';
+    $rdomain = $match[2] ?? '';
 
     foreach (self::$encodeMap as $char => $code) {
       $rlocal = preg_replace('/' . preg_quote($char) . '/i', "+$code", $rlocal);
index 2a48d3165d105a7866411396e5503ab32304f1b7..2b1b845bb18c7d17f62c18e5be1f99d840074144 100644 (file)
@@ -175,7 +175,7 @@ class ActionObjectProvider implements EventSubscriberInterface, ProviderInterfac
       array_column(\CRM_Extension_System::singleton()->getMapper()->getActiveModuleFiles(), 'filePath')
     );
     foreach ($locations as $location) {
-      $dir = \CRM_Utils_File::addTrailingSlash(dirname($location)) . 'Civi/Api4';
+      $dir = \CRM_Utils_File::addTrailingSlash(dirname($location ?? '')) . 'Civi/Api4';
       if (is_dir($dir)) {
         foreach (glob("$dir/*.php") as $file) {
           $className = 'Civi\Api4\\' . basename($file, '.php');
index 079bb8df6b6f567c94f8e380c58ef32f3bf6f520..a16239c4a793f17546f5d1bfd87f3a506238b663 100644 (file)
@@ -143,7 +143,7 @@ trait DbTestTrait {
     $expectedValue, $message
   ) {
     $value = \CRM_Core_DAO::getFieldValue($daoName, $searchValue, $returnColumn, $searchColumn, TRUE);
-    $this->assertEquals(trim($expectedValue), trim($value), $message);
+    $this->assertEquals(trim($expectedValue), trim($value ?? ''), $message);
   }
 
   /**