Merge pull request #18078 from eileenmcnaughton/directp
[civicrm-core.git] / release-notes / 5.28.0.md
1 # CiviCRM 5.28.0
2
3 Released August 5, 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?** | **yes** |
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 ### CiviCRM Core
27
28 - **End of life planning for MySQL server 5.0 - 5.6 (Work Towards
29 [dev/core#1681](https://lab.civicrm.org/dev/core/-/issues/1681):
30 [17558](https://github.com/civicrm/civicrm-core/pull/17558))**
31
32 Block sites from upgrading if on a MySQL version less than 5.6.5.
33
34 - **Feature Request: Ability to enable SSL for database connection. (Work
35 Towards [dev/core#1137](https://lab.civicrm.org/dev/core/-/issues/1137):
36 [298](https://github.com/civicrm/civicrm-packages/pull/298))**
37
38 Makes ssl database connections without client certificates work in php7.
39
40 - **Create new customPre hook
41 ([dev/core#1716](https://lab.civicrm.org/dev/core/-/issues/1716):
42 [17144](https://github.com/civicrm/civicrm-core/pull/17144))**
43
44 Creates a new hook customPre which makes it so one can impact or observe
45 custom data before it is saved.
46
47 - **Investigate php currency library
48 ([dev/translation#48](https://lab.civicrm.org/dev/translation/-/issues/48):
49 [17608](https://github.com/civicrm/civicrm-core/pull/17608))**
50
51 Implements the PHP library [brick/money](https://github.com/brick/money) to
52 better handle currency amounts.
53
54 - **Replace all instances of CRM_Core_Fatal with throw new CRM_Core_Exception
55 (Work Towards [dev/core#560](https://lab.civicrm.org/dev/core/-/issues/560):
56 [17555](https://github.com/civicrm/civicrm-core/pull/17555),
57 [295](https://github.com/civicrm/civicrm-packages/pull/295),
58 [602](https://github.com/civicrm/civicrm-drupal/pull/602),
59 [17550](https://github.com/civicrm/civicrm-core/pull/17550),
60 [17534](https://github.com/civicrm/civicrm-core/pull/17534),
61 [17541](https://github.com/civicrm/civicrm-core/pull/17541),
62 [17545](https://github.com/civicrm/civicrm-core/pull/17545) and
63 [17539](https://github.com/civicrm/civicrm-core/pull/17539))**
64
65 Work towards throwing exceptions instead of fatal errors.
66
67 - **V4 activity api has no default for activity_date_time
68 ([dev/core#1782](https://lab.civicrm.org/dev/core/-/issues/1782):
69 [17450](https://github.com/civicrm/civicrm-core/pull/17450))**
70
71 Sets the default for `activity_date_time` and `created_date` as the current
72 date when using the APIv4 Activity.
73
74 - **Update guzzle to d8 latest
75 ([dev/core#1803](https://lab.civicrm.org/dev/core/-/issues/1803):
76 [17551](https://github.com/civicrm/civicrm-core/pull/17551))**
77
78 This updates guzzle to version 6.5.4, civicrm/civicrm-cxn-rpc to "version"
79 "v0.19.01.00", guzzlehttp/psr7 to version 1.6.1 and psr/log to version 1.1.3
80
81 - **APIv4 - Improve row_count to work with HAVING, GROUP BY, and SELECT
82 ([17704](https://github.com/civicrm/civicrm-core/pull/17704))**
83
84 This changes the meaning of $result->count(), to give a total count of
85 filtered items, ignoring limit and offset.
86
87 - **APIv4 - Add more SQL functions
88 ([17692](https://github.com/civicrm/civicrm-core/pull/17692))**
89
90 Adds support for additional SQL functions in APIv4. Also categorizes them and
91 adds translated titles for the new Search Builder.
92
93 - **APIv4 - Add titles and icons to entities
94 ([17527](https://github.com/civicrm/civicrm-core/pull/17527) and
95 [17685](https://github.com/civicrm/civicrm-core/pull/17685))**
96
97 Adds titles and icons to DAO entities and expose them to APIv4 Entity::get and
98 adds meta-metadata.
99
100 - **APIv4 Explorer - UI support for join ON clause
101 ([17682](https://github.com/civicrm/civicrm-core/pull/17682))**
102
103 Improves the APIv4 explorer to give selectable clauses when adding a JOIN.
104
105 - **Add permission metadata to contact is_deleted field
106 ([17721](https://github.com/civicrm/civicrm-core/pull/17721))**
107
108 Improves the contact schema metadata.
109
110 - **API/DAO Metadata - Retain versioning metadata for possible usage in
111 runtime+tooling
112 ([17735](https://github.com/civicrm/civicrm-core/pull/17735))**
113
114 Adds metadata to indicate when fields are created.
115
116 - **Connect to database using SET NAMES utf8mb4
117 ([17716](https://github.com/civicrm/civicrm-core/pull/17716))**
118
119 This change makes it so one can use utf8mb4 characters. However, databases
120 that do not support utf8mb4 will not be affected.
121
122 - **Remove slow join from activity search
123 ([17250](https://github.com/civicrm/civicrm-core/pull/17250))**
124
125 Improves performance of the activity search.
126
127 - **Add icons to standalone contact tasks
128 ([17667](https://github.com/civicrm/civicrm-core/pull/17667))**
129
130 This adds icon data to contact tasks that appear in the new search builder
131 extension.
132
133 - **Add icons to multi-valued custom groups and display on contact tab
134 ([17531](https://github.com/civicrm/civicrm-core/pull/17531))**
135
136 Custom data sets that appear as tabs can now have configurable icons to
137 display on the tab.
138
139 - **Add serialize metadata to domain.locales field
140 ([17651](https://github.com/civicrm/civicrm-core/pull/17651))**
141
142 Adds metadata to help APIv4 serialize/unserialize the domain.locales
143 field correctly.
144
145 - **Add smarty error event
146 ([16918](https://github.com/civicrm/civicrm-core/pull/16918) and
147 [292](https://github.com/civicrm/civicrm-packages/pull/292))**
148
149 Improves debugging errors in smarty templates.
150
151 - **Allow HEAD requests to generate a form key
152 ([17321](https://github.com/civicrm/civicrm-core/pull/17321))**
153
154 Avoids generating crashes (500 errors) when bots check links.
155
156 - **Include a new SqlParallel queue type that enables multiple queue runners to
157 process in parallel
158 ([15422](https://github.com/civicrm/civicrm-core/pull/15422))**
159
160 Adds a new Sql queue type which will allow multiple runners to fetch the next
161 available job from a queue and run in parallel.
162
163 - **Allow adding datepicker to metadata based settings pages
164 ([16610](https://github.com/civicrm/civicrm-core/pull/16610))**
165
166 Makes it so that datepicker can be added to metadata based settings pages by
167 specifying html_Type='datepicker' in settings metadata.
168
169 ### CiviContribute
170
171 - **Add payment processor to details on list of recurring contributions
172 ([17179](https://github.com/civicrm/civicrm-core/pull/17179))**
173
174 The list of recurring contributions now has a column showing the payment
175 processor.
176
177 - **Fix all core processors to throw exceptions and not rely on the
178 CRM_Core_Payment to convert errors to exceptions
179 ([dev/financial#131](https://lab.civicrm.org/dev/financial/-/issues/131):
180 [17565](https://github.com/civicrm/civicrm-core/pull/17565),
181 [17559](https://github.com/civicrm/civicrm-core/pull/17559),
182 [17542](https://github.com/civicrm/civicrm-core/pull/17542),
183 [17502](https://github.com/civicrm/civicrm-core/pull/17502),
184 [17597](https://github.com/civicrm/civicrm-core/pull/17597),
185 [17592](https://github.com/civicrm/civicrm-core/pull/17592) and
186 [17596](https://github.com/civicrm/civicrm-core/pull/17596))**
187
188 Makes it so that core payment processors fail gracefully more often.
189
190 - **Add selfService flag to cancelSubscription getText so we can display
191 different text for each case
192 ([17687](https://github.com/civicrm/civicrm-core/pull/17687))**
193
194 Makes it so payment processor developers can identify the different contexts
195 someone may be canceling from and display appropriate messaging.
196
197 - **Price Field Form: save the fid for the postProcess hook
198 ([17639](https://github.com/civicrm/civicrm-core/pull/17639))**
199
200 Improves `postProcess` hook for Price Field Form by making the field id
201 available.
202
203 - **Improve error handling on IPN
204 ([18062](https://github.com/civicrm/civicrm-core/pull/18062))**
205
206 The error message and backtrace from a failed PayPal Website Payments Standard
207 instant payment notification (IPN) are now logged.
208
209 ### CiviMember
210
211 - **Display start/end adjustment on membership status page.
212 ([dev/core#1809](https://lab.civicrm.org/dev/core/-/issues/1809):
213 [17571](https://github.com/civicrm/civicrm-core/pull/17571))**
214
215 Improves the Membership Status administration page by adding columns for the
216 start/end adjustment.
217
218 ### WordPress Integration
219
220 - **Provide concrete details about civicrm.files
221 ([18011](https://github.com/civicrm/civicrm-core/pull/18011) follows on
222 [dev/wordpress#66](https://lab.civicrm.org/dev/wordpress/-/issues/66), see
223 also [17868](https://github.com/civicrm/civicrm-core/pull/17868))**
224
225 A message will appear after an upgrade to 5.28.0 or later specifying the
226 calculated and expected file upload locations.
227
228 Changes appearing in 5.27 have been reverted but will be reapplied in 5.29
229 after more notice is provided.
230
231 ## <a name="bugs"></a>Bugs resolved
232
233 ### Core CiviCRM
234
235 - **Contact image is broken
236 ([dev/wordpress#62](https://lab.civicrm.org/dev/wordpress/-/issues/62):
237 [17853](https://github.com/civicrm/civicrm-core/pull/17853))**
238
239 This resolves a problem on sites managed with Git where the `db.json` file
240 would be missed.
241
242 - **Evaluate if any indexed fields are unused (Work Towards
243 [dev/core#1634](https://lab.civicrm.org/dev/core/-/issues/1634):
244 [17686](https://github.com/civicrm/civicrm-core/pull/17686))**
245
246 Remove database index on `medium_id` from `civicrm_activity`.
247
248 - **[Activity] Default priority value when add Activity
249 ([dev/core#1801](https://lab.civicrm.org/dev/core/-/issues/1801):
250 [17557](https://github.com/civicrm/civicrm-core/pull/17557))**
251
252 Ensures when creating a new activity the priority field defaults correctly for
253 sites not in english.
254
255 - **The multi-lingual multi-domain problem
256 ([dev/core#1852](https://lab.civicrm.org/dev/core/-/issues/1852):
257 [17738](https://github.com/civicrm/civicrm-core/pull/17738) and
258 [17733](https://github.com/civicrm/civicrm-core/pull/17733))**
259
260 Ensures that the list of languages civicrm_domain.locales is the same for all
261 domains in a multi-domain set up.
262
263 - **APIv4 - Skip empty leaves in WHERE clause
264 ([17576](https://github.com/civicrm/civicrm-core/pull/17576))**
265
266 Fixes a bug in search builder where APIv4 gives a sql error while building
267 your where clause.
268
269 - **Offset is not respected in Date Preferences
270 ([dev/core#1847](https://lab.civicrm.org/dev/core/-/issues/1847) and
271 [dev/core#1874](https://lab.civicrm.org/dev/core/-/issues/1874):
272 [17762](https://github.com/civicrm/civicrm-core/pull/17762) and
273 [17836](https://github.com/civicrm/civicrm-core/pull/17836))**
274
275 - **Fix CRM_Utils_JS::dedupeClosures to ignore comments
276 ([17717](https://github.com/civicrm/civicrm-core/pull/17717))**
277
278 Ensures comments do not interfere with deduping.
279
280 - **Use PHPUnit7 as the primary test runner for PHP versions >= 7.1 when using
281 the phpunit script
282 ([17615](https://github.com/civicrm/civicrm-core/pull/17615))**
283
284 Updates PHP unit tests to use PHPUnit7 when the PHP Unit version is 7.1 or
285 greater.
286
287 - **Fix isMultilingual to use static caching and respect current domain
288 ([17646](https://github.com/civicrm/civicrm-core/pull/17646))**
289
290 Improves the efficiency and accuracy of the `CRM_Core_I18n::isMultilingual`
291 function, preventing a large number of duplicate queries on every request.
292
293 - **Update has_separator field in civicrm_navigation
294 ([17579](https://github.com/civicrm/civicrm-core/pull/17579))**
295
296 This field was incorrectly marked as a boolean; it's actually an int with an
297 option list.
298
299 - **Payment Propertybag remove warning
300 ([17506](https://github.com/civicrm/civicrm-core/pull/17506))**
301
302 - **Fix duplicate upgrade function
303 ([17582](https://github.com/civicrm/civicrm-core/pull/17582))**
304
305 Fixes a fatal error on upgrade caused by a merge conflict.
306
307 - **CRM_Case_XMLProcessor::allActivityTypes() doesn't do caching right
308 ([dev/core#1433](https://lab.civicrm.org/dev/core/-/issues/1433):
309 [17627](https://github.com/civicrm/civicrm-core/pull/17627),
310 [17616](https://github.com/civicrm/civicrm-core/pull/17616) and
311 [17614](https://github.com/civicrm/civicrm-core/pull/17614))**
312
313 - **CustomValue.GetTree API Does Not Return Display Value for Money Select/Radio
314 Custom field ([dev/core#1566](https://lab.civicrm.org/dev/core/-/issues/1566):
315 [17008](https://github.com/civicrm/civicrm-core/pull/17008))**
316
317 - **whom_url missing contact ID parameter in detailed logging report
318 ([dev/core#1749](https://lab.civicrm.org/dev/core/-/issues/1749):
319 [17440](https://github.com/civicrm/civicrm-core/pull/17440))**
320
321 - **Regression : File fields export results in DB error
322 ([dev/core#1787](https://lab.civicrm.org/dev/core/-/issues/1787):
323 [17578](https://github.com/civicrm/civicrm-core/pull/17578))**
324
325 - **Relative date filter - End of yesterday not working properly
326 ([dev/core#1798](https://lab.civicrm.org/dev/core/-/issues/1798):
327 [17512](https://github.com/civicrm/civicrm-core/pull/17512))**
328
329 - **Editing a custom field choice label changes the `name` if you do it from the
330 custom field admin screens
331 ([dev/core#1817](https://lab.civicrm.org/dev/core/-/issues/1817):
332 [17681](https://github.com/civicrm/civicrm-core/pull/17681))**
333
334 - **Custom Date field with format=yy displays calendar icon that doesn't work
335 ([dev/core#1829](https://lab.civicrm.org/dev/core/-/issues/1829):
336 [17664](https://github.com/civicrm/civicrm-core/pull/17664))**
337
338 - **Unable to install 5.28 on Maria DB 10.3 on Ubuntu
339 ([dev/core#1860](https://lab.civicrm.org/dev/core/-/issues/1860):
340 [17772](https://github.com/civicrm/civicrm-core/pull/17772))**
341
342 - **APIv4 - filter getActions results based on user permissions
343 ([17540](https://github.com/civicrm/civicrm-core/pull/17540))**
344
345 - **Pre-upgrade message for php-intl shows twice
346 ([17748](https://github.com/civicrm/civicrm-core/pull/17748))**
347
348 - **Fix saving of State/Province Multi-select values
349 ([17737](https://github.com/civicrm/civicrm-core/pull/17737))**
350
351 - **[regression] Attempting to access Multi-Record Custom Field import results
352 in crash ([dev/core#1841](https://lab.civicrm.org/dev/core/-/issues/1841):
353 [17697](https://github.com/civicrm/civicrm-core/pull/17697))**
354
355 - **Use psr-4 instead of psr-0 in Civi directory
356 ([17690](https://github.com/civicrm/civicrm-core/pull/17690))**
357
358 - **Sort options without relying on unavailable buildOptions param
359 ([17621](https://github.com/civicrm/civicrm-core/pull/17621))**
360
361 - **Throw exception if id not passed into discard
362 ([17666](https://github.com/civicrm/civicrm-core/pull/17666))**
363
364 - **Fix validation of select2 fields in "On behalf of Organisation" block
365 ([17672](https://github.com/civicrm/civicrm-core/pull/17672))**
366
367 - **Pass required attribute for quickform fields through to form
368 ([16488](https://github.com/civicrm/civicrm-core/pull/16488) and
369 [17929](https://github.com/civicrm/civicrm-core/pull/17929) related to
370 [dev/core#1903](https://lab.civicrm.org/dev/core/-/issues/1903))**
371
372 - **CRM_Core_I18n::setLocale() - Fix bug with repeated usage
373 ([17374](https://github.com/civicrm/civicrm-core/pull/17374))**
374
375 - **Fix retrieving MySQL version for checking as part of install requirements
376 ([17593](https://github.com/civicrm/civicrm-core/pull/17593))**
377
378 - **Set ContactType.name as required in the schema.
379 ([17548](https://github.com/civicrm/civicrm-core/pull/17548),
380 [17570](https://github.com/civicrm/civicrm-core/pull/17570), and
381 [18070](https://github.com/civicrm/civicrm-core/pull/18070) related to
382 [dev/core#1927](https://lab.civicrm.org/dev/core/-/issues/1927))**
383
384 - **Fix "Undefined variable: entryFound" notice on Bookkeeping report
385 ([17554](https://github.com/civicrm/civicrm-core/pull/17554))**
386
387 - **Zip code range search only supports numeric zip codes
388 ([17523](https://github.com/civicrm/civicrm-core/pull/17523))**
389
390 Rather than causing a database error, this displays an error message when
391 attempting to search a postal code range using non-numeric postal codes.
392
393 - **Remove isThrowException from CRM_Utils_Type::validate() signature
394 ([17546](https://github.com/civicrm/civicrm-core/pull/17546))**
395
396 - **codeVersion not displayed in system status check error message about db
397 version vs codeversion
398 ([dev/core#1882](https://lab.civicrm.org/dev/core/-/issues/1882):
399 [17854](https://github.com/civicrm/civicrm-core/pull/17854))**
400
401 ### CiviCase
402
403 - **Noncompliant query leads to (semi-)random sorting and failing unit test
404 CRM_Case_BAO_CaseTest::testSortByCaseContact
405 ([dev/core#1844](https://lab.civicrm.org/dev/core/-/issues/1844):
406 [17708](https://github.com/civicrm/civicrm-core/pull/17708))**
407
408 ### CiviContribute
409
410 - **Payment instrument ID is not required at processorform level
411 ([17510](https://github.com/civicrm/civicrm-core/pull/17510))**
412
413 Do not throw warning if payment instrument is not sent.
414
415 - **Bank fee has wrong date on import in civicrm_financial_item.transaction_date
416 incorrected uses import date rather than payment date on
417 ([dev/core#1776](https://lab.civicrm.org/dev/core/-/issues/1776):
418 [17389](https://github.com/civicrm/civicrm-core/pull/17389))**
419
420 Ensures the `civicrm_financial_item.transaction_date` gets recorded correctly
421 when importing a transaction with a bank fee.
422
423 - **Payment.create should not set contribution date to today
424 ([17688](https://github.com/civicrm/civicrm-core/pull/17688))**
425
426 - **Fix PHP notice when we don't have credit card params
427 ([16514](https://github.com/civicrm/civicrm-core/pull/16514) and
428 [17584](https://github.com/civicrm/civicrm-core/pull/17584))**
429
430 - **Improve PropertyBag handling of offsetGet and custom properties; add more
431 tests ([17588](https://github.com/civicrm/civicrm-core/pull/17588) and
432 [17654](https://github.com/civicrm/civicrm-core/pull/17654))**
433
434 - **Graphs on Contribution Summary report replace final row with grand total
435 value ([dev/report#40](https://lab.civicrm.org/dev/report/-/issues/40):
436 [17412](https://github.com/civicrm/civicrm-core/pull/17412))**
437
438 ### CiviEvent
439
440 - **Event participant_listing_id field defaults to 0 instead of Null
441 ([dev/core#1833](https://lab.civicrm.org/dev/core/-/issues/1833):
442 [17677](https://github.com/civicrm/civicrm-core/pull/17677))**
443
444 - **Multiple line item shown on view contribution if participant is transferred
445 to another contact.
446 ([dev/core#890](https://lab.civicrm.org/dev/core/-/issues/890):
447 [16956](https://github.com/civicrm/civicrm-core/pull/16956))**
448
449 ### CiviGrant
450
451 - **Bug in Grant statistics report
452 ([17640](https://github.com/civicrm/civicrm-core/pull/17640))**
453
454 ### CiviSMS
455
456 - **Can't change SMS recipient on non-bulk SMS
457 ([dev/core#1840](https://lab.civicrm.org/dev/core/-/issues/1840):
458 [17691](https://github.com/civicrm/civicrm-core/pull/17691))**
459
460 ### Drupal Integration
461
462 - **Error: Class 'CRM_Upgrade_Incremental_General' not found in
463 Civi\Install\Requirements->checkMysqlVersion()
464 ([dev/drupal#131](https://lab.civicrm.org/dev/drupal/-/issues/131):
465 [18066](https://github.com/civicrm/civicrm-core/pull/18066))**
466
467 ### Joomla Integration
468
469 - **Ensure that when normal routing trackable urls and opens in Joomla go to the
470 frontend not administrator site
471 ([17760](https://github.com/civicrm/civicrm-core/pull/17760))**
472
473 ### WordPress Integration
474
475 - **Remove `/` from the beginning and end of query string
476 ([207](https://github.com/civicrm/civicrm-wordpress/pull/207))**
477
478 Fixes a 'You do not have permission to access this content.' error resulting
479 from an extra '/' in the `q=` string in the url.
480
481 - **Base page fails to recognise Page Templates in subdirectories.
482 ([dev/wordpress#58](https://lab.civicrm.org/dev/wordpress/-/issues/58):
483 [204](https://github.com/civicrm/civicrm-wordpress/pull/204))**
484
485 Ensures that the CiviCRM base page is correctly identified when it does not
486 reside in the theme root directory.
487
488 - **undefined offset bug in BAO/FinancialAccount.php
489 ([dev/wordpress#61](https://lab.civicrm.org/dev/wordpress/-/issues/61):
490 [17701](https://github.com/civicrm/civicrm-core/pull/17701) and
491 [17689](https://github.com/civicrm/civicrm-core/pull/17689))**
492
493 Ensures that the financial account is set correctly even when the name does
494 not match the label.
495
496 - **Prevent session from starting during WordPress pseudo cron procedures
497 ([dev/core#1889](https://lab.civicrm.org/dev/core/-/issues/1889):
498 [17890](https://github.com/civicrm/civicrm-core/pull/17890) and
499 [210](https://github.com/civicrm/civicrm-wordpress/pull/210))**
500
501 ## <a name="misc"></a>Miscellany
502
503 - **Support passing old method name into deprecatedFunctionWarning
504 ([17552](https://github.com/civicrm/civicrm-core/pull/17552))**
505
506 - **Add CRM_Core_Form::isFormInViewMode and CRM_Core_Form::isFormInEditMode
507 ([17637](https://github.com/civicrm/civicrm-core/pull/17637))**
508
509 - **CRM_Utils_JS - also dedupe 'use strict' directive when deduping closures
510 ([17711](https://github.com/civicrm/civicrm-core/pull/17711))**
511
512 - **Add isBackOffice, isPayLater, getPaymentMode helpers to
513 frontendpaymentformtrait
514 ([17511](https://github.com/civicrm/civicrm-core/pull/17511))**
515
516 - **Fix issue $this
517 ([589](https://github.com/civicrm/civicrm-drupal/pull/589))**
518
519 - **Fix validateAll to no longer support unused abort param
520 ([17544](https://github.com/civicrm/civicrm-core/pull/17544))**
521
522 - **Remove deprecated billingID from baseIPN
523 ([17525](https://github.com/civicrm/civicrm-core/pull/17525))**
524
525 - **Add EntityFormTrait to pricefieldForm - stdised getEntityId()
526 ([17516](https://github.com/civicrm/civicrm-core/pull/17516))**
527
528 - **Update contributor-key.yml
529 ([17553](https://github.com/civicrm/civicrm-core/pull/17553))**
530
531 - **Export fix ([17644](https://github.com/civicrm/civicrm-core/pull/17644))**
532
533 - **Upgrade HTML Purifier to v4.12.0 to support for PHP7.4
534 ([297](https://github.com/civicrm/civicrm-packages/pull/297))**
535
536 - **Temporary tables should follow consistent naming convention
537 ([dev/core#183](https://lab.civicrm.org/dev/core/-/issues/183):
538 [15796](https://github.com/civicrm/civicrm-core/pull/15796))**
539
540 - **Remove unreachable lines
541 ([17563](https://github.com/civicrm/civicrm-core/pull/17563))**
542
543 - **EventInfo template cleanup
544 ([17581](https://github.com/civicrm/civicrm-core/pull/17581))**
545
546 - **Misspelled word
547 ([17652](https://github.com/civicrm/civicrm-core/pull/17652))**
548
549 - **Remove a usage of deprecated funtion get_magic_quotes_gpc and also switch out
550 {} for [] whne acecssing string or array offsets
551 ([296](https://github.com/civicrm/civicrm-packages/pull/296))**
552
553 - **Remove unused deprecated class
554 ([17535](https://github.com/civicrm/civicrm-core/pull/17535))**
555
556 - **Remove obsolete function formatWikiURL
557 ([17726](https://github.com/civicrm/civicrm-core/pull/17726))**
558
559 - **[REF] Ship Flexmailer extension with Core
560 ([17669](https://github.com/civicrm/civicrm-core/pull/17669))**
561
562 - **[Ref] Simplify the replacing of the email with the email from the url
563 ([17491](https://github.com/civicrm/civicrm-core/pull/17491))**
564
565 - **[REF] Replace incorrect usages of array_key_exists when the variable is not
566 an array with property_exists and also fix the parameter order for an implode
567 statement ([17573](https://github.com/civicrm/civicrm-core/pull/17573))**
568
569 - **[Ref] Convert Authorize.net to use Guzzle for update subscription class, add
570 test ([17585](https://github.com/civicrm/civicrm-core/pull/17585))**
571
572 - **[REF] Using {} to access string or array offsets has been deprecated in
573 PHP7.4 ([17574](https://github.com/civicrm/civicrm-core/pull/17574))**
574
575 - **[Ref] Mark unused date functions as deprecated
576 ([17487](https://github.com/civicrm/civicrm-core/pull/17487))**
577
578 - **[REF] Using ternary operation without nesting is deprecated and also using
579 methods and properly instanciate the CiviCase Info object in test
580 ([17575](https://github.com/civicrm/civicrm-core/pull/17575))**
581
582 - **[Ref] Convert Authorize.net doDirectPayment to use guzzle & add test
583 ([17501](https://github.com/civicrm/civicrm-core/pull/17501))**
584
585 - **[REF] Replace the deprecated system_rebuild_module_data function with
586 equivilant extension.list.module service function calls to be Drupal 9
587 compatiable ([17515](https://github.com/civicrm/civicrm-core/pull/17515))**
588
589 - **[Ref] Remove never reachable lines.
590 ([17556](https://github.com/civicrm/civicrm-core/pull/17556))**
591
592 - **[Ref] Remove another instance of fatal()
593 ([17549](https://github.com/civicrm/civicrm-core/pull/17549))**
594
595 - **[Ref] Readability extraction in Dummy class
596 ([17543](https://github.com/civicrm/civicrm-core/pull/17543))**
597
598 - **[Ref] Throw exceptions from Authorize.net rather than return errors
599 ([17500](https://github.com/civicrm/civicrm-core/pull/17500))**
600
601 - **[REF] Replace some instances of fatal with thrown exceptions.
602 ([17533](https://github.com/civicrm/civicrm-core/pull/17533))**
603
604 - **[Ref] Remove calls to, and deprecate, unhandled function
605 ([17499](https://github.com/civicrm/civicrm-core/pull/17499))**
606
607 - **[REF] Remove handling for 2 fields not on the form
608 ([17504](https://github.com/civicrm/civicrm-core/pull/17504))**
609
610 - **[Ref] Remove some instances of fatal in BAO classes
611 ([17536](https://github.com/civicrm/civicrm-core/pull/17536))**
612
613 - **REF Access the method not the property directly to check if a payment
614 processor supports recurring
615 ([17602](https://github.com/civicrm/civicrm-core/pull/17602))**
616
617 - **[REF] Ensure that our custom error handler is called when jquery validates
618 and expand any collapsed accordions that are hiding required fields that
619 haven't been filled in
620 ([17673](https://github.com/civicrm/civicrm-core/pull/17673))**
621
622 - **[REF] Consolidate code in processMembership
623 ([17611](https://github.com/civicrm/civicrm-core/pull/17611))**
624
625 - **[REF] Cleanup function for retrieving contact types.
626 ([17676](https://github.com/civicrm/civicrm-core/pull/17676))**
627
628 - **[REF] Fix javascript syntax error
629 ([17678](https://github.com/civicrm/civicrm-core/pull/17678))**
630
631 - **[REF] Fix jquery error message display on select2 field validation
632 ([17671](https://github.com/civicrm/civicrm-core/pull/17671))**
633
634 - **[REF] Fix allowing users to clear values for raido custom fields when not
635 required ([17670](https://github.com/civicrm/civicrm-core/pull/17670))**
636
637 - **[REF] Extract getTestTrxnID
638 ([17642](https://github.com/civicrm/civicrm-core/pull/17642))**
639
640 - **[REF] Fix Compatability issue with flexmailer caused by the PHP7.4 fix
641 ([17660](https://github.com/civicrm/civicrm-core/pull/17660))**
642
643 - **[REF] Ensure that the Manual Payment Processor sets the _paymentProcessor
644 variable like other Processors to fix issues in PHP7.4 and UnitTests
645 ([17648](https://github.com/civicrm/civicrm-core/pull/17648))**
646
647 - **[REF] Fix PHP7.4 Test fails when we are accessing array keys when the value
648 is not an array
649 ([17649](https://github.com/civicrm/civicrm-core/pull/17649))**
650
651 - **[REF] Fix parts of code where curly brackets were being used for array or
652 string access which is deprecated in PHP7.4
653 ([17647](https://github.com/civicrm/civicrm-core/pull/17647))**
654
655 - **[REF] Fix issue with using array access tools on NULL values
656 ([17600](https://github.com/civicrm/civicrm-core/pull/17600))**
657
658 - **[REF] Replace incorrect usage of array_key_exists with property_exists in
659 Group BAO Class
660 ([17604](https://github.com/civicrm/civicrm-core/pull/17604))**
661
662 - **[REF] Add test for renewing old expired membership via form
663 ([17564](https://github.com/civicrm/civicrm-core/pull/17564))**
664
665 - **[REF] Update packages to work with PHP7.4
666 ([17598](https://github.com/civicrm/civicrm-core/pull/17598))**
667
668 - **[REF] Fix another couple of uses of array_key_exists when the variable being
669 checked is an object
670 ([17601](https://github.com/civicrm/civicrm-core/pull/17601))**
671
672 - **[REF] Remove deprecated methods of booting drupal container and getting
673 drupal timezone information
674 ([17522](https://github.com/civicrm/civicrm-core/pull/17522))**
675
676 - **[REF] Fix some additional issues where curly braces were being used to
677 access string or array offsets
678 ([17599](https://github.com/civicrm/civicrm-core/pull/17599))**
679
680 - **[NFC] Update existing APIv3 MembershipType Tests to also test against APIv4
681 as appropriate ([17528](https://github.com/civicrm/civicrm-core/pull/17528))**
682
683 - **NFC cleanup docblocks in CRM_Utils_JS
684 ([17714](https://github.com/civicrm/civicrm-core/pull/17714))**
685
686 - **[NFC] Update flexmailer to be PHP7.4 compatible
687 ([17779](https://github.com/civicrm/civicrm-core/pull/17779))**
688
689 - **[NFC] Include flexmailer in distmaker
690 ([17768](https://github.com/civicrm/civicrm-core/pull/17768))**
691
692 - **[NFC] Fix some outdated wiki links
693 ([17739](https://github.com/civicrm/civicrm-core/pull/17739))**
694
695 - **[NFC] Fix contributor key for Lighthouse Consulting and Design
696 ([17727](https://github.com/civicrm/civicrm-core/pull/17727))**
697
698 - **[NFC] Update PHPUnit Configuration file to be compatible with PHPUnit7
699 ([605](https://github.com/civicrm/civicrm-drupal/pull/605))**
700
701 - **[NFC] Fix Unit test failure on MySQL 8 due to mysql ordering issue
702 ([17674](https://github.com/civicrm/civicrm-core/pull/17674))**
703
704 - **[NFC] Fix tests in preparation for phpunit7
705 ([17661](https://github.com/civicrm/civicrm-core/pull/17661))**
706
707 - **[NFC] Remove instances where html is passed to crmMoney
708 ([17612](https://github.com/civicrm/civicrm-core/pull/17612))**
709
710 - **[NFC] Add assertions to existing test to lock in current behaviour
711 ([17605](https://github.com/civicrm/civicrm-core/pull/17605))**
712
713 - **[NFC] Update mocking to use getMockBuilder instead instead of createMock
714 ([17606](https://github.com/civicrm/civicrm-core/pull/17606))**
715
716 - **NFC Formatting cleanup on contribution/recur templates
717 ([17603](https://github.com/civicrm/civicrm-core/pull/17603))**
718
719 - **[NFC] Minor code cleanup
720 ([17566](https://github.com/civicrm/civicrm-core/pull/17566))**
721
722 - **[NFC] Update PHPUnit configuration to be compatible with PHPUnit7
723 ([120](https://github.com/civicrm/civicrm-backdrop/pull/120))**
724
725 - **[NFC] Update PHPUnit configuration to be compatible with PHPUnit7
726 ([206](https://github.com/civicrm/civicrm-wordpress/pull/206))**
727
728 - **MembershipRenewalTest - Fix failure
729 ([17830](https://github.com/civicrm/civicrm-core/pull/17830))**
730
731 - **[REF] Fix regression where adding any date based field onto a profile
732 triggers an error date preferences not configured when previewing the profile
733 ([17973](https://github.com/civicrm/civicrm-core/pull/17973))**
734
735 - **[NFC] Port some recent test fixes from master to 5.28
736 ([18053](https://github.com/civicrm/civicrm-core/pull/18053))**
737
738 ## <a name="credits"></a>Credits
739
740 This release was developed by the following code authors:
741
742 AGH Strategies - Alice Frumin, Andrew Hunt; British Humanist Association -
743 Andrew West; Christian Wach; Circle Interactive - Pradeep Nayak; CiviCRM -
744 Coleman Watts, Tim Otten; CiviDesk - Yashodha Chaku; CompuCorp - Ivan; Coop
745 SymbioTIC - Mathieu Lutfy, Samuel Vanhove; Dave D; Dietermartens; ES-Progress -
746 Sandor Semsey; Flinders University of South Australia - Tom Anderson; Fuzion -
747 Jitendra Purohit; JMA Consulting - Seamus Lee; Lighthouse Consulting and
748 Design- Brian Shaughnessy; Marcin Lewandowski; Megaphone Technology Consulting -
749 Jon Goldberg; MJW Consulting - Matthew Wire; Tadpole Collective - Kevin
750 Cristiano; Wikimedia Foundation - Eileen McNaughton
751
752 Most authors also reviewed code for this release; in addition, the following
753 reviewers contributed their comments:
754
755 a-n The Artists Information Company - William Mortada; Agileware - Francis
756 Whittle, Justin Freeman; Andrew Thompson; Artful Robot - Rich Lott; Betty
757 Dolfing; Blackfly Solutions - Alan Dixon; CiviCoop - Jaap Jansma; Fuzion - Luke
758 Stewart, Peter Davis; JMA Consulting - Joe Murray; MJCO - Mikey O'Toole; Semper
759 IT - Karin Gerritsen; Squiffle Consulting - Aidan Saunders; Third Sector Design:
760 Eriol Fox; Timbsoft Technologies - Tunbola Ogunwande
761
762 ## <a name="feedback"></a>Feedback
763
764 These release notes are edited by Alice Frumin and Andrew Hunt. If you'd like
765 to provide feedback on them, please log in to https://chat.civicrm.org/civicrm
766 and contact `@agh1`.