| 1 | # CiviCRM 5.39.0 |
| 2 | |
| 3 | Released July 7, 2021 |
| 4 | |
| 5 | - **[Synopsis](#synopsis)** |
| 6 | - **[Features](#features)** |
| 7 | - **[Bugs resolved](#bugs)** |
| 8 | - **[Miscellany](#misc)** |
| 9 | - **[Credits](#credits)** |
| 10 | - **[Feedback](#feedback)** |
| 11 | |
| 12 | ## <a name="synopsis"></a>Synopsis |
| 13 | |
| 14 | | *Does this version...?* | | |
| 15 | |:--------------------------------------------------------------- |:-------:| |
| 16 | | Fix security vulnerabilities? | no | |
| 17 | | **Change the database schema?** | **yes** | |
| 18 | | **Alter the API?** | **yes** | |
| 19 | | Require attention to configuration options? | no | |
| 20 | | **Fix problems installing or upgrading to a previous version?** | **yes** | |
| 21 | | **Introduce features?** | **yes** | |
| 22 | | **Fix bugs?** | **yes** | |
| 23 | |
| 24 | ## <a name="features"></a>Features |
| 25 | |
| 26 | ### Core CiviCRM |
| 27 | |
| 28 | - **Separate the default language for contacts from the site language (Work Towards |
| 29 | [dev/core#2584](https://lab.civicrm.org/dev/core/-/issues/2584): |
| 30 | [20214](https://github.com/civicrm/civicrm-core/pull/20214))** |
| 31 | |
| 32 | Improves user experience for multilingual sites by separating the |
| 33 | CiviCRM contacts default language setting from the site default language. |
| 34 | |
| 35 | - **Canonize API for storing translated data (Work Towards |
| 36 | [dev/translation#67](https://lab.civicrm.org/dev/translation/-/issues/67): |
| 37 | [20478](https://github.com/civicrm/civicrm-core/pull/20478))** |
| 38 | |
| 39 | Defines a "Translation" table (`civicrm_translation`), to represent a single |
| 40 | translated string (e.g. a translated message-title or a translated |
| 41 | event-description). |
| 42 | |
| 43 | - **Allow for the default number of search results to be configurable |
| 44 | ([dev/core#2187](https://lab.civicrm.org/dev/core/-/issues/2187): |
| 45 | [20336](https://github.com/civicrm/civicrm-core/pull/20336 and |
| 46 | [18969](https://github.com/civicrm/civicrm-core/pull/18969))** |
| 47 | |
| 48 | Creates a setting to define the number of search results to be returned. |
| 49 | |
| 50 | - **Give the custom CSS file a 'name' to make it easier to manipulate in |
| 51 | hook_civicrm_alterBundle() |
| 52 | ([20278](https://github.com/civicrm/civicrm-core/pull/20278))** |
| 53 | |
| 54 | Gives the resource bundles custom CSS file a useful 'name' to make it easier |
| 55 | to manipulate in the alterBundle hook. |
| 56 | |
| 57 | - **OAuth: initial support for per-contact OAuth tokens |
| 58 | ([20189](https://github.com/civicrm/civicrm-core/pull/20189))** |
| 59 | |
| 60 | Adds a system for managing OAuthContactTokens -- tokens linked to a |
| 61 | contact_id. |
| 62 | |
| 63 | - **BAOs, Tests, etal - Support `HookInterface` and `EventSubscriberInterface` |
| 64 | for auto-registration |
| 65 | ([20427](https://github.com/civicrm/civicrm-core/pull/20427))** |
| 66 | |
| 67 | Expands the functionality for declaring event-listeners in different classes, |
| 68 | making it easier to participate in Symfony events. |
| 69 | |
| 70 | - **The version numbers for core-extensions should match core-proper. |
| 71 | ([dev/release#17](https://lab.civicrm.org/dev/release/-/issues/17): |
| 72 | [20303](https://github.com/civicrm/civicrm-core/pull/20303) and |
| 73 | [20302](https://github.com/civicrm/civicrm-core/pull/20302))** |
| 74 | |
| 75 | Ensures that CiviCRM core extension version numbers are updated to match the |
| 76 | core release they are included in and denotes development stage of extensions |
| 77 | using icons. |
| 78 | |
| 79 | - **Enable/Disable Extension Receives API Error (Work Towards |
| 80 | [dev/core#2646](https://lab.civicrm.org/dev/core/-/issues/2646): |
| 81 | [20564](https://github.com/civicrm/civicrm-core/pull/20564))** |
| 82 | |
| 83 | Improves the error messages when disabling or enabling an extension causes an |
| 84 | API Error. |
| 85 | |
| 86 | - **Regen.sh/setup.sh would be nice if the output for civicrm_generated.mysql |
| 87 | had long lines broken up |
| 88 | ([dev/core#1549](https://lab.civicrm.org/dev/core/-/issues/1549): |
| 89 | [20513](https://github.com/civicrm/civicrm-core/pull/20513))** |
| 90 | |
| 91 | Improves display of civicrm_generated.mysql output so its easier to read. |
| 92 | |
| 93 | - **Use new crm-angular-js instead of ng-app to bootstrap AngularJS |
| 94 | ([20419](https://github.com/civicrm/civicrm-core/pull/20419))** |
| 95 | |
| 96 | Updates the method used to bootstrap Angular for internal consistency and so |
| 97 | that multiple angular apps can be used on the same page. |
| 98 | |
| 99 | - **APIv4 - Save custom fields in bulk |
| 100 | ([20269](https://github.com/civicrm/civicrm-core/pull/20269))** |
| 101 | |
| 102 | Makes it so custom fields can be saved in bulk thru APIv4. |
| 103 | |
| 104 | - **Add APIv4 Batch.create spec |
| 105 | ([20501](https://github.com/civicrm/civicrm-core/pull/20501))** |
| 106 | |
| 107 | Adds a spec for APIv4 Batch.create. |
| 108 | |
| 109 | - **APIv4 - Make the @searchable flag explicit for OptionList type entities. |
| 110 | ([20560](https://github.com/civicrm/civicrm-core/pull/20560))** |
| 111 | |
| 112 | Improves code for categorizing entities for SearchKit, making searchability |
| 113 | easier to grok and less magical/mysterious. |
| 114 | |
| 115 | - **Apiv4 entity parity (Work Towards |
| 116 | [dev/core#2486](https://lab.civicrm.org/dev/core/-/issues/2486): |
| 117 | [20559](https://github.com/civicrm/civicrm-core/pull/20559), |
| 118 | [20499](https://github.com/civicrm/civicrm-core/pull/20499), |
| 119 | [20464](https://github.com/civicrm/civicrm-core/pull/20464), |
| 120 | [20609](https://github.com/civicrm/civicrm-core/pull/20609), |
| 121 | [20433](https://github.com/civicrm/civicrm-core/pull/20433) and |
| 122 | [20474](https://github.com/civicrm/civicrm-core/pull/20474))** |
| 123 | |
| 124 | Works towards APIv4 parity with APIv3 by adding the following entities to |
| 125 | APIv4: WordReplacement, FinancialItem and ACLEntityRole. |
| 126 | |
| 127 | - **Introduce civi.api4.authorizeRecord and civi.api4.validate |
| 128 | ([20533](https://github.com/civicrm/civicrm-core/pull/20533))** |
| 129 | |
| 130 | Refactors APIv4 code so that events use more consistent style (ie |
| 131 | civi.api4.{$TASK} with alias civi.api4.{$TASK}::{$ENTITY}). |
| 132 | |
| 133 | - **APIv4 Entity.get refactor to be more efficient |
| 134 | ([20470](https://github.com/civicrm/civicrm-core/pull/20470))** |
| 135 | |
| 136 | Makes APIv4 Entity.get more efficient. |
| 137 | |
| 138 | - **APIv4 - Return id_field as part of Entity.get |
| 139 | ([20457](https://github.com/civicrm/civicrm-core/pull/20457))** |
| 140 | |
| 141 | Improves APIv4 metadata so it returns the name of the unique identifier field |
| 142 | for each entity (usually but not always named "id"). |
| 143 | |
| 144 | - **Add DedupeRule, DedupeRuleGroup and DedupeException API4 entity |
| 145 | ([20466](https://github.com/civicrm/civicrm-core/pull/20466))** |
| 146 | |
| 147 | Adds the following entities to APIv4: DedupeRule, DedupeRuleGroup and |
| 148 | DedupeException. |
| 149 | |
| 150 | - **Use PHPUnit8 in main test suites |
| 151 | ([20370](https://github.com/civicrm/civicrm-core/pull/20370))** |
| 152 | |
| 153 | Makes phpunit8 the default test runner for PHP versions greater than 7.2 for |
| 154 | the core test suites. |
| 155 | |
| 156 | - **Link styling with default greenwich theme is not linklike on search kit |
| 157 | screen ([dev/core#2403](https://lab.civicrm.org/dev/core/-/issues/2403): |
| 158 | [20341](https://github.com/civicrm/civicrm-core/pull/20341))** |
| 159 | |
| 160 | Improves the SearchKit user interface by making links blue so that they are |
| 161 | easier to find. |
| 162 | |
| 163 | - **Afform - Improve Gui, prefill & submit APIs |
| 164 | ([20383](https://github.com/civicrm/civicrm-core/pull/20383))** |
| 165 | |
| 166 | Standardizes prefill & submit APIs to use the same logic for validating |
| 167 | contacts. Displays correct form URL in the Afform GUI depending on is_frontend |
| 168 | setting. Shows warning about url arguments to prevent unintentional |
| 169 | permissions escalation. |
| 170 | |
| 171 | - **Afform Gui - Add support for entityRef fields |
| 172 | ([20216](https://github.com/civicrm/civicrm-core/pull/20216))** |
| 173 | |
| 174 | Adds a widget to Afform for EntityRef to autocomplete contacts & other |
| 175 | entities, allows the autocomplete field to be changed to Number (for entering |
| 176 | ID) or Select (for choosing another entity on a form). |
| 177 | |
| 178 | - **Afform Entity Reference Submit |
| 179 | ([20305](https://github.com/civicrm/civicrm-core/pull/20305))** |
| 180 | |
| 181 | Improves Afform Submit handling to handle entity reference fields that |
| 182 | reference other form elements. |
| 183 | |
| 184 | - **SearchKit - allow searches based on relationships |
| 185 | ([20558](https://github.com/civicrm/civicrm-core/pull/20558))** |
| 186 | |
| 187 | Allows SearchKit searches based on relationships. |
| 188 | |
| 189 | - **SearchKit - Add API filter for contacts in groups and smart groups |
| 190 | ([20507](https://github.com/civicrm/civicrm-core/pull/20507))** |
| 191 | |
| 192 | Adds a filter-style field to search for contacts in (or not in) one or more |
| 193 | groups. |
| 194 | |
| 195 | - **SearchKit - Update `hook_civicrm_searchKitTasks` signature |
| 196 | ([20467](https://github.com/civicrm/civicrm-core/pull/20467))** |
| 197 | |
| 198 | Updates the hook_civicrm_searchKitTasks signature to include checkPermissions |
| 199 | and userId. |
| 200 | |
| 201 | - **SearchKit - Add static groups and organize main entity selector |
| 202 | ([20434](https://github.com/civicrm/civicrm-core/pull/20434))** |
| 203 | |
| 204 | Adds static (non-smart) groups to SearchKit, and organizes main entity |
| 205 | selector to be less cluttered, with primary entities up top and the rest |
| 206 | within a collapsible optgroup. |
| 207 | |
| 208 | - **SearchKit and Afform UI improvements |
| 209 | ([20348](https://github.com/civicrm/civicrm-core/pull/20348))** |
| 210 | |
| 211 | Cleans up the admin UI for SearchKit and Afform, adds click-to-sort table |
| 212 | headers and fixes a bug where SavedSearch modified_date were not being saved. |
| 213 | |
| 214 | - **SearchKit - Rename crmSearchActions module to crmSearchTasks & add hook |
| 215 | ([20307](https://github.com/civicrm/civicrm-core/pull/20307))** |
| 216 | |
| 217 | Adds hook_civicrm_searchKitTasks() to make it easy for other extensions to add |
| 218 | tasks specific to SearchKit. Also renames the module for consistency. |
| 219 | |
| 220 | - **[php8-compat] Upgrade PHPWord Package to support php8 |
| 221 | ([20449](https://github.com/civicrm/civicrm-core/pull/20449))** |
| 222 | |
| 223 | Work towards making CiviCRM php8 compatible, specifically by upgrading PHPWord |
| 224 | Package. |
| 225 | |
| 226 | - **[php8-compat] Upgrade TCPDF version to support php8 |
| 227 | ([20540](https://github.com/civicrm/civicrm-core/pull/20540))** |
| 228 | |
| 229 | Work Towards making CiviCRM php8 compatible specifically by upgrading TCPDF. |
| 230 | |
| 231 | - **Consider joining the GitHub Sponsors program |
| 232 | ([community/sustainability#20](https://lab.civicrm.org/community/sustainability/-/issues/20): |
| 233 | [248](https://github.com/civicrm/civicrm-wordpress/pull/248) and |
| 234 | [62](https://github.com/civicrm/civicrm-joomla/pull/62))** |
| 235 | |
| 236 | Adds a sponsor link as apart of the GitHub Sponsors program. |
| 237 | |
| 238 | - **Change the help text for Message Templates and Scheduled Reminders to |
| 239 | include link to CiviCRM Token Documentation page |
| 240 | ([20259](https://github.com/civicrm/civicrm-core/pull/20259))** |
| 241 | |
| 242 | Improves user experience by linking to CiviCRM Token documentation from the |
| 243 | Message Templates and Scheduled Reminders forms. |
| 244 | |
| 245 | - **authx - Accept API keys by default |
| 246 | ([20081](https://github.com/civicrm/civicrm-core/pull/20081))** |
| 247 | |
| 248 | Relaxes the default settings so that it is easier to use authx |
| 249 | as a replacement for extern/rest.php (which uses the api_key for |
| 250 | authentication). |
| 251 | |
| 252 | ### CiviCase |
| 253 | |
| 254 | - **Add defaults for APIv4 Case create |
| 255 | ([20306](https://github.com/civicrm/civicrm-core/pull/20306))** |
| 256 | |
| 257 | Adds the following defaults for APIv4 Case.create: |
| 258 | - default Case Creator = current user |
| 259 | - default Case Start Date = now |
| 260 | |
| 261 | ### CiviContribute |
| 262 | |
| 263 | - **Improve Sample data by ensuring all Credit Card Contributions have a |
| 264 | transaction id and that they are shown to be linked to the test payment |
| 265 | processor ([20312](https://github.com/civicrm/civicrm-core/pull/20312))** |
| 266 | |
| 267 | Improves CiviContribute sample date. |
| 268 | |
| 269 | ## <a name="bugs"></a>Bugs resolved |
| 270 | |
| 271 | ### Core CiviCRM |
| 272 | |
| 273 | - **"You do not have permission to access this page" when exporting participants |
| 274 | in Search Kit |
| 275 | ([dev/report#67](https://lab.civicrm.org/dev/report/-/issues/67): |
| 276 | [20528](https://github.com/civicrm/civicrm-core/pull/20528))** |
| 277 | |
| 278 | Fixes an 'access denied' error on standalone SearchKit export forms, caused by |
| 279 | renaming the PHP classes. |
| 280 | |
| 281 | - **500 error saving Search Kit Smart Group sorted on aggregated field |
| 282 | ([dev/report#68](https://lab.civicrm.org/dev/report/-/issues/68): |
| 283 | [20610](https://github.com/civicrm/civicrm-core/pull/20610))** |
| 284 | |
| 285 | - **Fatal error reported when photo cannot be found |
| 286 | ([dev/core#2369](https://lab.civicrm.org/dev/core/-/issues/2369): |
| 287 | [20447](https://github.com/civicrm/civicrm-core/pull/20447))** |
| 288 | |
| 289 | - **Loss of translation when copying (cloning) entities (multilingual) |
| 290 | ([dev/core#2479](https://lab.civicrm.org/dev/core/-/issues/2479): |
| 291 | [20059](https://github.com/civicrm/civicrm-core/pull/20059))** |
| 292 | |
| 293 | - **Fatal error while upgrading smart-group data |
| 294 | ([dev/core#2659](https://lab.civicrm.org/dev/core/-/issues/2659): |
| 295 | [20756](https://github.com/civicrm/civicrm-core/pull/20756/))** |
| 296 | |
| 297 | - **CRM_Utils_File::isAbsolute does not respect PHP stream wrappers (Work |
| 298 | Towards [dev/core#2590](https://lab.civicrm.org/dev/core/-/issues/2590): |
| 299 | [20270](https://github.com/civicrm/civicrm-core/pull/20270))** |
| 300 | |
| 301 | Removes unused function. |
| 302 | |
| 303 | - **Installer doesn't check MySQL version properly |
| 304 | ([dev/core#2602](https://lab.civicrm.org/dev/core/-/issues/2602): |
| 305 | [20255](https://github.com/civicrm/civicrm-core/pull/20255))** |
| 306 | |
| 307 | - **Useradd task gives a deprecation notice for the password confirmation field |
| 308 | ([dev/core#2613](https://lab.civicrm.org/dev/core/-/issues/2613): |
| 309 | [20347](https://github.com/civicrm/civicrm-core/pull/20347))** |
| 310 | |
| 311 | - **APIv4 - Delete undocumented deprecated activityType lookup |
| 312 | ([20506](https://github.com/civicrm/civicrm-core/pull/20506))** |
| 313 | |
| 314 | Deletes an undocumented APIv4 quirk that's been giving deprecated warnings for |
| 315 | over a year. |
| 316 | |
| 317 | - **APIv4 - Fix getFields to respect default_value from getFields |
| 318 | ([20481](https://github.com/civicrm/civicrm-core/pull/20481))** |
| 319 | |
| 320 | - **AfformGui - Fix tabs when cms theme adds extra margin |
| 321 | ([20431](https://github.com/civicrm/civicrm-core/pull/20431))** |
| 322 | |
| 323 | - **Afform GUI - Fix tab breakage in Shoreditch theme |
| 324 | ([20416](https://github.com/civicrm/civicrm-core/pull/20416))** |
| 325 | |
| 326 | - **Afform drag n drop fixes |
| 327 | ([20281](https://github.com/civicrm/civicrm-core/pull/20281) and |
| 328 | [20263](https://github.com/civicrm/civicrm-core/pull/20263))** |
| 329 | |
| 330 | - **Afform - Fix custom field handling and add tests |
| 331 | ([20480](https://github.com/civicrm/civicrm-core/pull/20480))** |
| 332 | |
| 333 | - **Afform - hide disabled contact types & entities from disabled |
| 334 | components/extensions |
| 335 | ([20283](https://github.com/civicrm/civicrm-core/pull/20283))** |
| 336 | |
| 337 | Cleans up and improves Afform's internal entity lookup so it won't show |
| 338 | disabled entities. |
| 339 | |
| 340 | - **SearchKit - Fix link target selection |
| 341 | ([20537](https://github.com/civicrm/civicrm-core/pull/20537))** |
| 342 | |
| 343 | - **SearchKit - Fix menu permission |
| 344 | ([20349](https://github.com/civicrm/civicrm-core/pull/20349))** |
| 345 | |
| 346 | - **SearchKit - Organize ON clause field selectors with joined entity first |
| 347 | ([20454](https://github.com/civicrm/civicrm-core/pull/20454))** |
| 348 | |
| 349 | - **[php8-compat] Fix some more examples of where required parameters are after |
| 350 | optional parameters in function declaration |
| 351 | ([20515](https://github.com/civicrm/civicrm-core/pull/20515))** |
| 352 | |
| 353 | - **[php8-compat] Fix PHP Beautifier notice by conditionally assigning dynamic |
| 354 | foreign key to the template |
| 355 | ([20509](https://github.com/civicrm/civicrm-core/pull/20509))** |
| 356 | |
| 357 | - **[php8-compat] Fix issue in APIv3 Where by because product has a column |
| 358 | called options the testCreateSingleValueAlter triggers a cannot access offset |
| 359 | of type string on string in php8 |
| 360 | ([20508](https://github.com/civicrm/civicrm-core/pull/20508))** |
| 361 | |
| 362 | - **[php8-compat] Fix issue with returning bool from uasort by using the |
| 363 | spaceship operator |
| 364 | ([20502](https://github.com/civicrm/civicrm-core/pull/20502))** |
| 365 | |
| 366 | - **[php8-compat] Fix Upgrade call back issues by making functions static and |
| 367 | also fixing an issue with an array key not existing when checking obsolete |
| 368 | extensions ([20503](https://github.com/civicrm/civicrm-core/pull/20503))** |
| 369 | |
| 370 | - **Update PHPUnit for PHPUnit8 config to ensure we don't cache test results |
| 371 | ([645](https://github.com/civicrm/civicrm-drupal/pull/645), |
| 372 | [140](https://github.com/civicrm/civicrm-backdrop/pull/140) and |
| 373 | [249](https://github.com/civicrm/civicrm-wordpress/pull/249))** |
| 374 | |
| 375 | - **[php8-compat] Fix calling method_exist with paremeter that is bool not an |
| 376 | object in php8 ([323](https: |
| 377 | |
| 378 | - **[php8-compat] Fix calling method_exist with paremeter that is bool not an |
| 379 | object in php8 ([20443](https://github.com/civicrm/civicrm-core/pull/20443))** |
| 380 | |
| 381 | - **[php8-compat] Fix deprecation error where by required function parameter |
| 382 | follows an optional function parameter |
| 383 | ([20473](https://github.com/civicrm/civicrm-core/pull/20473))** |
| 384 | |
| 385 | - **[php8-compat] Fix Warning Notices when running schema generation |
| 386 | ([20445](https://github.com/civicrm/civicrm-core/pull/20445))** |
| 387 | |
| 388 | - **[php8-compat] Update Various Symfony components to latest version in the |
| 389 | 3.4.x series to fix deprecation notice around libxml entity disable |
| 390 | ([20444](https://github.com/civicrm/civicrm-core/pull/20444))** |
| 391 | |
| 392 | - **Fix the populateTempTable to be more direct |
| 393 | ([20548](https://github.com/civicrm/civicrm-core/pull/20548))** |
| 394 | |
| 395 | - **Sort trigger data before processing |
| 396 | ([20541](https://github.com/civicrm/civicrm-core/pull/20541))** |
| 397 | |
| 398 | - **Allow legacy warnings to be fully suppressed in PropertyBag |
| 399 | ([20331](https://github.com/civicrm/civicrm-core/pull/20331))** |
| 400 | |
| 401 | - **Prevent adding duplicate dashlet if present with same name and label |
| 402 | ([20375](https://github.com/civicrm/civicrm-core/pull/20375))** |
| 403 | |
| 404 | - **Ensure contacts without a name are updated when primary email changes |
| 405 | ([20403](https://github.com/civicrm/civicrm-core/pull/20403))** |
| 406 | |
| 407 | - **fix arguments sent to hook_civicrm_check |
| 408 | ([20400](https://github.com/civicrm/civicrm-core/pull/20400))** |
| 409 | |
| 410 | - **Fix Distmaker building by ensuring we are rsyncing from the right folder |
| 411 | ([20353](https://github.com/civicrm/civicrm-core/pull/20353))** |
| 412 | |
| 413 | - **Fix mandatory keys check fail for value of float 0.0 in a required key in an |
| 414 | entity ([20342](https://github.com/civicrm/civicrm-core/pull/20342))** |
| 415 | |
| 416 | - **Fix extraneous white space in generated SQL |
| 417 | ([20340](https://github.com/civicrm/civicrm-core/pull/20340))** |
| 418 | |
| 419 | - **Fix case sensitive parameter for call to getCustomFieldTokens |
| 420 | ([20333](https://github.com/civicrm/civicrm-core/pull/20333))** |
| 421 | |
| 422 | - **Fix CKEditor5 link editing in modal dialog |
| 423 | ([20285](https://github.com/civicrm/civicrm-core/pull/20285))** |
| 424 | |
| 425 | - **Correct copy-paste error in CustomField schema |
| 426 | ([20329](https://github.com/civicrm/civicrm-core/pull/20329))** |
| 427 | |
| 428 | - **Explicitly throw an error/status bounce on Edit/New if no types. |
| 429 | ([19840](https://github.com/civicrm/civicrm-core/pull/19840))** |
| 430 | |
| 431 | - **Core_DAO - Fire links_callback for all entities |
| 432 | ([20332](https://github.com/civicrm/civicrm-core/pull/20332))** |
| 433 | |
| 434 | - **Get county fields populated via api call |
| 435 | ([20309](https://github.com/civicrm/civicrm-core/pull/20309))** |
| 436 | |
| 437 | Ensure that county fields are properly populated when calling the |
| 438 | Profile.getfields api. |
| 439 | |
| 440 | - **Activate user when no activation is required |
| 441 | ([20229](https://github.com/civicrm/civicrm-core/pull/20229))** |
| 442 | |
| 443 | Ensures that any user created on a site that does not require admin approval |
| 444 | is considered active. |
| 445 | |
| 446 | - **Switch to non deprecated buildPermissionClause() for contact detail report |
| 447 | ([20314](https://github.com/civicrm/civicrm-core/pull/20314))** |
| 448 | |
| 449 | - **Switch to non deprecated buildPermissionClause() for contact summary report |
| 450 | ([20287](https://github.com/civicrm/civicrm-core/pull/20287))** |
| 451 | |
| 452 | - **Freeze readonly fields |
| 453 | ([20204](https://github.com/civicrm/civicrm-core/pull/20204))** |
| 454 | |
| 455 | - **CiviCRM Scheduled Reminders, Subject field missing Token selector - users |
| 456 | must copy Token from Body field to Subject |
| 457 | ([20260](https://github.com/civicrm/civicrm-core/pull/20260))** |
| 458 | |
| 459 | - **Fix delete customgroup using API4 so it removes data table |
| 460 | ([20265](https://github.com/civicrm/civicrm-core/pull/20265))** |
| 461 | |
| 462 | - **hook_managed - Do not try to disable managed entities if is_active is not |
| 463 | available to api3.create |
| 464 | ([20144](https://github.com/civicrm/civicrm-core/pull/20144))** |
| 465 | |
| 466 | - **DB/DataObject: use mb_strtolower because in turkish, INSERT becomes Insert |
| 467 | ([324](https://github.com/civicrm/civicrm-packages/pull/324))** |
| 468 | |
| 469 | ### CiviCase |
| 470 | |
| 471 | - **APIv4 - CiviCase API: Fix opening a case with current user as creator |
| 472 | ([20238](https://github.com/civicrm/civicrm-core/pull/20238))** |
| 473 | |
| 474 | - **My Cases dashlet no longer working (javascript network error - blank |
| 475 | dashlet) ([dev/core#2606](https://lab.civicrm.org/dev/core/-/issues/2606): |
| 476 | [20275](https://github.com/civicrm/civicrm-core/pull/20275))** |
| 477 | |
| 478 | ## CiviContribute |
| 479 | |
| 480 | - **PayPal fails to create contribution following duplicate merge when |
| 481 | membership record has been deleted |
| 482 | ([dev/core#2593](https://lab.civicrm.org/dev/core/-/issues/2593): |
| 483 | [20422](https://github.com/civicrm/civicrm-core/pull/20422), |
| 484 | [20424](https://github.com/civicrm/civicrm-core/pull/20424), |
| 485 | [20246](https://github.com/civicrm/civicrm-core/pull/20246) and |
| 486 | [20300](https://github.com/civicrm/civicrm-core/pull/20300))** |
| 487 | |
| 488 | - **"Pay Now" button on user dashboard is only for Pending, not Partially Paid |
| 489 | contributions |
| 490 | ([dev/financial#173](https://lab.civicrm.org/dev/financial/-/issues/173): |
| 491 | [20376](https://github.com/civicrm/civicrm-core/pull/20376))** |
| 492 | |
| 493 | Ensures the 'Pay Now' buttons on the user dashboard are displayed for |
| 494 | partially paid contributions. |
| 495 | |
| 496 | - **Do not error on view contribution recur if not displaying contributions |
| 497 | ([20209](https://github.com/civicrm/civicrm-core/pull/20209))** |
| 498 | |
| 499 | - **Fix for tax rates being mangled on contribution update |
| 500 | ([20357](https://github.com/civicrm/civicrm-core/pull/20357))** |
| 501 | |
| 502 | - **Add call to validateAllContributions & fix getTotalAmount |
| 503 | ([20391](https://github.com/civicrm/civicrm-core/pull/20391))** |
| 504 | |
| 505 | - **Add warning when url_site is not specified for paypal (it won't work if not |
| 506 | set) ([20082](https://github.com/civicrm/civicrm-core/pull/20082))** |
| 507 | |
| 508 | - **Typo when retrieving help_pre textarea attributes for price field |
| 509 | ([20276](https://github.com/civicrm/civicrm-core/pull/20276))** |
| 510 | |
| 511 | - **Fix old-ish regression on paypal standard self-service cancel links |
| 512 | ([20210](https://github.com/civicrm/civicrm-core/pull/20210))** |
| 513 | |
| 514 | - **Don't pass doPayment by reference in Contribution.transact API |
| 515 | ([20463](https://github.com/civicrm/civicrm-core/pull/20463))** |
| 516 | |
| 517 | - **If paymentprocessor still uses doTransferCheckout/doDirectPayment trigger |
| 518 | deprecated function warning |
| 519 | ([20384](https://github.com/civicrm/civicrm-core/pull/20384))** |
| 520 | |
| 521 | - **Convert payJunction to doPayment |
| 522 | ([20326](https://github.com/civicrm/civicrm-core/pull/20326))** |
| 523 | |
| 524 | - **Convert FirstData to doPayment |
| 525 | ([20325](https://github.com/civicrm/civicrm-core/pull/20325))** |
| 526 | |
| 527 | - **Convert elavon to doPayment |
| 528 | ([20324](https://github.com/civicrm/civicrm-core/pull/20324))** |
| 529 | |
| 530 | - **Convert Realex to doPayment |
| 531 | ([20327](https://github.com/civicrm/civicrm-core/pull/20327))** |
| 532 | |
| 533 | - **Convert payflowpro to doPayment |
| 534 | ([20328](https://github.com/civicrm/civicrm-core/pull/20328))** |
| 535 | |
| 536 | - **Convert eway to doPayment |
| 537 | ([20323](https://github.com/civicrm/civicrm-core/pull/20323))** |
| 538 | |
| 539 | - **Convert AuthorizeNet to doPayment() |
| 540 | ([20322](https://github.com/civicrm/civicrm-core/pull/20322))** |
| 541 | |
| 542 | - **Sample payment processor types are misaligned in the sample data |
| 543 | ([dev/core#2614](https://lab.civicrm.org/dev/core/-/issues/2614): |
| 544 | [20311](https://github.com/civicrm/civicrm-core/pull/20311))** |
| 545 | |
| 546 | ### CiviMail |
| 547 | |
| 548 | - **<link> URLs are tracked and shouldn't be |
| 549 | ([dev/mail#95](https://lab.civicrm.org/dev/mail/-/issues/95): |
| 550 | [20129](https://github.com/civicrm/civicrm-core/pull/20129))** |
| 551 | |
| 552 | Ensures link tracking is applied only to URLs inside <a> tags. |
| 553 | |
| 554 | ### CiviMember |
| 555 | |
| 556 | - **Creating a relationship fails when a related membership has a contact |
| 557 | reference custom field. |
| 558 | ([dev/membership#37](https://lab.civicrm.org/dev/membership/-/issues/37): |
| 559 | [20493](https://github.com/civicrm/civicrm-core/pull/20493))** |
| 560 | |
| 561 | - **Use line items to look up memberships |
| 562 | ([20495](https://github.com/civicrm/civicrm-core/pull/20495))** |
| 563 | |
| 564 | - **Use order api when creating a recurring membership from the Membership |
| 565 | ([20077](https://github.com/civicrm/civicrm-core/pull/20077))** |
| 566 | |
| 567 | ### Drupal Integration |
| 568 | |
| 569 | - **AuthX extension: user_load() deprecated in Drupal 8.x. |
| 570 | ([dev/core#2636](https://lab.civicrm.org/dev/core/-/issues/2636): |
| 571 | [20479](https://github.com/civicrm/civicrm-core/pull/20479))** |
| 572 | |
| 573 | - **drush install - Bump up entropy for autogenerated creds. Add signing key. |
| 574 | ([128](https://github.com/civicrm/civicrm-backdrop/pull/128))** |
| 575 | |
| 576 | ### WordPress Integration |
| 577 | |
| 578 | - **[php8-compat] Fix undefined property on Array Cache class in wordpress on |
| 579 | PHP8 ([20491](https://github.com/civicrm/civicrm-core/pull/20491))** |
| 580 | |
| 581 | - **Remove Base Page content filter once it has been used |
| 582 | ([dev/wordpress#91](https://lab.civicrm.org/dev/wordpress/-/issues/91): |
| 583 | [240](https://github.com/civicrm/civicrm-wordpress/pull/240))** |
| 584 | |
| 585 | Fixes a bug where CiviCRM content would repeat itself in certain page |
| 586 | configurations. |
| 587 | |
| 588 | ## <a name="misc"></a>Miscellany |
| 589 | |
| 590 | - **Add file_exists check on loading services xml |
| 591 | ([20620](https://github.com/civicrm/civicrm-core/pull/20620))** |
| 592 | |
| 593 | - **APIv4 - Cleanup getFields, add @internal flag for non-public field |
| 594 | attributes ([20489](https://github.com/civicrm/civicrm-core/pull/20489))** |
| 595 | |
| 596 | - **Extract code that populates temp table for an individual group |
| 597 | ([20458](https://github.com/civicrm/civicrm-core/pull/20458))** |
| 598 | |
| 599 | - **Cleanup - declare return types, remove unused var |
| 600 | ([20363](https://github.com/civicrm/civicrm-core/pull/20363))** |
| 601 | |
| 602 | - **Bump lodash from 4.17.19 to 4.17.21 |
| 603 | ([20247](https://github.com/civicrm/civicrm-core/pull/20247))** |
| 604 | |
| 605 | - **Bump DOMPDF to `~1.0.0` |
| 606 | ([20465](https://github.com/civicrm/civicrm-core/pull/20465))** |
| 607 | |
| 608 | - **Make functions protected |
| 609 | ([20455](https://github.com/civicrm/civicrm-core/pull/20455))** |
| 610 | |
| 611 | - **Deprecate function CRM_Core_BAO_CustomField::bulkSave |
| 612 | ([20367](https://github.com/civicrm/civicrm-core/pull/20367))** |
| 613 | |
| 614 | - **Cleanup tracking on group.load |
| 615 | ([20310](https://github.com/civicrm/civicrm-core/pull/20310))** |
| 616 | |
| 617 | - **Describe logic behind placement of `invalidateRouteCache` |
| 618 | ([20414](https://github.com/civicrm/civicrm-core/pull/20414))** |
| 619 | |
| 620 | - **Fix internal group contact cache functions to be protected |
| 621 | ([20385](https://github.com/civicrm/civicrm-core/pull/20385))** |
| 622 | |
| 623 | - **Clarify types on `hook_custom` and `hook_customPre` |
| 624 | ([20488](https://github.com/civicrm/civicrm-core/pull/20488))** |
| 625 | |
| 626 | - **Cleanup references to old dedupe class names |
| 627 | ([20492](https://github.com/civicrm/civicrm-core/pull/20492))** |
| 628 | |
| 629 | - **Switch l10n.js from ajax callback to assetBuilder |
| 630 | ([20121](https://github.com/civicrm/civicrm-core/pull/20121))** |
| 631 | |
| 632 | - **ACLEntityRole BAO tidy fixes |
| 633 | ([20504](https://github.com/civicrm/civicrm-core/pull/20504))** |
| 634 | |
| 635 | - **Dedupe DAO is out of date |
| 636 | ([20534](https://github.com/civicrm/civicrm-core/pull/20534))** |
| 637 | |
| 638 | - **Switch table mapping to square bracket array syntax. |
| 639 | ([20535](https://github.com/civicrm/civicrm-core/pull/20535))** |
| 640 | |
| 641 | - **Update civicrm_generated (5.39 version) |
| 642 | ([20571](https://github.com/civicrm/civicrm-core/pull/20571))** |
| 643 | |
| 644 | - **[REF] Cannot edit CiviCRM Joomla permissions (access control) in 5.37.0 |
| 645 | (Clean up for [dev/core#2601](https://lab.civicrm.org/dev/core/-/issues/2601): |
| 646 | [20271](https://github.com/civicrm/civicrm-core/pull/20271))** |
| 647 | |
| 648 | - **Revised fix for menu/UI issues for Joomla 4.0 |
| 649 | ([20401](https://github.com/civicrm/civicrm-core/pull/20401))** |
| 650 | |
| 651 | - **[php8-compat] Fix Include/Exclude Group Custom Search Tests by better |
| 652 | handling empty arrays on exclusions in the custom search |
| 653 | ([20539](https://github.com/civicrm/civicrm-core/pull/20539))** |
| 654 | |
| 655 | - **[php8-compat] Fix Resources Test issue due to undefined array key add |
| 656 | CacheCode ([20538](https://github.com/civicrm/civicrm-core/pull/20538))** |
| 657 | |
| 658 | - **[php8-compat] Fix api_v3_PaymentTest failures by putting in more guards into |
| 659 | message templates |
| 660 | ([20520](https://github.com/civicrm/civicrm-core/pull/20520))** |
| 661 | |
| 662 | - **[php8-compat] Update smarty templates and some PHP files to get the |
| 663 | api_v3_contribution testclass to pass on php8 |
| 664 | ([20512](https://github.com/civicrm/civicrm-core/pull/20512))** |
| 665 | |
| 666 | - **[php8-compact] Add in guards into various templates to fix hook tests in |
| 667 | php8 ([20542](https://github.com/civicrm/civicrm-core/pull/20542))** |
| 668 | |
| 669 | - **[php8-compact] Fix Report tests failing on php8 |
| 670 | ([20549](https://github.com/civicrm/civicrm-core/pull/20549))** |
| 671 | |
| 672 | - **[php8-compat] Partial Fix of hook tests for php8 |
| 673 | ([20545](https://github.com/civicrm/civicrm-core/pull/20545))** |
| 674 | |
| 675 | - **[php8-compat] [REF] Fix a couple of functions triggering deprecation notices |
| 676 | in php 8.0 where by an optional parameter is before required parameters in the |
| 677 | function signature |
| 678 | ([20442](https://github.com/civicrm/civicrm-core/pull/20442))** |
| 679 | |
| 680 | - **[php8-compat] [REF] Fix call to function CRM_Utils_String::createRandom by |
| 681 | ensuring that the length is the first parameter not 2nd |
| 682 | ([20441](https://github.com/civicrm/civicrm-core/pull/20441))** |
| 683 | |
| 684 | - **[php8-compat][NFC] Ensure that the 2nd parameter of hash_equals is a string |
| 685 | in authx ([20483](https://github.com/civicrm/civicrm-core/pull/20483))** |
| 686 | |
| 687 | - **[php8-compat][NFC] Fix using ZipArchive::open on an empty file |
| 688 | ([20500](https://github.com/civicrm/civicrm-core/pull/20500))** |
| 689 | |
| 690 | - **[php8-compat][NFC] Fix issue where by we are tryiing to access array keys |
| 691 | that haven't been created yet |
| 692 | ([20496](https://github.com/civicrm/civicrm-core/pull/20496))** |
| 693 | |
| 694 | - **[REF][php8-compat] Fix more instances of where there is a required parameter |
| 695 | for a function after an optional one and fix an issue where by a NULL function |
| 696 | property is treated as not exisiting in php8 |
| 697 | ([20497](https://github.com/civicrm/civicrm-core/pull/20497))** |
| 698 | |
| 699 | - **[REF][php8-compat] Further fixes where there is a required paramater after |
| 700 | an optional paramater |
| 701 | ([20490](https://github.com/civicrm/civicrm-core/pull/20490))** |
| 702 | |
| 703 | - **[php8-compat][REF] Fix some more test failures in php8 |
| 704 | ([20516](https://github.com/civicrm/civicrm-core/pull/20516))** |
| 705 | |
| 706 | - **[php8-compat][REF] Fix api_v3_contributionpagetest on php8 |
| 707 | ([20518](https://github.com/civicrm/civicrm-core/pull/20518))** |
| 708 | |
| 709 | - **[php8-compat][REF] Fix more php8 test failures caused by template issues |
| 710 | ([20517](https://github.com/civicrm/civicrm-core/pull/20517))** |
| 711 | |
| 712 | - **[php8-compat][REF] Fix php8 error on undefined constant |
| 713 | CIVICRM_DISABLE_DEFAULT_MENU |
| 714 | ([20485](https://github.com/civicrm/civicrm-core/pull/20485))** |
| 715 | |
| 716 | - **[php8-compat][REF] Fix Date unit tests in php8 by passing in 00 instead of |
| 717 | null for hours,minutes and seconds |
| 718 | ([20525](https://github.com/civicrm/civicrm-core/pull/20525))** |
| 719 | |
| 720 | - **[php8-compact][REF] Fix another couple of places where by there are required |
| 721 | variables in php function declaration after optional ones |
| 722 | ([20526](https://github.com/civicrm/civicrm-core/pull/20526))** |
| 723 | |
| 724 | - **[php8-compact][REF] Fix api_v3_PaymentTokenTest to work on php8 |
| 725 | ([20527](https://github.com/civicrm/civicrm-core/pull/20527))** |
| 726 | |
| 727 | - **[php8-compat][REF] Fix Case and Custom data tests by adding guards in to |
| 728 | templates ([20524](https://github.com/civicrm/civicrm-core/pull/20524))** |
| 729 | |
| 730 | - **[php8-compat][phpunit8][NFC] Fix PHPUnit Warnings and fix a php error on |
| 731 | function declaration syntax in core extension tests |
| 732 | ([20477](https://github.com/civicrm/civicrm-core/pull/20477))** |
| 733 | |
| 734 | - **Remove extraneous debug |
| 735 | ([20319](https://github.com/civicrm/civicrm-core/pull/20319))** |
| 736 | |
| 737 | - **Remove legacy references to partial_amount_to_pay |
| 738 | ([20358](https://github.com/civicrm/civicrm-core/pull/20358))** |
| 739 | |
| 740 | - **Remove remains of md5 check from authorizenet |
| 741 | ([20406](https://github.com/civicrm/civicrm-core/pull/20406))** |
| 742 | |
| 743 | - **Remove deprecation of order-must-be-pending |
| 744 | ([20205](https://github.com/civicrm/civicrm-core/pull/20205))** |
| 745 | |
| 746 | - **Remove some unused variables |
| 747 | ([20487](https://github.com/civicrm/civicrm-core/pull/20487))** |
| 748 | |
| 749 | - **Remove never-passed parameter from now unshared function |
| 750 | ([20304](https://github.com/civicrm/civicrm-core/pull/20304))** |
| 751 | |
| 752 | - **Remove defunct default return property |
| 753 | ([20139](https://github.com/civicrm/civicrm-core/pull/20139))** |
| 754 | |
| 755 | - **Remove now-unused ids parameter from signature |
| 756 | ([20299](https://github.com/civicrm/civicrm-core/pull/20299))** |
| 757 | |
| 758 | - **Remove unused functions from payJunction |
| 759 | ([20417](https://github.com/civicrm/civicrm-core/pull/20417))** |
| 760 | |
| 761 | - **Remove unused variable on dummy processor |
| 762 | ([20418](https://github.com/civicrm/civicrm-core/pull/20418))** |
| 763 | |
| 764 | - **Remove pass-by-ref as param not altered |
| 765 | ([20475](https://github.com/civicrm/civicrm-core/pull/20475))** |
| 766 | |
| 767 | - **[REF] (Code style) To const, or not const - that is the event |
| 768 | ([dev/core#1744](https://lab.civicrm.org/dev/core/-/issues/1744): |
| 769 | [20555](https://github.com/civicrm/civicrm-core/pull/20555))** |
| 770 | |
| 771 | - **[REF] Extract function to get locks |
| 772 | ([20373](https://github.com/civicrm/civicrm-core/pull/20373))** |
| 773 | |
| 774 | - **[REF] Remove unused variable |
| 775 | ([20378](https://github.com/civicrm/civicrm-core/pull/20378))** |
| 776 | |
| 777 | - **[REF] Slightly more logical order of code |
| 778 | ([20368](https://github.com/civicrm/civicrm-core/pull/20368))** |
| 779 | |
| 780 | - **[REF] Extract code to transfer groups from temp table to cache |
| 781 | ([20435](https://github.com/civicrm/civicrm-core/pull/20435))** |
| 782 | |
| 783 | - **[REF] Remove never-passed param |
| 784 | ([20456](https://github.com/civicrm/civicrm-core/pull/20456))** |
| 785 | |
| 786 | - **[REF] APIv4 refactoring to support calculated fields |
| 787 | ([20440](https://github.com/civicrm/civicrm-core/pull/20440))** |
| 788 | |
| 789 | - **[REF] Set receipt_date after sending, (from batch) not in anticipation |
| 790 | ([20395](https://github.com/civicrm/civicrm-core/pull/20395))** |
| 791 | |
| 792 | - **[REF] Minor extraction - getInfoUrl |
| 793 | ([20421](https://github.com/civicrm/civicrm-core/pull/20421))** |
| 794 | |
| 795 | - **[REF] Fix issue where by mailing urls were always stuck in the original |
| 796 | language not the overriden language in a multilingual site |
| 797 | ([20102](https://github.com/civicrm/civicrm-core/pull/20102))** |
| 798 | |
| 799 | - **[REF] Paypal pro - remove call to load contact record |
| 800 | ([20423](https://github.com/civicrm/civicrm-core/pull/20423))** |
| 801 | |
| 802 | - **[REF] Stop passing unneed params to the recur function |
| 803 | ([20412](https://github.com/civicrm/civicrm-core/pull/20412))** |
| 804 | |
| 805 | - **[REF] Replace isFirst parameter |
| 806 | ([20411](https://github.com/civicrm/civicrm-core/pull/20411))** |
| 807 | |
| 808 | - **[REF] Remove now-unused params |
| 809 | ([20410](https://github.com/civicrm/civicrm-core/pull/20410))** |
| 810 | |
| 811 | - **[REF] Paypal IPN - Cleanup references to completion |
| 812 | ([20407](https://github.com/civicrm/civicrm-core/pull/20407))** |
| 813 | |
| 814 | - **[REF] Replace deprecated code call |
| 815 | ([20409](https://github.com/civicrm/civicrm-core/pull/20409))** |
| 816 | |
| 817 | - **[REF] Cleanup validation in PaypalProIPN single function |
| 818 | ([20360](https://github.com/civicrm/civicrm-core/pull/20360))** |
| 819 | |
| 820 | - **[REF] Minor simplification |
| 821 | ([20393](https://github.com/civicrm/civicrm-core/pull/20393))** |
| 822 | |
| 823 | - **[REF] Useradd contact task - Use OO instead of hardcoding "if Wordpress" |
| 824 | ([20366](https://github.com/civicrm/civicrm-core/pull/20366))** |
| 825 | |
| 826 | - **[REF] Cleanup on import rows error |
| 827 | ([20196](https://github.com/civicrm/civicrm-core/pull/20196))** |
| 828 | |
| 829 | - **[REF] Extract function to build temporary table of members of group from |
| 830 | Report_Form ([20297](https://github.com/civicrm/civicrm-core/pull/20297))** |
| 831 | |
| 832 | - **[REF] Remove now-unused parameter |
| 833 | ([20354](https://github.com/civicrm/civicrm-core/pull/20354))** |
| 834 | |
| 835 | - **[REF] Extract getContributionObject |
| 836 | ([20355](https://github.com/civicrm/civicrm-core/pull/20355))** |
| 837 | |
| 838 | - **[REF] Add getter for contributionID |
| 839 | ([20318](https://github.com/civicrm/civicrm-core/pull/20318))** |
| 840 | |
| 841 | - **[REF] Make previous unshared function protected & Remove hard-coded params |
| 842 | ([20345](https://github.com/civicrm/civicrm-core/pull/20345))** |
| 843 | |
| 844 | - **[REF] Update Pear Validate Finance CreditCard to use latest tagged release |
| 845 | that now includes the improved mastercard 2bin regex |
| 846 | ([20351](https://github.com/civicrm/civicrm-core/pull/20351))** |
| 847 | |
| 848 | - **[REF] Make previously unshared function protected |
| 849 | ([20346](https://github.com/civicrm/civicrm-core/pull/20346))** |
| 850 | |
| 851 | - **[REF] Remove unused parameters |
| 852 | ([20301](https://github.com/civicrm/civicrm-core/pull/20301))** |
| 853 | |
| 854 | - **[REF] Cleanup BAO_ActionSchedule::getlist() signature |
| 855 | ([20239](https://github.com/civicrm/civicrm-core/pull/20239))** |
| 856 | |
| 857 | - **(REF) Regen CRM/Core/DAO/CustomField.php |
| 858 | ([20337](https://github.com/civicrm/civicrm-core/pull/20337))** |
| 859 | |
| 860 | - **[REF] Remove redundant call to clearGroupContactCache |
| 861 | ([20243](https://github.com/civicrm/civicrm-core/pull/20243))** |
| 862 | |
| 863 | - **[REF] [tests only] Replace direct calls to enable logging with calls to the |
| 864 | setting ([20460](https://github.com/civicrm/civicrm-core/pull/20460))** |
| 865 | |
| 866 | - **[REF] Remove function parameter only used from test |
| 867 | ([20459](https://github.com/civicrm/civicrm-core/pull/20459))** |
| 868 | |
| 869 | - **[REF] Extract code determining list of groups requiring a refresh |
| 870 | ([20242](https://github.com/civicrm/civicrm-core/pull/20242))** |
| 871 | |
| 872 | - **REF - Cleanup array key checking to use array_key_exists |
| 873 | ([20563](https://github.com/civicrm/civicrm-core/pull/20563))** |
| 874 | |
| 875 | - **[REF] CRM_Contact_Task - Use short array syntax |
| 876 | ([20562](https://github.com/civicrm/civicrm-core/pull/20562))** |
| 877 | |
| 878 | - **[REF] Fix Authx tests on Druapl 8/9 by ensuring that we only return an id |
| 879 | for the user id if it is greater than 0 |
| 880 | ([20498](https://github.com/civicrm/civicrm-core/pull/20498))** |
| 881 | |
| 882 | - **[REF] Move ACLPermission Trait into Civi Folder so that it can be accessed |
| 883 | by Extensions ([20208](https://github.com/civicrm/civicrm-core/pull/20208))** |
| 884 | |
| 885 | - **[REF] Use function to getContributionRecurID |
| 886 | ([20293](https://github.com/civicrm/civicrm-core/pull/20293))** |
| 887 | |
| 888 | - **[REF] Duplicate processMembership preliminary to cleanup |
| 889 | ([20295](https://github.com/civicrm/civicrm-core/pull/20295))** |
| 890 | |
| 891 | - **[REF] Switch to using getContributionRecurID function, remove now unused |
| 892 | param ([20316](https://github.com/civicrm/civicrm-core/pull/20316))** |
| 893 | |
| 894 | - **[REF] Fully remove ids variable from paypal std |
| 895 | ([20317](https://github.com/civicrm/civicrm-core/pull/20317))** |
| 896 | |
| 897 | - **[REF] Make use of recently added default pager size setting in Reports |
| 898 | ([20273](https://github.com/civicrm/civicrm-core/pull/20273))** |
| 899 | |
| 900 | - **[REF] Duplicate & deprecate processMembership |
| 901 | ([20313](https://github.com/civicrm/civicrm-core/pull/20313))** |
| 902 | |
| 903 | - **[REF] Provide standardised methods to get recurring contribution id & object |
| 904 | ([20294](https://github.com/civicrm/civicrm-core/pull/20294))** |
| 905 | |
| 906 | - **[REF] Reverse if statement |
| 907 | ([20211](https://github.com/civicrm/civicrm-core/pull/20211))** |
| 908 | |
| 909 | - **Mark test class as having invalid financials |
| 910 | ([20448](https://github.com/civicrm/civicrm-core/pull/20448))** |
| 911 | |
| 912 | - **Update eventcart test to only test payment form |
| 913 | ([20405](https://github.com/civicrm/civicrm-core/pull/20405))** |
| 914 | |
| 915 | - **Fix profile test teardown |
| 916 | ([20439](https://github.com/civicrm/civicrm-core/pull/20439))** |
| 917 | |
| 918 | - **Fix separate payment membership test to create valid financial transactions |
| 919 | ([20436](https://github.com/civicrm/civicrm-core/pull/20436))** |
| 920 | |
| 921 | - **fix missing parent tearDown |
| 922 | ([20261](https://github.com/civicrm/civicrm-core/pull/20261) and |
| 923 | [20262](https://github.com/civicrm/civicrm-core/pull/20262))** |
| 924 | |
| 925 | - **Fix v3 api payment test to validate on postAssert |
| 926 | ([20530](https://github.com/civicrm/civicrm-core/pull/20530))** |
| 927 | |
| 928 | - **Fix Financial item test to validate Financials |
| 929 | ([20532](https://github.com/civicrm/civicrm-core/pull/20532))** |
| 930 | |
| 931 | - **Mark DetailTest as having invalid financials |
| 932 | ([20552](https://github.com/civicrm/civicrm-core/pull/20552))** |
| 933 | |
| 934 | - **Fix form params for testEventPaymentForms |
| 935 | ([20330](https://github.com/civicrm/civicrm-core/pull/20330))** |
| 936 | |
| 937 | - **Update bulkSave test to use the api |
| 938 | ([20362](https://github.com/civicrm/civicrm-core/pull/20362))** |
| 939 | |
| 940 | - **Fix contribution page pledge tests to create valid contributions |
| 941 | ([20404](https://github.com/civicrm/civicrm-core/pull/20404))** |
| 942 | |
| 943 | - **Improve cleanup on contact test |
| 944 | ([20248](https://github.com/civicrm/civicrm-core/pull/20248))** |
| 945 | |
| 946 | - **Test fix up for AdditionalPaymentTest |
| 947 | ([20521](https://github.com/civicrm/civicrm-core/pull/20521))** |
| 948 | |
| 949 | - **Test fix - assertion fails when run with other tests (sometimes) |
| 950 | ([20250](https://github.com/civicrm/civicrm-core/pull/20250))** |
| 951 | |
| 952 | - **[Test] Improve cleanup of domain contacts |
| 953 | ([20253](https://github.com/civicrm/civicrm-core/pull/20253))** |
| 954 | |
| 955 | - **Test - fix contributionTest to validate contributions |
| 956 | ([20415](https://github.com/civicrm/civicrm-core/pull/20415))** |
| 957 | |
| 958 | - **Test fixes ([20426](https://github.com/civicrm/civicrm-core/pull/20426))** |
| 959 | |
| 960 | - **Tax fixes in unit test |
| 961 | ([20390](https://github.com/civicrm/civicrm-core/pull/20390))** |
| 962 | |
| 963 | - **[Test] Add test cover for contribution tokens in pdf letter |
| 964 | ([20217](https://github.com/civicrm/civicrm-core/pull/20217))** |
| 965 | |
| 966 | - **Unit test for #20342 |
| 967 | ([20361](https://github.com/civicrm/civicrm-core/pull/20361))** |
| 968 | |
| 969 | - **Add test for mixed Order data |
| 970 | ([20241](https://github.com/civicrm/civicrm-core/pull/20241))** |
| 971 | |
| 972 | - **Add unit test for #20144 |
| 973 | ([20320](https://github.com/civicrm/civicrm-core/pull/20320))** |
| 974 | |
| 975 | - **Superficial tidy up in test class |
| 976 | ([20359](https://github.com/civicrm/civicrm-core/pull/20359))** |
| 977 | |
| 978 | - **[NFC] Remove timecop function references from Cache Tiered Test |
| 979 | ([20343](https://github.com/civicrm/civicrm-core/pull/20343))** |
| 980 | |
| 981 | - **[NFC] Superficial code cleanup |
| 982 | ([20446](https://github.com/civicrm/civicrm-core/pull/20446))** |
| 983 | |
| 984 | - **[NFC] Cleanup in test class |
| 985 | ([20402](https://github.com/civicrm/civicrm-core/pull/20402))** |
| 986 | |
| 987 | - **[NFC] {test} code cleanup in test class |
| 988 | ([20389](https://github.com/civicrm/civicrm-core/pull/20389))** |
| 989 | |
| 990 | - **[NFC] Minor cleanup |
| 991 | ([20387](https://github.com/civicrm/civicrm-core/pull/20387))** |
| 992 | |
| 993 | - **[NFC] Minor code cleanup |
| 994 | ([20386](https://github.com/civicrm/civicrm-core/pull/20386))** |
| 995 | |
| 996 | - **[NFC] Fix PHPUnit8 Deprecation Warnings in api_v3 and Civi Test Suites |
| 997 | ([20380](https://github.com/civicrm/civicrm-core/pull/20380))** |
| 998 | |
| 999 | - **[NFC] [Test] Big cleanup in test class |
| 1000 | ([20374](https://github.com/civicrm/civicrm-core/pull/20374))** |
| 1001 | |
| 1002 | - **[NFC] Fix PHPUnit8 Deprecation warnings in the api_v4 Test Suite |
| 1003 | ([20381](https://github.com/civicrm/civicrm-core/pull/20381))** |
| 1004 | |
| 1005 | - **[NFC] Fix PHPUnit8 Warning notices in E2E And in some API unit tests |
| 1006 | ([20379](https://github.com/civicrm/civicrm-core/pull/20379))** |
| 1007 | |
| 1008 | - **[NFC] Fix PHPUnit8 deprecation warnings in the CRM_AllTests suite |
| 1009 | ([20377](https://github.com/civicrm/civicrm-core/pull/20377))** |
| 1010 | |
| 1011 | - **[NFC] Further cleanup in test class |
| 1012 | ([20372](https://github.com/civicrm/civicrm-core/pull/20372))** |
| 1013 | |
| 1014 | - **[NFC] Add in more voids to unit tests to support PHPUnit8 |
| 1015 | ([20369](https://github.com/civicrm/civicrm-core/pull/20369))** |
| 1016 | |
| 1017 | - **[NFC] [Test] Preliminary cleanup in test class |
| 1018 | ([20371](https://github.com/civicrm/civicrm-core/pull/20371))** |
| 1019 | |
| 1020 | - **[NFC] Add in voids to various setUpBeforeClass and tearDownAfterClass |
| 1021 | functions ([20365](https://github.com/civicrm/civicrm-core/pull/20365))** |
| 1022 | |
| 1023 | - **[NFC] Update PHPUnit config to not cache results in phpunit8 and add more |
| 1024 | voids into PayflowProTest |
| 1025 | ([20356](https://github.com/civicrm/civicrm-core/pull/20356))** |
| 1026 | |
| 1027 | - **[NFC] Add in unit tests of credit card validation rules |
| 1028 | ([20352](https://github.com/civicrm/civicrm-core/pull/20352))** |
| 1029 | |
| 1030 | - **[NFC/TEST] - Add unit test enforcing automatic chaining for financial |
| 1031 | type/account creation via api |
| 1032 | ([20288](https://github.com/civicrm/civicrm-core/pull/20288))** |
| 1033 | |
| 1034 | - **[NFC] Test - Improve tearDown cleanup of domain contacts |
| 1035 | ([20258](https://github.com/civicrm/civicrm-core/pull/20258))** |
| 1036 | |
| 1037 | - **[NFC] Test - fix to use v3 api on postAsserts |
| 1038 | ([20257](https://github.com/civicrm/civicrm-core/pull/20257))** |
| 1039 | |
| 1040 | - **[NFC] Fix phpunit9 deprecation issues on using assertType instead of more |
| 1041 | explicit assertIsArray or AssertIsInt |
| 1042 | ([20567](https://github.com/civicrm/civicrm-core/pull/20567))** |
| 1043 | |
| 1044 | ## <a name="credits"></a>Credits |
| 1045 | |
| 1046 | This release was developed by the following code authors: |
| 1047 | |
| 1048 | AGH Strategies - Alice Frumin, Andie Hunt; Agileware - Justin Freeman; |
| 1049 | Christian Wach; Circle Interactive - Pradeep Nayak; CiviCoop - Jaap Jansma; |
| 1050 | CiviCRM - Coleman Watts, Tim Otten; CompuCorp - Ahed Eid; Coop SymbioTIC - |
| 1051 | Mathieu Lutfy, Samuel Vanhove; Dave D; iXiam - Vangelis Pantazis; JMA |
| 1052 | Consulting - Monish Deb, Seamus Lee; Lemniscus - Noah Miller; Megaphone |
| 1053 | Technology Consulting - Jon Goldberg; MJCO - Mikey O'Toole; MJW Consulting - |
| 1054 | Matthew Wire; Nicol Wistreich; Progressive Technology Project - Jamie |
| 1055 | McClelland; Richard van Oosterhout; Robert J. Lang; Squiffle Consulting - Aidan |
| 1056 | Saunders; Wikimedia Foundation - Eileen McNaughton; Wildsight - Lars |
| 1057 | Sanders-Green |
| 1058 | |
| 1059 | Most authors also reviewed code for this release; in addition, the following |
| 1060 | reviewers contributed their comments: |
| 1061 | |
| 1062 | Agileware - Justin Freeman; Business & Code - Alain Benbassat; CiviDesk - |
| 1063 | Nicolas Ganivet, Yashodha Chaku; CompuCorp - Jamie Novick; Coop SymbioTIC - |
| 1064 | Mathieu Lutfy, Samuel Vanhove; Dave D; Freeform Solutions - Herb van den Dool; |
| 1065 | Fuzion - Jitendra Purohit; Semper IT - Karin Gerritsen; SYSTOPIA |
| 1066 | Organisationsberatung - Björn Endres; Tadpole Collective - Kevin Cristiano |
| 1067 | |
| 1068 | |
| 1069 | ## <a name="feedback"></a>Feedback |
| 1070 | |
| 1071 | These release notes are edited by Alice Frumin and Andie Hunt. If you'd like |
| 1072 | to provide feedback on them, please log in to https://chat.civicrm.org/civicrm |
| 1073 | and contact `@agh1`. |