Update 5.52.0.md
[civicrm-core.git] / release-notes / 5.39.0.md
1 # CiviCRM 5.39.0
2
3 Released July 7, 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 - **Separate the default language for contacts from the site language (Work Towards
29 [dev/core#2584](https://lab.civicrm.org/dev/core/-/issues/2584):
30 [20214](https://github.com/civicrm/civicrm-core/pull/20214))**
31
32 Improves user experience for multilingual sites by separating the
33 CiviCRM contacts default language setting from the site default language.
34
35 - **Canonize API for storing translated data (Work Towards
36 [dev/translation#67](https://lab.civicrm.org/dev/translation/-/issues/67):
37 [20478](https://github.com/civicrm/civicrm-core/pull/20478))**
38
39 Defines a "Translation" table (`civicrm_translation`), to represent a single
40 translated string (e.g. a translated message-title or a translated
41 event-description).
42
43 - **Allow for the default number of search results to be configurable
44 ([dev/core#2187](https://lab.civicrm.org/dev/core/-/issues/2187):
45 [20336](https://github.com/civicrm/civicrm-core/pull/20336 and
46 [18969](https://github.com/civicrm/civicrm-core/pull/18969))**
47
48 Creates a setting to define the number of search results to be returned.
49
50 - **Give the custom CSS file a 'name' to make it easier to manipulate in
51 hook_civicrm_alterBundle()
52 ([20278](https://github.com/civicrm/civicrm-core/pull/20278))**
53
54 Gives the resource bundles custom CSS file a useful 'name' to make it easier
55 to manipulate in the alterBundle hook.
56
57 - **OAuth: initial support for per-contact OAuth tokens
58 ([20189](https://github.com/civicrm/civicrm-core/pull/20189))**
59
60 Adds a system for managing OAuthContactTokens -- tokens linked to a
61 contact_id.
62
63 - **BAOs, Tests, etal - Support `HookInterface` and `EventSubscriberInterface`
64 for auto-registration
65 ([20427](https://github.com/civicrm/civicrm-core/pull/20427))**
66
67 Expands the functionality for declaring event-listeners in different classes,
68 making it easier to participate in Symfony events.
69
70 - **The version numbers for core-extensions should match core-proper.
71 ([dev/release#17](https://lab.civicrm.org/dev/release/-/issues/17):
72 [20303](https://github.com/civicrm/civicrm-core/pull/20303) and
73 [20302](https://github.com/civicrm/civicrm-core/pull/20302))**
74
75 Ensures that CiviCRM core extension version numbers are updated to match the
76 core release they are included in and denotes development stage of extensions
77 using icons.
78
79 - **Enable/Disable Extension Receives API Error (Work Towards
80 [dev/core#2646](https://lab.civicrm.org/dev/core/-/issues/2646):
81 [20564](https://github.com/civicrm/civicrm-core/pull/20564))**
82
83 Improves the error messages when disabling or enabling an extension causes an
84 API Error.
85
86 - **Regen.sh/setup.sh would be nice if the output for civicrm_generated.mysql
87 had long lines broken up
88 ([dev/core#1549](https://lab.civicrm.org/dev/core/-/issues/1549):
89 [20513](https://github.com/civicrm/civicrm-core/pull/20513))**
90
91 Improves display of civicrm_generated.mysql output so its easier to read.
92
93 - **Use new crm-angular-js instead of ng-app to bootstrap AngularJS
94 ([20419](https://github.com/civicrm/civicrm-core/pull/20419))**
95
96 Updates the method used to bootstrap Angular for internal consistency and so
97 that multiple angular apps can be used on the same page.
98
99 - **APIv4 - Save custom fields in bulk
100 ([20269](https://github.com/civicrm/civicrm-core/pull/20269))**
101
102 Makes it so custom fields can be saved in bulk thru APIv4.
103
104 - **Add APIv4 Batch.create spec
105 ([20501](https://github.com/civicrm/civicrm-core/pull/20501))**
106
107 Adds a spec for APIv4 Batch.create.
108
109 - **APIv4 - Make the @searchable flag explicit for OptionList type entities.
110 ([20560](https://github.com/civicrm/civicrm-core/pull/20560))**
111
112 Improves code for categorizing entities for SearchKit, making searchability
113 easier to grok and less magical/mysterious.
114
115 - **Apiv4 entity parity (Work Towards
116 [dev/core#2486](https://lab.civicrm.org/dev/core/-/issues/2486):
117 [20559](https://github.com/civicrm/civicrm-core/pull/20559),
118 [20499](https://github.com/civicrm/civicrm-core/pull/20499),
119 [20464](https://github.com/civicrm/civicrm-core/pull/20464),
120 [20609](https://github.com/civicrm/civicrm-core/pull/20609),
121 [20433](https://github.com/civicrm/civicrm-core/pull/20433) and
122 [20474](https://github.com/civicrm/civicrm-core/pull/20474))**
123
124 Works towards APIv4 parity with APIv3 by adding the following entities to
125 APIv4: WordReplacement, FinancialItem and ACLEntityRole.
126
127 - **Introduce civi.api4.authorizeRecord and civi.api4.validate
128 ([20533](https://github.com/civicrm/civicrm-core/pull/20533))**
129
130 Refactors APIv4 code so that events use more consistent style (ie
131 civi.api4.{$TASK} with alias civi.api4.{$TASK}::{$ENTITY}).
132
133 - **APIv4 Entity.get refactor to be more efficient
134 ([20470](https://github.com/civicrm/civicrm-core/pull/20470))**
135
136 Makes APIv4 Entity.get more efficient.
137
138 - **APIv4 - Return id_field as part of Entity.get
139 ([20457](https://github.com/civicrm/civicrm-core/pull/20457))**
140
141 Improves APIv4 metadata so it returns the name of the unique identifier field
142 for each entity (usually but not always named "id").
143
144 - **Add DedupeRule, DedupeRuleGroup and DedupeException API4 entity
145 ([20466](https://github.com/civicrm/civicrm-core/pull/20466))**
146
147 Adds the following entities to APIv4: DedupeRule, DedupeRuleGroup and
148 DedupeException.
149
150 - **Use PHPUnit8 in main test suites
151 ([20370](https://github.com/civicrm/civicrm-core/pull/20370))**
152
153 Makes phpunit8 the default test runner for PHP versions greater than 7.2 for
154 the core test suites.
155
156 - **Link styling with default greenwich theme is not linklike on search kit
157 screen ([dev/core#2403](https://lab.civicrm.org/dev/core/-/issues/2403):
158 [20341](https://github.com/civicrm/civicrm-core/pull/20341))**
159
160 Improves the SearchKit user interface by making links blue so that they are
161 easier to find.
162
163 - **Afform - Improve Gui, prefill & submit APIs
164 ([20383](https://github.com/civicrm/civicrm-core/pull/20383))**
165
166 Standardizes prefill & submit APIs to use the same logic for validating
167 contacts. Displays correct form URL in the Afform GUI depending on is_frontend
168 setting. Shows warning about url arguments to prevent unintentional
169 permissions escalation.
170
171 - **Afform Gui - Add support for entityRef fields
172 ([20216](https://github.com/civicrm/civicrm-core/pull/20216))**
173
174 Adds a widget to Afform for EntityRef to autocomplete contacts & other
175 entities, allows the autocomplete field to be changed to Number (for entering
176 ID) or Select (for choosing another entity on a form).
177
178 - **Afform Entity Reference Submit
179 ([20305](https://github.com/civicrm/civicrm-core/pull/20305))**
180
181 Improves Afform Submit handling to handle entity reference fields that
182 reference other form elements.
183
184 - **SearchKit - allow searches based on relationships
185 ([20558](https://github.com/civicrm/civicrm-core/pull/20558))**
186
187 Allows SearchKit searches based on relationships.
188
189 - **SearchKit - Add API filter for contacts in groups and smart groups
190 ([20507](https://github.com/civicrm/civicrm-core/pull/20507))**
191
192 Adds a filter-style field to search for contacts in (or not in) one or more
193 groups.
194
195 - **SearchKit - Update `hook_civicrm_searchKitTasks` signature
196 ([20467](https://github.com/civicrm/civicrm-core/pull/20467))**
197
198 Updates the hook_civicrm_searchKitTasks signature to include checkPermissions
199 and userId.
200
201 - **SearchKit - Add static groups and organize main entity selector
202 ([20434](https://github.com/civicrm/civicrm-core/pull/20434))**
203
204 Adds static (non-smart) groups to SearchKit, and organizes main entity
205 selector to be less cluttered, with primary entities up top and the rest
206 within a collapsible optgroup.
207
208 - **SearchKit and Afform UI improvements
209 ([20348](https://github.com/civicrm/civicrm-core/pull/20348))**
210
211 Cleans up the admin UI for SearchKit and Afform, adds click-to-sort table
212 headers and fixes a bug where SavedSearch modified_date were not being saved.
213
214 - **SearchKit - Rename crmSearchActions module to crmSearchTasks & add hook
215 ([20307](https://github.com/civicrm/civicrm-core/pull/20307))**
216
217 Adds hook_civicrm_searchKitTasks() to make it easy for other extensions to add
218 tasks specific to SearchKit. Also renames the module for consistency.
219
220 - **[php8-compat] Upgrade PHPWord Package to support php8
221 ([20449](https://github.com/civicrm/civicrm-core/pull/20449))**
222
223 Work towards making CiviCRM php8 compatible, specifically by upgrading PHPWord
224 Package.
225
226 - **[php8-compat] Upgrade TCPDF version to support php8
227 ([20540](https://github.com/civicrm/civicrm-core/pull/20540))**
228
229 Work Towards making CiviCRM php8 compatible specifically by upgrading TCPDF.
230
231 - **Consider joining the GitHub Sponsors program
232 ([community/sustainability#20](https://lab.civicrm.org/community/sustainability/-/issues/20):
233 [248](https://github.com/civicrm/civicrm-wordpress/pull/248) and
234 [62](https://github.com/civicrm/civicrm-joomla/pull/62))**
235
236 Adds a sponsor link as apart of the GitHub Sponsors program.
237
238 - **Change the help text for Message Templates and Scheduled Reminders to
239 include link to CiviCRM Token Documentation page
240 ([20259](https://github.com/civicrm/civicrm-core/pull/20259))**
241
242 Improves user experience by linking to CiviCRM Token documentation from the
243 Message Templates and Scheduled Reminders forms.
244
245 - **authx - Accept API keys by default
246 ([20081](https://github.com/civicrm/civicrm-core/pull/20081))**
247
248 Relaxes the default settings so that it is easier to use authx
249 as a replacement for extern/rest.php (which uses the api_key for
250 authentication).
251
252 ### CiviCase
253
254 - **Add defaults for APIv4 Case create
255 ([20306](https://github.com/civicrm/civicrm-core/pull/20306))**
256
257 Adds the following defaults for APIv4 Case.create:
258 - default Case Creator = current user
259 - default Case Start Date = now
260
261 ### CiviContribute
262
263 - **Improve Sample data by ensuring all Credit Card Contributions have a
264 transaction id and that they are shown to be linked to the test payment
265 processor ([20312](https://github.com/civicrm/civicrm-core/pull/20312))**
266
267 Improves CiviContribute sample date.
268
269 ## <a name="bugs"></a>Bugs resolved
270
271 ### Core CiviCRM
272
273 - **"You do not have permission to access this page" when exporting participants
274 in Search Kit
275 ([dev/report#67](https://lab.civicrm.org/dev/report/-/issues/67):
276 [20528](https://github.com/civicrm/civicrm-core/pull/20528))**
277
278 Fixes an 'access denied' error on standalone SearchKit export forms, caused by
279 renaming the PHP classes.
280
281 - **500 error saving Search Kit Smart Group sorted on aggregated field
282 ([dev/report#68](https://lab.civicrm.org/dev/report/-/issues/68):
283 [20610](https://github.com/civicrm/civicrm-core/pull/20610))**
284
285 - **Fatal error reported when photo cannot be found
286 ([dev/core#2369](https://lab.civicrm.org/dev/core/-/issues/2369):
287 [20447](https://github.com/civicrm/civicrm-core/pull/20447))**
288
289 - **Loss of translation when copying (cloning) entities (multilingual)
290 ([dev/core#2479](https://lab.civicrm.org/dev/core/-/issues/2479):
291 [20059](https://github.com/civicrm/civicrm-core/pull/20059))**
292
293 - **Fatal error while upgrading smart-group data
294 ([dev/core#2659](https://lab.civicrm.org/dev/core/-/issues/2659):
295 [20756](https://github.com/civicrm/civicrm-core/pull/20756/))**
296
297 - **CRM_Utils_File::isAbsolute does not respect PHP stream wrappers (Work
298 Towards [dev/core#2590](https://lab.civicrm.org/dev/core/-/issues/2590):
299 [20270](https://github.com/civicrm/civicrm-core/pull/20270))**
300
301 Removes unused function.
302
303 - **Installer doesn't check MySQL version properly
304 ([dev/core#2602](https://lab.civicrm.org/dev/core/-/issues/2602):
305 [20255](https://github.com/civicrm/civicrm-core/pull/20255))**
306
307 - **Useradd task gives a deprecation notice for the password confirmation field
308 ([dev/core#2613](https://lab.civicrm.org/dev/core/-/issues/2613):
309 [20347](https://github.com/civicrm/civicrm-core/pull/20347))**
310
311 - **APIv4 - Delete undocumented deprecated activityType lookup
312 ([20506](https://github.com/civicrm/civicrm-core/pull/20506))**
313
314 Deletes an undocumented APIv4 quirk that's been giving deprecated warnings for
315 over a year.
316
317 - **APIv4 - Fix getFields to respect default_value from getFields
318 ([20481](https://github.com/civicrm/civicrm-core/pull/20481))**
319
320 - **AfformGui - Fix tabs when cms theme adds extra margin
321 ([20431](https://github.com/civicrm/civicrm-core/pull/20431))**
322
323 - **Afform GUI - Fix tab breakage in Shoreditch theme
324 ([20416](https://github.com/civicrm/civicrm-core/pull/20416))**
325
326 - **Afform drag n drop fixes
327 ([20281](https://github.com/civicrm/civicrm-core/pull/20281) and
328 [20263](https://github.com/civicrm/civicrm-core/pull/20263))**
329
330 - **Afform - Fix custom field handling and add tests
331 ([20480](https://github.com/civicrm/civicrm-core/pull/20480))**
332
333 - **Afform - hide disabled contact types & entities from disabled
334 components/extensions
335 ([20283](https://github.com/civicrm/civicrm-core/pull/20283))**
336
337 Cleans up and improves Afform's internal entity lookup so it won't show
338 disabled entities.
339
340 - **SearchKit - Fix link target selection
341 ([20537](https://github.com/civicrm/civicrm-core/pull/20537))**
342
343 - **SearchKit - Fix menu permission
344 ([20349](https://github.com/civicrm/civicrm-core/pull/20349))**
345
346 - **SearchKit - Organize ON clause field selectors with joined entity first
347 ([20454](https://github.com/civicrm/civicrm-core/pull/20454))**
348
349 - **[php8-compat] Fix some more examples of where required parameters are after
350 optional parameters in function declaration
351 ([20515](https://github.com/civicrm/civicrm-core/pull/20515))**
352
353 - **[php8-compat] Fix PHP Beautifier notice by conditionally assigning dynamic
354 foreign key to the template
355 ([20509](https://github.com/civicrm/civicrm-core/pull/20509))**
356
357 - **[php8-compat] Fix issue in APIv3 Where by because product has a column
358 called options the testCreateSingleValueAlter triggers a cannot access offset
359 of type string on string in php8
360 ([20508](https://github.com/civicrm/civicrm-core/pull/20508))**
361
362 - **[php8-compat] Fix issue with returning bool from uasort by using the
363 spaceship operator
364 ([20502](https://github.com/civicrm/civicrm-core/pull/20502))**
365
366 - **[php8-compat] Fix Upgrade call back issues by making functions static and
367 also fixing an issue with an array key not existing when checking obsolete
368 extensions ([20503](https://github.com/civicrm/civicrm-core/pull/20503))**
369
370 - **Update PHPUnit for PHPUnit8 config to ensure we don't cache test results
371 ([645](https://github.com/civicrm/civicrm-drupal/pull/645),
372 [140](https://github.com/civicrm/civicrm-backdrop/pull/140) and
373 [249](https://github.com/civicrm/civicrm-wordpress/pull/249))**
374
375 - **[php8-compat] Fix calling method_exist with paremeter that is bool not an
376 object in php8 ([323](https:
377
378 - **[php8-compat] Fix calling method_exist with paremeter that is bool not an
379 object in php8 ([20443](https://github.com/civicrm/civicrm-core/pull/20443))**
380
381 - **[php8-compat] Fix deprecation error where by required function parameter
382 follows an optional function parameter
383 ([20473](https://github.com/civicrm/civicrm-core/pull/20473))**
384
385 - **[php8-compat] Fix Warning Notices when running schema generation
386 ([20445](https://github.com/civicrm/civicrm-core/pull/20445))**
387
388 - **[php8-compat] Update Various Symfony components to latest version in the
389 3.4.x series to fix deprecation notice around libxml entity disable
390 ([20444](https://github.com/civicrm/civicrm-core/pull/20444))**
391
392 - **Fix the populateTempTable to be more direct
393 ([20548](https://github.com/civicrm/civicrm-core/pull/20548))**
394
395 - **Sort trigger data before processing
396 ([20541](https://github.com/civicrm/civicrm-core/pull/20541))**
397
398 - **Allow legacy warnings to be fully suppressed in PropertyBag
399 ([20331](https://github.com/civicrm/civicrm-core/pull/20331))**
400
401 - **Prevent adding duplicate dashlet if present with same name and label
402 ([20375](https://github.com/civicrm/civicrm-core/pull/20375))**
403
404 - **Ensure contacts without a name are updated when primary email changes
405 ([20403](https://github.com/civicrm/civicrm-core/pull/20403))**
406
407 - **fix arguments sent to hook_civicrm_check
408 ([20400](https://github.com/civicrm/civicrm-core/pull/20400))**
409
410 - **Fix Distmaker building by ensuring we are rsyncing from the right folder
411 ([20353](https://github.com/civicrm/civicrm-core/pull/20353))**
412
413 - **Fix mandatory keys check fail for value of float 0.0 in a required key in an
414 entity ([20342](https://github.com/civicrm/civicrm-core/pull/20342))**
415
416 - **Fix extraneous white space in generated SQL
417 ([20340](https://github.com/civicrm/civicrm-core/pull/20340))**
418
419 - **Fix case sensitive parameter for call to getCustomFieldTokens
420 ([20333](https://github.com/civicrm/civicrm-core/pull/20333))**
421
422 - **Fix CKEditor5 link editing in modal dialog
423 ([20285](https://github.com/civicrm/civicrm-core/pull/20285))**
424
425 - **Correct copy-paste error in CustomField schema
426 ([20329](https://github.com/civicrm/civicrm-core/pull/20329))**
427
428 - **Explicitly throw an error/status bounce on Edit/New if no types.
429 ([19840](https://github.com/civicrm/civicrm-core/pull/19840))**
430
431 - **Core_DAO - Fire links_callback for all entities
432 ([20332](https://github.com/civicrm/civicrm-core/pull/20332))**
433
434 - **Get county fields populated via api call
435 ([20309](https://github.com/civicrm/civicrm-core/pull/20309))**
436
437 Ensure that county fields are properly populated when calling the
438 Profile.getfields api.
439
440 - **Activate user when no activation is required
441 ([20229](https://github.com/civicrm/civicrm-core/pull/20229))**
442
443 Ensures that any user created on a site that does not require admin approval
444 is considered active.
445
446 - **Switch to non deprecated buildPermissionClause() for contact detail report
447 ([20314](https://github.com/civicrm/civicrm-core/pull/20314))**
448
449 - **Switch to non deprecated buildPermissionClause() for contact summary report
450 ([20287](https://github.com/civicrm/civicrm-core/pull/20287))**
451
452 - **Freeze readonly fields
453 ([20204](https://github.com/civicrm/civicrm-core/pull/20204))**
454
455 - **CiviCRM Scheduled Reminders, Subject field missing Token selector - users
456 must copy Token from Body field to Subject
457 ([20260](https://github.com/civicrm/civicrm-core/pull/20260))**
458
459 - **Fix delete customgroup using API4 so it removes data table
460 ([20265](https://github.com/civicrm/civicrm-core/pull/20265))**
461
462 - **hook_managed - Do not try to disable managed entities if is_active is not
463 available to api3.create
464 ([20144](https://github.com/civicrm/civicrm-core/pull/20144))**
465
466 - **DB/DataObject: use mb_strtolower because in turkish, INSERT becomes Insert
467 ([324](https://github.com/civicrm/civicrm-packages/pull/324))**
468
469 ### CiviCase
470
471 - **APIv4 - CiviCase API: Fix opening a case with current user as creator
472 ([20238](https://github.com/civicrm/civicrm-core/pull/20238))**
473
474 - **My Cases dashlet no longer working (javascript network error - blank
475 dashlet) ([dev/core#2606](https://lab.civicrm.org/dev/core/-/issues/2606):
476 [20275](https://github.com/civicrm/civicrm-core/pull/20275))**
477
478 ## CiviContribute
479
480 - **PayPal fails to create contribution following duplicate merge when
481 membership record has been deleted
482 ([dev/core#2593](https://lab.civicrm.org/dev/core/-/issues/2593):
483 [20422](https://github.com/civicrm/civicrm-core/pull/20422),
484 [20424](https://github.com/civicrm/civicrm-core/pull/20424),
485 [20246](https://github.com/civicrm/civicrm-core/pull/20246) and
486 [20300](https://github.com/civicrm/civicrm-core/pull/20300))**
487
488 - **"Pay Now" button on user dashboard is only for Pending, not Partially Paid
489 contributions
490 ([dev/financial#173](https://lab.civicrm.org/dev/financial/-/issues/173):
491 [20376](https://github.com/civicrm/civicrm-core/pull/20376))**
492
493 Ensures the 'Pay Now' buttons on the user dashboard are displayed for
494 partially paid contributions.
495
496 - **Do not error on view contribution recur if not displaying contributions
497 ([20209](https://github.com/civicrm/civicrm-core/pull/20209))**
498
499 - **Fix for tax rates being mangled on contribution update
500 ([20357](https://github.com/civicrm/civicrm-core/pull/20357))**
501
502 - **Add call to validateAllContributions & fix getTotalAmount
503 ([20391](https://github.com/civicrm/civicrm-core/pull/20391))**
504
505 - **Add warning when url_site is not specified for paypal (it won't work if not
506 set) ([20082](https://github.com/civicrm/civicrm-core/pull/20082))**
507
508 - **Typo when retrieving help_pre textarea attributes for price field
509 ([20276](https://github.com/civicrm/civicrm-core/pull/20276))**
510
511 - **Fix old-ish regression on paypal standard self-service cancel links
512 ([20210](https://github.com/civicrm/civicrm-core/pull/20210))**
513
514 - **Don't pass doPayment by reference in Contribution.transact API
515 ([20463](https://github.com/civicrm/civicrm-core/pull/20463))**
516
517 - **If paymentprocessor still uses doTransferCheckout/doDirectPayment trigger
518 deprecated function warning
519 ([20384](https://github.com/civicrm/civicrm-core/pull/20384))**
520
521 - **Convert payJunction to doPayment
522 ([20326](https://github.com/civicrm/civicrm-core/pull/20326))**
523
524 - **Convert FirstData to doPayment
525 ([20325](https://github.com/civicrm/civicrm-core/pull/20325))**
526
527 - **Convert elavon to doPayment
528 ([20324](https://github.com/civicrm/civicrm-core/pull/20324))**
529
530 - **Convert Realex to doPayment
531 ([20327](https://github.com/civicrm/civicrm-core/pull/20327))**
532
533 - **Convert payflowpro to doPayment
534 ([20328](https://github.com/civicrm/civicrm-core/pull/20328))**
535
536 - **Convert eway to doPayment
537 ([20323](https://github.com/civicrm/civicrm-core/pull/20323))**
538
539 - **Convert AuthorizeNet to doPayment()
540 ([20322](https://github.com/civicrm/civicrm-core/pull/20322))**
541
542 - **Sample payment processor types are misaligned in the sample data
543 ([dev/core#2614](https://lab.civicrm.org/dev/core/-/issues/2614):
544 [20311](https://github.com/civicrm/civicrm-core/pull/20311))**
545
546 ### CiviMail
547
548 - **<link> URLs are tracked and shouldn't be
549 ([dev/mail#95](https://lab.civicrm.org/dev/mail/-/issues/95):
550 [20129](https://github.com/civicrm/civicrm-core/pull/20129))**
551
552 Ensures link tracking is applied only to URLs inside <a> tags.
553
554 ### CiviMember
555
556 - **Creating a relationship fails when a related membership has a contact
557 reference custom field.
558 ([dev/membership#37](https://lab.civicrm.org/dev/membership/-/issues/37):
559 [20493](https://github.com/civicrm/civicrm-core/pull/20493))**
560
561 - **Use line items to look up memberships
562 ([20495](https://github.com/civicrm/civicrm-core/pull/20495))**
563
564 - **Use order api when creating a recurring membership from the Membership
565 ([20077](https://github.com/civicrm/civicrm-core/pull/20077))**
566
567 ### Drupal Integration
568
569 - **AuthX extension: user_load() deprecated in Drupal 8.x.
570 ([dev/core#2636](https://lab.civicrm.org/dev/core/-/issues/2636):
571 [20479](https://github.com/civicrm/civicrm-core/pull/20479))**
572
573 - **drush install - Bump up entropy for autogenerated creds. Add signing key.
574 ([128](https://github.com/civicrm/civicrm-backdrop/pull/128))**
575
576 ### WordPress Integration
577
578 - **[php8-compat] Fix undefined property on Array Cache class in wordpress on
579 PHP8 ([20491](https://github.com/civicrm/civicrm-core/pull/20491))**
580
581 - **Remove Base Page content filter once it has been used
582 ([dev/wordpress#91](https://lab.civicrm.org/dev/wordpress/-/issues/91):
583 [240](https://github.com/civicrm/civicrm-wordpress/pull/240))**
584
585 Fixes a bug where CiviCRM content would repeat itself in certain page
586 configurations.
587
588 ## <a name="misc"></a>Miscellany
589
590 - **Add file_exists check on loading services xml
591 ([20620](https://github.com/civicrm/civicrm-core/pull/20620))**
592
593 - **APIv4 - Cleanup getFields, add @internal flag for non-public field
594 attributes ([20489](https://github.com/civicrm/civicrm-core/pull/20489))**
595
596 - **Extract code that populates temp table for an individual group
597 ([20458](https://github.com/civicrm/civicrm-core/pull/20458))**
598
599 - **Cleanup - declare return types, remove unused var
600 ([20363](https://github.com/civicrm/civicrm-core/pull/20363))**
601
602 - **Bump lodash from 4.17.19 to 4.17.21
603 ([20247](https://github.com/civicrm/civicrm-core/pull/20247))**
604
605 - **Bump DOMPDF to `~1.0.0`
606 ([20465](https://github.com/civicrm/civicrm-core/pull/20465))**
607
608 - **Make functions protected
609 ([20455](https://github.com/civicrm/civicrm-core/pull/20455))**
610
611 - **Deprecate function CRM_Core_BAO_CustomField::bulkSave
612 ([20367](https://github.com/civicrm/civicrm-core/pull/20367))**
613
614 - **Cleanup tracking on group.load
615 ([20310](https://github.com/civicrm/civicrm-core/pull/20310))**
616
617 - **Describe logic behind placement of `invalidateRouteCache`
618 ([20414](https://github.com/civicrm/civicrm-core/pull/20414))**
619
620 - **Fix internal group contact cache functions to be protected
621 ([20385](https://github.com/civicrm/civicrm-core/pull/20385))**
622
623 - **Clarify types on `hook_custom` and `hook_customPre`
624 ([20488](https://github.com/civicrm/civicrm-core/pull/20488))**
625
626 - **Cleanup references to old dedupe class names
627 ([20492](https://github.com/civicrm/civicrm-core/pull/20492))**
628
629 - **Switch l10n.js from ajax callback to assetBuilder
630 ([20121](https://github.com/civicrm/civicrm-core/pull/20121))**
631
632 - **ACLEntityRole BAO tidy fixes
633 ([20504](https://github.com/civicrm/civicrm-core/pull/20504))**
634
635 - **Dedupe DAO is out of date
636 ([20534](https://github.com/civicrm/civicrm-core/pull/20534))**
637
638 - **Switch table mapping to square bracket array syntax.
639 ([20535](https://github.com/civicrm/civicrm-core/pull/20535))**
640
641 - **Update civicrm_generated (5.39 version)
642 ([20571](https://github.com/civicrm/civicrm-core/pull/20571))**
643
644 - **[REF] Cannot edit CiviCRM Joomla permissions (access control) in 5.37.0
645 (Clean up for [dev/core#2601](https://lab.civicrm.org/dev/core/-/issues/2601):
646 [20271](https://github.com/civicrm/civicrm-core/pull/20271))**
647
648 - **Revised fix for menu/UI issues for Joomla 4.0
649 ([20401](https://github.com/civicrm/civicrm-core/pull/20401))**
650
651 - **[php8-compat] Fix Include/Exclude Group Custom Search Tests by better
652 handling empty arrays on exclusions in the custom search
653 ([20539](https://github.com/civicrm/civicrm-core/pull/20539))**
654
655 - **[php8-compat] Fix Resources Test issue due to undefined array key add
656 CacheCode ([20538](https://github.com/civicrm/civicrm-core/pull/20538))**
657
658 - **[php8-compat] Fix api_v3_PaymentTest failures by putting in more guards into
659 message templates
660 ([20520](https://github.com/civicrm/civicrm-core/pull/20520))**
661
662 - **[php8-compat] Update smarty templates and some PHP files to get the
663 api_v3_contribution testclass to pass on php8
664 ([20512](https://github.com/civicrm/civicrm-core/pull/20512))**
665
666 - **[php8-compact] Add in guards into various templates to fix hook tests in
667 php8 ([20542](https://github.com/civicrm/civicrm-core/pull/20542))**
668
669 - **[php8-compact] Fix Report tests failing on php8
670 ([20549](https://github.com/civicrm/civicrm-core/pull/20549))**
671
672 - **[php8-compat] Partial Fix of hook tests for php8
673 ([20545](https://github.com/civicrm/civicrm-core/pull/20545))**
674
675 - **[php8-compat] [REF] Fix a couple of functions triggering deprecation notices
676 in php 8.0 where by an optional parameter is before required parameters in the
677 function signature
678 ([20442](https://github.com/civicrm/civicrm-core/pull/20442))**
679
680 - **[php8-compat] [REF] Fix call to function CRM_Utils_String::createRandom by
681 ensuring that the length is the first parameter not 2nd
682 ([20441](https://github.com/civicrm/civicrm-core/pull/20441))**
683
684 - **[php8-compat][NFC] Ensure that the 2nd parameter of hash_equals is a string
685 in authx ([20483](https://github.com/civicrm/civicrm-core/pull/20483))**
686
687 - **[php8-compat][NFC] Fix using ZipArchive::open on an empty file
688 ([20500](https://github.com/civicrm/civicrm-core/pull/20500))**
689
690 - **[php8-compat][NFC] Fix issue where by we are tryiing to access array keys
691 that haven't been created yet
692 ([20496](https://github.com/civicrm/civicrm-core/pull/20496))**
693
694 - **[REF][php8-compat] Fix more instances of where there is a required parameter
695 for a function after an optional one and fix an issue where by a NULL function
696 property is treated as not exisiting in php8
697 ([20497](https://github.com/civicrm/civicrm-core/pull/20497))**
698
699 - **[REF][php8-compat] Further fixes where there is a required paramater after
700 an optional paramater
701 ([20490](https://github.com/civicrm/civicrm-core/pull/20490))**
702
703 - **[php8-compat][REF] Fix some more test failures in php8
704 ([20516](https://github.com/civicrm/civicrm-core/pull/20516))**
705
706 - **[php8-compat][REF] Fix api_v3_contributionpagetest on php8
707 ([20518](https://github.com/civicrm/civicrm-core/pull/20518))**
708
709 - **[php8-compat][REF] Fix more php8 test failures caused by template issues
710 ([20517](https://github.com/civicrm/civicrm-core/pull/20517))**
711
712 - **[php8-compat][REF] Fix php8 error on undefined constant
713 CIVICRM_DISABLE_DEFAULT_MENU
714 ([20485](https://github.com/civicrm/civicrm-core/pull/20485))**
715
716 - **[php8-compat][REF] Fix Date unit tests in php8 by passing in 00 instead of
717 null for hours,minutes and seconds
718 ([20525](https://github.com/civicrm/civicrm-core/pull/20525))**
719
720 - **[php8-compact][REF] Fix another couple of places where by there are required
721 variables in php function declaration after optional ones
722 ([20526](https://github.com/civicrm/civicrm-core/pull/20526))**
723
724 - **[php8-compact][REF] Fix api_v3_PaymentTokenTest to work on php8
725 ([20527](https://github.com/civicrm/civicrm-core/pull/20527))**
726
727 - **[php8-compat][REF] Fix Case and Custom data tests by adding guards in to
728 templates ([20524](https://github.com/civicrm/civicrm-core/pull/20524))**
729
730 - **[php8-compat][phpunit8][NFC] Fix PHPUnit Warnings and fix a php error on
731 function declaration syntax in core extension tests
732 ([20477](https://github.com/civicrm/civicrm-core/pull/20477))**
733
734 - **Remove extraneous debug
735 ([20319](https://github.com/civicrm/civicrm-core/pull/20319))**
736
737 - **Remove legacy references to partial_amount_to_pay
738 ([20358](https://github.com/civicrm/civicrm-core/pull/20358))**
739
740 - **Remove remains of md5 check from authorizenet
741 ([20406](https://github.com/civicrm/civicrm-core/pull/20406))**
742
743 - **Remove deprecation of order-must-be-pending
744 ([20205](https://github.com/civicrm/civicrm-core/pull/20205))**
745
746 - **Remove some unused variables
747 ([20487](https://github.com/civicrm/civicrm-core/pull/20487))**
748
749 - **Remove never-passed parameter from now unshared function
750 ([20304](https://github.com/civicrm/civicrm-core/pull/20304))**
751
752 - **Remove defunct default return property
753 ([20139](https://github.com/civicrm/civicrm-core/pull/20139))**
754
755 - **Remove now-unused ids parameter from signature
756 ([20299](https://github.com/civicrm/civicrm-core/pull/20299))**
757
758 - **Remove unused functions from payJunction
759 ([20417](https://github.com/civicrm/civicrm-core/pull/20417))**
760
761 - **Remove unused variable on dummy processor
762 ([20418](https://github.com/civicrm/civicrm-core/pull/20418))**
763
764 - **Remove pass-by-ref as param not altered
765 ([20475](https://github.com/civicrm/civicrm-core/pull/20475))**
766
767 - **[REF] (Code style) To const, or not const - that is the event
768 ([dev/core#1744](https://lab.civicrm.org/dev/core/-/issues/1744):
769 [20555](https://github.com/civicrm/civicrm-core/pull/20555))**
770
771 - **[REF] Extract function to get locks
772 ([20373](https://github.com/civicrm/civicrm-core/pull/20373))**
773
774 - **[REF] Remove unused variable
775 ([20378](https://github.com/civicrm/civicrm-core/pull/20378))**
776
777 - **[REF] Slightly more logical order of code
778 ([20368](https://github.com/civicrm/civicrm-core/pull/20368))**
779
780 - **[REF] Extract code to transfer groups from temp table to cache
781 ([20435](https://github.com/civicrm/civicrm-core/pull/20435))**
782
783 - **[REF] Remove never-passed param
784 ([20456](https://github.com/civicrm/civicrm-core/pull/20456))**
785
786 - **[REF] APIv4 refactoring to support calculated fields
787 ([20440](https://github.com/civicrm/civicrm-core/pull/20440))**
788
789 - **[REF] Set receipt_date after sending, (from batch) not in anticipation
790 ([20395](https://github.com/civicrm/civicrm-core/pull/20395))**
791
792 - **[REF] Minor extraction - getInfoUrl
793 ([20421](https://github.com/civicrm/civicrm-core/pull/20421))**
794
795 - **[REF] Fix issue where by mailing urls were always stuck in the original
796 language not the overriden language in a multilingual site
797 ([20102](https://github.com/civicrm/civicrm-core/pull/20102))**
798
799 - **[REF] Paypal pro - remove call to load contact record
800 ([20423](https://github.com/civicrm/civicrm-core/pull/20423))**
801
802 - **[REF] Stop passing unneed params to the recur function
803 ([20412](https://github.com/civicrm/civicrm-core/pull/20412))**
804
805 - **[REF] Replace isFirst parameter
806 ([20411](https://github.com/civicrm/civicrm-core/pull/20411))**
807
808 - **[REF] Remove now-unused params
809 ([20410](https://github.com/civicrm/civicrm-core/pull/20410))**
810
811 - **[REF] Paypal IPN - Cleanup references to completion
812 ([20407](https://github.com/civicrm/civicrm-core/pull/20407))**
813
814 - **[REF] Replace deprecated code call
815 ([20409](https://github.com/civicrm/civicrm-core/pull/20409))**
816
817 - **[REF] Cleanup validation in PaypalProIPN single function
818 ([20360](https://github.com/civicrm/civicrm-core/pull/20360))**
819
820 - **[REF] Minor simplification
821 ([20393](https://github.com/civicrm/civicrm-core/pull/20393))**
822
823 - **[REF] Useradd contact task - Use OO instead of hardcoding "if Wordpress"
824 ([20366](https://github.com/civicrm/civicrm-core/pull/20366))**
825
826 - **[REF] Cleanup on import rows error
827 ([20196](https://github.com/civicrm/civicrm-core/pull/20196))**
828
829 - **[REF] Extract function to build temporary table of members of group from
830 Report_Form ([20297](https://github.com/civicrm/civicrm-core/pull/20297))**
831
832 - **[REF] Remove now-unused parameter
833 ([20354](https://github.com/civicrm/civicrm-core/pull/20354))**
834
835 - **[REF] Extract getContributionObject
836 ([20355](https://github.com/civicrm/civicrm-core/pull/20355))**
837
838 - **[REF] Add getter for contributionID
839 ([20318](https://github.com/civicrm/civicrm-core/pull/20318))**
840
841 - **[REF] Make previous unshared function protected & Remove hard-coded params
842 ([20345](https://github.com/civicrm/civicrm-core/pull/20345))**
843
844 - **[REF] Update Pear Validate Finance CreditCard to use latest tagged release
845 that now includes the improved mastercard 2bin regex
846 ([20351](https://github.com/civicrm/civicrm-core/pull/20351))**
847
848 - **[REF] Make previously unshared function protected
849 ([20346](https://github.com/civicrm/civicrm-core/pull/20346))**
850
851 - **[REF] Remove unused parameters
852 ([20301](https://github.com/civicrm/civicrm-core/pull/20301))**
853
854 - **[REF] Cleanup BAO_ActionSchedule::getlist() signature
855 ([20239](https://github.com/civicrm/civicrm-core/pull/20239))**
856
857 - **(REF) Regen CRM/Core/DAO/CustomField.php
858 ([20337](https://github.com/civicrm/civicrm-core/pull/20337))**
859
860 - **[REF] Remove redundant call to clearGroupContactCache
861 ([20243](https://github.com/civicrm/civicrm-core/pull/20243))**
862
863 - **[REF] [tests only] Replace direct calls to enable logging with calls to the
864 setting ([20460](https://github.com/civicrm/civicrm-core/pull/20460))**
865
866 - **[REF] Remove function parameter only used from test
867 ([20459](https://github.com/civicrm/civicrm-core/pull/20459))**
868
869 - **[REF] Extract code determining list of groups requiring a refresh
870 ([20242](https://github.com/civicrm/civicrm-core/pull/20242))**
871
872 - **REF - Cleanup array key checking to use array_key_exists
873 ([20563](https://github.com/civicrm/civicrm-core/pull/20563))**
874
875 - **[REF] CRM_Contact_Task - Use short array syntax
876 ([20562](https://github.com/civicrm/civicrm-core/pull/20562))**
877
878 - **[REF] Fix Authx tests on Druapl 8/9 by ensuring that we only return an id
879 for the user id if it is greater than 0
880 ([20498](https://github.com/civicrm/civicrm-core/pull/20498))**
881
882 - **[REF] Move ACLPermission Trait into Civi Folder so that it can be accessed
883 by Extensions ([20208](https://github.com/civicrm/civicrm-core/pull/20208))**
884
885 - **[REF] Use function to getContributionRecurID
886 ([20293](https://github.com/civicrm/civicrm-core/pull/20293))**
887
888 - **[REF] Duplicate processMembership preliminary to cleanup
889 ([20295](https://github.com/civicrm/civicrm-core/pull/20295))**
890
891 - **[REF] Switch to using getContributionRecurID function, remove now unused
892 param ([20316](https://github.com/civicrm/civicrm-core/pull/20316))**
893
894 - **[REF] Fully remove ids variable from paypal std
895 ([20317](https://github.com/civicrm/civicrm-core/pull/20317))**
896
897 - **[REF] Make use of recently added default pager size setting in Reports
898 ([20273](https://github.com/civicrm/civicrm-core/pull/20273))**
899
900 - **[REF] Duplicate & deprecate processMembership
901 ([20313](https://github.com/civicrm/civicrm-core/pull/20313))**
902
903 - **[REF] Provide standardised methods to get recurring contribution id & object
904 ([20294](https://github.com/civicrm/civicrm-core/pull/20294))**
905
906 - **[REF] Reverse if statement
907 ([20211](https://github.com/civicrm/civicrm-core/pull/20211))**
908
909 - **Mark test class as having invalid financials
910 ([20448](https://github.com/civicrm/civicrm-core/pull/20448))**
911
912 - **Update eventcart test to only test payment form
913 ([20405](https://github.com/civicrm/civicrm-core/pull/20405))**
914
915 - **Fix profile test teardown
916 ([20439](https://github.com/civicrm/civicrm-core/pull/20439))**
917
918 - **Fix separate payment membership test to create valid financial transactions
919 ([20436](https://github.com/civicrm/civicrm-core/pull/20436))**
920
921 - **fix missing parent tearDown
922 ([20261](https://github.com/civicrm/civicrm-core/pull/20261) and
923 [20262](https://github.com/civicrm/civicrm-core/pull/20262))**
924
925 - **Fix v3 api payment test to validate on postAssert
926 ([20530](https://github.com/civicrm/civicrm-core/pull/20530))**
927
928 - **Fix Financial item test to validate Financials
929 ([20532](https://github.com/civicrm/civicrm-core/pull/20532))**
930
931 - **Mark DetailTest as having invalid financials
932 ([20552](https://github.com/civicrm/civicrm-core/pull/20552))**
933
934 - **Fix form params for testEventPaymentForms
935 ([20330](https://github.com/civicrm/civicrm-core/pull/20330))**
936
937 - **Update bulkSave test to use the api
938 ([20362](https://github.com/civicrm/civicrm-core/pull/20362))**
939
940 - **Fix contribution page pledge tests to create valid contributions
941 ([20404](https://github.com/civicrm/civicrm-core/pull/20404))**
942
943 - **Improve cleanup on contact test
944 ([20248](https://github.com/civicrm/civicrm-core/pull/20248))**
945
946 - **Test fix up for AdditionalPaymentTest
947 ([20521](https://github.com/civicrm/civicrm-core/pull/20521))**
948
949 - **Test fix - assertion fails when run with other tests (sometimes)
950 ([20250](https://github.com/civicrm/civicrm-core/pull/20250))**
951
952 - **[Test] Improve cleanup of domain contacts
953 ([20253](https://github.com/civicrm/civicrm-core/pull/20253))**
954
955 - **Test - fix contributionTest to validate contributions
956 ([20415](https://github.com/civicrm/civicrm-core/pull/20415))**
957
958 - **Test fixes ([20426](https://github.com/civicrm/civicrm-core/pull/20426))**
959
960 - **Tax fixes in unit test
961 ([20390](https://github.com/civicrm/civicrm-core/pull/20390))**
962
963 - **[Test] Add test cover for contribution tokens in pdf letter
964 ([20217](https://github.com/civicrm/civicrm-core/pull/20217))**
965
966 - **Unit test for #20342
967 ([20361](https://github.com/civicrm/civicrm-core/pull/20361))**
968
969 - **Add test for mixed Order data
970 ([20241](https://github.com/civicrm/civicrm-core/pull/20241))**
971
972 - **Add unit test for #20144
973 ([20320](https://github.com/civicrm/civicrm-core/pull/20320))**
974
975 - **Superficial tidy up in test class
976 ([20359](https://github.com/civicrm/civicrm-core/pull/20359))**
977
978 - **[NFC] Remove timecop function references from Cache Tiered Test
979 ([20343](https://github.com/civicrm/civicrm-core/pull/20343))**
980
981 - **[NFC] Superficial code cleanup
982 ([20446](https://github.com/civicrm/civicrm-core/pull/20446))**
983
984 - **[NFC] Cleanup in test class
985 ([20402](https://github.com/civicrm/civicrm-core/pull/20402))**
986
987 - **[NFC] {test} code cleanup in test class
988 ([20389](https://github.com/civicrm/civicrm-core/pull/20389))**
989
990 - **[NFC] Minor cleanup
991 ([20387](https://github.com/civicrm/civicrm-core/pull/20387))**
992
993 - **[NFC] Minor code cleanup
994 ([20386](https://github.com/civicrm/civicrm-core/pull/20386))**
995
996 - **[NFC] Fix PHPUnit8 Deprecation Warnings in api_v3 and Civi Test Suites
997 ([20380](https://github.com/civicrm/civicrm-core/pull/20380))**
998
999 - **[NFC] [Test] Big cleanup in test class
1000 ([20374](https://github.com/civicrm/civicrm-core/pull/20374))**
1001
1002 - **[NFC] Fix PHPUnit8 Deprecation warnings in the api_v4 Test Suite
1003 ([20381](https://github.com/civicrm/civicrm-core/pull/20381))**
1004
1005 - **[NFC] Fix PHPUnit8 Warning notices in E2E And in some API unit tests
1006 ([20379](https://github.com/civicrm/civicrm-core/pull/20379))**
1007
1008 - **[NFC] Fix PHPUnit8 deprecation warnings in the CRM_AllTests suite
1009 ([20377](https://github.com/civicrm/civicrm-core/pull/20377))**
1010
1011 - **[NFC] Further cleanup in test class
1012 ([20372](https://github.com/civicrm/civicrm-core/pull/20372))**
1013
1014 - **[NFC] Add in more voids to unit tests to support PHPUnit8
1015 ([20369](https://github.com/civicrm/civicrm-core/pull/20369))**
1016
1017 - **[NFC] [Test] Preliminary cleanup in test class
1018 ([20371](https://github.com/civicrm/civicrm-core/pull/20371))**
1019
1020 - **[NFC] Add in voids to various setUpBeforeClass and tearDownAfterClass
1021 functions ([20365](https://github.com/civicrm/civicrm-core/pull/20365))**
1022
1023 - **[NFC] Update PHPUnit config to not cache results in phpunit8 and add more
1024 voids into PayflowProTest
1025 ([20356](https://github.com/civicrm/civicrm-core/pull/20356))**
1026
1027 - **[NFC] Add in unit tests of credit card validation rules
1028 ([20352](https://github.com/civicrm/civicrm-core/pull/20352))**
1029
1030 - **[NFC/TEST] - Add unit test enforcing automatic chaining for financial
1031 type/account creation via api
1032 ([20288](https://github.com/civicrm/civicrm-core/pull/20288))**
1033
1034 - **[NFC] Test - Improve tearDown cleanup of domain contacts
1035 ([20258](https://github.com/civicrm/civicrm-core/pull/20258))**
1036
1037 - **[NFC] Test - fix to use v3 api on postAsserts
1038 ([20257](https://github.com/civicrm/civicrm-core/pull/20257))**
1039
1040 - **[NFC] Fix phpunit9 deprecation issues on using assertType instead of more
1041 explicit assertIsArray or AssertIsInt
1042 ([20567](https://github.com/civicrm/civicrm-core/pull/20567))**
1043
1044 ## <a name="credits"></a>Credits
1045
1046 This release was developed by the following code authors:
1047
1048 AGH Strategies - Alice Frumin, Andie Hunt; Agileware - Justin Freeman;
1049 Christian Wach; Circle Interactive - Pradeep Nayak; CiviCoop - Jaap Jansma;
1050 CiviCRM - Coleman Watts, Tim Otten; CompuCorp - Ahed Eid; Coop SymbioTIC -
1051 Mathieu Lutfy, Samuel Vanhove; Dave D; iXiam - Vangelis Pantazis; JMA
1052 Consulting - Monish Deb, Seamus Lee; Lemniscus - Noah Miller; Megaphone
1053 Technology Consulting - Jon Goldberg; MJCO - Mikey O'Toole; MJW Consulting -
1054 Matthew Wire; Nicol Wistreich; Progressive Technology Project - Jamie
1055 McClelland; Richard van Oosterhout; Robert J. Lang; Squiffle Consulting - Aidan
1056 Saunders; Wikimedia Foundation - Eileen McNaughton; Wildsight - Lars
1057 Sanders-Green
1058
1059 Most authors also reviewed code for this release; in addition, the following
1060 reviewers contributed their comments:
1061
1062 Agileware - Justin Freeman; Business & Code - Alain Benbassat; CiviDesk -
1063 Nicolas Ganivet, Yashodha Chaku; CompuCorp - Jamie Novick; Coop SymbioTIC -
1064 Mathieu Lutfy, Samuel Vanhove; Dave D; Freeform Solutions - Herb van den Dool;
1065 Fuzion - Jitendra Purohit; Semper IT - Karin Gerritsen; SYSTOPIA
1066 Organisationsberatung - Björn Endres; Tadpole Collective - Kevin Cristiano
1067
1068
1069 ## <a name="feedback"></a>Feedback
1070
1071 These release notes are edited by Alice Frumin and Andie Hunt. If you'd like
1072 to provide feedback on them, please log in to https://chat.civicrm.org/civicrm
1073 and contact `@agh1`.