Permalink
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
1011 lines (741 sloc) 45.3 KB

CiviCRM 4.7.30

Released February 7, 2018

Synopsis

Does this version...?
Fix security vulnerabilities? no
Change the database schema? no
Alter the API? yes
Require attention to configuration options? yes
Fix problems installing or upgrading to a previous version? yes
Introduce features? yes
Fix bugs? yes

Features

Core CiviCRM

  • CRM-21380 Add setting to block activity type from sending assignee notification (11222)

    Site administrators can now choose to suppress activity assignee notifications for certain activity types even while assignee notifications are enabled for other activity types.

  • Increase minimum php version requirements (11416)

    CiviCRM now requires a minimum of PHP 5.4 to run or install, though versions below 5.6 are not advised and will display a notice. PHP 7.0 is the recommended version.

  • CRM-21406 Create Standalone Export Form (11254)

    Entities such as contacts, cases, and others can now be exported from a form at a URL specifying the IDs of each entity to export.

  • CRM-21584 Add CrmRegion Tag to Contact Actions menu template (11439)

    The "Actions" menu item at the top of a contact record now is now specified as a region where extensions can easily insert markup.

  • CRM-21389 Add Regions to Contact UserDashBoard (11235)

    The frontend user dashboard now has regions specified before and after each section. Extensions can now easily instert markup in these regions.

  • CRM-13123 Handle value-separated fields at the dao level (11394)

    There are various ways serialized data is stored as strings in the database, but handling of this was generally ad-hoc. This change documents each field's serialization type (e.g. delimited values, PHP serialization, or JSON) and implements a common utility for serializing and unserializing values.

  • CRM-21530 Call post hook after activity is filed on case (11385)

    hook_civicrm_post is now invoked for a CaseActivity entity when an activity is filed to a case. This allows extension developers to have certain actions be triggered by the event.

  • CRM-21499 Add filter to manage tags page (11368 and 11352)

    An administrator may now filter the list of tags by partial name on the Manage Tags page.

  • CRM-21443 Add support for auto-complete fields in the batch update forms (11290)

    Previously, the batch update form would exclude autocomplete-select custom fields. This adds support for them.

  • CRM-21286 expose active flag in UI for group (11103)

    A checkbox when editing a group now allows changing whether the group is active.

  • CRM-21483 Move anguar module crmRouteBinder to core (11328)

    A new data sync method for AngularJS, crmRouteBinder, is now available in core. It had previously been part of the new CiviCase extension.

  • CRM-21497 crmRouteBinder: add deep comparison option (11345)

    There is now the option for the crmRouteBinder AngularJS data sync method to notice changes that may be deep within a nested object or array.

  • CRM-20681 Automatically search when switching options in Quicksearch (10466)

    The quick search box in the menu bar supports a variety of options. When the box has search text and a user clicks another option, the box immediately runs a search based upon that new option.

  • CRM-21204 Show Import Progress Bar for Activity, Contribution and Membership imports (11007)

    This fixes the progress bar interface for activity, contribution, and membership imports to match that for contact imports.

  • CRM-21449 Add location field to Activity Report (11296)

    The activity report can now display and filter by the activity location.

  • CRM-21419 Prevent users from accidentally creating a single activity when they want multiple activities (11264)

    When creating an activity with multiple target contacts, you are now required to choose whether to create a single activity with all of the targets together or one activity with each of the targets by itself. Previously, the single activity was default, and a checkbox allowed creating separate activities.

  • CRM-21349 Increase timeout of status message after batch merge. (11195)

    The status message after a batch merge now must be manually dismissed.

  • CRM-21416 Add reset link beside 'Search' button below Advance Search form (11260)

    The Reset Form link is now available at both the bottom and the top of the Advanced Search form.

  • CRM-21408 Api explorer - better defaults for sequential checkbox (11256)

    When using the API Explorer, the "Sequential" checkbox is now unchecked for actions other than Get and entirely hidden for Getsingle.

  • CRM-21551 Add parameter to support skipping processing greetings when calling api contact.create (11405)

    When creating or updating a contact via the API, you may now bypass the process that updates the contact's greeting values.

  • CRM-21547 Add UI order by options to Contact logging summary report (11402)

    The Contact Logging Summary report can now be sorted by log date, the contact that was altered, or the contact making the change.

