Adding LibreJS back after bundles refactor upstream
[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 - **Ability to enable SSL for database connection. (Work Towards
35 [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 PHP 7.
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 - **APIv4 - Activity 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 [17500](https://github.com/civicrm/civicrm-core/pull/17500),
185 [17597](https://github.com/civicrm/civicrm-core/pull/17597),
186 [17592](https://github.com/civicrm/civicrm-core/pull/17592) and
187 [17596](https://github.com/civicrm/civicrm-core/pull/17596))**
188
189 Makes it so that core payment processors fail gracefully more often.
190
191 - **Add selfService flag to cancelSubscription getText so we can display
192 different text for each case
193 ([17687](https://github.com/civicrm/civicrm-core/pull/17687))**
194
195 Makes it so payment processor developers can identify the different contexts
196 someone may be canceling from and display appropriate messaging.
197
198 - **Price Field Form - Save the fid for the postProcess hook
199 ([17639](https://github.com/civicrm/civicrm-core/pull/17639))**
200
201 Improves `postProcess` hook for Price Field Form by making the field id
202 available.
203
204 - **Improve error handling on IPN
205 ([18062](https://github.com/civicrm/civicrm-core/pull/18062))**
206
207 The error message and backtrace from a failed PayPal Website Payments Standard
208 instant payment notification (IPN) are now logged.
209
210 ### CiviMember
211
212 - **Display start/end adjustment on membership status page.
213 ([dev/core#1809](https://lab.civicrm.org/dev/core/-/issues/1809):
214 [17571](https://github.com/civicrm/civicrm-core/pull/17571))**
215
216 Improves the Membership Status administration page by adding columns for the
217 start/end adjustment.
218
219 ### WordPress Integration
220
221 - **Provide concrete details about civicrm.files
222 ([18011](https://github.com/civicrm/civicrm-core/pull/18011) follows on
223 [dev/wordpress#66](https://lab.civicrm.org/dev/wordpress/-/issues/66), see
224 also [17868](https://github.com/civicrm/civicrm-core/pull/17868))**
225
226 A message will appear after an upgrade to 5.28.0 or later specifying the
227 calculated and expected file upload locations.
228
229 Changes appearing in 5.27 have been reverted but will be reapplied in 5.29
230 after more notice is provided.
231
232 ## <a name="bugs"></a>Bugs resolved
233
234 ### Core CiviCRM
235
236 - **Contact image is broken
237 ([dev/wordpress#62](https://lab.civicrm.org/dev/wordpress/-/issues/62):
238 [17853](https://github.com/civicrm/civicrm-core/pull/17853))**
239
240 This resolves a problem on sites managed with Git where the `db.json` file
241 would be missed.
242
243 - **Evaluate if any indexed fields are unused (Work Towards
244 [dev/core#1634](https://lab.civicrm.org/dev/core/-/issues/1634):
245 [17686](https://github.com/civicrm/civicrm-core/pull/17686))**
246
247 Remove database index on `medium_id` from `civicrm_activity`.
248
249 - **Activity - Default priority value when adding an activity
250 ([dev/core#1801](https://lab.civicrm.org/dev/core/-/issues/1801):
251 [17557](https://github.com/civicrm/civicrm-core/pull/17557))**
252
253 Ensures when creating a new activity the priority field defaults correctly for
254 sites not in english.
255
256 - **The multi-lingual multi-domain problem
257 ([dev/core#1852](https://lab.civicrm.org/dev/core/-/issues/1852):
258 [17738](https://github.com/civicrm/civicrm-core/pull/17738) and
259 [17733](https://github.com/civicrm/civicrm-core/pull/17733))**
260
261 Ensures that the list of languages civicrm_domain.locales is the same for all
262 domains in a multi-domain set up.
263
264 - **APIv4 - Skip empty leaves in WHERE clause
265 ([17576](https://github.com/civicrm/civicrm-core/pull/17576))**
266
267 Fixes a bug in search builder where APIv4 gives a SQL error while building
268 your where clause.
269
270 - **Offset is not respected in Date Preferences
271 ([dev/core#1847](https://lab.civicrm.org/dev/core/-/issues/1847) and
272 [dev/core#1874](https://lab.civicrm.org/dev/core/-/issues/1874):
273 [17762](https://github.com/civicrm/civicrm-core/pull/17762) and
274 [17836](https://github.com/civicrm/civicrm-core/pull/17836))**
275
276 - **Fix CRM_Utils_JS::dedupeClosures to ignore comments
277 ([17717](https://github.com/civicrm/civicrm-core/pull/17717))**
278
279 Ensures comments do not interfere with deduping.
280
281 - **Use PHPUnit7 as the primary test runner
282 ([17615](https://github.com/civicrm/civicrm-core/pull/17615),
283 [17661](https://github.com/civicrm/civicrm-core/pull/17661),
284 [120](https://github.com/civicrm/civicrm-backdrop/pull/120),
285 [605](https://github.com/civicrm/civicrm-drupal/pull/605),
286 [206](https://github.com/civicrm/civicrm-wordpress/pull/206))**
287
288 - **Fix isMultilingual to use static caching and respect current domain
289 ([17646](https://github.com/civicrm/civicrm-core/pull/17646))**
290
291 Improves the efficiency and accuracy of the `CRM_Core_I18n::isMultilingual`
292 function, preventing a large number of duplicate queries on every request.
293
294 - **Update has_separator field in civicrm_navigation
295 ([17579](https://github.com/civicrm/civicrm-core/pull/17579))**
296
297 This field was incorrectly marked as a boolean; it's actually an int with an
298 option list.
299
300 - **Civi\Payment\PropertyBag - Remove warning
301 ([17506](https://github.com/civicrm/civicrm-core/pull/17506))**
302
303 - **Fix duplicate upgrade function
304 ([17582](https://github.com/civicrm/civicrm-core/pull/17582))**
305
306 Fixes a fatal error on upgrade caused by a merge conflict.
307
308 - **CRM_Case_XMLProcessor::allActivityTypes() doesn't do caching right
309 ([dev/core#1433](https://lab.civicrm.org/dev/core/-/issues/1433):
310 [17627](https://github.com/civicrm/civicrm-core/pull/17627),
311 [17616](https://github.com/civicrm/civicrm-core/pull/17616) and
312 [17614](https://github.com/civicrm/civicrm-core/pull/17614))**
313
314 - **CustomValue.GetTree API Does Not Return Display Value for Money Select/Radio
315 Custom field ([dev/core#1566](https://lab.civicrm.org/dev/core/-/issues/1566):
316 [17008](https://github.com/civicrm/civicrm-core/pull/17008))**
317
318 - **whom_url missing contact ID parameter in detailed logging report
319 ([dev/core#1749](https://lab.civicrm.org/dev/core/-/issues/1749):
320 [17440](https://github.com/civicrm/civicrm-core/pull/17440))**
321
322 - **Regression - File fields export results in DB error
323 ([dev/core#1787](https://lab.civicrm.org/dev/core/-/issues/1787):
324 [17578](https://github.com/civicrm/civicrm-core/pull/17578))**
325
326 - **Relative date filter - End of yesterday not working properly
327 ([dev/core#1798](https://lab.civicrm.org/dev/core/-/issues/1798):
328 [17512](https://github.com/civicrm/civicrm-core/pull/17512))**
329
330 - **Editing a custom field choice label changes the `name` if you do it from the
331 custom field admin screens
332 ([dev/core#1817](https://lab.civicrm.org/dev/core/-/issues/1817):
333 [17681](https://github.com/civicrm/civicrm-core/pull/17681))**
334
335 - **Custom Date field with format=yy displays calendar icon that doesn't work
336 ([dev/core#1829](https://lab.civicrm.org/dev/core/-/issues/1829):
337 [17664](https://github.com/civicrm/civicrm-core/pull/17664))**
338
339 - **Unable to install 5.28 on Maria DB 10.3 on Ubuntu
340 ([dev/core#1860](https://lab.civicrm.org/dev/core/-/issues/1860):
341 [17772](https://github.com/civicrm/civicrm-core/pull/17772))**
342
343 - **APIv4 - Filter getActions results based on user permissions
344 ([17540](https://github.com/civicrm/civicrm-core/pull/17540))**
345
346 - **Pre-upgrade message for php-intl shows twice
347 ([17748](https://github.com/civicrm/civicrm-core/pull/17748))**
348
349 - **Fix saving of State/Province Multi-select values
350 ([17737](https://github.com/civicrm/civicrm-core/pull/17737))**
351
352 - **[regression] Attempting to access Multi-Record Custom Field import results
353 in crash ([dev/core#1841](https://lab.civicrm.org/dev/core/-/issues/1841):
354 [17697](https://github.com/civicrm/civicrm-core/pull/17697))**
355
356 - **Use PSR-4 instead of PSR-0 in Civi directory
357 ([17690](https://github.com/civicrm/civicrm-core/pull/17690))**
358
359 - **Sort options without relying on unavailable buildOptions param
360 ([17621](https://github.com/civicrm/civicrm-core/pull/17621))**
361
362 - **Throw exception if id not passed into discard
363 ([17666](https://github.com/civicrm/civicrm-core/pull/17666))**
364
365 - **Fix validation of select2 fields in "On behalf of Organisation" block
366 ([17672](https://github.com/civicrm/civicrm-core/pull/17672))**
367
368 - **Pass required attribute for quickform fields through to form
369 ([16488](https://github.com/civicrm/civicrm-core/pull/16488) and
370 [17929](https://github.com/civicrm/civicrm-core/pull/17929) related to
371 [dev/core#1903](https://lab.civicrm.org/dev/core/-/issues/1903))**
372
373 - **CRM_Core_I18n::setLocale() - Fix bug with repeated usage
374 ([17374](https://github.com/civicrm/civicrm-core/pull/17374))**
375
376 - **Fix retrieving MySQL version for checking as part of install requirements
377 ([17593](https://github.com/civicrm/civicrm-core/pull/17593))**
378
379 - **Set ContactType.name as required in the schema.
380 ([17548](https://github.com/civicrm/civicrm-core/pull/17548),
381 [17570](https://github.com/civicrm/civicrm-core/pull/17570), and
382 [18070](https://github.com/civicrm/civicrm-core/pull/18070) related to
383 [dev/core#1927](https://lab.civicrm.org/dev/core/-/issues/1927))**
384
385 - **Fix "Undefined variable: entryFound" notice on Bookkeeping report
386 ([17554](https://github.com/civicrm/civicrm-core/pull/17554))**
387
388 - **Zip code range search only supports numeric zip codes
389 ([17523](https://github.com/civicrm/civicrm-core/pull/17523))**
390
391 Rather than causing a database error, this displays an error message when
392 attempting to search a postal code range using non-numeric postal codes.
393
394 - **Remove isThrowException from CRM_Utils_Type::validate() signature
395 ([17546](https://github.com/civicrm/civicrm-core/pull/17546))**
396
397 - **`codeVersion` not displayed in system status check error message about db
398 version vs codeversion
399 ([dev/core#1882](https://lab.civicrm.org/dev/core/-/issues/1882):
400 [17854](https://github.com/civicrm/civicrm-core/pull/17854))**
401
402 - **"Merge" form moves unchecked related entities (intra-RC regression)
403 ([dev/core#1930](https://lab.civicrm.org/dev/core/-/issues/1930):
404 [18079](https://github.com/civicrm/civicrm-core/pull/18079))**
405
406 ### CiviCase
407
408 - **Non-compliant query leads to (semi-)random sorting and failing unit test
409 CRM_Case_BAO_CaseTest::testSortByCaseContact
410 ([dev/core#1844](https://lab.civicrm.org/dev/core/-/issues/1844):
411 [17708](https://github.com/civicrm/civicrm-core/pull/17708))**
412
413 ### CiviContribute
414
415 - **Payment instrument ID is not required at processorform level
416 ([17510](https://github.com/civicrm/civicrm-core/pull/17510))**
417
418 Do not throw warning if payment instrument is not sent.
419
420 - **Bank fee has wrong date on import in civicrm_financial_item.transaction_date
421 incorrected uses import date rather than payment date on
422 ([dev/core#1776](https://lab.civicrm.org/dev/core/-/issues/1776):
423 [17389](https://github.com/civicrm/civicrm-core/pull/17389))**
424
425 Ensures the `civicrm_financial_item.transaction_date` gets recorded correctly
426 when importing a transaction with a bank fee.
427
428 - **Payment.create should not set contribution date to today
429 ([17688](https://github.com/civicrm/civicrm-core/pull/17688))**
430
431 - **Fix PHP notice when we don't have credit card params
432 ([16514](https://github.com/civicrm/civicrm-core/pull/16514) and
433 [17584](https://github.com/civicrm/civicrm-core/pull/17584))**
434
435 - **Improve PropertyBag handling of offsetGet and custom properties; add more
436 tests ([17588](https://github.com/civicrm/civicrm-core/pull/17588) and
437 [17654](https://github.com/civicrm/civicrm-core/pull/17654))**
438
439 - **Graphs on Contribution Summary report replace final row with grand total
440 value ([dev/report#40](https://lab.civicrm.org/dev/report/-/issues/40):
441 [17412](https://github.com/civicrm/civicrm-core/pull/17412))**
442
443 - **"Undefined offset" bug in BAO/FinancialAccount.php
444 ([dev/wordpress#61](https://lab.civicrm.org/dev/wordpress/-/issues/61):
445 [17701](https://github.com/civicrm/civicrm-core/pull/17701) and
446 [17689](https://github.com/civicrm/civicrm-core/pull/17689))**
447
448 Ensures that the financial account is set correctly even when the name does
449 not match the label.
450
451 ### CiviEvent
452
453 - **Event participant_listing_id field defaults to 0 instead of Null
454 ([dev/core#1833](https://lab.civicrm.org/dev/core/-/issues/1833):
455 [17677](https://github.com/civicrm/civicrm-core/pull/17677))**
456
457 - **Multiple line item shown on view contribution if participant is transferred
458 to another contact.
459 ([dev/core#890](https://lab.civicrm.org/dev/core/-/issues/890):
460 [16956](https://github.com/civicrm/civicrm-core/pull/16956))**
461
462 ### CiviGrant
463
464 - **Bug in Grant statistics report
465 ([17640](https://github.com/civicrm/civicrm-core/pull/17640))**
466
467 ### CiviSMS
468
469 - **Can't change SMS recipient on non-bulk SMS
470 ([dev/core#1840](https://lab.civicrm.org/dev/core/-/issues/1840):
471 [17691](https://github.com/civicrm/civicrm-core/pull/17691))**
472
473 ### Drupal Integration
474
475 - **Error: Class 'CRM_Upgrade_Incremental_General' not found in
476 Civi\Install\Requirements->checkMysqlVersion()
477 ([dev/drupal#131](https://lab.civicrm.org/dev/drupal/-/issues/131):
478 [18066](https://github.com/civicrm/civicrm-core/pull/18066))**
479
480 ### Joomla Integration
481
482 - **Ensure that when normal routing trackable urls and opens in Joomla go to the
483 frontend not administrator site
484 ([17760](https://github.com/civicrm/civicrm-core/pull/17760))**
485
486 ### WordPress Integration
487
488 - **Remove `/` from the beginning and end of query string
489 ([207](https://github.com/civicrm/civicrm-wordpress/pull/207))**
490
491 Fixes a 'You do not have permission to access this content.' error resulting
492 from an extra '/' in the `q=` string in the url.
493
494 - **Base page fails to recognise Page Templates in subdirectories.
495 ([dev/wordpress#58](https://lab.civicrm.org/dev/wordpress/-/issues/58):
496 [204](https://github.com/civicrm/civicrm-wordpress/pull/204))**
497
498 Ensures that the CiviCRM base page is correctly identified when it does not
499 reside in the theme root directory.
500
501 - **Prevent session from starting during WordPress pseudo cron procedures
502 ([dev/core#1889](https://lab.civicrm.org/dev/core/-/issues/1889):
503 [17890](https://github.com/civicrm/civicrm-core/pull/17890) and
504 [210](https://github.com/civicrm/civicrm-wordpress/pull/210))**
505
506 ## <a name="misc"></a>Miscellany
507
508 - **Ship Flexmailer extension with civicrm-core
509 ([17669](https://github.com/civicrm/civicrm-core/pull/17669),
510 ([17768](https://github.com/civicrm/civicrm-core/pull/17768))**
511
512 - **Support passing old method name into deprecatedFunctionWarning
513 ([17552](https://github.com/civicrm/civicrm-core/pull/17552))**
514
515 - **Add CRM_Core_Form::isFormInViewMode and CRM_Core_Form::isFormInEditMode
516 ([17637](https://github.com/civicrm/civicrm-core/pull/17637))**
517
518 - **CRM_Utils_JS - Dedupe 'use strict' directive
519 ([17711](https://github.com/civicrm/civicrm-core/pull/17711))**
520
521 - **Add isBackOffice, isPayLater, getPaymentMode helpers to
522 frontendpaymentformtrait
523 ([17511](https://github.com/civicrm/civicrm-core/pull/17511))**
524
525 - **Fix issue $this
526 ([589](https://github.com/civicrm/civicrm-drupal/pull/589))**
527
528 - **Fix validateAll to no longer support unused abort param
529 ([17544](https://github.com/civicrm/civicrm-core/pull/17544))**
530
531 - **Remove deprecated billingID from baseIPN
532 ([17525](https://github.com/civicrm/civicrm-core/pull/17525))**
533
534 - **Add EntityFormTrait to pricefieldForm - stdised getEntityId()
535 ([17516](https://github.com/civicrm/civicrm-core/pull/17516))**
536
537 - **Update contributor-key.yml
538 ([17553](https://github.com/civicrm/civicrm-core/pull/17553))**
539
540 - **Export fix ([17644](https://github.com/civicrm/civicrm-core/pull/17644))**
541
542 - **Upgrade HTML Purifier to v4.12.0 to support for PHP7.4
543 ([297](https://github.com/civicrm/civicrm-packages/pull/297))**
544
545 - **Temporary tables should follow consistent naming convention
546 ([dev/core#183](https://lab.civicrm.org/dev/core/-/issues/183):
547 [15796](https://github.com/civicrm/civicrm-core/pull/15796))**
548
549 - **Remove unreachable lines
550 ([17563](https://github.com/civicrm/civicrm-core/pull/17563))**
551
552 - **EventInfo template cleanup
553 ([17581](https://github.com/civicrm/civicrm-core/pull/17581))**
554
555 - **[NFC] Misspelled word
556 ([17652](https://github.com/civicrm/civicrm-core/pull/17652))**
557
558 - **Remove a usage of deprecated funtion get_magic_quotes_gpc and also switch out
559 {} for [] whne acecssing string or array offsets
560 ([296](https://github.com/civicrm/civicrm-packages/pull/296))**
561
562 - **Remove unused deprecated class
563 ([17535](https://github.com/civicrm/civicrm-core/pull/17535))**
564
565 - **Remove obsolete function formatWikiURL
566 ([17726](https://github.com/civicrm/civicrm-core/pull/17726))**
567
568 - **[REF] Simplify the replacing of the email with the email from the url
569 ([17491](https://github.com/civicrm/civicrm-core/pull/17491))**
570
571 - **[REF] Replace incorrect usages of array_key_exists when the variable is not
572 an array with property_exists and also fix the parameter order for an implode
573 statement ([17573](https://github.com/civicrm/civicrm-core/pull/17573))**
574
575 - **[REF] Convert Authorize.net to use Guzzle for update subscription class, add
576 test ([17585](https://github.com/civicrm/civicrm-core/pull/17585))**
577
578 - **[REF] Using {} to access string or array offsets has been deprecated in
579 PHP7.4 ([17574](https://github.com/civicrm/civicrm-core/pull/17574))**
580
581 - **[REF] Mark unused date functions as deprecated
582 ([17487](https://github.com/civicrm/civicrm-core/pull/17487))**
583
584 - **[REF] Using ternary operation without nesting is deprecated and also using
585 methods and properly instanciate the CiviCase Info object in test
586 ([17575](https://github.com/civicrm/civicrm-core/pull/17575))**
587
588 - **[REF] Convert Authorize.net doDirectPayment to use guzzle & add test
589 ([17501](https://github.com/civicrm/civicrm-core/pull/17501))**
590
591 - **[REF] Replace the deprecated system_rebuild_module_data function with
592 equivilant extension.list.module service function calls to be Drupal 9
593 compatiable ([17515](https://github.com/civicrm/civicrm-core/pull/17515))**
594
595 - **[REF] Remove never reachable lines.
596 ([17556](https://github.com/civicrm/civicrm-core/pull/17556))**
597
598 - **[REF] Remove another instance of fatal()
599 ([17549](https://github.com/civicrm/civicrm-core/pull/17549))**
600
601 - **[REF] Readability extraction in Dummy class
602 ([17543](https://github.com/civicrm/civicrm-core/pull/17543))**
603
604 - **[REF] Replace some instances of fatal with thrown exceptions.
605 ([17533](https://github.com/civicrm/civicrm-core/pull/17533))**
606
607 - **[REF] Remove calls to, and deprecate, unhandled function
608 ([17499](https://github.com/civicrm/civicrm-core/pull/17499))**
609
610 - **[REF] Remove handling for 2 fields not on the form
611 ([17504](https://github.com/civicrm/civicrm-core/pull/17504))**
612
613 - **[REF] Remove some instances of fatal in BAO classes
614 ([17536](https://github.com/civicrm/civicrm-core/pull/17536))**
615
616 - **[REF] Access the method not the property directly to check if a payment
617 processor supports recurring
618 ([17602](https://github.com/civicrm/civicrm-core/pull/17602))**
619
620 - **[REF] Ensure that our custom error handler is called when jQuery validates
621 and expand any collapsed accordions that are hiding required fields that
622 haven't been filled in
623 ([17673](https://github.com/civicrm/civicrm-core/pull/17673))**
624
625 - **[REF] Consolidate code in processMembership
626 ([17611](https://github.com/civicrm/civicrm-core/pull/17611))**
627
628 - **[REF] Cleanup function for retrieving contact types.
629 ([17676](https://github.com/civicrm/civicrm-core/pull/17676))**
630
631 - **[REF] Fix Javascript syntax error
632 ([17678](https://github.com/civicrm/civicrm-core/pull/17678))**
633
634 - **[REF] Fix jQuery error message display on select2 field validation
635 ([17671](https://github.com/civicrm/civicrm-core/pull/17671))**
636
637 - **[REF] Fix allowing users to clear values for raido custom fields when not
638 required ([17670](https://github.com/civicrm/civicrm-core/pull/17670))**
639
640 - **[REF] Extract getTestTrxnID
641 ([17642](https://github.com/civicrm/civicrm-core/pull/17642))**
642
643 - **Update Flexmailer to be PHP7.4 compatible
644 ([17779](https://github.com/civicrm/civicrm-core/pull/17779), [17660](https://github.com/civicrm/civicrm-core/pull/17660))**
645
646 - **[REF] Ensure that the Manual Payment Processor sets the _paymentProcessor
647 variable like other Processors to fix issues in PHP7.4 and UnitTests
648 ([17648](https://github.com/civicrm/civicrm-core/pull/17648))**
649
650 - **[REF] Fix PHP7.4 Test fails when we are accessing array keys when the value
651 is not an array
652 ([17649](https://github.com/civicrm/civicrm-core/pull/17649))**
653
654 - **[REF] Fix parts of code where curly brackets were being used for array or
655 string access which is deprecated in PHP7.4
656 ([17647](https://github.com/civicrm/civicrm-core/pull/17647))**
657
658 - **[REF] Fix issue with using array access tools on NULL values
659 ([17600](https://github.com/civicrm/civicrm-core/pull/17600))**
660
661 - **[REF] Replace incorrect usage of array_key_exists with property_exists in
662 Group BAO Class
663 ([17604](https://github.com/civicrm/civicrm-core/pull/17604))**
664
665 - **[REF] Add test for renewing old expired membership via form
666 ([17564](https://github.com/civicrm/civicrm-core/pull/17564))**
667
668 - **[REF] Update packages to work with PHP7.4
669 ([17598](https://github.com/civicrm/civicrm-core/pull/17598))**
670
671 - **[REF] Fix another couple of uses of array_key_exists when the variable being
672 checked is an object
673 ([17601](https://github.com/civicrm/civicrm-core/pull/17601))**
674
675 - **[REF] Remove deprecated methods of booting Drupal container and getting
676 Drupal timezone information
677 ([17522](https://github.com/civicrm/civicrm-core/pull/17522))**
678
679 - **[REF] Fix some additional issues where curly braces were being used to
680 access string or array offsets
681 ([17599](https://github.com/civicrm/civicrm-core/pull/17599))**
682
683 - **[NFC] Update existing APIv3 MembershipType Tests to also test against APIv4
684 as appropriate ([17528](https://github.com/civicrm/civicrm-core/pull/17528))**
685
686 - **[NFC] cleanup docblocks in CRM_Utils_JS
687 ([17714](https://github.com/civicrm/civicrm-core/pull/17714))**
688
689 - **[NFC] Fix some outdated wiki links
690 ([17739](https://github.com/civicrm/civicrm-core/pull/17739))**
691
692 - **[NFC] Fix contributor key for Lighthouse Consulting and Design
693 ([17727](https://github.com/civicrm/civicrm-core/pull/17727))**
694
695 - **[NFC] Fix unit test failure on MySQL 8 due to ordering issue
696 ([17674](https://github.com/civicrm/civicrm-core/pull/17674))**
697
698 - **[NFC] Remove instances where html is passed to crmMoney
699 ([17612](https://github.com/civicrm/civicrm-core/pull/17612))**
700
701 - **[NFC] Add assertions to existing test to lock in current behaviour
702 ([17605](https://github.com/civicrm/civicrm-core/pull/17605))**
703
704 - **[NFC] Update mocking to use getMockBuilder instead instead of createMock
705 ([17606](https://github.com/civicrm/civicrm-core/pull/17606))**
706
707 - **[NFC] Formatting cleanup on contribution/recur templates
708 ([17603](https://github.com/civicrm/civicrm-core/pull/17603))**
709
710 - **[NFC] Minor code cleanup
711 ([17566](https://github.com/civicrm/civicrm-core/pull/17566))**
712
713 - **MembershipRenewalTest - Fix failure
714 ([17830](https://github.com/civicrm/civicrm-core/pull/17830))**
715
716 - **[REF] Fix regression where adding any date based field onto a profile
717 triggers an error date preferences not configured when previewing the profile
718 ([17973](https://github.com/civicrm/civicrm-core/pull/17973))**
719
720 - **[NFC] Port some recent test fixes from master to 5.28
721 ([18053](https://github.com/civicrm/civicrm-core/pull/18053))**
722
723 ## <a name="credits"></a>Credits
724
725 This release was developed by the following code authors:
726
727 AGH Strategies - Alice Frumin, Andie Hunt; British Humanist Association -
728 Andrew West; Christian Wach; Circle Interactive - Pradeep Nayak; CiviCRM -
729 Coleman Watts, Tim Otten; CiviDesk - Yashodha Chaku; CompuCorp - Ivan; Coop
730 SymbioTIC - Mathieu Lutfy, Samuel Vanhove; Dave D; Dietermartens; ES-Progress -
731 Sandor Semsey; Flinders University of South Australia - Tom Anderson; Fuzion -
732 Jitendra Purohit; JMA Consulting - Seamus Lee; Lighthouse Consulting and
733 Design- Brian Shaughnessy; Marcin Lewandowski; Megaphone Technology Consulting -
734 Jon Goldberg; MJW Consulting - Matthew Wire; Tadpole Collective - Kevin
735 Cristiano; Wikimedia Foundation - Eileen McNaughton
736
737 Most authors also reviewed code for this release; in addition, the following
738 reviewers contributed their comments:
739
740 a-n The Artists Information Company - William Mortada; Agileware - Francis
741 Whittle, Justin Freeman; Andrew Thompson; Artful Robot - Rich Lott; Betty
742 Dolfing; Blackfly Solutions - Alan Dixon; CiviCoop - Jaap Jansma; Fuzion - Luke
743 Stewart, Peter Davis; JMA Consulting - Joe Murray; MJCO - Mikey O'Toole; Semper
744 IT - Karin Gerritsen; Squiffle Consulting - Aidan Saunders; Third Sector Design:
745 Eriol Fox; Timbsoft Technologies - Tunbola Ogunwande
746
747 ## <a name="feedback"></a>Feedback
748
749 These release notes are edited by Alice Frumin and Andie Hunt. If you'd like
750 to provide feedback on them, please log in to https://chat.civicrm.org/civicrm
751 and contact `@agh1`.