| 1 | # CiviCRM 5.40.0 |
| 2 | |
| 3 | Released August 5, 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 | - **Move check for presence of the phone strip function to a Check (currently |
| 29 | done whenever a phone number is edited) |
| 30 | ([dev/core#27](https://lab.civicrm.org/dev/core/-/issues/27): |
| 31 | [20757](https://github.com/civicrm/civicrm-core/pull/20757))** |
| 32 | |
| 33 | CiviCRM relies on a MySQL function to generate a numeric-only version of phone |
| 34 | numbers. This change adds a system check to ensure the function exists |
| 35 | instead of checking for the function each time a phone number is added or |
| 36 | edited. |
| 37 | |
| 38 | - **Add calling function to deprecatedWarning log message |
| 39 | ([20719](https://github.com/civicrm/civicrm-core/pull/20719))** |
| 40 | |
| 41 | Improves logging. |
| 42 | |
| 43 | - **Add contact-summary-image region |
| 44 | ([20662](https://github.com/civicrm/civicrm-core/pull/20662))** |
| 45 | |
| 46 | Adds a new region around the contact summary image. |
| 47 | |
| 48 | - **Replace extension key with description in 'Add New' tab |
| 49 | ([20720](https://github.com/civicrm/civicrm-core/pull/20720))** |
| 50 | |
| 51 | Improves the "Extensions" -> "Add New" form user experience by displaying the |
| 52 | description below the extension name instead of the extension key. |
| 53 | |
| 54 | - **User experience improvement - Remove the confusing mixed terminology used to |
| 55 | describe Tags: "Tags (Categories)" and "Tag (Category)" |
| 56 | ([20268](https://github.com/civicrm/civicrm-core/pull/20268))** |
| 57 | |
| 58 | Improves user experience by removing the term "Category" when referencing |
| 59 | tags. |
| 60 | |
| 61 | - **Improve output triggers when logged to file |
| 62 | ([20472](https://github.com/civicrm/civicrm-core/pull/20472))** |
| 63 | |
| 64 | Improves output triggers when logged to a file by adding an asort, putting all |
| 65 | the triggers into an array keyed by the statement and opening and closing the |
| 66 | delimiters just once. |
| 67 | |
| 68 | - **Show smarty E-notices when in debug mode |
| 69 | ([20640](https://github.com/civicrm/civicrm-core/pull/20640))** |
| 70 | |
| 71 | Improves the user experience in debug mode by showing php notices (e.g. |
| 72 | "undefined variable"). |
| 73 | |
| 74 | - **Add pseudoconstant to acl_entity_role |
| 75 | ([20566](https://github.com/civicrm/civicrm-core/pull/20566))** |
| 76 | |
| 77 | Adds a pseudoconstant for `acl_entity_role`. |
| 78 | |
| 79 | - **[php8-compact] Allow for CiviCRM to be installed by 3rd parties using |
| 80 | composer on php8 systems |
| 81 | ([20625](https://github.com/civicrm/civicrm-core/pull/20625))** |
| 82 | |
| 83 | Makes it so sites can install and update CiviCRM via CLI when their CLI uses |
| 84 | PHP8. |
| 85 | |
| 86 | ### Afform and SearchKit |
| 87 | |
| 88 | - **Searchkit display with event location data |
| 89 | ([dev/core#2676](https://lab.civicrm.org/dev/core/-/issues/2676): |
| 90 | [20746](https://github.com/civicrm/civicrm-core/pull/20746))** |
| 91 | |
| 92 | Adds LocBlock entity to display event location data in SearchKit. |
| 93 | |
| 94 | - **SearchKit - Allow super admins to disable Search Display access checks |
| 95 | ([20607](https://github.com/civicrm/civicrm-core/pull/20607))** |
| 96 | |
| 97 | Allows users with 'all CiviCRM permissions and ACLs' to configure a search |
| 98 | display to bypass permission checks and display all records to the user. |
| 99 | |
| 100 | - **SearchKit - Add translatable descriptions to entities |
| 101 | ([20598](https://github.com/civicrm/civicrm-core/pull/20598))** |
| 102 | |
| 103 | Adds user-friendly descriptions to the top-level entities in SearchKit, and |
| 104 | makes it possible to add them to other entities as well. |
| 105 | |
| 106 | - **SearchKit - Show Pledge as a primary entity |
| 107 | ([20589](https://github.com/civicrm/civicrm-core/pull/20589))** |
| 108 | |
| 109 | Shows Pledges as a primary entity in SearchKit, since it has its own tab on |
| 110 | the contact summary screen. |
| 111 | |
| 112 | - **SearchKit - Add ability to join on multi-select ContactRef fields |
| 113 | ([20764](https://github.com/civicrm/civicrm-core/pull/20764))** |
| 114 | |
| 115 | Improves support for custom contact Reference fields in APIv4, SearchKit, and |
| 116 | Afform. Makes it possible to save, search for, and filter by serialized |
| 117 | (multi-select) custom Contact Reference fields. |
| 118 | |
| 119 | ### API version 4 |
| 120 | |
| 121 | - **Improve api consistency on custom field creation |
| 122 | ([20743](https://github.com/civicrm/civicrm-core/pull/20743))** |
| 123 | |
| 124 | Makes it so the parameter "option_type" is not needed to create an |
| 125 | option_value in APIv4. |
| 126 | |
| 127 | - **APIv4 Explorer: show joins for write actions |
| 128 | ([20731](https://github.com/civicrm/civicrm-core/pull/20731))** |
| 129 | |
| 130 | Displays information about joins for write operations in the API Explorer. |
| 131 | |
| 132 | - **APIv4 - Add `@since` annotation to each entity |
| 133 | ([20701](https://github.com/civicrm/civicrm-core/pull/20701))** |
| 134 | |
| 135 | Adds since version for each entity to APIv4 code documentation. |
| 136 | |
| 137 | - **APIv4 - Allow FK dot notation in create/update/save actions |
| 138 | ([20677](https://github.com/civicrm/civicrm-core/pull/20677))** |
| 139 | |
| 140 | Makes it possible to reference other entities during create without knowing |
| 141 | their ID when using the APIv4. Makes it easier to package entities e.g. with |
| 142 | civicrm_managed. |
| 143 | |
| 144 | - **APIv4 - Add filter for entity tags |
| 145 | ([20573](https://github.com/civicrm/civicrm-core/pull/20573))** |
| 146 | |
| 147 | Adds a SearchKit/APIv4 filter for tags similar to the "groups" filter recently |
| 148 | added to SearchKit. |
| 149 | |
| 150 | - **APIv4 - add is_current as a pseudo (calculated) field |
| 151 | ([20586](https://github.com/civicrm/civicrm-core/pull/20586))** |
| 152 | |
| 153 | Adds an "is_current" field to SearchKit for relationships, events & campaigns. |
| 154 | It checks that the record is active and has a non-past end date and a |
| 155 | non-future start date. |
| 156 | |
| 157 | - **APIv4 Explorer - When joining via EntityBridge, make bridge fields |
| 158 | selectable ([20721](https://github.com/civicrm/civicrm-core/pull/20721))** |
| 159 | |
| 160 | Improves the APIv4 Explorer by displaying bridge fields. |
| 161 | |
| 162 | - **Canonize API for storing translated data (Work Towards |
| 163 | [dev/translation#67](https://lab.civicrm.org/dev/translation/-/issues/67): |
| 164 | [20606](https://github.com/civicrm/civicrm-core/pull/20606) and |
| 165 | [20584](https://github.com/civicrm/civicrm-core/pull/20584))** |
| 166 | |
| 167 | Adds APIv4 support for the "Translation" entity. Allows translation of fields |
| 168 | which lack an explicit HTML type. |
| 169 | |
| 170 | - **Apiv4 entity parity |
| 171 | (Work Towards [dev/core#2486](https://lab.civicrm.org/dev/core/-/issues/2486): |
| 172 | [20553](https://github.com/civicrm/civicrm-core/pull/20553))** |
| 173 | |
| 174 | Adds a foreign key on civicrm_contribution_product.product_id. |
| 175 | |
| 176 | ### CiviContribute |
| 177 | |
| 178 | - **Move financialACLs to a core extension (Work Towards |
| 179 | [dev/core#2115](https://lab.civicrm.org/dev/core/-/issues/2115): |
| 180 | [20761](https://github.com/civicrm/civicrm-core/pull/20761), |
| 181 | [20762](https://github.com/civicrm/civicrm-core/pull/20762) and |
| 182 | [20769](https://github.com/civicrm/civicrm-core/pull/20769))** |
| 183 | |
| 184 | Moves financial acl code out of APIv3 Contribution.create and assorted cleanup |
| 185 | towards moving the Financial ACL code to an extension. |
| 186 | |
| 187 | - **Proposal - make future recurring contribution instances modifiable & not |
| 188 | fail if the only contribution is deleted. (Work Towards |
| 189 | [dev/financial#6](https://lab.civicrm.org/dev/financial/-/issues/6): |
| 190 | [20452](https://github.com/civicrm/civicrm-core/pull/20452), |
| 191 | [20451](https://github.com/civicrm/civicrm-core/pull/20451) and |
| 192 | [20450](https://github.com/civicrm/civicrm-core/pull/20450))** |
| 193 | |
| 194 | Work to make it possible to edit recurring contributions. |
| 195 | |
| 196 | - **Make Order api easier to use for default price set |
| 197 | ([20681](https://github.com/civicrm/civicrm-core/pull/20681))** |
| 198 | |
| 199 | Improves the order api by making it not necessary to figure out the details of |
| 200 | the default price set when using it to create memberships. |
| 201 | |
| 202 | ### CiviSMS |
| 203 | |
| 204 | - **Display SMS segment count when constructing a Mass SMS |
| 205 | ([dev/core#1711](https://lab.civicrm.org/dev/core/-/issues/1711): |
| 206 | [20722](https://github.com/civicrm/civicrm-core/pull/20722) and |
| 207 | [20220](https://github.com/civicrm/civicrm-core/pull/20220))** |
| 208 | |
| 209 | Modifies the javascript that shows the character count when creating a SMS |
| 210 | message so that it also shows how many SMS segments are required to send the |
| 211 | message. |
| 212 | |
| 213 | ### WordPress Integration |
| 214 | |
| 215 | - **Fail gracefully when errors are detected |
| 216 | ([251](https://github.com/civicrm/civicrm-wordpress/pull/251))** |
| 217 | |
| 218 | Rewrites the error checking that the WordPress plugin performs and fails |
| 219 | gracefully instead of throwing fatal errors and making WordPress inoperable. |
| 220 | Introduces a "CiviCRM Troubleshooting" page to help diagnose and fix problems. |
| 221 | |
| 222 | ## <a name="bugs"></a>Bugs resolved |
| 223 | |
| 224 | ### Core CiviCRM |
| 225 | |
| 226 | - **Regression: Smart group rebuild in default config crashes cron |
| 227 | ([dev/core#2687](https://lab.civicrm.org/dev/core/-/issues/2687): |
| 228 | [20835](https://github.com/civicrm/civicrm-core/pull/20835))** |
| 229 | |
| 230 | - **Syntax errors when loading sample data |
| 231 | ([dev/drupal#161](https://lab.civicrm.org/dev/drupal/-/issues/161): |
| 232 | [20925](https://github.com/civicrm/civicrm-core/pull/20925))** |
| 233 | |
| 234 | - **During upgrade ConfigAndLog has errors about crm-l10n.js for every upgrade |
| 235 | step because assets aren't built during upgrade |
| 236 | ([dev/core#2666](https://lab.civicrm.org/dev/core/-/issues/2666): |
| 237 | [20890](https://github.com/civicrm/civicrm-core/pull/20890))** |
| 238 | |
| 239 | - **Exporting in localized civicrm crashes due to long translation for |
| 240 | preferred_mail_format varchar(8) field. |
| 241 | ([dev/core#2645](https://lab.civicrm.org/dev/core/-/issues/2645): |
| 242 | [20626](https://github.com/civicrm/civicrm-core/pull/20626))** |
| 243 | |
| 244 | - **failing update Smart Groups for installs with none |
| 245 | ([dev/core#2659](https://lab.civicrm.org/dev/core/-/issues/2659): |
| 246 | [20756](https://github.com/civicrm/civicrm-core/pull/20756))** |
| 247 | |
| 248 | - **Menu link for "New Tag" doesn't quite work |
| 249 | ([dev/core#2660](https://lab.civicrm.org/dev/core/-/issues/2660): |
| 250 | [20686](https://github.com/civicrm/civicrm-core/pull/20686))** |
| 251 | |
| 252 | Points the "New Tag" menu link to form to create a new tag instead of "Manage |
| 253 | Tags" form. |
| 254 | |
| 255 | - **Special characters in password cause trouble. |
| 256 | ([dev/core#2663](https://lab.civicrm.org/dev/core/-/issues/2663): |
| 257 | [20713](https://github.com/civicrm/civicrm-core/pull/20713))** |
| 258 | |
| 259 | - **Upgrade to Nightly (5.40.alpha1) from Stable (5.38.1) fails with DB Error: |
| 260 | constraint violation |
| 261 | ([dev/core#2680](https://lab.civicrm.org/dev/core/-/issues/2680): |
| 262 | [20814](https://github.com/civicrm/civicrm-core/pull/20814))** |
| 263 | |
| 264 | - **[php8-compact] Add in more protection for unset variables in various smarty |
| 265 | templates ([20546](https://github.com/civicrm/civicrm-core/pull/20546) and |
| 266 | [20547](https://github.com/civicrm/civicrm-core/pull/20547))** |
| 267 | |
| 268 | - **Force cleanup of setting value type "checkboxes" when is empty |
| 269 | ([20600](https://github.com/civicrm/civicrm-core/pull/20600))** |
| 270 | |
| 271 | Fixes a bug where custom settings of the type "checkboxes" with no checked |
| 272 | values were not saving to the database correctly. |
| 273 | |
| 274 | - **Fix activity_date_time_relative filter when `preserve_activity_tab_filter` |
| 275 | setting is on ([20602](https://github.com/civicrm/civicrm-core/pull/20602))** |
| 276 | |
| 277 | - **Support saving more than 25 records in Profile.submit api |
| 278 | ([20744](https://github.com/civicrm/civicrm-core/pull/20744))** |
| 279 | |
| 280 | - **Fix schema support for composite primary keys |
| 281 | ([20705](https://github.com/civicrm/civicrm-core/pull/20705))** |
| 282 | |
| 283 | - **Fix sorting for drop triggers |
| 284 | ([20693](https://github.com/civicrm/civicrm-core/pull/20693))** |
| 285 | |
| 286 | - **Fix Schema calculation of usePrefix to cope with rpow: |
| 287 | ([20471](https://github.com/civicrm/civicrm-core/pull/20471))** |
| 288 | |
| 289 | - **Fixed url ([20641](https://github.com/civicrm/civicrm-core/pull/20641))** |
| 290 | |
| 291 | - **Ensure custom group name does not conflict with existing field |
| 292 | ([20694](https://github.com/civicrm/civicrm-core/pull/20694))** |
| 293 | |
| 294 | - **Force the right path in github action script |
| 295 | ([20688](https://github.com/civicrm/civicrm-core/pull/20688))** |
| 296 | |
| 297 | The original script ran in a repo called civicrm-regen, but because the name |
| 298 | of this repo is civicrm-core and hence the github workspace folder contains |
| 299 | the literal "civicrm-core" in it, the civicrm.config.php file determines that |
| 300 | this must be a composer install, and so it gets the path to |
| 301 | civicrm.settings.php wrong. |
| 302 | |
| 303 | - **Always assign mode to smarty |
| 304 | ([20664](https://github.com/civicrm/civicrm-core/pull/20664))** |
| 305 | |
| 306 | - **AngularLoader - Emit warning when setModules method is used. |
| 307 | ([20628](https://github.com/civicrm/civicrm-core/pull/20628))** |
| 308 | |
| 309 | Emits a warning when extensions do something that could potentially cause |
| 310 | problems with other extensions. |
| 311 | |
| 312 | - **Throw exception when baoName is not found |
| 313 | ([20696](https://github.com/civicrm/civicrm-core/pull/20696) and |
| 314 | [20742](https://github.com/civicrm/civicrm-core/pull/20742))** |
| 315 | |
| 316 | - **Convert Notes to use option_group instead of hardcoded list |
| 317 | ([20554](https://github.com/civicrm/civicrm-core/pull/20554))** |
| 318 | |
| 319 | - **Fix a few more undefined template vars |
| 320 | ([20577](https://github.com/civicrm/civicrm-core/pull/20577) and |
| 321 | [20684](https://github.com/civicrm/civicrm-core/pull/20684))** |
| 322 | |
| 323 | - **CKEditor - Fix .tpl insertion on every form |
| 324 | ([20846](https://github.com/civicrm/civicrm-core/pull/20846))** |
| 325 | |
| 326 | - **Fix undefined tpl vars in CiviReport |
| 327 | ([20797](https://github.com/civicrm/civicrm-core/pull/20797))** |
| 328 | |
| 329 | - **smarty notice - title is only set for a list of existing report instances |
| 330 | ([20771](https://github.com/civicrm/civicrm-core/pull/20771))** |
| 331 | |
| 332 | - **smarty notice - confirm_message is usually irrelevant in report listings |
| 333 | ([20772](https://github.com/civicrm/civicrm-core/pull/20772))** |
| 334 | |
| 335 | - **Minor tpl simplificaiton, notice reduction |
| 336 | ([20663](https://github.com/civicrm/civicrm-core/pull/20663))** |
| 337 | |
| 338 | - **Fix undefined tpl variables on contact summary |
| 339 | ([20659](https://github.com/civicrm/civicrm-core/pull/20659))** |
| 340 | |
| 341 | - **Some php warnings on new case |
| 342 | ([20712](https://github.com/civicrm/civicrm-core/pull/20712))** |
| 343 | |
| 344 | - **Remove deprecated use of format money |
| 345 | ([20697](https://github.com/civicrm/civicrm-core/pull/20697))** |
| 346 | |
| 347 | - **Fix possibly undefined custom groupTree tpl variable |
| 348 | ([20737](https://github.com/civicrm/civicrm-core/pull/20737))** |
| 349 | |
| 350 | - **Fix undefined tpl vars on contact summary page |
| 351 | ([20754](https://github.com/civicrm/civicrm-core/pull/20754))** |
| 352 | |
| 353 | - **Tpl enotice fix |
| 354 | ([20735](https://github.com/civicrm/civicrm-core/pull/20735))** |
| 355 | |
| 356 | - **Fix undefined indexes in tpls |
| 357 | ([20781](https://github.com/civicrm/civicrm-core/pull/20781))** |
| 358 | |
| 359 | - **Enotice fix Remove references to savedFieldMapping in page 2 of the import |
| 360 | ([20738](https://github.com/civicrm/civicrm-core/pull/20738))** |
| 361 | |
| 362 | - **Fix undefined tpl vars on custom field page |
| 363 | ([20726](https://github.com/civicrm/civicrm-core/pull/20726))** |
| 364 | |
| 365 | - **Fix often undefined variable $row.class in tpl tables |
| 366 | ([20725](https://github.com/civicrm/civicrm-core/pull/20725))** |
| 367 | |
| 368 | - **Throw exception rather than allow php fail |
| 369 | ([20565](https://github.com/civicrm/civicrm-core/pull/20565))** |
| 370 | |
| 371 | Throws an exception rather than allow php fail when the api class is not |
| 372 | found. |
| 373 | |
| 374 | - **Proposal - store metadata on membership renewal on line item (Work Towards |
| 375 | [dev/membership#29](https://lab.civicrm.org/dev/membership/-/issues/29): |
| 376 | [20672](https://github.com/civicrm/civicrm-core/pull/20672))** |
| 377 | |
| 378 | Adds a new column to the civicrm_line_item table: membership_num_terms. |
| 379 | |
| 380 | ### Afform and SearchKit |
| 381 | |
| 382 | - **Afform - cosmetic fixes in palette panel |
| 383 | ([20755](https://github.com/civicrm/civicrm-core/pull/20755))** |
| 384 | |
| 385 | - **Search-kit - declaring joins breaks deduping |
| 386 | ([dev/core#2656](https://lab.civicrm.org/dev/core/-/issues/2656): |
| 387 | [20631](https://github.com/civicrm/civicrm-core/pull/20631) and |
| 388 | [20639](https://github.com/civicrm/civicrm-core/pull/20639))** |
| 389 | |
| 390 | - **SearchKit - use primary_key info instead of assuming 'id' |
| 391 | ([20763](https://github.com/civicrm/civicrm-core/pull/20763))** |
| 392 | |
| 393 | Fixes a bug in SearchKit when dealing with entities without "id" as their |
| 394 | primary key field. |
| 395 | |
| 396 | - **SearchKit - Remove automatic filter from address |
| 397 | ([20803](https://github.com/civicrm/civicrm-core/pull/20803))** |
| 398 | |
| 399 | Usability fix for SearchKit - stops automatically add "Location Type" to the |
| 400 | search when joining with Address. |
| 401 | |
| 402 | - **OR term in WHERE clause crashes Search Kit |
| 403 | ([dev/report#71](https://lab.civicrm.org/dev/report/-/issues/71): |
| 404 | [20824](https://github.com/civicrm/civicrm-core/pull/20824))** |
| 405 | |
| 406 | Fixes an error when saving or opening a search with an OR group in a clause. |
| 407 | |
| 408 | ### API version 4 |
| 409 | |
| 410 | - **APIv4 - Silently ignore non-permissioned fields instead of throwing |
| 411 | exceptions ([20724](https://github.com/civicrm/civicrm-core/pull/20724))** |
| 412 | |
| 413 | - **APIv4 - Fix same-table joins and remove unused code |
| 414 | ([20715](https://github.com/civicrm/civicrm-core/pull/20715))** |
| 415 | |
| 416 | - **APIv4 - Don't assume the identifier field for a table is named 'id' |
| 417 | ([20707](https://github.com/civicrm/civicrm-core/pull/20707) and |
| 418 | [20749](https://github.com/civicrm/civicrm-core/pull/20749))** |
| 419 | |
| 420 | - **APIv4 - Deprecate Entity::getLinks action |
| 421 | ([20727](https://github.com/civicrm/civicrm-core/pull/20727))** |
| 422 | |
| 423 | - **APIv4 - Deprecate passing 'id' to basic actions |
| 424 | ([20765](https://github.com/civicrm/civicrm-core/pull/20765))** |
| 425 | |
| 426 | - **APIv4 Explorer - Only apply default limit 25 for "get" action |
| 427 | ([20698](https://github.com/civicrm/civicrm-core/pull/20698))** |
| 428 | |
| 429 | - **Failing api4 test |
| 430 | api.v4.Action.CreateWithOptionGroupTest.testWithCustomDataForMultipleContacts |
| 431 | ([dev/core#2699](https://lab.civicrm.org/dev/core/-/issues/2699): |
| 432 | [20928](https://github.com/civicrm/civicrm-core/pull/20928))** |
| 433 | |
| 434 | ### CiviCase |
| 435 | |
| 436 | - **Case Manager is not shown for closed cases. |
| 437 | ([dev/core#542](https://lab.civicrm.org/dev/core/-/issues/542) and |
| 438 | [dev/core#1947](https://lab.civicrm.org/dev/core/-/issues/1947): |
| 439 | [19737](https://github.com/civicrm/civicrm-core/pull/19737))** |
| 440 | |
| 441 | Ensures inactive active case role are shown for closed cases. |
| 442 | |
| 443 | - **Some php warnings on case dashboard |
| 444 | ([20711](https://github.com/civicrm/civicrm-core/pull/20711))** |
| 445 | |
| 446 | - **smarty notice - case dashboard when no upcoming/recent cases |
| 447 | ([20770](https://github.com/civicrm/civicrm-core/pull/20770))** |
| 448 | |
| 449 | - **smarty notices - New case screen - Case.hlp |
| 450 | ([20795](https://github.com/civicrm/civicrm-core/pull/20795))** |
| 451 | |
| 452 | - **Error when sorting case roles table by end date |
| 453 | ([20728](https://github.com/civicrm/civicrm-core/pull/20728))** |
| 454 | |
| 455 | ### CiviContribute |
| 456 | |
| 457 | - **Error submitting contribution form if ""is_monetary=0"" |
| 458 | ([dev/wordpress#109](https://lab.civicrm.org/dev/wordpress/-/issues/109): |
| 459 | [#20929](https://github.com/civicrm/civicrm-core/pull/20929))** |
| 460 | |
| 461 | - **Can't remove previously-added currencies |
| 462 | ([dev/financial#175](https://lab.civicrm.org/dev/financial/-/issues/175): |
| 463 | [20627](https://github.com/civicrm/civicrm-core/pull/20627))** |
| 464 | |
| 465 | - **civicrm/payment/form url got empty currency argument in backoffice live CC |
| 466 | form ([dev/financial#150](https://lab.civicrm.org/dev/financial/-/issues/150): |
| 467 | [18517](https://github.com/civicrm/civicrm-core/pull/18517))** |
| 468 | |
| 469 | - **"Non-static method CRM_Financial_Form_BatchTransaction::links() should not |
| 470 | be called statically" when viewing accounting batch |
| 471 | ([dev/core#2647](https://lab.civicrm.org/dev/core/-/issues/2647): |
| 472 | [20691](https://github.com/civicrm/civicrm-core/pull/20691))** |
| 473 | |
| 474 | - **pre hook is not triggered for LineItem delete |
| 475 | ([dev/core#2657](https://lab.civicrm.org/dev/core/-/issues/2657): |
| 476 | [20644](https://github.com/civicrm/civicrm-core/pull/20644))** |
| 477 | |
| 478 | - **Undefined variable ids in CRM\Core\Payment\AuthorizeNetIPN.php |
| 479 | ([dev/core#2685](https://lab.civicrm.org/dev/core/-/issues/2685): |
| 480 | [20818](https://github.com/civicrm/civicrm-core/pull/20818))** |
| 481 | |
| 482 | - **Send pcp notification only when the contribution is completed |
| 483 | ([20523](https://github.com/civicrm/civicrm-core/pull/20523))** |
| 484 | |
| 485 | - **Add missing "View Recurring Contribution" link to contribution view |
| 486 | ([20750](https://github.com/civicrm/civicrm-core/pull/20750))** |
| 487 | |
| 488 | Add missing "View Recurring Contribution" link to contribution view when |
| 489 | displaying line items. |
| 490 | |
| 491 | ### CiviEvent |
| 492 | |
| 493 | - **Fix bug where only one participant registration is completed |
| 494 | ([20654](https://github.com/civicrm/civicrm-core/pull/20654))** |
| 495 | |
| 496 | ### CiviMail |
| 497 | |
| 498 | - **Unwanted mail blast sent by Scheduled Reminders |
| 499 | ([dev/core#365](https://lab.civicrm.org/dev/core/-/issues/365): |
| 500 | [20432](https://github.com/civicrm/civicrm-core/pull/20432) and |
| 501 | [19973](https://github.com/civicrm/civicrm-core/pull/19973))** |
| 502 | |
| 503 | Adds Effective start and end date to the Schedule Reminder UI. |
| 504 | |
| 505 | - **Specifying a "Selection Method" without a location type gives a DB error |
| 506 | ([dev/mail#96](https://lab.civicrm.org/dev/mail/-/issues/96): |
| 507 | [20536](https://github.com/civicrm/civicrm-core/pull/20536))** |
| 508 | |
| 509 | - **Mailing label prints name twice |
| 510 | ([dev/core#2681](https://lab.civicrm.org/dev/core/-/issues/2681): |
| 511 | [20783](https://github.com/civicrm/civicrm-core/pull/20783))** |
| 512 | |
| 513 | - **Fix invalid defaults for Mailing.update_email_resetdate API |
| 514 | ([20751](https://github.com/civicrm/civicrm-core/pull/20751))** |
| 515 | |
| 516 | - **Use mysql to set mailing.created_date |
| 517 | ([20630](https://github.com/civicrm/civicrm-core/pull/20630))** |
| 518 | |
| 519 | ### Drupal Integration |
| 520 | |
| 521 | - **hook_civicrm_buildProfile not working on Drupal 8 |
| 522 | ([dev/drupal#113](https://lab.civicrm.org/dev/drupal/-/issues/113): |
| 523 | [65](https://github.com/civicrm/civicrm-drupal-8/pull/65))** |
| 524 | |
| 525 | ## <a name="misc"></a>Miscellany |
| 526 | |
| 527 | - **Unused smarty variable |
| 528 | ([20796](https://github.com/civicrm/civicrm-core/pull/20796))** |
| 529 | |
| 530 | - **Remove unreachable code from admin page |
| 531 | ([20642](https://github.com/civicrm/civicrm-core/pull/20642))** |
| 532 | |
| 533 | - **replace unnecessary function call with string literal |
| 534 | ([20634](https://github.com/civicrm/civicrm-core/pull/20634))** |
| 535 | |
| 536 | - **APIv4 - Remove POC code leftover from early alpha development |
| 537 | ([20709](https://github.com/civicrm/civicrm-core/pull/20709))** |
| 538 | |
| 539 | - **Move upgrade code to correct version |
| 540 | ([20643](https://github.com/civicrm/civicrm-core/pull/20643))** |
| 541 | |
| 542 | - **Move determination of priceSetID to the internal order class |
| 543 | ([20669](https://github.com/civicrm/civicrm-core/pull/20669))** |
| 544 | |
| 545 | - **CRM_Utils_Array::asColumns() - Add helper to rotate a matrix (from rows to |
| 546 | columns) ([20788](https://github.com/civicrm/civicrm-core/pull/20788))** |
| 547 | |
| 548 | - **CRM_Utils_Array - Implement pathUnset() method |
| 549 | ([20787](https://github.com/civicrm/civicrm-core/pull/20787))** |
| 550 | |
| 551 | - **Handle participant payment create in line item |
| 552 | ([20790](https://github.com/civicrm/civicrm-core/pull/20790))** |
| 553 | |
| 554 | - **APIv4 Explorer - Render joins using addJoin function in OOP |
| 555 | ([20723](https://github.com/civicrm/civicrm-core/pull/20723))** |
| 556 | |
| 557 | - **Deprecate duplicate getLoggedInContactID() function |
| 558 | ([20321](https://github.com/civicrm/civicrm-core/pull/20321))** |
| 559 | |
| 560 | - **Remove deprecated function |
| 561 | ([20760](https://github.com/civicrm/civicrm-core/pull/20760))** |
| 562 | |
| 563 | - **Hopefully fix time rollover problem in MessageTemplateTest |
| 564 | ([20714](https://github.com/civicrm/civicrm-core/pull/20714))** |
| 565 | |
| 566 | - **Extract feeBlock to it's own tpl |
| 567 | ([20679](https://github.com/civicrm/civicrm-core/pull/20679))** |
| 568 | |
| 569 | - **Deprecate passing in 'null' for tax |
| 570 | ([20671](https://github.com/civicrm/civicrm-core/pull/20671))** |
| 571 | |
| 572 | - **Add test validation for Membership & participant payments |
| 573 | ([20621](https://github.com/civicrm/civicrm-core/pull/20621))** |
| 574 | |
| 575 | - **Fix up on invalid test data |
| 576 | ([20667](https://github.com/civicrm/civicrm-core/pull/20667))** |
| 577 | |
| 578 | - **Fix test to use valid amounts |
| 579 | ([20668](https://github.com/civicrm/civicrm-core/pull/20668))** |
| 580 | |
| 581 | - **Fix test to use valid financials |
| 582 | ([20676](https://github.com/civicrm/civicrm-core/pull/20676))** |
| 583 | |
| 584 | - **Improve CustomGroupTest |
| 585 | ([20617](https://github.com/civicrm/civicrm-core/pull/20617))** |
| 586 | |
| 587 | - **Test cleanup - specify return |
| 588 | ([20570](https://github.com/civicrm/civicrm-core/pull/20570))** |
| 589 | |
| 590 | - **Clean up code to determine line items for membership batch entry |
| 591 | ([20779](https://github.com/civicrm/civicrm-core/pull/20779))** |
| 592 | |
| 593 | - **AssetBuilderTest - Raise threshold for timeout |
| 594 | ([20810](https://github.com/civicrm/civicrm-core/pull/20810))** |
| 595 | |
| 596 | - **Reduce test api calls with no 'return' |
| 597 | ([20574](https://github.com/civicrm/civicrm-core/pull/20574))** |
| 598 | |
| 599 | - **Fix BaseIPN test to (mostly) pass invalid financials checks |
| 600 | ([20785](https://github.com/civicrm/civicrm-core/pull/20785))** |
| 601 | |
| 602 | - **Fix test set up to user Order api |
| 603 | ([20780](https://github.com/civicrm/civicrm-core/pull/20780))** |
| 604 | |
| 605 | - **[REF] Membership api for v4 (Work Towards |
| 606 | [dev/core#2634](https://lab.civicrm.org/dev/core/-/issues/2634): |
| 607 | [20759](https://github.com/civicrm/civicrm-core/pull/20759))** |
| 608 | |
| 609 | - **[Ref] Remove (more) unreachable code from order api |
| 610 | ([20793](https://github.com/civicrm/civicrm-core/pull/20793))** |
| 611 | |
| 612 | - **[REF] Add in template guard for not being always set as per html format |
| 613 | ([20747](https://github.com/civicrm/civicrm-core/pull/20747))** |
| 614 | |
| 615 | - **[REF] Remove isPayLater from membership batch screen |
| 616 | ([20396](https://github.com/civicrm/civicrm-core/pull/20396))** |
| 617 | |
| 618 | - **[REF] Extend testing on membership batch entry & minor cleanup |
| 619 | ([20394](https://github.com/civicrm/civicrm-core/pull/20394))** |
| 620 | |
| 621 | - **[REF] Fix trying to access array offset from boolean value |
| 622 | ([20734](https://github.com/civicrm/civicrm-core/pull/20734))** |
| 623 | |
| 624 | - **[REF] Alter new Setup process to use CiviCRM's Event Dispatcher |
| 625 | ([20717](https://github.com/civicrm/civicrm-core/pull/20717))** |
| 626 | |
| 627 | - **[REF] - Improve efficiency of APIv4 GetInfo |
| 628 | ([20708](https://github.com/civicrm/civicrm-core/pull/20708))** |
| 629 | |
| 630 | - **REF - Get Contact Summary tab counts after calling hook to avoid wasting |
| 631 | time ([20673](https://github.com/civicrm/civicrm-core/pull/20673))** |
| 632 | |
| 633 | - **[REF] Remove always false if |
| 634 | ([20653](https://github.com/civicrm/civicrm-core/pull/20653))** |
| 635 | |
| 636 | - **[REF] Extract CKEditor into its own core extension |
| 637 | ([20392](https://github.com/civicrm/civicrm-core/pull/20392))** |
| 638 | |
| 639 | - **(REF) crmUi - Support onCrmUiSelect for using select2 as a picklist |
| 640 | ([20789](https://github.com/civicrm/civicrm-core/pull/20789))** |
| 641 | |
| 642 | - **[REF] Tidy up param transforms |
| 643 | ([20778](https://github.com/civicrm/civicrm-core/pull/20778))** |
| 644 | |
| 645 | - **[REF] Follow up clean up - remove contribution_mode |
| 646 | ([20656](https://github.com/civicrm/civicrm-core/pull/20656))** |
| 647 | |
| 648 | - **[REF] Remove unnecessary variable wrangling in case roles section |
| 649 | ([20729](https://github.com/civicrm/civicrm-core/pull/20729))** |
| 650 | |
| 651 | - **[REF] Follow up fix to fixing note entity tables in views |
| 652 | ([144](https://github.com/civicrm/civicrm-backdrop/pull/144))** |
| 653 | |
| 654 | - **[REF] Follow up fix to fixing note entity tables in views |
| 655 | ([646](https://github.com/civicrm/civicrm-drupal/pull/646))** |
| 656 | |
| 657 | - **[NFC] - update code comment |
| 658 | ([20599](https://github.com/civicrm/civicrm-core/pull/20599))** |
| 659 | |
| 660 | - **[NFC] Fix test failure on MySQL8 because of lack of order in API |
| 661 | ([20605](https://github.com/civicrm/civicrm-core/pull/20605))** |
| 662 | |
| 663 | - **[NFC] [Test] Remove duplicate cleanup |
| 664 | ([20647](https://github.com/civicrm/civicrm-core/pull/20647))** |
| 665 | |
| 666 | - **[NFC] [TEST] cleanup, more use of return in ActivityTest |
| 667 | ([20633](https://github.com/civicrm/civicrm-core/pull/20633))** |
| 668 | |
| 669 | - **[NFC] Cleanup on membership test |
| 670 | ([20636](https://github.com/civicrm/civicrm-core/pull/20636))** |
| 671 | |
| 672 | - **[NFC] [Test] Remove duplicate cleanup |
| 673 | ([20637](https://github.com/civicrm/civicrm-core/pull/20637))** |
| 674 | |
| 675 | - **[NFC] Cleanup on contribution v3 api test |
| 676 | ([20638](https://github.com/civicrm/civicrm-core/pull/20638))** |
| 677 | |
| 678 | - **[NFC] Add in unit test to lock in the fix for the is_deleted in where clause |
| 679 | issue ([20733](https://github.com/civicrm/civicrm-core/pull/20733))** |
| 680 | |
| 681 | - **[NFC] Afform - Regenerate civix files |
| 682 | ([20615](https://github.com/civicrm/civicrm-core/pull/20615))** |
| 683 | |
| 684 | - **[NFC] Fix test setup on a couple of tests to make them pass in php8 |
| 685 | ([20614](https://github.com/civicrm/civicrm-core/pull/20614))** |
| 686 | |
| 687 | - **[NFC] Update various npm depdencies used only in unit testing |
| 688 | ([20748](https://github.com/civicrm/civicrm-core/pull/20748))** |
| 689 | |
| 690 | - **[NFC] Improve use of return parameters in ContributionPage test class |
| 691 | ([20648](https://github.com/civicrm/civicrm-core/pull/20648))** |
| 692 | |
| 693 | - **[NFC] Unit test for 20602 |
| 694 | ([20745](https://github.com/civicrm/civicrm-core/pull/20745))** |
| 695 | |
| 696 | - **[NFC] Remove boilerplate comment block from APIv4 classes |
| 697 | ([20700](https://github.com/civicrm/civicrm-core/pull/20700))** |
| 698 | |
| 699 | - **[NFC] Github action script to run regen.sh for you |
| 700 | ([20680](https://github.com/civicrm/civicrm-core/pull/20680))** |
| 701 | |
| 702 | - **[NFC] Regenerate ContributeProduct DAO and also fix search_kit install on |
| 703 | MySQL 5.6 on test boxes |
| 704 | ([20674](https://github.com/civicrm/civicrm-core/pull/20674))** |
| 705 | |
| 706 | - **[NFC] Fixes an issue in this unit test where we are trying to do an array |
| 707 | access on an integer |
| 708 | ([20652](https://github.com/civicrm/civicrm-core/pull/20652))** |
| 709 | |
| 710 | - **[NFC] [Test] Cleanup on membership type test |
| 711 | ([20649](https://github.com/civicrm/civicrm-core/pull/20649))** |
| 712 | |
| 713 | - **[NFC/Unit test] - Add a test for getCaseRoles when there's a lot of roles |
| 714 | assigned ([20657](https://github.com/civicrm/civicrm-core/pull/20657))** |
| 715 | |
| 716 | - **[NFC] [TEST] cleanup, more use of return in AddressTest |
| 717 | ([20635](https://github.com/civicrm/civicrm-core/pull/20635))** |
| 718 | |
| 719 | - **[NFC] [Test] Specify return values on get calls |
| 720 | ([20632](https://github.com/civicrm/civicrm-core/pull/20632))** |
| 721 | |
| 722 | - **[TEST][NFC] CiviCRM reaching MySQL join limit (Work Towards |
| 723 | [dev/core#1191](https://lab.civicrm.org/dev/core/-/issues/1191): |
| 724 | [20618](https://github.com/civicrm/civicrm-core/pull/20618) and |
| 725 | [20622](https://github.com/civicrm/civicrm-core/pull/20622))** |
| 726 | |
| 727 | - **[php8-compact][NFC] Update testGroupClause unit test to work on php8 |
| 728 | ([20624](https://github.com/civicrm/civicrm-core/pull/20624))** |
| 729 | |
| 730 | - **[php8-compact][REF] Fix failing custom group test on php8 by better handling |
| 731 | strings in 2nd key of the extends array and also validating the child and main |
| 732 | entity work ([20616](https://github.com/civicrm/civicrm-core/pull/20616))** |
| 733 | |
| 734 | - **[php8-compact] Fix APIv4 Group Concat Test by setting dataType to be NULL if |
| 735 | the first expression is a SQL Function |
| 736 | ([20655](https://github.com/civicrm/civicrm-core/pull/20655))** |
| 737 | |
| 738 | - **[php8-compact] Fix issues with participant message templates causing Event |
| 739 | Tests to fail ([20613](https://github.com/civicrm/civicrm-core/pull/20613))** |
| 740 | |
| 741 | - **[php8-compact] Add in guards into common templates to assit with fixing test |
| 742 | failures on php8 |
| 743 | ([20543](https://github.com/civicrm/civicrm-core/pull/20543))** |
| 744 | |
| 745 | - **[php8-compact] Fix Array to String in formButtons in CRM_Core_FormTest |
| 746 | ([20608](https://github.com/civicrm/civicrm-core/pull/20608))** |
| 747 | |
| 748 | - **[php8-compact] Fix Event Form test for php8 by setting totalAmount in the |
| 749 | form params ([20623](https://github.com/civicrm/civicrm-core/pull/20623))** |
| 750 | |
| 751 | - **[php8-compat] Alternate to the alternate for testOpeningForms |
| 752 | ([20603](https://github.com/civicrm/civicrm-core/pull/20603))** |
| 753 | |
| 754 | - **[php8-compact] Fix apiv4 tests in php8 by not incrementing an array |
| 755 | ([20594](https://github.com/civicrm/civicrm-core/pull/20594))** |
| 756 | |
| 757 | - **[php8-compact] Further test fixes for php8 |
| 758 | ([20597](https://github.com/civicrm/civicrm-core/pull/20597))** |
| 759 | |
| 760 | - **[php8-compact] Fix failing AuthorizeNetIPN tests on php8 |
| 761 | ([20596](https://github.com/civicrm/civicrm-core/pull/20596))** |
| 762 | |
| 763 | - **[php8-compact] Fix failing CRM_Core_InvokeTest on php8 |
| 764 | ([20595](https://github.com/civicrm/civicrm-core/pull/20595))** |
| 765 | |
| 766 | - **[php8-compact] Fix Session Test errors in php8 |
| 767 | ([20593](https://github.com/civicrm/civicrm-core/pull/20593))** |
| 768 | |
| 769 | - **[php8-compact] Fix Case Activity Message Template to fix test failure in |
| 770 | php8 ([20592](https://github.com/civicrm/civicrm-core/pull/20592))** |
| 771 | |
| 772 | - **[php8-compact] Fix PDF Letter Test by ensuring that all actual DB fields |
| 773 | are in the tokens array and also by resetting the static cache of tokens |
| 774 | ([20591](https://github.com/civicrm/civicrm-core/pull/20591))** |
| 775 | |
| 776 | - **[php8-compact] Add in guards into various templates to fix the |
| 777 | CRM_Contact_Form_IndividualTest suite |
| 778 | ([20579](https://github.com/civicrm/civicrm-core/pull/20579))** |
| 779 | |
| 780 | - **[php8-compact] Fixes test failures in the |
| 781 | CRM_Contribute_Form_ContributionTest class due to template issues |
| 782 | ([20581](https://github.com/civicrm/civicrm-core/pull/20581))** |
| 783 | |
| 784 | - **[php8-compact] Fix Dashboard Tests by adding in if guards into smarty |
| 785 | templates ([20575](https://github.com/civicrm/civicrm-core/pull/20575))** |
| 786 | |
| 787 | - **[php8-compact] Add in guards into various templates to fix issues in test |
| 788 | runs on php8 ([20544](https://github.com/civicrm/civicrm-core/pull/20544))** |
| 789 | |
| 790 | ## <a name="credits"></a>Credits |
| 791 | |
| 792 | This release was developed by the following code authors: |
| 793 | |
| 794 | AGH Strategies - Alice Frumin, Andie Hunt; Agileware - Francis Whittle, Justin |
| 795 | Freeman; Akos Garai; Australian Greens - John Twyman; Blackfly Solutions - Alan |
| 796 | Dixon; Christian Wach; Circle Interactive - Pradeep Nayak; CiviCoop - Jaap |
| 797 | Jansma; CiviCRM - Coleman Watts, Tim Otten; CompuCorp - Debarshi Bhaumik; Dave |
| 798 | D; Gokhalemethod- Sadashiv; iXiam - Luciano Spiegel; JMA Consulting - Monish |
| 799 | Deb, Seamus Lee; Lemniscus - Noah Miller; Lighthouse Consulting and Design - |
| 800 | Brian Shaughnessy; Megaphone Technology Consulting - Jon Goldberg; MJW |
| 801 | Consulting - Matthew Wire; Skvare - Sunil Pawar; Wikimedia Foundation - Eileen |
| 802 | McNaughton |
| 803 | |
| 804 | Most authors also reviewed code for this release; in addition, the following |
| 805 | reviewers contributed their comments: |
| 806 | |
| 807 | Artful Robot - Rich Lott; Bob Silvern; CiviCoop - Klaas Eikelboom; CiviDesk - |
| 808 | Yashodha Chaku; Coop SymbioTIC - Mathieu Lutfy; Freeform Solutions - Herb van |
| 809 | den Dool; Fuzion - Jitendra Purohit; JMA Consulting - Joe Murray; Ray Wright; |
| 810 | Semper IT - Karin Gerritsen; Squiffle Consulting - Aidan Saunders; Tadpole |
| 811 | Collective - Kevin Cristiano; Tech To The People - Xavier Dutoit; Third Sector |
| 812 | Design - Michael McAndrew; Web Access - Kurund Jalmi |
| 813 | |
| 814 | ## <a name="feedback"></a>Feedback |
| 815 | |
| 816 | These release notes are edited by Alice Frumin and Andie Hunt. If you'd like |
| 817 | to provide feedback on them, please log in to https://chat.civicrm.org/civicrm |
| 818 | and contact `@agh1`. |