| 1 | # CiviCRM 5.27.0 |
| 2 | |
| 3 | Released July 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?** | **yes** | |
| 20 | | **Fix problems installing or upgrading to a previous version?** | **yes** | |
| 21 | | **Introduce features?** | **yes** | |
| 22 | | **Fix bugs?** | **yes** | |
| 23 | |
| 24 | ## <a name="features"></a>Features |
| 25 | |
| 26 | ### Core CiviCRM |
| 27 | |
| 28 | - **Warn users who lack PHP-Intl extension (Work Towards |
| 29 | [dev/translation#48](https://lab.civicrm.org/dev/translation/-/issues/48): |
| 30 | [17668](https://github.com/civicrm/civicrm-core/pull/17668), [17728](https://github.com/civicrm/civicrm-core/pull/17728))** |
| 31 | |
| 32 | A system check warning will now appear on sites that lack the PHP |
| 33 | Internationalization extension. This is in preparation for changes that will |
| 34 | appear in CiviCRM 5.28 and require the extension. |
| 35 | |
| 36 | - **Advanced Search - Allow searching by first/last name; pass values from |
| 37 | quicksearch ([dev/core#1722](https://lab.civicrm.org/dev/core/-/issues/1722): |
| 38 | [17118](https://github.com/civicrm/civicrm-core/pull/17118))** |
| 39 | |
| 40 | This makes separate First Name and Last Name fields available on the Advanced |
| 41 | Search form, and it ensures quick search filters are passed to the appropriate |
| 42 | field. |
| 43 | |
| 44 | - **Add more search options |
| 45 | ([17372](https://github.com/civicrm/civicrm-core/pull/17372))** |
| 46 | |
| 47 | Improves the search form for individuals in contact reference fields by adding |
| 48 | fields for Employer Name, First Name, Last Name, and Nick Name. |
| 49 | |
| 50 | - **End of life planning for MySQL server 5.0 - 5.6 |
| 51 | ([dev/core#1681](https://lab.civicrm.org/dev/core/-/issues/1681): |
| 52 | [17518](https://github.com/civicrm/civicrm-core/pull/17518) and |
| 53 | [17496](https://github.com/civicrm/civicrm-core/pull/17496))** |
| 54 | |
| 55 | Sites running MySQL 5.5 and below will have a pre-upgrade message and a system |
| 56 | check warning to say that CiviCRM 5.28 will require MySQL 5.6 or MariaDB 10.1. |
| 57 | |
| 58 | - **APIv4 - Improve pseudoconstant suffix support |
| 59 | ([17368](https://github.com/civicrm/civicrm-core/pull/17368) and |
| 60 | [17482](https://github.com/civicrm/civicrm-core/pull/17482))** |
| 61 | |
| 62 | APIv4 allows pseudoconstant fields to be specified with the pseudoconstant |
| 63 | name followed by a suffix, such as `activity_type_id:label`. This now works |
| 64 | for retrieval and sort. |
| 65 | |
| 66 | - **APIv4 - Support custom entity joins |
| 67 | ([17394](https://github.com/civicrm/civicrm-core/pull/17394))** |
| 68 | |
| 69 | Improves APIv4 so that it supports implicit and explicit joins onto custom |
| 70 | entities. |
| 71 | |
| 72 | - **Make reCAPTCHA settings clearer |
| 73 | ([17426](https://github.com/civicrm/civicrm-core/pull/17426))** |
| 74 | |
| 75 | The help text for reCAPTCHA settings now specifies the type of reCAPTCHA |
| 76 | supported. |
| 77 | |
| 78 | - **Configurable logfile size and hashing |
| 79 | ([17192](https://github.com/civicrm/civicrm-core/pull/17192))** |
| 80 | |
| 81 | Allows a system administrator to give logs a predictable name, allowing them |
| 82 | to be more easily ingested into other tools, and be handled by external log |
| 83 | rotation tools. |
| 84 | |
| 85 | - **Allow for installation on Symfony 4.4 |
| 86 | ([17380](https://github.com/civicrm/civicrm-core/pull/17380))** |
| 87 | |
| 88 | Makes it so CiviCRM plays nicely with Symfony 4.4. |
| 89 | |
| 90 | - **Add domain tokens to the Message Template admin interface |
| 91 | ([17388](https://github.com/civicrm/civicrm-core/pull/17388))** |
| 92 | |
| 93 | This adds the domain tokens (the domain organization name, address, email, and |
| 94 | phone) to the available listed tokens for editing message templates. |
| 95 | |
| 96 | - **Hide icon elements from screen readers and add handling for |
| 97 | screen-reader-only text |
| 98 | ([17318](https://github.com/civicrm/civicrm-core/pull/17318), |
| 99 | [17293](https://github.com/civicrm/civicrm-core/pull/17293), |
| 100 | [17294](https://github.com/civicrm/civicrm-core/pull/17294), and |
| 101 | [17310](https://github.com/civicrm/civicrm-core/pull/17310))** |
| 102 | |
| 103 | CiviCRM uses empty `<i>` elements to provide most icons. Screen readers, |
| 104 | which won't render the visual icon anyway, will either skip over an empty |
| 105 | element or announce it in a way that would be confusing. This makes it |
| 106 | explicit that screen readers and other ARIA devices should skip them. |
| 107 | |
| 108 | Meanwhile, if the icon is the only way a piece of information is displayed, a |
| 109 | screen reader user won't get that information. This adds a `sr-only` class |
| 110 | that makes the element invisible on screen without being ignored by a screen |
| 111 | reader. |
| 112 | |
| 113 | Screen reader text is added for the field option wrench icons, relationship |
| 114 | permissions, and membership auto-renew status. |
| 115 | |
| 116 | - **Add icon helper functions and remove most uses of check.gif |
| 117 | ([17279](https://github.com/civicrm/civicrm-core/pull/17279) and |
| 118 | [17289](https://github.com/civicrm/civicrm-core/pull/17289))** |
| 119 | |
| 120 | This adds helper functions in PHP and Smarty to render consistent icons with a |
| 121 | minimum of code. It also replaces most instances of the green checkmark image |
| 122 | with a checkmark icon. |
| 123 | |
| 124 | - **Separate icon markup from labels and add JS icon helper |
| 125 | ([17319](https://github.com/civicrm/civicrm-core/pull/17319) and |
| 126 | [17285](https://github.com/civicrm/civicrm-core/pull/17285))** |
| 127 | |
| 128 | These changes improve `CRM_Core_Action::formLink()`, `hook_civicrm_links`, and |
| 129 | certain listing pages so that HTML icon markup is added at the point of |
| 130 | display rather than during the processing of values. |
| 131 | |
| 132 | It also adds a helper function in Javascript similar to those in PHP and |
| 133 | Smarty to render icons. |
| 134 | |
| 135 | - **crmButton: Support icon=0 for no icon |
| 136 | ([17303](https://github.com/civicrm/civicrm-core/pull/17303))** |
| 137 | |
| 138 | Makes it possible to create a button without an icon using {crmButton}. |
| 139 | |
| 140 | - **Replace stop-icon.png with fa-ban over a relevant icon for privacy |
| 141 | ([17283](https://github.com/civicrm/civicrm-core/pull/17283) and |
| 142 | [17307](https://github.com/civicrm/civicrm-core/pull/17307))** |
| 143 | |
| 144 | The communication preference icons are standardized and more specific than the |
| 145 | old stop sign. |
| 146 | |
| 147 | - **Replace image icons with Font Awesome icons |
| 148 | ([17296]([17280](https://github.com/civicrm/civicrm-core/pull/17280), |
| 149 | [17281](https://github.com/civicrm/civicrm-core/pull/17281), |
| 150 | [17282](https://github.com/civicrm/civicrm-core/pull/17282), |
| 151 | [17295](https://github.com/civicrm/civicrm-core/pull/17295), |
| 152 | https://github.com/civicrm/civicrm-core/pull/17296), |
| 153 | [17297](https://github.com/civicrm/civicrm-core/pull/17297))** |
| 154 | |
| 155 | Nearly all image icons have been replaced with the corresponding icons from |
| 156 | the Font Awesome library. |
| 157 | |
| 158 | - **Simplify admin console and remove superfluous icons |
| 159 | ([17284](https://github.com/civicrm/civicrm-core/pull/17284))** |
| 160 | |
| 161 | The Administration console has been redesigned to have a simpler layout, |
| 162 | display more information, dynamically include all enabled components, display |
| 163 | responsively on small screens, and remove a slew of 15-year-old image icons. |
| 164 | |
| 165 | - **Dedupe performance - hard-remove financial_item from list of dymnamic refs |
| 166 | to contact table |
| 167 | ([17567](https://github.com/civicrm/civicrm-core/pull/17567))** |
| 168 | |
| 169 | This improves performance when deduping by no longer querying the financial |
| 170 | item table. |
| 171 | |
| 172 | - **Trigger fatalErrorHandler for PEAR errors and for logs with severity ERROR |
| 173 | or higher ([17277](https://github.com/civicrm/civicrm-core/pull/17277))** |
| 174 | |
| 175 | This allows extensions that implement `$config->fatalErrorHandler` to react to |
| 176 | a wider variety of errors that CiviCRM may generate. |
| 177 | |
| 178 | ### CiviContribute |
| 179 | |
| 180 | - **Wrap separators in price field in spans with classes |
| 181 | ([dev/user-interface#18](https://lab.civicrm.org/dev/user-interface/-/issues/18): |
| 182 | [17078](https://github.com/civicrm/civicrm-core/pull/17078))** |
| 183 | |
| 184 | Colons separating pre- and post-field help text from price fields are now |
| 185 | wrapped in `<span>` elements. |
| 186 | |
| 187 | - **Allow to search on contribution ID |
| 188 | ([dev/core#1580](https://lab.civicrm.org/dev/core/-/issues/1580): |
| 189 | [16484](https://github.com/civicrm/civicrm-core/pull/16484))** |
| 190 | |
| 191 | This improves the "Find Contributions" search form by adding a field to search |
| 192 | by Contribution ID. |
| 193 | |
| 194 | - **APIv4 - Add "Price"-related entities |
| 195 | ([17363](https://github.com/civicrm/civicrm-core/pull/17363))** |
| 196 | |
| 197 | Priceset, PriceField, and PriceOption entities are added to APIv4. |
| 198 | |
| 199 | - **APIv4 - Add ContributionRecur entity |
| 200 | ([17299](https://github.com/civicrm/civicrm-core/pull/17299))** |
| 201 | |
| 202 | Adds Contribution Recur to APIv4. |
| 203 | |
| 204 | ### CiviMail |
| 205 | |
| 206 | - **Allow click-through and open tracking to be enabled/disabled by default |
| 207 | ([17291](https://github.com/civicrm/civicrm-core/pull/17291))** |
| 208 | |
| 209 | Adds a setting to CiviMail which allows for setting the click-through and open |
| 210 | tracking defaults. |
| 211 | |
| 212 | - **Extend content array of hook_civicrm_alterMailContent |
| 213 | ([dev/core#1620](https://lab.civicrm.org/dev/core/-/issues/1620): |
| 214 | [16629](https://github.com/civicrm/civicrm-core/pull/16629))** |
| 215 | |
| 216 | Adds campaign_id to template for `alterMailContent` hook. |
| 217 | |
| 218 | - **Migrate CiviMail "extern" scripts to conventional routes |
| 219 | ([17312](https://github.com/civicrm/civicrm-core/pull/17312))** |
| 220 | |
| 221 | Updates CiviMail's default behavior to replace `extern/open.php` and |
| 222 | `extern/url.php` with `civicrm/mailing/open` and `civicrm/mailing/url`. |
| 223 | |
| 224 | - **Make `is_archived` work as a url-search parameter |
| 225 | ([17328](https://github.com/civicrm/civicrm-core/pull/17328))** |
| 226 | |
| 227 | The Find Mailings URL can now have `is_archived` as a parameter to only find |
| 228 | archived mailings. |
| 229 | |
| 230 | ### CiviMember |
| 231 | |
| 232 | - **Add MembershipType to Api4 |
| 233 | ([17448](https://github.com/civicrm/civicrm-core/pull/17448))** |
| 234 | |
| 235 | Adds a Membership Type entity to APIv4. |
| 236 | |
| 237 | ### Drupal Integration |
| 238 | |
| 239 | - **CiviCRM menu toggle "adjust menu position" customisable |
| 240 | ([dev/core#1757](https://lab.civicrm.org/dev/core/-/issues/1757): |
| 241 | [17362](https://github.com/civicrm/civicrm-core/pull/17362))** |
| 242 | |
| 243 | This hides the "adjust menu position" icon in the CiviCRM Menu for non admin |
| 244 | users to avoid confusion for users who do not have access to the Drupal admin |
| 245 | menu. |
| 246 | |
| 247 | - **Provide "Calendar" module with an end-date when a duration is provided |
| 248 | ([601](https://github.com/civicrm/civicrm-drupal/pull/601))** |
| 249 | |
| 250 | Improves display of activities in calendar views. |
| 251 | |
| 252 | ## <a name="bugs"></a>Bugs resolved |
| 253 | |
| 254 | ### Core CiviCRM |
| 255 | |
| 256 | - **CRM_Utils_Time::setTime and getTime() and their use in unit tests |
| 257 | ([dev/core#1781](https://lab.civicrm.org/dev/core/-/issues/1781): |
| 258 | [17414](https://github.com/civicrm/civicrm-core/pull/17414))** |
| 259 | |
| 260 | This allows the CRM_Utils_Time functions used in unit tests to use TIME_FUNC |
| 261 | to better isolate timing bugs. |
| 262 | |
| 263 | - **Confusing popups when importing activities |
| 264 | ([dev/user-interface#17](https://lab.civicrm.org/dev/user-interface/-/issues/17): |
| 265 | [17067](https://github.com/civicrm/civicrm-core/pull/17067))** |
| 266 | |
| 267 | This fixes a bug where the confirmation popup would appear when hitting the |
| 268 | back/cancel buttons, not just the import button, on most import forms. |
| 269 | |
| 270 | - **Installing CiviCRM in another language, with civicrm-setup |
| 271 | ([dev/translation#39](https://lab.civicrm.org/dev/translation/-/issues/39): |
| 272 | [17244](https://github.com/civicrm/civicrm-core/pull/17244))** |
| 273 | |
| 274 | Fixes a bug when installing CiviCRM in another language with civicrm-setup. |
| 275 | |
| 276 | - **Replace all instances of CRM_Core_Fatal with throw new CRM_Core_Exception |
| 277 | ([dev/core#560](https://lab.civicrm.org/dev/core/-/issues/560): |
| 278 | [17421](https://github.com/civicrm/civicrm-core/pull/17421), |
| 279 | [17343](https://github.com/civicrm/civicrm-core/pull/17343), |
| 280 | [17336](https://github.com/civicrm/civicrm-core/pull/17336) and |
| 281 | [17341](https://github.com/civicrm/civicrm-core/pull/17341))** |
| 282 | |
| 283 | - **CiviCRM 5.13.4 - smart groups with contact subtypes: subtype is not in |
| 284 | Contact Type field on edit criteria mode |
| 285 | ([dev/core#991](https://lab.civicrm.org/dev/core/-/issues/991): |
| 286 | [16541](https://github.com/civicrm/civicrm-core/pull/16541))** |
| 287 | |
| 288 | Fixes contact subtypes not being carried over when editing a smart group |
| 289 | created in Advanced Search. |
| 290 | |
| 291 | - **Unable to import relationship |
| 292 | ([dev/core#1731](https://lab.civicrm.org/dev/core/-/issues/1731): |
| 293 | [17163](https://github.com/civicrm/civicrm-core/pull/17163))** |
| 294 | |
| 295 | Ensures that importing relationships works as expected when the same field is |
| 296 | to be imported for the main imported contact and a related contact. |
| 297 | |
| 298 | - **Apostrophes in richtext fields don't get exported properly in CiviReport |
| 299 | ([dev/core#1743](https://lab.civicrm.org/dev/core/-/issues/1743): |
| 300 | [17260](https://github.com/civicrm/civicrm-core/pull/17260))** |
| 301 | |
| 302 | - **Statically added members of a smart group are not found |
| 303 | ([dev/core#1745](https://lab.civicrm.org/dev/core/-/issues/1745): |
| 304 | [17419](https://github.com/civicrm/civicrm-core/pull/17419))** |
| 305 | |
| 306 | - **Deleting an activity with attachments doesn't delete the file or entries in |
| 307 | civicrm_file/civicrm_entity_file |
| 308 | ([dev/core#1753](https://lab.civicrm.org/dev/core/-/issues/1753): |
| 309 | [17298](https://github.com/civicrm/civicrm-core/pull/17298))** |
| 310 | |
| 311 | - **Deselected checkbox settings are not saved |
| 312 | ([dev/core#1794](https://lab.civicrm.org/dev/core/-/issues/1794): |
| 313 | [17493](https://github.com/civicrm/civicrm-core/pull/17493))** |
| 314 | |
| 315 | Ensures deselected values are saved on custom field settings forms. |
| 316 | |
| 317 | - **Added activity types don't appear in the type dropdown on New Activity |
| 318 | ([dev/core#1822](https://lab.civicrm.org/dev/core/-/issues/1822): |
| 319 | [17625](https://github.com/civicrm/civicrm-core/pull/17625))** |
| 320 | |
| 321 | - **API doesn't allow passing option values by label |
| 322 | ([dev/core#1816](https://lab.civicrm.org/dev/core/-/issues/1816): |
| 323 | [17628](https://github.com/civicrm/civicrm-core/pull/17628))** |
| 324 | |
| 325 | Updates APIv4 so that it matches based on label if name is not found. |
| 326 | |
| 327 | - **APIv4 - Improve custom field spec gathering |
| 328 | ([17471](https://github.com/civicrm/civicrm-core/pull/17471))** |
| 329 | |
| 330 | - **APIv4 - Remove implicit multi joins & add explicit joins |
| 331 | ([17332](https://github.com/civicrm/civicrm-core/pull/17332))** |
| 332 | |
| 333 | - **APIv4 - Fix entity name on custom groups in schemaMapper |
| 334 | ([17425](https://github.com/civicrm/civicrm-core/pull/17425))** |
| 335 | |
| 336 | - **APIv4 - fix returning custom field values with API4 |
| 337 | ([17399](https://github.com/civicrm/civicrm-core/pull/17399))** |
| 338 | |
| 339 | - **Attempting to access Multi-Record Custom Field import results |
| 340 | in crash |
| 341 | ([dev/core#1841](https://lab.civicrm.org/dev/core/-/issues/1841): |
| 342 | [17713](https://github.com/civicrm/civicrm-core/pull/17713))** |
| 343 | |
| 344 | - **Fix issue with building smart groups when $contactQueries is empty |
| 345 | ([17622](https://github.com/civicrm/civicrm-core/pull/17622))** |
| 346 | |
| 347 | If a clause of a contact query used to build a smart group is empty, it would |
| 348 | result in a database error. |
| 349 | |
| 350 | - **Replace deprecated `money_format()` fn to support PHP 7.4 |
| 351 | (Work Towards [dev/core#1494](https://lab.civicrm.org/dev/core/-/issues/1494): |
| 352 | [17577](https://github.com/civicrm/civicrm-core/pull/17577), [17730](https://github.com/civicrm/civicrm-core/pull/17730))** |
| 353 | |
| 354 | Adds a deprecation notice and a status check for a money value format |
| 355 | configuration other than the default. |
| 356 | |
| 357 | - **QueueTest - Be more forgiving about slow execution |
| 358 | ([17532](https://github.com/civicrm/civicrm-core/pull/17532))** |
| 359 | |
| 360 | - **CommunityMessages - Define more consistent behavior in the face of slow |
| 361 | execution ([17529](https://github.com/civicrm/civicrm-core/pull/17529))** |
| 362 | |
| 363 | This helps avoid test failures on broadcast messages when the system is |
| 364 | running slowly. |
| 365 | |
| 366 | - **Scheduled Reminders - Set boolean fields to false if not set. |
| 367 | ([17494](https://github.com/civicrm/civicrm-core/pull/17494))** |
| 368 | |
| 369 | - **Allow bidirectional assignment of relationships from search results |
| 370 | ([17413](https://github.com/civicrm/civicrm-core/pull/17413))** |
| 371 | |
| 372 | Previously relationships could only be created from search results where the |
| 373 | contacts would be valid in the "A" side of the relationship type. |
| 374 | |
| 375 | - **Navigation menu - Fix translation of new-subtype entries |
| 376 | ([17451](https://github.com/civicrm/civicrm-core/pull/17451))** |
| 377 | |
| 378 | The "New" in menu items for creating a new contact of a subtype was not |
| 379 | translated. |
| 380 | |
| 381 | - **utf8mb4 - If strict mode enabled query will fail if KEY_BLOCK_SIZE is not 0 |
| 382 | ([17253](https://github.com/civicrm/civicrm-core/pull/17253))** |
| 383 | |
| 384 | - **Update DAO and l10n schema file |
| 385 | ([17395](https://github.com/civicrm/civicrm-core/pull/17395))** |
| 386 | |
| 387 | Price option name and value are now required in the database. |
| 388 | |
| 389 | - **Fix adding languages in multilingual |
| 390 | ([17228](https://github.com/civicrm/civicrm-core/pull/17228))** |
| 391 | |
| 392 | This resolves a database error when adding or removing a language on a |
| 393 | multilingual site. |
| 394 | |
| 395 | - **Don't exclude deleted contacts from ACL cache when user has permission |
| 396 | ([17379](https://github.com/civicrm/civicrm-core/pull/17379))** |
| 397 | |
| 398 | - **SMTP page appears broken when language is French (JS issue) |
| 399 | ([dev/core#1760](https://lab.civicrm.org/dev/core/-/issues/1760): |
| 400 | [17317](https://github.com/civicrm/civicrm-core/pull/17317))** |
| 401 | |
| 402 | Javascript strings that appear in Smarty are now escaped more thoroughly to |
| 403 | avoid markup problems. |
| 404 | |
| 405 | - **Add serialize column to civicrm_custom_field, remove "Multi-Select" html |
| 406 | type ([16992](https://github.com/civicrm/civicrm-core/pull/16992), [17722](https://github.com/civicrm/civicrm-core/pull/17722))** |
| 407 | |
| 408 | Work towards making custom select and multi-select fields more similar to |
| 409 | core select/multi-select fields. |
| 410 | |
| 411 | - **Respect file fields that have been configured as view only in profiles |
| 412 | ([17079](https://github.com/civicrm/civicrm-core/pull/17079))** |
| 413 | |
| 414 | - **Tag create - Respect created_date and created_id params |
| 415 | ([17257](https://github.com/civicrm/civicrm-core/pull/17257))** |
| 416 | |
| 417 | - **Public status messages should show correct class/icon like error |
| 418 | ([17376](https://github.com/civicrm/civicrm-core/pull/17376))** |
| 419 | |
| 420 | - **Decorative chevrons should be icons not angle quotes |
| 421 | ([17245](https://github.com/civicrm/civicrm-core/pull/17245))** |
| 422 | |
| 423 | - **A/B Test - Icon should be Erlenmeyer flask, not bar chart |
| 424 | ([17316](https://github.com/civicrm/civicrm-core/pull/17316))** |
| 425 | |
| 426 | - **Proceeding to confirmation page should be a "next" button not a check |
| 427 | ([17246](https://github.com/civicrm/civicrm-core/pull/17246))** |
| 428 | |
| 429 | ### CiviCase |
| 430 | |
| 431 | - **Case Activity: Follow-up activity assignee does not receive email |
| 432 | ([dev/core#1721](https://lab.civicrm.org/dev/core/-/issues/1721): |
| 433 | [17116](https://github.com/civicrm/civicrm-core/pull/17116))** |
| 434 | |
| 435 | Ensures when a follow up case activity is created the assignee is sent an |
| 436 | email. |
| 437 | |
| 438 | ### CiviContribute |
| 439 | |
| 440 | - **Custom fields disappear on page refresh |
| 441 | ([dev/core#1728](https://lab.civicrm.org/dev/core/-/issues/1728): |
| 442 | [17301](https://github.com/civicrm/civicrm-core/pull/17301))** |
| 443 | |
| 444 | This ensures that financial type specific custom fields are displayed on the |
| 445 | backend contribution form when it is refreshed. |
| 446 | |
| 447 | - **Fix pricefield pseudoconstant. |
| 448 | ([17364](https://github.com/civicrm/civicrm-core/pull/17364))** |
| 449 | |
| 450 | Fixes `PriceField` entity to build options for the `price_set_id` |
| 451 | pseudoconstant field. |
| 452 | |
| 453 | - **Nuance cancel options for processors |
| 454 | ([17430](https://github.com/civicrm/civicrm-core/pull/17430))** |
| 455 | |
| 456 | This allows payment processors to specify the way they allow cancellation of |
| 457 | recurring contributions. |
| 458 | |
| 459 | - **[regression] Contribution amount choices don't appear for anonymous users |
| 460 | ([dev/core#1823](https://lab.civicrm.org/dev/core/-/issues/1823): |
| 461 | [17619](https://github.com/civicrm/civicrm-core/pull/17619))** |
| 462 | |
| 463 | - **Import Contribution of custom fields only accepts "Numeric Value" rather |
| 464 | than "Label" ([dev/core#1806](https://lab.civicrm.org/dev/core/-/issues/1806): |
| 465 | [17632](https://github.com/civicrm/civicrm-core/pull/17632))** |
| 466 | |
| 467 | - **"Financial Type" listed twice in contribution export |
| 468 | ([dev/core#1650](https://lab.civicrm.org/dev/core/-/issues/1650): |
| 469 | [17147](https://github.com/civicrm/civicrm-core/pull/17147))** |
| 470 | |
| 471 | - **Record Payment does not update check_number & trxn id on main contribution. |
| 472 | ([dev/core#1758](https://lab.civicrm.org/dev/core/-/issues/1758): |
| 473 | [17314](https://github.com/civicrm/civicrm-core/pull/17314))** |
| 474 | |
| 475 | - **civicrm_financial_trxn.fee_amount reversals mixed up |
| 476 | ([dev/core#1775](https://lab.civicrm.org/dev/core/-/issues/1775): |
| 477 | [17386](https://github.com/civicrm/civicrm-core/pull/17386))** |
| 478 | |
| 479 | - **jquery validation type error on the credit card field |
| 480 | ([dev/core#1797](https://lab.civicrm.org/dev/core/-/issues/1797): |
| 481 | [17497](https://github.com/civicrm/civicrm-core/pull/17497))** |
| 482 | |
| 483 | Fixes a jQuery error when submitting a front end contribution form with a |
| 484 | credit card field. |
| 485 | |
| 486 | - **Fix payment instrument bug by using correct payment instrument |
| 487 | ([17607](https://github.com/civicrm/civicrm-core/pull/17607))** |
| 488 | |
| 489 | When a backend payment form records a payment it now will use a |
| 490 | processor-specific default payment instrument rather than the site-wide |
| 491 | default if it is set. |
| 492 | |
| 493 | - **Payment PropertyBag - Fix setAmount |
| 494 | ([17505](https://github.com/civicrm/civicrm-core/pull/17505))** |
| 495 | |
| 496 | Ensures "Amount" is set correctly on PropertyBag. |
| 497 | |
| 498 | - **Fixed hide show of start date |
| 499 | ([17446](https://github.com/civicrm/civicrm-core/pull/17446))** |
| 500 | |
| 501 | Fix hide/show of receive date for recurring contributions. |
| 502 | |
| 503 | - **Don't allow Contribution.repeattransaction to be used without a recurring |
| 504 | contribution ([17447](https://github.com/civicrm/civicrm-core/pull/17447))** |
| 505 | |
| 506 | - **Add actual field name for processor_id to getSubscriptionDetails |
| 507 | ([17466](https://github.com/civicrm/civicrm-core/pull/17466))** |
| 508 | |
| 509 | - **Make 'Pending' the default status for Contribution.repeattransaction |
| 510 | ([17432](https://github.com/civicrm/civicrm-core/pull/17432))** |
| 511 | |
| 512 | - **Fetch line items from correct contribution when repeating a contribution |
| 513 | ([17220](https://github.com/civicrm/civicrm-core/pull/17220))** |
| 514 | |
| 515 | - **Support order_reference param in API3 Payment.create |
| 516 | ([17278](https://github.com/civicrm/civicrm-core/pull/17278))** |
| 517 | |
| 518 | - **E_WARNINGS when viewing list of pledge payments |
| 519 | ([dev/core#1791](https://lab.civicrm.org/dev/core/-/issues/1791): |
| 520 | [17434](https://github.com/civicrm/civicrm-core/pull/17434))** |
| 521 | |
| 522 | - **Add propertyBag handling for getEmail when incoming uses email-5 |
| 523 | ([17267](https://github.com/civicrm/civicrm-core/pull/17267))** |
| 524 | |
| 525 | Payment processors can now retrieve billing email using the `propertyBag` |
| 526 | class methods. |
| 527 | |
| 528 | ### CiviMail |
| 529 | |
| 530 | - **Don't log subscription_history |
| 531 | ([dev/core#1762](https://lab.civicrm.org/dev/core/-/issues/1762): |
| 532 | [17323](https://github.com/civicrm/civicrm-core/pull/17323))** |
| 533 | |
| 534 | The `civicrm_subscription_history` table is effectively a log of contacts |
| 535 | being added to and removed from groups. Rows do not change value; each change |
| 536 | in group subscription results in a new row. Consequently, there is no reason |
| 537 | to attach detailed logging to this table. |
| 538 | |
| 539 | - **Unsubscribe generates 500 server error responses, logs say "missing |
| 540 | parameters" ([dev/core#1773](https://lab.civicrm.org/dev/core/-/issues/1773): |
| 541 | [17402](https://github.com/civicrm/civicrm-core/pull/17402))** |
| 542 | |
| 543 | Ensures the unsubscribe form can only be submitted once. |
| 544 | |
| 545 | ### CiviMember |
| 546 | |
| 547 | - **Recurring contribution fails with "ipn_payment_callback_exception", for |
| 548 | membership auto-renewal via PayPalPro. |
| 549 | ([dev/core#1608](https://lab.civicrm.org/dev/core/-/issues/1608): |
| 550 | [17355](https://github.com/civicrm/civicrm-core/pull/17355))** |
| 551 | |
| 552 | - **Don't hide disabled memberships from the contact membership tab |
| 553 | ([dev/membership#24](https://lab.civicrm.org/dev/membership/-/issues/24): |
| 554 | [17143](https://github.com/civicrm/civicrm-core/pull/17143) and |
| 555 | [17435](https://github.com/civicrm/civicrm-core/pull/17435))** |
| 556 | |
| 557 | This resolves a problem where memberships of disabled membership types would |
| 558 | not appear on the membership tab but would throw a duplicate membership |
| 559 | warning when creating a new membership with the same membership organization. |
| 560 | This also adds a unit test to lock in the correct behavior. |
| 561 | |
| 562 | - **Update MembershipType.name to be a required field |
| 563 | ([17463](https://github.com/civicrm/civicrm-core/pull/17463))** |
| 564 | |
| 565 | - **Fix PHP notice when is_override is not set |
| 566 | ([17273](https://github.com/civicrm/civicrm-core/pull/17273))** |
| 567 | |
| 568 | ### Joomla Integration |
| 569 | |
| 570 | - **Upgrade from 5.26.2 to 5.27 RC Fails |
| 571 | ([dev/joomla/#28](https://lab.civicrm.org/dev/joomla/-/issues/28): |
| 572 | [17710](https://github.com/civicrm/civicrm-core/pull/17710))** |
| 573 | |
| 574 | ### WordPress Integration |
| 575 | |
| 576 | - **Styling issues after upgrade to WordPress 5.3 |
| 577 | ([dev/wordpress#46](https://lab.civicrm.org/dev/wordpress/-/issues/46): |
| 578 | [16967](https://github.com/civicrm/civicrm-core/pull/16967))** |
| 579 | |
| 580 | - **WP - Change definitions of `cms.root`, `civicrm.root` |
| 581 | ([17360](https://github.com/civicrm/civicrm-core/pull/17360))** |
| 582 | |
| 583 | The base logic for computing path/URL defaults is in Civi/Core/Paths.php. |
| 584 | |
| 585 | For CiviCRM on WordPress, certain variables (which are easier to compute via |
| 586 | WordPress APIs) are overridden in `CRM_Utils_System_WordPress`. |
| 587 | |
| 588 | On WordPress, the path/URL logic for has been split: there is one code path |
| 589 | for normal CiviCRM pages which is based on WordPress APIs, and there is |
| 590 | another for older, standalone scripts in the `extern` folder which is based on |
| 591 | the same logic as before. |
| 592 | |
| 593 | - **Declare minimum WP and PHP versions required for installation |
| 594 | ([201](https://github.com/civicrm/civicrm-wordpress/pull/201))** |
| 595 | |
| 596 | - **wp-rest - Adjust extern URL. Be more defensive about 'query' part. |
| 597 | ([192](https://github.com/civicrm/civicrm-wordpress/pull/192))** |
| 598 | |
| 599 | This resolves issues with tracking URLs via the `wp-rest` endpoint that are |
| 600 | then modified with `hook_civicrm_alterExternUrl`. |
| 601 | |
| 602 | ## <a name="misc"></a>Miscellany |
| 603 | |
| 604 | - **Handle less common dynamic reference cases |
| 605 | ([17653](https://github.com/civicrm/civicrm-core/pull/17653))** |
| 606 | |
| 607 | - **Use apiv4, cache infra for basicTypes |
| 608 | ([17387](https://github.com/civicrm/civicrm-core/pull/17387))** |
| 609 | |
| 610 | - **Cleanup PriceFieldValue BAO |
| 611 | ([17306](https://github.com/civicrm/civicrm-core/pull/17306))** |
| 612 | |
| 613 | - **Clarify definition of amount field in civicrm_contribution_recur table. |
| 614 | ([17311](https://github.com/civicrm/civicrm-core/pull/17311))** |
| 615 | |
| 616 | - **Call completeOrder directly from contribute status update form |
| 617 | ([17347](https://github.com/civicrm/civicrm-core/pull/17347))** |
| 618 | |
| 619 | - **Switch docblock code to use markdown syntax. |
| 620 | ([17304](https://github.com/civicrm/civicrm-core/pull/17304))** |
| 621 | |
| 622 | - **Preliminary cleanup on form |
| 623 | ([17345](https://github.com/civicrm/civicrm-core/pull/17345))** |
| 624 | |
| 625 | - **Add getBAOClassName utiltiy function |
| 626 | ([17268](https://github.com/civicrm/civicrm-core/pull/17268))** |
| 627 | |
| 628 | - **CRM/Logging - Remove obsolete cache static clear in test |
| 629 | ([17269](https://github.com/civicrm/civicrm-core/pull/17269))** |
| 630 | |
| 631 | - **Remove incorrect retrievals of tax-term setting |
| 632 | ([17183](https://github.com/civicrm/civicrm-core/pull/17183))** |
| 633 | |
| 634 | - **CiviEvent Dashboard and Manage Events: clean up disused url template vars |
| 635 | ([17378](https://github.com/civicrm/civicrm-core/pull/17378))** |
| 636 | |
| 637 | - **Set default using spec for activity_date_time |
| 638 | ([17390](https://github.com/civicrm/civicrm-core/pull/17390))** |
| 639 | |
| 640 | - **Convert remaining Authorize.net test to use guzzle |
| 641 | ([17473](https://github.com/civicrm/civicrm-core/pull/17473))** |
| 642 | |
| 643 | - **Various BAO create/add cleanups to use writeRecord() |
| 644 | ([17308](https://github.com/civicrm/civicrm-core/pull/17308))** |
| 645 | |
| 646 | - **Remove instantiation of transaction from payment express ipn class |
| 647 | ([17348](https://github.com/civicrm/civicrm-core/pull/17348))** |
| 648 | |
| 649 | - **Remove null code |
| 650 | ([17381](https://github.com/civicrm/civicrm-core/pull/17381))** |
| 651 | |
| 652 | - **Remove validation bypass |
| 653 | ([17384](https://github.com/civicrm/civicrm-core/pull/17384))** |
| 654 | |
| 655 | - **Simplify recurring contribution template inheritance |
| 656 | ([17178](https://github.com/civicrm/civicrm-core/pull/17178))** |
| 657 | |
| 658 | - **Remove $_REQUEST passed into CRM_Utils_Request::retrieve NFC |
| 659 | ([17377](https://github.com/civicrm/civicrm-core/pull/17377))** |
| 660 | |
| 661 | - **Use now instead of date for activity API3 spec |
| 662 | ([17411](https://github.com/civicrm/civicrm-core/pull/17411))** |
| 663 | |
| 664 | - **Typo Fix ([17409](https://github.com/civicrm/civicrm-core/pull/17409))** |
| 665 | |
| 666 | - **Fix logic for job log cleanup and make SQL safer |
| 667 | ([17203](https://github.com/civicrm/civicrm-core/pull/17203))** |
| 668 | |
| 669 | - **Remove always-true if block. |
| 670 | ([17415](https://github.com/civicrm/civicrm-core/pull/17415))** |
| 671 | |
| 672 | - **Remove No longer required HTTP_Request Package |
| 673 | ([293](https://github.com/civicrm/civicrm-packages/pull/293))** |
| 674 | |
| 675 | - **Remove code that still seems unnecessary. |
| 676 | ([17342](https://github.com/civicrm/civicrm-core/pull/17342))** |
| 677 | |
| 678 | - **Undo variable variable. |
| 679 | ([17371](https://github.com/civicrm/civicrm-core/pull/17371))** |
| 680 | |
| 681 | - **Use non-deprecated method |
| 682 | ([17370](https://github.com/civicrm/civicrm-core/pull/17370))** |
| 683 | |
| 684 | - **Remove last reference to Payment->_processorName in core & remove from |
| 685 | processors ([17474](https://github.com/civicrm/civicrm-core/pull/17474))** |
| 686 | |
| 687 | - **Remove unused singleton from core payment processors |
| 688 | ([17468](https://github.com/civicrm/civicrm-core/pull/17468))** |
| 689 | |
| 690 | - **Test fixes to support apiv4 add of MembershipType |
| 691 | ([17488](https://github.com/civicrm/civicrm-core/pull/17488))** |
| 692 | |
| 693 | - **Merge code - remove UPDATE IGNORE+Delete & just use reliable update |
| 694 | ([17072](https://github.com/civicrm/civicrm-core/pull/17072))** |
| 695 | |
| 696 | - **Remove unneeded parameters in {ts} on membership form |
| 697 | ([17326](https://github.com/civicrm/civicrm-core/pull/17326))** |
| 698 | |
| 699 | - **Remove unused 'reset' param, other NFC tidy up: |
| 700 | ([17392](https://github.com/civicrm/civicrm-core/pull/17392))** |
| 701 | |
| 702 | - **Fix setLanguage docblock, other nfc changes |
| 703 | ([17356](https://github.com/civicrm/civicrm-core/pull/17356))** |
| 704 | |
| 705 | - **[REF] Simplify contributionIDs code |
| 706 | ([17441](https://github.com/civicrm/civicrm-core/pull/17441))** |
| 707 | |
| 708 | - **[REF] Extract getAttachments |
| 709 | ([17405](https://github.com/civicrm/civicrm-core/pull/17405))** |
| 710 | |
| 711 | - **[REF] Preliminary cleanup for #17339 |
| 712 | ([17417](https://github.com/civicrm/civicrm-core/pull/17417))** |
| 713 | |
| 714 | - **[REF] Remove unreachable block. |
| 715 | ([17407](https://github.com/civicrm/civicrm-core/pull/17407))** |
| 716 | |
| 717 | - **[REF] Pass an array of correct params to the function to create a recurring |
| 718 | contribution. ([17398](https://github.com/civicrm/civicrm-core/pull/17398))** |
| 719 | |
| 720 | - **[REF] Code simplification & unit test on suppressed emails in task |
| 721 | ([17393](https://github.com/civicrm/civicrm-core/pull/17393))** |
| 722 | |
| 723 | - **[REF] duplicate function. |
| 724 | ([17400](https://github.com/civicrm/civicrm-core/pull/17400))** |
| 725 | |
| 726 | - **[REF] Pass params not-by-reference |
| 727 | ([17406](https://github.com/civicrm/civicrm-core/pull/17406))** |
| 728 | |
| 729 | - **[REF] Refactor to switch from pear HTTP Request class to using Guzzle |
| 730 | ([17420](https://github.com/civicrm/civicrm-core/pull/17420))** |
| 731 | |
| 732 | - **[REF] [Reports] Ensure that all contribution pages including disabled ones |
| 733 | are return… ([17357](https://github.com/civicrm/civicrm-core/pull/17357))** |
| 734 | |
| 735 | - **[REF] Cleanup and extract string functions specific to entity names. |
| 736 | ([17330](https://github.com/civicrm/civicrm-core/pull/17330))** |
| 737 | |
| 738 | - **[REF] Stop passing by reference. |
| 739 | ([17349](https://github.com/civicrm/civicrm-core/pull/17349))** |
| 740 | |
| 741 | - **[REF] Simplify subject code. |
| 742 | ([17436](https://github.com/civicrm/civicrm-core/pull/17436))** |
| 743 | |
| 744 | - **[REF] Implement required fields database changes that have occured du… |
| 745 | ([17465](https://github.com/civicrm/civicrm-core/pull/17465), [17725](https://github.com/civicrm/civicrm-core/pull/17725))** |
| 746 | |
| 747 | - **[REF] Bump Pear Log version to fix compatability with Drupal 8 / Drup… |
| 748 | ([17460](https://github.com/civicrm/civicrm-core/pull/17460))** |
| 749 | |
| 750 | - **[REF] Convert one of the http calls in Authorize.net class to use guzzle. |
| 751 | ([17449](https://github.com/civicrm/civicrm-core/pull/17449))** |
| 752 | |
| 753 | - **[REF] Minor simplification |
| 754 | ([17443](https://github.com/civicrm/civicrm-core/pull/17443))** |
| 755 | |
| 756 | - **[REF] Grant BAO cleanup |
| 757 | ([17264](https://github.com/civicrm/civicrm-core/pull/17264))** |
| 758 | |
| 759 | - **[REF] CRM_Core_DAO_AllCoreTables::getBriefName to accept BAO name |
| 760 | ([17331](https://github.com/civicrm/civicrm-core/pull/17331))** |
| 761 | |
| 762 | - **[REF] Missing semicolon on smtp settings page, code cleanup in file-on-case, |
| 763 | add test ([17335](https://github.com/civicrm/civicrm-core/pull/17335))** |
| 764 | |
| 765 | - **[REF] Extract createFollowUpActivities |
| 766 | ([17481](https://github.com/civicrm/civicrm-core/pull/17481))** |
| 767 | |
| 768 | - **[REF] Switch to an api call to get the contact details. |
| 769 | ([17442](https://github.com/civicrm/civicrm-core/pull/17442))** |
| 770 | |
| 771 | - **[REF] Minor code simplification |
| 772 | ([17373](https://github.com/civicrm/civicrm-core/pull/17373))** |
| 773 | |
| 774 | - **[REF] Call completeOrder directly from event status update form |
| 775 | ([17346](https://github.com/civicrm/civicrm-core/pull/17346))** |
| 776 | |
| 777 | - **[REF] Remove never-passed params from function signature |
| 778 | ([17464](https://github.com/civicrm/civicrm-core/pull/17464))** |
| 779 | |
| 780 | - **[REF] Fix serialized membership field handling in RelationshipTest |
| 781 | ([17469](https://github.com/civicrm/civicrm-core/pull/17469))** |
| 782 | |
| 783 | - **[REF] Minor tidy up |
| 784 | ([17302](https://github.com/civicrm/civicrm-core/pull/17302))** |
| 785 | |
| 786 | - **[REF] Remove always NULL param modified_id |
| 787 | ([17489](https://github.com/civicrm/civicrm-core/pull/17489))** |
| 788 | |
| 789 | - **[REF] Add contribution_id field to search using metadata instead of h… |
| 790 | ([17286](https://github.com/civicrm/civicrm-core/pull/17286))** |
| 791 | |
| 792 | - **[REF] Fix unit test failures on MySQL 5.6 due to Custom Field table being |
| 793 | created without Dynamic Row Format |
| 794 | ([17586](https://github.com/civicrm/civicrm-core/pull/17586))** |
| 795 | |
| 796 | - **[REF] Start to convert Dummy processor to use PropertyBag |
| 797 | ([17452](https://github.com/civicrm/civicrm-core/pull/17452))** |
| 798 | |
| 799 | - **[Ref] remove calls to, and deprecate, pending function |
| 800 | ([17490](https://github.com/civicrm/civicrm-core/pull/17490))** |
| 801 | |
| 802 | - **[REF] Cleanup MailingAB BAO |
| 803 | ([17309](https://github.com/civicrm/civicrm-core/pull/17309))** |
| 804 | |
| 805 | - **[TEST] Update test to support for 8.0.19 change |
| 806 | ([17354](https://github.com/civicrm/civicrm-core/pull/17354))** |
| 807 | |
| 808 | - **[TEST] Fix test failure on Drupal 8 E2E PrevNextTest by only includin… |
| 809 | ([17358](https://github.com/civicrm/civicrm-core/pull/17358))** |
| 810 | |
| 811 | - **[TEST] dev/core#1766 - Remove flakiness from testGetFromTo tests |
| 812 | ([dev/core#1766](https://lab.civicrm.org/dev/core/-/issues/1766): |
| 813 | [17338](https://github.com/civicrm/civicrm-core/pull/17338))** |
| 814 | |
| 815 | - **[NFC/TEST] dev/core#1784 - Unit tests for contact delete/restore |
| 816 | ([dev/core#1784](https://lab.civicrm.org/dev/core/-/issues/1784): |
| 817 | [17437](https://github.com/civicrm/civicrm-core/pull/17437))** |
| 818 | |
| 819 | - **NFC - Change array() to short syntax [] |
| 820 | ([17470](https://github.com/civicrm/civicrm-core/pull/17470))** |
| 821 | |
| 822 | - **[NFC] Update Karma to be latest version |
| 823 | ([17439](https://github.com/civicrm/civicrm-core/pull/17439))** |
| 824 | |
| 825 | - **(NFC) CRM_Utils_Url - Fix declared type |
| 826 | ([17320](https://github.com/civicrm/civicrm-core/pull/17320))** |
| 827 | |
| 828 | - **[NFC] Remove some more of the old cvs blocks |
| 829 | ([17383](https://github.com/civicrm/civicrm-core/pull/17383))** |
| 830 | |
| 831 | - **NFC Add a bit more clarity to createEmailActivity function |
| 832 | ([17391](https://github.com/civicrm/civicrm-core/pull/17391))** |
| 833 | |
| 834 | - **[NFC] Add comment that deprecated code is actually still reachable |
| 835 | ([17340](https://github.com/civicrm/civicrm-core/pull/17340))** |
| 836 | |
| 837 | - **(NFC) Remove some cvs docblock help |
| 838 | ([17322](https://github.com/civicrm/civicrm-core/pull/17322))** |
| 839 | |
| 840 | - **[NFC] Add comment regarding lower case for Polish states |
| 841 | ([17327](https://github.com/civicrm/civicrm-core/pull/17327))** |
| 842 | |
| 843 | - **(NFC) RegionTest - Small cleanups |
| 844 | ([17270](https://github.com/civicrm/civicrm-core/pull/17270))** |
| 845 | |
| 846 | - **[NFC] Add sr-only class for content only for screen readers |
| 847 | ([17255](https://github.com/civicrm/civicrm-core/pull/17255))** |
| 848 | |
| 849 | - **NFC Change hardcoded ID to constant |
| 850 | ([17275](https://github.com/civicrm/civicrm-core/pull/17275))** |
| 851 | |
| 852 | - **[NFC] Fix use of single quotes, strict operator |
| 853 | ([17492](https://github.com/civicrm/civicrm-core/pull/17492))** |
| 854 | |
| 855 | ## <a name="credits"></a>Credits |
| 856 | |
| 857 | This release was developed by the following code authors: |
| 858 | |
| 859 | a-n The Artists Information Company - William Mortada; AGH Strategies - Alice |
| 860 | Frumin, Andie Hunt; Andrei Mondoc; British Humanist Association - Andrew West; |
| 861 | Caltha - Tomasz Pietrzkowski; Christian Wach; Circle Interactive - Pradeep |
| 862 | Nayak; CiviCRM - Coleman Watts, Tim Otten; CiviDesk - Yashodha Chaku; |
| 863 | CompuCorp - René Olivo; Coop SymbioTIC - Mathieu Lutfy; Dave D; Dominic Hargreaves; |
| 864 | Electronic Frontier Foundation - Mark Burdett; Freeform Solutions - Herb van den |
| 865 | Dool; Fuzion - Jitendra Purohit; Greenpeace Central and Eastern Europe - Patrick |
| 866 | Figel; JMA Consulting - Edsel Lopez, Seamus Lee; John Kingsnorth; Joinery - |
| 867 | Allen Shaw; Kartik Kathuria; Lighthouse Design and Consulting - Brian |
| 868 | Shaughnessy; Megaphone Technology Consulting - Jon Goldberg; MJCO - Mikey |
| 869 | O'Toole; MJW Consulting - Matthew Wire; Palante Technology Cooperative - Morgan |
| 870 | Robinson; Semper IT - Karin Gerritsen; Tadpole Collective - Kevin Cristiano; |
| 871 | Wikimedia Foundation - Eileen McNaughton |
| 872 | |
| 873 | Most authors also reviewed code for this release; in addition, the following |
| 874 | reviewers contributed their comments: |
| 875 | |
| 876 | Agileware - Justin Freeman; Artful Robot - Rich Lott; Betty Dolfing; CiviCoop - |
| 877 | Jaap Jansma; iXiam - Luciano Spiegel; JMA Consulting - Monish Deb; Kartik |
| 878 | Kathuria; Korlon - Stuart Gaston; Megaphone Technology Consulting - Dennis P. |
| 879 | Osorio; Squiffle Consulting - Aidan Saunders |
| 880 | |
| 881 | ## <a name="feedback"></a>Feedback |
| 882 | |
| 883 | These release notes are edited by Alice Frumin and Andie Hunt. If you'd like |
| 884 | to provide feedback on them, please log in to https://chat.civicrm.org/civicrm |
| 885 | and contact `@agh1`. |