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