5 - **[Synopsis](#synopsis)**
6 - **[Features](#features)**
7 - **[Bugs resolved](#bugs)**
8 - **[Miscellany](#misc)**
9 - **[Credits](#credits)**
10 - **[Feedback](#feedback)**
12 ## <a name="synopsis"></a>Synopsis
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** |
24 ## <a name="features"></a>Features
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))**
39 CiviCRM now requires PHP 7.1 at a minimum and recommends PHP 7.3.
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.
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))**
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.
54 - **APIv4 - Add Dashboard & DashboardContact entities
55 ([16867](https://github.com/civicrm/civicrm-core/pull/16867))**
57 Adds APIv4 support for Dashboard & DashboardContact and does some cleanup in
58 the BAO and API layers for improved consistency.
60 - **Add new language, `nl_BE`
61 ([17014](https://github.com/civicrm/civicrm-core/pull/17014))**
63 Adds a new translation option for "Dutch (Belgium)".
65 - **Add hook to alter display value or Custom field value
66 ([16921](https://github.com/civicrm/civicrm-core/pull/16921))**
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.
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))**
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`.
84 - **install/index.php - Fix leak which breaks compatibility with current Backdrop
85 ([#17249](https://github.com/civicrm/civicrm-core/pull/17249))**
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))**
93 The "Add Payment" form is altered to permit payments to be added even if a
94 contribution is fully paid.
96 - **Add privacy fields to Contribution Detail report
97 ([16674](https://github.com/civicrm/civicrm-core/pull/16674))**
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".
102 - **Add "pledge id" as column and filter in Contribution Detail report.
103 ([16868](https://github.com/civicrm/civicrm-core/pull/16868))**
105 This change improves the Contribution Detail Report by adding "pledge id" as
110 - **Remove additional display of buttons for events
111 ([16550](https://github.com/civicrm/civicrm-core/pull/16550))**
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
117 ### WordPress Integration
119 - **Merge REST API wrapper code
120 ([160](https://github.com/civicrm/civicrm-wordpress/pull/160))**
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.
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))**
131 Personal Campaign Pages are now available as a shortcode.
133 ## <a name="bugs"></a>Bugs resolved
137 - **Activity Detail report gives syntax error with force=1 if include case
139 ([dev/core#1710](https://lab.civicrm.org/dev/core/issues/1710):
140 [17128](https://github.com/civicrm/civicrm-core/pull/17128))**
142 The case activity table wasn't properly loaded when the Activity Detail report
143 including case activities would go straight to displaying results.
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))**
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.
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))**
157 Fixes a bug where deleting a contact does not delete tags associated with the
160 - **Profile Public Title (frontend_title column) is not used in profile
162 ([dev/core#1683](https://lab.civicrm.org/dev/core/issues/1683):
163 [16945](https://github.com/civicrm/civicrm-core/pull/16945))**
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.
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))**
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))**
178 This hanges the data type for the `form_values` column on the
179 `civicrm_report_instance` from TEXT to LONGTEXT.
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))**
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))**
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))**
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))**
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))**
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
207 - **Fix checking permissions in api3 profile get
208 ([16848](https://github.com/civicrm/civicrm-core/pull/16848))**
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.
213 - **APIv4 - convert Result object to array when running through json_encode
214 ([16828](https://github.com/civicrm/civicrm-core/pull/16828))**
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))**
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.
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))**
227 - **APIv4 - Don't advertise implicit multi-joins in Explorer
228 ([17205](https://github.com/civicrm/civicrm-core/pull/17205))**
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.
233 - **CRM_Core_I18n - Provide a better label for new/unknown locales
234 ([17021](https://github.com/civicrm/civicrm-core/pull/17021))**
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.
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))**
242 - **Log error message instead of throwing exception
243 ([16880](https://github.com/civicrm/civicrm-core/pull/16880))**
245 - **Remove instances of fatal
246 ([16759](https://github.com/civicrm/civicrm-core/pull/16759))**
248 This throws exceptions rather than dying when encountering problems creating
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))**
254 - **Fix batch contact/activity update with radio options
255 ([16855](https://github.com/civicrm/civicrm-core/pull/16855))**
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.
260 - **Fix CustomDataView.tpl plain empty memo field.
261 ([16839](https://github.com/civicrm/civicrm-core/pull/16839))**
263 Ensure note custom fields display on their own lines
265 - **Fix setting outBound_option readonly in UI
266 ([16774](https://github.com/civicrm/civicrm-core/pull/16774))**
268 If the outbound mailer option is set via the settings file, the settings form
269 will now disable the field.
271 - **Use dbAlias to generate where clause for date field in activity report
272 ([16689](https://github.com/civicrm/civicrm-core/pull/16689))**
274 This resolves potentially ambiguous queries in the Activity Summary and Detail
275 reports if the activity table is joined again in the report.
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))**
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
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))**
290 Fixes log messages generated when opening the relationship tab on the Manage
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))**
297 The pop-up to merge cases would only show 25 other cases. It now shows all
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))**
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
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))**
313 - **When auditing cases on non-English deployments, richtext details
314 are incorrectly escaped
315 ([16659](https://github.com/civicrm/civicrm-core/pull/16659))**
317 - **Respect 'Do not notify activity type' setting
318 ([16800](https://github.com/civicrm/civicrm-core/pull/16800))**
320 The setting to not notify assignees for certain activity types was not
321 respected when submitting an activity from a case.
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))**
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.
334 - **Invoice action not shown when invoicing enabled
335 ([17164](https://github.com/civicrm/civicrm-core/pull/17164))**
337 The "Invoices - print or email" action was not available for contribution
338 search results even when invoicing was enabled.
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))**
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.
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))**
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.
357 The button text now appears as "Review your contribution" and "Review your
358 registration", respectively.
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))**
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.
368 - **Fix Bug where Payment Balance is sometimes miscalculated
369 ([16546](https://github.com/civicrm/civicrm-core/pull/16546))**
371 Fixes a bug where Add Refund is displayed instead of Add Payment on partially
372 paid event contributions.
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))**
377 When a user creates a donation via PayPal, their CiviCRM contact name should
378 not be overwritten to be their PayPal account name.
380 - **Fix use of "Soft Credit Amount Stats" and any filter of contribution…
381 ([16591](https://github.com/civicrm/civicrm-core/pull/16591))**
383 Ensures that one can use "Soft Credit Amount Stats" with all filters.
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))**
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))**]
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.
398 - **Fix display of payment processor title in cancelSubscription form
399 ([16857](https://github.com/civicrm/civicrm-core/pull/16857))**
401 - **Make the checkbox, "Billing address is the same", respond to the change event
402 ([16496](https://github.com/civicrm/civicrm-core/pull/16496))**
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.
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))**
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))**
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))**
424 Previously, many membership fields were frozen for administrators when the
425 membership was set to auto-renew with a recurring contribution.
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))**
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
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))**
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
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))**
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))**
452 ### Drupal Integration
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))**
459 - **Generalise typo3/phar-stream-wrapper so CiviCRM can be installed on D8.7
460 ([17085](https://github.com/civicrm/civicrm-core/pull/17085))**
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))**
466 Fixes installing CiviCRM on Drupal8 sites on windows using civicrm-setup / cv
469 ### WordPress Integration
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))**
475 - **Set "cms.root" URL in addition to Path
476 ([188](https://github.com/civicrm/civicrm-wordpress/pull/188))**
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
482 ## <a name="misc"></a>Miscellany
484 - **Add recurring contribution ID to doCancelRecurring
485 ([16741](https://github.com/civicrm/civicrm-core/pull/16741))**
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))**
491 - **Added pseudoconstant for acl_id
492 ([16925](https://github.com/civicrm/civicrm-core/pull/16925))**
494 - **Added pseudoconstant for state province
495 ([16799](https://github.com/civicrm/civicrm-core/pull/16799))**
497 - **Added pseudoconstant for location type
498 ([16758](https://github.com/civicrm/civicrm-core/pull/16758))**
500 - **Added pseudoconstant for priceset
501 ([16754](https://github.com/civicrm/civicrm-core/pull/16754))**
503 - **Added pseudoconstant for bounce type
504 ([16727](https://github.com/civicrm/civicrm-core/pull/16727))**
506 - **Added pseudoconstant for civicrm_tag.parent_id
507 ([16703](https://github.com/civicrm/civicrm-core/pull/16703))**
509 - **Event Cart cleanup
510 ([16691](https://github.com/civicrm/civicrm-core/pull/16691))**
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))**
516 - **Skip expensive smarty Processing when nothing to see here
517 ([16731](https://github.com/civicrm/civicrm-core/pull/16731))**
519 - **UFMatch - deprecate unused functions
520 ([16849](https://github.com/civicrm/civicrm-core/pull/16849))**
522 - **Shifted UpdateMemberhsip to BAO Layer
523 ([16690](https://github.com/civicrm/civicrm-core/pull/16690))**
525 - **Add DAO::writeRecord and DAO::deleteRecord methods
526 ([16856](https://github.com/civicrm/civicrm-core/pull/16856))**
528 - **Add some deprecation notices, stop calling PrevNext::cleanupCache
529 ([16697](https://github.com/civicrm/civicrm-core/pull/16697))**
531 - **Remove assigns for atypefile
532 ([16895](https://github.com/civicrm/civicrm-core/pull/16895))**
534 - **Deprecate use of in OptionGroup::add() function
535 ([16910](https://github.com/civicrm/civicrm-core/pull/16910))**
537 - **Improve APIv4 selectUtils to handle join paths in fieldnames.
538 ([16904](https://github.com/civicrm/civicrm-core/pull/16904))**
540 - **Upgrade jQuery validation version to v1.19.1
541 ([16625](https://github.com/civicrm/civicrm-core/pull/16625))**
543 - **APIv3 - Use new DAO::deleteRecord method
544 ([16869](https://github.com/civicrm/civicrm-core/pull/16869))**
546 - **Improve conditional in api3 ChainSubscriber
547 ([16718](https://github.com/civicrm/civicrm-core/pull/16718))**
549 - **Mark unused function as deprecated
550 ([16688](https://github.com/civicrm/civicrm-core/pull/16688))**
552 - **CRM/Contact - Cleanup boolean expressions
553 ([16844](https://github.com/civicrm/civicrm-core/pull/16844))**
555 - **CRM/Contribute - Cleanup boolean expressions
556 ([16853](https://github.com/civicrm/civicrm-core/pull/16853))**
558 - **Civi/Test - Refactor out CRM_Utils_Array::value
559 ([16871](https://github.com/civicrm/civicrm-core/pull/16871))**
561 - **Cleanup reverse boolean expressions
562 ([16850](https://github.com/civicrm/civicrm-core/pull/16850))**
564 - **CRM/Core - Cleanup boolean expressions
565 ([16852](https://github.com/civicrm/civicrm-core/pull/16852))**
567 - **CRM/Utils - Cleanup boolean expressions
568 ([16851](https://github.com/civicrm/civicrm-core/pull/16851))**
570 - **CRM - Cleanup boolean expressions
571 ([16854](https://github.com/civicrm/civicrm-core/pull/16854))**
573 - **Fix another instance of silly use of CRM_Utils_Array::value
574 ([16712](https://github.com/civicrm/civicrm-core/pull/16712))**
576 - **Fix passing a non-array to CRM_Utils_Array::value
577 ([16701](https://github.com/civicrm/civicrm-core/pull/16701))**
579 - **Fix another instance of NULL being passed to CRM_Utils_Array::value
580 ([16711](https://github.com/civicrm/civicrm-core/pull/16711))**
582 - **Remove an instance of passing non-arraay to CRM_Utils_Array::value(
583 ([16706](https://github.com/civicrm/civicrm-core/pull/16706))**
585 - **Remove calls & deprecate CRM_Core_BAO_PrevNextCache::setItem
586 ([16696](https://github.com/civicrm/civicrm-core/pull/16696))**
588 - **(POC) Add `hook_civicrm_postCommit`, a less foot-gunny variant of
590 ([15338](https://github.com/civicrm/civicrm-core/pull/15338))**
592 - **Fix typos in xml/dao
593 ([16827](https://github.com/civicrm/civicrm-core/pull/16827))**
595 - **Deprecate unused/unneeded pseudoconstant functions
596 ([16771](https://github.com/civicrm/civicrm-core/pull/16771))**
598 - **Deprecate calling contactTrashRestore function
599 ([16824](https://github.com/civicrm/civicrm-core/pull/16824))**
602 ([16835](https://github.com/civicrm/civicrm-core/pull/16835))**
604 - **Remove deprecated cleaning of money in the BAO layer
605 ([16950](https://github.com/civicrm/civicrm-core/pull/16950))**
607 - **Remove unused deprecated function
608 ([16812](https://github.com/civicrm/civicrm-core/pull/16812))**
610 - **Remove deprecated function
611 ([16907](https://github.com/civicrm/civicrm-core/pull/16907))**
613 - **Remove unused code
614 ([16914](https://github.com/civicrm/civicrm-core/pull/16914))**
616 - **Remove deprecated parameter
617 ([16813](https://github.com/civicrm/civicrm-core/pull/16813))**
619 - **fix typo ([16865](https://github.com/civicrm/civicrm-core/pull/16865))**
621 - **API tests - remove unnecessary check for v4
622 ([16866](https://github.com/civicrm/civicrm-core/pull/16866))**
624 - **[NFC] APIv4 - Add test coverage for expected fields from join
625 ([16920](https://github.com/civicrm/civicrm-core/pull/16920))**
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))**
630 - **[NFC] Use strict comparison where possible
631 ([16896](https://github.com/civicrm/civicrm-core/pull/16896))**
633 - **[NFC] Code formatting
634 ([16906](https://github.com/civicrm/civicrm-core/pull/16906))**
636 - **[NFC] minor form cleanup.
637 ([16905](https://github.com/civicrm/civicrm-core/pull/16905))**
639 - **(NFC) Minor typo: receipients > recipients
640 ([16810](https://github.com/civicrm/civicrm-core/pull/16810))**
642 - **[NFC] Minor code cleanup
643 ([16823](https://github.com/civicrm/civicrm-core/pull/16823))**
645 - **[NFC] Deprecate passing in silly data
646 ([16818](https://github.com/civicrm/civicrm-core/pull/16818))**
648 - **[NFC] Test cleanup
649 ([16817](https://github.com/civicrm/civicrm-core/pull/16817))**
651 - **[NFC] Test cleanup, remove duplicate test
652 ([16755](https://github.com/civicrm/civicrm-core/pull/16755))**
654 - **(NFC) Minor string error : for for > for
655 ([16773](https://github.com/civicrm/civicrm-core/pull/16773))**
657 - **(NFC) Minor typo: contacts(s) -> contact(s)
658 ([16804](https://github.com/civicrm/civicrm-core/pull/16804))**
660 - **(NFC) Query.php / Minor typo: Genrated -> Generated
661 ([16803](https://github.com/civicrm/civicrm-core/pull/16803))**
663 - **[NFC] Fix comments, use single quotes
664 ([16693](https://github.com/civicrm/civicrm-core/pull/16693))**
666 - **[NFC] Mark unused function deprecated, fix some comments & formatting
667 ([16698](https://github.com/civicrm/civicrm-core/pull/16698))**
669 - **[NFC] cleanup in test class
670 ([16764](https://github.com/civicrm/civicrm-core/pull/16764))**
672 - **[NFC] Use helper / api to delete contacts in tests
673 ([16825](https://github.com/civicrm/civicrm-core/pull/16825))**
675 - **[NFC/TEST] Resurrect unfinished test for getRelatedCases()
676 ([16885](https://github.com/civicrm/civicrm-core/pull/16885))**
678 - **[Test] Remove skip that seems no longer required
679 ([16912](https://github.com/civicrm/civicrm-core/pull/16912))**
681 - **Test for PR 13809
682 ([16474](https://github.com/civicrm/civicrm-core/pull/16474))**
684 - **[TEST] Add test for to time processing
685 ([16861](https://github.com/civicrm/civicrm-core/pull/16861))**
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))**
691 - **[REF] Cleanup api3 DashboardContact
692 ([16792](https://github.com/civicrm/civicrm-core/pull/16792))**
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))**
698 - **[REF] Remove calls to fatal()
699 ([16746](https://github.com/civicrm/civicrm-core/pull/16746))**
701 - **[REF] Cleanup uses of CRM_Utils_Array::value related to numbers
702 ([16778](https://github.com/civicrm/civicrm-core/pull/16778))**
704 - **[REF] cleanup financial type form - remove complex inheritence
705 ([16777](https://github.com/civicrm/civicrm-core/pull/16777))**
707 - **[REF] Use ?? operator instead of CRM_Utils_Array::value()
708 ([16710](https://github.com/civicrm/civicrm-core/pull/16710))**
710 - **[REF] dev/core#1116 - Remove unused misnamed activityTypeName variable
711 ([16730](https://github.com/civicrm/civicrm-core/pull/16730))**
713 - **REF Switch to getter on cancelSubscription form
714 ([16740](https://github.com/civicrm/civicrm-core/pull/16740))**
716 - **[REF] Minor code simplification
717 ([16734](https://github.com/civicrm/civicrm-core/pull/16734))**
719 - **[REF] Hopefully fix regularly failing conformance test
720 ([16732](https://github.com/civicrm/civicrm-core/pull/16732))**
722 - **[REF] Use empty() instead of CRM_Utils_Array::value() in inline conditionals
723 ([16729](https://github.com/civicrm/civicrm-core/pull/16729))**
725 - **[REF] Use ?? operator instead of CRM_Utils_Array::value() in return
726 statements ([16719](https://github.com/civicrm/civicrm-core/pull/16719))**
728 - **[REF] CRM_Utils_Array::value() -> empty()
729 ([16704](https://github.com/civicrm/civicrm-core/pull/16704))**
731 - **[REF] Cleanup is_array(CRM_Utils_Array::value()) pattern
732 ([16875](https://github.com/civicrm/civicrm-core/pull/16875))**
734 - **[REF] Remove redundant call to build permissions
735 ([16862](https://github.com/civicrm/civicrm-core/pull/16862))**
737 - **[REF] Replace CRM_Utils_Array::value with ?? in variable assignments
738 ([16768](https://github.com/civicrm/civicrm-core/pull/16768))**
740 - **[REF] Replace coalesce pattern with coalesce operator
741 ([16802](https://github.com/civicrm/civicrm-core/pull/16802))**
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))**
747 - **[REF] move buildQuickForm function to the trait
748 ([16948](https://github.com/civicrm/civicrm-core/pull/16948))**
750 - **[REF] Move properties to Trait
751 ([16940](https://github.com/civicrm/civicrm-core/pull/16940))**
753 - **[REF] Start transitioning EmailCommon class to a trait
754 ([16935](https://github.com/civicrm/civicrm-core/pull/16935))**
756 - **[REF] Remove fatal, fix some code comments
757 ([16928](https://github.com/civicrm/civicrm-core/pull/16928))**
759 - **[REF] extract code to getEmails
760 ([16929](https://github.com/civicrm/civicrm-core/pull/16929))**
762 - **[REF] Minor simplification - do not use variable variables
763 ([16927](https://github.com/civicrm/civicrm-core/pull/16927))**
765 - **[REF] Extract code used to render a pseudoconstant when a table is defined.
766 ([16902](https://github.com/civicrm/civicrm-core/pull/16902))**
768 - **[REF] Move form specific handling back to the relevant form.
769 ([16913](https://github.com/civicrm/civicrm-core/pull/16913))**
771 - **[REF] APIv4 - Preserve order when expanding select wildcards
772 ([16909](https://github.com/civicrm/civicrm-core/pull/16909))**
774 - **[REF] Remove & from before variable
775 ([16897](https://github.com/civicrm/civicrm-core/pull/16897))**
777 - **[REF] Replace \CRM_Utils_Array::value with ??
778 ([16872](https://github.com/civicrm/civicrm-core/pull/16872))**
780 - **[REF] Civi/Api4 - Refactor out 'use CRM_Utils_Array'
781 ([16873](https://github.com/civicrm/civicrm-core/pull/16873))**
783 - **[REF] BAO_Contact - Remove CRM_Utils_Array::value and other unnecessary code
784 ([16874](https://github.com/civicrm/civicrm-core/pull/16874))**
786 - **[REF] APIv4 - Restructure the way get query objects are constucted
787 ([16878](https://github.com/civicrm/civicrm-core/pull/16878))**
789 - **[REF] Fix PCP getPcpDashboardInfo to be tested & use sensible functions
790 ([16790](https://github.com/civicrm/civicrm-core/pull/16790))**
792 - **[REF] Simplify obtuse boolean expressions
793 ([16822](https://github.com/civicrm/civicrm-core/pull/16822))**
795 - **[REF] Replace CRM_Utils_Array::value with ?? in variable assignments
796 ([16820](https://github.com/civicrm/civicrm-core/pull/16820))**
798 - **[REF] cleanups on array operator
799 ([16821](https://github.com/civicrm/civicrm-core/pull/16821))**
801 - **[REF] Simplify obtuse boolean expressions
802 ([16819](https://github.com/civicrm/civicrm-core/pull/16819))**
804 - **[REF] Remove titleHeader var
805 ([16816](https://github.com/civicrm/civicrm-core/pull/16816))**
807 - **[REF] simplify references to civicrm_acl
808 ([16671](https://github.com/civicrm/civicrm-core/pull/16671))**
810 - **[REF] Fix retrieving invoice related settings when doing complete
811 transaction ([17218](https://github.com/civicrm/civicrm-core/pull/17218))**
813 ## <a name="credits"></a>Credits
815 This release was developed by the following code authors:
817 a-n The Artists Information Company - William Mortada; AGH Strategies - Alice
818 Frumin, Andie 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
829 Most authors also reviewed code for this release; in addition, the following
830 reviewers contributed their comments:
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
840 ## <a name="feedback"></a>Feedback
842 These release notes are edited by Alice Frumin and Andie Hunt. If you'd like
843 to provide feedback on them, please log in to https://chat.civicrm.org/civicrm