Skip to content
Switch branches/tags
Go to file
2 contributors

Users who have contributed to this file

@agh1 @alifrumin

CiviCRM 5.41.0

Released September 1, 2021


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


Core CiviCRM

  • [CiviReport] Add "is null" and "is not null" to OP_MULTISELECT_SEPARATOR (dev/core#2652: 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)

    Adds ContributionProduct and EntityBatch as APIv4 entities.

  • Add v4 managed api entity (20932)

    Adds Managed as an APIv4 entity.

  • APIv4 - Better handling of output value using GROUP_CONCAT (20896)

    Improves output formatting of the GROUP_CONCAT sql function in APIv4.

  • Search kit / afform allow default for filters (dev/core#2734: 21005)

    Allows end users to set a default value for fields in SearchKit and Afform.

  • SearchKit - Add links to view/edit/delete relationships (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: 20947)

    Supports SQL functions in the SearchKit UI.

  • SearchKit - Support all fields as tokens (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)

    Makes it possible to range search money fields in SearchKit and Afform UIs.

  • Use template variable to add or remove swap button. (21003)

    Uses template variable to add or remove swap button on the Activity edit form.

  • Add hook for validating checksum (20858)

    Adds a hook that can be called to override/modify checksum validation.

  • Distinguish custom field VIEW from EDIT permissions (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)

    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.


  • Proposal - make future recurring contribution instances modifiable & not fail if the only contribution is deleted. (Work Towards dev/financial#6: 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)

    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)

    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)

    Switches the Membership Browse page from DAO retrieval to using APIv4.

  • Move reCAPTCHA to core extension (Work Towards dev/core#2571: 20315)

    Adds helper functions for reCAPTCHA extension.

  • Move legacy custom search framework to a core extension (dev/core#2721: 20952, 20955 and 20954)

    Moves custom search framework to a core extension.

WordPress Integration

  • Add shortcode support for profile map view (dev/wordpress#106: 252 and 20877)

    Adds support for map view for profiles using shortcodes.

  • Add setup pcp page shortcode (253)

    Makes it possible to insert a PCP page using a shortcode.

  • Added setup pcp page wordpress shortcode (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)

  • Reconcile contribution amount tokens (21036 and 21038)

    Reconcile tokens misnamed or missing on legacy class.

  • Fix advertised token for source (21037)

  • Update contribution_page_id token in sched reminders (21035)

  • Reconcile and upgrade tokens for payment instrument, financial type (21000)

  • Switch contribution action schedule tokens to use advertised tokens for cancel_date & source (20999)

  • Swap {$displayName} smarty for {contact.display_name} token (20867 and 20885)

    Work to make tokens more consistent.

  • Rename legacy token for contribution id to match sched reminder tokens (20998)

  • Give administer CiviCRM data access to administer custom groups (20578)

  • CustomGroup - change admin permission to 'administer CiviCRM data' (20833)

    Fine-tunes the permissions needed to access all custom data.

  • Selection in quick search result list is not visible (dev/user-interface#37: 21102)

  • Redis 6.06 errors - Deprecated function - civicrm 5.38.0 (dev/core#2648: 20587)

  • CiviReport grouping broken wrt filters (dev/core#2684: 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: 20844)

  • Logging skips custom fields if you specify a non-standard table name (dev/core#2709: 20918)

  • Cannot disable contact type/sub-type (dev/core#2710: 20919)

  • Connection fail in runSqlQuery function when using DSN with SSL (dev/core#2726: 20974)

  • Contact Dashboard: relationships: wrong links appear if "Pledges" not displayed (dev/core#2740: 21051)

  • Creating a regular group from advanced search displays commas for the type when looking at the groups listing page (dev/core#2742: 21053)

  • Performance regression in API3 related to campaign_id parameter (dev/core#2743: 21099)

  • APIv4 - Fix dumb typo breaking color lookup (20817)

  • Add test & fix for failing OR clause in apv4 (20906)

  • APIv4 - Fix calculated fields in bridge entities (20908)

  • APIv4 - Fix pseudoconstant matching reliability across joins (20799)

  • APIv4 - Fix and add tests for comparison SQL functions (20893)

  • Fix v4 api to do custom field delete in tearDown (20863)

  • APIv4 - Fix output of membershipType auto_renew field (20840)

  • Afform - Use correct contact type when loading field options (20996)

  • SearchKit - Fix permission to access task list (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)

    Ensures that any scalar value passed as a filter via Afform markup will be auto-applied.

  • SearchKit - fix deprecated join (20968)

  • SearchKit - Fix pager count return value (20878)

  • Make report subtotals work for custom fields (20752)

  • Fix bulk adding custom fields with logging on (21019)

  • Reduce deadlock while inserting custom data for Address (20924)

  • Do not generate a notice when a vcard is downloaded with a non-primary email or non-primary phone number (20993)

  • Fix for failure (fatal error and silent failure) to clean up full text indices (20921)

  • Fix upgrade message when nothing was changed (20994)

  • Upgrade message is scrunched up next to the previous sentence (20986)

  • Add upgrade routine to remove old action schedule token (20978)

  • Improve cleanup on indexer test (20909 and 20920)

    Fix indexes to play nicely with MariaDB.

  • Activity tasks - don't add invalid tasks (20951)

  • Fix databaseSupportsUTF8MB4 (20905)

  • Add ts() function within CRM_Core_Error::statusBounce() method (20857)

  • Greenwich - fix select2 font size (20911)

  • Fix onCrmUiSelect to use current scope and apply to the digest cycle (20879)

  • Also check timestamp types for update() when trying to update a timestamp field with a blank value (326)

  • Fix error message when unable to delete ManagedEntity (20946)

  • Capitalization Fix (20913)

  • Smarty notices for New Activity / New Case for tags for attachments (20957)

  • PHP E_NOTICE during upgrade (20980)

  • Fix PHP notice in recaptcha lib (20899)

  • some typo fixes (20897)

  • PHP notice fixes on options page (20816)

  • Fix a typo in social networking buttons (20839)

  • Enotice fix on extensions page (20801)

  • Smarty notices on logging detail report (20948)

  • Smarty warning about pager location on all CiviReports (20949)

  • Smarty notices - Missing type on logging civireport (20843)

  • Fix undefined tpl vars (20828)

  • Fix undefined tpl variables (20813)

  • Tpl notice fixes (21050)

  • tpl enotice fix (20827)

  • E-notice fix (20830)

  • Enotice fix (21041)

  • Enotice fix (21040)


  • Smarty warnings on Manage Case (21002)

  • Case Dashboard: fix labels on my/all radio buttons, and simplify label text (20958)

  • Move/rename case export files for consistency (20988)


  • Token syntax plan - pseudoconstants (Work Towards dev/core#2650: 20864 and 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: 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: 20852)

  • delocalize total amount before passing to setOverrideTotal (21107)

  • Deprecate guess work in line item handling (20775)

  • Fixes getTemplateContribution to use a more reliable way to load line items (20784)

  • Fix Payment.create to update financial_item.status_id (20941)

  • Fix unit translation for recurring contributions (20308)

  • fix missing 'on behalf of' and honoree labels in multilingual (20482)

  • Fix 'includes tax' translation for PriceSet Checkbox fields (20926)

  • Display configured currency on PCPPage instead of default (20904)

  • Line items not visible on recurring contribution (dev/core#2624: 20399)

    Ensures Line items are visible on recurring contributions.


  • fix crmValidate() not loading on event registration pages (21124)

  • Fix transfer registration to transfer participant_payment row (20670)


  • enable paging if contact has more then 50 grants. (21008)


  • Fix mailing task when there are no tasks (20989)

  • Make final mailing from A/B test same template type and options as A/B so it can be copied (20096)

  • Forward Mailing: remove duplicate buttons, cancel button (20782)


  • Test, enotice fixes, handling for permissions key for Member_Tasks (20944)

  • [regression] Free membership pages fail with "No Payment Processor Selected" (dev/core#2749: 21100)

  • New membership: fix tax amount translation (20979)

Drupal Integration

WordPress Integration

  • WordPress basepage_render shouldn't remove the 'the_content' filter AND CiviCRM Shortcode issue with YoastSEO (dev/wordpress#107 and dev/wordpress#112: 255)

    Reverts the removal of the content filter which caused errors for sites using Avada themes and or the yoast plugin.


  • crmMonaco - Multiple updates. Toward message-template editing. (20786)

  • Enable check on created participant payment rows (20650)

  • Minor simplification - use casting (20847)

  • Mark afform extensions as beta (20821)

  • Add deprecation warning for modifiedDates (20805)

  • Use type hinting for id (20850)

  • CRM_Utils_Array::pathMove - Add helper to move an item within array tree (20866)

  • Extract getCurrentMembership (20882)

  • [REF] Remove references to contribution_invoice_settings (Work Towards dev/core#2719: 20971 and 20862)

  • [REF] Financial record processing - extract to new class to faciliate cleanup (Work Towards dev/core#2715: 20872)

  • Failing api4 test api.v4.Action.CreateWithOptionGroupTest.testWithCustomDataForMultipleContacts (dev/core#2699: 20901)

  • Remove deprecated lines of code (20873)

  • Remove a couple of instances of 'contribution_mode' from tests (20831)

  • Remove deprecated code (20848)

  • Remove never-true-if (20853)

  • Remove non-variable variables (20881)

  • Remove obsolete code (20854)

  • [REF] [Super trivial] -tighten up some casting (20964)

  • [REF] SearchKit - Refactor pick-lists to use onCrmUiSelect directive (20910)

  • [REF] Extract the function to load from the acl table (20868)

  • [REF] Refactor SearchKit displays to inherit traits from a common base (20900)

  • (REF) Extract TokenSmarty::render() from MessageTemplate::renderMessageTemplate() (20870)

  • [REF] Add in smarty modifier to replcae the upper smarty modifier to better handle umlouts / accents (20892)

  • (REF) APIv4 FieldSpec - Extract various traits (Civi\Schema\Traits*) (20875)

  • [REF] Fix functions to be protected (20869)

  • (REF) Civi/Schema - Extract MagicGetterSetterTrait. Add test coverage. (20865)

  • [Ref] Remove never-passed parameter (20871)

  • [REF] Remove some non-variable variables (20874)

  • [REF] Further order api cleanup (20829)

  • [REF] Minor ipn simplification (20718)

  • [REF] Remove unused variables (20834)

  • [REF] Add in APIv4 Product Entity and Fix APIv4 Syntax Conformance test failures on ContributionProduct and EntityBatch APIs (20819)

  • [REF] Simplify isRenew handling on batch for membership (20791)

  • [REF] minor fix - move last of processing before receipting (20969)

  • [Ref] [Test] Move custom search tests to extension (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)

  • [REF] Upgrade CKEditor to 4.16.2 (21108)

  • (NFC) release-notes - Fix typo (21104)

  • [NFC] Fix APIv4 Utf8mb4 test to ensure no mixed collation errors (21013)

  • NFC - Reformat JSON file whitespace in Afform mock ext (20967)

  • [NFC] Remove exceptions from comments (20943)

  • [NFC] Typo in parameter for lybunt test (20934)

  • [NFC] Do a proper tear down of fts in QueryFormatterTest (21004)

  • [NFC/Unit test] - Failing test demonstrating blank timestamp updates (20891)

  • [NFC/Unit test] - Test for #20892 - New smarty plugin crmUpper (20895)

  • [NFC/Unit test] ReportTemplateTest - fix tests that assume setup from a separate test (20887)

  • APIv4 - Add test to ensure superfluous option groups are not created (20902)

  • [Test] Add cover for setting num_terms to 2 (20939)

  • Api test cleanup fixes (20876)

  • Fix test to use valid financials (20956)

  • Fix test to use order api & setup valid financials (20806)

  • Unit test for invalidateChecksum hook (20973)

  • contributor-key.yml: updates for Symbiotic (21044)

  • Update contributor-key.yml (21033)

  • Update contributor-key.yml (20812)

  • Add to contributors file (20842)


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


These release notes are edited by Alice Frumin and Andie Hunt. If you'd like to provide feedback on them, please log in to and contact @agh1.