remove extra question mark
[civicrm-core.git] / release-notes / 5.41.0.md
1 # CiviCRM 5.41.0
2
3 Released September 1, 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?** | **yes** |
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 - **[CiviReport] Add "is null" and "is not null" to OP_MULTISELECT_SEPARATOR
29 ([dev/core#2652](https://lab.civicrm.org/dev/core/-/issues/2652):
30 [20794](https://github.com/civicrm/civicrm-core/pull/20794))**
31
32 Makes it possible to filter by `is null` and `is not null` on reports that use
33 OP_MULTISELECT_SEPARATOR.
34
35 - **Add ContributionProduct and EntityBatch APIv4 Entity
36 ([20505](https://github.com/civicrm/civicrm-core/pull/20505))**
37
38 Adds `ContributionProduct` and `EntityBatch` as APIv4 entities.
39
40 - **Add v4 managed api entity
41 ([20932](https://github.com/civicrm/civicrm-core/pull/20932))**
42
43 Adds `Managed` as an APIv4 entity.
44
45 - **APIv4 - Better handling of output value using GROUP_CONCAT
46 ([20896](https://github.com/civicrm/civicrm-core/pull/20896))**
47
48 Improves output formatting of the `GROUP_CONCAT` sql function in APIv4.
49
50 - **Search kit / afform allow default for filters
51 ([dev/core#2734](https://lab.civicrm.org/dev/core/-/issues/2734):
52 [21005](https://github.com/civicrm/civicrm-core/pull/21005))**
53
54 Allows end users to set a default value for fields in SearchKit and Afform.
55
56 - **SearchKit - Add links to view/edit/delete relationships
57 ([20886](https://github.com/civicrm/civicrm-core/pull/20886))**
58
59 Adds links to view/edit/delete the relationship when joining on related
60 contacts in SearchKit.
61
62 - **Search kit request - calculated field in display
63 ([dev/core#2704](https://lab.civicrm.org/dev/core/-/issues/2704):
64 [20947](https://github.com/civicrm/civicrm-core/pull/20947))**
65
66 Supports SQL functions in the SearchKit UI.
67
68 - **SearchKit - Support all fields as tokens
69 ([20880](https://github.com/civicrm/civicrm-core/pull/20880))**
70
71 Improves SearchDisplay support for tokens (in link URLs, list labels, and
72 rewritten fields).
73
74 - **Enable range search for money fields in search kit + afform
75 ([20930](https://github.com/civicrm/civicrm-core/pull/20930))**
76
77 Makes it possible to range search money fields in SearchKit and Afform UIs.
78
79 - **Use template variable to add or remove swap button.
80 ([21003](https://github.com/civicrm/civicrm-core/pull/21003))**
81
82 Uses template variable to add or remove swap button on the Activity edit form.
83
84 - **Add hook for validating checksum
85 ([20858](https://github.com/civicrm/civicrm-core/pull/20858))**
86
87 Adds a hook that can be called to override/modify checksum validation.
88
89 - **Distinguish custom field VIEW from EDIT permissions
90 ([20837](https://github.com/civicrm/civicrm-core/pull/20837))**
91
92 Fixes the previously blurry distinction between permission to VIEW or EDIT a
93 group of custom fields.
94
95 - **CRM_Utils_Type::validatePhpType - Helper to validate PHP type expressions
96 ([20923](https://github.com/civicrm/civicrm-core/pull/20923))**
97
98 Adds a helper for evaluating the type expressions that appear in PHP
99 docblocks. This is a building block for other code that uses docblocks for
100 validation.
101
102 ### CiviContribute
103
104 - **Proposal - make future recurring contribution instances modifiable & not
105 fail if the only contribution is deleted. (Work Towards
106 [dev/financial#6](https://lab.civicrm.org/dev/financial/-/issues/6):
107 [20685](https://github.com/civicrm/civicrm-core/pull/20685))**
108
109 Adds a button to the "Recurring Contributions" tab of the Contact Summary to
110 create/view the template contribution.
111
112 - **Update label on payment instrument
113 ([20977](https://github.com/civicrm/civicrm-core/pull/20977))**
114
115 Defines a label "Payment Method" for payment instrument.
116
117 - **Improve accessibility for price fields of the type select by adding the
118 price field label to the placeholder.
119 ([20927](https://github.com/civicrm/civicrm-core/pull/20927))**
120
121 Makes placeholder text for price fields of the type select more specific and
122 more accessible by adding the label to them.
123
124 - **Move financialACLs to a core extension (Work Towards
125 [20768](https://github.com/civicrm/civicrm-core/pull/20768))**
126
127 Switches the Membership Browse page from DAO retrieval to using APIv4.
128
129 - **Move reCAPTCHA to core extension (Work Towards
130 [dev/core#2571](https://lab.civicrm.org/dev/core/-/issues/2571):
131 [20315](https://github.com/civicrm/civicrm-core/pull/20315))**
132
133 Adds helper functions for reCAPTCHA extension.
134
135 - **Move legacy custom search framework to a core extension
136 ([dev/core#2721](https://lab.civicrm.org/dev/core/-/issues/2721):
137 [20952](https://github.com/civicrm/civicrm-core/pull/20952),
138 [20955](https://github.com/civicrm/civicrm-core/pull/20955) and
139 [20954](https://github.com/civicrm/civicrm-core/pull/20954))**
140
141 Moves custom search framework to a core extension.
142
143 ### WordPress Integration
144
145 - **Add shortcode support for profile map view
146 ([dev/wordpress#106](https://lab.civicrm.org/dev/wordpress/-/issues/106):
147 [252](https://github.com/civicrm/civicrm-wordpress/pull/252) and
148 [20877](https://github.com/civicrm/civicrm-core/pull/20877))**
149
150 Adds support for map view for profiles using shortcodes.
151
152 - **Add setup pcp page shortcode
153 ([253](https://github.com/civicrm/civicrm-wordpress/pull/253))**
154
155 Makes it possible to insert a PCP page using a shortcode.
156
157 - **Added setup pcp page wordpress shortcode
158 ([20601](https://github.com/civicrm/civicrm-core/pull/20601))**
159
160 Makes it possible to add a setup a PCP page using a shortcode.
161
162 ## <a name="bugs"></a>Bugs resolved
163
164 ### Core CiviCRM
165
166 - **Reconcile tokens misnamed or missing on legacy class
167 ([21039](https://github.com/civicrm/civicrm-core/pull/21039))**
168
169 - **Reconcile contribution amount tokens
170 ([21036](https://github.com/civicrm/civicrm-core/pull/21036) and
171 [21038](https://github.com/civicrm/civicrm-core/pull/21038))**
172
173 Reconcile tokens misnamed or missing on legacy class.
174
175 - **Fix advertised token for source
176 ([21037](https://github.com/civicrm/civicrm-core/pull/21037))**
177
178 - **Update contribution_page_id token in sched reminders
179 ([21035](https://github.com/civicrm/civicrm-core/pull/21035))**
180
181 - **Reconcile and upgrade tokens for payment instrument, financial type
182 ([21000](https://github.com/civicrm/civicrm-core/pull/21000))**
183
184 - **Switch contribution action schedule tokens to use advertised tokens for
185 cancel_date & source
186 ([20999](https://github.com/civicrm/civicrm-core/pull/20999))**
187
188 - **Swap {$displayName} smarty for {contact.display_name} token
189 ([20867](https://github.com/civicrm/civicrm-core/pull/20867) and
190 [20885](https://github.com/civicrm/civicrm-core/pull/20885))**
191
192 Work to make tokens more consistent.
193
194 - **Rename legacy token for contribution id to match sched reminder tokens
195 ([20998](https://github.com/civicrm/civicrm-core/pull/20998))**
196
197 - **Give administer CiviCRM data access to administer custom groups
198 ([20578](https://github.com/civicrm/civicrm-core/pull/20578))**
199
200 - **CustomGroup - change admin permission to 'administer CiviCRM data'
201 ([20833](https://github.com/civicrm/civicrm-core/pull/20833))**
202
203 Fine-tunes the permissions needed to access all custom data.
204
205 - **Selection in quick search result list is not visible
206 ([dev/user-interface#37](https://lab.civicrm.org/dev/user-interface/-/issues/37):
207 [21102](https://github.com/civicrm/civicrm-core/pull/21102))**
208
209 - **Redis 6.06 errors - Deprecated function - civicrm 5.38.0
210 ([dev/core#2648](https://lab.civicrm.org/dev/core/-/issues/2648):
211 [20587](https://github.com/civicrm/civicrm-core/pull/20587))**
212
213 - **CiviReport grouping broken wrt filters
214 ([dev/core#2684](https://lab.civicrm.org/dev/core/-/issues/2684):
215 [20820](https://github.com/civicrm/civicrm-core/pull/20820))**
216
217 Fixes filters report templates to permit more than one table in a grouping.
218
219 - **On logging detail report show the words not the numbers
220 ([dev/core#2691](https://lab.civicrm.org/dev/core/-/issues/2691):
221 [20844](https://github.com/civicrm/civicrm-core/pull/20844))**
222
223 - **Logging skips custom fields if you specify a non-standard table name
224 ([dev/core#2709](https://lab.civicrm.org/dev/core/-/issues/2709):
225 [20918](https://github.com/civicrm/civicrm-core/pull/20918))**
226
227 - **Cannot disable contact type/sub-type
228 ([dev/core#2710](https://lab.civicrm.org/dev/core/-/issues/2710):
229 [20919](https://github.com/civicrm/civicrm-core/pull/20919))**
230
231 - **Connection fail in runSqlQuery function when using DSN with SSL
232 ([dev/core#2726](https://lab.civicrm.org/dev/core/-/issues/2726):
233 [20974](https://github.com/civicrm/civicrm-core/pull/20974))**
234
235 - **Contact Dashboard: relationships: wrong links appear if "Pledges" not
236 displayed ([dev/core#2740](https://lab.civicrm.org/dev/core/-/issues/2740):
237 [21051](https://github.com/civicrm/civicrm-core/pull/21051))**
238
239 - **Creating a regular group from advanced search displays commas for the type
240 when looking at the groups listing page
241 ([dev/core#2742](https://lab.civicrm.org/dev/core/-/issues/2742):
242 [21053](https://github.com/civicrm/civicrm-core/pull/21053))**
243
244 - **Performance regression in API3 related to campaign_id parameter
245 ([dev/core#2743](https://lab.civicrm.org/dev/core/-/issues/2743):
246 [21099](https://github.com/civicrm/civicrm-core/pull/21099))**
247
248 - **APIv4 - Fix dumb typo breaking color lookup
249 ([20817](https://github.com/civicrm/civicrm-core/pull/20817))**
250
251 - **Add test & fix for failing OR clause in apv4
252 ([20906](https://github.com/civicrm/civicrm-core/pull/20906))**
253
254 - **APIv4 - Fix calculated fields in bridge entities
255 ([20908](https://github.com/civicrm/civicrm-core/pull/20908))**
256
257 - **APIv4 - Fix pseudoconstant matching reliability across joins
258 ([20799](https://github.com/civicrm/civicrm-core/pull/20799))**
259
260 - **APIv4 - Fix and add tests for comparison SQL functions
261 ([20893](https://github.com/civicrm/civicrm-core/pull/20893))**
262
263 - **Fix v4 api to do custom field delete in tearDown
264 ([20863](https://github.com/civicrm/civicrm-core/pull/20863))**
265
266 - **APIv4 - Fix output of membershipType auto_renew field
267 ([20840](https://github.com/civicrm/civicrm-core/pull/20840))**
268
269 - **Afform - Use correct contact type when loading field options
270 ([20996](https://github.com/civicrm/civicrm-core/pull/20996))**
271
272 - **SearchKit - Fix permission to access task list
273 ([21045](https://github.com/civicrm/civicrm-core/pull/21045))**
274
275 Fixes a regression preventing access to the tasks menu in search displays for
276 non-admin users.
277
278 - **SearchKit - Auto-apply filters passed in from Afform markup
279 ([20758](https://github.com/civicrm/civicrm-core/pull/20758))**
280
281 Ensures that any scalar value passed as a filter via Afform markup will be
282 auto-applied.
283
284 - **SearchKit - fix deprecated join
285 ([20968](https://github.com/civicrm/civicrm-core/pull/20968))**
286
287 - **SearchKit - Fix pager count return value
288 ([20878](https://github.com/civicrm/civicrm-core/pull/20878))**
289
290 - **Make report subtotals work for custom fields
291 ([20752](https://github.com/civicrm/civicrm-core/pull/20752))**
292
293 - **Fix bulk adding custom fields with logging on
294 ([21019](https://github.com/civicrm/civicrm-core/pull/21019))**
295
296 - **Reduce deadlock while inserting custom data for Address
297 ([20924](https://github.com/civicrm/civicrm-core/pull/20924))**
298
299 - **Do not generate a notice when a vcard is downloaded with a non-primary email
300 or non-primary phone number
301 ([20993](https://github.com/civicrm/civicrm-core/pull/20993))**
302
303 - **Fix for failure (fatal error and silent failure) to clean up full text
304 indices ([20921](https://github.com/civicrm/civicrm-core/pull/20921))**
305
306 - **Fix upgrade message when nothing was changed
307 ([20994](https://github.com/civicrm/civicrm-core/pull/20994))**
308
309 - **Upgrade message is scrunched up next to the previous sentence
310 ([20986](https://github.com/civicrm/civicrm-core/pull/20986))**
311
312 - **Add upgrade routine to remove old action schedule token
313 ([20978](https://github.com/civicrm/civicrm-core/pull/20978))**
314
315 - **Improve cleanup on indexer test
316 ([20909](https://github.com/civicrm/civicrm-core/pull/20909) and
317 [20920](https://github.com/civicrm/civicrm-core/pull/20920))**
318
319 Fix indexes to play nicely with MariaDB.
320
321 - **Activity tasks - don't add invalid tasks
322 ([20951](https://github.com/civicrm/civicrm-core/pull/20951))**
323
324 - **Fix databaseSupportsUTF8MB4
325 ([20905](https://github.com/civicrm/civicrm-core/pull/20905))**
326
327 - **Add ts() function within CRM_Core_Error::statusBounce() method
328 ([20857](https://github.com/civicrm/civicrm-core/pull/20857))**
329
330 - **Greenwich - fix select2 font size
331 ([20911](https://github.com/civicrm/civicrm-core/pull/20911))**
332
333 - **Fix onCrmUiSelect to use current scope and apply to the digest cycle
334 ([20879](https://github.com/civicrm/civicrm-core/pull/20879))**
335
336 - **Also check timestamp types for update() when trying to update a timestamp
337 field with a blank value
338 ([326](https://github.com/civicrm/civicrm-packages/pull/326))**
339
340 - **Fix error message when unable to delete ManagedEntity
341 ([20946](https://github.com/civicrm/civicrm-core/pull/20946))**
342
343 - **Capitalization Fix
344 ([20913](https://github.com/civicrm/civicrm-core/pull/20913))**
345
346 - **Smarty notices for New Activity / New Case for tags for attachments
347 ([20957](https://github.com/civicrm/civicrm-core/pull/20957))**
348
349 - **PHP E_NOTICE during upgrade
350 ([20980](https://github.com/civicrm/civicrm-core/pull/20980))**
351
352 - **Fix PHP notice in recaptcha lib
353 ([20899](https://github.com/civicrm/civicrm-core/pull/20899))**
354
355 - **some typo fixes
356 ([20897](https://github.com/civicrm/civicrm-core/pull/20897))**
357
358 - **PHP notice fixes on options page
359 ([20816](https://github.com/civicrm/civicrm-core/pull/20816))**
360
361 - **Fix a typo in social networking buttons
362 ([20839](https://github.com/civicrm/civicrm-core/pull/20839))**
363
364 - **Enotice fix on extensions page
365 ([20801](https://github.com/civicrm/civicrm-core/pull/20801))**
366
367 - **Smarty notices on logging detail report
368 ([20948](https://github.com/civicrm/civicrm-core/pull/20948))**
369
370 - **Smarty warning about pager location on all CiviReports
371 ([20949](https://github.com/civicrm/civicrm-core/pull/20949))**
372
373 - **Smarty notices - Missing type on logging civireport
374 ([20843](https://github.com/civicrm/civicrm-core/pull/20843))**
375
376 - **Fix undefined tpl vars
377 ([20828](https://github.com/civicrm/civicrm-core/pull/20828))**
378
379 - **Fix undefined tpl variables
380 ([20813](https://github.com/civicrm/civicrm-core/pull/20813))**
381
382 - **Tpl notice fixes
383 ([21050](https://github.com/civicrm/civicrm-core/pull/21050))**
384
385 - **tpl enotice fix
386 ([20827](https://github.com/civicrm/civicrm-core/pull/20827))**
387
388 - **E-notice fix ([20830](https://github.com/civicrm/civicrm-core/pull/20830))**
389
390 - **Enotice fix ([21041](https://github.com/civicrm/civicrm-core/pull/21041))**
391
392 - **Enotice fix ([21040](https://github.com/civicrm/civicrm-core/pull/21040))**
393
394 ### CiviCase
395
396 - **Smarty warnings on Manage Case
397 ([21002](https://github.com/civicrm/civicrm-core/pull/21002))**
398
399 - **Case Dashboard: fix labels on my/all radio buttons, and simplify label text
400 ([20958](https://github.com/civicrm/civicrm-core/pull/20958))**
401
402 - **Move/rename case export files for consistency
403 ([20988](https://github.com/civicrm/civicrm-core/pull/20988))**
404
405 ### CiviContribute
406
407 - **Token syntax plan - pseudoconstants (Work Towards
408 [dev/core#2650](https://lab.civicrm.org/dev/core/-/issues/2650):
409 [20864](https://github.com/civicrm/civicrm-core/pull/20864) and
410 [20961](https://github.com/civicrm/civicrm-core/pull/20961))**
411
412 Adds variations on the token {contribution.contribution_status_id} which
413 support names and labels, i.e. `{contribution.contribution_status_id}`,
414 `{contribution.contribution_status_id:name}` and
415 `{contribution.contribution_status_id:label}`.
416
417 - **In Accounting Batch it is not filtered by custom fields
418 ([dev/core#2642](https://lab.civicrm.org/dev/core/-/issues/2642):
419 [20556](https://github.com/civicrm/civicrm-core/pull/20556))**
420
421 Ensures that users can filter Accounting Batch transactions by custom fields.
422
423 - **Remove all calls to BAO_Contribution::completeOrder other than from
424 Payment.create (Work Towards
425 [dev/core#2693](https://lab.civicrm.org/dev/core/-/issues/2693):
426 [20852](https://github.com/civicrm/civicrm-core/pull/20852))**
427
428 - **delocalize total amount before passing to setOverrideTotal
429 ([21107](https://github.com/civicrm/civicrm-core/pull/21107))**
430
431 - **Deprecate guess work in line item handling
432 ([20775](https://github.com/civicrm/civicrm-core/pull/20775))**
433
434 - **Fixes getTemplateContribution to use a more reliable way to load line items
435 ([20784](https://github.com/civicrm/civicrm-core/pull/20784))**
436
437 - **Fix Payment.create to update financial_item.status_id
438 ([20941](https://github.com/civicrm/civicrm-core/pull/20941))**
439
440 - **Fix unit translation for recurring contributions
441 ([20308](https://github.com/civicrm/civicrm-core/pull/20308))**
442
443 - **fix missing 'on behalf of' and honoree labels in multilingual
444 ([20482](https://github.com/civicrm/civicrm-core/pull/20482))**
445
446 - **Fix 'includes tax' translation for PriceSet Checkbox fields
447 ([20926](https://github.com/civicrm/civicrm-core/pull/20926))**
448
449 - **Display configured currency on PCPPage instead of default
450 ([20904](https://github.com/civicrm/civicrm-core/pull/20904))**
451
452 - **Line items not visible on recurring contribution
453 ([dev/core#2624](https://lab.civicrm.org/dev/core/-/issues/2624):
454 [20399](https://github.com/civicrm/civicrm-core/pull/20399))**
455
456 Ensures Line items are visible on recurring contributions.
457
458 ### CiviEvent
459
460 - **fix crmValidate() not loading on event registration pages
461 ([21124](https://github.com/civicrm/civicrm-core/pull/21124))**
462
463 - **Fix transfer registration to transfer participant_payment row
464 ([20670](https://github.com/civicrm/civicrm-core/pull/20670))**
465
466 ### CiviGrant
467
468 - **enable paging if contact has more then 50 grants.
469 ([21008](https://github.com/civicrm/civicrm-core/pull/21008))**
470
471 ### CiviMail
472
473 - **Fix mailing task when there are no tasks
474 ([20989](https://github.com/civicrm/civicrm-core/pull/20989))**
475
476 - **Make final mailing from A/B test same template type and options as A/B so it
477 can be copied ([20096](https://github.com/civicrm/civicrm-core/pull/20096))**
478
479 - **Forward Mailing: remove duplicate buttons, cancel button
480 ([20782](https://github.com/civicrm/civicrm-core/pull/20782))**
481
482 ### CiviMember
483
484 - **Test, enotice fixes, handling for permissions key for Member_Tasks
485 ([20944](https://github.com/civicrm/civicrm-core/pull/20944))**
486
487 - **[regression] Free membership pages fail with "No Payment Processor Selected"
488 ([dev/core#2749](https://lab.civicrm.org/dev/core/-/issues/2749):
489 [21100](https://github.com/civicrm/civicrm-core/pull/21100))**
490
491 - **New membership: fix tax amount translation
492 ([20979](https://github.com/civicrm/civicrm-core/pull/20979))**
493
494 ### Drupal Integration
495
496 - **Drupal8 CiviCRM conflicts with Masquerade module
497 ([dev/drupal#54](https://lab.civicrm.org/dev/drupal/-/issues/54):
498 [31](https://github.com/civicrm/civicrm-drupal-8/pull/31))**
499
500 ### WordPress Integration
501
502 - **WordPress basepage_render shouldn't remove the 'the_content' filter AND
503 CiviCRM Shortcode issue with YoastSEO
504 ([dev/wordpress#107](https://lab.civicrm.org/dev/wordpress/-/issues/107) and
505 [dev/wordpress#112](https://lab.civicrm.org/dev/wordpress/-/issues/112):
506 [255](https://github.com/civicrm/civicrm-wordpress/pull/255))**
507
508 Reverts the removal of the content filter which caused errors for sites using
509 Avada themes and or the yoast plugin.
510
511 ## <a name="misc"></a>Miscellany
512
513 - **crmMonaco - Multiple updates. Toward message-template editing.
514 ([20786](https://github.com/civicrm/civicrm-core/pull/20786))**
515
516 - **Enable check on created participant payment rows
517 ([20650](https://github.com/civicrm/civicrm-core/pull/20650))**
518
519 - **Minor simplification - use casting
520 ([20847](https://github.com/civicrm/civicrm-core/pull/20847))**
521
522 - **Mark afform extensions as beta
523 ([20821](https://github.com/civicrm/civicrm-core/pull/20821))**
524
525 - **Add deprecation warning for modifiedDates
526 ([20805](https://github.com/civicrm/civicrm-core/pull/20805))**
527
528 - **Use type hinting for id
529 ([20850](https://github.com/civicrm/civicrm-core/pull/20850))**
530
531 - **CRM_Utils_Array::pathMove - Add helper to move an item within array tree
532 ([20866](https://github.com/civicrm/civicrm-core/pull/20866))**
533
534 - **Extract getCurrentMembership
535 ([20882](https://github.com/civicrm/civicrm-core/pull/20882))**
536
537 - **[REF] Remove references to contribution_invoice_settings (Work Towards
538 [dev/core#2719](https://lab.civicrm.org/dev/core/-/issues/2719):
539 [20971](https://github.com/civicrm/civicrm-core/pull/20971) and
540 [20862](https://github.com/civicrm/civicrm-core/pull/20862))**
541
542 - **[REF] Financial record processing - extract to new class to faciliate
543 cleanup (Work Towards
544 [dev/core#2715](https://lab.civicrm.org/dev/core/-/issues/2715):
545 [20872](https://github.com/civicrm/civicrm-core/pull/20872))**
546
547 - **Failing api4 test
548 api.v4.Action.CreateWithOptionGroupTest.testWithCustomDataForMultipleContacts
549 ([dev/core#2699](https://lab.civicrm.org/dev/core/-/issues/2699):
550 [20901](https://github.com/civicrm/civicrm-core/pull/20901))**
551
552 - **Remove deprecated lines of code
553 ([20873](https://github.com/civicrm/civicrm-core/pull/20873))**
554
555 - **Remove a couple of instances of 'contribution_mode' from tests
556 ([20831](https://github.com/civicrm/civicrm-core/pull/20831))**
557
558 - **Remove deprecated code
559 ([20848](https://github.com/civicrm/civicrm-core/pull/20848))**
560
561 - **Remove never-true-if
562 ([20853](https://github.com/civicrm/civicrm-core/pull/20853))**
563
564 - **Remove non-variable variables
565 ([20881](https://github.com/civicrm/civicrm-core/pull/20881))**
566
567 - **Remove obsolete code
568 ([20854](https://github.com/civicrm/civicrm-core/pull/20854))**
569
570 - **[REF] [Super trivial] -tighten up some casting
571 ([20964](https://github.com/civicrm/civicrm-core/pull/20964))**
572
573 - **[REF] SearchKit - Refactor pick-lists to use onCrmUiSelect directive
574 ([20910](https://github.com/civicrm/civicrm-core/pull/20910))**
575
576 - **[REF] Extract the function to load from the acl table
577 ([20868](https://github.com/civicrm/civicrm-core/pull/20868))**
578
579 - **[REF] Refactor SearchKit displays to inherit traits from a common base
580 ([20900](https://github.com/civicrm/civicrm-core/pull/20900))**
581
582 - **(REF) Extract TokenSmarty::render() from
583 MessageTemplate::renderMessageTemplate()
584 ([20870](https://github.com/civicrm/civicrm-core/pull/20870))**
585
586 - **[REF] Add in smarty modifier to replcae the upper smarty modifier to better
587 handle umlouts / accents
588 ([20892](https://github.com/civicrm/civicrm-core/pull/20892))**
589
590 - **(REF) APIv4 FieldSpec - Extract various traits (Civi\Schema\Traits\*)
591 ([20875](https://github.com/civicrm/civicrm-core/pull/20875))**
592
593 - **[REF] Fix functions to be protected
594 ([20869](https://github.com/civicrm/civicrm-core/pull/20869))**
595
596 - **(REF) Civi/Schema - Extract MagicGetterSetterTrait. Add test coverage.
597 ([20865](https://github.com/civicrm/civicrm-core/pull/20865))**
598
599 - **[Ref] Remove never-passed parameter
600 ([20871](https://github.com/civicrm/civicrm-core/pull/20871))**
601
602 - **[REF] Remove some non-variable variables
603 ([20874](https://github.com/civicrm/civicrm-core/pull/20874))**
604
605 - **[REF] Further order api cleanup
606 ([20829](https://github.com/civicrm/civicrm-core/pull/20829))**
607
608 - **[REF] Minor auth.net ipn simplification
609 ([20718](https://github.com/civicrm/civicrm-core/pull/20718))**
610
611 - **[REF] Remove unused variables
612 ([20834](https://github.com/civicrm/civicrm-core/pull/20834))**
613
614 - **[REF] Add in APIv4 Product Entity and Fix APIv4 Syntax Conformance test
615 failures on ContributionProduct and EntityBatch APIs
616 ([20819](https://github.com/civicrm/civicrm-core/pull/20819))**
617
618 - **[REF] Simplify isRenew handling on batch for membership
619 ([20791](https://github.com/civicrm/civicrm-core/pull/20791))**
620
621 - **[REF] minor fix - move last of processing before receipting
622 ([20969](https://github.com/civicrm/civicrm-core/pull/20969))**
623
624 - **[Ref] [Test] Move custom search tests to extension
625 ([20990](https://github.com/civicrm/civicrm-core/pull/20990))**
626
627 - **[REF] Fix utf8mb4 test in APIv4 and re-enable the altering of database in
628 the v3 version of the test and fix handling for first name field
629 ([21001](https://github.com/civicrm/civicrm-core/pull/21001))**
630
631 - **[REF] Upgrade CKEditor to 4.16.2
632 ([21108](https://github.com/civicrm/civicrm-core/pull/21108))**
633
634 - **(NFC) release-notes - Fix typo
635 ([21104](https://github.com/civicrm/civicrm-core/pull/21104))**
636
637 - **[NFC] Fix APIv4 Utf8mb4 test to ensure no mixed collation errors
638 ([21013](https://github.com/civicrm/civicrm-core/pull/21013))**
639
640 - **NFC - Reformat JSON file whitespace in Afform mock ext
641 ([20967](https://github.com/civicrm/civicrm-core/pull/20967))**
642
643 - **[NFC] Remove exceptions from comments
644 ([20943](https://github.com/civicrm/civicrm-core/pull/20943))**
645
646 - **[NFC] Typo in parameter for lybunt test
647 ([20934](https://github.com/civicrm/civicrm-core/pull/20934))**
648
649 - **[NFC] Do a proper tear down of fts in QueryFormatterTest
650 ([21004](https://github.com/civicrm/civicrm-core/pull/21004))**
651
652 - **[NFC/Unit test] - Failing test demonstrating blank timestamp updates
653 ([20891](https://github.com/civicrm/civicrm-core/pull/20891))**
654
655 - **[NFC/Unit test] - Test for #20892 - New smarty plugin crmUpper
656 ([20895](https://github.com/civicrm/civicrm-core/pull/20895))**
657
658 - **[NFC/Unit test] ReportTemplateTest - fix tests that assume setup from a
659 separate test ([20887](https://github.com/civicrm/civicrm-core/pull/20887))**
660
661 - **APIv4 - Add test to ensure superfluous option groups are not created
662 ([20902](https://github.com/civicrm/civicrm-core/pull/20902))**
663
664 - **[Test] Add cover for setting num_terms to 2
665 ([20939](https://github.com/civicrm/civicrm-core/pull/20939))**
666
667 - **Api test cleanup fixes
668 ([20876](https://github.com/civicrm/civicrm-core/pull/20876))**
669
670 - **Fix test to use valid financials
671 ([20956](https://github.com/civicrm/civicrm-core/pull/20956))**
672
673 - **Fix test to use order api & setup valid financials
674 ([20806](https://github.com/civicrm/civicrm-core/pull/20806))**
675
676 - **Unit test for invalidateChecksum hook
677 ([20973](https://github.com/civicrm/civicrm-core/pull/20973))**
678
679 - **contributor-key.yml: updates for Symbiotic
680 ([21044](https://github.com/civicrm/civicrm-core/pull/21044))**
681
682 - **Update contributor-key.yml
683 ([21033](https://github.com/civicrm/civicrm-core/pull/21033))**
684
685 - **Update contributor-key.yml
686 ([20812](https://github.com/civicrm/civicrm-core/pull/20812))**
687
688 - **Add to contributors file
689 ([20842](https://github.com/civicrm/civicrm-core/pull/20842))**
690
691 ## <a name="credits"></a>Credits
692
693 This release was developed by the following code authors:
694
695 AGH Strategies - Alice Frumin, Andie Hunt; Caltha - Tomasz Pietrzkowski;
696 CiviCoop - Jaap Jansma, Klaas Eikelboom; CiviCRM - Coleman Watts, Tim Otten;
697 CiviDesk - Yashodha Chaku; Coop SymbioTIC - Mathieu Lutfy, Samuel Vanhove; Dave
698 D; Diego Muñio; Erawat Chamanont; Gokhalemethod - Sadashiv; Greenpeace Central
699 and Eastern Europe - Patrick Figel; JMA Consulting - Monish Deb, Seamus Lee;
700 Kartik Kathuria; Lighthouse Consulting and Design - Brian Shaughnessy; Megaphone
701 Technology Consulting - Jon Goldberg; Miguel Almeida; MJW Consulting - Matthew
702 Wire; PERORA SRL - Samuele Masetto; Progressive Technology Project - Jamie
703 McClelland; Tadpole Collective - Kevin Cristiano; Third Sector Design - Kurund
704 Jalmi; Wikimedia Foundation - Eileen McNaughton, Elliott Eggleston; Wildsight -
705 Lars Sanders-Green
706
707 Most authors also reviewed code for this release; in addition, the following
708 reviewers contributed their comments:
709
710 a-n The Artists Information Company - William Mortada; ALL IN APPLI; Anatole;
711 Artful Robot - Rich Lott; CEPR - Josh Brown; Christian Wach; CompuCorp - Jamie
712 Novick; Coop SymbioTIC - Shane Bill; enCircle Solutions Ltd - Darren Woods;
713 Fuzion - Jitendra Purohit, Luke Stewart; GValFr35; in2part; JMA Consulting - Joe
714 Murray; jptillman; Makoa - Usha F. Matisson; OPEN - dewy; Squiffle Consulting -
715 Aidan Saunders
716
717 ## <a name="feedback"></a>Feedback
718
719 These release notes are edited by Alice Frumin and Andie Hunt. If you'd like
720 to provide feedback on them, please log in to https://chat.civicrm.org/civicrm
721 and contact `@agh1`.