CiviCase

  • CRM-21446 Allow case id as well as hash in inbound email processing to autofile emails on cases (11320)

    Inbound emails can now specify a case ID and be accurately filed to the corresponding case.

  • CRM-21360 Make 'Open Case' Activity Optional When Defining Case Types (11204)

    A case type can now be defined without an "Open Case" activity type.

CiviContribute

  • CRM-21448 Need a link from contribution record when there is no cid in the url (11295)

    The contact display name on a contribution is now displayed as a link to the contact record.

  • CRM-21106 Move financial type ACL clause for reports into extension (10901)

    In order to use financial type ACLs in a report, you must install the Access Control by Financial Type Reports extension.

  • CRM-21577 Add links to payment blocks to allow payments (11432)

    When a contribution listing displays payments beneath each contribution, Record Payment links now appear beneath partially paid contributions.

  • CRM-21454 Add money raised on page contribution widget ajax response (11299)

    The AJAX data used to populate contribution page widgets now return the amount raised as its own value.

  • CRM-21400 Add in static var on contribution thank you page to hold trxn id (11247)

    Extension developers can now access the transaction ID when customizing the thank you page.

CiviMail

  • CRM-21378 Incorporate email abuse report as a spam type of bounce (11226)

    Email abuse reports from email providers are now recorded similarly to spam report bounce messages, causing them to be handled as more severe bounces.

  • CRM-21476 Rename 'Clicks' to 'Unique Clicks' in mailing summary report (11319)

    The "Clicks" item in the mailing summary report is now specified as "Unique Clicks" to highlight the fact that it displays the number of recipients who clicked items rather than the number of actual clicks.

  • CRM-21567 Add email filter for Mail Bounce Report (11415)

    The Mail Bounce Report can now be filtered by email address.

  • CRM-21486 Support multiple test mail (11332)

    Multiple addresses can be set as recipients for test messages from the CiviMail composition form.

  • CRM-21279 Rebuild recipient list and calculate count on demand, store result in $cacheFactory (11091)

    Automatic calculation of the number of recipients on a CiviMail mailing is now optional; otherwise, there is a new "Estimate recipient count" button that manually calculates the number of recipients.

  • CRM-21472 Make CiviMail token validation extensible (11316)

    Extensions using FlexMailer can now alter the list of required tokens (such as an unsubscribe URL and the domain address) for CiviMail messages.

  • CRM-21383 Load message templates on demand in CiviMail compose UI (11267)

    Message templates are now loaded only when needed rather than upon opening the CiviMail composition form.

CiviMember

  • CRM-21504 Add membership to recurring contribution detail (11358)

    If a recurring contribution auto-renews a membership, a link to the membership now appears when viewing the recurring contribution.

Drupal Integration

  • CRM-21341 Drupal 8 Hook Support (11171)

    CiviCRM now invokes CiviCRM hook implementations in Drupal 8 modules.

  • CRM-21093 Move CiviCRM initialization out of service constructor (in Drupal 8) and into method (11379) (completes prior work)

    CiviCRM core now initializes using a new method that was modified in the past.

WordPress Integration

  • CRM-21470 Add support for WordPress Polylang plugin (11333 and 11312)

    CiviCRM can now inherit the CMS language from WordPress sites with the Polylang plugin, working similarly to WPML and other CMSes.

Bugs resolved

