Merge pull request #16072 from eileenmcnaughton/paypal_extract
[civicrm-core.git] / release-notes / 5.21.0.md
1 # CiviCRM 5.21.0
2
3 Released January 1, 2020
4
5 - **[Synopsis](#synopsis)**
6 - **[Features](#features)**
7 - **[Bugs resolved](#bugs)**
8 - **[Miscellany](#misc)**
9 - **[Credits](#credits)**
10 - **[Feedback](#feedback)**
11
12 ## <a name="synopsis"></a>Synopsis
13
14 | *Does this version...?* | |
15 |:--------------------------------------------------------------- |:-------:|
16 | Fix security vulnerabilities? | no |
17 | **Change the database schema?** | **yes** |
18 | **Alter the API?** | **yes** |
19 | Require attention to configuration options? | no |
20 | Fix problems installing or upgrading to a previous version? | no |
21 | **Introduce features?** | **yes** |
22 | **Fix bugs?** | **yes** |
23
24 ## <a name="features"></a>Features
25
26 ### Core CiviCRM
27
28 - **Temporary tables should follow consistent naming convention (Work Towards
29 [dev/core#183](https://lab.civicrm.org/dev/core/issues/183):
30 [15795](https://github.com/civicrm/civicrm-core/pull/15795),
31 [15798](https://github.com/civicrm/civicrm-core/pull/15798),
32 [15819](https://github.com/civicrm/civicrm-core/pull/15819),
33 [15793](https://github.com/civicrm/civicrm-core/pull/15793),
34 [15792](https://github.com/civicrm/civicrm-core/pull/15792),
35 [15874](https://github.com/civicrm/civicrm-core/pull/15874),
36 [15821](https://github.com/civicrm/civicrm-core/pull/15821),
37 [15823](https://github.com/civicrm/civicrm-core/pull/15823),
38 [15826](https://github.com/civicrm/civicrm-core/pull/15826),
39 [15820](https://github.com/civicrm/civicrm-core/pull/15820),
40 [15825](https://github.com/civicrm/civicrm-core/pull/15825)
41 and [15876](https://github.com/civicrm/civicrm-core/pull/15876))**
42
43 Begins work to enforce a common naming convention for temporary tables.
44
45 - **Performance issue when exporting to CSV from reports with custom fields
46 ([dev/report#19](https://lab.civicrm.org/dev/report/issues/19):
47 [15248](https://github.com/civicrm/civicrm-core/pull/15248))**
48
49 Performance improvements when exporting a report to CSV.
50
51 - **Memory error on creating large pdfs
52 ([dev/core#574](https://lab.civicrm.org/dev/core/issues/574):
53 [13232](https://github.com/civicrm/civicrm-core/pull/13232))**
54
55 Improves performance when creating PDFs.
56
57 - **Update Country list: change Macedonia, Republic of into North Macedonia
58 ([dev/core#1166](https://lab.civicrm.org/dev/core/issues/1166):
59 [15997](https://github.com/civicrm/civicrm-core/pull/15997))**
60
61 Updates the name of "Macedonia, Republic of" to "North Macedonia" in
62 accordance with the iso 3166-1 list.
63
64 - **Default to 'copy' for non-empty fields on merge screen
65 ([dev/core#1339](https://lab.civicrm.org/dev/core/issues/1339):
66 [15595](https://github.com/civicrm/civicrm-core/pull/15595))**
67
68 Updates the Merge screen to default to copy for all non empty fields. This
69 change makes it easier to keep too much data but harder to lose some.
70
71 - **Tagsets should display vertically in activity/new case forms
72 ([dev/core#1346](https://lab.civicrm.org/dev/core/issues/1346):
73 [15649](https://github.com/civicrm/civicrm-core/pull/15649))**
74
75 Improves the User interface of the "New Activity" and "New Case" forms by
76 displaying the tag fields vertically instead of horizontally.
77
78 - **Make utf8mb4 status check language more for the general consumer
79 ([15946](https://github.com/civicrm/civicrm-core/pull/15946))**
80
81 This alters the language on the utf8mb4 status check so that it is a bit more
82 general in nature and hopefully easier to digest for end users.
83
84 - **Include Metadata on advanced search form for membership, grant, pledge,
85 fields ([15936](https://github.com/civicrm/civicrm-core/pull/15936))**
86
87 Adds the ability filter on fields like `membership_join_date` and
88 `pledge_payment_start_date` on the advanced search form via url parameters.
89
90 - **Replace all instances of CRM_Core_Fatal with throw new CRM_Core_Exception
91 (Work towards [dev/core#560](https://lab.civicrm.org/dev/core/issues/560):
92 [15903](https://github.com/civicrm/civicrm-core/pull/15903),
93 [15770](https://github.com/civicrm/civicrm-core/pull/15770),
94 [15941](https://github.com/civicrm/civicrm-core/pull/15941),
95 [15775](https://github.com/civicrm/civicrm-core/pull/15775) and
96 [15822](https://github.com/civicrm/civicrm-core/pull/15822))**
97
98 Work towards throwing exceptions instead of fatal errors.
99
100 - **Remove background opacity in menus; improving accessibility/readability
101 ([15847](https://github.com/civicrm/civicrm-core/pull/15847))**
102
103 Makes the CiviCRM Menu opaque to improve readability.
104
105 - **Improve datePicker placeholder/icons
106 ([15848](https://github.com/civicrm/civicrm-core/pull/15848))**
107
108 Small tweaks to the datepicker widget to improve flexibility & consistency.
109
110 - **modified shared address note under contact dashboard
111 ([15666](https://github.com/civicrm/civicrm-core/pull/15666) and
112 [15769](https://github.com/civicrm/civicrm-core/pull/15769))**
113
114 Improves the note below the Shared Address field to include a link to the
115 contact that the address lives on to make it easier for get to the shared
116 address to edit it.
117
118 - **Grant in Edit mode doesn't show the associated contact and standardize all
119 screens accordingly. (Work Towards
120 [dev/core#1065](https://lab.civicrm.org/dev/core/issues/1065):
121 [15757](https://github.com/civicrm/civicrm-core/pull/15757),
122 [15833](https://github.com/civicrm/civicrm-core/pull/15833) and
123 [15840](https://github.com/civicrm/civicrm-core/pull/15840))**
124
125 Work towards ensuring that a clickable link to the associated contact is
126 included on the Grant Form in edit mode and the Membership Renewal Form and
127 standardizes the display of associated contacts across edit forms.
128
129 ### CiviCase
130
131 - **Enable Case search metadata on Advanced Search Form
132 ([15928](https://github.com/civicrm/civicrm-core/pull/15928))**
133
134 This change makes it so one can pass case search parameters using url
135 parameters on the Advanced Search Form.
136
137 ### CiviContribute
138
139 - **Develop getter & setter structure for Payment classes (Work Towards
140 [dev/financial#82](https://lab.civicrm.org/dev/financial/issues/82):
141 [15697](https://github.com/civicrm/civicrm-core/pull/15697))**
142
143 This PR adds a new class, `Civi\Payment\PropertyBag` which will eventually
144 replace the wild `$params` array that gets thrown at payment processors, with
145 a standardized, at least minimally validated and type cast object. It uses the
146 new class in one very minimal way and adds some comments to outline future
147 work. This is a non functional change that lays the groundwork for future
148 work.
149
150 - **Always display amount paid even if it is 0.00. Blank looks like it's missing
151 data rather than nothing paid
152 ([16021](https://github.com/civicrm/civicrm-core/pull/16021))**
153
154 This improves user experience by displaying contributions of 0 as 0 instead
155 of blank.
156
157 - **Contribution url params - add contribution_page_id as a supported url
158 parameter ([15785](https://github.com/civicrm/civicrm-core/pull/15785))**
159
160 Adds `contribution_page_id` as a supported url parameter on the advanced
161 search form.
162
163 ### CiviMail
164
165 - **CiviMail - Only display "Headers and Footers" if there are headers and
166 footers ([15326](https://github.com/civicrm/civicrm-core/pull/15326))**
167
168 Makes it so when creating a CiviMail Mailing the "Headers and Footers" tab
169 only displays if there are Headers and/or Footers configured on the site.
170
171 ### Drupal Integration
172
173 - **Add participant is_test field to views
174 ([590](https://github.com/civicrm/civicrm-drupal/pull/590))**
175
176 Makes the Participant `is_test` field available in views.
177
178 ### PayPal Implementation
179
180 - **PayPalImpl: Add SOLUTIONTYPE parameter that triggers allowing to pay without
181 having to create a paypal account.
182 ([15523](https://github.com/civicrm/civicrm-core/pull/15523))**
183
184 Adds a `SOLUTIONTYPE` parameter to the PayPal checkout values so that one can
185 make a contribution without having to create an account.
186
187 ## <a name="bugs"></a>Bugs resolved
188
189 ### Core CiviCRM
190
191 - **Lybunt report - remove broken chart functionality
192 ([dev/core#523](https://lab.civicrm.org/dev/core/issues/523):
193 [15989](https://github.com/civicrm/civicrm-core/pull/15989))**
194
195 Fixes the LYBUNT charts.
196
197 - **Search builder error on Membership source field.
198 ([dev/core#1390](https://lab.civicrm.org/dev/core/issues/1390):
199 [15845](https://github.com/civicrm/civicrm-core/pull/15845))**
200
201 Fixes an error: "DB error: syntax error" when adding "Membership Source" on
202 the search builder screen.
203
204 - **Option to open navigation item in new window (if present)
205 ([dev/core#1398](https://lab.civicrm.org/dev/core/issues/1398):
206 [15861](https://github.com/civicrm/civicrm-core/pull/15861))**
207
208 Ensures the target attribute is respected for CiviCRM Navigation menu submenu
209 items.
210
211 - **CIVI-SA-2019-21 may lead to regressions when following typehints on
212 CRM_Core_BAO_Setting::setItem() (Work Towards
213 [dev/core#1425](https://lab.civicrm.org/dev/core/issues/1425):
214 [15981](https://github.com/civicrm/civicrm-core/pull/15981),
215 [15988](https://github.com/civicrm/civicrm-core/pull/15988) and
216 [15980](https://github.com/civicrm/civicrm-core/pull/15980))**
217
218 Removes a misleading PHPDoc type hint for the `$value` parameter in
219 `CRM_Core_BAO_Setting::setItem()` and updates tests that use this function.
220
221 - **allow PCP report to filter on contribution status
222 ([16024](https://github.com/civicrm/civicrm-core/pull/16024))**
223
224 The PCP report template lists all PCP pages with total number of contributions
225 made against each PCP page and total amount raised. Before this change the
226 report had no filter for Contribution Status so Cancelled Contributions were
227 showing and throwing off the totals. With this change there is a filter for
228 contribution status allowing users to filter this list as they see fit for
229 their use case.
230
231 - **Only add in the metadata for advanced search if user has access to the
232 relevant component
233 ([15987](https://github.com/civicrm/civicrm-core/pull/15987))**
234
235 Ensures the user has access to the relevant component before adding metadata
236 for that component to the advanced search form.
237
238 - **Fix api explorer formatting IS NULL clauses
239 ([15817](https://github.com/civicrm/civicrm-core/pull/15817))**
240
241 Fixes a formatting issue in the api explorer output where IS NULL and IS NOT
242 NULL clauses would output invalid code due to the missing value piece of the
243 clause.
244
245 - **Add in translation function around newly converted statusBounce messages
246 ([15774](https://github.com/civicrm/civicrm-core/pull/15774))**
247
248 - **Fix cachekey string
249 ([15761](https://github.com/civicrm/civicrm-core/pull/15761))**
250
251 Fixes an obscure bug where no custom fields were being returned when doing a
252 Contact.get api call with check_permissions=0.
253
254 - **Fix potential test glitch when repeatedly calling createLoggedInUser
255 ([15965](https://github.com/civicrm/civicrm-core/pull/15965))**
256
257 - **[UI] Ensure that when sorting on columns in the find activity search the
258 arrow shows which field is being sorted and direction
259 ([15943](https://github.com/civicrm/civicrm-core/pull/15943))**
260
261 - **Move greeting handling up as it is not paymentValidation dependent
262 ([15904](https://github.com/civicrm/civicrm-core/pull/15904))**
263
264 - **Remove nbsp from UserDashboard Event section
265 ([15880](https://github.com/civicrm/civicrm-core/pull/15880))**
266
267 - **translate strings
268 ([15858](https://github.com/civicrm/civicrm-core/pull/15858))**
269
270 - **Filter contact sub-type by "is not one of" fails
271 ([dev/report#23](https://lab.civicrm.org/dev/report/issues/23):
272 [15971](https://github.com/civicrm/civicrm-core/pull/15971))**
273
274 - **Fix activity search to work by url params
275 ([15990](https://github.com/civicrm/civicrm-core/pull/15990))**
276
277 - **CiviCRM Option Group with a name containing spaces cannot have any options
278 added, error message is shown also impacts the in-place option editor
279 ([dev/core#1405](https://lab.civicrm.org/dev/core/issues/1405):
280 [15937](https://github.com/civicrm/civicrm-core/pull/15937))**
281
282 - **Quicksearch with phone filter doesn't work with non-numeric character
283 ([dev/core#1420](https://lab.civicrm.org/dev/core/issues/1420):
284 [15955](https://github.com/civicrm/civicrm-core/pull/15955))**
285
286 ### CiviCase
287
288 - **Case Activities Report includes core activities *always*
289 ([dev/core#1366](https://lab.civicrm.org/dev/core/issues/1366):
290 [15882](https://github.com/civicrm/civicrm-core/pull/15882) and
291 [15877](https://github.com/civicrm/civicrm-core/pull/15877))**
292
293 - **civicrm/case/search?reset=1&force=1&case_subject=test gives php warning
294 ([dev/core#1410](https://lab.civicrm.org/dev/core/issues/1410):
295 [15920](https://github.com/civicrm/civicrm-core/pull/15920))**
296
297 - **Url search with `civicrm/case/search?case_owner=2&force=1` gives an E_NOTICE
298 ([dev/core#1414](https://lab.civicrm.org/dev/core/issues/1414):
299 [15924](https://github.com/civicrm/civicrm-core/pull/15924))**
300
301 - **CiviCase - Make static function `allActivityTypes()` static
302 ([15839](https://github.com/civicrm/civicrm-core/pull/15839))**
303
304 ### CiviContribute
305
306 - **Membership form permits creating invalid transactions
307 ([dev/financial#100](https://lab.civicrm.org/dev/financial/issues/100):
308 [15771](https://github.com/civicrm/civicrm-core/pull/15771))**
309
310 To avoid users accidentally setting invalid statuses Removes the statuses
311 "Partially Paid", "Cancelled", and "Failed" from the `Payment Status` field
312 when recording a payment for a Contribution related to a Membership.
313 Additionally, removes the statuses "Partially Paid", "Overdue" and "In
314 Progress" from the `Payment Status` field when recording a payment for a
315 Contribution related to an Event.
316
317 - **Fix api Payment.create to support overpayments
318 ([15909](https://github.com/civicrm/civicrm-core/pull/15909))**
319
320 ### CiviEvent
321
322 - **Fix Participant Search in force mode to support query parameters in URL
323 ([15791](https://github.com/civicrm/civicrm-core/pull/15791))**
324
325 - **Handling comma separated list of participant statuses in url
326 ([15807](https://github.com/civicrm/civicrm-core/pull/15807))**
327
328 ### CiviMail
329
330 - **DB error in Mail Clickthroughs bar chart display
331 ([dev/core#1434](https://lab.civicrm.org/dev/core/issues/1434):
332 [16000](https://github.com/civicrm/civicrm-core/pull/16000))**
333
334 Fixes the bar chart view on the Mail Clickthroughs report.
335
336 - **Unsubscribe broken if mailing sent to previous mailing recipients with an
337 excluded group ([dev/core#1108](https://lab.civicrm.org/dev/core/issues/1108):
338 [15815](https://github.com/civicrm/civicrm-core/pull/15815))**
339
340 ### Drupal Integration
341
342 - **Implement drupal_get_user_timezone()
343 ([15794](https://github.com/civicrm/civicrm-core/pull/15794))**
344
345 Ensures that the timezone is set using the drupal timezone on Contributions
346 made by anonymous users (Drupal 8).
347
348 ### Joomla Integration
349
350 - **New Accessible Menu Color Picker display issue on Joomla
351 ([dev/core#874](https://lab.civicrm.org/dev/core/issues/874):
352 [15945](https://github.com/civicrm/civicrm-core/pull/15945))**
353
354 Fixes the display of the menubar color picker on Joomla so it looks more like
355 the other CMSes.
356
357 ## <a name="misc"></a>Miscellany
358
359 - **Field metadata cleanup: Contact & Activity & Custom
360 ([15818](https://github.com/civicrm/civicrm-core/pull/15818))**
361
362 - **Create a GitLab general issue template
363 ([15665](https://github.com/civicrm/civicrm-core/pull/15665))**
364
365 - **Don't pass \$input to completeOrder by reference - return values are never
366 used ([15699](https://github.com/civicrm/civicrm-core/pull/15699))**
367
368 - **Fix incorrect reference on extracted function
369 ([15865](https://github.com/civicrm/civicrm-core/pull/15865))**
370
371 - **Add $params type declaration to global API functions.
372 ([15852](https://github.com/civicrm/civicrm-core/pull/15852))**
373
374 - **Add string type declarations to global API functions.
375 ([15864](https://github.com/civicrm/civicrm-core/pull/15864))**
376
377 - **Convert fee selection test to use Order api
378 ([15812](https://github.com/civicrm/civicrm-core/pull/15812))**
379
380 - **Fix CRM_Contribute_BAO_ContributionTest to no longer use unreliable legacy
381 set up method ([15905](https://github.com/civicrm/civicrm-core/pull/15905))**
382
383 - **Sort CMS Database Table list
384 ([15944](https://github.com/civicrm/civicrm-core/pull/15944))**
385
386 - **Rename activity search field from status_id to activity_status_id
387 ([15947](https://github.com/civicrm/civicrm-core/pull/15947))**
388
389 - **CSV Export: Add deprecation warning
390 ([15951](https://github.com/civicrm/civicrm-core/pull/15951))**
391
392 - **Remove CRM_Contact_Form_Search_Custom_Basic from searches added on install.
393 ([15979](https://github.com/civicrm/civicrm-core/pull/15979))**
394
395 - **Add import & export metadata to activity.priority_id
396 ([15993](https://github.com/civicrm/civicrm-core/pull/15993))**
397
398 - **Too many dead people in sample data
399 ([dev/core#1329](https://lab.civicrm.org/dev/core/issues/1329):
400 [15967](https://github.com/civicrm/civicrm-core/pull/15967))**
401
402 - **Update dompdf (0.8.0=>0.8.3) & dependencies
403 ([15739](https://github.com/civicrm/civicrm-core/pull/15739))**
404
405 - **Upgrade ui-sortable angular library to v0.19.0
406 ([15868](https://github.com/civicrm/civicrm-core/pull/15868))**
407
408 - **Remove unused parameter
409 ([15953](https://github.com/civicrm/civicrm-core/pull/15953))**
410
411 - **Remove unused variables in completeOrder()
412 ([15841](https://github.com/civicrm/civicrm-core/pull/15841))**
413
414 - **Make else statement more legible
415 ([15974](https://github.com/civicrm/civicrm-core/pull/15974))**
416
417 - **Code style, remove typo, double ;; from code where it makes sense to do so
418 ([16001](https://github.com/civicrm/civicrm-core/pull/16001))**
419
420 - **Remove obsolete warning
421 ([15786](https://github.com/civicrm/civicrm-core/pull/15786))**
422
423 - **Remove calls to deprecated pseudoconstant activityType, test
424 ([15995](https://github.com/civicrm/civicrm-core/pull/15995))**
425
426 - **Remove unused cancelledStatus assign on contributionView
427 ([16019](https://github.com/civicrm/civicrm-core/pull/16019))**
428
429 - **Remove join to civicrm_option_value in favour of using getLabel funct…
430 ([15734](https://github.com/civicrm/civicrm-core/pull/15734))**
431
432 - **Remove unused functions
433 ([15956](https://github.com/civicrm/civicrm-core/pull/15956))**
434
435 - **Remove unused parameter recur from CompleteOrder signature
436 ([15800](https://github.com/civicrm/civicrm-core/pull/15800))**
437
438 - **[REF] minor refactor - move handling of 'skipMerge' to the skipMerge
439 function ([15828](https://github.com/civicrm/civicrm-core/pull/15828))**
440
441 - **[REF] refactor on nasty Dedupe function
442 ([15830](https://github.com/civicrm/civicrm-core/pull/15830))**
443
444 - **[REF] calculate 'amount' on ContributionPage in a shared way in one scenario
445 ([15810](https://github.com/civicrm/civicrm-core/pull/15810))**
446
447 - **[REF] XMLProcessor/Report - Extract method to make it more testable
448 ([15838](https://github.com/civicrm/civicrm-core/pull/15838))**
449
450 - **[REF] very minor tidy up
451 ([15756](https://github.com/civicrm/civicrm-core/pull/15756))**
452
453 - **[REF] remove another unnecessary pass-by-reference
454 ([15902](https://github.com/civicrm/civicrm-core/pull/15902))**
455
456 - **[REF] Convert CRM_Core_Error::fatal to CRM_Core_Error::statusBounce i…
457 ([15863](https://github.com/civicrm/civicrm-core/pull/15863))**
458
459 - **[REF] CSV Export: Remove impossible checks on var
460 ([15954](https://github.com/civicrm/civicrm-core/pull/15954))**
461
462 - **[REF] Further cleanup on address handling in merge code.
463 ([15950](https://github.com/civicrm/civicrm-core/pull/15950))**
464
465 - **[REF] Move CRM_Event_Form_EventFees::buildQuickForm to Participant_Form
466 class ([15871](https://github.com/civicrm/civicrm-core/pull/15871))**
467
468 - **[REF] Minor simplifcation on initSet
469 ([15870](https://github.com/civicrm/civicrm-core/pull/15870))**
470
471 - **[REF] remove unused lines of code
472 ([15869](https://github.com/civicrm/civicrm-core/pull/15869))**
473
474 - **[REF] Standardise the Grant Search form handling
475 ([15931](https://github.com/civicrm/civicrm-core/pull/15931))**
476
477 - **[REF] further removal of unnecessary params
478 ([15901](https://github.com/civicrm/civicrm-core/pull/15901))**
479
480 - **[REF] Remove unused parameter
481 ([15960](https://github.com/civicrm/civicrm-core/pull/15960))**
482
483 - **[REF] clean up merge array.
484 ([15970](https://github.com/civicrm/civicrm-core/pull/15970))**
485
486 - **[REF] replace copy & paste with shared getSortID function.
487 ([15783](https://github.com/civicrm/civicrm-core/pull/15783))**
488
489 - **[REF] return determination of whether to show expired fields to the calling
490 function ([15934](https://github.com/civicrm/civicrm-core/pull/15934))**
491
492 - **[REF] Minor code cleanup on the setting of contact greetings.
493 ([15949](https://github.com/civicrm/civicrm-core/pull/15949))**
494
495 - **[REF] Standardise form handling in the Find Pledges search form
496 ([15930](https://github.com/civicrm/civicrm-core/pull/15930))**
497
498 - **[REF] Add setSearchMetadata to each of the classes that extend
499 CRM_Core_Form_Search
500 ([15806](https://github.com/civicrm/civicrm-core/pull/15806))**
501
502 - **[REF] extract setDeprecatedDefaults
503 ([15805](https://github.com/civicrm/civicrm-core/pull/15805))**
504
505 - **Add unit test for searching by participant_status_id & switch to generic
506 function ([15803](https://github.com/civicrm/civicrm-core/pull/15803))**
507
508 - **Add testing for various params that pass through
509 Contact_BAO_Query::optionValueQuery
510 ([15996](https://github.com/civicrm/civicrm-core/pull/15996))**
511
512 - **Fix CRM/Event/BAO/AdditionalPaymentTest.php to use Order.create
513 ([15813](https://github.com/civicrm/civicrm-core/pull/15813))**
514
515 - **Test fixes - addresses more invalid setup data
516 ([15802](https://github.com/civicrm/civicrm-core/pull/15802))**
517
518 - **FinancialTrxnTest - Fix unit test to be 'legit'
519 ([15799](https://github.com/civicrm/civicrm-core/pull/15799))**
520
521 - **[Test] Remove hard coded it reference
522 ([15906](https://github.com/civicrm/civicrm-core/pull/15906))**
523
524 - **[Test] fix test setup on ANet tests
525 ([15908](https://github.com/civicrm/civicrm-core/pull/15908))**
526
527 - **CiviCaseTestCase setup() can make duplicate activity type option values
528 (Test for [dev/core#1394](https://lab.civicrm.org/dev/core/issues/1394):
529 [15853](https://github.com/civicrm/civicrm-core/pull/15853))**
530
531 - **[NFC] Add in unit test of code being altered by #15826
532 ([15849](https://github.com/civicrm/civicrm-core/pull/15849))**
533
534 - **[NFC] [Test] Minor test cleanup on CiviMailUtils
535 ([15907](https://github.com/civicrm/civicrm-core/pull/15907))**
536
537 - **(NFC) api_v3_ExtensionTest - Fix when executing on build with 25+ extensions
538 ([15892](https://github.com/civicrm/civicrm-core/pull/15892))**
539
540 - **[NFC] [Test-only] Remove partially paid from statuses tested for
541 RenewContribution
542 ([15866](https://github.com/civicrm/civicrm-core/pull/15866))**
543
544 - **[NFC] Test fix - incorrect records created due to test set up using
545 PartiallyPaid when no payment is made
546 ([15854](https://github.com/civicrm/civicrm-core/pull/15854))**
547
548 - **[NFC] Update composer lockfile to remove warning
549 ([15886](https://github.com/civicrm/civicrm-core/pull/15886))**
550
551 - **[NFC] Cleanup comments, string comparison in grant search
552 ([15983](https://github.com/civicrm/civicrm-core/pull/15983))**
553
554 - **[NFC] cleanup on QueryTest
555 ([15994](https://github.com/civicrm/civicrm-core/pull/15994))**
556
557 - **[NFC] reformat CiviUnitTestCase.php
558 ([15801](https://github.com/civicrm/civicrm-core/pull/15801))**
559
560 - **[NFC] Reformat Contact_Form_Search_Advanced
561 ([15777](https://github.com/civicrm/civicrm-core/pull/15777))**
562
563 - **[NFC] comment fixes - exceptions & don't declare NULL
564 ([15776](https://github.com/civicrm/civicrm-core/pull/15776))**
565
566 - **[NFC] Update copyright date for 2020
567 ([586](https://github.com/civicrm/civicrm-drupal/pull/586))**
568
569 - **Remove copyright & years from all code, except LICENSE.md etc
570 ([dev/core#878](https://lab.civicrm.org/dev/core/issues/878):
571 [588](https://github.com/civicrm/civicrm-drupal/pull/588),
572 [169](https://github.com/civicrm/civicrm-wordpress/pull/169),
573 [15843](https://github.com/civicrm/civicrm-core/pull/15843),
574 [587](https://github.com/civicrm/civicrm-drupal/pull/587) and
575 [104](https://github.com/civicrm/civicrm-backdrop/pull/104))**
576
577 - **[NFC] Update copyright date for 2020
578 ([585](https://github.com/civicrm/civicrm-drupal/pull/585))**
579
580 - **[NFC] Update copyright date for 2020
581 ([270](https://github.com/civicrm/civicrm-packages/pull/270))**
582
583 - **[NFC] Remove dinosaur function
584 ([16010](https://github.com/civicrm/civicrm-core/pull/16010))**
585
586 - **[NFC] code cleanup in test class.
587 ([16026](https://github.com/civicrm/civicrm-core/pull/16026))**
588
589 - **Membership and Event Related Contributions - shows all contributions (Clean
590 up for [dev/core#1435](https://lab.civicrm.org/dev/core/issues/1435):
591 [16023](https://github.com/civicrm/civicrm-core/pull/16023))**
592
593 - **[NFC] Remove unused variable not used since v4.4
594 ([15835](https://github.com/civicrm/civicrm-core/pull/15835))**
595
596 - **(NFC) PULL_REQUEST_TEMPLATE.md - Improve suggestions for
597 under-the-hood/non-UI changes
598 ([15837](https://github.com/civicrm/civicrm-core/pull/15837))**
599
600 - **Duplicate custom field blocks on open case (Add Code Comments for
601 [dev/core#1352](https://lab.civicrm.org/dev/core/issues/1352):
602 [15851](https://github.com/civicrm/civicrm-core/pull/15851))**
603
604 - **[NFC] minimal test for Mailing.update_email_resetdate
605 ([15832](https://github.com/civicrm/civicrm-core/pull/15832))**
606
607 - **[NFC] declare thrown exceptions
608 ([15809](https://github.com/civicrm/civicrm-core/pull/15809))**
609
610 - **[NFC] fix test to correctly set up partially paid contribution
611 ([15867](https://github.com/civicrm/civicrm-core/pull/15867))**
612
613 - **[NFC] Update copyright date for 2020
614 ([167](https://github.com/civicrm/civicrm-wordpress/pull/167))**
615
616 - **[NFC] Update copyright date for 2020
617 ([54](https://github.com/civicrm/civicrm-joomla/pull/54))**
618
619 - **[NFC] Update copyright date for 2020
620 ([15755](https://github.com/civicrm/civicrm-core/pull/15755))**
621
622 - **Update copyright date for 2020
623 ([102](https://github.com/civicrm/civicrm-backdrop/pull/102))**
624
625 - **add contributor name
626 ([15758](https://github.com/civicrm/civicrm-core/pull/15758))**
627
628 ## <a name="credits"></a>Credits
629
630 This release was developed by the following code authors:
631
632 AGH Strategies - Andrew Hunt; Agileware - Justin Freeman; Australian Greens -
633 Seamus Lee; Christian Wach; CiviCRM - Coleman Watts, Tim Otten; CiviDesk -
634 Yashodha Chaku; CompuCorp - Camilo Rodriguez; Coop SymbioTIC - Mathieu Lutfy;
635 Dave D; Electronic Frontier Foundation - Mark Burdett; Fuzion - Jitendra
636 Purohit; Greenpeace CEE - Patrick Figel; Jamie Tillman; Jens Schuppe; JMA
637 Consulting - Monish Deb; Joost Fock; Megaphone Technology Consulting - Jon
638 Goldberg; MJCO - Mikey O'Toole; MJW Consulting - Matthew Wire; Progressive
639 Technology Project - Jamie McClelland; Richard van Oosterhout; Semper IT - Karin
640 Gerritsen; Squiffle Consulting - Aidan Saunders; Tadpole Collective - Kevin
641 Cristiano; Wikimedia Foundation - Eileen McNaughton
642
643 Most authors also reviewed code for this release; in addition, the following
644 reviewers contributed their comments:
645
646 AGH Strategies - Alice Frumin; Artful Robot - Rich Lott; Chris Burgess; Circle
647 Interactive - Dave Jenkins; John Kingsnorth; Freeform Solutions - Lola Slade;
648 OSSeed Technologies LLP - Revati Gawas;
649
650 ## <a name="feedback"></a>Feedback
651
652 These release notes are edited by Alice Frumin and Andrew Hunt. If you'd like
653 to provide feedback on them, please log in to https://chat.civicrm.org/civicrm
654 and contact `@agh1`.