| 1 | # CiviCRM 5.22.0 |
| 2 | |
| 3 | Released February 5, 2020 |
| 4 | |
| 5 | - **[Synopsis](#synopsis)** |
| 6 | - **[Features](#features)** |
| 7 | - **[Bugs resolved](#bugs)** |
| 8 | - **[Miscellany](#misc)** |
| 9 | - **[Credits](#credits)** |
| 10 | - **[Feedback](#feedback)** |
| 11 | |
| 12 | ## <a name="synopsis"></a>Synopsis |
| 13 | |
| 14 | | *Does this version...?* | | |
| 15 | |:--------------------------------------------------------------- |:-------:| |
| 16 | | Fix security vulnerabilities? | no | |
| 17 | | **Change the database schema?** | **yes** | |
| 18 | | **Alter the API?** | **yes** | |
| 19 | | Require attention to configuration options? | no | |
| 20 | | **Fix problems installing or upgrading to a previous version?** | **yes** | |
| 21 | | **Introduce features?** | **yes** | |
| 22 | | **Fix bugs?** | **yes** | |
| 23 | |
| 24 | ## <a name="features"></a>Features |
| 25 | |
| 26 | ### Core CiviCRM |
| 27 | |
| 28 | - **Field Names now Reserved Words in MySQL8 |
| 29 | ([dev/core#1143](https://lab.civicrm.org/dev/core/issues/1143), |
| 30 | [dev/core#1144](https://lab.civicrm.org/dev/core/issues/1144) and |
| 31 | [dev/core#1480](https://lab.civicrm.org/dev/core/issues/1480): |
| 32 | [16179](https://github.com/civicrm/civicrm-core/pull/16179) and |
| 33 | [16182](https://github.com/civicrm/civicrm-core/pull/16182))** |
| 34 | |
| 35 | Allows CiviCRM installations to run on MySQL8 and updates the test |
| 36 | infastructure to support MySQL8. |
| 37 | |
| 38 | - **Add controlField metadata for ChainSelect fields |
| 39 | ([16164](https://github.com/civicrm/civicrm-core/pull/16164))** |
| 40 | |
| 41 | Adds additional field metadata for state/province and county address fields |
| 42 | for the sake of autogenerated forms (afform). |
| 43 | |
| 44 | - **Allow Angular modules to provide dynamic HTML snippets |
| 45 | ([16078](https://github.com/civicrm/civicrm-core/pull/16078))** |
| 46 | |
| 47 | Supports afforms dynamic templates by allowing angular partials to be passed |
| 48 | as strings not just file paths. |
| 49 | |
| 50 | - **Allow values to be passed to api4 GetFields |
| 51 | ([16154](https://github.com/civicrm/civicrm-core/pull/16154) and |
| 52 | [16162](https://github.com/civicrm/civicrm-core/pull/16162))** |
| 53 | |
| 54 | Makes it possible to filter api4 `getFields` calls by contact |
| 55 | type, only returning custom fields appropriate to certain contact types. |
| 56 | |
| 57 | - **Pass api4 getFields values through to getOptions |
| 58 | ([16168](https://github.com/civicrm/civicrm-core/pull/16168))** |
| 59 | |
| 60 | Allows option filtering in api4, similar to how it works in api3. |
| 61 | |
| 62 | - **Add api to check for missing indices |
| 63 | ([16145](https://github.com/civicrm/civicrm-core/pull/16145))** |
| 64 | |
| 65 | Adds an api to check for missing mysql indices. |
| 66 | |
| 67 | - **Add in Country and StateProvince APIv4 Entities |
| 68 | ([16110](https://github.com/civicrm/civicrm-core/pull/16110))** |
| 69 | |
| 70 | Adds Country and StateProvince APIv4 Entities. |
| 71 | |
| 72 | - **Replace all instances of CRM_Core_Fatal with throw new CRM_Core_Exception |
| 73 | (Work Towards [dev/core#560](https://lab.civicrm.org/dev/core/issues/560): |
| 74 | [16141](https://github.com/civicrm/civicrm-core/pull/16141) and |
| 75 | [16067](https://github.com/civicrm/civicrm-core/pull/16067))** |
| 76 | |
| 77 | Work towards throwing exceptions (instead of fatal errors). |
| 78 | |
| 79 | - **Deadlocked queries cause an instant error for end-users, but are retried in |
| 80 | other circumstances (Work Towards |
| 81 | [dev/core#395](https://lab.civicrm.org/dev/core/issues/395): |
| 82 | [275](https://github.com/civicrm/civicrm-packages/pull/275) and |
| 83 | [16143](https://github.com/civicrm/civicrm-core/pull/16143))** |
| 84 | |
| 85 | Improves logging from deadlocks specifically, before this change an error |
| 86 | recorded because of a deadlock query was recorded as "DBError::Unknown Error" |
| 87 | now they are recorded as "DBError::deadlock". |
| 88 | |
| 89 | ### CiviContribute |
| 90 | |
| 91 | - **We should give user feedback in case of a Payment Processor Exception |
| 92 | ([15676](https://github.com/civicrm/civicrm-core/pull/15676))** |
| 93 | |
| 94 | Improves user experience when updating or canceling a recurring payment by |
| 95 | displaying any error message sent from the payment processor to the user. |
| 96 | |
| 97 | - **Code cleanup Update Paypal invokeApi to only throw exceptions. |
| 98 | ([16072](https://github.com/civicrm/civicrm-core/pull/16072))** |
| 99 | |
| 100 | Standardizes and improves error handling within PayPal. |
| 101 | |
| 102 | ## <a name="bugs"></a>Bugs resolved |
| 103 | |
| 104 | ### Core CiviCRM |
| 105 | |
| 106 | - **CIVI-SA-2019-21 may lead to regressions when following typehints on |
| 107 | CRM_Core_BAO_Setting::setItem() |
| 108 | ([dev/core#1425](https://lab.civicrm.org/dev/core/issues/1425): |
| 109 | [15975](https://github.com/civicrm/civicrm-core/pull/15975))** |
| 110 | |
| 111 | Deprecates old setItem & setOptionValue functions on |
| 112 | BAO_Setting to prevent regressions. |
| 113 | |
| 114 | - **Deadlocks on acl_cache (Work Towards |
| 115 | [dev/core#1486](https://lab.civicrm.org/dev/core/issues/1486): |
| 116 | [16144](https://github.com/civicrm/civicrm-core/pull/16144))** |
| 117 | |
| 118 | Adds an index to the `civicrm_acl_cache.modified_date` column to reduce |
| 119 | deadlocks when running the ACL Cache. |
| 120 | |
| 121 | - **Port "+options" for constant-parameters to APIv4-PHP (Work Towards |
| 122 | [dev/core#1489](https://lab.civicrm.org/dev/core/issues/1489): |
| 123 | [16149](https://github.com/civicrm/civicrm-core/pull/16149))** |
| 124 | |
| 125 | Ensures managed entities are not reconciled during upgrades. |
| 126 | |
| 127 | - **Api4 - Fix auto serialize array input for CheckBox/MultiSelect fields |
| 128 | ([16152](https://github.com/civicrm/civicrm-core/pull/16152))** |
| 129 | |
| 130 | In Api4, serialized fields should input/output as array data. This wasn't |
| 131 | working on the input side for custom entities. This fixes array input handling |
| 132 | and adds test coverage. |
| 133 | |
| 134 | - **Fix output display in api4 explorer |
| 135 | ([16130](https://github.com/civicrm/civicrm-core/pull/16130))** |
| 136 | |
| 137 | Ensures api4 explorer displays output with html entities properly. |
| 138 | |
| 139 | - **Add in searchFieldMetadata for contact_tags, contact_type, group and |
| 140 | deleted_contacts fields for contribute, pledge searches |
| 141 | ([15942](https://github.com/civicrm/civicrm-core/pull/15942))** |
| 142 | |
| 143 | Adds url support on search forms (other than the search builder) for the |
| 144 | following fields: `contact_tags`, `contact_type`, `group` and |
| 145 | `deleted_contacts`. |
| 146 | |
| 147 | - **Update Smart Group form uses different labels for Group Title and Group |
| 148 | Description ([16042](https://github.com/civicrm/civicrm-core/pull/16042))** |
| 149 | |
| 150 | Improves user experience by making the Smart Group field labels on the |
| 151 | Advanced Search from match the labels used on the Smart Group edit form. |
| 152 | |
| 153 | - **Update Smart Group form unsets the existing Group Types |
| 154 | ([16043](https://github.com/civicrm/civicrm-core/pull/16043))** |
| 155 | |
| 156 | Ensures the Mailing List group type remains set on the Update Smart Group |
| 157 | form. |
| 158 | |
| 159 | - **loadServices: tighten up file match regex |
| 160 | ([16377](https://github.com/civicrm/civicrm-core/pull/16377))** |
| 161 | |
| 162 | Ensures that CiviCRM code living under a path containing the characters 'php' |
| 163 | does not crash when loading services. |
| 164 | |
| 165 | - **Activity type listing shows name instead label |
| 166 | ([dev/core#1470](https://lab.civicrm.org/dev/core/issues/1470): |
| 167 | [16094](https://github.com/civicrm/civicrm-core/pull/16094))** |
| 168 | |
| 169 | - **Export doesn't work in Excel with diacritic chars |
| 170 | ([dev/core#1424](https://lab.civicrm.org/dev/core/issues/1424): |
| 171 | [16117](https://github.com/civicrm/civicrm-core/pull/16117) and |
| 172 | [15968](https://github.com/civicrm/civicrm-core/pull/15968))** |
| 173 | |
| 174 | - **text missing from email column when custom search profile is used |
| 175 | in Advanced Search |
| 176 | ([dev/core#1474](https://lab.civicrm.org/dev/core/issues/1474): |
| 177 | [16101](https://github.com/civicrm/civicrm-core/pull/16101))** |
| 178 | |
| 179 | - **Undefined offset and uninitialized string offset notices on upgrade to 5.21 |
| 180 | ([dev/core#1555](https://lab.civicrm.org/dev/core/issues/1555): |
| 181 | [16417](https://github.com/civicrm/civicrm-core/pull/16417))** |
| 182 | |
| 183 | ### CiviCase |
| 184 | |
| 185 | - **Add case activity action links to activity report |
| 186 | ([15135](https://github.com/civicrm/civicrm-core/pull/15135))** |
| 187 | |
| 188 | Ensures if an activity is linked to a case the "case activity" actions are |
| 189 | displayed instead of the standard activity actions (eg. move/copy to case |
| 190 | instead of file on case). |
| 191 | |
| 192 | - **Activity Details CiviReport gives network error when paging to next page if |
| 193 | choose filter to include case activities |
| 194 | ([dev/core#1552](https://lab.civicrm.org/dev/core/issues/1552): |
| 195 | [16393](https://github.com/civicrm/civicrm-core/pull/16393))** |
| 196 | |
| 197 | - **Case Detail 'Active Role?' filter excludes cases without relationships |
| 198 | ([dev/report#24](https://lab.civicrm.org/dev/report/issues/24): |
| 199 | [15972](https://github.com/civicrm/civicrm-core/pull/15972))** |
| 200 | |
| 201 | - **Manager/Creator Information not being returned for case related contacts |
| 202 | when fetching Case Details |
| 203 | ([dev/core#1426](https://lab.civicrm.org/dev/core/issues/1426): |
| 204 | [16006](https://github.com/civicrm/civicrm-core/pull/16006))** |
| 205 | |
| 206 | ### CiviContribute |
| 207 | |
| 208 | - **Thousands-separator corrupts price field values (comma) |
| 209 | ([dev/core#1472](https://lab.civicrm.org/dev/core/issues/1472): |
| 210 | [16111](https://github.com/civicrm/civicrm-core/pull/16111))** |
| 211 | |
| 212 | Fixes a bug where price options with thousands operators didn't submit |
| 213 | correctly. |
| 214 | |
| 215 | - **E notice fix on Price set form |
| 216 | ([16096](https://github.com/civicrm/civicrm-core/pull/16096))** |
| 217 | |
| 218 | Removes an e notice when submitting the price set form. |
| 219 | |
| 220 | - **Advanced search fails to properly search for contribution source |
| 221 | ([dev/core#1468](https://lab.civicrm.org/dev/core/issues/1468): |
| 222 | [16083](https://github.com/civicrm/civicrm-core/pull/16083))** |
| 223 | |
| 224 | ### CiviEvent |
| 225 | |
| 226 | - **Event Participants actions (Print Name Badges, Export...) ignores search |
| 227 | criteria ([dev/core#1422](https://lab.civicrm.org/dev/core/issues/1422): |
| 228 | [16038](https://github.com/civicrm/civicrm-core/pull/16038))** |
| 229 | |
| 230 | Ensures that the actions menu on the participant search form respects search |
| 231 | criteria. |
| 232 | |
| 233 | ### CiviMail |
| 234 | |
| 235 | - **Exception Malformed temp table category on New A/B Test |
| 236 | ([dev/core#1564](https://lab.civicrm.org/dev/core/issues/1564): |
| 237 | [16464](https://github.com/civicrm/civicrm-core/pull/16464))** |
| 238 | |
| 239 | Fixes a regression in 5.21.2 where creating a new A/B Test resulted in a |
| 240 | session status Exception Malformed temp table. |
| 241 | |
| 242 | ### CiviMember |
| 243 | |
| 244 | - **Fix js error on choosing membership type |
| 245 | ([16058](https://github.com/civicrm/civicrm-core/pull/16058))** |
| 246 | |
| 247 | Fixes a javascript error "Uncaught ReferenceError" when choosing a membership |
| 248 | type from the backend membership signup form. |
| 249 | |
| 250 | ### Drupal Integration |
| 251 | |
| 252 | - **Error when creating user record for Civi contact |
| 253 | ([dev/drupal#99](https://lab.civicrm.org/dev/drupal/issues/99): |
| 254 | [16157](https://github.com/civicrm/civicrm-core/pull/16157))** |
| 255 | |
| 256 | Fixes an E-notice "Notice: Trying to get property 'id' of non-object in |
| 257 | CRM_Core_BAO_UFMatch::updateContactEmail() (line 449 of |
| 258 | /var/www/sitename/vendor/civicrm/civicrm-core/CRM/Core/BAO/UFMatch.php)." when |
| 259 | submitting the "Create User Record" form which can be found from the "Actions" |
| 260 | menu-button while viewing a CRM contact. |
| 261 | |
| 262 | - **Missing address on `/user` when location type label differs from its name |
| 263 | ([dev/core#1473](https://lab.civicrm.org/dev/core/issues/1473): |
| 264 | [16100](https://github.com/civicrm/civicrm-core/pull/16100))** |
| 265 | |
| 266 | ### Wordpress Integration |
| 267 | |
| 268 | - **Fix basepage title for Yoast SEO when theme declares "title-tag" support |
| 269 | ([174](https://github.com/civicrm/civicrm-wordpress/pull/174))** |
| 270 | |
| 271 | Fixes a bug for sites with the Yoast SEO plugin where the CiviCRM page title |
| 272 | was not being displayed properly. Specifically the Yoast SEO plugin |
| 273 | short-circuits the code in `wp_get_document_title()` by filtering via |
| 274 | `pre_get_document_title`. This means that the CiviCRM code to apply the |
| 275 | CiviCRM basepage title via the document_title_parts filter is never reached |
| 276 | and the basepage title does not reflect the CiviCRM content. |
| 277 | |
| 278 | ## <a name="misc"></a>Miscellany |
| 279 | |
| 280 | - **Fix typo, Mailign should be Mailing |
| 281 | ([16031](https://github.com/civicrm/civicrm-core/pull/16031))** |
| 282 | |
| 283 | - **Switch static var to using Civi::statics |
| 284 | ([16138](https://github.com/civicrm/civicrm-core/pull/16138))** |
| 285 | |
| 286 | - **Remove code to create a subscription history entry when a contact is created |
| 287 | ([dev/core#1482](https://lab.civicrm.org/dev/core/issues/1482): |
| 288 | [16125](https://github.com/civicrm/civicrm-core/pull/16125))** |
| 289 | |
| 290 | - **Remove unnecessary query when updating org, if no name update. |
| 291 | ([16080](https://github.com/civicrm/civicrm-core/pull/16080))** |
| 292 | |
| 293 | - **Remove unnecessary, and possibly incorrect query from email update |
| 294 | ([16079](https://github.com/civicrm/civicrm-core/pull/16079))** |
| 295 | |
| 296 | - **Remove unneeded zendframwork/zend-validator and zendframwork/zend-stdlib |
| 297 | packages as not required by any other package |
| 298 | ([16112](https://github.com/civicrm/civicrm-core/pull/16112))** |
| 299 | |
| 300 | - **Remove legacy_redirect_path handling |
| 301 | ([16134](https://github.com/civicrm/civicrm-core/pull/16134))** |
| 302 | |
| 303 | - **Remove function marked as deprecated & unused by core nearly a year ago |
| 304 | ([16124](https://github.com/civicrm/civicrm-core/pull/16124))** |
| 305 | |
| 306 | - **Remove vestige of apiv2 |
| 307 | ([16115](https://github.com/civicrm/civicrm-core/pull/16115))** |
| 308 | |
| 309 | - **Remove PEAR package Structures_Graph as there appears to be no use for it |
| 310 | ([279](https://github.com/civicrm/civicrm-packages/pull/279))** |
| 311 | |
| 312 | - **Remove Net_UserAgent_Detect package |
| 313 | ([272](https://github.com/civicrm/civicrm-packages/pull/272))** |
| 314 | |
| 315 | - **Paypal class cleanup |
| 316 | ([16088](https://github.com/civicrm/civicrm-core/pull/16088))** |
| 317 | |
| 318 | - **2020 test fixes. |
| 319 | ([16172](https://github.com/civicrm/civicrm-core/pull/16172))** |
| 320 | |
| 321 | - **Unit test for https://github.com/civicrm/civicrm-core/pull/16120 |
| 322 | ([16127](https://github.com/civicrm/civicrm-core/pull/16127))** |
| 323 | |
| 324 | - **Update unit tests to use name spaced format of phpunit test classes for |
| 325 | phpunit6 compatability |
| 326 | ([594](https://github.com/civicrm/civicrm-drupal/pull/594))** |
| 327 | |
| 328 | - **Update to use the namespaced version of the PHPUnit test classes as this |
| 329 | will work for phpunit6 going forward as well as phpunit5 |
| 330 | ([175](https://github.com/civicrm/civicrm-wordpress/pull/175))** |
| 331 | |
| 332 | - **Update PHPUnit Test class declarations to use namespaced format for phpunit6 |
| 333 | compatability ([108](https://github.com/civicrm/civicrm-backdrop/pull/108))** |
| 334 | |
| 335 | - **[REF] Minor cleanup - declare exceptions, use single quotes, strict |
| 336 | comparison ([16137](https://github.com/civicrm/civicrm-core/pull/16137))** |
| 337 | |
| 338 | - **[REF] remove CRM_Core_Error check |
| 339 | ([16136](https://github.com/civicrm/civicrm-core/pull/16136))** |
| 340 | |
| 341 | - **[REF] Convert more petition signature fatals to status bounce |
| 342 | ([16075](https://github.com/civicrm/civicrm-core/pull/16075))** |
| 343 | |
| 344 | - **[REF] Switch CRM_Utils_Error::fatal calls for CRM_Core_Exception in Grant. |
| 345 | utils, bin/ and Civi/Angular/ folders |
| 346 | ([16109](https://github.com/civicrm/civicrm-core/pull/16109))** |
| 347 | |
| 348 | - **[REF] Minor simplification on additional_participants checks |
| 349 | ([16056](https://github.com/civicrm/civicrm-core/pull/16056))** |
| 350 | |
| 351 | - **[REF] Refactor Contact Search form to use standardised getSortID function |
| 352 | ([16054](https://github.com/civicrm/civicrm-core/pull/16054))** |
| 353 | |
| 354 | - **[REF] Refactor Activity Search to use parent getSortID function |
| 355 | ([16053](https://github.com/civicrm/civicrm-core/pull/16053))** |
| 356 | |
| 357 | - **[REF] Refactor Campaign Search form to use standardised getSortID function |
| 358 | ([16055](https://github.com/civicrm/civicrm-core/pull/16055))** |
| 359 | |
| 360 | - **[REF] Move wrangling of Front end form contribution param for autoRenew back |
| 361 | to form ([15927](https://github.com/civicrm/civicrm-core/pull/15927))** |
| 362 | |
| 363 | - **[REF] Replace Deprecated function CRM_Core_BAO_Setting::setItem with the |
| 364 | relevant Civi::contactSettings function |
| 365 | ([16044](https://github.com/civicrm/civicrm-core/pull/16044))** |
| 366 | |
| 367 | - **[REF] remove unused from getACLRoles |
| 368 | ([16180](https://github.com/civicrm/civicrm-core/pull/16180))** |
| 369 | |
| 370 | - **[REF] simplify recordAdjustedAmt function |
| 371 | ([16135](https://github.com/civicrm/civicrm-core/pull/16135))** |
| 372 | |
| 373 | - **[REF] extract member form batch update & add test |
| 374 | ([16151](https://github.com/civicrm/civicrm-core/pull/16151))** |
| 375 | |
| 376 | - **[REF] Remove unused params from function signature for getACLs |
| 377 | ([16175](https://github.com/civicrm/civicrm-core/pull/16175))** |
| 378 | |
| 379 | - **[REF] step towards wiping out $ids array in membership bao functions |
| 380 | ([16132](https://github.com/civicrm/civicrm-core/pull/16132))** |
| 381 | |
| 382 | - **[Ref] improve readability of acl code |
| 383 | ([16131](https://github.com/civicrm/civicrm-core/pull/16131))** |
| 384 | |
| 385 | - **[Ref] Remove php4 support from BAO_Acl class |
| 386 | ([16119](https://github.com/civicrm/civicrm-core/pull/16119))** |
| 387 | |
| 388 | - **(NFC) Civi, CRM, tests - Update for |
| 389 | Drupal.Commenting.VariableComment.IncorrectVarType |
| 390 | ([16384](https://github.com/civicrm/civicrm-core/pull/16384))** |
| 391 | |
| 392 | - **[NFC] Test clean up. |
| 393 | ([16133](https://github.com/civicrm/civicrm-core/pull/16133))** |
| 394 | |
| 395 | - **[NFC] cleanup to declared exceptions, quotes, strict mode. |
| 396 | ([16114](https://github.com/civicrm/civicrm-core/pull/16114))** |
| 397 | |
| 398 | - **[NFC] Declare exceptions, use single quotes where possible, use strict |
| 399 | comparison ([16142](https://github.com/civicrm/civicrm-core/pull/16142))** |
| 400 | |
| 401 | - **[NFC] Add in unit test for dev/core#1460 |
| 402 | ([16063](https://github.com/civicrm/civicrm-core/pull/16063))** |
| 403 | |
| 404 | - **[NFC] code cleanup |
| 405 | ([16050](https://github.com/civicrm/civicrm-core/pull/16050))** |
| 406 | |
| 407 | - **[NFC] Add in a unit test of passing an array into the Civi::settings set |
| 408 | facade and getting it back |
| 409 | ([16045](https://github.com/civicrm/civicrm-core/pull/16045))** |
| 410 | |
| 411 | - **[NFC] Add test on buildMembershipTypeValues & cleanup class |
| 412 | ([16167](https://github.com/civicrm/civicrm-core/pull/16167))** |
| 413 | |
| 414 | - **[NFC] Re-generate DAOs |
| 415 | ([16178](https://github.com/civicrm/civicrm-core/pull/16178))** |
| 416 | |
| 417 | - **[NFC] Extract duplicated code lines in test |
| 418 | ([16165](https://github.com/civicrm/civicrm-core/pull/16165))** |
| 419 | |
| 420 | - **[NFC] Clean up unit test |
| 421 | ([16163](https://github.com/civicrm/civicrm-core/pull/16163))** |
| 422 | |
| 423 | - **[NFC] If statement is always true |
| 424 | ([16122](https://github.com/civicrm/civicrm-core/pull/16122))** |
| 425 | |
| 426 | ## <a name="credits"></a>Credits |
| 427 | |
| 428 | This release was developed by the following code authors: |
| 429 | |
| 430 | AGH Strategies - Andrew Hunt; Agileware - Justin Freeman; Australian Greens - |
| 431 | Seamus Lee; Christian Wach; Circle Interactive - Pradeep Nayak; CiviCRM - |
| 432 | Coleman Watts, Tim Otten; Coop SymbioTIC - Mathieu Lutfy; Dave D; Fuzion - |
| 433 | Jitendra Purohit; MJW Consulting - Matthew Wire; Squiffle Consulting - Aidan |
| 434 | Saunders; Wikimedia Foundation - Eileen McNaughton |
| 435 | |
| 436 | Most authors also reviewed code for this release; in addition, the following |
| 437 | reviewers contributed their comments: |
| 438 | |
| 439 | AGH Strategies - Alice Frumin; Artful Robot - Rich Lott; CiviDesk - Yashodha |
| 440 | Chaku; Joinery - Allen Shaw; Megaphone Technology Consulting - Jon Goldberg; |
| 441 | Tadpole Collective - Kevin Cristiano; |
| 442 | |
| 443 | ## <a name="feedback"></a>Feedback |
| 444 | |
| 445 | These release notes are edited by Alice Frumin and Andrew Hunt. If you'd like |
| 446 | to provide feedback on them, please log in to https://chat.civicrm.org/civicrm |
| 447 | and contact `@agh1`. |