Core CiviCRM

  • CRM-21473 Adding new permission for adding notes and fixing existing issues with notes permissions (11314)

    Users with the ability to view contacts were previously able to add notes by using a specially-crafted URL to reach the New Note form even if they lacked the ability to edit the contact. This change requires a new permission to add notes, and it requires the permission to edit the contact in order to edit or delete notes.

  • CRM-14343 Import Error File Maxes out at 250 (11233)

    This removes a limit that would only display the first 250 rows of errors from an import.

  • CRM-21229 Manage Group page is slow if you have smart groups (11050) (completes previous work)

    Some adjustments were made to improve related tests and to prevent problems over repeated test runs.

  • CRM-21518 and CRM-21539 Add missing structure divs in templates (11369 and 11396)

    Many administrative forms had minor inconsistencies in their markup, complicating the task of retheming. This adds missing div elements and classes.

  • CRM-21180 Inline changes to custom fields aren't reflected in custom greetings (11364)

    This resolves a bug where greetings that use custom fields would not update to reflect changes that are made through inline edits to those fields.

  • CRM-21298 Don't offer to fix indices until we can do it right (11250)

    A change in 2017 introduced a warning on the system status page if a site lacks a database index that CiviCRM expects. The warning message would offer to "update indices" in the database, resolving the problem. However, the update would fail on some sites due to a database error.

    This change merely suppresses the warning message while work is done to improve the update process.

  • CRM-21433 Optimize dupe checking in Recent Items stack (11281)

    The Recent Items list now suppresses duplicate items according to their entity type and ID. Previously, duplicates were checked using the URL, which may place parameters in a different order each time.

  • CRM-21409 Don't bypass hooks when updating thankyou_sent/receipt_sent fields via PDF letter action (11257)

  • CRM-21398 Error when exporting cases (11245)

    This sets all ID fields on the temporary table for exports to have a length of 255, reducing the likelihood of values being to long when exported.

  • CRM-21001 E-notice in com_civicrm/civicrm/CRM/Core/BAO/SchemaHandler.php on line 730 (11307)

  • CRM-21412 Do not give fatal error on report when no fields selected (11259)

    A report with no columns selected now gracefully shows no results.

  • CRM-21552 Dedupe Rule : get contact type name instead of label (11406)

    The form for editing dedupe rules would validate by contact type label (potentially translated) rather than name.

  • CRM-21534 Key UI elements fail when fetching activity records from MariaDB (11395)

  • CRM-21535 Custom file upload field not showing up when Viewing Activity from Case Report (11386)

  • CRM-21531 Multi-select custom field searches can crash on MariaDB (11388)

    This resolves an inconsistency in how MySQL and MariaDB would apply RegEx for searching multiple-value delimited custom fields.

  • CRM-21466 Fix (obscure) enotice when updating greeting for contact, add test (11310)

  • CRM-21469 Cannot remove all groups when editing a contact (11311)

  • CRM-21363 Ensure that tests run using ONLY_FULL_GROUP_BY sql_mode for mysql 5.7 (11208)

  • CRM-21344 Links to documentation from installer error messages are broken (11190)

  • CRM-21214 Chaining shared addresses doesn't work correctly (11324) (follow-up on previous work)

    This resolves a bug causing a crash when passing "null" as a string for an address master ID.

  • CRM-20861 Location type does not show for custom address fields (10650)

  • CRM-21324 Support 'null' on date fields in the api (11152)

    Date fields are now consistent with other fields in accepting the word null to save a null value.

  • CRM-21422 TimeZone handling for Europe/London fails (11273)

    A "Timestamp Mismatch" system message would appear when the system's time zone has an offset from UTC of zero. This is the case for a number of European and African time zones at least part of the year.

  • CRM-21395 DOMPDF produces either white screen or No-Block-Level parent found error in some circumstances blocking invoice production (11246 and 11243)

  • CRM-21458 HTML_QuickForm_hierselect doesn't handle JS escaping properly (196)

  • CRM-20545 contact report lists contacts that have been 'soft' deleted (placed in Trash) (11276) (completes past work)

  • CRM-21447 Contact Relationship Report fatal error if used from the API with a relationship_type_id filter (also affects excel export) (11293)

  • CRM-21563 Cannot search child tags on 'Manage Tag' page (11414)

  • CRM-19888 On contact import, State field does not respect default country (10740)

  • CRM-19915 Multi-lingual Upgrade from 4.6 fails on missing DB table or field (9739)

  • CRM-21407 ISO compliance for German counties (11255)

    The state/province list now has correct spellings for Thüringen and Baden-Württemberg, and the abbreviation for Berlin has been corrected to "BE".

  • CRM-21041 API Bug when Creating Contact with Webform-Civicrm (11269)

    The Communication Style field would be left blank when a contact was created through the API (and through modules like Webform that use the API).

CiviCase

  • CRM-21559 Save button in Case Type not clickable (11473)

  • CRM-21384 Ensure deleted contacts are filtered out of CiviCase (11224)

  • CRM-21382 Print/Merge document not filed on cases (11223)

  • CRM-21456 Relationship end date not set when creating resolved cases. (11301)

  • CRM-21538 CiviReport: Field not found when sorting by Case Type as a section header (11419)

  • CRM-21507 Unable to add multiple target contacts to a new case activity (11360)

    This resolves a problem where users trying to add multiple targets to a new case activity would be presented an error saying, "Activity Separation is a required field".

  • CRM-21421 Cannot update existing CaseContact (11268 and 11270)

    A bug prevented updating cases through the API due to constraints on updating case contact records.

