5 - **[Synopsis](#synopsis)**
6 - **[Features](#features)**
7 - **[Bugs resolved](#bugs)**
8 - **[Miscellany](#misc)**
9 - **[Credits](#credits)**
10 - **[Feedback](#feedback)**
12 ## <a name="synopsis"></a>Synopsis
14 | *Does this version...?* | |
15 |:--------------------------------------------------------------- |:-------:|
16 | Fix security vulnerabilities? | no |
17 | **Change the database schema?** | **yes** |
18 | **Alter the API?** | **yes** |
19 | Require attention to configuration options? | no |
20 | Fix problems installing or upgrading to a previous version? | no |
21 | **Introduce features?** | **yes** |
22 | **Fix bugs?** | **yes** |
24 ## <a name="features"></a>Features
28 - **Add civicrm_admin_ui extension
29 ([22628](https://github.com/civicrm/civicrm-core/pull/22628))**
31 Adds a new bundled extension `civicrm_admin_ui`. This extension replaces 2
32 screens with SearchDisplay Afforms: Custom field groups and Custom fields.
34 - **Add deprecation notice to APIv3 Explorer
35 ([22811](https://github.com/civicrm/civicrm-core/pull/22811))**
37 Adds a notice to the APIv3 explorer to encourage users to use APIv4 instead.
39 - **Apiv4 entity parity (Work Towards
40 [dev/core#2486](https://lab.civicrm.org/dev/core/-/issues/2486):
41 [22754](https://github.com/civicrm/civicrm-core/pull/22754),
42 [22823](https://github.com/civicrm/civicrm-core/pull/22823),
43 [22624](https://github.com/civicrm/civicrm-core/pull/22624) and
44 [22799](https://github.com/civicrm/civicrm-core/pull/22799))**
46 Adds "Extension", "Mailing", "MailingGroup" and "MailingJob" entities to
49 - **APIv4 - Add tableName to Entity.get output
50 ([22829](https://github.com/civicrm/civicrm-core/pull/22829))**
52 Adds `tableName` to the APIv4 Entity.get action output, improving
53 flexibility for virtual entities.
55 - **APIv4 Explorer - Add REST syntax
56 ([22722](https://github.com/civicrm/civicrm-core/pull/22722))**
58 Displays REST syntax in the APIv4 Explorer.
60 - **APIv4 - Add metadata about class args
61 ([22831](https://github.com/civicrm/civicrm-core/pull/22831))**
63 The CustomValue API is a virtual entity, where multiple api entities all get
64 routed to the same class by virtue of all sharing the prefix "Custom_" and
65 pass a class arg to the php factory functions e.g.
66 CustomValue::get('MyCustomGroup').
68 Instead of hard-coding this idea into the API Explorer now it's part of the
69 entity metadata so that other APIs, notaby ECK, can use a similar pattern.
71 - **APIv4 Explorer - Add "copy" button to quickly copy code to clipboard
72 ([22896](https://github.com/civicrm/civicrm-core/pull/22896))**
74 Makes it easy to select and copy generated APIv4 Explorer code.
76 - **SearchKit - Update APIv3 Extension.get to use APIv4
77 ([22788](https://github.com/civicrm/civicrm-core/pull/22788))**
79 Updates SearchKit code to use newer version of the API when calling
82 - **SearchKit - Use crmDialogButtons for task popups
83 ([22790](https://github.com/civicrm/civicrm-core/pull/22790))**
85 Updates the buttons in SearchKit action popups to use standard dialog button
88 - **SearchKit - Add 'merge contacts' task
89 ([22768](https://github.com/civicrm/civicrm-core/pull/22768))**
91 Adds a "merge contacts" task to SearchKit.
93 - **SearchKit - Customizable "No Results" text
94 ([22770](https://github.com/civicrm/civicrm-core/pull/22770))**
96 Makes it so users can customize the "No Results" text in SearchKit.
98 - **SearchKit - Improve import UI to handle update & preview the import
99 ([22699](https://github.com/civicrm/civicrm-core/pull/22699))**
101 SearchKit has an import/export SavedSearch feature which allows you to
102 copy/paste api code in JSON format. This change enables update as well as create,
103 and improves that UI to give better user feedback about what will happen when
106 - **SearchKit - Support relative dates and datepicker with the DATE() sql fn
107 ([22783](https://github.com/civicrm/civicrm-core/pull/22783))**
109 Allows one to pick a relative or calendar date in conjunction with the DATE
110 ONLY field transformation.
112 - **Civi\Api4\Queue - Allow use with hook_managed
113 ([22796](https://github.com/civicrm/civicrm-core/pull/22796))**
115 Flags the entity Queue so that it can be used with hook_managed.
117 - **Define more usable queue DX for multithreaded background work (Work Towards
118 [dev/core#1304](https://lab.civicrm.org/dev/core/-/issues/1304):
119 [22812](https://github.com/civicrm/civicrm-core/pull/22812))**
121 Expands the schema for civicrm_queue (et al). By configuring properties on
122 civicrm_queue (et al), you can tell a generic queue-agent how to handle items
125 - **ManagedEntities - Allow "match" param to convert existing records to …
126 ([22883](https://github.com/civicrm/civicrm-core/pull/22883))**
128 This can help ease the pain of declaring managed entities which may or may not
129 already exist - now they can be matched by name or other unique identifier.
133 - **Add basic contribution example base for contribution workflows
134 ([22636](https://github.com/civicrm/civicrm-core/pull/22636))**
136 Makes it so that one can preview Contribution Message Templates.
140 - **Introduce a way to link event participants from the associated booking.
141 ([dev/user-interface#45](https://lab.civicrm.org/dev/user-interface/-/issues/45):
142 [22732](https://github.com/civicrm/civicrm-core/pull/22732))**
144 Introduces a way to navigate to participants from the contribution view.
148 - **Mailing - Add `serialize` and `add` to `template_options` field
149 ([22785](https://github.com/civicrm/civicrm-core/pull/22785))**
151 Improves the mailing schema metadata for template_options and template_type
154 - **Start phasing out 'preferred_mail_format' (Work Towards
155 [dev/core#2866](https://lab.civicrm.org/dev/core/-/issues/2866):
156 [22775](https://github.com/civicrm/civicrm-core/pull/22775),
157 [22633](https://github.com/civicrm/civicrm-core/pull/22633) and
158 [22635](https://github.com/civicrm/civicrm-core/pull/22635))**
160 Ignores preferred mail format when sending a message. Instead sends both html
161 and plain text versions and lets the email client decide which to show.
162 Removes `preferred_mail_format` from email trait.
164 ### Drupal Integraton
166 - **civicrm.drush.inc - Add 'civicrm-pipe' subcommand
167 ([70](https://github.com/civicrm/civicrm-drupal-8/pull/70))**
169 Adds support for the subcommand `drush civicrm-pipe` (`drush cvpipe`).
171 ## <a name="bugs"></a>Bugs resolved
175 - **Contact Logging Detail report crashes when a contribution and contact are
177 ([dev/report#85](https://lab.civicrm.org/dev/report/-/issues/85):
178 [22242](https://github.com/civicrm/civicrm-core/pull/22242))**
180 - **Warning: is_dir(): open_basedir restriction in effect
181 ([dev/core#2927](https://lab.civicrm.org/dev/core/-/issues/2927):
182 [22277](https://github.com/civicrm/civicrm-core/pull/22277))**
184 Avoids flooding logs with `open_basedir` in effect.
186 - **Switch extension downloader and extensions feed to use Guzzle HTTP library
187 ([21097](https://github.com/civicrm/civicrm-core/pull/21097))**
189 This fixes some situations (eg. shared servers with open_basedir restrictions
190 in effect) where zip file was not downloaded properly and extension could not
191 be updated. It also means that we are no longer using our custom
192 CRM_Utils_HttpClient::fetch() function from within civicrm core.
194 - **RC Error: Call to undefined method
195 CRM_Contact_Page_View_Summary::addExpectedSmartyVariables()
196 ([dev/core#3104](https://lab.civicrm.org/dev/core/-/issues/3104):
197 [22897](https://github.com/civicrm/civicrm-core/pull/22897))**
199 - **Post-upgrade messages no longer being displayed
200 ([dev/core#3119](https://lab.civicrm.org/dev/core/-/issues/3119):
201 [22985](https://github.com/civicrm/civicrm-core/pull/22985))**
203 - **CiviReport - Title and Statistics appearing at top and bottom of reports
204 ([dev/core#3126](https://lab.civicrm.org/dev/core/-/issues/3126):
205 [22976](https://github.com/civicrm/civicrm-core/pull/22976))**
207 - **APIv4 - Fix setting/getting a multi-record customfield with date+time
208 ([22731](https://github.com/civicrm/civicrm-core/pull/22731))**
210 - **APIv4 - Fix typo in Entity.getFields
211 ([22776](https://github.com/civicrm/civicrm-core/pull/22776))**
213 - **Fix apiv4 Contribution delete & all line items
214 ([22749](https://github.com/civicrm/civicrm-core/pull/22749))**
216 - **Fix API4 Explorer undefined variable error
217 ([22849](https://github.com/civicrm/civicrm-core/pull/22849))**
219 - **Afform - Fix saving and editing entity blocks
220 ([22963](https://github.com/civicrm/civicrm-core/pull/22963))**
222 - **Afform Gui - Fix selecting html element of text box
223 ([22929](https://github.com/civicrm/civicrm-core/pull/22929))**
225 - **SearchKit - Fix support for non-DAO entities
226 ([22764](https://github.com/civicrm/civicrm-core/pull/22764))**
228 - **Only acl line items based on contribution
229 ([22870](https://github.com/civicrm/civicrm-core/pull/22870))**
231 Ensures ACL query on line items only joins `entity_id` to contributions.
233 - **Add handling for civimember disabled
234 ([22864](https://github.com/civicrm/civicrm-core/pull/22864))**
236 - **Revert membership debug handling in IPN
237 ([22475](https://github.com/civicrm/civicrm-core/pull/22475))**
239 - **Format money in custom fields once, on the tpl layer
240 ([22728](https://github.com/civicrm/civicrm-core/pull/22728))**
242 - **New Individual: Unfilled fields "Custom Email Greeting", "Custom Postal
243 Greeting", "Custom Addressee" are hidden
244 ([dev/core#483](https://lab.civicrm.org/dev/core/-/issues/483):
245 [22380](https://github.com/civicrm/civicrm-core/pull/22380))**
247 - **Fix regression with flexible merging of contact information
248 ([22720](https://github.com/civicrm/civicrm-core/pull/22720))**
250 - **Recent update to {receipt_text} token gives warning in system check after
251 upgrade ([22821](https://github.com/civicrm/civicrm-core/pull/22821))**
253 - **Remove "Search Builder" from menubar on new installs.
254 ([22778](https://github.com/civicrm/civicrm-core/pull/22778))**
256 - **Pseudoconstants - Fix and improve handling of option callbacks
257 ([22730](https://github.com/civicrm/civicrm-core/pull/22730))**
259 - **Refresh entity list after updating custom group (self_hook_*)
260 ([22868](https://github.com/civicrm/civicrm-core/pull/22868))**
262 - **Avoid null column showing on groups search page
263 ([22724](https://github.com/civicrm/civicrm-core/pull/22724))**
265 - **Call to undefined function civicrm_api3_create_error() in
266 civicrm/civicrm/CRM/Core/Page/AJAX/Attachment.php:65
267 ([22872](https://github.com/civicrm/civicrm-core/pull/22872))**
269 - **Fix backward-compatability for new method in CRM_Contact_BAO_Query_Hook
270 ([22933](https://github.com/civicrm/civicrm-core/pull/22933))**
272 - **Fix submit handling of thousands when creating data entry batch
273 ([22772](https://github.com/civicrm/civicrm-core/pull/22772))**
275 - **Avoid PHP undefined index notices on extension pages
276 ([22848](https://github.com/civicrm/civicrm-core/pull/22848))**
278 - **Fix issues with PHP GetText and 0 length files
279 ([22842](https://github.com/civicrm/civicrm-core/pull/22842))**
281 - **Remove reference to undefined variable in
282 CRM_Contact_Form_Inline_CommunicationPreferences
283 ([22840](https://github.com/civicrm/civicrm-core/pull/22840))**
285 - **Mark methods which are only used statically as static
286 ([22844](https://github.com/civicrm/civicrm-core/pull/22844))**
288 - **Use valid syntax for self-closing br elements
289 ([22711](https://github.com/civicrm/civicrm-core/pull/22711))**
291 - **civicrm_handler_filter_pseudo_constant - Guard against old or inactive
292 pseudoconstants ([656](https://github.com/civicrm/civicrm-drupal/pull/656))**
294 - **Contact token should show contact's info instead of logged in contact
295 ([22874](https://github.com/civicrm/civicrm-core/pull/22874))**
297 - **Fixes fatal error - function doesn't exist
298 ([275](https://github.com/civicrm/civicrm-wordpress/pull/275))**
300 - **Notice fixes ([22706](https://github.com/civicrm/civicrm-core/pull/22706))**
302 - **Some more notice fixes in smarty
303 ([22745](https://github.com/civicrm/civicrm-core/pull/22745))**
306 ([22719](https://github.com/civicrm/civicrm-core/pull/22719))**
308 - **Enotice fix ([22707](https://github.com/civicrm/civicrm-core/pull/22707))**
310 - **Mark AJAX methods as static
311 ([22895](https://github.com/civicrm/civicrm-core/pull/22895))**
313 - **Avoid e-notices on pages with tabs
314 ([22892](https://github.com/civicrm/civicrm-core/pull/22892))**
316 - **Flush the metadata cache when the domain is edited
317 ([22637](https://github.com/civicrm/civicrm-core/pull/22637))**
319 - **Remove broken call to function_exists in CRM_Utils_String::isUtf8
320 ([22803](https://github.com/civicrm/civicrm-core/pull/22803))**
322 - **Avoid PHP notices on the UF settings page.
323 ([22667](https://github.com/civicrm/civicrm-core/pull/22667))**
325 - **Fix deprecated warnings, smary grumpy-mode issues in legacy searches
326 ([22742](https://github.com/civicrm/civicrm-core/pull/22742))**
328 - **Return array for setdefaults
329 ([22948](https://github.com/civicrm/civicrm-core/pull/22948))**
333 - **CiviCase - Call hooks when creating relationships
334 ([22814](https://github.com/civicrm/civicrm-core/pull/22814))**
336 Ensures hooks are called when creating case relationships.
340 - **Bypass grumpy mode for contribution search totals & criteria
341 ([22744](https://github.com/civicrm/civicrm-core/pull/22744))**
343 - **Clean return values for dummy payment processor
344 ([22679](https://github.com/civicrm/civicrm-core/pull/22679))**
346 - **Adjust css class for payment processor to use `-`
347 ([22763](https://github.com/civicrm/civicrm-core/pull/22763))**
349 - **Fix pledge default on contribution page when the site has a WR for
350 "contribution" ([22801](https://github.com/civicrm/civicrm-core/pull/22801))**
352 - **Format money on transaction list
353 ([22438](https://github.com/civicrm/civicrm-core/pull/22438))**
355 - **Deprecate civicrm_contribution_recur.trxn_id
356 ([21539](https://github.com/civicrm/civicrm-core/pull/21539))**
358 - **php notices on contributionview
359 ([22866](https://github.com/civicrm/civicrm-core/pull/22866))**
361 - **php/smarty notices on contribution view part 2
362 ([22869](https://github.com/civicrm/civicrm-core/pull/22869))**
364 - **smarty/php notices on contribution view part 4
365 ([22894](https://github.com/civicrm/civicrm-core/pull/22894))**
367 - **Cleanup on contribution view
368 ([22698](https://github.com/civicrm/civicrm-core/pull/22698))**
370 - **Contribution view page crashes if you don't have event permissions
371 ([dev/core#3094](https://lab.civicrm.org/dev/core/-/issues/3094):
372 [22865](https://github.com/civicrm/civicrm-core/pull/22865))**
376 - **Don't perform event timezone check if CiviEvent is disabled
377 ([22898](https://github.com/civicrm/civicrm-core/pull/22898))**
381 - **CiviGrant - Don't auto-create any grant types
382 ([22913](https://github.com/civicrm/civicrm-core/pull/22913))**
384 - **Views - CiviGrant is now an extension
385 ([654](https://github.com/civicrm/civicrm-drupal/pull/654))**
387 Updates the Drupal Views integration to recognize that CiviGrant is now an
392 - **Move check for mailing workflow permisisons to BAO layer
393 ([22766](https://github.com/civicrm/civicrm-core/pull/22766))**
395 - **BAO_Mailing::create - stop passing by reference
396 ([22753](https://github.com/civicrm/civicrm-core/pull/22753))**
399 ([22818](https://github.com/civicrm/civicrm-core/pull/22818))**
401 Adds checkPerm to crmMailingSimpleDirective, enables ability of permission
402 checking in composer mail.
404 - **A/B testing report should show unique opens, not total opens
405 ([dev/core#2100](https://lab.civicrm.org/dev/core/-/issues/2100):
406 [20093](https://github.com/civicrm/civicrm-core/pull/20093))**
408 - **Mailing Report: do not recalculate the recipients when the count is zero
409 ([22800](https://github.com/civicrm/civicrm-core/pull/22800))**
413 - **Fixes for smarty grumpy mode with membership
414 ([22752](https://github.com/civicrm/civicrm-core/pull/22752))**
416 - **Cleanup on Offline Membership Receipts (ensures variables present across
417 flows) ([22736](https://github.com/civicrm/civicrm-core/pull/22736))**
419 ## <a name="misc"></a>Miscellany
421 - **Move acl check for contributionView to the extension
422 ([22684](https://github.com/civicrm/civicrm-core/pull/22684))**
424 - **Move financial acls for membership to extension
425 ([22677](https://github.com/civicrm/civicrm-core/pull/22677))**
427 - **APIv4 - remove unnecessary field from System::check
428 ([22748](https://github.com/civicrm/civicrm-core/pull/22748))**
430 - **APIv4 - Add fixme about filtering custom fields by sub-type
431 ([22827](https://github.com/civicrm/civicrm-core/pull/22827))**
433 - **Cleanup around taxTerm assignment
434 ([22422](https://github.com/civicrm/civicrm-core/pull/22422))**
436 - **RecurForms test fixes
437 ([22784](https://github.com/civicrm/civicrm-core/pull/22784))**
439 - **Update unit test to use exception
440 ([22787](https://github.com/civicrm/civicrm-core/pull/22787))**
442 - **Added Cancel Recur Subscription test & setter for `supports` on Dummy
443 processor ([21895](https://github.com/civicrm/civicrm-core/pull/21895))**
445 - **Move HookInterface to \Civi\Core namespace
446 ([22834](https://github.com/civicrm/civicrm-core/pull/22834))**
448 - **Cody tidy in CRM_Core_State
449 ([22841](https://github.com/civicrm/civicrm-core/pull/22841))**
451 - **Remove reference to undefined variable
452 ([22839](https://github.com/civicrm/civicrm-core/pull/22839))**
454 - **added as a contributor
455 ([22876](https://github.com/civicrm/civicrm-core/pull/22876))**
457 - **Remove unused parameter, pass-by-ref
458 ([22756](https://github.com/civicrm/civicrm-core/pull/22756))**
460 - **Bump karma from 6.3.14 to 6.3.16
461 ([22875](https://github.com/civicrm/civicrm-core/pull/22875))**
463 - **Bump karma from 6.3.4 to 6.3.14
464 ([22758](https://github.com/civicrm/civicrm-core/pull/22758))**
466 - **Bump ajv from 6.6.1 to 6.12.6
467 ([22761](https://github.com/civicrm/civicrm-core/pull/22761))**
469 - **Remove unit tests based on older framework
470 ([71](https://github.com/civicrm/civicrm-drupal-8/pull/71))**
472 - **REF - Use function to get component name from permission
473 ([22688](https://github.com/civicrm/civicrm-core/pull/22688))**
475 - **[REF] Simplify Location::getValues
476 ([22757](https://github.com/civicrm/civicrm-core/pull/22757))**
478 - **[REF] Fix issue where spaces in payment_processor_type.name field cau…
479 ([22760](https://github.com/civicrm/civicrm-core/pull/22760))**
481 - **[REF] Cleanup billingBlock.js
482 ([22713](https://github.com/civicrm/civicrm-core/pull/22713))**
484 - **[REF] Results of running npm audit fix
485 ([22773](https://github.com/civicrm/civicrm-core/pull/22773))**
487 - **[REF] - Deprecate & delegate BAO::retrieve functions
488 ([22543](https://github.com/civicrm/civicrm-core/pull/22543))**
490 - **REF Deprecate API3 _ipn_process_transaction()
491 ([22488](https://github.com/civicrm/civicrm-core/pull/22488))**
493 - **(REF) CRM_Queue_Queue_* - Retain a copy of `$queueSpec`
494 ([22797](https://github.com/civicrm/civicrm-core/pull/22797))**
496 - **(REF) CRM_Queue_Task - Tighter signature
497 ([22794](https://github.com/civicrm/civicrm-core/pull/22794))**
499 - **[REF] Remove old require_once statements made obsolete by autoloader
500 ([22792](https://github.com/civicrm/civicrm-core/pull/22792))**
502 - **[REF] Simplification in Contact::getValues
503 ([22765](https://github.com/civicrm/civicrm-core/pull/22765))**
505 - **[REF] Fix css code style issues
506 ([22807](https://github.com/civicrm/civicrm-core/pull/22807))**
508 - **[REF] Remove unused api v2 function
509 ([22819](https://github.com/civicrm/civicrm-core/pull/22819))**
511 - **[REF] Update Guzzlehttp/psr7 version to be 1.8.5
512 ([22998](https://github.com/civicrm/civicrm-core/pull/22998))**
514 - **[REF] Rename SoftDeleteEntity -> SoftDeleteActionTrait
515 ([22944](https://github.com/civicrm/civicrm-core/pull/22944))**
517 - **[REF] APIv4 - use entityTypes event to load custom records
518 ([22824](https://github.com/civicrm/civicrm-core/pull/22824))**
520 - **[REF] Cleanup docblocks & unused vars in Membership BAO
521 ([22665](https://github.com/civicrm/civicrm-core/pull/22665))**
523 - **(NFC) tests/phpunit/CRM/Queue - Add common `@group`
524 ([22795](https://github.com/civicrm/civicrm-core/pull/22795))**
526 - **[NFC] Rename RecurForms test class
527 ([22820](https://github.com/civicrm/civicrm-core/pull/22820))**
529 - **[NFC] Batch entry - Avoid warnings when performing math on empty string.
530 ([22715](https://github.com/civicrm/civicrm-core/pull/22715))**
532 - **(NFC) contributor-key.yml - Fix syntax error
533 ([22921](https://github.com/civicrm/civicrm-core/pull/22921))**
535 - **(NFC) LoggingDetailTest - Improve reliability of test
536 ([22867](https://github.com/civicrm/civicrm-core/pull/22867))**
538 - **(NFC) Membership Tests - Update assertions to match behavior circa leap-day
539 ([22860](https://github.com/civicrm/civicrm-core/pull/22860))**
541 - **[NFC] Basic case create test with org
542 ([22846](https://github.com/civicrm/civicrm-core/pull/22846))**
544 ## <a name="credits"></a>Credits
546 This release was developed by the following code authors:
548 AGH Strategies - Alice Frumin, Andie Hunt; BrightMinded Ltd - Bradley
549 Taylor;Christian Wach; Circle Interactive - Pradeep Nayak; CiviCRM - Coleman
550 Watts, Tim Otten; Coop SymbioTIC - Mathieu Lutfy; Dave D; Fuzion - Luke Stewart;
551 Grype Digital Inc. - Md Rashedul Islam; JMA Consulting - Monish Deb, Seamus Lee;
552 John Kingsnorth; Kartik Kathuria; Megaphone Technology Consulting - Jon
553 Goldberg; MJW Consulting - Matthew Wire; Registered Nurses' Association of
554 Ontario - Ian Wilson; Tadpole Collective - Kevin Cristiano; Wikimedia
555 Foundation - Eileen McNaughton; Wildsight - Lars Sanders-Green
557 Most authors also reviewed code for this release; in addition, the following
558 reviewers contributed their comments:
560 Agileware - Justin Freeman; Artful Robot - Rich Lott; Blackfly Solutions - Alan
561 Dixon; Bluehorn Digital - Matt Glaman; CiviCoop - Jaap Jansma; CiviDesk -
562 Yashodha Chaku; Progressive Technology Project - Jamie McClelland; Semper IT -
563 Karin Gerritsen; Skvare - Mark Hanna
565 ## <a name="feedback"></a>Feedback
567 These release notes are edited by Alice Frumin and Andie Hunt. If you'd like
568 to provide feedback on them, please log in to https://chat.civicrm.org/civicrm