# CiviCRM 6.20.0 Released November 4, 2026 - **[Synopsis](#synopsis)** - **[Features](#features)** - **[Bugs resolved](#bugs)** - **[Miscellany](#misc)** - **[Credits](#credits)** ## <a name="synopsis"></a>Synopsis | *Does this version...?* | | |:--------------------------------------------------------------- |:-------:| | Fix security vulnerabilities? | no | | **Change the database schema?** | **yes** | | **Alter the API?** | **yes** | | Require attention to configuration options? | no | | **Fix problems installing or upgrading to a previous version?** | **yes** | | **Introduce features?** | **yes** | | **Fix bugs?** | **yes** | ## <a name="features"></a>Features ### Core CiviCRM - **Add implied permission metadata to core components ([36854](https://github.com/civicrm/civicrm-core/pull/36854))** - **Add OrderCompletionMetadata entity ([36237](https://github.com/civicrm/civicrm-core/pull/36237))** - **Restricts the Message Token Login to be active for 2 days maximum ([36521](https://github.com/civicrm/civicrm-core/pull/36521))** Restrict the number of days that a Message Token (Login) link is valid for. The reason being is that this provides a full-access rather than restricted to a specific page like a checksum. So it raises security concerns and clients won't be aware that whatever high number of days they entered in the checksum will also grant that here. - **Set expiration for Complete with Errors imports to one month in the future ([36585](https://github.com/civicrm/civicrm-core/pull/36585))** - **SendPasswordResetEmail: Log more verbose error ([36531](https://github.com/civicrm/civicrm-core/pull/36531))** - **Advertise v4 rather than v3 style custom tokens ([36606](https://github.com/civicrm/civicrm-core/pull/36606))** - **Make notes importable ([36677](https://github.com/civicrm/civicrm-core/pull/36677))** - **Make batch entity importable - add importable fields ([37027](https://github.com/civicrm/civicrm-core/pull/37027))** - **Allow Message Templates to be tagged, via the message_admin extension ([36489](https://github.com/civicrm/civicrm-core/pull/36489))** - **Message Templates - replace the message_admin Angular listing with SearchKit ([36927](https://github.com/civicrm/civicrm-core/pull/36927))** - **Message templates - show draft translations on the workflow listing ([37144](https://github.com/civicrm/civicrm-core/pull/37144))** - **Small improvements for new Message Templates admin ([37259](https://github.com/civicrm/civicrm-core/pull/37259))** - **Tag - Add reverse tag lookup across all taggable entities ([36504](https://github.com/civicrm/civicrm-core/pull/36504))** - **Tag - Add a Tag.merge API action and SearchKit "Merge Tags" bulk task ([36512](https://github.com/civicrm/civicrm-core/pull/36512))** - **SearchKit - Add section_group_by support to list and grid displays ([36560](https://github.com/civicrm/civicrm-core/pull/36560))** - **SearchKit query timeout setting ([36066](https://github.com/civicrm/civicrm-core/pull/36066))** - **AdminUI - Format custom field date columns ([dev/core#6799](https://lab.civicrm.org/dev/core/-/issues/6799): [37047](https://github.com/civicrm/civicrm-core/pull/37047))** - **SearchKit - Improve index handling in DB Entity table displays ([37178](https://github.com/civicrm/civicrm-core/pull/37178))** - **SearchAdmin - Improve handling of non-dao entity joins ([37249](https://github.com/civicrm/civicrm-core/pull/37249))** - **SearchKit - Angular performance improvements ([36988](https://github.com/civicrm/civicrm-core/pull/36988))** - **Add filter to allow modifying Searchkit joins ([36931](https://github.com/civicrm/civicrm-core/pull/36931))** - **SearchKit listing - move the tab strip into a panel heading ([36895](https://github.com/civicrm/civicrm-core/pull/36895))** - **Add a Min Length option to FormBuilder search filter fields ([36573](https://github.com/civicrm/civicrm-core/pull/36573))** - **FormBuilder: settings for token timeout and redirection url ([36291](https://github.com/civicrm/civicrm-core/pull/36291))** - **Form Builder - move the conditional-rules tabs into a panel heading ([36919](https://github.com/civicrm/civicrm-core/pull/36919))** - **Afform - Allow setting values in prefill hook ([37255](https://github.com/civicrm/civicrm-core/pull/37255))** - **Api4 - Order by serialized fields ([32856](https://github.com/civicrm/civicrm-core/pull/32856))** - **Api4Explorer - Dynamically reload options ([37024](https://github.com/civicrm/civicrm-core/pull/37024))** - **CustomField - Improve UX & DX with better metadata ([37013](https://github.com/civicrm/civicrm-core/pull/37013))** - **AdminUI - Move Administer Profiles to core ([36967](https://github.com/civicrm/civicrm-core/pull/36967))** - **Profiles - Add hook_civicrm_ufGroupTypes for registering uf_join modules ([36884](https://github.com/civicrm/civicrm-core/pull/36884))** - **Profiles - Allow the profile settings form to submit in a popup ([36880](https://github.com/civicrm/civicrm-core/pull/36880))** - **hook_civicrm_initiators - Let an initiator describe an existing connection ([36695](https://github.com/civicrm/civicrm-core/pull/36695))** - **Extend pre hook getters to post / postCommit hooks ([36990](https://github.com/civicrm/civicrm-core/pull/36990))** - **allow overriding scheduled job class ([36583](https://github.com/civicrm/civicrm-core/pull/36583))** - **Improve peformance of getEntityStats by using faster method if we hav… ([37076](https://github.com/civicrm/civicrm-core/pull/37076))** - **Navigation - Add option to open in a tab ([37210](https://github.com/civicrm/civicrm-core/pull/37210))** - **oauth-client - Show configured client count on the provider list ([36693](https://github.com/civicrm/civicrm-core/pull/36693))** - **Add help text for disabling logged-in-contact From email ([37279](https://github.com/civicrm/civicrm-core/pull/37279))** - **Add contact type css class to summary screen ([36886](https://github.com/civicrm/civicrm-core/pull/36886))** - **North-Korea-provinces update outdated provinces abbreviations and names ([37283](https://github.com/civicrm/civicrm-core/pull/37283))** - **Jamaica-provinces update outdated provinces abbreviations ([37282](https://github.com/civicrm/civicrm-core/pull/37282))** ### CiviCampaign - **Minor changes to the New Campaign form, adds help texts ([37170](https://github.com/civicrm/civicrm-core/pull/37170))** ### CiviContribute - **allow an admin to set a default contribution status ([dev/core#6867](https://lab.civicrm.org/dev/core/-/issues/6867): [37448](https://github.com/civicrm/civicrm-core/pull/37448))** - **Add core support for more than one Check payment instrument ([dev/core#6654](https://lab.civicrm.org/dev/core/-/issues/6654): [37161](https://github.com/civicrm/civicrm-core/pull/37161))** - **PaymentEdit - support multiple check/credit-card-like payment instruments ([dev/core#6654](https://lab.civicrm.org/dev/core/-/issues/6654): [37287](https://github.com/civicrm/civicrm-core/pull/37287))** - **Update Order.create apiv4 to support multiple lines for one to-be-created entity ([dev/core#6773](https://lab.civicrm.org/dev/core/-/issues/6773): [36941](https://github.com/civicrm/civicrm-core/pull/36941))** - **ContributionPage - add option to set a static redirect in place of dynamic receipt ([36853](https://github.com/civicrm/civicrm-core/pull/36853))** ### CiviEvent - **Use payment form to add payments to pending event ([dev/core#6745](https://lab.civicrm.org/dev/core/-/issues/6745): [36758](https://github.com/civicrm/civicrm-core/pull/36758))** Improves the user interface for adding payments to pending event registrations by adding a link to make a payment. - **Autocomplete - Show event dates and order by most recent ([36776](https://github.com/civicrm/civicrm-core/pull/36776))** ### CiviMail - **provide option to unschedule a Mailing ([dev/core#6816](https://lab.civicrm.org/dev/core/-/issues/6816): [37220](https://github.com/civicrm/civicrm-core/pull/37220))** - **CiviMail - detect a stale recipient count properly and mark it in the UI ([36962](https://github.com/civicrm/civicrm-core/pull/36962))** ### CiviPledge - **Write-off feature for pledges ([dev/core#3871](https://lab.civicrm.org/dev/core/-/issues/3871): [36395](https://github.com/civicrm/civicrm-core/pull/36395))** ### Joomla Integration - **Add event type filtering to eventlisting Joomla menu item ([64](https://github.com/civicrm/civicrm-joomla/pull/64))** ### Standalone Integration - **Standalone - add setting for session garbage collection ([37111](https://github.com/civicrm/civicrm-core/pull/37111))** - **Add standalone logout event ([36882](https://github.com/civicrm/civicrm-core/pull/36882))** - **Standaloneusers - use php standard library password hashing by default ([34308](https://github.com/civicrm/civicrm-core/pull/34308))** ## <a name="bugs"></a>Bugs resolved ### Core CiviCRM - **WorkflowMessage::render - allow rendering non-default templates (eg. original) ([36957](https://github.com/civicrm/civicrm-core/pull/36957))** - **Trim string inputs before saving ([36876](https://github.com/civicrm/civicrm-core/pull/36876))** - **Date format not respected in table view of multiple record custom field group ([dev/core#6799](https://lab.civicrm.org/dev/core/-/issues/6799): [37181](https://github.com/civicrm/civicrm-core/pull/37181))** - **Word Replacements: entering a string with HTML will reset all replacements ([dev/core#600](https://lab.civicrm.org/dev/core/-/issues/600): [36959](https://github.com/civicrm/civicrm-core/pull/36959))** - **Quicksearch is very slow searching by id on large tables ([dev/core#6869](https://lab.civicrm.org/dev/core/-/issues/6869): [37474](https://github.com/civicrm/civicrm-core/pull/37474))** - **Outdated tokens status check - use query params and escape LIKE wildcards ([dev/core#6374](https://lab.civicrm.org/dev/core/-/issues/6374): [37463](https://github.com/civicrm/civicrm-core/pull/37463))** - **SearchKit - Fix missing dropdowns in conditions ([dev/core#6845](https://lab.civicrm.org/dev/core/-/issues/6845): [37371](https://github.com/civicrm/civicrm-core/pull/37371))** - **Add Upgrade step to backfill config.versionCheck configuration for CKEditor ([dev/core#6839](https://lab.civicrm.org/dev/core/-/issues/6839): [37343](https://github.com/civicrm/civicrm-core/pull/37343))** - **Modify EntityFormTrait to fall back on commonRetrieve if retrieve doesn't exist or is deprecated ([dev/core#6835](https://lab.civicrm.org/dev/core/-/issues/6835): [37348](https://github.com/civicrm/civicrm-core/pull/37348))** - **Stop shared-address relationships piling up when disabled ([dev/core#6696](https://lab.civicrm.org/dev/core/-/issues/6696): [36824](https://github.com/civicrm/civicrm-core/pull/36824))** - **Fix mandatory CheckBoxes/CheckBox settings not showing as defaults ([dev/core#6699](https://lab.civicrm.org/dev/core/-/issues/6699): [36821](https://github.com/civicrm/civicrm-core/pull/36821))** - **Block enabling a reserved group without permission ([dev/core#6713](https://lab.civicrm.org/dev/core/-/issues/6713): [36819](https://github.com/civicrm/civicrm-core/pull/36819))** - **SearchKit - Fix link rewrite autofix ([dev/core#6885](https://lab.civicrm.org/dev/core/-/issues/6885): [37652](https://github.com/civicrm/civicrm-core/pull/37652))** - **Filter workflow message templates by language without an extra join for speed ([dev/core#6882](https://lab.civicrm.org/dev/core/-/issues/6882): [37638](https://github.com/civicrm/civicrm-core/pull/37638))** - **Ensure userEntered text is available to the template for back-office message ([dev/core#6731](https://lab.civicrm.org/dev/core/-/issues/6731): [36670](https://github.com/civicrm/civicrm-core/pull/36670))** - **Enable submitOnce on the Edit Contact form ([dev/core#6792](https://lab.civicrm.org/dev/core/-/issues/6792): [37083](https://github.com/civicrm/civicrm-core/pull/37083))** - **move activity assignee notification to BAO layer ([dev/core#6509](https://lab.civicrm.org/dev/core/-/issues/6509), [dev/core#4354](https://lab.civicrm.org/dev/core/-/issues/4354): [35748](https://github.com/civicrm/civicrm-core/pull/35748))** - **SearchKit - Fix typo causing infdig errors ([dev/core#6806](https://lab.civicrm.org/dev/core/-/issues/6806): [37122](https://github.com/civicrm/civicrm-core/pull/37122))** - **Importer - Fix forEach loop on object ([dev/core#6802](https://lab.civicrm.org/dev/core/-/issues/6802): [37116](https://github.com/civicrm/civicrm-core/pull/37116))** - **Afform - Fix default value lookup ([dev/core#6789](https://lab.civicrm.org/dev/core/-/issues/6789): [37011](https://github.com/civicrm/civicrm-core/pull/37011))** - **Fix: tagset tag changes dirty form unnecessarily ([37768](https://github.com/civicrm/civicrm-core/pull/37768))** - **APIv4 - Treat a join on the joined entity's id as explicit ([37778](https://github.com/civicrm/civicrm-core/pull/37778))** - **Managed - fix too-loose matching in OptionValue/SearchDisplay records ([37681](https://github.com/civicrm/civicrm-core/pull/37681))** - **SearchUI - fix too loose matching for managed option value ([37679](https://github.com/civicrm/civicrm-core/pull/37679))** - **Autocomplete: Prevent double query when no results ([37626](https://github.com/civicrm/civicrm-core/pull/37626))** - **Autocomplete: Handle custom fields with option group, multi and single value ([37625](https://github.com/civicrm/civicrm-core/pull/37625))** - **message_admin - fix error saving a template with no tags ([37327](https://github.com/civicrm/civicrm-core/pull/37327))** - **Port: "Change map url to an url that responds." to 6.20 ([37620](https://github.com/civicrm/civicrm-core/pull/37620))** - **Keep the tag tree acyclic when a tag is merged into its descendant ([37616](https://github.com/civicrm/civicrm-core/pull/37616))** - **Import - Re-queue a user job whose interactive run switched its queue off ([37593](https://github.com/civicrm/civicrm-core/pull/37593))** - **Api4 - Fix bugs calculating join paths ([37416](https://github.com/civicrm/civicrm-core/pull/37416))** - **Restore Support for Array value being passed in as a filtervalue in a… ([37569](https://github.com/civicrm/civicrm-core/pull/37569))** - **SearchKit - Smart group panel misses group types (6.19.1 regression) ([37549](https://github.com/civicrm/civicrm-core/pull/37549))** - **APIv4 AJAX - Pass validation messages to the form instead of failing ([37484](https://github.com/civicrm/civicrm-core/pull/37484))** - **afGuiEditor - fix console error passing null fields to filter ([37478](https://github.com/civicrm/civicrm-core/pull/37478))** - **Afform - Fix submissions screen crash on PHP < 8.3 ([37453](https://github.com/civicrm/civicrm-core/pull/37453))** - **SearchKit - Report failed items of a batch task instead of success ([37450](https://github.com/civicrm/civicrm-core/pull/37450))** - **Afform - Apply the filters of a saved filter set when it loads ([37200](https://github.com/civicrm/civicrm-core/pull/37200))** - **Extend guard around CIVICRM_IFRAME constant to theme check ([36613](https://github.com/civicrm/civicrm-core/pull/36613))** - **Fix ActivityContacts being deleted and recreated unnecessarily ([37275](https://github.com/civicrm/civicrm-core/pull/37275))** - **Fix ActivityContact.delete optimization ([37226](https://github.com/civicrm/civicrm-core/pull/37226))** - **Allow language mapping for German language variants (de) ([37296](https://github.com/civicrm/civicrm-core/pull/37296))** - **message_admin - fix editor not rendering for User-Driven templates ([37290](https://github.com/civicrm/civicrm-core/pull/37290))** - **Fixes for message_admin's template editor for user-driven MessageTemplates ([36487](https://github.com/civicrm/civicrm-core/pull/36487))** - **[Afform] Convert relative date filter defaults on submit ([37281](https://github.com/civicrm/civicrm-core/pull/37281))** - **Riverlea: replaces btn-cancel variables with btn-danger ([37248](https://github.com/civicrm/civicrm-core/pull/37248))** - **Dedupe - Roll back the merge when moveAllBelongings() fails ([dev/core#6828](https://lab.civicrm.org/dev/core/-/issues/6828): [37260](https://github.com/civicrm/civicrm-core/pull/37260))** - **SearchKit - Drop a row count that arrives after the filters changed ([37253](https://github.com/civicrm/civicrm-core/pull/37253))** - **Remove English-only ordinals from translated date strings ([dev/core#5175](https://lab.civicrm.org/dev/core/-/issues/5175): [37234](https://github.com/civicrm/civicrm-core/pull/37234))** - **Message templates - clarify full-HTML-document warning, fix legacy sample ([37230](https://github.com/civicrm/civicrm-core/pull/37230))** - **prevent error on SqlCache race condition ([36802](https://github.com/civicrm/civicrm-core/pull/36802))** - **Remove huge class on textareas ([dev/core#6755](https://lab.civicrm.org/dev/core/-/issues/6755): [37169](https://github.com/civicrm/civicrm-core/pull/37169))** - **Afform - Fix number search ranges passed in the URL or as a default ([37198](https://github.com/civicrm/civicrm-core/pull/37198))** - **CSS Only: Set fallback for css variable fix missing admin menu. ([dev/core#6817](https://lab.civicrm.org/dev/core/-/issues/6817): [37195](https://github.com/civicrm/civicrm-core/pull/37195))** - **SearchKit - Use fieldSeparator setting for csv output ([37201](https://github.com/civicrm/civicrm-core/pull/37201))** - **DSN: Treat '0' as a usable DSN component ([37146](https://github.com/civicrm/civicrm-core/pull/37146))** - **Make the classscanner caching work ([37167](https://github.com/civicrm/civicrm-core/pull/37167))** Improves performance by fixing classscanner cache bug. - **ContactSummary - Allow deleting the last website/email/im/phone/oid ([dev/core#6782](https://lab.civicrm.org/dev/core/-/issues/6782): [37171](https://github.com/civicrm/civicrm-core/pull/37171))** - **SearchKit - remove the stray space before the comma in multi-valued link columns ([37164](https://github.com/civicrm/civicrm-core/pull/37164))** - **APIv4 - Return 400 on malformed JSON in AJAX requests ([37165](https://github.com/civicrm/civicrm-core/pull/37165))** - **Riverlea (Thames) - drop the search-display control-bar override ([37138](https://github.com/civicrm/civicrm-core/pull/37138))** - **Fix type hint regression ([37160](https://github.com/civicrm/civicrm-core/pull/37160))** - **CustomField - Fix notices on preview form ([37153](https://github.com/civicrm/civicrm-core/pull/37153))** - **Preserve color/icon/description on af-field select2 options ([37147](https://github.com/civicrm/civicrm-core/pull/37147))** - **Admin forms - Fix editing a record whose BAO no longer has retrieve() ([37143](https://github.com/civicrm/civicrm-core/pull/37143))** - **Fail more gently on bad import mappings ([37137](https://github.com/civicrm/civicrm-core/pull/37137))** - **fix 'is between' operator on SearchKit date filters ([37123](https://github.com/civicrm/civicrm-core/pull/37123))** - **Apply default in tokens even if the entity is missing ([37133](https://github.com/civicrm/civicrm-core/pull/37133))** - **Afform - Respect input_attrs on date search ranges ([37112](https://github.com/civicrm/civicrm-core/pull/37112))** - **Increase BULK_INSERT_HIGH_COUNT ([36453](https://github.com/civicrm/civicrm-core/pull/36453))** - **Fix slow indexing during "in groups" filter followup from pr36659 ([37063](https://github.com/civicrm/civicrm-core/pull/37063))** - **Fix Fields Collision ([37057](https://github.com/civicrm/civicrm-core/pull/37057))** - **ensure CRM.config.entityRef filters are JS arrays ([37028](https://github.com/civicrm/civicrm-core/pull/37028))** - **afForm - support no tokens in replaceTokens ([36998](https://github.com/civicrm/civicrm-core/pull/36998))** - **CustomField - Fix settings form for existing fields ([37044](https://github.com/civicrm/civicrm-core/pull/37044))** - **CustomField - Stricter validation of field types ([37019](https://github.com/civicrm/civicrm-core/pull/37019))** - **Fix Add to Group form when reached from Advanced Search ([37003](https://github.com/civicrm/civicrm-core/pull/37003))** - **Handle validation errors in the Batch template hook ([37015](https://github.com/civicrm/civicrm-core/pull/37015))** - **CustomField - Set step to 'any' for floats & money ([37012](https://github.com/civicrm/civicrm-core/pull/37012))** - **Api4 - Ensure cached get works with row_count ([37010](https://github.com/civicrm/civicrm-core/pull/37010))** - **Afform - Fix silent data loss when Max Length exceeds the field's limit ([36712](https://github.com/civicrm/civicrm-core/pull/36712))** - **SearchKit - Fix sql function UI with non-string inputs ([36987](https://github.com/civicrm/civicrm-core/pull/36987))** - **Fix repeated class attributes on the same element ([36989](https://github.com/civicrm/civicrm-core/pull/36989))** - **SqlGenerator - Do not drop foreign keys while generating SQL ([36980](https://github.com/civicrm/civicrm-core/pull/36980))** - **APIv4 - Fix SQL syntax error when contact group filter resolves to an empty list ([36803](https://github.com/civicrm/civicrm-core/pull/36803))** - **Contact Query - unpack operator arrays in street_address, street_number and notes ([36985](https://github.com/civicrm/civicrm-core/pull/36985))** - **Sort other languages for translations by precedence order ([dev/core#6778](https://lab.civicrm.org/dev/core/-/issues/6778): [36960](https://github.com/civicrm/civicrm-core/pull/36960))** - **Address edge cases in fetching translations ([36929](https://github.com/civicrm/civicrm-core/pull/36929))** - **MessageTemplate.revert - restore the text body, and report what changed ([36924](https://github.com/civicrm/civicrm-core/pull/36924))** - **Handle html_type for custom fields ([dev/core#6750](https://lab.civicrm.org/dev/core/-/issues/6750): [36897](https://github.com/civicrm/civicrm-core/pull/36897))** - **EntityTokens: format custom field tokens once from the prefetched value, deprecate TokenRow::customToken() ([dev/core#6760](https://lab.civicrm.org/dev/core/-/issues/6760): [36852](https://github.com/civicrm/civicrm-core/pull/36852))** - **Riverlea: change colour of selected rows in Contact Merge like Greenwich does ([36887](https://github.com/civicrm/civicrm-core/pull/36887))** - **Setup - Report a malformed database connection string clearly ([36685](https://github.com/civicrm/civicrm-core/pull/36685))** - **searchkit: Add .ng-dirty to CSS validation borders ([36785](https://github.com/civicrm/civicrm-core/pull/36785))** - **Fix warning relating to missing array element "task" ([dev/core#6749](https://lab.civicrm.org/dev/core/-/issues/6749): [36781](https://github.com/civicrm/civicrm-core/pull/36781))** - **APIv4 - Index the temp table behind the "groups" filter so joined searches can probe it ([dev/core#6736](https://lab.civicrm.org/dev/core/-/issues/6736): [36659](https://github.com/civicrm/civicrm-core/pull/36659))** - **fix importing campaign/event ID on a contribution starting with a number ([36477](https://github.com/civicrm/civicrm-core/pull/36477))** - **Accessibility/tabs: Put role=tab on the focusable tab, not the list item ([36766](https://github.com/civicrm/civicrm-core/pull/36766))** - **Filter GenericEntityTokens to only expose by metadata on entityType ([36480](https://github.com/civicrm/civicrm-core/pull/36480))** - **SearchKit - Switch to custom columns when enabling tally ([36747](https://github.com/civicrm/civicrm-core/pull/36747))** - **civiimport - Fail the spreadsheet rule instead of crashing when no file arrived ([36711](https://github.com/civicrm/civicrm-core/pull/36711))** - **oauth-client - Restore the OAuth menu item when the extension is re-enabled ([36694](https://github.com/civicrm/civicrm-core/pull/36694))** - **Notice fix ([36721](https://github.com/civicrm/civicrm-core/pull/36721))** - **Fix initial schema_version for ckeditor4 / status check on error on fresh install ([37349](https://github.com/civicrm/civicrm-core/pull/37349))** - **Fix version check return ([37345](https://github.com/civicrm/civicrm-core/pull/37345))** - **Fix gotchas in deleted-files-list.json ([36619](https://github.com/civicrm/civicrm-core/pull/36619))** - **Fixing missing x button for dialogs ([36660](https://github.com/civicrm/civicrm-core/pull/36660))** - **Fix hidden CiviCRM menu ([36668](https://github.com/civicrm/civicrm-core/pull/36668))** - **Fix GroupContact bulk add misreading a truncated GROUP_CONCAT ([36669](https://github.com/civicrm/civicrm-core/pull/36669))** - **[6.18] kcfinder - fix file type icons ([449](https://github.com/civicrm/civicrm-packages/pull/449))** - **CSS - Fix parse error from accidental comment fragment ([37715](https://github.com/civicrm/civicrm-core/pull/37715))** - **Upgrade - Fix custom groups created during an upgrade getting no table ([37719](https://github.com/civicrm/civicrm-core/pull/37719))** - **Fix Note import ([37726](https://github.com/civicrm/civicrm-core/pull/37726))** - **Upgrade - Fix "no such table" in Rebuild when an extension adds a referencing entity ([37718](https://github.com/civicrm/civicrm-core/pull/37718))** - **Fix performance regression in angular module caching ([37392](https://github.com/civicrm/civicrm-core/pull/37392))** - **Riverlea: removes reference to removed variable, merges selectors ([37397](https://github.com/civicrm/civicrm-core/pull/37397))** - **fix type error in Core_Error class ([37120](https://github.com/civicrm/civicrm-core/pull/37120))** - GroupNesting - Fix undefined array key warning in getDescendentGroupIds() ([37837](https://github.com/civicrm/civicrm-core/pull/37837)) - Auto-open WYSIWYG editor in Message Templates ([37801](https://github.com/civicrm/civicrm-core/pull/37801)) - OAuth UI: Report token refresh failures instead of hiding them ([37231](https://github.com/civicrm/civicrm-core/pull/37231)) - Schema fix for civicrm_country table. ([37793](https://github.com/civicrm/civicrm-core/pull/37793)) ### CiviCampagin - **Fix: Adding a campaign deletes the groups of all etacmanxisting campaigns ([37546](https://github.com/civicrm/civicrm-core/pull/37546))** ### CiviCase - **default to current time when creating a case ([36515](https://github.com/civicrm/civicrm-core/pull/36515))** - **Riverlea: fixes link alignment in CiviCase dashlet ([36700](https://github.com/civicrm/civicrm-core/pull/36700))** ### CiviContribute - **Fix price set edit link to filter by set ([dev/core#6747](https://lab.civicrm.org/dev/core/-/issues/6747): [36813](https://github.com/civicrm/civicrm-core/pull/36813))** - **FormBuilder payments: setting up new recurring forms is broken ([37338](https://github.com/civicrm/civicrm-core/pull/37338))** - **Fix undefined array key in PriceFieldUtils for valueless is_enter_qty fields ([dev/core#6838](https://lab.civicrm.org/dev/core/-/issues/6838): [37308](https://github.com/civicrm/civicrm-core/pull/37308))** - **changeFeeSelections: the reverse-transaction branch has never run, and correcting the name reverses the whole payment ([dev/core#6728](https://lab.civicrm.org/dev/core/-/issues/6728): [36646](https://github.com/civicrm/civicrm-core/pull/36646))** - **changeFeeSelections: reverse only what was omitted, and reverse all of it ([dev/core#6721](https://lab.civicrm.org/dev/core/-/issues/6721): [36633](https://github.com/civicrm/civicrm-core/pull/36633))** - **set contribution_status default if not set ([dev/core#6867](https://lab.civicrm.org/dev/core/-/issues/6867): [37444](https://github.com/civicrm/civicrm-core/pull/37444))** - **Stop offering "Submit Credit Card payment" against a refund balance ([dev/core#6730](https://lab.civicrm.org/dev/core/-/issues/6730): [36816](https://github.com/civicrm/civicrm-core/pull/36816))** - **Don't advance next_sched_contribution_date on a failed payment ([dev/core#6798](https://lab.civicrm.org/dev/core/-/issues/6798): [37081](https://github.com/civicrm/civicrm-core/pull/37081))** - **Increment failure_count on a failed recurring payment ([dev/core#6797](https://lab.civicrm.org/dev/core/-/issues/6797): [37080](https://github.com/civicrm/civicrm-core/pull/37080))** - **Don't require payment details for a $0 confirm-page total ([dev/core#6785](https://lab.civicrm.org/dev/core/-/issues/6785): [37079](https://github.com/civicrm/civicrm-core/pull/37079))** - **Fix permissions in PaymentProcessor.refund and move files to ext ([dev/core#6795](https://lab.civicrm.org/dev/core/-/issues/6795): [37064](https://github.com/civicrm/civicrm-core/pull/37064))** - **Check widget is active before outputting data ([37708](https://github.com/civicrm/civicrm-core/pull/37708))** - **Revert premature force-uninstall of checknumberpaymentmethod, uninstall it from the upgrade step instead ([37291](https://github.com/civicrm/civicrm-core/pull/37291))** - **Scale non_deductible_amount by quantity on the line item ([dev/core#6808](https://lab.civicrm.org/dev/core/-/issues/6808): [37216](https://github.com/civicrm/civicrm-core/pull/37216))** - **Fix recordFees() to always link the fee trxn to the contribution ([37208](https://github.com/civicrm/civicrm-core/pull/37208))** - **Fix BAO_Order::getOverrideTotalAmount() treating an explicit 0 as unset ([37051](https://github.com/civicrm/civicrm-core/pull/37051))** - **Fix Contribution confirm form to pass in the correct membership_id ([37016](https://github.com/civicrm/civicrm-core/pull/37016))** - **fix(payment): preserve entity id in getReturnSuccessUrl to prevent missing id on return ([dev/core#6724](https://lab.civicrm.org/dev/core/-/issues/6724): [36639](https://github.com/civicrm/civicrm-core/pull/36639))** - **Financial - Make Payment::create idempotent for a repeated trxn_id ([36426](https://github.com/civicrm/civicrm-core/pull/36426))** - **Clean up some of the notices on the Sent Invoice form ([34961](https://github.com/civicrm/civicrm-core/pull/34961))** - **Fix APIv4 Payment::create() not persisting custom fields on FinancialTrxn ([36604](https://github.com/civicrm/civicrm-core/pull/36604))** - **Fix changeFeeSelections reversing financial items from a different contribution ([36679](https://github.com/civicrm/civicrm-core/pull/36679))** - **Fix demo data payments not showing - restore contribution-level entity_financial_trxn link ([37706](https://github.com/civicrm/civicrm-core/pull/37706))** ### CiviEvent - **Multi-participant Event Registration corrupts participants state and financial data ([dev/core#6634](https://lab.civicrm.org/dev/core/-/issues/6634): [37570](https://github.com/civicrm/civicrm-core/pull/37570))** - **Fix additional-participant profile fields silently inheriting the primary's ([dev/core#6705](https://lab.civicrm.org/dev/core/-/issues/6705): [36811](https://github.com/civicrm/civicrm-core/pull/36811))** - **Cast operands to int in getParticipantCount() and vali… ([dev/core#6670](https://lab.civicrm.org/dev/core/-/issues/6670): [36818](https://github.com/civicrm/civicrm-core/pull/36818))** - **Fix fatal transferring a participant with an unlinked line item ([dev/core#6691](https://lab.civicrm.org/dev/core/-/issues/6691): [37084](https://github.com/civicrm/civicrm-core/pull/37084))** - **Missing UI to set Tags on Events, despite Tags being configurable as "used for" Events (Work Towards [dev/core#6754](https://lab.civicrm.org/dev/core/-/issues/6754): [36971](https://github.com/civicrm/civicrm-core/pull/36971))** - **Set non-deductible for back-office participant forms ([dev/core#6808](https://lab.civicrm.org/dev/core/-/issues/6808): [37215](https://github.com/civicrm/civicrm-core/pull/37215))** - **Fix "Event Active On" search excluding events already in progress ([dev/core#6386](https://lab.civicrm.org/dev/core/-/issues/6386): [36826](https://github.com/civicrm/civicrm-core/pull/36826))** - **Add validation for the event location fields in event online receipt ([36955](https://github.com/civicrm/civicrm-core/pull/36955))** - **Add validation for the event location fields in event offline receipt ([36913](https://github.com/civicrm/civicrm-core/pull/36913))** - **Fix event registration contribution status on processor payment ([dev/core#6651](https://lab.civicrm.org/dev/core/-/issues/6651), [dev/financial#53](https://lab.civicrm.org/dev/financial/-/issues/53): [36900](https://github.com/civicrm/civicrm-core/pull/36900))** - **Event tokens - guard against fields the event query does not return ([dev/core#6768](https://lab.civicrm.org/dev/core/-/issues/6768): [36860](https://github.com/civicrm/civicrm-core/pull/36860))** - **Fix OnlineEvent getSubmittedValue to not fall back from Additional Participant form to Register (primary participant) ([36831](https://github.com/civicrm/civicrm-core/pull/36831))** - **Use correct type when comparing max_additional_participants ([dev/core#6704](https://lab.civicrm.org/dev/core/-/issues/6704): [36690](https://github.com/civicrm/civicrm-core/pull/36690))** - **Handle currency consistently in event registration ([36790](https://github.com/civicrm/civicrm-core/pull/36790))** - **Fix waitlist message not showing on changeFeeSelection ([36673](https://github.com/civicrm/civicrm-core/pull/36673))** ### CiviMail - Resume started mailing jobs as Running so delivery continues ([37617](https://github.com/civicrm/civicrm-core/pull/37617)) - Add a locking mechanism around the queueMissingRecipients process to ensure only one query is run ([37854](https://github.com/civicrm/civicrm-core/pull/37854)) - **Only requeue deliverable missing mailing recipients, and run their job ([37615](https://github.com/civicrm/civicrm-core/pull/37615))** - **Mailing job permission issue cli mode ([35906](https://github.com/civicrm/civicrm-core/pull/35906))** ### CiviMember - **CiviCRM Membership / Members with Multiple Memberships: Pre-tick every membership the contact holds on the contribution page renewal form, not just the last one ([dev/core#6784](https://lab.civicrm.org/dev/core/-/issues/6784): [36970](https://github.com/civicrm/civicrm-core/pull/36970))** - **Expire inherited memberships of every past relationship on update ([37614](https://github.com/civicrm/civicrm-core/pull/37614))** - **Membership - Fix completed orders storing 1970-01-01 as the status override end date ([37612](https://github.com/civicrm/civicrm-core/pull/37612))** - **Fix sorta-regression on membership create when civi-contribute disabled ([37540](https://github.com/civicrm/civicrm-core/pull/37540))** - **MemberForm - Fix same element being added twice ([37293](https://github.com/civicrm/civicrm-core/pull/37293))** - **MembershipPayment: Count each membership contribution once in the member reports ([37140](https://github.com/civicrm/civicrm-core/pull/37140))** - **Find memberships by line item in the contribution search ([37119](https://github.com/civicrm/civicrm-core/pull/37119))** - **Membership.BAO - do not touch line items if any are linked to a contribution ([37101](https://github.com/civicrm/civicrm-core/pull/37101))** - **Fix memberships being lost or blocking the merge when merging contacts ([36857](https://github.com/civicrm/civicrm-core/pull/36857))** - **Fix recognition date from membership renewal form (master only regression ([37009](https://github.com/civicrm/civicrm-core/pull/37009))** - **Save NULL to membership_type_id on OptionValue form if CiviMember disabled ([dev/core#6431](https://lab.civicrm.org/dev/core/-/issues/6431): [35774](https://github.com/civicrm/civicrm-core/pull/35774))** ### CiviPledge - **Fix pledge amount range search matching as a date field ([dev/core#6752](https://lab.civicrm.org/dev/core/-/issues/6752): [36812](https://github.com/civicrm/civicrm-core/pull/36812))** ### Backdrop Integration - **replace variable_get with config_get ([dev/core#6787](https://lab.civicrm.org/dev/core/-/issues/6787): [37001](https://github.com/civicrm/civicrm-core/pull/37001))** ### Drupal Integration - **Drupal: fix URL language suffixes for multi-lingual ([37021](https://github.com/civicrm/civicrm-core/pull/37021))** - **Fix pseudo constant handler for multi-value fields ([dev/drupal#205](https://lab.civicrm.org/dev/drupal/-/issues/205): [700](https://github.com/civicrm/civicrm-drupal/pull/700))** ### Joomla Integration - **Fix Generating of Permissions when no description is provided in Joomla dismater code ([37186](https://github.com/civicrm/civicrm-core/pull/37186))** - **Update deprecated reference to Joomla\CMS\Filesystem\File ([dev/joomla#61](https://lab.civicrm.org/dev/joomla/-/issues/61): [36937](https://github.com/civicrm/civicrm-core/pull/36937) and [101](https://github.com/civicrm/civicrm-joomla/pull/101))** - **Fix option 2: Remove redundant CRM_Core_Joomla ([dev/core#6742](https://lab.civicrm.org/dev/core/-/issues/6742): [36715](https://github.com/civicrm/civicrm-core/pull/36715))** ### Standalone Integration - **Standalone: don't cache replacements looked up before the DSN ([dev/core#5862](https://lab.civicrm.org/dev/core/-/issues/5862): [37148](https://github.com/civicrm/civicrm-core/pull/37148))** - **Standalone ErrorHandler - skip errors silenced with @ ([dev/core#6084](https://lab.civicrm.org/dev/core/-/issues/6084): [37121](https://github.com/civicrm/civicrm-core/pull/37121))** ### WordPress Integration - **riverlea: Override WordPress min-height on CiviCRM inputs ([36848](https://github.com/civicrm/civicrm-core/pull/36848))** - **Fix WP detection of frontEnd pages ([dev/core#6883](https://lab.civicrm.org/dev/core/-/issues/6883): [37628](https://github.com/civicrm/civicrm-core/pull/37628))** - **Automatically Sign in New User: Breaking Payment Processor transactions ([dev/wordpress#168](https://lab.civicrm.org/dev/wordpress/-/issues/168): [370](https://github.com/civicrm/civicrm-wordpress/pull/370) and [37292](https://github.com/civicrm/civicrm-core/pull/37292))** - **Restrict datatables.js/css broken on CiviCRM dashboard ([dev/wordpress#167](https://lab.civicrm.org/dev/wordpress/-/issues/167): [371](https://github.com/civicrm/civicrm-wordpress/pull/371))** - **fix detailed logs not showing user ID ([369](https://github.com/civicrm/civicrm-wordpress/pull/369))** ## <a name="misc"></a>Miscellany - **Also use getMergedTo for contact imports ([37182](https://github.com/civicrm/civicrm-core/pull/37182))** - **Mark checknumberpaymentmethod extension obsolete ([37256](https://github.com/civicrm/civicrm-core/pull/37256))** - **Remove broken code for offline contribution receipt ([dev/core#6793](https://lab.civicrm.org/dev/core/-/issues/6793): [37023](https://github.com/civicrm/civicrm-core/pull/37023))** - **add Civi::settings helpers to get resolved setting paths/urls ([32797](https://github.com/civicrm/civicrm-core/pull/32797))** - **provide a CIVICRM_DB_CACHE_BASE constant for Redis ([dev/core#6709](https://lab.civicrm.org/dev/core/-/issues/6709): [36589](https://github.com/civicrm/civicrm-core/pull/36589))** - **CRM_Utils_Cache - Use APCu for memory-backed caches when CIVICRM_DB_CACHE_CLASS is APCucache ([37273](https://github.com/civicrm/civicrm-core/pull/37273))** - **Add classes to contribution view ([37233](https://github.com/civicrm/civicrm-core/pull/37233))** - **Add classes to membership ([37264](https://github.com/civicrm/civicrm-core/pull/37264))** - **PR Commands - Set git committer to civicrm-builder when PAT is present ([36753](https://github.com/civicrm/civicrm-core/pull/36753))** - **lodash: Replace the last calls in core ([37251](https://github.com/civicrm/civicrm-core/pull/37251))** - **Core JS - replace lodash calls with native equivalents ([36982](https://github.com/civicrm/civicrm-core/pull/36982))** - **Core Angular - replace lodash calls with native equivalents ([36981](https://github.com/civicrm/civicrm-core/pull/36981))** - **CiviCase - replace lodash calls with native equivalents ([36979](https://github.com/civicrm/civicrm-core/pull/36979))** - **SearchKit - replace lodash calls with native equivalents ([36977](https://github.com/civicrm/civicrm-core/pull/36977))** - **Afform - replace lodash calls with native equivalents ([36976](https://github.com/civicrm/civicrm-core/pull/36976))** - **CiviMail - replace lodash calls with native equivalents ([36974](https://github.com/civicrm/civicrm-core/pull/36974))** - **APIv3 Explorer - replace lodash calls with native equivalents ([36972](https://github.com/civicrm/civicrm-core/pull/36972))** - **Replace lodash collection calls that use shorthand with native equivalents ([36861](https://github.com/civicrm/civicrm-core/pull/36861))** - **lodash: Replace collection calls that take a callback with native equivalents ([36856](https://github.com/civicrm/civicrm-core/pull/36856))** - **Replace lodash _.each and _.forEach with native JavaScript ([36843](https://github.com/civicrm/civicrm-core/pull/36843))** - **Replace removed-in-v4 lodash aliases in civi_mail with native JS ([36571](https://github.com/civicrm/civicrm-core/pull/36571))** - **Replace lodash includes/contains with native Array/String includes() ([36780](https://github.com/civicrm/civicrm-core/pull/36780))** - **Replace lodash array set operations with native equivalents ([36794](https://github.com/civicrm/civicrm-core/pull/36794))** - **Replace lodash positional array helpers with native equivalents ([36795](https://github.com/civicrm/civicrm-core/pull/36795))** - **Replace lodash type checks and string helpers with native equivalents ([36793](https://github.com/civicrm/civicrm-core/pull/36793))** - **Replace lodash _.keys/_.values with Object.keys/Object.values ([36792](https://github.com/civicrm/civicrm-core/pull/36792))** - **Replace lodash _.extend/_.assign with Object.assign ([36791](https://github.com/civicrm/civicrm-core/pull/36791))** - **More lo-dash removal ([36944](https://github.com/civicrm/civicrm-core/pull/36944))** - **Lodash template ([37059](https://github.com/civicrm/civicrm-core/pull/37059))** - **Lodash case converters ([37058](https://github.com/civicrm/civicrm-core/pull/37058))** - **Lodash debounce helper ([37022](https://github.com/civicrm/civicrm-core/pull/37022))** - **Lodash drop unused param ([36878](https://github.com/civicrm/civicrm-core/pull/36878))** - **Clear the last straightforwardly-convertible lodash calls ([37018](https://github.com/civicrm/civicrm-core/pull/37018))** - **Replace the two _.isEqual calls with native comparisons ([37031](https://github.com/civicrm/civicrm-core/pull/37031))** - **SearchKit - replace the two _.merge calls with explicit merges ([37020](https://github.com/civicrm/civicrm-core/pull/37020))** - **Remove trivial _.template() calls with no interpolation ([36702](https://github.com/civicrm/civicrm-core/pull/36702))** - **Add CRM.utils.escapeHtml() and replace all 86 lodash _.escape() calls ([36701](https://github.com/civicrm/civicrm-core/pull/36701))** - **Add CRM.utils.cloneDeep() and convert core-file lodash cloneDeep calls ([36703](https://github.com/civicrm/civicrm-core/pull/36703))** - **Use structuredClone() instead of JSON parse/stringify in SearchKit and Afform ([36774](https://github.com/civicrm/civicrm-core/pull/36774))** - **Use structuredClone() and CRM.utils.cloneDeep() in search_kit instead of lodash ([36772](https://github.com/civicrm/civicrm-core/pull/36772))** - **Use native structuredClone() in ckeditor4, civi_case and chart_kit ([36767](https://github.com/civicrm/civicrm-core/pull/36767))** - **Use native structuredClone() in afform instead of lodash cloneDeep ([36765](https://github.com/civicrm/civicrm-core/pull/36765))** - **Use native structuredClone() in the API Explorers instead of lodash cloneDeep ([36764](https://github.com/civicrm/civicrm-core/pull/36764))** - **JS - Use vanilla JS isArray function ([36896](https://github.com/civicrm/civicrm-core/pull/36896))** - **Remove 8 deprecated functions from CRM_Core_Config and CRM_Core_BAO_Domain ([37036](https://github.com/civicrm/civicrm-core/pull/37036))** - **Remove 8 deprecated functions from CRM_Campaign_BAO_Campaign and CRM_Campaign_BAO_Survey ([37038](https://github.com/civicrm/civicrm-core/pull/37038))** - **Remove 10 deprecated functions from CRM_ACL_API, CRM_ACL_BAO_ACL and CRM_ACL_BAO_ACLEntityRole ([37039](https://github.com/civicrm/civicrm-core/pull/37039))** - **Remove 14 deprecated functions from `CRM_Member_BAO_*` classes ([37042](https://github.com/civicrm/civicrm-core/pull/37042))** - **Remove 7 deprecated functions from CRM_Contribute_BAO_Contribution ([37035](https://github.com/civicrm/civicrm-core/pull/37035))** - **Remove 6 deprecated functions from CRM_Core_BAO_LocationType and CRM_Core_BAO_Website ([37043](https://github.com/civicrm/civicrm-core/pull/37043))** - **Remove 12 deprecated functions from `CRM_Contact_BAO_*` classes ([37068](https://github.com/civicrm/civicrm-core/pull/37068))** - **Remove 12 deprecated functions from `CRM_Core_BAO_*` classes ([37067](https://github.com/civicrm/civicrm-core/pull/37067))** - **Remove 9 deprecated functions from `CRM_Mailing_*` classes ([37069](https://github.com/civicrm/civicrm-core/pull/37069))** - **Remove deprecated functions in Badge, PCP, Case, Report, and Event classes ([37070](https://github.com/civicrm/civicrm-core/pull/37070))** - **Remove deprecated functions in Pledge, Event, and Mailing classes ([37071](https://github.com/civicrm/civicrm-core/pull/37071))** - **Remove 11 deprecated functions from `CRM_Financial_BAO_*` classes ([37065](https://github.com/civicrm/civicrm-core/pull/37065))** - **Remove 6 deprecated functions from `CRM_Price_BAO_*` classes ([37066](https://github.com/civicrm/civicrm-core/pull/37066))** - **Remove deprecated getComponentDetails() ([36925](https://github.com/civicrm/civicrm-core/pull/36925))** - **Remove deprecated dedupe coretables methods ([37132](https://github.com/civicrm/civicrm-core/pull/37132))** - **Remove expired deprecated methods from CRM_Utils (Recent, SQL_TempTable, String, System, Token) ([37129](https://github.com/civicrm/civicrm-core/pull/37129))** - **Remove expired deprecated methods from Core entity BAOs (Address, Phone, IM, OpenID, Job, MailSettings, Mapping) ([37125](https://github.com/civicrm/civicrm-core/pull/37125))** - **Remove expired deprecated methods from CRM_Core_BAO_CustomGroup and CRM_Core_BAO_CustomField ([37127](https://github.com/civicrm/civicrm-core/pull/37127))** - **Remove expired deprecated BAO methods (Email, Note, Cache, UFField, UFGroup, Navigation) ([37131](https://github.com/civicrm/civicrm-core/pull/37131))** - **Remove expired deprecated methods from CRM_Core_BAO_UFMatch, Location, PreferencesDate, and ActionSchedule ([37128](https://github.com/civicrm/civicrm-core/pull/37128))** - **Remove explicitly deprecated MessageTemplate assignments ([36665](https://github.com/civicrm/civicrm-core/pull/36665))** - **Remove some code deprecated in 2020 from BaseIPN ([36732](https://github.com/civicrm/civicrm-core/pull/36732))** - **Remove final calls to replaceMailingTokens, unmatchedTokens ([36414](https://github.com/civicrm/civicrm-core/pull/36414))** - **Remove flawed invoice ID handling ([37099](https://github.com/civicrm/civicrm-core/pull/37099))** - **Remove unused legacy BAO alias stubs ([37156](https://github.com/civicrm/civicrm-core/pull/37156))** - **Remove deprecated Contact_Form_Edit block helpers (IM, OpenID, Phone) ([37157](https://github.com/civicrm/civicrm-core/pull/37157))** - **Remove dead calls to the deprecated Backbone profile editor ([36862](https://github.com/civicrm/civicrm-core/pull/36862))** - **Remove call to deprecated price set functions from event cart ([36686](https://github.com/civicrm/civicrm-core/pull/36686))** - **Remove unused CRM_Contact_Form_Edit_Email ([36845](https://github.com/civicrm/civicrm-core/pull/36845))** - **Delete unused deprecated class CRM_Contact_Form_Edit_CustomData ([37155](https://github.com/civicrm/civicrm-core/pull/37155))** - **Settings - remove deprecated handling for contribution_invoice_settings ([37212](https://github.com/civicrm/civicrm-core/pull/37212))** - **BAO_Membership - remove functionality from deprecated parameters ([36751](https://github.com/civicrm/civicrm-core/pull/36751))** - **Deprecate the civicrm_membership_payment join in CRM_Member_BAO_Query ([36926](https://github.com/civicrm/civicrm-core/pull/36926))** - **Deprecate passing incomplete line items into Contribution.create ([36994](https://github.com/civicrm/civicrm-core/pull/36994))** - **Deprecate CRM_Core_BAO_OptionGroup::add() ([36885](https://github.com/civicrm/civicrm-core/pull/36885))** - **Deprecate CRM_SMS_BAO_SmsProvider::create() ([36877](https://github.com/civicrm/civicrm-core/pull/36877))** - **UFGroup - Deprecate unused function ([37007](https://github.com/civicrm/civicrm-core/pull/37007))** - **Add warning to deprecated function CRM_Utils_Time::getTimeRaw ([37150](https://github.com/civicrm/civicrm-core/pull/37150))** - **Fix deprecated function calls, add warnings ([37154](https://github.com/civicrm/civicrm-core/pull/37154))** - **CRM_Contact_BAO_SubscriptionHistory::create - deprecate and use writeRecord ([36907](https://github.com/civicrm/civicrm-core/pull/36907))** - **CRM_Contact_BAO_Group::create - deprecate and use writeRecord ([36909](https://github.com/civicrm/civicrm-core/pull/36909))** - **CRM_Pledge_BAO_PledgePayment::create - Deprecate and use writeRecord ([36872](https://github.com/civicrm/civicrm-core/pull/36872))** - **CRM_Price_BAO_PriceField::add - Deprecate and use writeRecord ([36869](https://github.com/civicrm/civicrm-core/pull/36869))** - **CRM_Case_BAO_Case::create, add - Deprecate and use writeRecord ([36899](https://github.com/civicrm/civicrm-core/pull/36899))** - **CRM_Event_Cart_BAO_Cart::add - Deprecate and use writeRecord ([36894](https://github.com/civicrm/civicrm-core/pull/36894))** - **CRM_OAuth_BAO_OAuthContactToken - Deprecate create() and del() ([36893](https://github.com/civicrm/civicrm-core/pull/36893))** - **CRM_Core_BAO_ActionLog::create - Deprecate and use writeRecord ([36874](https://github.com/civicrm/civicrm-core/pull/36874))** - **CRM_Core_BAO_Log::add - Deprecate and use writeRecord ([36873](https://github.com/civicrm/civicrm-core/pull/36873))** - **CRM_Core_BAO_Discount::add - Deprecate and use writeRecord ([36870](https://github.com/civicrm/civicrm-core/pull/36870))** - **CRM_Member_BAO_MembershipLog::add - Deprecate and use writeRecord ([36871](https://github.com/civicrm/civicrm-core/pull/36871))** - **CRM_Mailing_BAO_MailingAB::create - Deprecate and use writeRecord ([36875](https://github.com/civicrm/civicrm-core/pull/36875))** - **Use writeRecord not create in codegen ([37102](https://github.com/civicrm/civicrm-core/pull/37102))** - **Use writeRecord to create template line items rather than using a hack to by-pass what create does ([37095](https://github.com/civicrm/civicrm-core/pull/37095))** - **Switch SelfSvcTransfer to call FinancialItem::writeRecord ([37085](https://github.com/civicrm/civicrm-core/pull/37085))** - **Legacyprofiles - Move code out of core and clean up ([36975](https://github.com/civicrm/civicrm-core/pull/36975))** - **Remove unreferenced importProgress.tpl ([37032](https://github.com/civicrm/civicrm-core/pull/37032))** - **Remove dead code from Financial Processor (changeFeeSelection flow) ([36938](https://github.com/civicrm/civicrm-core/pull/36938))** - **Remove some more legacy variables from OfflineContributionReceipt ([37091](https://github.com/civicrm/civicrm-core/pull/37091))** - **Remove dated define ([37090](https://github.com/civicrm/civicrm-core/pull/37090))** - **Remove interactions with unused $params, move non-shared code into caller ([37053](https://github.com/civicrm/civicrm-core/pull/37053))** - **remove unreachable code ([37062](https://github.com/civicrm/civicrm-core/pull/37062))** - **Remove dead getAmountLevel() and tax_amount session round-trip ([37289](https://github.com/civicrm/civicrm-core/pull/37289))** - **Remove dead payment_instrument_id showHideByValue toggles ([37271](https://github.com/civicrm/civicrm-core/pull/37271))** - **Remove dead CRM_Core_BAO_Discount _values['discount'] handling from Registration wizard ([37246](https://github.com/civicrm/civicrm-core/pull/37246))** - **Remove unused variables, use function for participantIndex ([37224](https://github.com/civicrm/civicrm-core/pull/37224))** - **Remove compressed layout on CiviCase Activity and EditClient ([37152](https://github.com/civicrm/civicrm-core/pull/37152))** - **Remove unused defaultRole template variable ([37222](https://github.com/civicrm/civicrm-core/pull/37222))** - **[REF] Remove unused showHide code from AdditionalPayment.tpl ([37303](https://github.com/civicrm/civicrm-core/pull/37303))** - **SearchEvent - Switch to jQuery instead of showHide.tpl ([37302](https://github.com/civicrm/civicrm-core/pull/37302))** - **Stop assigning some unused online receipt template variables ([36678](https://github.com/civicrm/civicrm-core/pull/36678))** - **Remove participant-payment & membership-payment fall back from ComposeMessage array ([36867](https://github.com/civicrm/civicrm-core/pull/36867))** - **Remove redundant ParticipantPayment create in confirmPostProcess() ([36849](https://github.com/civicrm/civicrm-core/pull/36849))** - **Remove unnecessary pass-by-ref ([36850](https://github.com/civicrm/civicrm-core/pull/36850))** - **Remove unecessary pass-by-reference ([36841](https://github.com/civicrm/civicrm-core/pull/36841))** - **Remove unused function ([36838](https://github.com/civicrm/civicrm-core/pull/36838))** - **Remove redundant mapParams() call in CRM_Event_Form_Participant::submit() ([36829](https://github.com/civicrm/civicrm-core/pull/36829))** - **Remove confusing & unnecessary use of fields array when retrieving existing profile contact values ([36782](https://github.com/civicrm/civicrm-core/pull/36782))** - **remove redundant template assigns ([36777](https://github.com/civicrm/civicrm-core/pull/36777))** - **Remove dead $_fields billing loops from AbstractEditPayment and Participant ([36768](https://github.com/civicrm/civicrm-core/pull/36768))** - **Remove irrelevant previously shared code fr0om back office contribution form ([36757](https://github.com/civicrm/civicrm-core/pull/36757))** - **Remove dead assignBillingName() call from processBillingAddress() from back office forms ([36754](https://github.com/civicrm/civicrm-core/pull/36754))** - **Event - Remove dead profile-selector JS from Registration tab ([36864](https://github.com/civicrm/civicrm-core/pull/36864))** - **Campaign - Remove write-only $_single from Survey form ([36863](https://github.com/civicrm/civicrm-core/pull/36863))** - **Stop setting unused property, remove another unused property ([37074](https://github.com/civicrm/civicrm-core/pull/37074))** - **Per code comments remove some legacy lines ([37217](https://github.com/civicrm/civicrm-core/pull/37217))** - **Per code comment get rid of 'individual' variable ([37126](https://github.com/civicrm/civicrm-core/pull/37126))** - **Stop setting unused typo ([36742](https://github.com/civicrm/civicrm-core/pull/36742))** - **Stop setting tax_amount in contributionParams ([36786](https://github.com/civicrm/civicrm-core/pull/36786))** - **Stop configuring Fields array now we know it is not needed ([36783](https://github.com/civicrm/civicrm-core/pull/36783))** - **Stop passing fields into createProfileContact for billing ([36784](https://github.com/civicrm/civicrm-core/pull/36784))** - **Stop passing participant values using relatedObjects ([36868](https://github.com/civicrm/civicrm-core/pull/36868))** - **Stop passing BAO objects around back-office participant form ([37093](https://github.com/civicrm/civicrm-core/pull/37093))** - **Stop passing `$params` by reference in updateFinancialAccounts ([36910](https://github.com/civicrm/civicrm-core/pull/36910))** - **Stop processBillingAddress relying on payment mode or $this->_params ([36805](https://github.com/civicrm/civicrm-core/pull/36805))** - **Stop passing isTest into getProfileDisplay ([36716](https://github.com/civicrm/civicrm-core/pull/36716))** - **Pass variable directly into function rather than by set() get() dance ([36789](https://github.com/civicrm/civicrm-core/pull/36789))** - **Afform - remove unnecessary clientside data ([37206](https://github.com/civicrm/civicrm-core/pull/37206))** - **Move calculation of lines to adjust to financial processor ([36684](https://github.com/civicrm/civicrm-core/pull/36684))** - **Move FinancialProcessing functions to FinancialProcessor ([36901](https://github.com/civicrm/civicrm-core/pull/36901))** - **Move change-fee-selection processing into FinancialProcessor ([36914](https://github.com/civicrm/civicrm-core/pull/36914))** - **Call FinancialProcessor's change-fee-selection helpers non-statically ([36906](https://github.com/civicrm/civicrm-core/pull/36906))** - **Have changeFeeSelections() callers build submittedLineItems themselves ([36879](https://github.com/civicrm/civicrm-core/pull/36879))** - **Fix the signature for changeFeeSelection to expect all the contributions line items ([36921](https://github.com/civicrm/civicrm-core/pull/36921))** - **REF cleanup in changeFeeSelection ([36682](https://github.com/civicrm/civicrm-core/pull/36682))** - **Simplify line item delete ([36883](https://github.com/civicrm/civicrm-core/pull/36883))** - **Fold createFinancialItemsForLine back into only caller ([37227](https://github.com/civicrm/civicrm-core/pull/37227))** - **Fold assignProportionalLineItems back into only caller ([37179](https://github.com/civicrm/civicrm-core/pull/37179))** - **Fold createProportionalFinancialEntries back into only caller ([37174](https://github.com/civicrm/civicrm-core/pull/37174))** - **Fold createProportionalEntity back into caller ([37104](https://github.com/civicrm/civicrm-core/pull/37104))** - **Fold instance of addParticipant back into saveOrder ([36917](https://github.com/civicrm/civicrm-core/pull/36917))** - **Make createDeferredTrxn fetch its own line items and financial item ids ([37268](https://github.com/civicrm/civicrm-core/pull/37268))** - **Flatten and fix createDeferredTrxn's confusing skip condition ([37173](https://github.com/civicrm/civicrm-core/pull/37173))** - **Consolidate handling of deferredTrxn ([37151](https://github.com/civicrm/civicrm-core/pull/37151))** - **Flatten recordAlwaysAccountsReceivable's double-negative gate ([37180](https://github.com/civicrm/civicrm-core/pull/37180))** - **Simplify recordAlwaysAccountsReceivable ([37207](https://github.com/civicrm/civicrm-core/pull/37207))** - **Add helper to getAccountsReceivableAccount to financial processor ([37265](https://github.com/civicrm/civicrm-core/pull/37265))** - **Copy FinancialItem::add back to the financial processor ([37267](https://github.com/civicrm/civicrm-core/pull/37267))** - **Flatten line items within the financial processor ([37209](https://github.com/civicrm/civicrm-core/pull/37209))** - **Add updatedLineItems as a FinancialProcessor constructor input ([37176](https://github.com/civicrm/civicrm-core/pull/37176))** - **Consolidate FinancialItem creation within Financial processor ([37103](https://github.com/civicrm/civicrm-core/pull/37103))** - **Do line item grooming before calling createLineItems in financialProcessor ([36942](https://github.com/civicrm/civicrm-core/pull/36942))** - **Clean up record fees ([37094](https://github.com/civicrm/civicrm-core/pull/37094))** - **Move the filling on missing line item data earlier ([37008](https://github.com/civicrm/civicrm-core/pull/37008))** - **Use BAO Order to load all line items in BAO_Contribution ([37088](https://github.com/civicrm/civicrm-core/pull/37088))** - **Extract getFullLineItems within BAO_Contribution.add ([37006](https://github.com/civicrm/civicrm-core/pull/37006))** - **Split getLineItemsToAlter's add case out into getLineItemsToAdd ([36995](https://github.com/civicrm/civicrm-core/pull/36995))** - **Add getter for getPanTruncation, getCardTypeID ([37097](https://github.com/civicrm/civicrm-core/pull/37097))** - **Use consistent back-office helper for getPanTruncation ([36770](https://github.com/civicrm/civicrm-core/pull/36770))** - **Simplify createContrib check to use BAO_Order & check for line items ([37072](https://github.com/civicrm/civicrm-core/pull/37072))** - **Move ContributionPage validation back to ContributionPage ([37078](https://github.com/civicrm/civicrm-core/pull/37078))** - **Update ContributionPage.submit to not rely on form hacks ([37017](https://github.com/civicrm/civicrm-core/pull/37017))** - **Simplify card assignment in back office form ([36903](https://github.com/civicrm/civicrm-core/pull/36903))** - **Copy recordMembershipContribution back to remaining callers, deprecate ([36905](https://github.com/civicrm/civicrm-core/pull/36905))** - **Replace processPriceSet() call in Membership::create with LineItem::save ([36825](https://github.com/civicrm/civicrm-core/pull/36825))** - **Convert BAO_membership:create to using apiv4 ([36746](https://github.com/civicrm/civicrm-core/pull/36746))** - **Clean up BAO_Membership::create ([37238](https://github.com/civicrm/civicrm-core/pull/37238))** - **Finish removing ids array from MembershipCreate, remove pass by ref ([37237](https://github.com/civicrm/civicrm-core/pull/37237))** - **Use Membership::save() api4 instead of direct BAO::create() in relAction ([36830](https://github.com/civicrm/civicrm-core/pull/36830))** - **Use apiv4 for Membership update in processOverriddenUntilDateMembership ([36738](https://github.com/civicrm/civicrm-core/pull/36738))** - **Update function updateDeceasedMembersStatuses to Membership apiv4 ([36736](https://github.com/civicrm/civicrm-core/pull/36736))** - **Switch createRelatedMemberships() deceased/expired branch to apiv4 ([36733](https://github.com/civicrm/civicrm-core/pull/36733))** - **Convert contributioncancel actions to apiv4 Membership.create ([36728](https://github.com/civicrm/civicrm-core/pull/36728))** - **Extract CRM_Member_BAO_Membership::getCalculatedDates(), switch OrderCompleteSubscriber to apiv4 ([36727](https://github.com/civicrm/civicrm-core/pull/36727))** - **Switch v3 Profile.Submit api to use Order for membership ([36741](https://github.com/civicrm/civicrm-core/pull/36741))** - **MembershipRenewal form: use APIv4 Order::create for the renewal contribution ([35584](https://github.com/civicrm/civicrm-core/pull/35584))** - **Construct membership renewal line items via CRM_Financial_BAO_Order ([36993](https://github.com/civicrm/civicrm-core/pull/36993))** - **Extract getNumRenewTerms on membership renewal form ([36943](https://github.com/civicrm/civicrm-core/pull/36943))** - **Move getPaymentProcessorID to shared CRM_Member_Form, fix MembershipRenawal to use it ([37218](https://github.com/civicrm/civicrm-core/pull/37218))** - **MembershipRenewal - use shared getMembershipTypeID()/getMembershipTypeValue() ([37219](https://github.com/civicrm/civicrm-core/pull/37219))** - **CRM_Member_Form_Membership - switch online-payment order creation from v3 to v4 Order api ([37221](https://github.com/civicrm/civicrm-core/pull/37221))** - **Standardise getOrder() on the membership forms ([37277](https://github.com/civicrm/civicrm-core/pull/37277))** - **Start to extract getContributionValues on membership forms ([37228](https://github.com/civicrm/civicrm-core/pull/37228))** - **Clarity membership type access in BackOffice membership forms ([36969](https://github.com/civicrm/civicrm-core/pull/36969))** - **contact-merge delete membership contributions - use LineItems instead of MembershipPayment ([37117](https://github.com/civicrm/civicrm-core/pull/37117))** - **Switch back office participant form to use Api4 Order::create in saveOrder() ([37124](https://github.com/civicrm/civicrm-core/pull/37124))** - **Back office participant form - Switch Participant.create to Api4 and save custom data inline ([37100](https://github.com/civicrm/civicrm-core/pull/37100))** - **Backoffice form - extract processParticipant ([37054](https://github.com/civicrm/civicrm-core/pull/37054))** - **Extract sendEmail on participant form ([37026](https://github.com/civicrm/civicrm-core/pull/37026))** - **Move sending of participant emails to within the loop ([37050](https://github.com/civicrm/civicrm-core/pull/37050))** - **Participant_Form (backoffice) - clean up previously shared code to write the activity subject ([37025](https://github.com/civicrm/civicrm-core/pull/37025))** - **Participant form - switch to simpler call to create activity ([36839](https://github.com/civicrm/civicrm-core/pull/36839))** - **Particpant form - use shared processBillingAddress ([36827](https://github.com/civicrm/civicrm-core/pull/36827))** - **Re-organise IF on participant form ([36846](https://github.com/civicrm/civicrm-core/pull/36846))** - **Extract getParticipantIndex ([36842](https://github.com/civicrm/civicrm-core/pull/36842))** - **Use getContactID() instead of $this->_contactId in Participant::postProcess() ([36806](https://github.com/civicrm/civicrm-core/pull/36806))** - **Move backoffice participant form paid event check from postProcess to validate ([36804](https://github.com/civicrm/civicrm-core/pull/36804))** - **Move add participant to saveOrder ([36800](https://github.com/civicrm/civicrm-core/pull/36800))** - **Move line item saving to saveOrder ([36798](https://github.com/civicrm/civicrm-core/pull/36798))** - **ParticipantForm consolidate saveOrder code ([36797](https://github.com/civicrm/civicrm-core/pull/36797))** - **Consolidate to one call to saveOrder on backoffice participant form ([36865](https://github.com/civicrm/civicrm-core/pull/36865))** - **Tidy up some of the contactID mess in participant form ([36788](https://github.com/civicrm/civicrm-core/pull/36788))** - **Extract and consolidation compilation of contributionValues on participant form ([36787](https://github.com/civicrm/civicrm-core/pull/36787))** - **[Ref] Back office participan record - better use of helpers to get contribution values ([36769](https://github.com/civicrm/civicrm-core/pull/36769))** - **REF Backoffice Contribution form - use helpers to build contributionValues ([36756](https://github.com/civicrm/civicrm-core/pull/36756))** - **[REF] Reduce passing of unnecessary params to function from previously shared code ([36755](https://github.com/civicrm/civicrm-core/pull/36755))** - **Ref: participant form extract getPaymentParams ([36847](https://github.com/civicrm/civicrm-core/pull/36847))** - **[REF] fold processContribution back into only caller ([36837](https://github.com/civicrm/civicrm-core/pull/36837))** - **[REF] Fix static call to non-static function ([36810](https://github.com/civicrm/civicrm-core/pull/36810))** - **Extract doPayment ([36844](https://github.com/civicrm/civicrm-core/pull/36844))** - **Minor extraction - remove unneeded '$form' variable ([36866](https://github.com/civicrm/civicrm-core/pull/36866))** - **Fix moved functions not to be static ([36997](https://github.com/civicrm/civicrm-core/pull/36997))** - **Clean-up passing of values into confirmPostProcess - event online registration form ([36902](https://github.com/civicrm/civicrm-core/pull/36902))** - **Use temporary instance of BAO_Order rather than deprecated function during form validation ([36799](https://github.com/civicrm/civicrm-core/pull/36799))** - **Use BAO_Order rather than deprecated function to calcuate amount in registration validation ([36739](https://github.com/civicrm/civicrm-core/pull/36739))** - **Introduce multi-form BAO_Order calculation for online events ([36832](https://github.com/civicrm/civicrm-core/pull/36832))** - **Start to user Order object rather than confusing variable passing on online event form ([36923](https://github.com/civicrm/civicrm-core/pull/36923))** - **Use Order create for event cart ([36689](https://github.com/civicrm/civicrm-core/pull/36689))** - **Make order->setPriceSelectionFromUnfilteredInput fluent ([36719](https://github.com/civicrm/civicrm-core/pull/36719))** - **Move Payment processing until after Order create on online event form ([37098](https://github.com/civicrm/civicrm-core/pull/37098))** - **Start to use BAO_Order helpers in online event (Confirm) ([37107](https://github.com/civicrm/civicrm-core/pull/37107))** - **Consolidate is_pay_later resolution in the Online event forms ([37109](https://github.com/civicrm/civicrm-core/pull/37109))** - **Use getEventValue helper for getting is_pay_later from the event ([37108](https://github.com/civicrm/civicrm-core/pull/37108))** - **Add getSubmittedParticipantValue(s) helpers to CRM_Event_Form_Registration ([37183](https://github.com/civicrm/civicrm-core/pull/37183))** - **Simplify register_date in online event form ([37149](https://github.com/civicrm/civicrm-core/pull/37149))** - **Rationalise handling of participant role Id in front end event forms ([37223](https://github.com/civicrm/civicrm-core/pull/37223))** - **Resolve participant/contribution campaign_id via standardised helper ([37225](https://github.com/civicrm/civicrm-core/pull/37225))** - **Consolidate the profile checking part of event registration validate ([36720](https://github.com/civicrm/civicrm-core/pull/36720))** - **Standardise isPaidEvent() on event registration forms ([36717](https://github.com/civicrm/civicrm-core/pull/36717))** - **Refactor OpenCase processing to be closer to CRM_Activity_Form_Activity ([37274](https://github.com/civicrm/civicrm-core/pull/37274))** - **[REF] Simplify CRM_Core_BAO_CustomField::getTableColumnGroup + tests ([37229](https://github.com/civicrm/civicrm-core/pull/37229))** - **[REF] Merger - Simplify function getMultiValueCidRefs ([37235](https://github.com/civicrm/civicrm-core/pull/37235))** - **[REF] CRM_Utils_String::unserialize avoid exception for "" ([37096](https://github.com/civicrm/civicrm-core/pull/37096))** - **[Ref] Use factored methods for Joomla user access ([36881](https://github.com/civicrm/civicrm-core/pull/36881))** - **[REF] afGuiConditionalDialog - modernise JS ([36858](https://github.com/civicrm/civicrm-core/pull/36858))** - **REF: Extract contact summary tags to separate tpl ([36834](https://github.com/civicrm/civicrm-core/pull/36834))** - **ContactInline - Consolidate duplicate code ([37191](https://github.com/civicrm/civicrm-core/pull/37191))** - **CRM_Utils_Request - Cleanup $_nullObject uses ([37192](https://github.com/civicrm/civicrm-core/pull/37192))** - **setting-php@1 -- Infer sensible values of "is_domain" and "is_contact" ([37193](https://github.com/civicrm/civicrm-core/pull/37193))** - **add setting metadata for CIVICRM_LOGGING_DSN ([37276](https://github.com/civicrm/civicrm-core/pull/37276))** - **civicrm.settings.php - no need to set CIVICRM_LOGGING_DSN explicitly ([37272](https://github.com/civicrm/civicrm-core/pull/37272))** - **Search - Relative date refactoring ([37202](https://github.com/civicrm/civicrm-core/pull/37202))** - **Revert "Always call constructor for ECK entities so we always have valid field definitions and joins work" ([36618](https://github.com/civicrm/civicrm-core/pull/36618))** - **allow guzzlehttp/psr7 3 ([36580](https://github.com/civicrm/civicrm-core/pull/36580))** - **Bump qs and body-parser ([37763](https://github.com/civicrm/civicrm-core/pull/37763))** - **Bump brace-expansion from 1.1.16 to 1.1.21 ([37270](https://github.com/civicrm/civicrm-core/pull/37270))** - **Bumps the Chrome mink driver to latest version ([37263](https://github.com/civicrm/civicrm-core/pull/37263))** - **Port: "Bump follow-redirects from 1.16.0 to 1.16.1" to 6.20 ([37645](https://github.com/civicrm/civicrm-core/pull/37645))** - **Add Hans Rossel to contributor-key.yml ([37269](https://github.com/civicrm/civicrm-core/pull/37269))** - **Add Sinjinsmiley to contributor-key.yml ([36750](https://github.com/civicrm/civicrm-core/pull/36750))** - **Update organization for Guillaume Sorel ([36961](https://github.com/civicrm/civicrm-core/pull/36961))** - **AGENTS.md declare use of agent. ([37034](https://github.com/civicrm/civicrm-core/pull/37034))** - **AGENTS.md - add JavaScript/AngularJS and karma notes ([36958](https://github.com/civicrm/civicrm-core/pull/36958))** - **Start adding hints for AI Agents to discourage copying the wrong patterns in unit tests ([36912](https://github.com/civicrm/civicrm-core/pull/36912))** - **Fix sentence that could be interpreted by bot as the opposite of what it means ([37368](https://github.com/civicrm/civicrm-core/pull/37368))** - **PR Commands - Do not skip rebase when changing base branch ([36675](https://github.com/civicrm/civicrm-core/pull/36675))** - **[NFC] reenable ONLY_FULL_GROUP_BY after test indirectly changes it ([dev/core#6810](https://lab.civicrm.org/dev/core/-/issues/6810): [37162](https://github.com/civicrm/civicrm-core/pull/37162))** - **[NFC] Correct return type comment for CRM_Core_Block::getContent() ([dev/core#6742](https://lab.civicrm.org/dev/core/-/issues/6742): [36713](https://github.com/civicrm/civicrm-core/pull/36713))** - **[NFC] Fix ChangeFeeSelectionTest to not use deprecated set up function ([36752](https://github.com/civicrm/civicrm-core/pull/36752))** - **NFC/TestOnly: Financial - Move Payment::create idempotency tests to the APIv4 suite ([36796](https://github.com/civicrm/civicrm-core/pull/36796))** - **Add regression test for additional-participant profile title ([dev/core#6664](https://lab.civicrm.org/dev/core/-/issues/6664): [36822](https://github.com/civicrm/civicrm-core/pull/36822))** - **Explicitly declare api version on apiv3 tests ([36683](https://github.com/civicrm/civicrm-core/pull/36683))** - **Switch test api version from 3 to 4 for Financial_BAO tests ([36681](https://github.com/civicrm/civicrm-core/pull/36681))** - **SearchKit - Fix test for MySql ([37175](https://github.com/civicrm/civicrm-core/pull/37175))** - **Use getTestForm in CRM_Admin_Form_PaymentProcessorTest ([37299](https://github.com/civicrm/civicrm-core/pull/37299))** - **Update legacy test method ([37184](https://github.com/civicrm/civicrm-core/pull/37184))** - **Add test for importing batches ([37110](https://github.com/civicrm/civicrm-core/pull/37110))** - **Update test to use the preferred getTestForm ([37105](https://github.com/civicrm/civicrm-core/pull/37105))** - **Remove deprecated test method ([37087](https://github.com/civicrm/civicrm-core/pull/37087))** - **Fix getTestform request leak ([37056](https://github.com/civicrm/civicrm-core/pull/37056))** - **Migrate CRMTraits_Import_ParserTrait to getTestForm() ([37030](https://github.com/civicrm/civicrm-core/pull/37030))** - **Migrate CRM_Contact_Import_Form_DataSourceTest to getTestForm() ([37029](https://github.com/civicrm/civicrm-core/pull/37029))** - **Civi\Test - Install SearchKit before the first rebuild of a headless build ([36991](https://github.com/civicrm/civicrm-core/pull/36991))** - **Convert backoffice membership form test to use form test wrapper ([36968](https://github.com/civicrm/civicrm-core/pull/36968))** - **Api v4 conversion in test class ([36965](https://github.com/civicrm/civicrm-core/pull/36965))** - **Convert membership renewal test to use the testForm wrapper ([36964](https://github.com/civicrm/civicrm-core/pull/36964))** - **Use getTestForm in CRM_Contact_Form_Task_UseraddTest ([36916](https://github.com/civicrm/civicrm-core/pull/36916))** - **Remove direct test calls to CRM_Price_BAO_LineItem::changeFeeSelections ([36763](https://github.com/civicrm/civicrm-core/pull/36763))** - **Some test set up moved to apiv4 ([36759](https://github.com/civicrm/civicrm-core/pull/36759))** - **Convert test to use the full form flow ([36748](https://github.com/civicrm/civicrm-core/pull/36748))** - **Reduce reliance from ContactTest trait on apiv3 trait ([36725](https://github.com/civicrm/civicrm-core/pull/36725))** - **Prefer v4 Membership api for setting up test fixtures ([36729](https://github.com/civicrm/civicrm-core/pull/36729))** - **Prefer apiv4 for test setup ([36731](https://github.com/civicrm/civicrm-core/pull/36731))** - **Prefer apiv4 for test setup ([36730](https://github.com/civicrm/civicrm-core/pull/36730))** - **Fix test api call not to call create for update ([36726](https://github.com/civicrm/civicrm-core/pull/36726))** - **Test api calls - be specific when calling apiv3 only functions ([36724](https://github.com/civicrm/civicrm-core/pull/36724))** - **Use apiv4 as default for Event_Form_RegisterTest ([36718](https://github.com/civicrm/civicrm-core/pull/36718))** - Fix 'ending' relative dates being off by a day at month end (test fails today) ([37806](https://github.com/civicrm/civicrm-core/pull/37806)) - **Convert test set up to apiv4 ([36735](https://github.com/civicrm/civicrm-core/pull/36735))** - **Use apiv4 for fixture set up in InvokeTest ([36734](https://github.com/civicrm/civicrm-core/pull/36734))** - **Merge ChangeFeeSelections financial-item and payment tests into ChangeFeeSelectionTest ([36680](https://github.com/civicrm/civicrm-core/pull/36680))** - **Standalone - Remove YAGNI user pass processing ([36614](https://github.com/civicrm/civicrm-core/pull/36614))** - **Replace HTML_QuickForm_Element by HTML_QuickForm_element ([36666](https://github.com/civicrm/civicrm-core/pull/36666))** - **Fix double semicolons ([36775](https://github.com/civicrm/civicrm-core/pull/36775))** - **Separate submit function shared between single back office participant form and register task ([37075](https://github.com/civicrm/civicrm-core/pull/37075))** ## <a name="credits"></a>Credits This release was developed by the following code authors: AGH Strategies - Alice Frumin, Chris Garaffa; Agileware Pty Ltd - Justin Freeman; All In Appli.com - Guillaume Sorel; Artful Robot - Rich Lott; Australian Greens - John Twyman; beatrizpaula03; Benjamin W; BrightMinded Ltd - Bradley Taylor; Christian Wach; civico GmbH - Johannes Filter; CiviCoop - Klaas Eikelboom; CiviCRM - Coleman Watts, Tim Otten; CiviDesk - Yashodha Chaku; CompuCo - Muhammad Shahrukh; Coop SymbioTIC - Mathieu Lutfy, Shane Bill; CSES (Chelmsford Science and Engineering Society) - Adam Wood; Dave D; Freeform Solutions - Herb van den Dool; Fuzion - Luke Stewart; Greenpeace Central and Eastern Europe - Patrick Figel; Hans Rossel; Humanists UK - Andrew West; Jakub Fidler; JMA Consulting - Monish Deb, Seamus Lee; joapta-tech; Juan Ignacio Sartor; kaustubh-compuco; Kevin Goess; knottheory; Megaphone Technology Consulting - Jon Goldberg; MJW Consulting - Matthew Wire; Nicol Wistreich; OPEN - dewy; Progressive Technology Project - Jamie McClelland; Richard van Oosterhout; Robin Bowes; Sinjinsmiley; Skvare - Mark Hanna, Sunil Pawar; Squiffle Consulting - Aidan Saunders; Survos - Tac Tacelosky; SYSTOPIA - Dominic Tubach; Sylvain Plante; Tadpole Collective - Kevin Cristiano; Third Sector Design - Kurund Jalmi; Wikimedia Foundation - Eileen McNaughton, Lars Sander-Green; Youth Apostles Institute - John Volk Most authors also reviewed code for this release; in addition, the following reviewers contributed their comments: alilinares; civiservice.de - Martin Correll; Francesc Bassas i Bullich; Jade Gaunt; Joinery - Allen Shaw; NIAB - Stuart; Responsive Development Technologies - Thomas Nilefalk; Richard Baugh; Sigtechnica; Stiftung Pfadfinden - Andreas Lietz; Third Sector Design - William Mortada