CiviContribute

  • CRM-21595 Regression: Contribution page no longer works when configured with PayPal Pro and pay later (11483)

    This resolves a PHP error when using a contribution page with pay later enabled.

  • CRM-21465 clicking on pledge link in email returns fatal error (11305)

  • CRM-17647 Recording payment truncates the amount after the comma (whether thousands or decimal separator) (11548 and 11549)

  • CRM-21482 Allow retrieval of currency from $_REQUEST (as supplied by webform_civicrm) (11329, 11348, and 11344)

    A new standardized method is introduced for retrieving the currency from the form values or page request.

  • CRM-21200 Pay Now payment overwrites the contribution (11059)

    When a donor completes a pay-later donation using the Pay Now link, the source, campaign, and contribution page values should be retained on the contribution as they were initially set.

  • CRM-21492 Authorize.Net fails on updated recurring contributions (11338)

    IPN transmissions from Authorize.net would fail because the payment amount would not match the original.

  • CRM-21328 Remove 'Select' option from price option visibility drop-down (undefined index visibility_id error) (11193)

    Price options could be created without visibility being set. This caused PHP notices.

  • CRM-21436 Fatal error on contribution page with only pay later enabled. (11334) (follow-up on past work)

    Test coverage is added for this bug.

  • CRM-21457 Receipt date not updated when submitting a credit card payment from the back-end (Contribution) (11343)

  • CRM-21477 Buttons missing on Delete Premium product form (11318)

  • CRM-20899 Format refund amount (10687)

  • CRM-20800 User Cannot Cancel Recurring Payment With Paypal (11359 and 10986)

  • CRM-21342 Contribution note is not wiped if the value is removed (11187)

    When the contents of the contribution notes field are emptied, the entry in the note table is deleted.

  • CRM-21478 Pay Now on user dashboard only works in english (11323)

    The condition displaying the Pay Now link now compares the contribution status name rather than the status label.

  • CRM-21424 Print Contribution Receipt does not set receipt_date when downloading pdf receipts (11289)

  • CRM-21432 Fix display of end date for recurring contributions (11283)

  • CRM-20166 Setting CVV is 'not required for backend' affects all front facing forms (11205)

    CVV is now always required for front-facing forms.

CiviEvent

  • CRM-21513 Change fee selection for text price field on backoffice Event registration Not Creating Correct Financial Items (11380)

  • CRM-19273 Changes to Event Option Value Selections on Pending (Pay Later) Contribution Not Creating Correct Financial Items Causing Imbalance in Accounting Batch Export (10962, 11300, and 11272)

  • CRM-20676 Tax applied repeatedly on edits of price set events (11455)

  • CRM-20787 For a repeating Event series. If change the Price Set for a paid Event then this Price Set selection is not applied to all Events in the series even when apply to Every Event is selected (11161)

    This resoves a bug on changing the price set on an event that is part of a repeating event series. An option allows selection of whether to apply changes to every event in the series, but the price set would not update on the other events.

  • CRM-21245 Incorrect Contribution status "Pending Refund" (11077)

    This resolves a problem on reducing the total fee on events that are partially paid. Even if the partial payment is lower than the new total, the participant payment contribution would display "pending refund" instead of "partially paid".

  • CRM-21560 CRM_Event_Form_Task fatal error (11410)

  • CRM-21426 Cancel/Delete Event Participants - Duplicate Submit Buttons (11277)

    The confirmation screen for canceling event registrations is now consistent with other forms in only having buttons at the bottom. In addition, the buttons are made less ambiguous by renaming the "Continue" button to "Cancel Registration".

  • CRM-21393 Event Location page is slow (because of checkPermission) (11242)

    When checking permissions for viewing an event, details are now loaded for only the one event.

CiviMail

  • CRM-21468 mailing recipients field limits how many groups can be selected (11349)

    The number of groups that could be selected in the mailing recipients field was limited to the number of autocomplete results as defined in the search settings. There is now no limit.

  • CRM-21501 bounce report: bounce date filter doesn't include timestamp (11354)

    On the Bounce Report, the filter for bounce date was missing the time, causing date filters to be evaluated as midnight.

  • CRM-19704 Image-only emails fail to send (11399)

  • CRM-21206 Recipients missing from AB Test Report (11010)

  • CRM-21362 Mailing summary report group by MySQL 5.7 error (11261) (completes previous work)

    Users of MySQL 5.7 with only_full_group_by SQL mode would have errors viewing the mailing summary report when the start or end dates were included among the columns.

