| 1 | # CiviCRM 5.38.0 |
| 2 | |
| 3 | Released June 2, 2021 |
| 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?** | **yes** | |
| 21 | | **Introduce features?** | **yes** | |
| 22 | | **Fix bugs?** | **yes** | |
| 23 | |
| 24 | ## <a name="features"></a>Features |
| 25 | |
| 26 | ### Core CiviCRM |
| 27 | |
| 28 | - **Civi::log()->debug() should only log if debugging is enabled |
| 29 | ([community/feature-request#12](https://lab.civicrm.org/community/feature-request/-/issues/12): |
| 30 | [20079](https://github.com/civicrm/civicrm-core/pull/20079))** |
| 31 | |
| 32 | Makes it easier to route log messages based on their topic (e.g. |
| 33 | CiviContribute-related logs vs CiviMail-related logs). |
| 34 | |
| 35 | - **We should not be auto-generating 5.xx.beta1.mysql.tpl files |
| 36 | ([dev/release#16](https://lab.civicrm.org/dev/release/-/issues/16): |
| 37 | [19744](https://github.com/civicrm/civicrm-core/pull/19744))** |
| 38 | |
| 39 | Streamlines the upgrader by removing a number of empty upgrade steps. |
| 40 | |
| 41 | - **SearchBuilder: contact search for tags with child-tags broken when using '=' |
| 42 | operator ([dev/core#2502](https://lab.civicrm.org/dev/core/-/issues/2502): |
| 43 | [20016](https://github.com/civicrm/civicrm-core/pull/20016))** |
| 44 | |
| 45 | Adds unit test for SearchBuilder fix. |
| 46 | |
| 47 | - **Import the base upgrader |
| 48 | ([dev/core#2547](https://lab.civicrm.org/dev/core/-/issues/2547): |
| 49 | [20090](https://github.com/civicrm/civicrm-core/pull/20090))** |
| 50 | |
| 51 | Moves the extension upgrader, base upgrader class to core. |
| 52 | |
| 53 | - **Add contact source column in some Reports |
| 54 | ([20112](https://github.com/civicrm/civicrm-core/pull/20112))** |
| 55 | |
| 56 | Improves reports by adding a contact source column option. |
| 57 | |
| 58 | - **SearchKit - Make contribution tasks available as actions |
| 59 | ([20004](https://github.com/civicrm/civicrm-core/pull/20004))** |
| 60 | |
| 61 | Improves the SearchKit UI by making contribution tasks available as actions. |
| 62 | |
| 63 | - **Move reCAPTCHA to core extension (Work Towards |
| 64 | [dev/core#2571](https://lab.civicrm.org/dev/core/-/issues/2571): |
| 65 | [20166](https://github.com/civicrm/civicrm-core/pull/20166), |
| 66 | [20193](https://github.com/civicrm/civicrm-core/pull/20193) and |
| 67 | [20199](https://github.com/civicrm/civicrm-core/pull/20199))** |
| 68 | |
| 69 | Code cleanup in preparation of moving reCAPTCHA to its own extension. |
| 70 | |
| 71 | - **Api4 Services - Lazy-load subscriber-objects |
| 72 | ([20221](https://github.com/civicrm/civicrm-core/pull/20221))** |
| 73 | |
| 74 | Improves loading of APIv4 subscriber objects. |
| 75 | |
| 76 | - **Authx - Retain authentication outcome/metadata |
| 77 | ([20026](https://github.com/civicrm/civicrm-core/pull/20026))** |
| 78 | |
| 79 | Improves the internal APIs for Authx. Authx supports additional ways to |
| 80 | authenticate requests (e.g. passwords, API keys, JWTs). With this patchset, we |
| 81 | have an internal way to see how the user was authenticated, e.g. |
| 82 | |
| 83 | - **Increase civicrm_queue_item.data field size |
| 84 | ([20107](https://github.com/civicrm/civicrm-core/pull/20107))** |
| 85 | |
| 86 | Changes the data type for the `data` column on the `civicrm_queue_item` table |
| 87 | from TEXT to LONGTEXT. |
| 88 | |
| 89 | - **Include more data in error message |
| 90 | ([20110](https://github.com/civicrm/civicrm-core/pull/20110))** |
| 91 | |
| 92 | More explicit error messaging. |
| 93 | |
| 94 | - **Add 'contact-actions-ribbon' region |
| 95 | ([20108](https://github.com/civicrm/civicrm-core/pull/20108))** |
| 96 | |
| 97 | Adds a region to the top of the contact summary screen where action buttons |
| 98 | go. |
| 99 | |
| 100 | ### CiviContribute |
| 101 | |
| 102 | - **Add pager to bottom of Manage Contribution Pages |
| 103 | ([20061](https://github.com/civicrm/civicrm-core/pull/20061))** |
| 104 | |
| 105 | Improves the UI by adding a pager to the Manage Contribution Pages form. |
| 106 | |
| 107 | - **Add installments to propertyBag |
| 108 | ([20023](https://github.com/civicrm/civicrm-core/pull/20023))** |
| 109 | |
| 110 | Adds installments property to propertyBag. |
| 111 | |
| 112 | - **Define return parameters for doPayment (Work Towards |
| 113 | [dev/financial#141](https://lab.civicrm.org/dev/financial/-/issues/141): |
| 114 | [20021](https://github.com/civicrm/civicrm-core/pull/20021))** |
| 115 | |
| 116 | Ensures the core doPayment function returns payment_status. |
| 117 | |
| 118 | - **Add support for receipt task outside the search process |
| 119 | ([19848](https://github.com/civicrm/civicrm-core/pull/19848))** |
| 120 | |
| 121 | Adds support for url-based receipt sending. |
| 122 | |
| 123 | ### CiviMail |
| 124 | |
| 125 | - **Make it possible to make a copy of a draft mailing |
| 126 | ([dev/mail#90](https://lab.civicrm.org/dev/mail/-/issues/90): |
| 127 | [20058](https://github.com/civicrm/civicrm-core/pull/20058))** |
| 128 | |
| 129 | Allow re-use mailing of draft mailings and adhoc mailings. |
| 130 | |
| 131 | ### Drupal Integration |
| 132 | |
| 133 | - **In Drupal8, CMS intergration don't show table mapping |
| 134 | ([dev/core#2490](https://lab.civicrm.org/dev/core/-/issues/2490): |
| 135 | [19989](https://github.com/civicrm/civicrm-core/pull/19989))** |
| 136 | |
| 137 | Hides table mapping for Drupal8 integrations because it is not necessary. |
| 138 | |
| 139 | - **Consider joining the GitHub Sponsors program (Work Towards |
| 140 | [community/sustainability#20](https://lab.civicrm.org/community/sustainability/-/issues/20): |
| 141 | [644](https://github.com/civicrm/civicrm-drupal/pull/644) and |
| 142 | [63](https://github.com/civicrm/civicrm-drupal-8/pull/63))** |
| 143 | |
| 144 | Add FUNDING.yml to display a SPONSOR link that directs to c.o. |
| 145 | |
| 146 | ## <a name="bugs"></a>Bugs resolved |
| 147 | |
| 148 | ### Core CiviCRM |
| 149 | |
| 150 | - **Create User Record now hides the Password field and uses the check |
| 151 | isUserRegistrationPermitted - which prevents Administrators from setting |
| 152 | passwords for new Users |
| 153 | ([dev/core#2605](https://lab.civicrm.org/dev/core/-/issues/2605): |
| 154 | [20274](https://github.com/civicrm/civicrm-core/pull/20274))** |
| 155 | |
| 156 | This restores the ability for administrators to set passwords for new users on |
| 157 | the Create User Record form. |
| 158 | |
| 159 | - **Activity Type and Case Type not being combined correctly in Advanced Search |
| 160 | ([dev/report#53](https://lab.civicrm.org/dev/report/-/issues/53): |
| 161 | [20002](https://github.com/civicrm/civicrm-core/pull/20002))** |
| 162 | |
| 163 | Ensures when running an advanced search that displays related contacts with case |
| 164 | parameters set, only contacts related to the relevant cases are displayed. |
| 165 | |
| 166 | - **Upgrade CKEditor to be 4.16.1 |
| 167 | ([20428](https://github.com/civicrm/civicrm-core/pull/20428))** |
| 168 | |
| 169 | Change log is here https://github.com/ckeditor/ckeditor4/blob/major/CHANGES.md |
| 170 | |
| 171 | - **Fix invalidate cache for smart groups |
| 172 | ([dev/core#2516](https://lab.civicrm.org/dev/core/-/issues/2516): |
| 173 | [19986](https://github.com/civicrm/civicrm-core/pull/19986))** |
| 174 | |
| 175 | Method CRM_Contact_BAO_GroupContactCache::invalidateGroupContactCache() is |
| 176 | described as touching smart groups but there is no condition for smart groups. |
| 177 | |
| 178 | - **APIv4 - Fix unserialize settings |
| 179 | ([20048](https://github.com/civicrm/civicrm-core/pull/20048))** |
| 180 | |
| 181 | Fixes a bug in the APIv4 "Setting" entity where serialized values were not |
| 182 | getting returned properly. |
| 183 | |
| 184 | - **Globally reset angular hashPrefix |
| 185 | ([20152](https://github.com/civicrm/civicrm-core/pull/20152))** |
| 186 | |
| 187 | Globally reset the AngularJS hash prefix for consistency across all modules |
| 188 | and pages in CiviCRM. |
| 189 | |
| 190 | - **PayPal fails to create contribution following duplicate merge when |
| 191 | membership record has been deleted |
| 192 | ([dev/core#2593](https://lab.civicrm.org/dev/core/-/issues/2593): |
| 193 | [20244](https://github.com/civicrm/civicrm-core/pull/20244))** |
| 194 | |
| 195 | Stop passing membership id into recur notify. |
| 196 | |
| 197 | - **Afform - Set default position for contact layout editor |
| 198 | ([20228](https://github.com/civicrm/civicrm-core/pull/20228))** |
| 199 | |
| 200 | Makes Afform blocks appear in their default positions in the "System Default" |
| 201 | layout in Contact Summary Editor 2.0+. |
| 202 | |
| 203 | - **Search Kit links improvements |
| 204 | ([20134](https://github.com/civicrm/civicrm-core/pull/20134))** |
| 205 | |
| 206 | Fixes some problems with creating links in Search Kit and improves the UX |
| 207 | around editing links. |
| 208 | |
| 209 | - **Uninstall for `org.civicrm.search` extension fails |
| 210 | ([dev/core#2556](https://lab.civicrm.org/dev/core/-/issues/2556): |
| 211 | [20124](https://github.com/civicrm/civicrm-core/pull/20124))** |
| 212 | |
| 213 | Renames the extension org.civicrm.search to org.civicrm.search_kit. |
| 214 | |
| 215 | - **Redundant indexes (Work Towards |
| 216 | [dev/core#2575](https://lab.civicrm.org/dev/core/-/issues/2575): |
| 217 | [20245](https://github.com/civicrm/civicrm-core/pull/20245))** |
| 218 | |
| 219 | Removes a couple of indexes on the id field as they are duplicates. |
| 220 | |
| 221 | - **system workflow template uses backend URL |
| 222 | ([dev/core#2582](https://lab.civicrm.org/dev/core/-/issues/2582): |
| 223 | [20203](https://github.com/civicrm/civicrm-core/pull/20203))** |
| 224 | |
| 225 | - **Unable to send transactional email to more than 2 recipients if there is an |
| 226 | attachment ([dev/core#2588](https://lab.civicrm.org/dev/core/-/issues/2588): |
| 227 | [20222](https://github.com/civicrm/civicrm-core/pull/20222) and |
| 228 | [20227](https://github.com/civicrm/civicrm-core/pull/20227))** |
| 229 | |
| 230 | - **Afform - Fix saving joined entities (email, address, phone, etc) |
| 231 | ([20264](https://github.com/civicrm/civicrm-core/pull/20264))** |
| 232 | |
| 233 | - **Afform - Fix loading entities from url args |
| 234 | ([20145](https://github.com/civicrm/civicrm-core/pull/20145))** |
| 235 | |
| 236 | - **Afform - Improve integration with ContactLayout editor |
| 237 | ([20042](https://github.com/civicrm/civicrm-core/pull/20042))** |
| 238 | |
| 239 | - **Afform - include Generic.html by default |
| 240 | ([dev/core#2533](https://lab.civicrm.org/dev/core/-/issues/2533): |
| 241 | [20141](https://github.com/civicrm/civicrm-core/pull/20141))** |
| 242 | |
| 243 | - **SearchKit - Fix updating Entity Ref fields |
| 244 | ([20125](https://github.com/civicrm/civicrm-core/pull/20125))** |
| 245 | |
| 246 | - **SearchKit - Exclude serialized fields from implicit join selection |
| 247 | ([20156](https://github.com/civicrm/civicrm-core/pull/20156))** |
| 248 | |
| 249 | - **SearchKit - Fix display of contact reference fields (single-value) |
| 250 | ([20117](https://github.com/civicrm/civicrm-core/pull/20117))** |
| 251 | |
| 252 | - **APIv4 - Setting api misc fixes & tests |
| 253 | ([20191](https://github.com/civicrm/civicrm-core/pull/20191))** |
| 254 | |
| 255 | - **Save entities created by api v4 to managed |
| 256 | ([20105](https://github.com/civicrm/civicrm-core/pull/20105))** |
| 257 | |
| 258 | - **APIv4 - Fix Setting api to work with index param |
| 259 | ([20072](https://github.com/civicrm/civicrm-core/pull/20072))** |
| 260 | |
| 261 | - **Fix enotice when Log service is swapped out |
| 262 | ([20146](https://github.com/civicrm/civicrm-core/pull/20146))** |
| 263 | |
| 264 | - **Fix PayPal IPN URL and WordPress URLs when Permalinks are set to "Plain" |
| 265 | ([20063](https://github.com/civicrm/civicrm-core/pull/20063))** |
| 266 | |
| 267 | - **fix capitalization to allow proper access to 'access AJAX API' perm. |
| 268 | ([20200](https://github.com/civicrm/civicrm-core/pull/20200))** |
| 269 | |
| 270 | - **Fix a copy-and-paste error in the field definitions for OAuthSysToken |
| 271 | ([20157](https://github.com/civicrm/civicrm-core/pull/20157))** |
| 272 | |
| 273 | - **Fixes issue with state/province & country not translating values |
| 274 | ([20169](https://github.com/civicrm/civicrm-core/pull/20169))** |
| 275 | |
| 276 | - **Enotice fix ([20122](https://github.com/civicrm/civicrm-core/pull/20122))** |
| 277 | |
| 278 | - **Extensions - Setup `<classloader>` during installation |
| 279 | ([20091](https://github.com/civicrm/civicrm-core/pull/20091))** |
| 280 | |
| 281 | - **Extensions - Setup <classloader> during "enable" and "uninstall" |
| 282 | ([20116](https://github.com/civicrm/civicrm-core/pull/20116))** |
| 283 | |
| 284 | - **Fix for importing preferred language (and other fields) by label |
| 285 | ([19886](https://github.com/civicrm/civicrm-core/pull/19886))** |
| 286 | |
| 287 | - **Fix AuthX Setting Labels |
| 288 | ([20055](https://github.com/civicrm/civicrm-core/pull/20055))** |
| 289 | |
| 290 | - **Removed limit of 25 groups and past mailings |
| 291 | ([20069](https://github.com/civicrm/civicrm-core/pull/20069))** |
| 292 | |
| 293 | - **When generating boilerplate code from xml, make error text more helpful and |
| 294 | spelt correctly |
| 295 | ([20054](https://github.com/civicrm/civicrm-core/pull/20054))** |
| 296 | |
| 297 | - **File CustomField: avoid renaming an empty file |
| 298 | ([19890](https://github.com/civicrm/civicrm-core/pull/19890))** |
| 299 | |
| 300 | - **Calling UFGroup.create to update a profile without specifying is_active=1 |
| 301 | disables the profile |
| 302 | ([dev/core#2501](https://lab.civicrm.org/dev/core/-/issues/2501): |
| 303 | [19995](https://github.com/civicrm/civicrm-core/pull/19995))** |
| 304 | |
| 305 | - **CiviReport does not localize custom fields of type Number |
| 306 | ([dev/core#2505](https://lab.civicrm.org/dev/core/-/issues/2505): |
| 307 | [20123](https://github.com/civicrm/civicrm-core/pull/20123) and |
| 308 | [20053](https://github.com/civicrm/civicrm-core/pull/20053))** |
| 309 | |
| 310 | - **Autocomplete-select custom field (Multi-Select=true) values with checked are |
| 311 | reset in case of form rule errors |
| 312 | ([dev/core#2506](https://lab.civicrm.org/dev/core/-/issues/2506): |
| 313 | [20137](https://github.com/civicrm/civicrm-core/pull/20137))** |
| 314 | |
| 315 | - **Search kit: Links to case (and other) activities go to the wrong form |
| 316 | ([dev/core#2509](https://lab.civicrm.org/dev/core/-/issues/2509): |
| 317 | [20118](https://github.com/civicrm/civicrm-core/pull/20118), |
| 318 | [20114](https://github.com/civicrm/civicrm-core/pull/20114) |
| 319 | [20060](https://github.com/civicrm/civicrm-core/pull/20060) and |
| 320 | [20106](https://github.com/civicrm/civicrm-core/pull/20106))** |
| 321 | |
| 322 | - **Empty extension requires tag misevaluated |
| 323 | ([dev/core#2536](https://lab.civicrm.org/dev/core/-/issues/2536): |
| 324 | [20064](https://github.com/civicrm/civicrm-core/pull/20064))** |
| 325 | |
| 326 | - **Clarify scheduled reminder options: Event Start Date -> Event Start, etc |
| 327 | ([dev/core#2541](https://lab.civicrm.org/dev/core/-/issues/2541): |
| 328 | [20070](https://github.com/civicrm/civicrm-core/pull/20070))** |
| 329 | |
| 330 | - **Errors on merging contacts with websites |
| 331 | ([dev/core#2549](https://lab.civicrm.org/dev/core/-/issues/2549): |
| 332 | [20101](https://github.com/civicrm/civicrm-core/pull/20101))** |
| 333 | |
| 334 | ### CiviCampaign |
| 335 | |
| 336 | - **Set html type of campaign fields |
| 337 | ([20215](https://github.com/civicrm/civicrm-core/pull/20215))** |
| 338 | |
| 339 | Cleanup metadata for the campaign_id field. |
| 340 | |
| 341 | - **Petition confirmation email places space at end of confirmation URL |
| 342 | ([dev/core#403](https://lab.civicrm.org/dev/core/-/issues/403): |
| 343 | [20080](https://github.com/civicrm/civicrm-core/pull/20080))** |
| 344 | |
| 345 | Remove trailing white space in url. |
| 346 | |
| 347 | - **APIv4 - Don't show campaign_id in getFields if campaign component disabled |
| 348 | ([20219](https://github.com/civicrm/civicrm-core/pull/20219))** |
| 349 | |
| 350 | ### CiviContribute |
| 351 | |
| 352 | - **Undefined index: contribution in |
| 353 | CRM_Contribute_BAO_Contribution::getContributionTokenValues() |
| 354 | ([dev/core#2568](https://lab.civicrm.org/dev/core/-/issues/2568): |
| 355 | [20188](https://github.com/civicrm/civicrm-core/pull/20188))** |
| 356 | |
| 357 | Fixes an undefined index error after sending thank-you emails/letters for |
| 358 | contributions. |
| 359 | |
| 360 | - **CiviCRM 5.35.1, truncation of money values where $1,000 donation is recorded |
| 361 | as $1 which appears to be truncating at the thousand separator when using the |
| 362 | Australian (AU) and US Locale |
| 363 | ([dev/core#2493](https://lab.civicrm.org/dev/core/-/issues/2493): |
| 364 | [19991](https://github.com/civicrm/civicrm-core/pull/19991))** |
| 365 | |
| 366 | Default to not cleaning money for order.create api. |
| 367 | |
| 368 | - **Recurring contributions label on contribution pages is unstylable text, |
| 369 | leading to problems with themes |
| 370 | ([dev/core#1452](https://lab.civicrm.org/dev/core/-/issues/1452): |
| 371 | [20092](https://github.com/civicrm/civicrm-core/pull/20092))** |
| 372 | |
| 373 | - **Fix money formatting opps |
| 374 | ([20277](https://github.com/civicrm/civicrm-core/pull/20277))** |
| 375 | |
| 376 | - **Make reCAPTCHA not conditional on paymentprocessor on contribution page |
| 377 | ([20180](https://github.com/civicrm/civicrm-core/pull/20180))** |
| 378 | |
| 379 | - **Contribution.sendconfirmation API3 function should return |
| 380 | ([20182](https://github.com/civicrm/civicrm-core/pull/20182))** |
| 381 | |
| 382 | - **Suppress legacy warnings by default in propertyBag to allow transition to |
| 383 | propertyBag without hitting legacy warnings on unconverted payment processors |
| 384 | ([20038](https://github.com/civicrm/civicrm-core/pull/20038))** |
| 385 | |
| 386 | - **Make it clear that doDirectPayment/doTransferCheckout are deprecated and |
| 387 | should not be used |
| 388 | ([20020](https://github.com/civicrm/civicrm-core/pull/20020))** |
| 389 | |
| 390 | - **Fix Payment.create to update (recalculate) contribution fee_amount |
| 391 | ([20008](https://github.com/civicrm/civicrm-core/pull/20008))** |
| 392 | |
| 393 | ### CiviEvent |
| 394 | |
| 395 | - **Cannot "Transfer or Cancel" event participant as admin user |
| 396 | ([dev/event#54](https://lab.civicrm.org/dev/event/-/issues/54): |
| 397 | [20150](https://github.com/civicrm/civicrm-core/pull/20150))** |
| 398 | |
| 399 | ### CiviMember |
| 400 | |
| 401 | - **Set the smarty variables for mem_status and mem_join_date for back-end |
| 402 | membership renewals |
| 403 | ([20224](https://github.com/civicrm/civicrm-core/pull/20224))** |
| 404 | |
| 405 | - **Membership form Remove check for installments as not on the form (copied |
| 406 | from shared code) |
| 407 | ([19964](https://github.com/civicrm/civicrm-core/pull/19964))** |
| 408 | |
| 409 | ### Drupal integration |
| 410 | |
| 411 | - **Make APIv4 Subscribers Public to fix D9 install |
| 412 | ([20254](https://github.com/civicrm/civicrm-core/pull/20254))** |
| 413 | |
| 414 | Fixes a "The "Civi_Api4_Event_Subscriber_PermissionCheckSubscriber" service or |
| 415 | alias has been removed..." failure on the D9 demo install. |
| 416 | |
| 417 | - **Fix Drupal8 CiviCRM menu translation on multilingual (and ajax calls) |
| 418 | ([20085](https://github.com/civicrm/civicrm-core/pull/20085))** |
| 419 | |
| 420 | ### Joomla integration |
| 421 | |
| 422 | - **Cannot edit CiviCRM Joomla permissions (access control) in 5.37.0 |
| 423 | ([dev/core#2601](https://lab.civicrm.org/dev/core/-/issues/2601): |
| 424 | [20256](https://github.com/civicrm/civicrm-core/pull/20256))** |
| 425 | |
| 426 | ### Wordpress Integration |
| 427 | |
| 428 | - **WordPress - redirect after login from event registration or contribution |
| 429 | page ([dev/core#2436](https://lab.civicrm.org/dev/core/-/issues/2436): |
| 430 | [19718](https://github.com/civicrm/civicrm-core/pull/19718))** |
| 431 | |
| 432 | - **Update WP permission page for new string array keys |
| 433 | ([20045](https://github.com/civicrm/civicrm-core/pull/20045))** |
| 434 | |
| 435 | ## <a name="misc"></a>Miscellany |
| 436 | |
| 437 | - **Add amount as standard property to PaymentPropertyBag |
| 438 | ([20037](https://github.com/civicrm/civicrm-core/pull/20037))** |
| 439 | |
| 440 | - **Use propertyBag in doPayment |
| 441 | ([20022](https://github.com/civicrm/civicrm-core/pull/20022))** |
| 442 | |
| 443 | - **Move tpl assignment to email function |
| 444 | ([20013](https://github.com/civicrm/civicrm-core/pull/20013))** |
| 445 | |
| 446 | - **Initial refactor of PayPal core processor to stop using |
| 447 | doDirectPayment/doTransferCheckout |
| 448 | ([20030](https://github.com/civicrm/civicrm-core/pull/20030))** |
| 449 | |
| 450 | - **Convert Dummy payment processor to use doPayment function |
| 451 | ([20029](https://github.com/civicrm/civicrm-core/pull/20029))** |
| 452 | |
| 453 | - **Switch to Call contribution api |
| 454 | ([20041](https://github.com/civicrm/civicrm-core/pull/20041))** |
| 455 | |
| 456 | - **Alter dedupe code to call api rather than bao->save() |
| 457 | ([20036](https://github.com/civicrm/civicrm-core/pull/20036))** |
| 458 | |
| 459 | - **Fix the MOST out-of-date parts of the afform readme |
| 460 | ([20100](https://github.com/civicrm/civicrm-core/pull/20100))** |
| 461 | |
| 462 | - **oauth-client - Add test for existing Auth Code flow behavior |
| 463 | ([20162](https://github.com/civicrm/civicrm-core/pull/20162))** |
| 464 | |
| 465 | - **add me ([20183](https://github.com/civicrm/civicrm-core/pull/20183))** |
| 466 | |
| 467 | - **Make send letter function available to searchkit, individual contributions |
| 468 | ([20187](https://github.com/civicrm/civicrm-core/pull/20187))** |
| 469 | |
| 470 | - **Extract sales tax test config to a trait |
| 471 | ([20233](https://github.com/civicrm/civicrm-core/pull/20233))** |
| 472 | |
| 473 | - **APIv4 - Remove unnecessary custom getActions class |
| 474 | ([20181](https://github.com/civicrm/civicrm-core/pull/20181))** |
| 475 | |
| 476 | - **APIv4 - Remove unnecessary class override (handled by generic) |
| 477 | ([20173](https://github.com/civicrm/civicrm-core/pull/20173))** |
| 478 | |
| 479 | - **APIv4 - Improve entity name lookup |
| 480 | ([20056](https://github.com/civicrm/civicrm-core/pull/20056))** |
| 481 | |
| 482 | - **APIv4 - Deprecate nonstandard syntax for implicit joins |
| 483 | ([20130](https://github.com/civicrm/civicrm-core/pull/20130))** |
| 484 | |
| 485 | - **Extract out getReceiveDate |
| 486 | ([20007](https://github.com/civicrm/civicrm-core/pull/20007))** |
| 487 | |
| 488 | - **Simplify mailing check |
| 489 | ([20076](https://github.com/civicrm/civicrm-core/pull/20076))** |
| 490 | |
| 491 | - **Remove unused functions |
| 492 | ([20099](https://github.com/civicrm/civicrm-core/pull/20099))** |
| 493 | |
| 494 | - **Replace string org.civicrm.search -> org.civicrm.search_kit |
| 495 | ([20132](https://github.com/civicrm/civicrm-core/pull/20132))** |
| 496 | |
| 497 | - **Move more functions to the pdfLetter class |
| 498 | ([20143](https://github.com/civicrm/civicrm-core/pull/20143))** |
| 499 | |
| 500 | - **Remove apparent copy & paste from Contribution pdf letter function |
| 501 | ([20161](https://github.com/civicrm/civicrm-core/pull/20161))** |
| 502 | |
| 503 | - **Remove reference to trxn_id, not on form, from previously shared code |
| 504 | ([19965](https://github.com/civicrm/civicrm-core/pull/19965))** |
| 505 | |
| 506 | - **Add deprected warning to apparently unused functions |
| 507 | ([20192](https://github.com/civicrm/civicrm-core/pull/20192))** |
| 508 | |
| 509 | - **[REF] Add strict types to Utils_Mail::Send |
| 510 | ([20171](https://github.com/civicrm/civicrm-core/pull/20171))** |
| 511 | |
| 512 | - **REF Cleanup ReCAPTCHA code |
| 513 | ([20167](https://github.com/civicrm/civicrm-core/pull/20167))** |
| 514 | |
| 515 | - **[REF] Post move cleanup - switch from $form to $this |
| 516 | ([20160](https://github.com/civicrm/civicrm-core/pull/20160))** |
| 517 | |
| 518 | - **REF reCAPTCHA Simplify buildCustom function on Registration form |
| 519 | ([20164](https://github.com/civicrm/civicrm-core/pull/20164))** |
| 520 | |
| 521 | - **REF reCAPTCHA Simplify buildCustom function on Signature form |
| 522 | ([20165](https://github.com/civicrm/civicrm-core/pull/20165))** |
| 523 | |
| 524 | - **[REF] Minor tidy up - use writeRecord |
| 525 | ([20159](https://github.com/civicrm/civicrm-core/pull/20159))** |
| 526 | |
| 527 | - **[REF] Move more functions back to pdfLetter class |
| 528 | ([20155](https://github.com/civicrm/civicrm-core/pull/20155))** |
| 529 | |
| 530 | - **[REF] Fix Security status check urls to work on WordPress |
| 531 | ([20111](https://github.com/civicrm/civicrm-core/pull/20111))** |
| 532 | |
| 533 | - **[REF] Move functions back to class that uses it |
| 534 | ([20136](https://github.com/civicrm/civicrm-core/pull/20136))** |
| 535 | |
| 536 | - **[Ref] Simplify getMembershipParameters |
| 537 | ([20014](https://github.com/civicrm/civicrm-core/pull/20014))** |
| 538 | |
| 539 | - **(REF) Payflow Pro - Migrate code into a core extension |
| 540 | ([20043](https://github.com/civicrm/civicrm-core/pull/20043))** |
| 541 | |
| 542 | - **[REF] Minor code cleanup |
| 543 | ([20175](https://github.com/civicrm/civicrm-core/pull/20175))** |
| 544 | |
| 545 | - **[REF] Complete decommissioning of |
| 546 | CRM/Contribute/Form/Task/PDFLetterCommon.php |
| 547 | ([20172](https://github.com/civicrm/civicrm-core/pull/20172))** |
| 548 | |
| 549 | - **[REF] Cleanup interaction with membership & membership id |
| 550 | ([20153](https://github.com/civicrm/civicrm-core/pull/20153))** |
| 551 | |
| 552 | - **[REF] Fix error where entryURL does not contain id of the contributio… |
| 553 | ([19917](https://github.com/civicrm/civicrm-core/pull/19917))** |
| 554 | |
| 555 | - **[REF] Simplify interaction with contributionRecur |
| 556 | ([20017](https://github.com/civicrm/civicrm-core/pull/20017))** |
| 557 | |
| 558 | - **[REF] Minor tidy up |
| 559 | ([20194](https://github.com/civicrm/civicrm-core/pull/20194))** |
| 560 | |
| 561 | - **[REF] Remove redundant code |
| 562 | ([20138](https://github.com/civicrm/civicrm-core/pull/20138))** |
| 563 | |
| 564 | - **[REF] [ipn] Simplification around contributionRecur ID |
| 565 | ([19903](https://github.com/civicrm/civicrm-core/pull/19903))** |
| 566 | |
| 567 | - **REF Update Pear/log to fix issues with install CiviCRM on Drupal 9.2 |
| 568 | ([20218](https://github.com/civicrm/civicrm-core/pull/20218))** |
| 569 | |
| 570 | - **[REF] [Towards membership api] extract getContributionSource |
| 571 | ([19966](https://github.com/civicrm/civicrm-core/pull/19966))** |
| 572 | |
| 573 | - **[REF] [Towards membership api] Simplify determination on contribution recur |
| 574 | contact id ([19902](https://github.com/civicrm/civicrm-core/pull/19902))** |
| 575 | |
| 576 | - **[Ref] One more place to use total fn |
| 577 | ([20010](https://github.com/civicrm/civicrm-core/pull/20010))** |
| 578 | |
| 579 | - **[NFC] Consistency fix when defining CIVICRM_TEST |
| 580 | ([64](https://github.com/civicrm/civicrm-drupal-8/pull/64))** |
| 581 | |
| 582 | - **[NFC] [Test] Minor preliminary cleanup |
| 583 | ([20006](https://github.com/civicrm/civicrm-core/pull/20006))** |
| 584 | |
| 585 | - **[NFC] [Test] Preliminary cleanup |
| 586 | ([20012](https://github.com/civicrm/civicrm-core/pull/20012))** |
| 587 | |
| 588 | - **[NFC] Code cleanup, docblocks, strict comparison, type hints |
| 589 | ([20240](https://github.com/civicrm/civicrm-core/pull/20240))** |
| 590 | |
| 591 | - **[NFC] code cleanups in test class |
| 592 | ([20237](https://github.com/civicrm/civicrm-core/pull/20237))** |
| 593 | |
| 594 | - **[NFC] Regenerate Grant DAO |
| 595 | ([20104](https://github.com/civicrm/civicrm-core/pull/20104))** |
| 596 | |
| 597 | - **[NFC/Unit Test] - Help avoid problems when using assertApproxEquals with |
| 598 | integers instead of fractions |
| 599 | ([20089](https://github.com/civicrm/civicrm-core/pull/20089))** |
| 600 | |
| 601 | - **(NFC) Fix possible flacky tests by splitting the parts of the checksum |
| 602 | ([20088](https://github.com/civicrm/civicrm-core/pull/20088))** |
| 603 | |
| 604 | - **Add unit test for core#19628 |
| 605 | ([19972](https://github.com/civicrm/civicrm-core/pull/19972))** |
| 606 | |
| 607 | ## <a name="credits"></a>Credits |
| 608 | |
| 609 | This release was developed by the following code authors: |
| 610 | |
| 611 | AGH Strategies - Alice Frumin, Andie Hunt; Agileware - Francis Whittle, Justin |
| 612 | Freeman; Benjamin W; Caltha - Tomasz Pietrzkowski; Christian Wach; CiviCoop - |
| 613 | Jaap Jansma; CiviCRM - Coleman Watts, Tim Otten; CompuCorp - Ahed Eid, Omar Abu |
| 614 | Hussein; Coop SymbioTIC - Mathieu Lutfy; Dave D; Francesc Bassas i Bullich; |
| 615 | Fuzion - Jitendra Purohit; iXiam - Vangelis Pantazis; JMA Consulting - Monish |
| 616 | Deb, Seamus Lee; John Kingsnorth; Kartik Kathuria; Wildsight - Lars SG; |
| 617 | Lemniscus - Noah Miller; Megaphone Technology Consulting - Jon Goldberg; MJCO - |
| 618 | Mikey O'Toole; MJW Consulting - Matthew Wire; Olivier Hertrich; Progressive |
| 619 | Technology Project - Jamie McClelland; Squiffle Consulting - Aidan Saunders; |
| 620 | Wikimedia Foundation - Eileen McNaughton |
| 621 | |
| 622 | Most authors also reviewed code for this release; in addition, the following |
| 623 | reviewers contributed their comments: |
| 624 | |
| 625 | Artful Robot - Rich Lott; Australian Greens - John Twyman; Caltha - Tomasz |
| 626 | Pietrzkowski; Christian Wach; CiviCoop - Jaap Jansma; CiviDesk - Yashodha Chaku; |
| 627 | JMA Consulting - Edsel Lopez, Joe Murray; Richard van Oosterhout; Semper IT - |
| 628 | Karin Gerritsen; SYSTOPIA Organisationsberatung - Björn Endres; Tadpole |
| 629 | Collective - Kevin Cristiano; Web Access - Kurund Jalmi |
| 630 | |
| 631 | ## <a name="feedback"></a>Feedback |
| 632 | |
| 633 | These release notes are edited by Alice Frumin and Andie Hunt. If you'd like |
| 634 | to provide feedback on them, please log in to https://chat.civicrm.org/civicrm |
| 635 | and contact `@agh1`. |