AngularManager - Ensure 'basePages' is an array
authorcolemanw <coleman@civicrm.org>
Mon, 5 Feb 2024 19:20:42 +0000 (14:20 -0500)
committercolemanw <coleman@civicrm.org>
Tue, 6 Feb 2024 11:42:02 +0000 (06:42 -0500)
This doesn't change the behavior (historical default mainained, with a comment added about why),
just ensures the value is always set to prevent errors when it gets passed to in_array().

Civi/Angular/Manager.php

index ce88ed4707b2bfc0149b2bf43ba5d21c2c7d0db5..37e115c7b781ba85eefed710da0072003269022a 100644 (file)
@@ -94,8 +94,9 @@ class Manager {
       \CRM_Utils_Hook::angularModules($angularModules);
 
       foreach ($angularModules as $module => $info) {
-        // Merge in defaults
-        $angularModules[$module] += ['basePages' => ['civicrm/a']];
+        // This property must be an array. If null, set to the historical default of ['civicrm/a']
+        // (historical default preserved for backward-compat reasons, but a better default would be the more common value of []).
+        $angularModules[$module]['basePages'] ??= ['civicrm/a'];
         if (!empty($info['settings'])) {
           \CRM_Core_Error::deprecatedWarning(sprintf('The Angular file "%s" from extension "%s" must be updated to use "settingsFactory" instead of "settings". See https://github.com/civicrm/civicrm-core/pull/19052', $info['module'], $info['ext']));
         }