CiviMember

  • CRM-20343 Wrong Activity creation when Membership status is changed from membership form. (11198) (follow-of of previous work)

    The "is override" field is now automatically selected when a membership is set to "canceled" status because of a canceled contribution.

  • CRM-21190 Warning error on Thankyou page on pay later membership priceset. (11303)

  • CRM-20569 Record Payment for partially paid membership: update amt, fix deferred (11000) (partial work)

  • CRM-19060 Membership Detailed Report Payment Amount (most recent) not reporting correct contribution (11389) (preliminary work)

  • CRM-19608 "Auto Renew Required" is not enforced during membership registration using priceset. (9648)

  • CRM-21265 For failed membership transaction, update payment status to failed (11072)

    Previously, the payment status would remain as "Incomplete".

  • CRM-21357 Batch Data Entry: Start date is NULL when membership batch entry is processed (11202)

Backdrop Integration

  • CRM-20764 Need to update civicrm.settings.php to account for clean urls in Backdrop (10674)

Drupal Integration

  • CRM-21526 CRM_Utils_System_Drupal8::authenticate() is incomplete (11381) (partial work)

    The method for scripts to authenticate a Drupal 8 user would simply return the user ID rather than switching to that user.

  • CRM-21372 Fatal error adding profile on Drupal 8 (11216)

  • CRM-21312 Fix display of Recent Items when using a bootstrap theme (11138)

    Some Drupal themes that implement the Bootstrap framework had been shifting items to the right within the recent items block and allowing their text to overflow their containers.

  • CRM-20728 Store session in drupal session table before exiting (10501)

    Anonymous webform session variables had not been saved before going to the payment form, which caused problems retrieving return URLs and other details.

  • CRM-20153 Drupal Views: PCP Pages for Events not showing up in list of pages (463)

  • CRM-20734 State doesn't populate on first load of view even if country is selected. (506)

  • CRM-20783 undefined currency error when pricefield value is included in view (458)

  • CRM-20592 Drupal Views integration : bug when selecting website (446)

    Location type options were displayed for website field in Views even though websites don't use location types.

  • CRM-20292 Drush cc all clears custom fields from Drupal Views (472)

    Clearing the Drupal Views cache as a user without the permission to view custom fields would cause those fields to be removed from views using them.

Joomla Integration

  • CRM-20164 PayPal Standard notify_url breaks with Joomla when derived from menu item (11236)

    The PayPal Standard IPN notification URL would be formed incorrectly when the contribution comes from a contribution form that is linked as a menu item.

WordPress Integration

  • CRM-21385 WordPress top nav bar blocks top row of WYSIWYG editor when maximized (11230)

  • CRM-16421 Work to get CiviCRM for WordPress in WordPress' official Repository (11397) (continues ongoing work)

    The version header in civicrm.php now has the complete version number of CiviCRM rather than just 4.7.

  • CRM-20358 WordPress access control table is basically unusable (11253)

    The layout of the table on the WordPress access control form now works properly even when text wraps.

Miscellany

  • CRM-21555 Replace CRM_Core_OptionGroup::getValue with CRM_Core_PseudoConstant::getKey for Case (11409)

  • CRM-21548 Remove unused variables from CRM_Utils_Address::format (11403)

  • CRM-21544 Remove unused CRM_Contact_BAO_Contact_Optimizer class (11400)

  • CRM-21527 Add default to extra address::create param (11382)

  • CRM-21517 UpdateSubscription OptionGroup->PseudoConstant (11367)

  • CRM-21471 Remove unused function CRM_Core_Pseudoconstant::greetingDefaults (11313)

  • Move test docs to civicrm-dev-docs (11213)

  • CRM-17860, CRM-18231 - JobProcessMailingTest - Re-remove require_once (11251)

  • Remove php 5.3 shim for json formatting (11421)

  • Add test for processing multipart-related emails in fetch_bounces (11378)

  • Fix ts() functions to have variable on the outside. (11357)

  • CRM-21218 Improve component statics flushing (11022)

  • NFC, comments only (11330)

  • NFC rerun setup.sh -dg and regen Participant DAO (11315)

  • CRM-16819 Improve on CRM_Utils_Request::retrieve() (11285)

  • (NFC) .toxic.json - Update list of functions which yield toxic warnings (11302)

  • [NFC] code cleanup: split out 2 functions that are mostly unrelated. (11284)

  • [NFC] Function extraction and renaming of variable for shorter refere… (11278)

  • [NFC] Fix a bunch of docstrings (11034)

  • [NFC] Additional test (11266)

  • [NFC] Minor refactor of test to allow re-use (11265)

  • Fix GenerateData for only_full_group_by sqlMode (11225)

    This resolves a problem with generating sample data using MySQL 5.7, which has the only_full_group_by SQL mode by default.

  • Lint civicrm.module and civicrm.install files (467)

  • Fix Activity Unit Test failure (11552)

