# CiviCRM 5.28.0
Released August 5, 2020
- **[Synopsis](#synopsis)**
- **[Features](#features)**
- **[Bugs resolved](#bugs)**
- **[Miscellany](#misc)**
- **[Credits](#credits)**
- **[Feedback](#feedback)**
## Synopsis
| *Does this version...?* | |
|:--------------------------------------------------------------- |:-------:|
| Fix security vulnerabilities? | no |
| **Change the database schema?** | **yes** |
| **Alter the API?** | **yes** |
| Require attention to configuration options? | no |
| **Fix problems installing or upgrading to a previous version?** | **yes** |
| **Introduce features?** | **yes** |
| **Fix bugs?** | **yes** |
## Features
### CiviCRM Core
- **Feature Request: Ability to enable SSL for database connection. (Work
Towards [dev/core#1137](https://lab.civicrm.org/dev/core/-/issues/1137):
[298](https://github.com/civicrm/civicrm-packages/pull/298))**
Makes ssl database connections without client certificates work in php7.
- **Investigate php currency library
([dev/translation#48](https://lab.civicrm.org/dev/translation/-/issues/48):
[17608](https://github.com/civicrm/civicrm-core/pull/17608))**
Implements the PHP library [brick/money](https://github.com/brick/money) to
better handle currency amounts.
- **Replace all instances of CRM_Core_Fatal with throw new CRM_Core_Exception
(Work Towards [dev/core#560](https://lab.civicrm.org/dev/core/-/issues/560):
[17555](https://github.com/civicrm/civicrm-core/pull/17555),
[295](https://github.com/civicrm/civicrm-packages/pull/295),
[602](https://github.com/civicrm/civicrm-drupal/pull/602),
[17550](https://github.com/civicrm/civicrm-core/pull/17550),
[17534](https://github.com/civicrm/civicrm-core/pull/17534),
[17541](https://github.com/civicrm/civicrm-core/pull/17541),
[17545](https://github.com/civicrm/civicrm-core/pull/17545) and
[17539](https://github.com/civicrm/civicrm-core/pull/17539))**
Work towards throwing exceptions instead of fatal errors.
- **End of life planning for MySQL server 5.0 - 5.6 (Work Towards
[dev/core#1681](https://lab.civicrm.org/dev/core/-/issues/1681):
[17558](https://github.com/civicrm/civicrm-core/pull/17558))**
Block sites from upgrading if on a MySQL version less than 5.6.5.
- **Create new customPre hook
([dev/core#1716](https://lab.civicrm.org/dev/core/-/issues/1716):
[17144](https://github.com/civicrm/civicrm-core/pull/17144))**
Creates a new hook customPre which makes it so one can impact or observe
custom data before it is saved.
- **V4 activity api has no default for activity_date_time
([dev/core#1782](https://lab.civicrm.org/dev/core/-/issues/1782):
[17450](https://github.com/civicrm/civicrm-core/pull/17450))**
Sets the default for `activity_date_time` and `created_date` as the current
date when using the APIv4 Activity.
- **Update guzzle to d8 latest
([dev/core#1803](https://lab.civicrm.org/dev/core/-/issues/1803):
[17551](https://github.com/civicrm/civicrm-core/pull/17551))**
This updates guzzle to version 6.5.4, civicrm/civicrm-cxn-rpc to "version"
"v0.19.01.00", guzzlehttp/psr7 to version 1.6.1 and psr/log to version 1.1.3
- **APIv4 - Improve row_count to work with HAVING, GROUP BY, and SELECT
([17704](https://github.com/civicrm/civicrm-core/pull/17704))**
This changes the meaning of $result->count(), to give a total count of
filtered items, ignoring limit and offset.
- **APIv4 - Add more SQL functions
([17692](https://github.com/civicrm/civicrm-core/pull/17692))**
Adds support for additional SQL functions in APIv4. Also categorizes them and
adds translated titles for the new Search Builder.
- **APIv4 - Add titles and icons to entities
([17527](https://github.com/civicrm/civicrm-core/pull/17527) and
[17685](https://github.com/civicrm/civicrm-core/pull/17685))**
Adds titles and icons to DAO entities and expose them to APIv4 Entity::get and
adds meta-metadata.
- **APIv4 Explorer - UI support for join ON clause
([17682](https://github.com/civicrm/civicrm-core/pull/17682))**
Improves the APIv4 explorer to give selectable clauses when adding a JOIN.
- **Add permission metadata to contact is_deleted field
([17721](https://github.com/civicrm/civicrm-core/pull/17721))**
Improves the contact schema metadata.
- **API/DAO Metadata - Retain versioning metadata for possible usage in
runtime+tooling
([17735](https://github.com/civicrm/civicrm-core/pull/17735))**
Adds metadata to indicate when fields are created.
- **Connect to database using SET NAMES utf8mb4
([17716](https://github.com/civicrm/civicrm-core/pull/17716))**
Makes it so one can use utf8mb4 characters.
- **Remove slow join from activity search
([17250](https://github.com/civicrm/civicrm-core/pull/17250))**
Improves performance of the activity search.
- **Add icons to standalone contact tasks
([17667](https://github.com/civicrm/civicrm-core/pull/17667))**
Adds icon data to contact tasks.
- **Add icons to multi-valued custom groups and display on contact tab
([17531](https://github.com/civicrm/civicrm-core/pull/17531))**
Adds icons to multi-valued custom groups to improve user experience.
- **Add serialize metadata to domain.locales field
([17651](https://github.com/civicrm/civicrm-core/pull/17651))**
Adds metadata to help APIv4 serialize/unserialize the domain.locales
field correctly.
- **Add smarty error event
([16918](https://github.com/civicrm/civicrm-core/pull/16918) and
[292](https://github.com/civicrm/civicrm-packages/pull/292))**
Improves debugging errors in smarty templates.
- **Allow HEAD requests to generate a form key
([17321](https://github.com/civicrm/civicrm-core/pull/17321))**
Avoids generating crashes (500 errors) when bots check links.
- **Include a new SqlParallel queue type that enables multiple queue runners to
process in parallel
([15422](https://github.com/civicrm/civicrm-core/pull/15422))**
Adds a new Sql queue type which will allow multiple runners to fetch the next
available job from a queue and run in parallel.
- **Allow adding datepicker to metadata based settings pages
([16610](https://github.com/civicrm/civicrm-core/pull/16610))**
Makes it so that datepicker can be added to metadata based settings pages by
specifying html_Type='datepicker' in settings metadata.
- **Price Field Form: save the fid for the postProcess hook
([17639](https://github.com/civicrm/civicrm-core/pull/17639))**
Improves `postProcess` hook for Price Field Form by making the field id
available.
### CiviContribute
- **Add payment processor to details on list of recurring contributions
([17179](https://github.com/civicrm/civicrm-core/pull/17179))**
Improves the Recurring Contributions UI by adding a column for Payment
Processor.
- **Fix all core processors to throw exceptions and not rely on the
CRM_Core_Payment to convert errors to exceptions
([dev/financial#131](https://lab.civicrm.org/dev/financial/-/issues/131):
[17565](https://github.com/civicrm/civicrm-core/pull/17565),
[17559](https://github.com/civicrm/civicrm-core/pull/17559),
[17542](https://github.com/civicrm/civicrm-core/pull/17542),
[17502](https://github.com/civicrm/civicrm-core/pull/17502),
[17597](https://github.com/civicrm/civicrm-core/pull/17597),
[17592](https://github.com/civicrm/civicrm-core/pull/17592) and
[17596](https://github.com/civicrm/civicrm-core/pull/17596))**
Makes it so that core payment processors fail elegantly more often.
- **Add selfService flag to cancelSubscription getText so we can display
different text for each case
([17687](https://github.com/civicrm/civicrm-core/pull/17687))**
Makes it so payment processor developers can identify the different contexts
someone may be canceling from and display appropriate messaging.
### CiviMember
- **Display start/end adjustment on membership status page.
([dev/core#1809](https://lab.civicrm.org/dev/core/-/issues/1809):
[17571](https://github.com/civicrm/civicrm-core/pull/17571))**
Improves the Membership Status administration page by adding columns for the
start/end adjustment.
## Bugs resolved
### Core CiviCRM
- **Evaluate if any indexed fields are unused (Work Towards
[dev/core#1634](https://lab.civicrm.org/dev/core/-/issues/1634):
[17686](https://github.com/civicrm/civicrm-core/pull/17686))**
Remove database index on `medium_id` from `civicrm_activity`.
- **[Activity] Default priority value when add Activity
([dev/core#1801](https://lab.civicrm.org/dev/core/-/issues/1801):
[17557](https://github.com/civicrm/civicrm-core/pull/17557))**
Ensures when creating a new activity the priority field defaults correctly for
sites not in english.
- **The multi-lingual multi-domain problem
([dev/core#1852](https://lab.civicrm.org/dev/core/-/issues/1852):
[17738](https://github.com/civicrm/civicrm-core/pull/17738) and
[17733](https://github.com/civicrm/civicrm-core/pull/17733))**
Ensures that the list of languages civicrm_domain.locales is the same for all
domains in a multi-domain set up.
- **APIv4 - Skip empty leaves in WHERE clause
([17576](https://github.com/civicrm/civicrm-core/pull/17576))**
Fixes a big in search builder where APIv4 gives a sql error
while building your where clause.
- **Fix CRM_Utils_JS::dedupeClosures to ignore comments
([17717](https://github.com/civicrm/civicrm-core/pull/17717))**
Ensures comments do not interfere with deduping.
- **Use PHPUnit7 as the primary test runner for PHP versions >= 7.1 when using
the phpunit script
([17615](https://github.com/civicrm/civicrm-core/pull/17615))**
Updates php unit tests to use PHPUnit7 when the PHP Unit version is 7.1 or
greater.
- **Fix isMultilingual to use static caching and respect current domain
([17646](https://github.com/civicrm/civicrm-core/pull/17646))**
Improves the efficiency and accuracy of the `CRM_Core_I18n::isMultilingual`
function, preventing a large number of duplicate queries on every request.
- **Update has_separator field in civicrm_navigation
([17579](https://github.com/civicrm/civicrm-core/pull/17579))**
This field was incorrectly marked as a boolean; it's actually an int with an
option list.
- **Payment Propertybag remove warning
([17506](https://github.com/civicrm/civicrm-core/pull/17506))**
Do not trigger warning every time the function is called.
- **Fix duplicate upgrade function
([17582](https://github.com/civicrm/civicrm-core/pull/17582))**
Fixes a fatal error on upgrade caused by a merge conflict.
- **Multiple line item shown on view contribution if participant is transferred
to another contact.
([dev/core#890](https://lab.civicrm.org/dev/core/-/issues/890):
[16956](https://github.com/civicrm/civicrm-core/pull/16956))**
- **CRM_Case_XMLProcessor::allActivityTypes() doesn't do caching right
([dev/core#1433](https://lab.civicrm.org/dev/core/-/issues/1433):
[17627](https://github.com/civicrm/civicrm-core/pull/17627),
[17616](https://github.com/civicrm/civicrm-core/pull/17616) and
[17614](https://github.com/civicrm/civicrm-core/pull/17614))**
- **CustomValue.GetTree API Does Not Return Display Value for Money Select/Radio
Custom field ([dev/core#1566](https://lab.civicrm.org/dev/core/-/issues/1566):
[17008](https://github.com/civicrm/civicrm-core/pull/17008))**
- **whom_url missing contact ID parameter in detailed logging report
([dev/core#1749](https://lab.civicrm.org/dev/core/-/issues/1749):
[17440](https://github.com/civicrm/civicrm-core/pull/17440))**
- **Regression : File fields export results in DB error
([dev/core#1787](https://lab.civicrm.org/dev/core/-/issues/1787):
[17578](https://github.com/civicrm/civicrm-core/pull/17578))**
- **Relative date filter - End of yesterday not working properly
([dev/core#1798](https://lab.civicrm.org/dev/core/-/issues/1798):
[17512](https://github.com/civicrm/civicrm-core/pull/17512))**
- **Editing a custom field choice label changes the `name` if you do it from the
custom field admin screens
([dev/core#1817](https://lab.civicrm.org/dev/core/-/issues/1817):
[17681](https://github.com/civicrm/civicrm-core/pull/17681))**
- **Custom Date field with format=yy displays calendar icon that doesn't work
([dev/core#1829](https://lab.civicrm.org/dev/core/-/issues/1829):
[17664](https://github.com/civicrm/civicrm-core/pull/17664))**
- **Noncompliant query leads to (semi-)random sorting and failing unit test
CRM_Case_BAO_CaseTest::testSortByCaseContact
([dev/core#1844](https://lab.civicrm.org/dev/core/-/issues/1844):
[17708](https://github.com/civicrm/civicrm-core/pull/17708))**
- **Unable to install 5.28 on Maria DB 10.3 on Ubuntu
([dev/core#1860](https://lab.civicrm.org/dev/core/-/issues/1860):
[17772](https://github.com/civicrm/civicrm-core/pull/17772))**
- **APIv4 - filter getActions results based on user permissions
([17540](https://github.com/civicrm/civicrm-core/pull/17540))**
- **Pre-upgrade message for php-intl shows twice
([17748](https://github.com/civicrm/civicrm-core/pull/17748))**
- **Fix saving of State/Province Multi-select values
([17737](https://github.com/civicrm/civicrm-core/pull/17737))**
- **Graphs on Contribution Summary report replace final row with grand total
value ([dev/report#40](https://lab.civicrm.org/dev/report/-/issues/40):
[17412](https://github.com/civicrm/civicrm-core/pull/17412))**
- **[regression] Attempting to access Multi-Record Custom Field import results
in crash ([dev/core#1841](https://lab.civicrm.org/dev/core/-/issues/1841):
[17697](https://github.com/civicrm/civicrm-core/pull/17697))**
- **Use psr-4 instead of psr-0 in Civi directory
([17690](https://github.com/civicrm/civicrm-core/pull/17690))**
- **Sort options without relying on unavailable buildOptions param
([17621](https://github.com/civicrm/civicrm-core/pull/17621))**
- **Throw exception if id not passed into discard
([17666](https://github.com/civicrm/civicrm-core/pull/17666))**
- **Improve PropertyBag handling of offsetGet and custom properties; add more
tests ([17588](https://github.com/civicrm/civicrm-core/pull/17588) and
[17654](https://github.com/civicrm/civicrm-core/pull/17654))**
- **Fix validation of select2 fields in "On behalf of Organisation" block
([17672](https://github.com/civicrm/civicrm-core/pull/17672))**
- **Pass required attribute for quickform fields through to form
([16488](https://github.com/civicrm/civicrm-core/pull/16488))**
- **CRM_Core_I18n::setLocale() - Fix bug with repeated usage
([17374](https://github.com/civicrm/civicrm-core/pull/17374))**
- **Bug in Grant statistics report
([17640](https://github.com/civicrm/civicrm-core/pull/17640))**
- **Fix retrieving MySQL version for checking as part of install requirements
([17593](https://github.com/civicrm/civicrm-core/pull/17593))**
- **Set ContactType.name as required in the schema.
([17548](https://github.com/civicrm/civicrm-core/pull/17548))**
- **Fix "Undefined variable: entryFound" notice on Bookkeeping report
([17554](https://github.com/civicrm/civicrm-core/pull/17554))**
- **Zip code range search only supports numeric zip codes
([17523](https://github.com/civicrm/civicrm-core/pull/17523))**
- **Remove isThrowException from CRM_Utils_Type::validate() signature
([17546](https://github.com/civicrm/civicrm-core/pull/17546))**
### CiviContribute
- **Payment instrument ID is not required at processorform level
([17510](https://github.com/civicrm/civicrm-core/pull/17510))**
Do not throw warning if payment instrument is not sent.
- **Bank fee has wrong date on import in civicrm_financial_item.transaction_date
incorrected uses import date rather than payment date on
([dev/core#1776](https://lab.civicrm.org/dev/core/-/issues/1776):
[17389](https://github.com/civicrm/civicrm-core/pull/17389))**
Ensures the `civicrm_financial_item.transaction_date` gets recorded correctly
when importing a transaction with a bank fee.
- **Payment.create should not set contribution date to today
([17688](https://github.com/civicrm/civicrm-core/pull/17688))**
- **Fix PHP notice when we don't have credit card params
([16514](https://github.com/civicrm/civicrm-core/pull/16514) and
[17584](https://github.com/civicrm/civicrm-core/pull/17584))**
### CiviEvent
- **Event participant_listing_id field defaults to 0 instead of Null
([dev/core#1833](https://lab.civicrm.org/dev/core/-/issues/1833):
[17677](https://github.com/civicrm/civicrm-core/pull/17677))**
### CiviSMS
- **Can't change SMS recipient on non-bulk SMS
([dev/core#1840](https://lab.civicrm.org/dev/core/-/issues/1840):
[17691](https://github.com/civicrm/civicrm-core/pull/17691))**
### Joomla Integration
- **Ensure that when normal routing trackable urls and opens in Joomla go to the
frontend not administrator site
([17760](https://github.com/civicrm/civicrm-core/pull/17760))**
### WordPress Integration
- **Remove `/` from the beginning and end of query string
([207](https://github.com/civicrm/civicrm-wordpress/pull/207))**
Fixes a 'You do not have permission to access this content.' error resulting
from an extra '/' in the `q=` string in the url.
- **Base page fails to recognise Page Templates in subdirectories.
([dev/wordpress#58](https://lab.civicrm.org/dev/wordpress/-/issues/58):
[204](https://github.com/civicrm/civicrm-wordpress/pull/204))**
Ensures that the CiviCRM base page is correctly identified when it does not
reside in the theme root directory.
- **undefined offset bug in BAO/FinancialAccount.php
([dev/wordpress#61](https://lab.civicrm.org/dev/wordpress/-/issues/61):
[17701](https://github.com/civicrm/civicrm-core/pull/17701) and
[17689](https://github.com/civicrm/civicrm-core/pull/17689))**
Ensures that the financial account is set correctly even when the name does
not match the label.
## Miscellany
- **Support passing old method name into deprecatedFunctionWarning
([17552](https://github.com/civicrm/civicrm-core/pull/17552))**
- **Add CRM_Core_Form::isFormInViewMode and CRM_Core_Form::isFormInEditMode
([17637](https://github.com/civicrm/civicrm-core/pull/17637))**
- **CRM_Utils_JS - also dedupe 'use strict' directive when deduping closures
([17711](https://github.com/civicrm/civicrm-core/pull/17711))**
- **Add isBackOffice, isPayLater, getPaymentMode helpers to
frontendpaymentformtrait
([17511](https://github.com/civicrm/civicrm-core/pull/17511))**
- **Fix issue $this
([589](https://github.com/civicrm/civicrm-drupal/pull/589))**
- **Fix validateAll to no longer support unused abort param
([17544](https://github.com/civicrm/civicrm-core/pull/17544))**
- **Remove deprecated billingID from baseIPN
([17525](https://github.com/civicrm/civicrm-core/pull/17525))**
- **Add EntityFormTrait to pricefieldForm - stdised getEntityId()
([17516](https://github.com/civicrm/civicrm-core/pull/17516))**
- **Update contributor-key.yml
([17553](https://github.com/civicrm/civicrm-core/pull/17553))**
- **Export fix ([17644](https://github.com/civicrm/civicrm-core/pull/17644))**
- **Upgrade HTML Purifier to v4.12.0 to support for PHP7.4
([297](https://github.com/civicrm/civicrm-packages/pull/297))**
- **Temporary tables should follow consistent naming convention
([dev/core#183](https://lab.civicrm.org/dev/core/-/issues/183):
[15796](https://github.com/civicrm/civicrm-core/pull/15796))**
- **Remove unreachable lines
([17563](https://github.com/civicrm/civicrm-core/pull/17563))**
- **EventInfo template cleanup
([17581](https://github.com/civicrm/civicrm-core/pull/17581))**
- **Misspelled word
([17652](https://github.com/civicrm/civicrm-core/pull/17652))**
- **Remove a usage of deprecated funtion get_magic_quotes_gpc and also switch out
{} for [] whne acecssing string or array offsets
([296](https://github.com/civicrm/civicrm-packages/pull/296))**
- **Remove unused deprecated class
([17535](https://github.com/civicrm/civicrm-core/pull/17535))**
- **Remove obsolete function formatWikiURL
([17726](https://github.com/civicrm/civicrm-core/pull/17726))**
- **[REF] Ship Flexmailer extension with Core
([17669](https://github.com/civicrm/civicrm-core/pull/17669))**
- **[Ref] Simplify the replacing of the email with the email from the url
([17491](https://github.com/civicrm/civicrm-core/pull/17491))**
- **[REF] Replace incorrect usages of array_key_exists when the variable is not
an array with property_exists and also fix the parameter order for an implode
statement ([17573](https://github.com/civicrm/civicrm-core/pull/17573))**
- **[Ref] Convert Authorize.net to use Guzzle for update subscription class, add
test ([17585](https://github.com/civicrm/civicrm-core/pull/17585))**
- **[REF] Using {} to access string or array offsets has been deprecated in
PHP7.4 ([17574](https://github.com/civicrm/civicrm-core/pull/17574))**
- **[Ref] Mark unused date functions as deprecated
([17487](https://github.com/civicrm/civicrm-core/pull/17487))**
- **[REF] Using ternary operation without nesting is deprecated and also using
methods and properly instanciate the CiviCase Info object in test
([17575](https://github.com/civicrm/civicrm-core/pull/17575))**
- **[REF] Add in upgrade step to populate missing contact_type.name field
([17570](https://github.com/civicrm/civicrm-core/pull/17570))**
- **[Ref] Convert Authorize.net doDirectPayment to use guzzle & add test
([17501](https://github.com/civicrm/civicrm-core/pull/17501))**
- **[REF] Replace the deprecated system_rebuild_module_data function with
equivilant extension.list.module service function calls to be Drupal 9
compatiable ([17515](https://github.com/civicrm/civicrm-core/pull/17515))**
- **[Ref] Remove never reachable lines.
([17556](https://github.com/civicrm/civicrm-core/pull/17556))**
- **[Ref] Remove another instance of fatal()
([17549](https://github.com/civicrm/civicrm-core/pull/17549))**
- **[Ref] Readability extraction in Dummy class
([17543](https://github.com/civicrm/civicrm-core/pull/17543))**
- **[Ref] Throw exceptions from Authorize.net rather than return errors
([17500](https://github.com/civicrm/civicrm-core/pull/17500))**
- **[REF] Replace some instances of fatal with thrown exceptions.
([17533](https://github.com/civicrm/civicrm-core/pull/17533))**
- **[Ref] Remove calls to, and deprecate, unhandled function
([17499](https://github.com/civicrm/civicrm-core/pull/17499))**
- **[REF] Remove handling for 2 fields not on the form
([17504](https://github.com/civicrm/civicrm-core/pull/17504))**
- **[Ref] Remove some instances of fatal in BAO classes
([17536](https://github.com/civicrm/civicrm-core/pull/17536))**
- **REF Access the method not the property directly to check if a payment
processor supports recurring
([17602](https://github.com/civicrm/civicrm-core/pull/17602))**
- **[REF] Ensure that our custom error handler is called when jquery validates
and expand any collapsed accordions that are hiding required fields that
haven't been filled in
([17673](https://github.com/civicrm/civicrm-core/pull/17673))**
- **[REF] Consolidate code in processMembership
([17611](https://github.com/civicrm/civicrm-core/pull/17611))**
- **[REF] Cleanup function for retrieving contact types.
([17676](https://github.com/civicrm/civicrm-core/pull/17676))**
- **[REF] Fix javascript syntax error
([17678](https://github.com/civicrm/civicrm-core/pull/17678))**
- **[REF] Fix jquery error message display on select2 field validation
([17671](https://github.com/civicrm/civicrm-core/pull/17671))**
- **[REF] Fix allowing users to clear values for raido custom fields when not
required ([17670](https://github.com/civicrm/civicrm-core/pull/17670))**
- **[REF] Extract getTestTrxnID
([17642](https://github.com/civicrm/civicrm-core/pull/17642))**
- **[REF] Fix Compatability issue with flexmailer caused by the PHP7.4 fix
([17660](https://github.com/civicrm/civicrm-core/pull/17660))**
- **[REF] Ensure that the Manual Payment Processor sets the _paymentProcessor
variable like other Processors to fix issues in PHP7.4 and UnitTests
([17648](https://github.com/civicrm/civicrm-core/pull/17648))**
- **[REF] Fix PHP7.4 Test fails when we are accessing array keys when the value
is not an array
([17649](https://github.com/civicrm/civicrm-core/pull/17649))**
- **[REF] Fix parts of code where curly brackets were being used for array or
string access which is deprecated in PHP7.4
([17647](https://github.com/civicrm/civicrm-core/pull/17647))**
- **[REF] Fix issue with using array access tools on NULL values
([17600](https://github.com/civicrm/civicrm-core/pull/17600))**
- **[REF] Replace incorrect usage of array_key_exists with property_exists in
Group BAO Class
([17604](https://github.com/civicrm/civicrm-core/pull/17604))**
- **[REF] Add test for renewing old expired membership via form
([17564](https://github.com/civicrm/civicrm-core/pull/17564))**
- **[REF] Update packages to work with PHP7.4
([17598](https://github.com/civicrm/civicrm-core/pull/17598))**
- **[REF] Fix another couple of uses of array_key_exists when the variable being
checked is an object
([17601](https://github.com/civicrm/civicrm-core/pull/17601))**
- **[REF] Remove deprecated methods of booting drupal container and getting
drupal timezone information
([17522](https://github.com/civicrm/civicrm-core/pull/17522))**
- **[REF] Fix some additional issues where curly braces were being used to
access string or array offsets
([17599](https://github.com/civicrm/civicrm-core/pull/17599))**
- **[NFC] Update existing APIv3 MembershipType Tests to also test against APIv4
as appropriate ([17528](https://github.com/civicrm/civicrm-core/pull/17528))**
- **NFC cleanup docblocks in CRM_Utils_JS
([17714](https://github.com/civicrm/civicrm-core/pull/17714))**
- **[NFC] Update flexmailer to be PHP7.4 compatible
([17779](https://github.com/civicrm/civicrm-core/pull/17779))**
- **[NFC] Include flexmailer in distmaker
([17768](https://github.com/civicrm/civicrm-core/pull/17768))**
- **[NFC] Fix some outdated wiki links
([17739](https://github.com/civicrm/civicrm-core/pull/17739))**
- **[NFC] Fix contributor key for Lighthouse Consulting and Design
([17727](https://github.com/civicrm/civicrm-core/pull/17727))**
- **[NFC] Update PHPUnit Configuration file to be compatible with PHPUnit7
([605](https://github.com/civicrm/civicrm-drupal/pull/605))**
- **[NFC] Fix Unit test failure on MySQL 8 due to mysql ordering issue
([17674](https://github.com/civicrm/civicrm-core/pull/17674))**
- **[NFC] Fix tests in preparation for phpunit7
([17661](https://github.com/civicrm/civicrm-core/pull/17661))**
- **[NFC] Remove instances where html is passed to crmMoney
([17612](https://github.com/civicrm/civicrm-core/pull/17612))**
- **[NFC] Add assertions to existing test to lock in current behaviour
([17605](https://github.com/civicrm/civicrm-core/pull/17605))**
- **[NFC] Update mocking to use getMockBuilder instead instead of createMock
([17606](https://github.com/civicrm/civicrm-core/pull/17606))**
- **NFC Formatting cleanup on contribution/recur templates
([17603](https://github.com/civicrm/civicrm-core/pull/17603))**
- **[NFC] Minor code cleanup
([17566](https://github.com/civicrm/civicrm-core/pull/17566))**
- **[NFC] Update PHPUnit configuration to be compatible with PHPUnit7
([120](https://github.com/civicrm/civicrm-backdrop/pull/120))**
- **[NFC] Update PHPUnit configuration to be compatible with PHPUnit7
([206](https://github.com/civicrm/civicrm-wordpress/pull/206))**
## Credits
This release was developed by the following code authors:
AGH Strategies - Alice Frumin, Andrew Hunt; British Humanist Association -
Andrew West; Christian Wach; Circle Interactive - Pradeep Nayak; CiviCRM -
Coleman Watts, Tim Otten; CiviDesk - Yashodha Chaku; CompuCorp - Ivan; Coop
SymbioTIC - Mathieu Lutfy, Samuel Vanhove; Dave D; Dietermartens; ES-Progress -
Sandor Semsey; Flinders University of South Australia - Tom Anderson; Fuzion -
Jitendra Purohit; JMA Consulting - Seamus Lee; Lighthouse Consulting and
Design- Brian Shaughnessy; Marcin Lewandowski; Megaphone Technology Consulting -
Jon Goldberg; MJW Consulting - Matthew Wire; Tadpole Collective - Kevin
Cristiano; Wikimedia Foundation - Eileen McNaughton
Most authors also reviewed code for this release; in addition, the following
reviewers contributed their comments:
a-n The Artists Information Company - William Mortada; Agileware - Francis
Whittle, Justin Freeman; Andrew Thompson; Artful Robot - Rich Lott; Betty
Dolfing; Blackfly Solutions - Alan Dixon; CiviCoop - Jaap Jansma; Fuzion - Luke
Stewart, Peter Davis; JMA Consulting - Joe Murray; MJCO - Mikey O'Toole; Semper
IT - Karin Gerritsen; Squiffle Consulting - Aidan Saunders; Third Sector Design:
Eriol Fox; Timbsoft Technologies - Tunbola Ogunwande;
## Feedback
These release notes are edited by Alice Frumin and Andrew Hunt. If you'd like
to provide feedback on them, please log in to https://chat.civicrm.org/civicrm
and contact `@agh1`.