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