Credits

This release was developed by the following code authors:

AGH Strategies - Andrew Hunt; Agileware - Agileware Team, Alok Patel, Francis Whittle; Australian Greens - Seamus Lee; British Humanist Association - Andrew West; Christian Wach; CiviCoop - Klaas Eikelboom; CiviCRM - Coleman Watts, Tim Otten; CiviDesk - Sunil Pawar, Yashodha Chaku; CiviFirst - John Kirk; Community IT Academy - William Mortada; CompuCorp - Camilo Rodriguez, Mukesh Ram, Omar Abu Hussein; Coop SymbioTIC - Mathieu Lutfy, Samuel Vanhove; Deepak Srivastava; Ergon Logic Enterprises - Christopher Gervais; Francesc Bassas i Bullich; Freeform Solutions - Herb van den Dool; Fuzion - Jitendra Purohit; JazzMan; JMA Consulting - Edsel Lopez, Monish Deb, Pradeep Nayak; John Kingsnorth; Joinery - Allen Shaw; Kompetenzzentrum Technik-Diversity-Chancengleichheit - Niels Heinemann; Left Join Labs - Sean Madsen; Lighthouse Design and Consulting - Brian Shaughnessy; Megaphone Technology Consulting - Jon Goldberg; Mihael Mladenov; MJW Consulting - Matthew Wire; myDropWizard - David Snopek; Nathan Brettell; Noah's Light Foundation - Carlos Loeza; Oxfam Germany - Thomas Schüttler; Progressive Technology Project - Jamie McClelland; Rupal Javiya; Squiffle Consulting - Aidan Saunders; Stephen Palmstrom; Third Sector Design - Michael McAndrew; Timbsoft Technologies - Tunbola Ogunwande; Vinu Varshith Sekar; Wikimedia Foundation - Eileen McNaughton, Elliott Eggleston, Maggie Epps; Will Long

Most authors also reviewed code for this release; in addition, the following reviewers contributed their comments:

AGH Strategies - Alice Frumin, Jane Hanley; Anne Smale; Australian Greens - John Twyman; Avietech - Jonathan Boeke; BackOffice Thinking - Hassan Farooq; Campaign Against Arms Trade - Kirk Jackson; CEDC - Laryn Kragt Bakker; Chris Burgess; Christophe Golle; Circle Interactive - Dave Jenkins; CompuCorp - Guanhuan Chen, Igor Pavlov, Madura Krishnamoorthy; Daniël van Vuuren; Dave D; Edinburgh College - Graham Smith; Elennio Dec; Fatih Ateş; Forest CRM Consulting - Tamar Meir; Fuzion - Peter Davis; Ginkgo Street Labs - Dan O'Brien, Evan Chute; Hartmann Computer Consulting - Peter Hartmann; JMA Consulting - Joe Murray; Joanne Chester; Joseph Lacey; Juan David Hurtado G.; Julian Libor; Just Hope - Phil Morice Brubaker; Korlon - Stuart Gaston; Lemniscus - Noah Miller; Lullabot - Nate Lampton; MC3 - Graham Mitchell; National Democratic Institute - Dean Valentine; Neil Zampella; Octo Happiness; Robert Lang; Saurabh Batra; Semper IT - Karin Gerritsen; Skvare - Mark Hanna; SLB Radio Productions - Larry Berger; Spry Digital - Ellen Hendricks; Stan Dragnev; Systopia - Björn Endres; Tadpole Collective - Kevin Cristiano; Tommy Sheppard; Torrance Hodgson; Web Access - Pratiksha Dubey; Website Express - James Forbes Keir

Feedback

These release notes are edited by Andrew Hunt. If you'd like to provide feedback on them, please login to https://chat.civicrm.org/civicrm and contact @agh1.