[REF][PHP8.1] Batch 4 of fixing issues found in unit tests where passing NULL values...
authorSeamus Lee <seamuslee001@gmail.com>
Tue, 19 Jul 2022 01:46:56 +0000 (11:46 +1000)
committerSeamus Lee <seamuslee001@gmail.com>
Wed, 20 Jul 2022 21:38:06 +0000 (07:38 +1000)
Apply fixes as per Demeritcowboy

20 files changed:
CRM/Contact/BAO/Contact.php
CRM/Contact/Form/Edit/Address.php
CRM/Core/BAO/Address.php
CRM/Core/BAO/CustomField.php
CRM/Core/DAO/AllCoreTables.php
CRM/Core/Form/Task.php
CRM/Core/Smarty/plugins/modifier.crmNumberFormat.php
CRM/Financial/BAO/Payment.php
CRM/Financial/BAO/PaymentProcessor.php
CRM/Import/Parser.php
CRM/Logging/ReportDetail.php
CRM/Report/Form.php
CRM/Utils/Date.php
CRM/Utils/File.php
CRM/Utils/Mail.php
CRM/Utils/System.php
api/v3/CustomValue.php
api/v3/Mailing.php
api/v3/Profile.php
api/v3/utils.php

index afb00ab123bc339fbe918975f14b82b6cfcc0e9e..95243b29bbc3c3cb944af1afe4dc61860c9b8320 100644 (file)
@@ -2555,7 +2555,7 @@ LEFT JOIN civicrm_email    ON ( civicrm_contact.id = civicrm_email.contact_id )
       // communication Prefferance
       $preffComm = $comm = [];
       $comm = explode(CRM_Core_DAO::VALUE_SEPARATOR,
-        $contact->preferred_communication_method
+        ($contact->preferred_communication_method ?? '')
       );
       foreach ($comm as $value) {
         $preffComm[$value] = 1;
index 6931364f86946e164eb46baf6b40134d3d52f9e1..d51ae147e0ef53a258ca96d1e05a70d2a7f2db2c 100644 (file)
@@ -355,7 +355,7 @@ class CRM_Contact_Form_Edit_Address {
    */
   public static function storeRequiredCustomDataInfo(&$form, $groupTree) {
     if (in_array(CRM_Utils_System::getClassName($form), ['CRM_Contact_Form_Contact', 'CRM_Contact_Form_Inline_Address'])) {
-      $requireOmission = NULL;
+      $requireOmission = '';
       foreach ($groupTree as $csId => $csVal) {
         // only process Address entity fields
         if ($csVal['extends'] !== 'Address') {
index 29f94c2a2ccb4d66e2a165f52fe10faf905958ee..3159075396bf9ad74a0d9330ce73e988f9c2d4f0 100644 (file)
@@ -774,7 +774,7 @@ ORDER BY civicrm_address.is_primary DESC, civicrm_address.location_type_id DESC,
     // the DB to fatal
     $fields = CRM_Core_BAO_Address::fields();
     foreach ($fields as $fieldname => $field) {
-      if (!empty($field['maxlength']) && strlen(CRM_Utils_Array::value($fieldname, $parseFields)) > $field['maxlength']) {
+      if (!empty($field['maxlength']) && strlen(($parseFields[$fieldname] ?? '')) > $field['maxlength']) {
         return $emptyParseFields;
       }
     }
index 2c3cd30386bfafc7ce97c9a2c04a58f25b3a962b..c3f8f4a69ba20ba9201bc375a871ee0546136c19 100644 (file)
@@ -1181,7 +1181,7 @@ class CRM_Core_BAO_CustomField extends CRM_Core_DAO_CustomField {
           // In such cases we could just get intval($value) and fetch matching
           // option again, but this would not work if key is float like 5.6.
           // So we need to truncate trailing zeros to make it work as expected.
-          if ($display === '' && strpos($value, '.') !== FALSE) {
+          if ($display === '' && strpos(($value ?? ''), '.') !== FALSE) {
             // Use round() to truncate trailing zeros, e.g:
             // 10.00 -> 10, 10.60 -> 10.6, 10.69 -> 10.69.
             $value = (string) round($value, 5);
index 19009e09fd173a52ad7c8685ebdabb8d053bc4e9..bb1e808d6a8c3dd267329d3d4fe0945f4232246b 100644 (file)
@@ -191,7 +191,7 @@ class CRM_Core_DAO_AllCoreTables {
    * @return string
    */
   public static function getCanonicalClassName($baoName) {
-    return str_replace('_BAO_', '_DAO_', $baoName);
+    return str_replace('_BAO_', '_DAO_', ($baoName ?? ''));
   }
 
   /**
index 1526eda1fa5b317edd68b607affb1237ef9b9b9a..b4003bdd3e711e0434a12014aedaa55ce95b2a2d 100644 (file)
@@ -103,7 +103,7 @@ abstract class CRM_Core_Form_Task extends CRM_Core_Form {
     }
 
     $session = CRM_Core_Session::singleton();
-    $searchFormName = strtolower($this->get('searchFormName'));
+    $searchFormName = strtolower($this->get('searchFormName') ?? '');
     if ($searchFormName === 'search') {
       $session->replaceUserContext(CRM_Utils_System::url('civicrm/' . $pathPart . '/search', $urlParams));
     }
index 1a4009e916ca0453e7453234593041c0d8722d13..3ddf4eea9b9a1bade738b5798cd68bf61e27be70 100644 (file)
@@ -34,7 +34,7 @@
  *   For alternate decimal point and thousands separator, delimit values with single quotes in the template.
  *   EXAMPLE:   {$number|crmNumberFormat:2:',':' '} for French notation - 1234.56 becomes 1 234,56
  */
-function smarty_modifier_crmNumberFormat($number, $decimals = NULL, $dec_point = NULL, $thousands_sep = NULL) {
+function smarty_modifier_crmNumberFormat($number, $decimals = 0, $dec_point = NULL, $thousands_sep = NULL) {
   if (is_numeric($number)) {
     // Both dec_point AND thousands_sep are required if one is not specified
     // then use the config defaults
index cec2c4425d05befe1135a55509daddb95870dedf..874fc38a283f9d1d0933f2aee319437318825e9f 100644 (file)
@@ -191,7 +191,7 @@ class CRM_Financial_BAO_Payment {
           'is_email_receipt' => $params['is_send_contribution_notification'],
           'trxn_date' => $params['trxn_date'],
           'payment_instrument_id' => $paymentTrxnParams['payment_instrument_id'],
-          'payment_processor_id' => $paymentTrxnParams['payment_processor_id'] ?? NULL,
+          'payment_processor_id' => $paymentTrxnParams['payment_processor_id'] ?? '',
         ]);
         // Get the trxn
         $trxnId = CRM_Core_BAO_FinancialTrxn::getFinancialTrxnId($contribution['id'], 'DESC');
index d7e0ac6f6edd65645c7706dc1f06956f67daf04e..53fad0395968d197a7b9c1364d9a6912f83bdbf8 100644 (file)
@@ -100,7 +100,7 @@ class CRM_Financial_BAO_PaymentProcessor extends CRM_Financial_DAO_PaymentProces
       $processor = new CRM_Financial_DAO_PaymentProcessor();
       $processor->id = $paymentProcessorID;
       $processor->find(TRUE);
-      $cards = json_decode($processor->accepted_credit_cards, TRUE);
+      $cards = json_decode(($processor->accepted_credit_cards ?? ''), TRUE);
       return $cards;
     }
     return [];
index 002aa473b0d63cf7bccbe0840cf213fd11a37d91..f50cff2fd12eb93c9a96d28bd6e6367a92cfb2b4 100644 (file)
@@ -1622,7 +1622,7 @@ abstract class CRM_Import_Parser implements UserJobInterface {
    */
   protected function getFieldEntity(string $fieldName) {
     if ($fieldName === 'do_not_import') {
-      return NULL;
+      return '';
     }
     if (in_array($fieldName, ['email_greeting_id', 'postal_greeting_id', 'addressee_id'], TRUE)) {
       return 'Contact';
index e026f3d4adb03b611967cafd4626487983ff1a47..f69d6f5cd1c8b59f19d3dffba57bfa00761569e1 100644 (file)
@@ -199,10 +199,10 @@ class CRM_Logging_ReportDetail extends CRM_Report_Form {
         }
 
         // special-case for multiple values. Also works for CRM-7251: preferred_communication_method
-        if ((substr($from, 0, 1) == CRM_Core_DAO::VALUE_SEPARATOR &&
-            substr($from, -1, 1) == CRM_Core_DAO::VALUE_SEPARATOR) ||
-          (substr($to, 0, 1) == CRM_Core_DAO::VALUE_SEPARATOR &&
-            substr($to, -1, 1) == CRM_Core_DAO::VALUE_SEPARATOR)
+        if ((substr(($from ?? ''), 0, 1) == CRM_Core_DAO::VALUE_SEPARATOR &&
+            substr(($from ?? ''), -1, 1) == CRM_Core_DAO::VALUE_SEPARATOR) ||
+          (substr(($to ?? ''), 0, 1) == CRM_Core_DAO::VALUE_SEPARATOR &&
+            substr(($to ?? ''), -1, 1) == CRM_Core_DAO::VALUE_SEPARATOR)
         ) {
           $froms = $tos = [];
           foreach (explode(CRM_Core_DAO::VALUE_SEPARATOR, trim($from, CRM_Core_DAO::VALUE_SEPARATOR)) as $val) {
index 49a4d1ace2de5742c21e9856347a7f9db48acea9..1649a77ff61b12b6e62fc3cf7221409b5c54502a 100644 (file)
@@ -1529,10 +1529,10 @@ class CRM_Report_Form extends CRM_Core_Form {
     $this->sqlArray[] = $sql;
     foreach ($this->sqlArray as $sql) {
       foreach (['LEFT JOIN'] as $term) {
-        $sql = str_replace($term, '<br>  ' . $term, $sql);
+        $sql = str_replace($term, '<br>  ' . $term, ($sql ?? ''));
       }
       foreach (['FROM', 'WHERE', 'GROUP BY', 'ORDER BY', 'LIMIT', ';'] as $term) {
-        $sql = str_replace($term, '<br><br>' . $term, $sql);
+        $sql = str_replace($term, '<br><br>' . $term, ($sql ?? ''));
       }
       $this->sqlFormattedArray[] = $sql;
       $this->assign('sql', implode(';<br><br><br><br>', $this->sqlFormattedArray));
@@ -3443,7 +3443,7 @@ WHERE cg.extends IN ('" . implode("','", $this->_customGroupExtends) . "') AND
             if (!empty($this->_params["{$fieldName}_relative"])) {
               [$from, $to] = CRM_Utils_Date::getFromTo($this->_params["{$fieldName}_relative"], NULL, NULL);
             }
-            if (strlen($to) === 10) {
+            if (strlen($to ?? '') === 10) {
               // If we just have the date we assume the end of that day.
               $to .= ' 23:59:59';
             }
@@ -3949,7 +3949,7 @@ WHERE cg.extends IN ('" . implode("','", $this->_customGroupExtends) . "') AND
   public function buildPermissionClause() {
     $ret = [];
     foreach ($this->selectedTables() as $tableName) {
-      $baoName = str_replace('_DAO_', '_BAO_', CRM_Core_DAO_AllCoreTables::getClassForTable($tableName));
+      $baoName = str_replace('_DAO_', '_BAO_', (CRM_Core_DAO_AllCoreTables::getClassForTable($tableName) ?? ''));
       if ($baoName && class_exists($baoName) && !empty($this->_columns[$tableName]['alias'])) {
         $tableAlias = $this->_columns[$tableName]['alias'];
         $clauses = array_filter($baoName::getSelectWhereClause($tableAlias));
index 48fb0c7c48e748bd9f5582483b501e9bc4e26846..960f03d9c1c33fe35dce651f9687053ca215517e 100644 (file)
@@ -346,7 +346,7 @@ class CRM_Utils_Date {
           $day = (int) substr(($dateString ?? ''), 6, 2);
         }
 
-        if (strlen($dateString) > 10) {
+        if (strlen(($dateString ?? '')) > 10) {
           $format = $config->dateformatDatetime;
         }
         elseif ($day > 0) {
@@ -481,12 +481,12 @@ class CRM_Utils_Date {
    *   date/datetime in ISO format
    */
   public static function mysqlToIso($mysql) {
-    $year = substr($mysql, 0, 4);
-    $month = substr($mysql, 4, 2);
-    $day = substr($mysql, 6, 2);
-    $hour = substr($mysql, 8, 2);
-    $minute = substr($mysql, 10, 2);
-    $second = substr($mysql, 12, 2);
+    $year = substr(($mysql ?? ''), 0, 4);
+    $month = substr(($mysql ?? ''), 4, 2);
+    $day = substr(($mysql ?? ''), 6, 2);
+    $hour = substr(($mysql ?? ''), 8, 2);
+    $minute = substr(($mysql ?? ''), 10, 2);
+    $second = substr(($mysql ?? ''), 12, 2);
 
     $iso = '';
     if ($year) {
index 0e62e265147c0e004f3f0cac501ed4cb16e02c18..675709e9e63d05a7e293a923be7ae23e91da373d 100644 (file)
@@ -446,9 +446,9 @@ class CRM_Utils_File {
     $uniqID = md5(uniqid(rand(), TRUE));
     $info = pathinfo($name);
     $basename = substr($info['basename'],
-      0, -(strlen(CRM_Utils_Array::value('extension', $info)) + (CRM_Utils_Array::value('extension', $info) == '' ? 0 : 1))
+      0, -(strlen(CRM_Utils_Array::value('extension', $info, '')) + (CRM_Utils_Array::value('extension', $info, '') == '' ? 0 : 1))
     );
-    if (!self::isExtensionSafe(CRM_Utils_Array::value('extension', $info))) {
+    if (!self::isExtensionSafe(CRM_Utils_Array::value('extension', $info, ''))) {
       // munge extension so it cannot have an embbeded dot in it
       // The maximum length of a filename for most filesystems is 255 chars.
       // We'll truncate at 240 to give some room for the extension.
@@ -1058,7 +1058,7 @@ HTACCESS;
     }
     $iconClasses = Civi::$statics[__CLASS__]['mimeIcons'];
     foreach ($iconClasses as $text => $icon) {
-      if (strpos($mimeType, $text) === 0) {
+      if (strpos(($mimeType ?? ''), $text) === 0) {
         return $icon;
       }
     }
@@ -1128,6 +1128,9 @@ HTACCESS;
    *   In php8 the return value from is_dir() is always bool but in php7 it can be null.
    */
   public static function isDir(?string $dir) {
+    if ($dir === NULL) {
+      return FALSE;
+    }
     set_error_handler(function($errno, $errstr) {
       // If this is open_basedir-related, convert it to an exception so we
       // can catch it.
index beb0ad3263b8116ebcb3515a4a3b34097a778358..b649373d65f81eba2b67d7befef05754e3609ef7 100644 (file)
@@ -451,7 +451,7 @@ class CRM_Utils_Mail {
   public static function formatRFC822Email($name, $email, $useQuote = FALSE) {
     $result = NULL;
 
-    $name = trim($name);
+    $name = trim($name ?? '');
 
     // strip out double quotes if present at the beginning AND end
     if (substr($name, 0, 1) == '"' &&
index e0bcfc01179a43af663ad2322e4d32fad565d5fb..f1e6cc6d028e137aa3acb70073a310a47125fe0e 100644 (file)
@@ -213,7 +213,7 @@ class CRM_Utils_System {
     if (is_array($query)) {
       $buf = '';
       foreach ($query as $key => $value) {
-        $buf .= ($buf ? '&' : '') . urlencode($key) . '=' . urlencode($value);
+        $buf .= ($buf ? '&' : '') . urlencode($key ?? '') . '=' . urlencode($value ?? '');
       }
       $query = $buf;
     }
index 72ef10ab59d82b4d209a10e14e08654d369218ac..9efe097af78746221e01707e59a172d696504025 100644 (file)
@@ -172,7 +172,7 @@ function civicrm_api3_custom_value_get($params) {
     // Convert multi-value strings to arrays
     $sp = CRM_Core_DAO::VALUE_SEPARATOR;
     foreach ($result as $id => $value) {
-      if (strpos($value, $sp) !== FALSE) {
+      if (strpos(($value ?? ''), $sp) !== FALSE) {
         $value = explode($sp, trim($value, $sp));
       }
 
index c7ec5be828233440b72d6018b1387e54b5456c9b..9aaaf67df80ec0175762f5cf59d5b97b105da5e1 100644 (file)
@@ -618,7 +618,7 @@ function civicrm_api3_mailing_send_test($params) {
   $job = civicrm_api3('MailingJob', 'create', $testEmailParams);
   CRM_Mailing_BAO_Mailing::getRecipients($testEmailParams['mailing_id']);
   $testEmailParams['job_id'] = $job['id'];
-  $testEmailParams['emails'] = array_key_exists('test_email', $testEmailParams) ? explode(',', strtolower($testEmailParams['test_email'])) : NULL;
+  $testEmailParams['emails'] = array_key_exists('test_email', $testEmailParams) ? explode(',', strtolower($testEmailParams['test_email'] ?? '')) : NULL;
   if (!empty($params['test_email'])) {
     $query = CRM_Utils_SQL_Select::from('civicrm_email e')
       ->select(['e.id', 'e.contact_id', 'e.email'])
index a20bd48e1e813b387600d0e3ecc23c692123def9..6afa73b30aa12d59e5ac7fbeba0d7c979cbe94f8 100644 (file)
@@ -193,7 +193,7 @@ function civicrm_api3_profile_submit($params) {
     $contactEntities = ['contact', 'individual', 'organization', 'household'];
     $locationEntities = ['email', 'address', 'phone', 'website', 'im'];
 
-    $entity = strtolower(CRM_Utils_Array::value('entity', $field));
+    $entity = strtolower(CRM_Utils_Array::value('entity', $field, ''));
     if ($entity && !in_array($entity, array_merge($contactEntities, $locationEntities))) {
       switch ($entity) {
         case 'note':
index c2e25c92fda6c9af355e67af650123fef1f5d8fb..d454535bfe1d54512b29fc7703da29b50de0c1e1 100644 (file)
@@ -1777,7 +1777,7 @@ function _civicrm_api3_validate_constraint($fieldValue, $fieldName, $fieldInfo,
  */
 function _civicrm_api3_validate_unique_key(&$params, &$fieldName) {
   [$fieldValue, $op] = _civicrm_api3_field_value_check($params, $fieldName);
-  if (strpos($op, 'NULL') !== FALSE || strpos($op, 'EMPTY') !== FALSE) {
+  if (strpos(($op ?? ''), 'NULL') !== FALSE || strpos(($op ?? ''), 'EMPTY') !== FALSE) {
     return;
   }
   $existing = civicrm_api($params['entity'], 'get', [
@@ -2217,7 +2217,7 @@ function _civicrm_api3_resolve_contactID($contactIdExpr) {
  */
 function _civicrm_api3_validate_html(&$params, &$fieldName, $fieldInfo) {
   [$fieldValue, $op] = _civicrm_api3_field_value_check($params, $fieldName);
-  if (strpos($op, 'NULL') || strpos($op, 'EMPTY')) {
+  if (strpos(($op ?? ''), 'NULL') || strpos(($op ?? ''), 'EMPTY')) {
     return;
   }
 }