Adding LibreJS back after bundles refactor upstream
[civicrm-core.git] / release-notes / 5.25.0.md
1 # CiviCRM 5.25.0
2
3 Released May 6, 2020
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 - **End of life plans for php 7.0 & deprecate php 7.1
29 ([dev/core#1528](https://lab.civicrm.org/dev/core/issues/1528):
30 [16753](https://github.com/civicrm/civicrm-core/pull/16753),
31 [599](https://github.com/civicrm/civicrm-drupal/pull/599),
32 [598](https://github.com/civicrm/civicrm-drupal/pull/598),
33 [111](https://github.com/civicrm/civicrm-backdrop/pull/111),
34 [16678](https://github.com/civicrm/civicrm-core/pull/16678),
35 [114](https://github.com/civicrm/civicrm-backdrop/pull/114),
36 [187](https://github.com/civicrm/civicrm-wordpress/pull/187) and
37 [184](https://github.com/civicrm/civicrm-wordpress/pull/184))**
38
39 CiviCRM now requires PHP 7.1 at a minimum and recommends PHP 7.3.
40
41 In the process of making this change, the minimum PHP version is now stored in
42 a single place within the core codebase. CMS-specific files have this value,
43 too, but tests enforce that it be the same as the single core value.
44
45 - **Replace jcalendar instances with datepicker (Continued
46 Work [dev/core#561](https://lab.civicrm.org/dev/core/issues/561):
47 [15709](https://github.com/civicrm/civicrm-core/pull/15709) and
48 [16863](https://github.com/civicrm/civicrm-core/pull/16863))**
49
50 These changes continue work to move to datepicker from jcalendar by converting
51 report instances from using the legacy jcalendar to using datepicker for date
52 fields and deprecating the `addDateRange` function used by jcalendar.
53
54 - **APIv4 - Add Dashboard & DashboardContact entities
55 ([16867](https://github.com/civicrm/civicrm-core/pull/16867))**
56
57 Adds APIv4 support for Dashboard & DashboardContact and does some cleanup in
58 the BAO and API layers for improved consistency.
59
60 - **Add new language, `nl_BE`
61 ([17014](https://github.com/civicrm/civicrm-core/pull/17014))**
62
63 Adds a new translation option for "Dutch (Belgium)".
64
65 - **Add hook to alter display value or Custom field value
66 ([16921](https://github.com/civicrm/civicrm-core/pull/16921))**
67
68 The new hook
69 [`hook_civicrm_alterCustomFieldDisplayValue()`](https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterCustomFieldDisplayValue/)
70 allows modification of the displayed value for a custom field value.
71
72 - **APIv4 query improvements (Work towards
73 [dev/report#31](https://lab.civicrm.org/dev/report/issues/31):
74 [16917](https://github.com/civicrm/civicrm-core/pull/16917) and
75 [16947](https://github.com/civicrm/civicrm-core/pull/16947))**
76
77 This change builds out the APIv4 framework to support `GROUP BY` and different
78 types of expressions in clauses that previously only accepted the names of
79 fields. These expressions can now include numbers, `NULL`, strings, and
80 whitelisted SQL functions. The framework can in theory handle most SQL
81 functions, but this first PR adds support for the aggregate functions `AVG`,
82 `COUNT`, `MAX`, `MIN`, and `SUM`.
83
84 - **install/index.php - Fix leak which breaks compatibility with current Backdrop
85 ([#17249](https://github.com/civicrm/civicrm-core/pull/17249))**
86
87 ### CiviContribute
88
89 - **Partial Refunds (Work towards
90 [dev/financial#87](https://lab.civicrm.org/dev/financial/issues/87):
91 [16480](https://github.com/civicrm/civicrm-core/pull/16480))**
92
93 The "Add Payment" form is altered to permit payments to be added even if a
94 contribution is fully paid.
95
96 - **Add privacy fields to Contribution Detail report
97 ([16674](https://github.com/civicrm/civicrm-core/pull/16674))**
98
99 Columns for the following fields are added to the contribution detail report:
100 "Do Not Phone", "Do Not Mail", "Do Not SMS", "Do Not Trade".
101
102 - **Add "pledge id" as column and filter in Contribution Detail report.
103 ([16868](https://github.com/civicrm/civicrm-core/pull/16868))**
104
105 This change improves the Contribution Detail Report by adding "pledge id" as
106 a filter and column.
107
108 ### CiviEvent
109
110 - **Remove additional display of buttons for events
111 ([16550](https://github.com/civicrm/civicrm-core/pull/16550))**
112
113 When viewing an event registration, this removes the Record Payment button
114 from the Fees section. Payments can still be recorded from the payments
115 section.
116
117 ### WordPress Integration
118
119 - **Merge REST API wrapper code
120 ([160](https://github.com/civicrm/civicrm-wordpress/pull/160))**
121
122 This merges the CiviCRM WP REST API Wrapper plugin's code into the core
123 WordPress integration. The result is that there are now native WordPress REST
124 endpoints for the REST API, email tracking, and other endpoints that had been
125 direct links to PHP files in the `extern` folder of the CiviCRM plugin.
126
127 - **Add shortcodes for Personal Campaign Pages
128 ([185](https://github.com/civicrm/civicrm-wordpress/pull/185) and
129 [16695](https://github.com/civicrm/civicrm-core/pull/16695))**
130
131 Personal Campaign Pages are now available as a shortcode.
132
133 ## <a name="bugs"></a>Bugs resolved
134
135 ### Core CiviCRM
136
137 - **Activity Detail report gives syntax error with force=1 if include case
138 activities is on
139 ([dev/core#1710](https://lab.civicrm.org/dev/core/issues/1710):
140 [17128](https://github.com/civicrm/civicrm-core/pull/17128))**
141
142 The case activity table wasn't properly loaded when the Activity Detail report
143 including case activities would go straight to displaying results.
144
145 - **Search Builder - Activity Type search not working.
146 ([dev/core#1714](https://lab.civicrm.org/dev/core/issues/1714):
147 [17215](https://github.com/civicrm/civicrm-core/pull/17215))**
148
149 In Search Builder, searching by activity type would return no results,
150 affecting not only direct searches but also smart groups that built with
151 Search Builder. This resolves the regression, which first appeared in 5.24.3.
152
153 - **Deleting entities leaves obsolete EntityTag records
154 ([dev/core#667](https://lab.civicrm.org/dev/core/issues/667):
155 [16832](https://github.com/civicrm/civicrm-core/pull/16832))**
156
157 Fixes a bug where deleting a contact does not delete tags associated with the
158 contact.
159
160 - **Profile Public Title (frontend_title column) is not used in profile
161 create/edit mode
162 ([dev/core#1683](https://lab.civicrm.org/dev/core/issues/1683):
163 [16945](https://github.com/civicrm/civicrm-core/pull/16945))**
164
165 The Public Title setting that was recently added for profiles would only
166 replace the profile name on contribution and event forms. When the profile
167 was used in a standalone context, the name would always appear.
168
169 - **Auto-complete search results not consistent with other searches
170 ([dev/core#787](https://lab.civicrm.org/dev/core/issues/787):
171 [13809](https://github.com/civicrm/civicrm-core/pull/13809))**
172
173 - **Need to Increase Data Size for `form_values` column on
174 civicrm_report_instance table
175 ([dev/core#1569](https://lab.civicrm.org/dev/core/issues/1569):
176 [16836](https://github.com/civicrm/civicrm-core/pull/16836))**
177
178 This hanges the data type for the `form_values` column on the
179 `civicrm_report_instance` from TEXT to LONGTEXT.
180
181 - **PHP warning on Add relationship form
182 ([dev/core#1663](https://lab.civicrm.org/dev/core/issues/1663):
183 [16845](https://github.com/civicrm/civicrm-core/pull/16845) and
184 [16941](https://github.com/civicrm/civicrm-core/pull/16941))**
185
186 - **Removing all the dashlets from the dashboard leads to E_NOTICE
187 ([dev/core#1668](https://lab.civicrm.org/dev/core/issues/1668):
188 [16883](https://github.com/civicrm/civicrm-core/pull/16883))**
189
190 - **Regression: Api4 causes container being rebuild on every request
191 ([dev/core#1674](https://lab.civicrm.org/dev/core/issues/1674):
192 [16919](https://github.com/civicrm/civicrm-core/pull/16919))**
193
194 - **E_NOTICE when using the New Individual popup/profile
195 ([dev/core#1676](https://lab.civicrm.org/dev/core/issues/1676):
196 [16924](https://github.com/civicrm/civicrm-core/pull/16924))**
197
198 - **[regression] CiviCRM reports that smart groups won't work due to deleted
199 custom fields that aren't deleted
200 ([dev/core#1688](https://lab.civicrm.org/dev/core/issues/1688):
201 [16961](https://github.com/civicrm/civicrm-core/pull/16961))**
202
203 A system check would mistakenly report that a smart group was based upon a
204 deleted custom field if it was based upon a checkbox or multi-select custom
205 field.
206
207 - **Fix checking permissions in api3 profile get
208 ([16848](https://github.com/civicrm/civicrm-core/pull/16848))**
209
210 This resolves a bug where the API would reverse the value of the option to use
211 a current user's permissions when retrieving the list of fields in a profile.
212
213 - **APIv4 - convert Result object to array when running through json_encode
214 ([16828](https://github.com/civicrm/civicrm-core/pull/16828))**
215
216 - **Api4 AJAX endpoint: change required permission to access AJAX API.
217 ([16705](https://github.com/civicrm/civicrm-core/pull/16705) and
218 [17241](https://github.com/civicrm/civicrm-core/pull/17241))**
219
220 The APIv4 AJAX endpoint is now open to users with either the Access CiviCRM or
221 the Access AJAX API permissions, matching the APIv3 behavior.
222
223 - **Improvements to APIv4 select query
224 ([16889](https://github.com/civicrm/civicrm-core/pull/16889) and
225 [16900](https://github.com/civicrm/civicrm-core/pull/16900))**
226
227 - **APIv4 - Don't advertise implicit multi-joins in Explorer
228 ([17205](https://github.com/civicrm/civicrm-core/pull/17205))**
229
230 Implicit one-to-many joins in APIv4 have been problematic and may get removed.
231 As a soft deprecation, these are no longer displayed in the APIv4 explorer.
232
233 - **CRM_Core_I18n - Provide a better label for new/unknown locales
234 ([17021](https://github.com/civicrm/civicrm-core/pull/17021))**
235
236 If CiviCRM finds a locale in the localization files but doesn't know what it
237 is, it will now display the locale code instead of just a blank option.
238
239 - **Fixed fatal error for class not found when managed hook is invoked during
240 upgrade ([17004](https://github.com/civicrm/civicrm-core/pull/17004))**
241
242 - **Log error message instead of throwing exception
243 ([16880](https://github.com/civicrm/civicrm-core/pull/16880))**
244
245 - **Remove instances of fatal
246 ([16759](https://github.com/civicrm/civicrm-core/pull/16759))**
247
248 This throws exceptions rather than dying when encountering problems creating
249 contacts.
250
251 - **Fix bug where a % in a serialized array can lead to the data being broken
252 ([16694](https://github.com/civicrm/civicrm-core/pull/16694))**
253
254 - **Fix batch contact/activity update with radio options
255 ([16855](https://github.com/civicrm/civicrm-core/pull/16855))**
256
257 This fixes a failure to copy the value down a column if the field is radio
258 buttons and the value in the first row contains a space.
259
260 - **Fix CustomDataView.tpl plain empty memo field.
261 ([16839](https://github.com/civicrm/civicrm-core/pull/16839))**
262
263 Ensure note custom fields display on their own lines
264
265 - **Fix setting outBound_option readonly in UI
266 ([16774](https://github.com/civicrm/civicrm-core/pull/16774))**
267
268 If the outbound mailer option is set via the settings file, the settings form
269 will now disable the field.
270
271 - **Use dbAlias to generate where clause for date field in activity report
272 ([16689](https://github.com/civicrm/civicrm-core/pull/16689))**
273
274 This resolves potentially ambiguous queries in the Activity Summary and Detail
275 reports if the activity table is joined again in the report.
276
277 - **[REF] Use composer patches to apply CiviCRM Customisations for CRM-1367 and
278 CRM-5946 ([16870](https://github.com/civicrm/civicrm-core/pull/16870))**
279
280 Migrates the patching of pear_mail from a script file to using composer
281 patches to ensure CiviCRM customisations for CRM-1367 and CRM-5946 are applied
282 consistently.
283
284 ### CiviCase
285
286 - **Various errors recorded in log message on Manage Case screen -> relationship
287 tab. ([dev/core#1664](https://lab.civicrm.org/dev/core/issues/1664):
288 [16846](https://github.com/civicrm/civicrm-core/pull/16846))**
289
290 Fixes log messages generated when opening the relationship tab on the Manage
291 Case form.
292
293 - **"Merge Case" modal not showing relevant cases
294 ([dev/core#1646](https://lab.civicrm.org/dev/core/issues/1646):
295 [16798](https://github.com/civicrm/civicrm-core/pull/16798))**
296
297 The pop-up to merge cases would only show 25 other cases. It now shows all
298 cases for a client.
299
300 - **Adding a timeline to a case doesn't get the last activity in the timeline
301 right ([dev/core#1675](https://lab.civicrm.org/dev/core/issues/1675) and
302 [dev/core#1695](https://lab.civicrm.org/dev/core/issues/1695):
303 [289](https://github.com/civicrm/civicrm-packages/pull/289))**
304
305 Ensures case custom fields are saved when submitted via Drupal webform.
306 Additionally ensures that the last activity in the case timeline is set
307 correctly.
308
309 - **Check for "Change Case Type" in case activity form doesn't do anything
310 ([dev/core#1652](https://lab.civicrm.org/dev/core/issues/1652):
311 [16785](https://github.com/civicrm/civicrm-core/pull/16785))**
312
313 - **When auditing cases on non-English deployments, richtext details
314 are incorrectly escaped
315 ([16659](https://github.com/civicrm/civicrm-core/pull/16659))**
316
317 - **Respect 'Do not notify activity type' setting
318 ([16800](https://github.com/civicrm/civicrm-core/pull/16800))**
319
320 The setting to not notify assignees for certain activity types was not
321 respected when submitting an activity from a case.
322
323 ### CiviContribute
324
325 - **Changes to "CiviContribute Component Settings" not saved
326 ([dev/core#1724](https://lab.civicrm.org/dev/core/issues/1724):
327 [17188](https://github.com/civicrm/civicrm-core/pull/17188))**
328
329 The way that CiviContribute component settings were stored was updated for
330 5.23, but the transition during the upgrade was problematic. This replaces
331 the transition code, resolving issues for sites upgrading directly from 5.22.x
332 or earlier. Sites on 5.23.x or 5.24.x should review their settings, however.
333
334 - **Invoice action not shown when invoicing enabled
335 ([17164](https://github.com/civicrm/civicrm-core/pull/17164))**
336
337 The "Invoices - print or email" action was not available for contribution
338 search results even when invoicing was enabled.
339
340 - **Cumulative contributions not being calculated with the correct criteria
341 ([dev/core#1740](https://lab.civicrm.org/dev/core/issues/1740):
342 [17237](https://github.com/civicrm/civicrm-core/pull/17237))**
343
344 The cumulative contributions display from a contribution page would needlessly
345 filter contributions by date, with the end date being midnight on the current
346 date. That would exclude contributions received on the current day.
347
348 - **Updating misleading labels on buttons to confirmation pages
349 ([dev/core#1613](https://lab.civicrm.org/dev/core/issues/1613):
350 [16651](https://github.com/civicrm/civicrm-core/pull/16651))**
351
352 Some donors and event registrants interpreted the button text "Confirm
353 Contribution" (on contribution pages) and "Continue" (on event registration
354 pages) to mean that this would complete the contribution or registration. In
355 fact, these would only appear when a confirmation page is used.
356
357 The button text now appears as "Review your contribution" and "Review your
358 registration", respectively.
359
360 - **Fix upgrade failure. Thin-out activation logic for `sequentialcreditnotes`.
361 ([16971](https://github.com/civicrm/civicrm-core/pull/16971) following
362 [dev/financial#84](https://lab.civicrm.org/dev/financial/issues/84))**
363
364 This change fixes an issue for some builds when upgrading caused by the
365 activation of the `sequentialcreditnotes` extension to replace core code that
366 generates sequential credit note identifiers.
367
368 - **Fix Bug where Payment Balance is sometimes miscalculated
369 ([16546](https://github.com/civicrm/civicrm-core/pull/16546))**
370
371 Fixes a bug where Add Refund is displayed instead of Add Payment on partially
372 paid event contributions.
373
374 - **Stop overwriting contact name with PayPal name
375 ([CRM-20553](https://issues.civicrm.org/jira/browse/CRM-20553): [14667](https://github.com/civicrm/civicrm-core/pull/14667))**
376
377 When a user creates a donation via PayPal, their CiviCRM contact name should
378 not be overwritten to be their PayPal account name.
379
380 - **Fix use of "Soft Credit Amount Stats" and any filter of contribution…
381 ([16591](https://github.com/civicrm/civicrm-core/pull/16591))**
382
383 Ensures that one can use "Soft Credit Amount Stats" with all filters.
384
385 - **CRM_Core_Payment_PayPalProIPN should not call getPayPalPaymentProcessorID()
386 if processor_id is clearly provided in URL
387 ([dev/core#1579](https://lab.civicrm.org/dev/core/issues/1579):
388 [16479](https://github.com/civicrm/civicrm-core/pull/16479))**
389
390 - **Update pending contribution status action also send email without warning
391 ([dev/core#1640](https://lab.civicrm.org/dev/core/issues/1640):
392 [16742](https://github.com/civicrm/civicrm-core/pull/16742))**]
393
394 When bulk updating the status of contributions, there is now a checkbox to
395 choose whether the contacts should be emailed. Previously, emails would be
396 generated without warning.
397
398 - **Fix display of payment processor title in cancelSubscription form
399 ([16857](https://github.com/civicrm/civicrm-core/pull/16857))**
400
401 - **Make the checkbox, "Billing address is the same", respond to the change event
402 ([16496](https://github.com/civicrm/civicrm-core/pull/16496))**
403
404 This makes the "billing address is the same" checkbox trigger its changes no
405 matter how the box is checked, not just by clicking it.
406
407 ### CiviEvent
408
409 - **PayPal Express Checkout fails on events
410 ([dev/financial#119](https://lab.civicrm.org/dev/financial/issues/119):
411 [16692](https://github.com/civicrm/civicrm-core/pull/16692))**
412
413 - **Fixed fatal error for Event Participants custom search if price set field
414 option is disabled after a registrant has already selected it
415 ([16894](https://github.com/civicrm/civicrm-core/pull/16894))**
416
417 ### CiviMember
418
419 - **Don't freeze fields for auto-renew memberships
420 ([dev/core#1331](https://lab.civicrm.org/dev/core/issues/1331):
421 [16609](https://github.com/civicrm/civicrm-core/pull/16609) and
422 [16881](https://github.com/civicrm/civicrm-core/pull/16881))**
423
424 Previously, many membership fields were frozen for administrators when the
425 membership was set to auto-renew with a recurring contribution.
426
427 - **Deceased Contact via Inline doesn't update the Membership's status to
428 Deceased ([dev/core#1599](https://lab.civicrm.org/dev/core/issues/1599):
429 [16724](https://github.com/civicrm/civicrm-core/pull/16724) and
430 [16787](https://github.com/civicrm/civicrm-core/pull/16787))**
431
432 When marking a contact as deceased, this simplifies the underlying process and
433 ensures that a message is displayed about memberships being updated to
434 Deceased status.
435
436 - **Invalid currency "$" on sending offline membership receipt.
437 ([dev/core#1682](https://lab.civicrm.org/dev/core/issues/1682):
438 [16943](https://github.com/civicrm/civicrm-core/pull/16943))**
439
440 Fixes an error when sending a receipt for a membership created from an offline
441 membership form. The default currency symbol was being saved as the currency
442 itself.
443
444 - **Membership auto-renew is not optional if using price set
445 ([dev/core#1630](https://lab.civicrm.org/dev/core/issues/1630):
446 [16762](https://github.com/civicrm/civicrm-core/pull/16762))**
447
448 - **Membership join date checkbox on constituent detail report has lost its
449 label ([dev/report#28](https://lab.civicrm.org/dev/report/issues/28):
450 [16829](https://github.com/civicrm/civicrm-core/pull/16829))**
451
452 ### Drupal Integration
453
454 - **Address no longer available as Relationship for Views in Drupal 7
455 ([dev/drupal#110](https://lab.civicrm.org/dev/drupal/issues/110):
456 [118](https://github.com/civicrm/civicrm-backdrop/pull/118) and
457 [600](https://github.com/civicrm/civicrm-drupal/pull/600))**
458
459 - **Generalise typo3/phar-stream-wrapper so CiviCRM can be installed on D8.7
460 ([17085](https://github.com/civicrm/civicrm-core/pull/17085))**
461
462 - **civicrm-setup and backward slashes in file paths on windows don't play nice
463 together ([dev/core#1643](https://lab.civicrm.org/dev/core/issues/1643):
464 [16886](https://github.com/civicrm/civicrm-core/pull/16886))**
465
466 Fixes installing CiviCRM on Drupal8 sites on windows using civicrm-setup / cv
467 core:install.
468
469 ### WordPress Integration
470
471 - **5.23 breaks WP admin menu links
472 ([dev/core#1637](https://lab.civicrm.org/dev/core/issues/1637):
473 [16713](https://github.com/civicrm/civicrm-core/pull/16713))**
474
475 - **Set "cms.root" URL in addition to Path
476 ([188](https://github.com/civicrm/civicrm-wordpress/pull/188))**
477
478 This resolves a "Cannot resolve path using 'cms.root.url'" exception thrown on
479 the "Settings - Resource URLs" screen incorrectly on a WordPress multisite
480 subsite.
481
482 ## <a name="misc"></a>Miscellany
483
484 - **Add recurring contribution ID to doCancelRecurring
485 ([16741](https://github.com/civicrm/civicrm-core/pull/16741))**
486
487 - **Support PropertyBag in CRM_Utils_Array
488 ([16699](https://github.com/civicrm/civicrm-core/pull/16699) and
489 [16737](https://github.com/civicrm/civicrm-core/pull/16737))**
490
491 - **Added pseudoconstant for acl_id
492 ([16925](https://github.com/civicrm/civicrm-core/pull/16925))**
493
494 - **Added pseudoconstant for state province
495 ([16799](https://github.com/civicrm/civicrm-core/pull/16799))**
496
497 - **Added pseudoconstant for location type
498 ([16758](https://github.com/civicrm/civicrm-core/pull/16758))**
499
500 - **Added pseudoconstant for priceset
501 ([16754](https://github.com/civicrm/civicrm-core/pull/16754))**
502
503 - **Added pseudoconstant for bounce type
504 ([16727](https://github.com/civicrm/civicrm-core/pull/16727))**
505
506 - **Added pseudoconstant for civicrm_tag.parent_id
507 ([16703](https://github.com/civicrm/civicrm-core/pull/16703))**
508
509 - **Event Cart cleanup
510 ([16691](https://github.com/civicrm/civicrm-core/pull/16691))**
511
512 - **Update cancelSubscription form to use updated methodology
513 ([16501](https://github.com/civicrm/civicrm-core/pull/16501) and
514 [16715](https://github.com/civicrm/civicrm-core/pull/16715))**
515
516 - **Skip expensive smarty Processing when nothing to see here
517 ([16731](https://github.com/civicrm/civicrm-core/pull/16731))**
518
519 - **UFMatch - deprecate unused functions
520 ([16849](https://github.com/civicrm/civicrm-core/pull/16849))**
521
522 - **Shifted UpdateMemberhsip to BAO Layer
523 ([16690](https://github.com/civicrm/civicrm-core/pull/16690))**
524
525 - **Add DAO::writeRecord and DAO::deleteRecord methods
526 ([16856](https://github.com/civicrm/civicrm-core/pull/16856))**
527
528 - **Add some deprecation notices, stop calling PrevNext::cleanupCache
529 ([16697](https://github.com/civicrm/civicrm-core/pull/16697))**
530
531 - **Remove assigns for atypefile
532 ([16895](https://github.com/civicrm/civicrm-core/pull/16895))**
533
534 - **Deprecate use of in OptionGroup::add() function
535 ([16910](https://github.com/civicrm/civicrm-core/pull/16910))**
536
537 - **Improve APIv4 selectUtils to handle join paths in fieldnames.
538 ([16904](https://github.com/civicrm/civicrm-core/pull/16904))**
539
540 - **Upgrade jQuery validation version to v1.19.1
541 ([16625](https://github.com/civicrm/civicrm-core/pull/16625))**
542
543 - **APIv3 - Use new DAO::deleteRecord method
544 ([16869](https://github.com/civicrm/civicrm-core/pull/16869))**
545
546 - **Improve conditional in api3 ChainSubscriber
547 ([16718](https://github.com/civicrm/civicrm-core/pull/16718))**
548
549 - **Mark unused function as deprecated
550 ([16688](https://github.com/civicrm/civicrm-core/pull/16688))**
551
552 - **CRM/Contact - Cleanup boolean expressions
553 ([16844](https://github.com/civicrm/civicrm-core/pull/16844))**
554
555 - **CRM/Contribute - Cleanup boolean expressions
556 ([16853](https://github.com/civicrm/civicrm-core/pull/16853))**
557
558 - **Civi/Test - Refactor out CRM_Utils_Array::value
559 ([16871](https://github.com/civicrm/civicrm-core/pull/16871))**
560
561 - **Cleanup reverse boolean expressions
562 ([16850](https://github.com/civicrm/civicrm-core/pull/16850))**
563
564 - **CRM/Core - Cleanup boolean expressions
565 ([16852](https://github.com/civicrm/civicrm-core/pull/16852))**
566
567 - **CRM/Utils - Cleanup boolean expressions
568 ([16851](https://github.com/civicrm/civicrm-core/pull/16851))**
569
570 - **CRM - Cleanup boolean expressions
571 ([16854](https://github.com/civicrm/civicrm-core/pull/16854))**
572
573 - **Fix another instance of silly use of CRM_Utils_Array::value
574 ([16712](https://github.com/civicrm/civicrm-core/pull/16712))**
575
576 - **Fix passing a non-array to CRM_Utils_Array::value
577 ([16701](https://github.com/civicrm/civicrm-core/pull/16701))**
578
579 - **Fix another instance of NULL being passed to CRM_Utils_Array::value
580 ([16711](https://github.com/civicrm/civicrm-core/pull/16711))**
581
582 - **Remove an instance of passing non-arraay to CRM_Utils_Array::value(
583 ([16706](https://github.com/civicrm/civicrm-core/pull/16706))**
584
585 - **Remove calls & deprecate CRM_Core_BAO_PrevNextCache::setItem
586 ([16696](https://github.com/civicrm/civicrm-core/pull/16696))**
587
588 - **(POC) Add `hook_civicrm_postCommit`, a less foot-gunny variant of
589 `hook_civicrm_post`
590 ([15338](https://github.com/civicrm/civicrm-core/pull/15338))**
591
592 - **Fix typos in xml/dao
593 ([16827](https://github.com/civicrm/civicrm-core/pull/16827))**
594
595 - **Deprecate unused/unneeded pseudoconstant functions
596 ([16771](https://github.com/civicrm/civicrm-core/pull/16771))**
597
598 - **Deprecate calling contactTrashRestore function
599 ([16824](https://github.com/civicrm/civicrm-core/pull/16824))**
600
601 - **Remove old stuff
602 ([16835](https://github.com/civicrm/civicrm-core/pull/16835))**
603
604 - **Remove deprecated cleaning of money in the BAO layer
605 ([16950](https://github.com/civicrm/civicrm-core/pull/16950))**
606
607 - **Remove unused deprecated function
608 ([16812](https://github.com/civicrm/civicrm-core/pull/16812))**
609
610 - **Remove deprecated function
611 ([16907](https://github.com/civicrm/civicrm-core/pull/16907))**
612
613 - **Remove unused code
614 ([16914](https://github.com/civicrm/civicrm-core/pull/16914))**
615
616 - **Remove deprecated parameter
617 ([16813](https://github.com/civicrm/civicrm-core/pull/16813))**
618
619 - **fix typo ([16865](https://github.com/civicrm/civicrm-core/pull/16865))**
620
621 - **API tests - remove unnecessary check for v4
622 ([16866](https://github.com/civicrm/civicrm-core/pull/16866))**
623
624 - **[NFC] APIv4 - Add test coverage for expected fields from join
625 ([16920](https://github.com/civicrm/civicrm-core/pull/16920))**
626
627 - **[NFC] Add in unit test to ensure that APIv4 Doesn't accept an invalid…
628 ([16893](https://github.com/civicrm/civicrm-core/pull/16893))**
629
630 - **[NFC] Use strict comparison where possible
631 ([16896](https://github.com/civicrm/civicrm-core/pull/16896))**
632
633 - **[NFC] Code formatting
634 ([16906](https://github.com/civicrm/civicrm-core/pull/16906))**
635
636 - **[NFC] minor form cleanup.
637 ([16905](https://github.com/civicrm/civicrm-core/pull/16905))**
638
639 - **(NFC) Minor typo: receipients > recipients
640 ([16810](https://github.com/civicrm/civicrm-core/pull/16810))**
641
642 - **[NFC] Minor code cleanup
643 ([16823](https://github.com/civicrm/civicrm-core/pull/16823))**
644
645 - **[NFC] Deprecate passing in silly data
646 ([16818](https://github.com/civicrm/civicrm-core/pull/16818))**
647
648 - **[NFC] Test cleanup
649 ([16817](https://github.com/civicrm/civicrm-core/pull/16817))**
650
651 - **[NFC] Test cleanup, remove duplicate test
652 ([16755](https://github.com/civicrm/civicrm-core/pull/16755))**
653
654 - **(NFC) Minor string error : for for > for
655 ([16773](https://github.com/civicrm/civicrm-core/pull/16773))**
656
657 - **(NFC) Minor typo: contacts(s) -> contact(s)
658 ([16804](https://github.com/civicrm/civicrm-core/pull/16804))**
659
660 - **(NFC) Query.php / Minor typo: Genrated -> Generated
661 ([16803](https://github.com/civicrm/civicrm-core/pull/16803))**
662
663 - **[NFC] Fix comments, use single quotes
664 ([16693](https://github.com/civicrm/civicrm-core/pull/16693))**
665
666 - **[NFC] Mark unused function deprecated, fix some comments & formatting
667 ([16698](https://github.com/civicrm/civicrm-core/pull/16698))**
668
669 - **[NFC] cleanup in test class
670 ([16764](https://github.com/civicrm/civicrm-core/pull/16764))**
671
672 - **[NFC] Use helper / api to delete contacts in tests
673 ([16825](https://github.com/civicrm/civicrm-core/pull/16825))**
674
675 - **[NFC/TEST] Resurrect unfinished test for getRelatedCases()
676 ([16885](https://github.com/civicrm/civicrm-core/pull/16885))**
677
678 - **[Test] Remove skip that seems no longer required
679 ([16912](https://github.com/civicrm/civicrm-core/pull/16912))**
680
681 - **Test for PR 13809
682 ([16474](https://github.com/civicrm/civicrm-core/pull/16474))**
683
684 - **[TEST] Add test for to time processing
685 ([16861](https://github.com/civicrm/civicrm-core/pull/16861))**
686
687 - **[REF] Case Activities Report includes core activities *always*
688 ([dev/core#1366](https://lab.civicrm.org/dev/core/issues/1366):
689 [16670](https://github.com/civicrm/civicrm-core/pull/16670))**
690
691 - **[REF] Cleanup api3 DashboardContact
692 ([16792](https://github.com/civicrm/civicrm-core/pull/16792))**
693
694 - **[REF] Fixes a bug in Message Template create API where by user permissions
695 checks were being done on system workflow messages
696 ([16788](https://github.com/civicrm/civicrm-core/pull/16788))**
697
698 - **[REF] Remove calls to fatal()
699 ([16746](https://github.com/civicrm/civicrm-core/pull/16746))**
700
701 - **[REF] Cleanup uses of CRM_Utils_Array::value related to numbers
702 ([16778](https://github.com/civicrm/civicrm-core/pull/16778))**
703
704 - **[REF] cleanup financial type form - remove complex inheritence
705 ([16777](https://github.com/civicrm/civicrm-core/pull/16777))**
706
707 - **[REF] Use ?? operator instead of CRM_Utils_Array::value()
708 ([16710](https://github.com/civicrm/civicrm-core/pull/16710))**
709
710 - **[REF] dev/core#1116 - Remove unused misnamed activityTypeName variable
711 ([16730](https://github.com/civicrm/civicrm-core/pull/16730))**
712
713 - **REF Switch to getter on cancelSubscription form
714 ([16740](https://github.com/civicrm/civicrm-core/pull/16740))**
715
716 - **[REF] Minor code simplification
717 ([16734](https://github.com/civicrm/civicrm-core/pull/16734))**
718
719 - **[REF] Hopefully fix regularly failing conformance test
720 ([16732](https://github.com/civicrm/civicrm-core/pull/16732))**
721
722 - **[REF] Use empty() instead of CRM_Utils_Array::value() in inline conditionals
723 ([16729](https://github.com/civicrm/civicrm-core/pull/16729))**
724
725 - **[REF] Use ?? operator instead of CRM_Utils_Array::value() in return
726 statements ([16719](https://github.com/civicrm/civicrm-core/pull/16719))**
727
728 - **[REF] CRM_Utils_Array::value() -> empty()
729 ([16704](https://github.com/civicrm/civicrm-core/pull/16704))**
730
731 - **[REF] Cleanup is_array(CRM_Utils_Array::value()) pattern
732 ([16875](https://github.com/civicrm/civicrm-core/pull/16875))**
733
734 - **[REF] Remove redundant call to build permissions
735 ([16862](https://github.com/civicrm/civicrm-core/pull/16862))**
736
737 - **[REF] Replace CRM_Utils_Array::value with ?? in variable assignments
738 ([16768](https://github.com/civicrm/civicrm-core/pull/16768))**
739
740 - **[REF] Replace coalesce pattern with coalesce operator
741 ([16802](https://github.com/civicrm/civicrm-core/pull/16802))**
742
743 - **[REF] Switch to using a non abandoned library for getting a mapping of
744 mimetypes to extensions
745 ([16436](https://github.com/civicrm/civicrm-core/pull/16436))**
746
747 - **[REF] move buildQuickForm function to the trait
748 ([16948](https://github.com/civicrm/civicrm-core/pull/16948))**
749
750 - **[REF] Move properties to Trait
751 ([16940](https://github.com/civicrm/civicrm-core/pull/16940))**
752
753 - **[REF] Start transitioning EmailCommon class to a trait
754 ([16935](https://github.com/civicrm/civicrm-core/pull/16935))**
755
756 - **[REF] Remove fatal, fix some code comments
757 ([16928](https://github.com/civicrm/civicrm-core/pull/16928))**
758
759 - **[REF] extract code to getEmails
760 ([16929](https://github.com/civicrm/civicrm-core/pull/16929))**
761
762 - **[REF] Minor simplification - do not use variable variables
763 ([16927](https://github.com/civicrm/civicrm-core/pull/16927))**
764
765 - **[REF] Extract code used to render a pseudoconstant when a table is defined.
766 ([16902](https://github.com/civicrm/civicrm-core/pull/16902))**
767
768 - **[REF] Move form specific handling back to the relevant form.
769 ([16913](https://github.com/civicrm/civicrm-core/pull/16913))**
770
771 - **[REF] APIv4 - Preserve order when expanding select wildcards
772 ([16909](https://github.com/civicrm/civicrm-core/pull/16909))**
773
774 - **[REF] Remove & from before variable
775 ([16897](https://github.com/civicrm/civicrm-core/pull/16897))**
776
777 - **[REF] Replace \CRM_Utils_Array::value with ??
778 ([16872](https://github.com/civicrm/civicrm-core/pull/16872))**
779
780 - **[REF] Civi/Api4 - Refactor out 'use CRM_Utils_Array'
781 ([16873](https://github.com/civicrm/civicrm-core/pull/16873))**
782
783 - **[REF] BAO_Contact - Remove CRM_Utils_Array::value and other unnecessary code
784 ([16874](https://github.com/civicrm/civicrm-core/pull/16874))**
785
786 - **[REF] APIv4 - Restructure the way get query objects are constucted
787 ([16878](https://github.com/civicrm/civicrm-core/pull/16878))**
788
789 - **[REF] Fix PCP getPcpDashboardInfo to be tested & use sensible functions
790 ([16790](https://github.com/civicrm/civicrm-core/pull/16790))**
791
792 - **[REF] Simplify obtuse boolean expressions
793 ([16822](https://github.com/civicrm/civicrm-core/pull/16822))**
794
795 - **[REF] Replace CRM_Utils_Array::value with ?? in variable assignments
796 ([16820](https://github.com/civicrm/civicrm-core/pull/16820))**
797
798 - **[REF] cleanups on array operator
799 ([16821](https://github.com/civicrm/civicrm-core/pull/16821))**
800
801 - **[REF] Simplify obtuse boolean expressions
802 ([16819](https://github.com/civicrm/civicrm-core/pull/16819))**
803
804 - **[REF] Remove titleHeader var
805 ([16816](https://github.com/civicrm/civicrm-core/pull/16816))**
806
807 - **[REF] simplify references to civicrm_acl
808 ([16671](https://github.com/civicrm/civicrm-core/pull/16671))**
809
810 - **[REF] Fix retrieving invoice related settings when doing complete
811 transaction ([17218](https://github.com/civicrm/civicrm-core/pull/17218))**
812
813 ## <a name="credits"></a>Credits
814
815 This release was developed by the following code authors:
816
817 a-n The Artists Information Company - William Mortada; AGH Strategies - Alice
818 Frumin, Andrew Hunt; Alexy Mikhailichenko; Andrei Mondoc; Christian Wach; Circle
819 Interactive - Pradeep Nayak; CiviCoop - Jaap Jansma; CiviCRM - Coleman Watts,
820 Tim Otten; CiviDesk - Yashodha Chaku; Coop SymbioTIC - Mathieu Lutfy; Dave D;
821 Freeform Solutions - Herb van den Dool; Fuzion - Jitendra Purohit; iXiam - César
822 Ramos; JMA Consulting - Seamus Lee; Joinery - Allen Shaw; Kartik Kathuria;
823 Lighthouse Design and Consulting - Brian Shaughnessy; Makoa - Usha F. Matisson;
824 Megaphone Technology Consulting - Jon Goldberg; MJW Consulting - Matthew Wire;
825 Naomi Rosenberg; Ray Wright; OSSeed Technologies LLP - Sushant Paste; SYSTOPIA
826 Organisationsberatung - Björn Endres; Timbsoft Technologies - Tunbola Ogunwande;
827 Wikimedia Foundation - Eileen McNaughton
828
829 Most authors also reviewed code for this release; in addition, the following
830 reviewers contributed their comments:
831
832 Agileware - Justin Freeman; Artful Robot - Rich Lott; British Humanist
833 Association - Andrew West; CiviDesk - Nicolas Ganivet; Coop SymbioTIC - Mathieu
834 Lutfy; Digitalcourage - Detlev Sieber; Freeform Solutions - S. Gray; Fuzion -
835 Jitendra Purohit; Greenpeace Central and Eastern Europe - Patrick Figel; Jamie
836 Tillman; JMA Consulting - Monish Deb; Korlon - Stuart Gaston; MJCO - Mikey
837 O'Toole; Richard van Oosterhout; Skvare - Mark Hanna; Squiffle Consulting -
838 Aidan Saunders; Tadpole Collective - Kevin Cristiano
839
840 ## <a name="feedback"></a>Feedback
841
842 These release notes are edited by Alice Frumin and Andrew Hunt. If you'd like
843 to provide feedback on them, please log in to https://chat.civicrm.org/civicrm
844 and contact `@agh1`.