Merge pull request #23934 from eileenmcnaughton/url_tokens
[civicrm-core.git] / release-notes / 5.40.0.md
1 # CiviCRM 5.40.0
2
3 Released August 5, 2021
4
5 - **[Synopsis](#synopsis)**
6 - **[Features](#features)**
7 - **[Bugs resolved](#bugs)**
8 - **[Miscellany](#misc)**
9 - **[Credits](#credits)**
10 - **[Feedback](#feedback)**
11
12 ## <a name="synopsis"></a>Synopsis
13
14 | *Does this version...?* | |
15 |:--------------------------------------------------------------- |:-------:|
16 | Fix security vulnerabilities? | no |
17 | **Change the database schema?** | **yes** |
18 | **Alter the API?** | **yes** |
19 | Require attention to configuration options? | no |
20 | **Fix problems installing or upgrading to a previous version?** | **yes** |
21 | **Introduce features?** | **yes** |
22 | **Fix bugs?** | **yes** |
23
24 ## <a name="features"></a>Features
25
26 ### Core CiviCRM
27
28 - **Move check for presence of the phone strip function to a Check (currently
29 done whenever a phone number is edited)
30 ([dev/core#27](https://lab.civicrm.org/dev/core/-/issues/27):
31 [20757](https://github.com/civicrm/civicrm-core/pull/20757))**
32
33 CiviCRM relies on a MySQL function to generate a numeric-only version of phone
34 numbers. This change adds a system check to ensure the function exists
35 instead of checking for the function each time a phone number is added or
36 edited.
37
38 - **Add calling function to deprecatedWarning log message
39 ([20719](https://github.com/civicrm/civicrm-core/pull/20719))**
40
41 Improves logging.
42
43 - **Add contact-summary-image region
44 ([20662](https://github.com/civicrm/civicrm-core/pull/20662))**
45
46 Adds a new region around the contact summary image.
47
48 - **Replace extension key with description in 'Add New' tab
49 ([20720](https://github.com/civicrm/civicrm-core/pull/20720))**
50
51 Improves the "Extensions" -> "Add New" form user experience by displaying the
52 description below the extension name instead of the extension key.
53
54 - **User experience improvement - Remove the confusing mixed terminology used to
55 describe Tags: "Tags (Categories)" and "Tag (Category)"
56 ([20268](https://github.com/civicrm/civicrm-core/pull/20268))**
57
58 Improves user experience by removing the term "Category" when referencing
59 tags.
60
61 - **Improve output triggers when logged to file
62 ([20472](https://github.com/civicrm/civicrm-core/pull/20472))**
63
64 Improves output triggers when logged to a file by adding an asort, putting all
65 the triggers into an array keyed by the statement and opening and closing the
66 delimiters just once.
67
68 - **Show smarty E-notices when in debug mode
69 ([20640](https://github.com/civicrm/civicrm-core/pull/20640))**
70
71 Improves the user experience in debug mode by showing php notices (e.g.
72 "undefined variable").
73
74 - **Add pseudoconstant to acl_entity_role
75 ([20566](https://github.com/civicrm/civicrm-core/pull/20566))**
76
77 Adds a pseudoconstant for `acl_entity_role`.
78
79 - **[php8-compact] Allow for CiviCRM to be installed by 3rd parties using
80 composer on php8 systems
81 ([20625](https://github.com/civicrm/civicrm-core/pull/20625))**
82
83 Makes it so sites can install and update CiviCRM via CLI when their CLI uses
84 PHP8.
85
86 ### Afform and SearchKit
87
88 - **Searchkit display with event location data
89 ([dev/core#2676](https://lab.civicrm.org/dev/core/-/issues/2676):
90 [20746](https://github.com/civicrm/civicrm-core/pull/20746))**
91
92 Adds LocBlock entity to display event location data in SearchKit.
93
94 - **SearchKit - Allow super admins to disable Search Display access checks
95 ([20607](https://github.com/civicrm/civicrm-core/pull/20607))**
96
97 Allows users with 'all CiviCRM permissions and ACLs' to configure a search
98 display to bypass permission checks and display all records to the user.
99
100 - **SearchKit - Add translatable descriptions to entities
101 ([20598](https://github.com/civicrm/civicrm-core/pull/20598))**
102
103 Adds user-friendly descriptions to the top-level entities in SearchKit, and
104 makes it possible to add them to other entities as well.
105
106 - **SearchKit - Show Pledge as a primary entity
107 ([20589](https://github.com/civicrm/civicrm-core/pull/20589))**
108
109 Shows Pledges as a primary entity in SearchKit, since it has its own tab on
110 the contact summary screen.
111
112 - **SearchKit - Add ability to join on multi-select ContactRef fields
113 ([20764](https://github.com/civicrm/civicrm-core/pull/20764))**
114
115 Improves support for custom contact Reference fields in APIv4, SearchKit, and
116 Afform. Makes it possible to save, search for, and filter by serialized
117 (multi-select) custom Contact Reference fields.
118
119 ### API version 4
120
121 - **Improve api consistency on custom field creation
122 ([20743](https://github.com/civicrm/civicrm-core/pull/20743))**
123
124 Makes it so the parameter "option_type" is not needed to create an
125 option_value in APIv4.
126
127 - **APIv4 Explorer: show joins for write actions
128 ([20731](https://github.com/civicrm/civicrm-core/pull/20731))**
129
130 Displays information about joins for write operations in the API Explorer.
131
132 - **APIv4 - Add `@since` annotation to each entity
133 ([20701](https://github.com/civicrm/civicrm-core/pull/20701))**
134
135 Adds since version for each entity to APIv4 code documentation.
136
137 - **APIv4 - Allow FK dot notation in create/update/save actions
138 ([20677](https://github.com/civicrm/civicrm-core/pull/20677))**
139
140 Makes it possible to reference other entities during create without knowing
141 their ID when using the APIv4. Makes it easier to package entities e.g. with
142 civicrm_managed.
143
144 - **APIv4 - Add filter for entity tags
145 ([20573](https://github.com/civicrm/civicrm-core/pull/20573))**
146
147 Adds a SearchKit/APIv4 filter for tags similar to the "groups" filter recently
148 added to SearchKit.
149
150 - **APIv4 - add is_current as a pseudo (calculated) field
151 ([20586](https://github.com/civicrm/civicrm-core/pull/20586))**
152
153 Adds an "is_current" field to SearchKit for relationships, events & campaigns.
154 It checks that the record is active and has a non-past end date and a
155 non-future start date.
156
157 - **APIv4 Explorer - When joining via EntityBridge, make bridge fields
158 selectable ([20721](https://github.com/civicrm/civicrm-core/pull/20721))**
159
160 Improves the APIv4 Explorer by displaying bridge fields.
161
162 - **Canonize API for storing translated data (Work Towards
163 [dev/translation#67](https://lab.civicrm.org/dev/translation/-/issues/67):
164 [20606](https://github.com/civicrm/civicrm-core/pull/20606) and
165 [20584](https://github.com/civicrm/civicrm-core/pull/20584))**
166
167 Adds APIv4 support for the "Translation" entity. Allows translation of fields
168 which lack an explicit HTML type.
169
170 - **Apiv4 entity parity
171 (Work Towards [dev/core#2486](https://lab.civicrm.org/dev/core/-/issues/2486):
172 [20553](https://github.com/civicrm/civicrm-core/pull/20553))**
173
174 Adds a foreign key on civicrm_contribution_product.product_id.
175
176 ### CiviContribute
177
178 - **Move financialACLs to a core extension (Work Towards
179 [dev/core#2115](https://lab.civicrm.org/dev/core/-/issues/2115):
180 [20761](https://github.com/civicrm/civicrm-core/pull/20761),
181 [20762](https://github.com/civicrm/civicrm-core/pull/20762) and
182 [20769](https://github.com/civicrm/civicrm-core/pull/20769))**
183
184 Moves financial acl code out of APIv3 Contribution.create and assorted cleanup
185 towards moving the Financial ACL code to an extension.
186
187 - **Proposal - make future recurring contribution instances modifiable & not
188 fail if the only contribution is deleted. (Work Towards
189 [dev/financial#6](https://lab.civicrm.org/dev/financial/-/issues/6):
190 [20452](https://github.com/civicrm/civicrm-core/pull/20452),
191 [20451](https://github.com/civicrm/civicrm-core/pull/20451) and
192 [20450](https://github.com/civicrm/civicrm-core/pull/20450))**
193
194 Work to make it possible to edit recurring contributions.
195
196 - **Make Order api easier to use for default price set
197 ([20681](https://github.com/civicrm/civicrm-core/pull/20681))**
198
199 Improves the order api by making it not necessary to figure out the details of
200 the default price set when using it to create memberships.
201
202 ### CiviSMS
203
204 - **Display SMS segment count when constructing a Mass SMS
205 ([dev/core#1711](https://lab.civicrm.org/dev/core/-/issues/1711):
206 [20722](https://github.com/civicrm/civicrm-core/pull/20722) and
207 [20220](https://github.com/civicrm/civicrm-core/pull/20220))**
208
209 Modifies the javascript that shows the character count when creating a SMS
210 message so that it also shows how many SMS segments are required to send the
211 message.
212
213 ### WordPress Integration
214
215 - **Fail gracefully when errors are detected
216 ([251](https://github.com/civicrm/civicrm-wordpress/pull/251))**
217
218 Rewrites the error checking that the WordPress plugin performs and fails
219 gracefully instead of throwing fatal errors and making WordPress inoperable.
220 Introduces a "CiviCRM Troubleshooting" page to help diagnose and fix problems.
221
222 ## <a name="bugs"></a>Bugs resolved
223
224 ### Core CiviCRM
225
226 - **Regression: Smart group rebuild in default config crashes cron
227 ([dev/core#2687](https://lab.civicrm.org/dev/core/-/issues/2687):
228 [20835](https://github.com/civicrm/civicrm-core/pull/20835))**
229
230 - **Syntax errors when loading sample data
231 ([dev/drupal#161](https://lab.civicrm.org/dev/drupal/-/issues/161):
232 [20925](https://github.com/civicrm/civicrm-core/pull/20925))**
233
234 - **During upgrade ConfigAndLog has errors about crm-l10n.js for every upgrade
235 step because assets aren't built during upgrade
236 ([dev/core#2666](https://lab.civicrm.org/dev/core/-/issues/2666):
237 [20890](https://github.com/civicrm/civicrm-core/pull/20890))**
238
239 - **Exporting in localized civicrm crashes due to long translation for
240 preferred_mail_format varchar(8) field.
241 ([dev/core#2645](https://lab.civicrm.org/dev/core/-/issues/2645):
242 [20626](https://github.com/civicrm/civicrm-core/pull/20626))**
243
244 - **failing update Smart Groups for installs with none
245 ([dev/core#2659](https://lab.civicrm.org/dev/core/-/issues/2659):
246 [20756](https://github.com/civicrm/civicrm-core/pull/20756))**
247
248 - **Menu link for "New Tag" doesn't quite work
249 ([dev/core#2660](https://lab.civicrm.org/dev/core/-/issues/2660):
250 [20686](https://github.com/civicrm/civicrm-core/pull/20686))**
251
252 Points the "New Tag" menu link to form to create a new tag instead of "Manage
253 Tags" form.
254
255 - **Special characters in password cause trouble.
256 ([dev/core#2663](https://lab.civicrm.org/dev/core/-/issues/2663):
257 [20713](https://github.com/civicrm/civicrm-core/pull/20713))**
258
259 - **Upgrade to Nightly (5.40.alpha1) from Stable (5.38.1) fails with DB Error:
260 constraint violation
261 ([dev/core#2680](https://lab.civicrm.org/dev/core/-/issues/2680):
262 [20814](https://github.com/civicrm/civicrm-core/pull/20814))**
263
264 - **[php8-compact] Add in more protection for unset variables in various smarty
265 templates ([20546](https://github.com/civicrm/civicrm-core/pull/20546) and
266 [20547](https://github.com/civicrm/civicrm-core/pull/20547))**
267
268 - **Force cleanup of setting value type "checkboxes" when is empty
269 ([20600](https://github.com/civicrm/civicrm-core/pull/20600))**
270
271 Fixes a bug where custom settings of the type "checkboxes" with no checked
272 values were not saving to the database correctly.
273
274 - **Fix activity_date_time_relative filter when `preserve_activity_tab_filter`
275 setting is on ([20602](https://github.com/civicrm/civicrm-core/pull/20602))**
276
277 - **Support saving more than 25 records in Profile.submit api
278 ([20744](https://github.com/civicrm/civicrm-core/pull/20744))**
279
280 - **Fix schema support for composite primary keys
281 ([20705](https://github.com/civicrm/civicrm-core/pull/20705))**
282
283 - **Fix sorting for drop triggers
284 ([20693](https://github.com/civicrm/civicrm-core/pull/20693))**
285
286 - **Fix Schema calculation of usePrefix to cope with rpow:
287 ([20471](https://github.com/civicrm/civicrm-core/pull/20471))**
288
289 - **Fixed url ([20641](https://github.com/civicrm/civicrm-core/pull/20641))**
290
291 - **Ensure custom group name does not conflict with existing field
292 ([20694](https://github.com/civicrm/civicrm-core/pull/20694))**
293
294 - **Force the right path in github action script
295 ([20688](https://github.com/civicrm/civicrm-core/pull/20688))**
296
297 The original script ran in a repo called civicrm-regen, but because the name
298 of this repo is civicrm-core and hence the github workspace folder contains
299 the literal "civicrm-core" in it, the civicrm.config.php file determines that
300 this must be a composer install, and so it gets the path to
301 civicrm.settings.php wrong.
302
303 - **Always assign mode to smarty
304 ([20664](https://github.com/civicrm/civicrm-core/pull/20664))**
305
306 - **AngularLoader - Emit warning when setModules method is used.
307 ([20628](https://github.com/civicrm/civicrm-core/pull/20628))**
308
309 Emits a warning when extensions do something that could potentially cause
310 problems with other extensions.
311
312 - **Throw exception when baoName is not found
313 ([20696](https://github.com/civicrm/civicrm-core/pull/20696) and
314 [20742](https://github.com/civicrm/civicrm-core/pull/20742))**
315
316 - **Convert Notes to use option_group instead of hardcoded list
317 ([20554](https://github.com/civicrm/civicrm-core/pull/20554))**
318
319 - **Fix a few more undefined template vars
320 ([20577](https://github.com/civicrm/civicrm-core/pull/20577) and
321 [20684](https://github.com/civicrm/civicrm-core/pull/20684))**
322
323 - **CKEditor - Fix .tpl insertion on every form
324 ([20846](https://github.com/civicrm/civicrm-core/pull/20846))**
325
326 - **Fix undefined tpl vars in CiviReport
327 ([20797](https://github.com/civicrm/civicrm-core/pull/20797))**
328
329 - **smarty notice - title is only set for a list of existing report instances
330 ([20771](https://github.com/civicrm/civicrm-core/pull/20771))**
331
332 - **smarty notice - confirm_message is usually irrelevant in report listings
333 ([20772](https://github.com/civicrm/civicrm-core/pull/20772))**
334
335 - **Minor tpl simplificaiton, notice reduction
336 ([20663](https://github.com/civicrm/civicrm-core/pull/20663))**
337
338 - **Fix undefined tpl variables on contact summary
339 ([20659](https://github.com/civicrm/civicrm-core/pull/20659))**
340
341 - **Some php warnings on new case
342 ([20712](https://github.com/civicrm/civicrm-core/pull/20712))**
343
344 - **Remove deprecated use of format money
345 ([20697](https://github.com/civicrm/civicrm-core/pull/20697))**
346
347 - **Fix possibly undefined custom groupTree tpl variable
348 ([20737](https://github.com/civicrm/civicrm-core/pull/20737))**
349
350 - **Fix undefined tpl vars on contact summary page
351 ([20754](https://github.com/civicrm/civicrm-core/pull/20754))**
352
353 - **Tpl enotice fix
354 ([20735](https://github.com/civicrm/civicrm-core/pull/20735))**
355
356 - **Fix undefined indexes in tpls
357 ([20781](https://github.com/civicrm/civicrm-core/pull/20781))**
358
359 - **Enotice fix Remove references to savedFieldMapping in page 2 of the import
360 ([20738](https://github.com/civicrm/civicrm-core/pull/20738))**
361
362 - **Fix undefined tpl vars on custom field page
363 ([20726](https://github.com/civicrm/civicrm-core/pull/20726))**
364
365 - **Fix often undefined variable $row.class in tpl tables
366 ([20725](https://github.com/civicrm/civicrm-core/pull/20725))**
367
368 - **Throw exception rather than allow php fail
369 ([20565](https://github.com/civicrm/civicrm-core/pull/20565))**
370
371 Throws an exception rather than allow php fail when the api class is not
372 found.
373
374 - **Proposal - store metadata on membership renewal on line item (Work Towards
375 [dev/membership#29](https://lab.civicrm.org/dev/membership/-/issues/29):
376 [20672](https://github.com/civicrm/civicrm-core/pull/20672))**
377
378 Adds a new column to the civicrm_line_item table: membership_num_terms.
379
380 ### Afform and SearchKit
381
382 - **Afform - cosmetic fixes in palette panel
383 ([20755](https://github.com/civicrm/civicrm-core/pull/20755))**
384
385 - **Search-kit - declaring joins breaks deduping
386 ([dev/core#2656](https://lab.civicrm.org/dev/core/-/issues/2656):
387 [20631](https://github.com/civicrm/civicrm-core/pull/20631) and
388 [20639](https://github.com/civicrm/civicrm-core/pull/20639))**
389
390 - **SearchKit - use primary_key info instead of assuming 'id'
391 ([20763](https://github.com/civicrm/civicrm-core/pull/20763))**
392
393 Fixes a bug in SearchKit when dealing with entities without "id" as their
394 primary key field.
395
396 - **SearchKit - Remove automatic filter from address
397 ([20803](https://github.com/civicrm/civicrm-core/pull/20803))**
398
399 Usability fix for SearchKit - stops automatically add "Location Type" to the
400 search when joining with Address.
401
402 - **OR term in WHERE clause crashes Search Kit
403 ([dev/report#71](https://lab.civicrm.org/dev/report/-/issues/71):
404 [20824](https://github.com/civicrm/civicrm-core/pull/20824))**
405
406 Fixes an error when saving or opening a search with an OR group in a clause.
407
408 ### API version 4
409
410 - **APIv4 - Silently ignore non-permissioned fields instead of throwing
411 exceptions ([20724](https://github.com/civicrm/civicrm-core/pull/20724))**
412
413 - **APIv4 - Fix same-table joins and remove unused code
414 ([20715](https://github.com/civicrm/civicrm-core/pull/20715))**
415
416 - **APIv4 - Don't assume the identifier field for a table is named 'id'
417 ([20707](https://github.com/civicrm/civicrm-core/pull/20707) and
418 [20749](https://github.com/civicrm/civicrm-core/pull/20749))**
419
420 - **APIv4 - Deprecate Entity::getLinks action
421 ([20727](https://github.com/civicrm/civicrm-core/pull/20727))**
422
423 - **APIv4 - Deprecate passing 'id' to basic actions
424 ([20765](https://github.com/civicrm/civicrm-core/pull/20765))**
425
426 - **APIv4 Explorer - Only apply default limit 25 for "get" action
427 ([20698](https://github.com/civicrm/civicrm-core/pull/20698))**
428
429 - **Failing api4 test
430 api.v4.Action.CreateWithOptionGroupTest.testWithCustomDataForMultipleContacts
431 ([dev/core#2699](https://lab.civicrm.org/dev/core/-/issues/2699):
432 [20928](https://github.com/civicrm/civicrm-core/pull/20928))**
433
434 ### CiviCase
435
436 - **Case Manager is not shown for closed cases.
437 ([dev/core#542](https://lab.civicrm.org/dev/core/-/issues/542) and
438 [dev/core#1947](https://lab.civicrm.org/dev/core/-/issues/1947):
439 [19737](https://github.com/civicrm/civicrm-core/pull/19737))**
440
441 Ensures inactive active case role are shown for closed cases.
442
443 - **Some php warnings on case dashboard
444 ([20711](https://github.com/civicrm/civicrm-core/pull/20711))**
445
446 - **smarty notice - case dashboard when no upcoming/recent cases
447 ([20770](https://github.com/civicrm/civicrm-core/pull/20770))**
448
449 - **smarty notices - New case screen - Case.hlp
450 ([20795](https://github.com/civicrm/civicrm-core/pull/20795))**
451
452 - **Error when sorting case roles table by end date
453 ([20728](https://github.com/civicrm/civicrm-core/pull/20728))**
454
455 ### CiviContribute
456
457 - **Error submitting contribution form if ""is_monetary=0""
458 ([dev/wordpress#109](https://lab.civicrm.org/dev/wordpress/-/issues/109):
459 [#20929](https://github.com/civicrm/civicrm-core/pull/20929))**
460
461 - **Can't remove previously-added currencies
462 ([dev/financial#175](https://lab.civicrm.org/dev/financial/-/issues/175):
463 [20627](https://github.com/civicrm/civicrm-core/pull/20627))**
464
465 - **civicrm/payment/form url got empty currency argument in backoffice live CC
466 form ([dev/financial#150](https://lab.civicrm.org/dev/financial/-/issues/150):
467 [18517](https://github.com/civicrm/civicrm-core/pull/18517))**
468
469 - **"Non-static method CRM_Financial_Form_BatchTransaction::links() should not
470 be called statically" when viewing accounting batch
471 ([dev/core#2647](https://lab.civicrm.org/dev/core/-/issues/2647):
472 [20691](https://github.com/civicrm/civicrm-core/pull/20691))**
473
474 - **pre hook is not triggered for LineItem delete
475 ([dev/core#2657](https://lab.civicrm.org/dev/core/-/issues/2657):
476 [20644](https://github.com/civicrm/civicrm-core/pull/20644))**
477
478 - **Undefined variable ids in CRM\Core\Payment\AuthorizeNetIPN.php
479 ([dev/core#2685](https://lab.civicrm.org/dev/core/-/issues/2685):
480 [20818](https://github.com/civicrm/civicrm-core/pull/20818))**
481
482 - **Send pcp notification only when the contribution is completed
483 ([20523](https://github.com/civicrm/civicrm-core/pull/20523))**
484
485 - **Add missing "View Recurring Contribution" link to contribution view
486 ([20750](https://github.com/civicrm/civicrm-core/pull/20750))**
487
488 Add missing "View Recurring Contribution" link to contribution view when
489 displaying line items.
490
491 ### CiviEvent
492
493 - **Fix bug where only one participant registration is completed
494 ([20654](https://github.com/civicrm/civicrm-core/pull/20654))**
495
496 ### CiviMail
497
498 - **Unwanted mail blast sent by Scheduled Reminders
499 ([dev/core#365](https://lab.civicrm.org/dev/core/-/issues/365):
500 [20432](https://github.com/civicrm/civicrm-core/pull/20432) and
501 [19973](https://github.com/civicrm/civicrm-core/pull/19973))**
502
503 Adds Effective start and end date to the Schedule Reminder UI.
504
505 - **Specifying a "Selection Method" without a location type gives a DB error
506 ([dev/mail#96](https://lab.civicrm.org/dev/mail/-/issues/96):
507 [20536](https://github.com/civicrm/civicrm-core/pull/20536))**
508
509 - **Mailing label prints name twice
510 ([dev/core#2681](https://lab.civicrm.org/dev/core/-/issues/2681):
511 [20783](https://github.com/civicrm/civicrm-core/pull/20783))**
512
513 - **Fix invalid defaults for Mailing.update_email_resetdate API
514 ([20751](https://github.com/civicrm/civicrm-core/pull/20751))**
515
516 - **Use mysql to set mailing.created_date
517 ([20630](https://github.com/civicrm/civicrm-core/pull/20630))**
518
519 ### Drupal Integration
520
521 - **hook_civicrm_buildProfile not working on Drupal 8
522 ([dev/drupal#113](https://lab.civicrm.org/dev/drupal/-/issues/113):
523 [65](https://github.com/civicrm/civicrm-drupal-8/pull/65))**
524
525 ## <a name="misc"></a>Miscellany
526
527 - **Unused smarty variable
528 ([20796](https://github.com/civicrm/civicrm-core/pull/20796))**
529
530 - **Remove unreachable code from admin page
531 ([20642](https://github.com/civicrm/civicrm-core/pull/20642))**
532
533 - **replace unnecessary function call with string literal
534 ([20634](https://github.com/civicrm/civicrm-core/pull/20634))**
535
536 - **APIv4 - Remove POC code leftover from early alpha development
537 ([20709](https://github.com/civicrm/civicrm-core/pull/20709))**
538
539 - **Move upgrade code to correct version
540 ([20643](https://github.com/civicrm/civicrm-core/pull/20643))**
541
542 - **Move determination of priceSetID to the internal order class
543 ([20669](https://github.com/civicrm/civicrm-core/pull/20669))**
544
545 - **CRM_Utils_Array::asColumns() - Add helper to rotate a matrix (from rows to
546 columns) ([20788](https://github.com/civicrm/civicrm-core/pull/20788))**
547
548 - **CRM_Utils_Array - Implement pathUnset() method
549 ([20787](https://github.com/civicrm/civicrm-core/pull/20787))**
550
551 - **Handle participant payment create in line item
552 ([20790](https://github.com/civicrm/civicrm-core/pull/20790))**
553
554 - **APIv4 Explorer - Render joins using addJoin function in OOP
555 ([20723](https://github.com/civicrm/civicrm-core/pull/20723))**
556
557 - **Deprecate duplicate getLoggedInContactID() function
558 ([20321](https://github.com/civicrm/civicrm-core/pull/20321))**
559
560 - **Remove deprecated function
561 ([20760](https://github.com/civicrm/civicrm-core/pull/20760))**
562
563 - **Hopefully fix time rollover problem in MessageTemplateTest
564 ([20714](https://github.com/civicrm/civicrm-core/pull/20714))**
565
566 - **Extract feeBlock to it's own tpl
567 ([20679](https://github.com/civicrm/civicrm-core/pull/20679))**
568
569 - **Deprecate passing in 'null' for tax
570 ([20671](https://github.com/civicrm/civicrm-core/pull/20671))**
571
572 - **Add test validation for Membership & participant payments
573 ([20621](https://github.com/civicrm/civicrm-core/pull/20621))**
574
575 - **Fix up on invalid test data
576 ([20667](https://github.com/civicrm/civicrm-core/pull/20667))**
577
578 - **Fix test to use valid amounts
579 ([20668](https://github.com/civicrm/civicrm-core/pull/20668))**
580
581 - **Fix test to use valid financials
582 ([20676](https://github.com/civicrm/civicrm-core/pull/20676))**
583
584 - **Improve CustomGroupTest
585 ([20617](https://github.com/civicrm/civicrm-core/pull/20617))**
586
587 - **Test cleanup - specify return
588 ([20570](https://github.com/civicrm/civicrm-core/pull/20570))**
589
590 - **Clean up code to determine line items for membership batch entry
591 ([20779](https://github.com/civicrm/civicrm-core/pull/20779))**
592
593 - **AssetBuilderTest - Raise threshold for timeout
594 ([20810](https://github.com/civicrm/civicrm-core/pull/20810))**
595
596 - **Reduce test api calls with no 'return'
597 ([20574](https://github.com/civicrm/civicrm-core/pull/20574))**
598
599 - **Fix BaseIPN test to (mostly) pass invalid financials checks
600 ([20785](https://github.com/civicrm/civicrm-core/pull/20785))**
601
602 - **Fix test set up to user Order api
603 ([20780](https://github.com/civicrm/civicrm-core/pull/20780))**
604
605 - **[REF] Membership api for v4 (Work Towards
606 [dev/core#2634](https://lab.civicrm.org/dev/core/-/issues/2634):
607 [20759](https://github.com/civicrm/civicrm-core/pull/20759))**
608
609 - **[Ref] Remove (more) unreachable code from order api
610 ([20793](https://github.com/civicrm/civicrm-core/pull/20793))**
611
612 - **[REF] Add in template guard for not being always set as per html format
613 ([20747](https://github.com/civicrm/civicrm-core/pull/20747))**
614
615 - **[REF] Remove isPayLater from membership batch screen
616 ([20396](https://github.com/civicrm/civicrm-core/pull/20396))**
617
618 - **[REF] Extend testing on membership batch entry & minor cleanup
619 ([20394](https://github.com/civicrm/civicrm-core/pull/20394))**
620
621 - **[REF] Fix trying to access array offset from boolean value
622 ([20734](https://github.com/civicrm/civicrm-core/pull/20734))**
623
624 - **[REF] Alter new Setup process to use CiviCRM's Event Dispatcher
625 ([20717](https://github.com/civicrm/civicrm-core/pull/20717))**
626
627 - **[REF] - Improve efficiency of APIv4 GetInfo
628 ([20708](https://github.com/civicrm/civicrm-core/pull/20708))**
629
630 - **REF - Get Contact Summary tab counts after calling hook to avoid wasting
631 time ([20673](https://github.com/civicrm/civicrm-core/pull/20673))**
632
633 - **[REF] Remove always false if
634 ([20653](https://github.com/civicrm/civicrm-core/pull/20653))**
635
636 - **[REF] Extract CKEditor into its own core extension
637 ([20392](https://github.com/civicrm/civicrm-core/pull/20392))**
638
639 - **(REF) crmUi - Support onCrmUiSelect for using select2 as a picklist
640 ([20789](https://github.com/civicrm/civicrm-core/pull/20789))**
641
642 - **[REF] Tidy up param transforms
643 ([20778](https://github.com/civicrm/civicrm-core/pull/20778))**
644
645 - **[REF] Follow up clean up - remove contribution_mode
646 ([20656](https://github.com/civicrm/civicrm-core/pull/20656))**
647
648 - **[REF] Remove unnecessary variable wrangling in case roles section
649 ([20729](https://github.com/civicrm/civicrm-core/pull/20729))**
650
651 - **[REF] Follow up fix to fixing note entity tables in views
652 ([144](https://github.com/civicrm/civicrm-backdrop/pull/144))**
653
654 - **[REF] Follow up fix to fixing note entity tables in views
655 ([646](https://github.com/civicrm/civicrm-drupal/pull/646))**
656
657 - **[NFC] - update code comment
658 ([20599](https://github.com/civicrm/civicrm-core/pull/20599))**
659
660 - **[NFC] Fix test failure on MySQL8 because of lack of order in API
661 ([20605](https://github.com/civicrm/civicrm-core/pull/20605))**
662
663 - **[NFC] [Test] Remove duplicate cleanup
664 ([20647](https://github.com/civicrm/civicrm-core/pull/20647))**
665
666 - **[NFC] [TEST] cleanup, more use of return in ActivityTest
667 ([20633](https://github.com/civicrm/civicrm-core/pull/20633))**
668
669 - **[NFC] Cleanup on membership test
670 ([20636](https://github.com/civicrm/civicrm-core/pull/20636))**
671
672 - **[NFC] [Test] Remove duplicate cleanup
673 ([20637](https://github.com/civicrm/civicrm-core/pull/20637))**
674
675 - **[NFC] Cleanup on contribution v3 api test
676 ([20638](https://github.com/civicrm/civicrm-core/pull/20638))**
677
678 - **[NFC] Add in unit test to lock in the fix for the is_deleted in where clause
679 issue ([20733](https://github.com/civicrm/civicrm-core/pull/20733))**
680
681 - **[NFC] Afform - Regenerate civix files
682 ([20615](https://github.com/civicrm/civicrm-core/pull/20615))**
683
684 - **[NFC] Fix test setup on a couple of tests to make them pass in php8
685 ([20614](https://github.com/civicrm/civicrm-core/pull/20614))**
686
687 - **[NFC] Update various npm depdencies used only in unit testing
688 ([20748](https://github.com/civicrm/civicrm-core/pull/20748))**
689
690 - **[NFC] Improve use of return parameters in ContributionPage test class
691 ([20648](https://github.com/civicrm/civicrm-core/pull/20648))**
692
693 - **[NFC] Unit test for 20602
694 ([20745](https://github.com/civicrm/civicrm-core/pull/20745))**
695
696 - **[NFC] Remove boilerplate comment block from APIv4 classes
697 ([20700](https://github.com/civicrm/civicrm-core/pull/20700))**
698
699 - **[NFC] Github action script to run regen.sh for you
700 ([20680](https://github.com/civicrm/civicrm-core/pull/20680))**
701
702 - **[NFC] Regenerate ContributeProduct DAO and also fix search_kit install on
703 MySQL 5.6 on test boxes
704 ([20674](https://github.com/civicrm/civicrm-core/pull/20674))**
705
706 - **[NFC] Fixes an issue in this unit test where we are trying to do an array
707 access on an integer
708 ([20652](https://github.com/civicrm/civicrm-core/pull/20652))**
709
710 - **[NFC] [Test] Cleanup on membership type test
711 ([20649](https://github.com/civicrm/civicrm-core/pull/20649))**
712
713 - **[NFC/Unit test] - Add a test for getCaseRoles when there's a lot of roles
714 assigned ([20657](https://github.com/civicrm/civicrm-core/pull/20657))**
715
716 - **[NFC] [TEST] cleanup, more use of return in AddressTest
717 ([20635](https://github.com/civicrm/civicrm-core/pull/20635))**
718
719 - **[NFC] [Test] Specify return values on get calls
720 ([20632](https://github.com/civicrm/civicrm-core/pull/20632))**
721
722 - **[TEST][NFC] CiviCRM reaching MySQL join limit (Work Towards
723 [dev/core#1191](https://lab.civicrm.org/dev/core/-/issues/1191):
724 [20618](https://github.com/civicrm/civicrm-core/pull/20618) and
725 [20622](https://github.com/civicrm/civicrm-core/pull/20622))**
726
727 - **[php8-compact][NFC] Update testGroupClause unit test to work on php8
728 ([20624](https://github.com/civicrm/civicrm-core/pull/20624))**
729
730 - **[php8-compact][REF] Fix failing custom group test on php8 by better handling
731 strings in 2nd key of the extends array and also validating the child and main
732 entity work ([20616](https://github.com/civicrm/civicrm-core/pull/20616))**
733
734 - **[php8-compact] Fix APIv4 Group Concat Test by setting dataType to be NULL if
735 the first expression is a SQL Function
736 ([20655](https://github.com/civicrm/civicrm-core/pull/20655))**
737
738 - **[php8-compact] Fix issues with participant message templates causing Event
739 Tests to fail ([20613](https://github.com/civicrm/civicrm-core/pull/20613))**
740
741 - **[php8-compact] Add in guards into common templates to assit with fixing test
742 failures on php8
743 ([20543](https://github.com/civicrm/civicrm-core/pull/20543))**
744
745 - **[php8-compact] Fix Array to String in formButtons in CRM_Core_FormTest
746 ([20608](https://github.com/civicrm/civicrm-core/pull/20608))**
747
748 - **[php8-compact] Fix Event Form test for php8 by setting totalAmount in the
749 form params ([20623](https://github.com/civicrm/civicrm-core/pull/20623))**
750
751 - **[php8-compat] Alternate to the alternate for testOpeningForms
752 ([20603](https://github.com/civicrm/civicrm-core/pull/20603))**
753
754 - **[php8-compact] Fix apiv4 tests in php8 by not incrementing an array
755 ([20594](https://github.com/civicrm/civicrm-core/pull/20594))**
756
757 - **[php8-compact] Further test fixes for php8
758 ([20597](https://github.com/civicrm/civicrm-core/pull/20597))**
759
760 - **[php8-compact] Fix failing AuthorizeNetIPN tests on php8
761 ([20596](https://github.com/civicrm/civicrm-core/pull/20596))**
762
763 - **[php8-compact] Fix failing CRM_Core_InvokeTest on php8
764 ([20595](https://github.com/civicrm/civicrm-core/pull/20595))**
765
766 - **[php8-compact] Fix Session Test errors in php8
767 ([20593](https://github.com/civicrm/civicrm-core/pull/20593))**
768
769 - **[php8-compact] Fix Case Activity Message Template to fix test failure in
770 php8 ([20592](https://github.com/civicrm/civicrm-core/pull/20592))**
771
772 - **[php8-compact] Fix PDF Letter Test by ensuring that all actual DB fields
773 are in the tokens array and also by resetting the static cache of tokens
774 ([20591](https://github.com/civicrm/civicrm-core/pull/20591))**
775
776 - **[php8-compact] Add in guards into various templates to fix the
777 CRM_Contact_Form_IndividualTest suite
778 ([20579](https://github.com/civicrm/civicrm-core/pull/20579))**
779
780 - **[php8-compact] Fixes test failures in the
781 CRM_Contribute_Form_ContributionTest class due to template issues
782 ([20581](https://github.com/civicrm/civicrm-core/pull/20581))**
783
784 - **[php8-compact] Fix Dashboard Tests by adding in if guards into smarty
785 templates ([20575](https://github.com/civicrm/civicrm-core/pull/20575))**
786
787 - **[php8-compact] Add in guards into various templates to fix issues in test
788 runs on php8 ([20544](https://github.com/civicrm/civicrm-core/pull/20544))**
789
790 ## <a name="credits"></a>Credits
791
792 This release was developed by the following code authors:
793
794 AGH Strategies - Alice Frumin, Andie Hunt; Agileware - Francis Whittle, Justin
795 Freeman; Akos Garai; Australian Greens - John Twyman; Blackfly Solutions - Alan
796 Dixon; Christian Wach; Circle Interactive - Pradeep Nayak; CiviCoop - Jaap
797 Jansma; CiviCRM - Coleman Watts, Tim Otten; CompuCorp - Debarshi Bhaumik; Dave
798 D; Gokhalemethod- Sadashiv; iXiam - Luciano Spiegel; JMA Consulting - Monish
799 Deb, Seamus Lee; Lemniscus - Noah Miller; Lighthouse Consulting and Design -
800 Brian Shaughnessy; Megaphone Technology Consulting - Jon Goldberg; MJW
801 Consulting - Matthew Wire; Skvare - Sunil Pawar; Wikimedia Foundation - Eileen
802 McNaughton
803
804 Most authors also reviewed code for this release; in addition, the following
805 reviewers contributed their comments:
806
807 Artful Robot - Rich Lott; Bob Silvern; CiviCoop - Klaas Eikelboom; CiviDesk -
808 Yashodha Chaku; Coop SymbioTIC - Mathieu Lutfy; Freeform Solutions - Herb van
809 den Dool; Fuzion - Jitendra Purohit; JMA Consulting - Joe Murray; Ray Wright;
810 Semper IT - Karin Gerritsen; Squiffle Consulting - Aidan Saunders; Tadpole
811 Collective - Kevin Cristiano; Tech To The People - Xavier Dutoit; Third Sector
812 Design - Michael McAndrew; Web Access - Kurund Jalmi
813
814 ## <a name="feedback"></a>Feedback
815
816 These release notes are edited by Alice Frumin and Andie Hunt. If you'd like
817 to provide feedback on them, please log in to https://chat.civicrm.org/civicrm
818 and contact `@agh1`.