# CiviCRM 5.41.0 Released September 1, 2021 - **[Synopsis](#synopsis)** - **[Features](#features)** - **[Bugs resolved](#bugs)** - **[Miscellany](#misc)** - **[Credits](#credits)** - **[Feedback](#feedback)** ## Synopsis | *Does this version...?* | | |:--------------------------------------------------------------- |:-------:| | Fix security vulnerabilities? | no | | **Change the database schema?** | **yes** | | **Alter the API?** | **yes** | | **Require attention to configuration options?** | **yes** | | **Fix problems installing or upgrading to a previous version?** | **yes** | | **Introduce features?** | **yes** | | **Fix bugs?** | **yes** | ## Features ### Core CiviCRM - **[CiviReport] Add "is null" and "is not null" to OP_MULTISELECT_SEPARATOR ([dev/core#2652](https://lab.civicrm.org/dev/core/-/issues/2652): [20794](https://github.com/civicrm/civicrm-core/pull/20794))** Makes it possible to filter by `is null` and `is not null` on reports that use OP_MULTISELECT_SEPARATOR. - **Add ContributionProduct and EntityBatch APIv4 Entity ([20505](https://github.com/civicrm/civicrm-core/pull/20505))** Adds `ContributionProduct` and `EntityBatch` as APIv4 entities. - **Add v4 managed api entity ([20932](https://github.com/civicrm/civicrm-core/pull/20932))** Adds `Managed` as an APIv4 entity. - **APIv4 - Better handling of output value using GROUP_CONCAT ([20896](https://github.com/civicrm/civicrm-core/pull/20896))** Improves output formatting of the `GROUP_CONCAT` sql function in APIv4. - **Search kit / afform allow default for filters ([dev/core#2734](https://lab.civicrm.org/dev/core/-/issues/2734): [21005](https://github.com/civicrm/civicrm-core/pull/21005))** Allows end users to set a default value for fields in SearchKit and Afform. - **SearchKit - Add links to view/edit/delete relationships ([20886](https://github.com/civicrm/civicrm-core/pull/20886))** Adds links to view/edit/delete the relationship when joining on related contacts in SearchKit. - **Search kit request - calculated field in display ([dev/core#2704](https://lab.civicrm.org/dev/core/-/issues/2704): [20947](https://github.com/civicrm/civicrm-core/pull/20947))** Supports SQL functions in the SearchKit UI. - **SearchKit - Support all fields as tokens ([20880](https://github.com/civicrm/civicrm-core/pull/20880))** Improves SearchDisplay support for tokens (in link URLs, list labels, and rewritten fields). - **Enable range search for money fields in search kit + afform ([20930](https://github.com/civicrm/civicrm-core/pull/20930))** Makes it possible to range search money fields in SearchKit and Afform UIs. - **Use template variable to add or remove swap button. ([21003](https://github.com/civicrm/civicrm-core/pull/21003))** Uses template variable to add or remove swap button on the Activity edit form. - **Add hook for validating checksum ([20858](https://github.com/civicrm/civicrm-core/pull/20858))** Adds a hook that can be called to override/modify checksum validation. - **Distinguish custom field VIEW from EDIT permissions ([20837](https://github.com/civicrm/civicrm-core/pull/20837))** Fixes the previously blurry distinction between permission to VIEW or EDIT a group of custom fields. - **CRM_Utils_Type::validatePhpType - Helper to validate PHP type expressions ([20923](https://github.com/civicrm/civicrm-core/pull/20923))** Adds a helper for evaluating the type expressions that appear in PHP docblocks. This is a building block for other code that uses docblocks for validation. ### CiviContribute - **Proposal - make future recurring contribution instances modifiable & not fail if the only contribution is deleted. (Work Towards [dev/financial#6](https://lab.civicrm.org/dev/financial/-/issues/6): [20685](https://github.com/civicrm/civicrm-core/pull/20685))** Adds a button to the "Recurring Contributions" tab of the Contact Summary to create/view the template contribution. - **Update label on payment instrument ([20977](https://github.com/civicrm/civicrm-core/pull/20977))** Defines a label "Payment Method" for payment instrument. - **Improve accessibility for price fields of the type select by adding the price field label to the placeholder. ([20927](https://github.com/civicrm/civicrm-core/pull/20927))** Makes placeholder text for price fields of the type select more specific and more accessible by adding the label to them. - **Move financialACLs to a core extension (Work Towards [20768](https://github.com/civicrm/civicrm-core/pull/20768))** Switches the Membership Browse page from DAO retrieval to using APIv4. - **Move reCAPTCHA to core extension (Work Towards [dev/core#2571](https://lab.civicrm.org/dev/core/-/issues/2571): [20315](https://github.com/civicrm/civicrm-core/pull/20315))** Adds helper functions for reCAPTCHA extension. - **Move legacy custom search framework to a core extension ([dev/core#2721](https://lab.civicrm.org/dev/core/-/issues/2721): [20952](https://github.com/civicrm/civicrm-core/pull/20952), [20955](https://github.com/civicrm/civicrm-core/pull/20955) and [20954](https://github.com/civicrm/civicrm-core/pull/20954))** Moves custom search framework to a core extension. ### WordPress Integration - **Add shortcode support for profile map view ([dev/wordpress#106](https://lab.civicrm.org/dev/wordpress/-/issues/106): [252](https://github.com/civicrm/civicrm-wordpress/pull/252) and [20877](https://github.com/civicrm/civicrm-core/pull/20877))** Adds support for map view for profiles using shortcodes. - **Add setup pcp page shortcode ([253](https://github.com/civicrm/civicrm-wordpress/pull/253))** Makes it possible to insert a PCP page using a shortcode. - **Added setup pcp page wordpress shortcode ([20601](https://github.com/civicrm/civicrm-core/pull/20601))** Makes it possible to add a setup a PCP page using a shortcode. ## Bugs resolved ### Core CiviCRM - **Reconcile tokens misnamed or missing on legacy class ([21039](https://github.com/civicrm/civicrm-core/pull/21039))** - **Reconcile contribution amount tokens ([21036](https://github.com/civicrm/civicrm-core/pull/21036) and [21038](https://github.com/civicrm/civicrm-core/pull/21038))** Reconcile tokens misnamed or missing on legacy class. - **Fix advertised token for source ([21037](https://github.com/civicrm/civicrm-core/pull/21037))** - **Update contribution_page_id token in sched reminders ([21035](https://github.com/civicrm/civicrm-core/pull/21035))** - **Reconcile and upgrade tokens for payment instrument, financial type ([21000](https://github.com/civicrm/civicrm-core/pull/21000))** - **Switch contribution action schedule tokens to use advertised tokens for cancel_date & source ([20999](https://github.com/civicrm/civicrm-core/pull/20999))** - **Swap {$displayName} smarty for {contact.display_name} token ([20867](https://github.com/civicrm/civicrm-core/pull/20867) and [20885](https://github.com/civicrm/civicrm-core/pull/20885))** Work to make tokens more consistent. - **Rename legacy token for contribution id to match sched reminder tokens ([20998](https://github.com/civicrm/civicrm-core/pull/20998))** - **Give administer CiviCRM data access to administer custom groups ([20578](https://github.com/civicrm/civicrm-core/pull/20578))** - **CustomGroup - change admin permission to 'administer CiviCRM data' ([20833](https://github.com/civicrm/civicrm-core/pull/20833))** Fine-tunes the permissions needed to access all custom data. - **Selection in quick search result list is not visible ([dev/user-interface#37](https://lab.civicrm.org/dev/user-interface/-/issues/37): [21102](https://github.com/civicrm/civicrm-core/pull/21102))** - **Redis 6.06 errors - Deprecated function - civicrm 5.38.0 ([dev/core#2648](https://lab.civicrm.org/dev/core/-/issues/2648): [20587](https://github.com/civicrm/civicrm-core/pull/20587))** - **CiviReport grouping broken wrt filters ([dev/core#2684](https://lab.civicrm.org/dev/core/-/issues/2684): [20820](https://github.com/civicrm/civicrm-core/pull/20820))** Fixes filters report templates to permit more than one table in a grouping. - **On logging detail report show the words not the numbers ([dev/core#2691](https://lab.civicrm.org/dev/core/-/issues/2691): [20844](https://github.com/civicrm/civicrm-core/pull/20844))** - **Logging skips custom fields if you specify a non-standard table name ([dev/core#2709](https://lab.civicrm.org/dev/core/-/issues/2709): [20918](https://github.com/civicrm/civicrm-core/pull/20918))** - **Cannot disable contact type/sub-type ([dev/core#2710](https://lab.civicrm.org/dev/core/-/issues/2710): [20919](https://github.com/civicrm/civicrm-core/pull/20919))** - **Connection fail in runSqlQuery function when using DSN with SSL ([dev/core#2726](https://lab.civicrm.org/dev/core/-/issues/2726): [20974](https://github.com/civicrm/civicrm-core/pull/20974))** - **Contact Dashboard: relationships: wrong links appear if "Pledges" not displayed ([dev/core#2740](https://lab.civicrm.org/dev/core/-/issues/2740): [21051](https://github.com/civicrm/civicrm-core/pull/21051))** - **Creating a regular group from advanced search displays commas for the type when looking at the groups listing page ([dev/core#2742](https://lab.civicrm.org/dev/core/-/issues/2742): [21053](https://github.com/civicrm/civicrm-core/pull/21053))** - **Performance regression in API3 related to campaign_id parameter ([dev/core#2743](https://lab.civicrm.org/dev/core/-/issues/2743): [21099](https://github.com/civicrm/civicrm-core/pull/21099))** - **APIv4 - Fix dumb typo breaking color lookup ([20817](https://github.com/civicrm/civicrm-core/pull/20817))** - **Add test & fix for failing OR clause in apv4 ([20906](https://github.com/civicrm/civicrm-core/pull/20906))** - **APIv4 - Fix calculated fields in bridge entities ([20908](https://github.com/civicrm/civicrm-core/pull/20908))** - **APIv4 - Fix pseudoconstant matching reliability across joins ([20799](https://github.com/civicrm/civicrm-core/pull/20799))** - **APIv4 - Fix and add tests for comparison SQL functions ([20893](https://github.com/civicrm/civicrm-core/pull/20893))** - **Fix v4 api to do custom field delete in tearDown ([20863](https://github.com/civicrm/civicrm-core/pull/20863))** - **APIv4 - Fix output of membershipType auto_renew field ([20840](https://github.com/civicrm/civicrm-core/pull/20840))** - **Afform - Use correct contact type when loading field options ([20996](https://github.com/civicrm/civicrm-core/pull/20996))** - **SearchKit - Fix permission to access task list ([21045](https://github.com/civicrm/civicrm-core/pull/21045))** Fixes a regression preventing access to the tasks menu in search displays for non-admin users. - **SearchKit - Auto-apply filters passed in from Afform markup ([20758](https://github.com/civicrm/civicrm-core/pull/20758))** Ensures that any scalar value passed as a filter via Afform markup will be auto-applied. - **SearchKit - fix deprecated join ([20968](https://github.com/civicrm/civicrm-core/pull/20968))** - **SearchKit - Fix pager count return value ([20878](https://github.com/civicrm/civicrm-core/pull/20878))** - **Make report subtotals work for custom fields ([20752](https://github.com/civicrm/civicrm-core/pull/20752))** - **Fix bulk adding custom fields with logging on ([21019](https://github.com/civicrm/civicrm-core/pull/21019))** - **Reduce deadlock while inserting custom data for Address ([20924](https://github.com/civicrm/civicrm-core/pull/20924))** - **Do not generate a notice when a vcard is downloaded with a non-primary email or non-primary phone number ([20993](https://github.com/civicrm/civicrm-core/pull/20993))** - **Fix for failure (fatal error and silent failure) to clean up full text indices ([20921](https://github.com/civicrm/civicrm-core/pull/20921))** - **Fix upgrade message when nothing was changed ([20994](https://github.com/civicrm/civicrm-core/pull/20994))** - **Upgrade message is scrunched up next to the previous sentence ([20986](https://github.com/civicrm/civicrm-core/pull/20986))** - **Add upgrade routine to remove old action schedule token ([20978](https://github.com/civicrm/civicrm-core/pull/20978))** - **Improve cleanup on indexer test ([20909](https://github.com/civicrm/civicrm-core/pull/20909) and [20920](https://github.com/civicrm/civicrm-core/pull/20920))** Fix indexes to play nicely with MariaDB. - **Activity tasks - don't add invalid tasks ([20951](https://github.com/civicrm/civicrm-core/pull/20951))** - **Fix databaseSupportsUTF8MB4 ([20905](https://github.com/civicrm/civicrm-core/pull/20905))** - **Add ts() function within CRM_Core_Error::statusBounce() method ([20857](https://github.com/civicrm/civicrm-core/pull/20857))** - **Greenwich - fix select2 font size ([20911](https://github.com/civicrm/civicrm-core/pull/20911))** - **Fix onCrmUiSelect to use current scope and apply to the digest cycle ([20879](https://github.com/civicrm/civicrm-core/pull/20879))** - **Also check timestamp types for update() when trying to update a timestamp field with a blank value ([326](https://github.com/civicrm/civicrm-packages/pull/326))** - **Fix error message when unable to delete ManagedEntity ([20946](https://github.com/civicrm/civicrm-core/pull/20946))** - **Capitalization Fix ([20913](https://github.com/civicrm/civicrm-core/pull/20913))** - **Smarty notices for New Activity / New Case for tags for attachments ([20957](https://github.com/civicrm/civicrm-core/pull/20957))** - **PHP E_NOTICE during upgrade ([20980](https://github.com/civicrm/civicrm-core/pull/20980))** - **Fix PHP notice in recaptcha lib ([20899](https://github.com/civicrm/civicrm-core/pull/20899))** - **some typo fixes ([20897](https://github.com/civicrm/civicrm-core/pull/20897))** - **PHP notice fixes on options page ([20816](https://github.com/civicrm/civicrm-core/pull/20816))** - **Fix a typo in social networking buttons ([20839](https://github.com/civicrm/civicrm-core/pull/20839))** - **Enotice fix on extensions page ([20801](https://github.com/civicrm/civicrm-core/pull/20801))** - **Smarty notices on logging detail report ([20948](https://github.com/civicrm/civicrm-core/pull/20948))** - **Smarty warning about pager location on all CiviReports ([20949](https://github.com/civicrm/civicrm-core/pull/20949))** - **Smarty notices - Missing type on logging civireport ([20843](https://github.com/civicrm/civicrm-core/pull/20843))** - **Fix undefined tpl vars ([20828](https://github.com/civicrm/civicrm-core/pull/20828))** - **Fix undefined tpl variables ([20813](https://github.com/civicrm/civicrm-core/pull/20813))** - **Tpl notice fixes ([21050](https://github.com/civicrm/civicrm-core/pull/21050))** - **tpl enotice fix ([20827](https://github.com/civicrm/civicrm-core/pull/20827))** - **E-notice fix ([20830](https://github.com/civicrm/civicrm-core/pull/20830))** - **Enotice fix ([21041](https://github.com/civicrm/civicrm-core/pull/21041))** - **Enotice fix ([21040](https://github.com/civicrm/civicrm-core/pull/21040))** ### CiviCase - **Smarty warnings on Manage Case ([21002](https://github.com/civicrm/civicrm-core/pull/21002))** - **Case Dashboard: fix labels on my/all radio buttons, and simplify label text ([20958](https://github.com/civicrm/civicrm-core/pull/20958))** - **Move/rename case export files for consistency ([20988](https://github.com/civicrm/civicrm-core/pull/20988))** ### CiviContribute - **Token syntax plan - pseudoconstants (Work Towards [dev/core#2650](https://lab.civicrm.org/dev/core/-/issues/2650): [20864](https://github.com/civicrm/civicrm-core/pull/20864) and [20961](https://github.com/civicrm/civicrm-core/pull/20961))** Adds variations on the token {contribution.contribution_status_id} which support names and labels, i.e. `{contribution.contribution_status_id}`, `{contribution.contribution_status_id:name}` and `{contribution.contribution_status_id:label}`. - **In Accounting Batch it is not filtered by custom fields ([dev/core#2642](https://lab.civicrm.org/dev/core/-/issues/2642): [20556](https://github.com/civicrm/civicrm-core/pull/20556))** Ensures that users can filter Accounting Batch transactions by custom fields. - **Remove all calls to BAO_Contribution::completeOrder other than from Payment.create (Work Towards [dev/core#2693](https://lab.civicrm.org/dev/core/-/issues/2693): [20852](https://github.com/civicrm/civicrm-core/pull/20852))** - **delocalize total amount before passing to setOverrideTotal ([21107](https://github.com/civicrm/civicrm-core/pull/21107))** - **Deprecate guess work in line item handling ([20775](https://github.com/civicrm/civicrm-core/pull/20775))** - **Fixes getTemplateContribution to use a more reliable way to load line items ([20784](https://github.com/civicrm/civicrm-core/pull/20784))** - **Fix Payment.create to update financial_item.status_id ([20941](https://github.com/civicrm/civicrm-core/pull/20941))** - **Fix unit translation for recurring contributions ([20308](https://github.com/civicrm/civicrm-core/pull/20308))** - **fix missing 'on behalf of' and honoree labels in multilingual ([20482](https://github.com/civicrm/civicrm-core/pull/20482))** - **Fix 'includes tax' translation for PriceSet Checkbox fields ([20926](https://github.com/civicrm/civicrm-core/pull/20926))** - **Display configured currency on PCPPage instead of default ([20904](https://github.com/civicrm/civicrm-core/pull/20904))** - **Line items not visible on recurring contribution ([dev/core#2624](https://lab.civicrm.org/dev/core/-/issues/2624): [20399](https://github.com/civicrm/civicrm-core/pull/20399))** Ensures Line items are visible on recurring contributions. ### CiviEvent - **fix crmValidate() not loading on event registration pages ([21124](https://github.com/civicrm/civicrm-core/pull/21124))** - **Fix transfer registration to transfer participant_payment row ([20670](https://github.com/civicrm/civicrm-core/pull/20670))** ### CiviGrant - **enable paging if contact has more then 50 grants. ([21008](https://github.com/civicrm/civicrm-core/pull/21008))** ### CiviMail - **Fix mailing task when there are no tasks ([20989](https://github.com/civicrm/civicrm-core/pull/20989))** - **Make final mailing from A/B test same template type and options as A/B so it can be copied ([20096](https://github.com/civicrm/civicrm-core/pull/20096))** - **Forward Mailing: remove duplicate buttons, cancel button ([20782](https://github.com/civicrm/civicrm-core/pull/20782))** ### CiviMember - **Test, enotice fixes, handling for permissions key for Member_Tasks ([20944](https://github.com/civicrm/civicrm-core/pull/20944))** - **[regression] Free membership pages fail with "No Payment Processor Selected" ([dev/core#2749](https://lab.civicrm.org/dev/core/-/issues/2749): [21100](https://github.com/civicrm/civicrm-core/pull/21100))** - **New membership: fix tax amount translation ([20979](https://github.com/civicrm/civicrm-core/pull/20979))** ### Drupal Integration - **Drupal8 CiviCRM conflicts with Masquerade module ([dev/drupal#54](https://lab.civicrm.org/dev/drupal/-/issues/54): [31](https://github.com/civicrm/civicrm-drupal-8/pull/31))** ### WordPress Integration - **WordPress basepage_render shouldn't remove the 'the_content' filter AND CiviCRM Shortcode issue with YoastSEO ([dev/wordpress#107](https://lab.civicrm.org/dev/wordpress/-/issues/107) and [dev/wordpress#112](https://lab.civicrm.org/dev/wordpress/-/issues/112): [255](https://github.com/civicrm/civicrm-wordpress/pull/255))** Reverts the removal of the content filter which caused errors for sites using Avada themes and or the yoast plugin. ## Miscellany - **crmMonaco - Multiple updates. Toward message-template editing. ([20786](https://github.com/civicrm/civicrm-core/pull/20786))** - **Enable check on created participant payment rows ([20650](https://github.com/civicrm/civicrm-core/pull/20650))** - **Minor simplification - use casting ([20847](https://github.com/civicrm/civicrm-core/pull/20847))** - **Mark afform extensions as beta ([20821](https://github.com/civicrm/civicrm-core/pull/20821))** - **Add deprecation warning for modifiedDates ([20805](https://github.com/civicrm/civicrm-core/pull/20805))** - **Use type hinting for id ([20850](https://github.com/civicrm/civicrm-core/pull/20850))** - **CRM_Utils_Array::pathMove - Add helper to move an item within array tree ([20866](https://github.com/civicrm/civicrm-core/pull/20866))** - **Extract getCurrentMembership ([20882](https://github.com/civicrm/civicrm-core/pull/20882))** - **[REF] Remove references to contribution_invoice_settings (Work Towards [dev/core#2719](https://lab.civicrm.org/dev/core/-/issues/2719): [20971](https://github.com/civicrm/civicrm-core/pull/20971) and [20862](https://github.com/civicrm/civicrm-core/pull/20862))** - **[REF] Financial record processing - extract to new class to faciliate cleanup (Work Towards [dev/core#2715](https://lab.civicrm.org/dev/core/-/issues/2715): [20872](https://github.com/civicrm/civicrm-core/pull/20872))** - **Failing api4 test api.v4.Action.CreateWithOptionGroupTest.testWithCustomDataForMultipleContacts ([dev/core#2699](https://lab.civicrm.org/dev/core/-/issues/2699): [20901](https://github.com/civicrm/civicrm-core/pull/20901))** - **Remove deprecated lines of code ([20873](https://github.com/civicrm/civicrm-core/pull/20873))** - **Remove a couple of instances of 'contribution_mode' from tests ([20831](https://github.com/civicrm/civicrm-core/pull/20831))** - **Remove deprecated code ([20848](https://github.com/civicrm/civicrm-core/pull/20848))** - **Remove never-true-if ([20853](https://github.com/civicrm/civicrm-core/pull/20853))** - **Remove non-variable variables ([20881](https://github.com/civicrm/civicrm-core/pull/20881))** - **Remove obsolete code ([20854](https://github.com/civicrm/civicrm-core/pull/20854))** - **[REF] [Super trivial] -tighten up some casting ([20964](https://github.com/civicrm/civicrm-core/pull/20964))** - **[REF] SearchKit - Refactor pick-lists to use onCrmUiSelect directive ([20910](https://github.com/civicrm/civicrm-core/pull/20910))** - **[REF] Extract the function to load from the acl table ([20868](https://github.com/civicrm/civicrm-core/pull/20868))** - **[REF] Refactor SearchKit displays to inherit traits from a common base ([20900](https://github.com/civicrm/civicrm-core/pull/20900))** - **(REF) Extract TokenSmarty::render() from MessageTemplate::renderMessageTemplate() ([20870](https://github.com/civicrm/civicrm-core/pull/20870))** - **[REF] Add in smarty modifier to replcae the upper smarty modifier to better handle umlouts / accents ([20892](https://github.com/civicrm/civicrm-core/pull/20892))** - **(REF) APIv4 FieldSpec - Extract various traits (Civi\Schema\Traits\*) ([20875](https://github.com/civicrm/civicrm-core/pull/20875))** - **[REF] Fix functions to be protected ([20869](https://github.com/civicrm/civicrm-core/pull/20869))** - **(REF) Civi/Schema - Extract MagicGetterSetterTrait. Add test coverage. ([20865](https://github.com/civicrm/civicrm-core/pull/20865))** - **[Ref] Remove never-passed parameter ([20871](https://github.com/civicrm/civicrm-core/pull/20871))** - **[REF] Remove some non-variable variables ([20874](https://github.com/civicrm/civicrm-core/pull/20874))** - **[REF] Further order api cleanup ([20829](https://github.com/civicrm/civicrm-core/pull/20829))** - **[REF] Minor auth.net ipn simplification ([20718](https://github.com/civicrm/civicrm-core/pull/20718))** - **[REF] Remove unused variables ([20834](https://github.com/civicrm/civicrm-core/pull/20834))** - **[REF] Add in APIv4 Product Entity and Fix APIv4 Syntax Conformance test failures on ContributionProduct and EntityBatch APIs ([20819](https://github.com/civicrm/civicrm-core/pull/20819))** - **[REF] Simplify isRenew handling on batch for membership ([20791](https://github.com/civicrm/civicrm-core/pull/20791))** - **[REF] minor fix - move last of processing before receipting ([20969](https://github.com/civicrm/civicrm-core/pull/20969))** - **[Ref] [Test] Move custom search tests to extension ([20990](https://github.com/civicrm/civicrm-core/pull/20990))** - **[REF] Fix utf8mb4 test in APIv4 and re-enable the altering of database in the v3 version of the test and fix handling for first name field ([21001](https://github.com/civicrm/civicrm-core/pull/21001))** - **[REF] Upgrade CKEditor to 4.16.2 ([21108](https://github.com/civicrm/civicrm-core/pull/21108))** - **(NFC) release-notes - Fix typo ([21104](https://github.com/civicrm/civicrm-core/pull/21104))** - **[NFC] Fix APIv4 Utf8mb4 test to ensure no mixed collation errors ([21013](https://github.com/civicrm/civicrm-core/pull/21013))** - **NFC - Reformat JSON file whitespace in Afform mock ext ([20967](https://github.com/civicrm/civicrm-core/pull/20967))** - **[NFC] Remove exceptions from comments ([20943](https://github.com/civicrm/civicrm-core/pull/20943))** - **[NFC] Typo in parameter for lybunt test ([20934](https://github.com/civicrm/civicrm-core/pull/20934))** - **[NFC] Do a proper tear down of fts in QueryFormatterTest ([21004](https://github.com/civicrm/civicrm-core/pull/21004))** - **[NFC/Unit test] - Failing test demonstrating blank timestamp updates ([20891](https://github.com/civicrm/civicrm-core/pull/20891))** - **[NFC/Unit test] - Test for #20892 - New smarty plugin crmUpper ([20895](https://github.com/civicrm/civicrm-core/pull/20895))** - **[NFC/Unit test] ReportTemplateTest - fix tests that assume setup from a separate test ([20887](https://github.com/civicrm/civicrm-core/pull/20887))** - **APIv4 - Add test to ensure superfluous option groups are not created ([20902](https://github.com/civicrm/civicrm-core/pull/20902))** - **[Test] Add cover for setting num_terms to 2 ([20939](https://github.com/civicrm/civicrm-core/pull/20939))** - **Api test cleanup fixes ([20876](https://github.com/civicrm/civicrm-core/pull/20876))** - **Fix test to use valid financials ([20956](https://github.com/civicrm/civicrm-core/pull/20956))** - **Fix test to use order api & setup valid financials ([20806](https://github.com/civicrm/civicrm-core/pull/20806))** - **Unit test for invalidateChecksum hook ([20973](https://github.com/civicrm/civicrm-core/pull/20973))** - **contributor-key.yml: updates for Symbiotic ([21044](https://github.com/civicrm/civicrm-core/pull/21044))** - **Update contributor-key.yml ([21033](https://github.com/civicrm/civicrm-core/pull/21033))** - **Update contributor-key.yml ([20812](https://github.com/civicrm/civicrm-core/pull/20812))** - **Add to contributors file ([20842](https://github.com/civicrm/civicrm-core/pull/20842))** ## Credits This release was developed by the following code authors: AGH Strategies - Alice Frumin, Andie Hunt; Caltha - Tomasz Pietrzkowski; CiviCoop - Jaap Jansma, Klaas Eikelboom; CiviCRM - Coleman Watts, Tim Otten; CiviDesk - Yashodha Chaku; Coop SymbioTIC - Mathieu Lutfy, Samuel Vanhove; Dave D; Diego Muñio; Erawat Chamanont; Gokhalemethod - Sadashiv; Greenpeace Central and Eastern Europe - Patrick Figel; JMA Consulting - Monish Deb, Seamus Lee; Kartik Kathuria; Lighthouse Consulting and Design - Brian Shaughnessy; Megaphone Technology Consulting - Jon Goldberg; Miguel Almeida; MJW Consulting - Matthew Wire; PERORA SRL - Samuele Masetto; Progressive Technology Project - Jamie McClelland; Tadpole Collective - Kevin Cristiano; Third Sector Design - Kurund Jalmi; Wikimedia Foundation - Eileen McNaughton, Elliott Eggleston; Wildsight - Lars Sanders-Green Most authors also reviewed code for this release; in addition, the following reviewers contributed their comments: a-n The Artists Information Company - William Mortada; ALL IN APPLI; Anatole; Artful Robot - Rich Lott; CEPR - Josh Brown; Christian Wach; CompuCorp - Jamie Novick; Coop SymbioTIC - Shane Bill; enCircle Solutions Ltd - Darren Woods; Fuzion - Jitendra Purohit, Luke Stewart; GValFr35; in2part; JMA Consulting - Joe Murray; jptillman; Makoa - Usha F. Matisson; OPEN - dewy; Squiffle Consulting - Aidan Saunders ## Feedback These release notes are edited by Alice Frumin and Andie Hunt. If you'd like to provide feedback on them, please log in to https://chat.civicrm.org/civicrm and contact `@agh1`.