Merge pull request #22808 from colemanw/searchKitMailingTask
[civicrm-core.git] / release-notes / 5.47.0.md
1 # CiviCRM 5.47.0
2
3 Released March 4, 2022
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? | no |
21 | **Introduce features?** | **yes** |
22 | **Fix bugs?** | **yes** |
23
24 ## <a name="features"></a>Features
25
26 ### Core CiviCRM
27
28 - **Add created_date & modified_date to civicrm_relationship
29 ([22480](https://github.com/civicrm/civicrm-core/pull/22480))**
30
31 Adds created_date & modified_date to the civicrm_relationship table.
32
33 - **Add option to display money tokens without formatting
34 ([22548](https://github.com/civicrm/civicrm-core/pull/22548))**
35
36 Adds an option to display money tokens without formatting.
37
38 - **SearchKit - Improve field/operator/value selection UI
39 ([22604](https://github.com/civicrm/civicrm-core/pull/22604))**
40
41 Improves the SearchKit UI for selecting field/operator/value conditions.
42 Affects various parts of the UI, like css conditions, link conditions,
43 where/on/having clauses, etc.
44
45 - **SearchKit - Support operators in conditional css rules
46 ([22552](https://github.com/civicrm/civicrm-core/pull/22552))**
47
48 Allows operators other than = in SearchKit conditional style rules.
49
50 - **SearchKit - Allow Smarty in field rewrite
51 ([22592](https://github.com/civicrm/civicrm-core/pull/22592))**
52
53 Gives the ability to use Smarty syntax in the "rewrite" of SearchKit displays.
54
55 - **SearchKit: Relationship Description unavailable
56 ([dev/core#3019](https://lab.civicrm.org/dev/core/-/issues/3019):
57 [22606](https://github.com/civicrm/civicrm-core/pull/22606))**
58
59 Exposes relationship description, created/modified_date & permissions fields
60 in SearchKit.
61
62 - **SearchKit - add/remove tags action for all taggable entities
63 ([21865](https://github.com/civicrm/civicrm-core/pull/21865))**
64
65 Adds a new angular-based action to SearchKit for bulk adding/removing tags
66 from contacts, cases, activities, etc.
67
68 - **SearchKit - Support conditional links
69 ([22557](https://github.com/civicrm/civicrm-core/pull/22557))**
70
71 Adds an advanced feature to conditionally show/hide links in a
72 links/buttons/menu column, based on user permissions or row values.
73
74 - **SearchKit - Update operator labels
75 ([22554](https://github.com/civicrm/civicrm-core/pull/22554))**
76
77 Updates SearchKit labels to hopefully better describe ReGex.
78
79 - **SearchKit - Enable joins for custom fields and option groups
80 ([22355](https://github.com/civicrm/civicrm-core/pull/22355))**
81
82 Enables SearchKit to join custom groups to custom fields, and option groups to
83 option values.
84
85 - **APIv4 - Add SubscriptionHistory entity
86 ([22435](https://github.com/civicrm/civicrm-core/pull/22435))**
87
88 Adds a SubscriptionHistory entity to APIv4.
89
90 - **APIv4 - Make Permission 'group' discoverable in API Explorer
91 ([22559](https://github.com/civicrm/civicrm-core/pull/22559))**
92
93 Makes `group` options for the `Permission` API discoverable.
94
95 - **Improve field accessibility in legacycustomsearches
96 ([22710](https://github.com/civicrm/civicrm-core/pull/22710))**
97
98 Improves accessibility of legacy custom searches.
99
100 - **Expose a REST end-point through standard routing (Work Towards
101 [dev/core#2077](https://lab.civicrm.org/dev/core/-/issues/2077):
102 [19727](https://github.com/civicrm/civicrm-core/pull/19727) and
103 [22058](https://github.com/civicrm/civicrm-core/pull/22058))**
104
105 Makes 'civicrm/ajax/rest' interoperable with 'extern/rest.php' parameters and
106 adds an AuthX configuration screen.
107
108 - **Define more usable queue DX for multithreaded background work (Work Towards
109 [dev/core#1304](https://lab.civicrm.org/dev/core/-/issues/1304):
110 [22324](https://github.com/civicrm/civicrm-core/pull/22324) and
111 [22657](https://github.com/civicrm/civicrm-core/pull/22657))**
112
113 Adds a high-level queue tracking table and updates the programmatic APIs to
114 make it easier to work with persistent queues.
115
116 - **Civi::pipe - Add support for background worker-processes with JSON pipes
117 ([22262](https://github.com/civicrm/civicrm-core/pull/22262))**
118
119 Add an entry-point for external scripts to send multiple API calls to a
120 CiviCRM worker-process - while only bootstrapping one time.
121
122 - **Expose email on hold as filter for reports (Work towards
123 [dev/core#3012](https://lab.civicrm.org/dev/core/-/issues/3012):
124 [22368](https://github.com/civicrm/civicrm-core/pull/22368) and
125 [22572](https://github.com/civicrm/civicrm-core/pull/22572))**
126
127 Exposes email on hold as filter on contribution reports.
128
129 - **Extensions - Add dependency status check
130 ([22464](https://github.com/civicrm/civicrm-core/pull/22464))**
131
132 Adds a system status check to ensure extension dependencies are met, and warn
133 the admin of missing dependencies.
134
135 - **Add metadata so Activity Created Date is available in Form Builder
136 ([22320](https://github.com/civicrm/civicrm-core/pull/22320))**
137
138 Makes the Activity Created date available in Form Builder.
139
140 - **Move permission access handling for
141 civicrm/admin/financial/financialType?reset=1 to extension
142 ([22685](https://github.com/civicrm/civicrm-core/pull/22685) and
143 [22499](https://github.com/civicrm/civicrm-core/pull/22499))**
144
145 Moves permission access handling for
146 civicrm/admin/financial/financialType?reset=1 to extension.
147
148 - **Add setting "format_locale"
149 ([dev/core#3095](https://lab.civicrm.org/dev/core/-/issues/3095):
150 [22885](https://github.com/civicrm/civicrm-core/pull/22885))**
151
152 Adds a new setting, "Formatting Locale", which specifies that dates and
153 numbers should formatted according to designated localization rules.
154 This setting may be useful for a locale (eg `en_NZ`) whose language closely
155 resembles another (eg `en_US`) but which has a different currency.
156
157 ### CiviContribute
158
159 - **Why are unique labels for price fields required?
160 ([dev/event#66](https://lab.civicrm.org/dev/event/-/issues/66):
161 [22508](https://github.com/civicrm/civicrm-core/pull/22508))**
162
163 Makes it so duplicate price field labels are allowed.
164
165 - **Use tokens in offline contribution receipt (new installs)
166 ([22560](https://github.com/civicrm/civicrm-core/pull/22560))**
167
168 Use tokens instead of Smarty Variables in the offline contribution receipt
169 template for new installs.
170
171 ### CiviEvent
172
173 - **Event Registration: allow default Price Set values from the URL
174 ([22313](https://github.com/civicrm/civicrm-core/pull/22313))**
175
176 Makes it so one can set the default price field on event registration forms
177 using URL parameters.
178
179 - **Account for time zone on event registration pages
180 ([dev/core#2122](https://lab.civicrm.org/dev/core/-/issues/2122):
181 [22620](https://github.com/civicrm/civicrm-core/pull/22620),
182 [22622](https://github.com/civicrm/civicrm-core/pull/22622),
183 [20476](https://github.com/civicrm/civicrm-core/pull/20476),
184 [22619](https://github.com/civicrm/civicrm-core/pull/22619),
185 [22645](https://github.com/civicrm/civicrm-core/pull/22645) and
186 [22644](https://github.com/civicrm/civicrm-core/pull/22644))**
187
188 Adds timezone support for events.
189
190 - **updating misleading labels on buttons to confirmation pages
191 ([dev/core#1613](dev/core#1613):
192 [20251](https://github.com/civicrm/civicrm-core/pull/20251))**
193
194 Changes the event registration button text based on if there are additional
195 participants.
196
197 ### CiviGrant
198
199 - **CiviGrant - Use SearchKit for contact summary tab
200 ([22467](https://github.com/civicrm/civicrm-core/pull/22467))**
201
202 switches the Grants tab on the contact summary page to use a SearchKit Display.
203 It looks nearly identical before and after, but is now easily customizable via
204 the SearchKit & Form-Builder GUI.
205
206 - **Migrate CiviGrant component to an extension
207 ([22064](https://github.com/civicrm/civicrm-core/pull/22064))**
208
209 Moves the CiviGrant component to an extension.
210
211 ### CiviMail
212
213 - **Start phasing out 'preferred_mail_format' (Work towards
214 [dev/core#2866](https://lab.civicrm.org/dev/core/-/issues/2866):
215 [22634](https://github.com/civicrm/civicrm-core/pull/22634) and
216 [22632](https://github.com/civicrm/civicrm-core/pull/22632))**
217
218 Generates text version of message at send time if one is not present.
219
220 ### WordPress Integration
221
222 - **wp-cli/civicrm.php - Add 'civicrm pipe' subcommand
223 ([270](https://github.com/civicrm/civicrm-wordpress/pull/270))**
224
225 Adds support for subcommand `wp civicrm pipe`.
226
227 ## <a name="bugs"></a>Bugs resolved
228
229 ### Core CiviCRM
230
231 - **Only format Smarty aliases as money if specified
232 ([22547](https://github.com/civicrm/civicrm-core/pull/22547))**
233
234 - **Avoid PHP notices on activity form
235 ([22666](https://github.com/civicrm/civicrm-core/pull/22666))**
236
237 - **Fix typo preventing uninstalling ckeditor4
238 ([22691](https://github.com/civicrm/civicrm-core/pull/22691))**
239
240 - **Fix return values for APIv3 Job.delete
241 ([22561](https://github.com/civicrm/civicrm-core/pull/22561))**
242
243 - **enforce required fields on Contact.duplicatecheck
244 ([22741](https://github.com/civicrm/civicrm-core/pull/22741))**
245
246 - **APIv4 SortableEntity - Fix sorting custom fields with option groups
247 ([22716](https://github.com/civicrm/civicrm-core/pull/22716))**
248
249 - **APIv4 - Correctly return date-only custom field values without the time
250 ([22649](https://github.com/civicrm/civicrm-core/pull/22649))**
251
252 - **APIv4 - Use empty string instead of 'null' to pass null values to the db
253 ([22587](https://github.com/civicrm/civicrm-core/pull/22587))**
254
255 - **APIv4 - Fix incorrect placement of decodeRows in loop
256 ([22413](https://github.com/civicrm/civicrm-core/pull/22413))**
257
258 - **SearchKit: In-place edit for custom dropdown field - can't blank it out
259 ([dev/report#92](https://lab.civicrm.org/dev/report/-/issues/92):
260 [22358](https://github.com/civicrm/civicrm-core/pull/22358))**
261
262 - **Minor SearchKit UI filtering annoyance
263 ([dev/core#3032](https://lab.civicrm.org/dev/core/-/issues/3032):
264 [22505](https://github.com/civicrm/civicrm-core/pull/22505))**
265
266 - **SearchKit - Fix selecting operators and values in clauses
267 ([22653](https://github.com/civicrm/civicrm-core/pull/22653))**
268
269 - **SearchKit - Refresh contents after saving a popup when in a block/tab
270 ([22809](https://github.com/civicrm/civicrm-core/pull/22809))**
271
272 - **Don't throw PHP notice when rendering dedupefind template.
273 ([22709](https://github.com/civicrm/civicrm-core/pull/22709))**
274
275 - **Enotice fixes with datepicker
276 ([22705](https://github.com/civicrm/civicrm-core/pull/22705))**
277
278 - **Enotice fix with priceset template
279 ([22708](https://github.com/civicrm/civicrm-core/pull/22708))**
280
281 - **Enotice fixes
282 ([22697](https://github.com/civicrm/civicrm-core/pull/22697))**
283
284 - **Enotice fix
285 ([22436](https://github.com/civicrm/civicrm-core/pull/22436))**
286
287 - **Enotice fixes
288 ([22471](https://github.com/civicrm/civicrm-core/pull/22471))**
289
290 - **CustomGroup - Ensure 'name' is always unique
291 ([22675](https://github.com/civicrm/civicrm-core/pull/22675))**
292
293 - **Another set of PHPdoc corrections
294 ([22658](https://github.com/civicrm/civicrm-core/pull/22658))**
295
296 - **Fix batch summary to use the api
297 ([22618](https://github.com/civicrm/civicrm-core/pull/22618))**
298
299 - **Fix Smarty notices in footer files
300 ([22613](https://github.com/civicrm/civicrm-core/pull/22613))**
301
302 - **Remove use of .font-size11pt and .font-size12pt
303 ([22314](https://github.com/civicrm/civicrm-core/pull/22314))**
304
305 - **Don't pass redundent empty strings when instantiating
306 CRM_Core_ShowHideBlocks
307 ([22605](https://github.com/civicrm/civicrm-core/pull/22605))**
308
309 - **Fix call to log method warn (should be warning)
310 ([22602](https://github.com/civicrm/civicrm-core/pull/22602))**
311
312 - **tpl notices and docblocks
313 ([22449](https://github.com/civicrm/civicrm-core/pull/22449))**
314
315 - **Ensure assigned Smarty array has empty keys (not no keys)
316 ([22379](https://github.com/civicrm/civicrm-core/pull/22379))**
317
318 - **Stop calling hook twice
319 ([22404](https://github.com/civicrm/civicrm-core/pull/22404))**
320
321 - **Activity Details field on batch update via profile has wrong fieldname
322 ([22568](https://github.com/civicrm/civicrm-core/pull/22568))**
323
324 - **Re-fix enotice on searchType to work with default modifiers
325 ([22466](https://github.com/civicrm/civicrm-core/pull/22466))**
326
327 - **Unable to add new custom field set or new fields (to existing field set)
328 after enabling multilingual setting.
329 ([dev/translation#38](https://lab.civicrm.org/dev/translation/-/issues/38):
330 [22647](https://github.com/civicrm/civicrm-core/pull/22647))**
331
332 - **System.check permissions changed in Civi 5.46
333 ([dev/core#3055](https://lab.civicrm.org/dev/core/-/issues/3055):
334 [22733](https://github.com/civicrm/civicrm-core/pull/22733))**
335
336 Fixes the dedupe check to not require elevated permissions.
337
338 - **Search Builder crashes if you have admin access and CiviGrant is not enabled
339 ([dev/core#3056](https://lab.civicrm.org/dev/core/-/issues/3056):
340 [22714](https://github.com/civicrm/civicrm-core/pull/22714))**
341
342 - **CiviGrant info.xml update missing from 5.47 and
343 CRM_Utils_VersioncheckTest::testGetSiteStats should have been failing for a
344 while ([dev/core#3057](https://lab.civicrm.org/dev/core/-/issues/3057):
345 [22717](https://github.com/civicrm/civicrm-core/pull/22717))**
346
347 - **Regression - fatal error when viewing custom fields with money > 1000
348 ([dev/core#3059](https://lab.civicrm.org/dev/core/-/issues/3059):
349 [22727](https://github.com/civicrm/civicrm-core/pull/22727))**
350
351 - **Fix broken function reference
352 ([22474](https://github.com/civicrm/civicrm-core/pull/22474))**
353
354 - **Use rolling window for translating 2-digit years into 4-digit years
355 ([22581](https://github.com/civicrm/civicrm-core/pull/22581))**
356
357 Fixes outdated hard-coded import logic: translates 2-digit years to 4 using
358 rolling -95yr to +5yr window
359
360 - **Rationalise relationship validation
361 ([22491](https://github.com/civicrm/civicrm-core/pull/22491))**
362
363 - **Stop calling confusing function that doesn't do much .....
364 ([22468](https://github.com/civicrm/civicrm-core/pull/22468))**
365
366 - **Navigation - Make required fields NOT NULL
367 ([22430](https://github.com/civicrm/civicrm-core/pull/22430))**
368
369 - **Fight back against copy & paste gone wild
370 ([22417](https://github.com/civicrm/civicrm-core/pull/22417))**
371
372 ### CiviCampaign
373
374 - **'CiviCampaign: access CiviCampaign' permission missing
375 ([dev/core#983](https://lab.civicrm.org/dev/core/-/issues/983):
376 [22459](https://github.com/civicrm/civicrm-core/pull/22459))**
377
378 ### CiviCase
379
380 - **CiviCase - Denote `created_date` as readonly
381 ([22608](https://github.com/civicrm/civicrm-core/pull/22608))**
382
383 - **Remove category from case activity template
384 ([22530](https://github.com/civicrm/civicrm-core/pull/22530))**
385
386 Remove category from case activity template to fix e-notices.
387
388 ### CiviContribute
389
390 - **Fix ContributionRecur.payment_processor_id pseudoconstant
391 ([22750](https://github.com/civicrm/civicrm-core/pull/22750))**
392
393 - **Manage Contribution page, the link to "Online Contribution (Test-drive)" is
394 an admin-only URL to register in the backend, should be a frontend URL
395 ([22672](https://github.com/civicrm/civicrm-core/pull/22672))**
396
397 - **Avoid PHP notice on 'Manage Contribution Pages' screen
398 ([22661](https://github.com/civicrm/civicrm-core/pull/22661))**
399
400 - **PCP is still active after contribution page is disabled.
401 ([dev/core#899](https://lab.civicrm.org/dev/core/-/issues/899):
402 [20845](https://github.com/civicrm/civicrm-core/pull/20845))**
403
404 - **don't allow multiple currencies in a batch
405 ([20884](https://github.com/civicrm/civicrm-core/pull/20884))**
406
407 - **Foreign constraint violation on APIv3 contribution create if
408 financial_type_id is numeric
409 ([dev/core#3063](https://lab.civicrm.org/dev/core/-/issues/3063):
410 [22740](https://github.com/civicrm/civicrm-core/pull/22740))**
411
412 - **Error cancelling a contribution if CiviPledge is disabled
413 ([dev/core#3066](https://lab.civicrm.org/dev/core/-/issues/3066):
414 [22779](https://github.com/civicrm/civicrm-core/pull/22779))**
415
416 - **Import of contribution fails when invalid campaign ID is provided
417 ([dev/core#2989](https://lab.civicrm.org/dev/core/-/issues/2989):
418 [22235](https://github.com/civicrm/civicrm-core/pull/22235))**
419
420 - **Simplify getting contact_id from recurring contribution when generating
421 subscription URLs
422 ([22448](https://github.com/civicrm/civicrm-core/pull/22448))**
423
424 - **Fix Fatal Error on contribution tab and user dashboard when recurring
425 payment generated using extension get disabled
426 ([22264](https://github.com/civicrm/civicrm-core/pull/22264))**
427
428 ### CiviEvent
429
430 - **CiviCRM Event, the link to "On-line Registration (Test Drive)" is an
431 admin-only URL to register in the backend, should be a frontend URL
432 ([22669](https://github.com/civicrm/civicrm-core/pull/22669))**
433
434 - **Set default values to avoid notices when rendering (event templates screen)
435 ([22663](https://github.com/civicrm/civicrm-core/pull/22663))**
436
437 ### CiviGrant
438
439 - **Fix Grant::retrieve to meet full phpcs standard
440 ([22558](https://github.com/civicrm/civicrm-core/pull/22558))**
441
442 - **CiviGrant - Fix installation of dependencies during upgrade
443 ([22881](https://github.com/civicrm/civicrm-core/pull/22881))**
444
445 - **CiviGrant - Menu appears twice
446 ([dev/core#3087](https://lab.civicrm.org/dev/core/-/issues/3087):
447 [22855](https://github.com/civicrm/civicrm-core/pull/22855))**
448
449 - **CiviGrant - Don't return grant fields as contact fields
450 ([dev/core#3069](https://lab.civicrm.org/dev/core/-/issues/3069):
451 [22851](https://github.com/civicrm/civicrm-core/pull/22851))**
452
453 - **CiviGrant - Declare API permissions
454 ([22791](https://github.com/civicrm/civicrm-core/pull/22791))**
455
456 ### CiviMail
457
458 - **Editing a mailing triggers two autosaves instead of one
459 ([dev/core#2587](https://lab.civicrm.org/dev/core/-/issues/2587):
460 [20561](https://github.com/civicrm/civicrm-core/pull/20561))**
461
462 - **MailingEventQueue - Use consistent CamelCaseName. Prevent conflicts.
463 ([22343](https://github.com/civicrm/civicrm-core/pull/22343))**
464
465 - **add `contact_id` to email params in `emailLetter` function
466 ([22538](https://github.com/civicrm/civicrm-core/pull/22538))**
467
468 - **Fix syntax error in CRM_Mailing_Event_BAO_Reply
469 ([22453](https://github.com/civicrm/civicrm-core/pull/22453))**
470
471 - **Smarty notice fix on Email help
472 ([22470](https://github.com/civicrm/civicrm-core/pull/22470))**
473
474 - **CiviMail - Fix undeclared Javascript variables ([22879](https://github.com/civicrm/civicrm-core/pull/22879))**
475
476 ### CiviMember
477
478 - **Fix spelling mistake in function name, addMembershipToRealtedContacts should
479 be addMembershipToRelatedContacts
480 ([22673](https://github.com/civicrm/civicrm-core/pull/22673))**
481
482 - **Fix Smarty notices in membership dashboard
483 ([22660](https://github.com/civicrm/civicrm-core/pull/22660))**
484
485 - **Don't default membership type create to inactive
486 ([22498](https://github.com/civicrm/civicrm-core/pull/22498))**
487
488 ### WordPress Integration
489
490 - **404 Error when I use the APIv4 with WordPress Multisite -> because no "do
491 not delete" post was generated for the subsite
492 ([dev/wordpress#59](https://lab.civicrm.org/dev/wordpress/-/issues/59):
493 [271](https://github.com/civicrm/civicrm-wordpress/pull/271))**
494
495 ## <a name="misc"></a>Miscellany
496
497 - **Move permission checks from Query & BAO to financialacl extension
498 ([22495](https://github.com/civicrm/civicrm-core/pull/22495))**
499
500 - **Add billingStateProvince and standardized property names
501 ([21583](https://github.com/civicrm/civicrm-core/pull/21583))**
502
503 - **Extensions - Revise prose for status check
504 ([22638](https://github.com/civicrm/civicrm-core/pull/22638))**
505
506 - **Add type to phpdoc comment for report statistic function
507 ([22514](https://github.com/civicrm/civicrm-core/pull/22514))**
508
509 - **Update phpdoc references to $self to include type
510 ([22513](https://github.com/civicrm/civicrm-core/pull/22513))**
511
512 - **Improve method phpdoc for CRM_Utils_System
513 ([22492](https://github.com/civicrm/civicrm-core/pull/22492))**
514
515 - **Run 'full Drupal strictness' standard over api/v3/examples
516 ([22528](https://github.com/civicrm/civicrm-core/pull/22528))**
517
518 - **Run stricter phpcs on Civi dir
519 ([22527](https://github.com/civicrm/civicrm-core/pull/22527))**
520
521 - **Fixes to spaces from phpcs
522 ([22535](https://github.com/civicrm/civicrm-core/pull/22535))**
523
524 - **Various phpdoc fixes
525 ([22509](https://github.com/civicrm/civicrm-core/pull/22509))**
526
527 - **Clarify contents of ids for further fixes
528 ([22402](https://github.com/civicrm/civicrm-core/pull/22402))**
529
530 - **Replace all isset checks on line.tax_rate
531 ([22421](https://github.com/civicrm/civicrm-core/pull/22421))**
532
533 - **Move function to the class that 'owns' it
534 ([22472](https://github.com/civicrm/civicrm-core/pull/22472))**
535
536 - **PHPCS standards on css....
537 ([22529](https://github.com/civicrm/civicrm-core/pull/22529))**
538
539 - **More comments & style fixes
540 ([22533](https://github.com/civicrm/civicrm-core/pull/22533))**
541
542 - **Re-run regen
543 ([22536](https://github.com/civicrm/civicrm-core/pull/22536))**
544
545 - **Add consistency between checkTemplateFileExists functions,
546 ([22586](https://github.com/civicrm/civicrm-core/pull/22586))**
547
548 - **Increase GroupContact:create deprecation
549 ([22416](https://github.com/civicrm/civicrm-core/pull/22416))**
550
551 - **APIv4 - Docblock updates, mark BAO::create functions deprecated
552 ([22415](https://github.com/civicrm/civicrm-core/pull/22415))**
553
554 - **DAO - Centralize logic to derive unique name from label
555 ([22570](https://github.com/civicrm/civicrm-core/pull/22570))**
556
557 - **Pass remove-by-reference
558 ([22593](https://github.com/civicrm/civicrm-core/pull/22593))**
559
560 - **Mark function as private
561 ([22457](https://github.com/civicrm/civicrm-core/pull/22457))**
562
563 - **Stop returning unused parameters
564 ([22410](https://github.com/civicrm/civicrm-core/pull/22410))**
565
566 - **Duplicate function from deprecated utils onto calling classes & remove
567 ([22481](https://github.com/civicrm/civicrm-core/pull/22481))**
568
569 - **Fix phpdoc types for $_query in CRM_Core_Selector_Base subclasses
570 ([22424](https://github.com/civicrm/civicrm-core/pull/22424))**
571
572 - **Correctly document types for class consts
573 ([22659](https://github.com/civicrm/civicrm-core/pull/22659))**
574
575 - **Make phpType definitions in generated DAO objects more accurate.
576 ([22607](https://github.com/civicrm/civicrm-core/pull/22607))**
577
578 - **Ensure all APIv3 functions have documented types
579 ([22674](https://github.com/civicrm/civicrm-core/pull/22674))**
580
581 - **CRM_Core_Component (et al) - Deprecate unused functions
582 ([22566](https://github.com/civicrm/civicrm-core/pull/22566))**
583
584 - **Move deprecated function back to the only class that calls it
585 ([22517](https://github.com/civicrm/civicrm-core/pull/22517))**
586
587 - **Fix PHP comments
588 ([22526](https://github.com/civicrm/civicrm-core/pull/22526))**
589
590 - **A whole bunch of phpdoc fixes
591 ([22454](https://github.com/civicrm/civicrm-core/pull/22454))**
592
593 - **Another set of PHPDoc fixes
594 ([22522](https://github.com/civicrm/civicrm-core/pull/22522))**
595
596 - **Fix more phpdoc comments in member links functions
597 ([22521](https://github.com/civicrm/civicrm-core/pull/22521))**
598
599 - **Fix PHP comments
600 ([22515](https://github.com/civicrm/civicrm-core/pull/22515))**
601
602 - **Merge function back into parent function
603 ([22516](https://github.com/civicrm/civicrm-core/pull/22516))**
604
605 - **Simplify variables pass in & out of function
606 ([22439](https://github.com/civicrm/civicrm-core/pull/22439))**
607
608 - **Clean up input and outputs
609 ([22440](https://github.com/civicrm/civicrm-core/pull/22440))**
610
611 - **Tidy CRM_Report_Page_Options code
612 ([22432](https://github.com/civicrm/civicrm-core/pull/22432))**
613
614 - **Refactor buildPremiumPreviewBlock function to make intended usage clearer
615 ([22541](https://github.com/civicrm/civicrm-core/pull/22541))**
616
617 - **Fix class references in phpdoc comments
618 ([22434](https://github.com/civicrm/civicrm-core/pull/22434))**
619
620 - **Contact BAO - Deprecate unused function
621 ([22610](https://github.com/civicrm/civicrm-core/pull/22610))**
622
623 - **report cleanup - no functional change
624 ([22611](https://github.com/civicrm/civicrm-core/pull/22611))**
625
626 - **Split View Relationship tpl ito own file
627 ([22617](https://github.com/civicrm/civicrm-core/pull/22617))**
628
629 - **Fix inaccuracy in docblock for method calculateBaseScheduleDate
630 ([22631](https://github.com/civicrm/civicrm-core/pull/22631))**
631
632 - **Resolve inaccuracies in CRM_Core_BAO_File::attachmentInfo docblock
633 ([22629](https://github.com/civicrm/civicrm-core/pull/22629))**
634
635 - **Tidy up functions related to printing.
636 ([22601](https://github.com/civicrm/civicrm-core/pull/22601))**
637
638 - **Do not pass in tablename
639 ([22625](https://github.com/civicrm/civicrm-core/pull/22625))**
640
641 - **More phpcbs code cleanups
642 ([22551](https://github.com/civicrm/civicrm-core/pull/22551))**
643
644 - **Resolve docblock inaccuracy in CRM_Contribute_Form_Task_TaskTrait
645 ([22646](https://github.com/civicrm/civicrm-core/pull/22646))**
646
647 - **Contributor key: Add Ian Wilson
648 ([22781](https://github.com/civicrm/civicrm-core/pull/22781))**
649
650 - **Bump follow-redirects from 1.11.0 to 1.14.7
651 ([22696](https://github.com/civicrm/civicrm-core/pull/22696))**
652
653 - **Bump engine.io from 4.1.1 to 4.1.2
654 ([22695](https://github.com/civicrm/civicrm-core/pull/22695))**
655
656 - **Bump ansi-regex from 5.0.0 to 5.0.1
657 ([22693](https://github.com/civicrm/civicrm-core/pull/22693))**
658
659 - **Bump log4js from 6.3.0 to 6.4.1
660 ([22694](https://github.com/civicrm/civicrm-core/pull/22694))**
661
662 - **Update composer.json for composer 2.2 allow-plugins
663 ([22692](https://github.com/civicrm/civicrm-core/pull/22692))**
664
665 - **Follow up fn removal
666 ([22556](https://github.com/civicrm/civicrm-core/pull/22556))**
667
668 - **Fully remove contactAB function
669 ([22485](https://github.com/civicrm/civicrm-core/pull/22485))**
670
671 - **Remove support for deprecated key
672 ([22443](https://github.com/civicrm/civicrm-core/pull/22443))**
673
674 - **Remove duplicate file
675 ([22569](https://github.com/civicrm/civicrm-core/pull/22569))**
676
677 - **Remove obsolete scripts
678 ([22549](https://github.com/civicrm/civicrm-core/pull/22549))**
679
680 - **Remove method getWordReplacement.
681 ([22577](https://github.com/civicrm/civicrm-core/pull/22577))**
682
683 - **Remove unused variable
684 ([22545](https://github.com/civicrm/civicrm-core/pull/22545))**
685
686 - **Remove some old scripts
687 ([22534](https://github.com/civicrm/civicrm-core/pull/22534))**
688
689 - **Remove handling for impossible array
690 ([22494](https://github.com/civicrm/civicrm-core/pull/22494))**
691
692 - **Remove obsolete postIPN script
693 ([22550](https://github.com/civicrm/civicrm-core/pull/22550))**
694
695 - **Remove / deprecate case param handling
696 ([22420](https://github.com/civicrm/civicrm-core/pull/22420))**
697
698 - **Remove useless function
699 ([22585](https://github.com/civicrm/civicrm-core/pull/22585))**
700
701 - **Remove param default
702 ([22590](https://github.com/civicrm/civicrm-core/pull/22590))**
703
704 - **Remove htmlFile validation rule, as it can't possibly work.
705 ([22425](https://github.com/civicrm/civicrm-core/pull/22425))**
706
707 - **Remove broken script
708 ([22473](https://github.com/civicrm/civicrm-core/pull/22473))**
709
710 - **Remove unreachable else
711 ([22406](https://github.com/civicrm/civicrm-core/pull/22406))**
712
713 - **Remove & deprecate silly function
714 ([22456](https://github.com/civicrm/civicrm-core/pull/22456))**
715
716 - **Remove always-true-if
717 ([22486](https://github.com/civicrm/civicrm-core/pull/22486))**
718
719 - **Remove seemingly unreachable help text
720 ([22469](https://github.com/civicrm/civicrm-core/pull/22469))**
721
722 - **Remove unused variable
723 ([22462](https://github.com/civicrm/civicrm-core/pull/22462))**
724
725 - **Remove IF that only loops through one value
726 ([22455](https://github.com/civicrm/civicrm-core/pull/22455))**
727
728 - **Remove if & foreach that no longer do anything
729 ([22447](https://github.com/civicrm/civicrm-core/pull/22447))**
730
731 - **Remove call to PHP 4 function
732 ([22446](https://github.com/civicrm/civicrm-core/pull/22446))**
733
734 - **Remove empty check
735 ([22444](https://github.com/civicrm/civicrm-core/pull/22444))**
736
737 - **Remove unreachable, nonsensical code
738 ([22518](https://github.com/civicrm/civicrm-core/pull/22518))**
739
740 - **Remove deprecated code
741 ([22411](https://github.com/civicrm/civicrm-core/pull/22411))**
742
743 - **Remove check for contact_check as it is always an array here
744 ([22407](https://github.com/civicrm/civicrm-core/pull/22407))**
745
746 - **Remove unreachable code
747 ([22594](https://github.com/civicrm/civicrm-core/pull/22594))**
748
749 - **Remove unnecessary pass-by-ref
750 ([22397](https://github.com/civicrm/civicrm-core/pull/22397))**
751
752 - **Remove always-true IF
753 ([22399](https://github.com/civicrm/civicrm-core/pull/22399))**
754
755 - **Remove deprecated language construct
756 ([22627](https://github.com/civicrm/civicrm-core/pull/22627))**
757
758 - **Remove isset from online contribution receipt
759 ([22615](https://github.com/civicrm/civicrm-core/pull/22615))**
760
761 - **Remove unused invalidProfiles variable, and simplify template.
762 ([22704](https://github.com/civicrm/civicrm-core/pull/22704))**
763
764 - **(REF) Switch to using new `CRM_Core_Component::isEnabled()`
765 ([22687](https://github.com/civicrm/civicrm-core/pull/22687))**
766
767 - **(REF) Remove unused variable
768 ([22398](https://github.com/civicrm/civicrm-core/pull/22398))**
769
770 - **(REF) Tidy up group.tpl
771 ([22668](https://github.com/civicrm/civicrm-core/pull/22668))**
772
773 - **(REF) Switch OptionGroup BAO to use new centralized logic to make name from
774 title ([22654](https://github.com/civicrm/civicrm-core/pull/22654))**
775
776 - **(REF) Rename variable to be meaningful
777 ([22431](https://github.com/civicrm/civicrm-core/pull/22431))**
778
779 - **(REF) Improve APIv4 save functions
780 ([22403](https://github.com/civicrm/civicrm-core/pull/22403))**
781
782 - **(REF) CRM_Core_Resources - Limit visibility of `getEntityRefMetadata`
783 ([22511](https://github.com/civicrm/civicrm-core/pull/22511))**
784
785 - **(REF) ContactUtils - Rename local variables
786 ([22510](https://github.com/civicrm/civicrm-core/pull/22510))**
787
788 - **(REF) CoreResources - Simplify disabled component check
789 ([22506](https://github.com/civicrm/civicrm-core/pull/22506))**
790
791 - **(REF) Remove constructors that do nothing
792 ([22544](https://github.com/civicrm/civicrm-core/pull/22544))**
793
794 - **(REF) Extract function `CRM_Core_Component::isEnabled()`
795 ([22567](https://github.com/civicrm/civicrm-core/pull/22567))**
796
797 - **(REF) SearchKit docblock cleanup
798 ([22603](https://github.com/civicrm/civicrm-core/pull/22603))**
799
800 - **(REF) SearchKit - Function extraction
801 ([22598](https://github.com/civicrm/civicrm-core/pull/22598))**
802
803 - **(REF) SearchKit - Simplify import/export popup code
804 ([22507](https://github.com/civicrm/civicrm-core/pull/22507))**
805
806 - **(REF) Upgrade jQuery UI to 1.13.0
807 ([22576](https://github.com/civicrm/civicrm-core/pull/22576))**
808
809 - **(REF) Components - Use extracted function
810 ([22573](https://github.com/civicrm/civicrm-core/pull/22573))**
811
812 - **(REF) SavedSearch - Deprecate/remove redundant/unused functions
813 ([22542](https://github.com/civicrm/civicrm-core/pull/22542))**
814
815 - **(REF) Use CRM_Contact_BAO_ContactType::basicTypes()
816 ([22520](https://github.com/civicrm/civicrm-core/pull/22520))**
817
818 - **(REF) Remove unused _colours property
819 ([22525](https://github.com/civicrm/civicrm-core/pull/22525))**
820
821 - **(REF) Tidy up formatting in gotv.tpl, remove extra </div>
822 ([22433](https://github.com/civicrm/civicrm-core/pull/22433))**
823
824 - **(REF) Stop returning unused variables
825 ([22401](https://github.com/civicrm/civicrm-core/pull/22401))**
826
827 - **(REF) Centralize BAO handling of custom data
828 ([22426](https://github.com/civicrm/civicrm-core/pull/22426))**
829
830 - **(REF) Remove handling for no organization being passed
831 ([22395](https://github.com/civicrm/civicrm-core/pull/22395))**
832
833 - **(REF) APIv4 - Rename trait 'SoftDelete' to 'SoftDeleteEntity'
834 ([22662](https://github.com/civicrm/civicrm-core/pull/22662))**
835
836 - **(REF) Cleanup Contact BAO variables
837 ([22609](https://github.com/civicrm/civicrm-core/pull/22609))**
838
839 - **(REF) Queues - Expand docblocks. Extract SQL trait.
840 ([22681](https://github.com/civicrm/civicrm-core/pull/22681))**
841
842 - **(REF) APIv4 - Deprecate and stop using PreSaveSubscriber
843 ([22648](https://github.com/civicrm/civicrm-core/pull/22648))**
844
845 - **(REF) CustomField Admin - Decouple page code from form code
846 ([22519](https://github.com/civicrm/civicrm-core/pull/22519))**
847
848 - **(NFC) Fix typo in docblock
849 ([22409](https://github.com/civicrm/civicrm-core/pull/22409))**
850
851 - **(NFC) Tidy up phpdoc in CRM_Utils_QueryFormatter
852 ([22423](https://github.com/civicrm/civicrm-core/pull/22423))**
853
854 - **(NFC) Update test example template and regenerate examples
855 ([22531](https://github.com/civicrm/civicrm-core/pull/22531))**
856
857 - **(NFC) Correct type hints for bad null default values
858 ([22600](https://github.com/civicrm/civicrm-core/pull/22600))**
859
860 - **(NFC) Minor phpdoc fixes to
861 CRM_Mailing_Event_BAO_Unsubscribe::send_unsub_response
862 ([22574](https://github.com/civicrm/civicrm-core/pull/22574))**
863
864 - **(NFC) CiviReport, etal - More phpdoc fixes
865 ([22565](https://github.com/civicrm/civicrm-core/pull/22565))**
866
867 - **(NFC) Minor amends to getGroupByFromSelectColumns
868 ([22575](https://github.com/civicrm/civicrm-core/pull/22575))**
869
870 - **(NFC) Correctly document CRM_Utils_Hook::pre to allow null ID
871 ([22562](https://github.com/civicrm/civicrm-core/pull/22562))**
872
873 - **(NFC) Update PHPDoc for alterDeferredRevenueItems
874 ([22563](https://github.com/civicrm/civicrm-core/pull/22563))**
875
876 - **(NFC) Comment fixes Stricter phpcs
877 ([22555](https://github.com/civicrm/civicrm-core/pull/22555))**
878
879 - **(NFC) Remaining css phpcs fixes
880 ([22553](https://github.com/civicrm/civicrm-core/pull/22553))**
881
882 - **(NFC) Fixes to the type definitions for contactType methods
883 ([22524](https://github.com/civicrm/civicrm-core/pull/22524))**
884
885 - **(NFC) Civi::pipe - Swap various quotes
886 ([22503](https://github.com/civicrm/civicrm-core/pull/22503))**
887
888 - **NFC: Clean up description for alterDisplayName hook
889 ([22501](https://github.com/civicrm/civicrm-core/pull/22501))**
890
891 - **(NFC) Membership Tests - Update assertions to match behavior circa leap-day
892 ([22871](https://github.com/civicrm/civicrm-core/pull/22871))**
893
894 - **(NFC) Update Contribution Recur DAO following regen
895 ([22858](https://github.com/civicrm/civicrm-core/pull/22858))**
896
897 - **(NFC) RestTest - Skip testNotCMSUser_q when it's not supported
898 ([22817](https://github.com/civicrm/civicrm-core/pull/22817))**
899
900 - **APIv4 - Fix test
901 ([22414](https://github.com/civicrm/civicrm-core/pull/22414))**
902
903 - **Test cleanup - remove direct calls to BAO_Membership::add
904 ([22497](https://github.com/civicrm/civicrm-core/pull/22497))**
905
906 - **Unit tests for 22429 and apply same treatment to other money format
907 functions ([22442](https://github.com/civicrm/civicrm-core/pull/22442))**
908
909 - **Simplify APIv4 conformance test
910 ([22579](https://github.com/civicrm/civicrm-core/pull/22579))**
911
912 - **Add unit test on updateGreeting & remove deprecated fn call
913 ([22482](https://github.com/civicrm/civicrm-core/pull/22482))**
914
915 - **[test] - Add test coverage for adjusting custom group weights
916 ([22512](https://github.com/civicrm/civicrm-core/pull/22512))**
917
918 - **Fix testMultipleMembershipsContribution to use order api
919 ([22274](https://github.com/civicrm/civicrm-core/pull/22274))**
920
921 - **Port test form earlier PR
922 ([22502](https://github.com/civicrm/civicrm-core/pull/22502))**
923
924 - **Test for APIv4 contact delete bug
925 ([dev/core#2757](https://lab.civicrm.org/dev/core/-/issues/2757):
926 [22458](https://github.com/civicrm/civicrm-core/pull/22458))**
927
928 ## <a name="credits"></a>Credits
929
930 This release was developed by the following code authors:
931
932 AGH Strategies - Andie Hunt; Agileware - Francis Whittle, Justin Freeman;
933 BrightMinded Ltd - Bradley Taylor; Christian Wach; CiviCoop - Klaas Eikelboom;
934 CiviCRM - Coleman Watts, Tim Otten; CiviDesk - Yashodha Chaku; Coop SymbioTIC -
935 Mathieu Lutfy; Dave D; Freeform Solutions - Herb van den Dool; Jens Schuppe; JMA
936 Consulting - Seamus Lee; Joinery - Allen Shaw; Lemniscus - Noah Miller;
937 Megaphone Technology Consulting - Jon Goldberg; MJW Consulting - Matthew Wire;
938 PERORA SRL - Samuele Masetto; Registered Nurses' Association of Ontario - Ian
939 Wilson; Romain Thouvenin; Skvare - Sunil Pawar; Third Sector Design - Kurund
940 Jalmi; Wikimedia Foundation - Eileen McNaughton
941
942 Most authors also reviewed code for this release; in addition, the following
943 reviewers contributed their comments:
944
945 Andy Burns; Artful Robot - Rich Lott; Betty Dolfing; Blackfly Solutions - Alan
946 Dixon; Circle Interactive - Pradeep Nayak; CiviCoop - Jaap Jansma; Coop
947 SymbioTIC - Shane Bill; Fuzion - Luke Stewart; in2part; JMA Consulting - Joe
948 Murray, Monish Deb; Korlon - Stuart Gaston; Mikey O'Toole; Peter Boling; Tadpole
949 Collective - Kevin Cristiano; Wildsight - Lars Sanders-Green