# CiviCRM 5.25.0
Released May 6, 2020
- **[Bugs resolved](#bugs)**
## <a name="synopsis"></a>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** |
## <a name="features"></a>Features
### Core CiviCRM
- **End of life plans for php 7.0 & deprecate php 7.1
CiviCRM now requires PHP 7.1 at a minimum and recommends PHP 7.3.
In the process of making this change, the minimum PHP version is now stored in
a single place within the core codebase. CMS-specific files have this value,
too, but tests enforce that it be the same as the single core value.
- **Replace jcalendar instances with datepicker (Continued
These changes continue work to move to datepicker from jcalendar by converting
report instances from using the legacy jcalendar to using datepicker for date
fields and deprecating the `addDateRange` function used by jcalendar.
- **APIv4 - Add Dashboard & DashboardContact entities
Adds APIv4 support for Dashboard & DashboardContact and does some cleanup in
the BAO and API layers for improved consistency.
- **Add new language, `nl_BE`
Adds a new translation option for "Dutch (Belgium)".
- **Add hook to alter display value or Custom field value
The new hook
allows modification of the displayed value for a custom field value.
- **APIv4 query improvements (Work towards
This change builds out the APIv4 framework to support `GROUP BY` and different
types of expressions in clauses that previously only accepted the names of
fields. These expressions can now include numbers, `NULL`, strings, and
whitelisted SQL functions. The framework can in theory handle most SQL
functions, but this first PR adds support for the aggregate functions `AVG`,
`COUNT`, `MAX`, `MIN`, and `SUM`.
- **install/index.php - Fix leak which breaks compatibility with current Backdrop
- **Partial Refunds (Work towards
The "Add Payment" form is altered to permit payments to be added even if a
contribution is fully paid.
- **Add privacy fields to Contribution Detail report
Columns for the following fields are added to the contribution detail report:
"Do Not Phone", "Do Not Mail", "Do Not SMS", "Do Not Trade".
- **Add "pledge id" as column and filter in Contribution Detail report.
This change improves the Contribution Detail Report by adding "pledge id" as
a filter and column.
- **Remove additional display of buttons for events
When viewing an event registration, this removes the Record Payment button
from the Fees section. Payments can still be recorded from the payments
### WordPress Integration
- **Merge REST API wrapper code
This merges the CiviCRM WP REST API Wrapper plugin's code into the core
WordPress integration. The result is that there are now native WordPress REST
endpoints for the REST API, email tracking, and other endpoints that had been
direct links to PHP files in the `extern` folder of the CiviCRM plugin.
- **Add shortcodes for Personal Campaign Pages
Personal Campaign Pages are now available as a shortcode.
## <a name="bugs"></a>Bugs resolved
### Core CiviCRM
- **Activity Detail report gives syntax error with force=1 if include case
activities is on
The case activity table wasn't properly loaded when the Activity Detail report
including case activities would go straight to displaying results.
- **Search Builder - Activity Type search not working.
In Search Builder, searching by activity type would return no results,
affecting not only direct searches but also smart groups that built with
Search Builder. This resolves the regression, which first appeared in 5.24.3.
- **Deleting entities leaves obsolete EntityTag records
Fixes a bug where deleting a contact does not delete tags associated with the
- **Profile Public Title (frontend_title column) is not used in profile
The Public Title setting that was recently added for profiles would only
replace the profile name on contribution and event forms. When the profile
was used in a standalone context, the name would always appear.
- **Auto-complete search results not consistent with other searches
- **Need to Increase Data Size for `form_values` column on
This hanges the data type for the `form_values` column on the
`civicrm_report_instance` from TEXT to LONGTEXT.
- **PHP warning on Add relationship form
- **Removing all the dashlets from the dashboard leads to E_NOTICE
- **Regression: Api4 causes container being rebuild on every request
- **E_NOTICE when using the New Individual popup/profile
- **[regression] CiviCRM reports that smart groups won't work due to deleted
custom fields that aren't deleted
A system check would mistakenly report that a smart group was based upon a
deleted custom field if it was based upon a checkbox or multi-select custom
- **Fix checking permissions in api3 profile get
This resolves a bug where the API would reverse the value of the option to use
a current user's permissions when retrieving the list of fields in a profile.
- **APIv4 - convert Result object to array when running through json_encode
- **Api4 AJAX endpoint: change required permission to access AJAX API.
The APIv4 AJAX endpoint is now open to users with either the Access CiviCRM or
the Access AJAX API permissions, matching the APIv3 behavior.
- **Improvements to APIv4 select query
- **APIv4 - Don't advertise implicit multi-joins in Explorer
Implicit one-to-many joins in APIv4 have been problematic and may get removed.
As a soft deprecation, these are no longer displayed in the APIv4 explorer.
- **CRM_Core_I18n - Provide a better label for new/unknown locales
If CiviCRM finds a locale in the localization files but doesn't know what it
is, it will now display the locale code instead of just a blank option.
- **Fixed fatal error for class not found when managed hook is invoked during
- **Log error message instead of throwing exception
- **Remove instances of fatal
This throws exceptions rather than dying when encountering problems creating
- **Fix bug where a % in a serialized array can lead to the data being broken
- **Fix batch contact/activity update with radio options
This fixes a failure to copy the value down a column if the field is radio
buttons and the value in the first row contains a space.
- **Fix CustomDataView.tpl plain empty memo field.
Ensure note custom fields display on their own lines
- **Fix setting outBound_option readonly in UI
If the outbound mailer option is set via the settings file, the settings form
will now disable the field.
- **Use dbAlias to generate where clause for date field in activity report
This resolves potentially ambiguous queries in the Activity Summary and Detail
reports if the activity table is joined again in the report.
- **[REF] Use composer patches to apply CiviCRM Customisations for CRM-1367 and
Migrates the patching of pear_mail from a script file to using composer
patches to ensure CiviCRM customisations for CRM-1367 and CRM-5946 are applied
- **Various errors recorded in log message on Manage Case screen -> relationship
Fixes log messages generated when opening the relationship tab on the Manage
- **"Merge Case" modal not showing relevant cases
The pop-up to merge cases would only show 25 other cases. It now shows all
cases for a client.
- **Adding a timeline to a case doesn't get the last activity in the timeline
right ([dev/core#1675](https://lab.civicrm.org/dev/core/issues/1675) and
Ensures case custom fields are saved when submitted via Drupal webform.
Additionally ensures that the last activity in the case timeline is set
- **Check for "Change Case Type" in case activity form doesn't do anything
- **When auditing cases on non-English deployments, richtext details
are incorrectly escaped
- **Respect 'Do not notify activity type' setting
The setting to not notify assignees for certain activity types was not
respected when submitting an activity from a case.
- **Changes to "CiviContribute Component Settings" not saved
The way that CiviContribute component settings were stored was updated for
5.23, but the transition during the upgrade was problematic. This replaces
the transition code, resolving issues for sites upgrading directly from 5.22.x
or earlier. Sites on 5.23.x or 5.24.x should review their settings, however.
- **Invoice action not shown when invoicing enabled
The "Invoices - print or email" action was not available for contribution
search results even when invoicing was enabled.
- **Cumulative contributions not being calculated with the correct criteria
The cumulative contributions display from a contribution page would needlessly
filter contributions by date, with the end date being midnight on the current
date. That would exclude contributions received on the current day.
- **Updating misleading labels on buttons to confirmation pages
Some donors and event registrants interpreted the button text "Confirm
Contribution" (on contribution pages) and "Continue" (on event registration
pages) to mean that this would complete the contribution or registration. In
fact, these would only appear when a confirmation page is used.
The button text now appears as "Review your contribution" and "Review your
- **Fix upgrade failure. Thin-out activation logic for `sequentialcreditnotes`.
This change fixes an issue for some builds when upgrading caused by the
activation of the `sequentialcreditnotes` extension to replace core code that
generates sequential credit note identifiers.
- **Fix Bug where Payment Balance is sometimes miscalculated
Fixes a bug where Add Refund is displayed instead of Add Payment on partially
paid event contributions.
- **Stop overwriting contact name with PayPal name
When a user creates a donation via PayPal, their CiviCRM contact name should
not be overwritten to be their PayPal account name.
- **Fix use of "Soft Credit Amount Stats" and any filter of contribution…
Ensures that one can use "Soft Credit Amount Stats" with all filters.
- **CRM_Core_Payment_PayPalProIPN should not call getPayPalPaymentProcessorID()
if processor_id is clearly provided in URL
- **Update pending contribution status action also send email without warning
When bulk updating the status of contributions, there is now a checkbox to
choose whether the contacts should be emailed. Previously, emails would be
generated without warning.
- **Fix display of payment processor title in cancelSubscription form
- **Make the checkbox, "Billing address is the same", respond to the change event
This makes the "billing address is the same" checkbox trigger its changes no
matter how the box is checked, not just by clicking it.
- **PayPal Express Checkout fails on events
- **Fixed fatal error for Event Participants custom search if price set field
option is disabled after a registrant has already selected it
- **Don't freeze fields for auto-renew memberships
Previously, many membership fields were frozen for administrators when the
membership was set to auto-renew with a recurring contribution.
- **Deceased Contact via Inline doesn't update the Membership's status to
When marking a contact as deceased, this simplifies the underlying process and
ensures that a message is displayed about memberships being updated to
- **Invalid currency "$" on sending offline membership receipt.
Fixes an error when sending a receipt for a membership created from an offline
membership form. The default currency symbol was being saved as the currency
- **Membership auto-renew is not optional if using price set
- **Membership join date checkbox on constituent detail report has lost its
### Drupal Integration
- **Address no longer available as Relationship for Views in Drupal 7
- **Generalise typo3/phar-stream-wrapper so CiviCRM can be installed on D8.7
- **civicrm-setup and backward slashes in file paths on windows don't play nice
Fixes installing CiviCRM on Drupal8 sites on windows using civicrm-setup / cv
### WordPress Integration
- **5.23 breaks WP admin menu links
- **Set "cms.root" URL in addition to Path
This resolves a "Cannot resolve path using 'cms.root.url'" exception thrown on
the "Settings - Resource URLs" screen incorrectly on a WordPress multisite
## <a name="misc"></a>Miscellany
- **Add recurring contribution ID to doCancelRecurring
- **Support PropertyBag in CRM_Utils_Array
- **Added pseudoconstant for acl_id
- **Added pseudoconstant for state province
- **Added pseudoconstant for location type
- **Added pseudoconstant for priceset
- **Added pseudoconstant for bounce type
- **Added pseudoconstant for civicrm_tag.parent_id
- **Event Cart cleanup
- **Update cancelSubscription form to use updated methodology
- **Skip expensive smarty Processing when nothing to see here
- **UFMatch - deprecate unused functions
- **Shifted UpdateMemberhsip to BAO Layer
- **Add DAO::writeRecord and DAO::deleteRecord methods
- **Add some deprecation notices, stop calling PrevNext::cleanupCache
- **Remove assigns for atypefile
- **Deprecate use of in OptionGroup::add() function
- **Improve APIv4 selectUtils to handle join paths in fieldnames.
- **Upgrade jQuery validation version to v1.19.1
- **APIv3 - Use new DAO::deleteRecord method
- **Improve conditional in api3 ChainSubscriber
- **Mark unused function as deprecated
- **CRM/Contact - Cleanup boolean expressions
- **CRM/Contribute - Cleanup boolean expressions
- **Civi/Test - Refactor out CRM_Utils_Array::value
- **Cleanup reverse boolean expressions
- **CRM/Core - Cleanup boolean expressions
- **CRM/Utils - Cleanup boolean expressions
- **CRM - Cleanup boolean expressions
- **Fix another instance of silly use of CRM_Utils_Array::value
- **Fix passing a non-array to CRM_Utils_Array::value
- **Fix another instance of NULL being passed to CRM_Utils_Array::value
- **Remove an instance of passing non-arraay to CRM_Utils_Array::value(
- **Remove calls & deprecate CRM_Core_BAO_PrevNextCache::setItem
- **(POC) Add `hook_civicrm_postCommit`, a less foot-gunny variant of
- **Fix typos in xml/dao
- **Deprecate unused/unneeded pseudoconstant functions
- **Deprecate calling contactTrashRestore function
- **Remove old stuff
- **Remove deprecated cleaning of money in the BAO layer
- **Remove unused deprecated function
- **Remove deprecated function
- **Remove unused code
- **Remove deprecated parameter
- **fix typo ((https://github.com/civicrm/civicrm-core/pull/16865))**
- **API tests - remove unnecessary check for v4
- **[NFC] APIv4 - Add test coverage for expected fields from join
- **[NFC] Add in unit test to ensure that APIv4 Doesn't accept an invalid…
- **[NFC] Use strict comparison where possible
- **[NFC] Code formatting
- **[NFC] minor form cleanup.
- **(NFC) Minor typo: receipients > recipients
- **[NFC] Minor code cleanup
- **[NFC] Deprecate passing in silly data
- **[NFC] Test cleanup
- **[NFC] Test cleanup, remove duplicate test
- **(NFC) Minor string error : for for > for
- **(NFC) Minor typo: contacts(s) -> contact(s)
- **(NFC) Query.php / Minor typo: Genrated -> Generated
- **[NFC] Fix comments, use single quotes
- **[NFC] Mark unused function deprecated, fix some comments & formatting
- **[NFC] cleanup in test class
- **[NFC] Use helper / api to delete contacts in tests
- **[NFC/TEST] Resurrect unfinished test for getRelatedCases()
- **[Test] Remove skip that seems no longer required
- **Test for PR 13809
- **[TEST] Add test for to time processing
- **[REF] Case Activities Report includes core activities *always*
- **[REF] Cleanup api3 DashboardContact
- **[REF] Fixes a bug in Message Template create API where by user permissions
checks were being done on system workflow messages
- **[REF] Remove calls to fatal()
- **[REF] Cleanup uses of CRM_Utils_Array::value related to numbers
- **[REF] cleanup financial type form - remove complex inheritence
- **[REF] Use ?? operator instead of CRM_Utils_Array::value()
- **[REF] dev/core#1116 - Remove unused misnamed activityTypeName variable
- **REF Switch to getter on cancelSubscription form
- **[REF] Minor code simplification
- **[REF] Hopefully fix regularly failing conformance test
- **[REF] Use empty() instead of CRM_Utils_Array::value() in inline conditionals
- **[REF] Use ?? operator instead of CRM_Utils_Array::value() in return
- **[REF] CRM_Utils_Array::value() -> empty()
- **[REF] Cleanup is_array(CRM_Utils_Array::value()) pattern
- **[REF] Remove redundant call to build permissions
- **[REF] Replace CRM_Utils_Array::value with ?? in variable assignments
- **[REF] Replace coalesce pattern with coalesce operator
- **[REF] Switch to using a non abandoned library for getting a mapping of
mimetypes to extensions
- **[REF] move buildQuickForm function to the trait
- **[REF] Move properties to Trait
- **[REF] Start transitioning EmailCommon class to a trait
- **[REF] Remove fatal, fix some code comments
- **[REF] extract code to getEmails
- **[REF] Minor simplification - do not use variable variables
- **[REF] Extract code used to render a pseudoconstant when a table is defined.
- **[REF] Move form specific handling back to the relevant form.
- **[REF] APIv4 - Preserve order when expanding select wildcards
- **[REF] Remove & from before variable
- **[REF] Replace \CRM_Utils_Array::value with ??
- **[REF] Civi/Api4 - Refactor out 'use CRM_Utils_Array'
- **[REF] BAO_Contact - Remove CRM_Utils_Array::value and other unnecessary code
- **[REF] APIv4 - Restructure the way get query objects are constucted
- **[REF] Fix PCP getPcpDashboardInfo to be tested & use sensible functions
- **[REF] Simplify obtuse boolean expressions
- **[REF] Replace CRM_Utils_Array::value with ?? in variable assignments
- **[REF] cleanups on array operator
- **[REF] Simplify obtuse boolean expressions
- **[REF] Remove titleHeader var
- **[REF] simplify references to civicrm_acl
- **[REF] Fix retrieving invoice related settings when doing complete
## <a name="credits"></a>Credits
This release was developed by the following code authors:
a-n The Artists Information Company - William Mortada; AGH Strategies - Alice
Frumin, Andrew Hunt; Alexy Mikhailichenko; Andrei Mondoc; Christian Wach; Circle
Interactive - Pradeep Nayak; CiviCoop - Jaap Jansma; CiviCRM - Coleman Watts,
Tim Otten; CiviDesk - Yashodha Chaku; Coop SymbioTIC - Mathieu Lutfy; Dave D;
Freeform Solutions - Herb van den Dool; Fuzion - Jitendra Purohit; iXiam - César
Ramos; JMA Consulting - Seamus Lee; Joinery - Allen Shaw; Kartik Kathuria;
Lighthouse Design and Consulting - Brian Shaughnessy; Makoa - Usha F. Matisson;
Megaphone Technology Consulting - Jon Goldberg; MJW Consulting - Matthew Wire;
Naomi Rosenberg; Ray Wright; OSSeed Technologies LLP - Sushant Paste; SYSTOPIA
Organisationsberatung - Björn Endres; Timbsoft Technologies - Tunbola Ogunwande;
Wikimedia Foundation - Eileen McNaughton
Most authors also reviewed code for this release; in addition, the following
reviewers contributed their comments:
Agileware - Justin Freeman; Artful Robot - Rich Lott; British Humanist
Association - Andrew West; CiviDesk - Nicolas Ganivet; Coop SymbioTIC - Mathieu
Lutfy; Digitalcourage - Detlev Sieber; Freeform Solutions - S. Gray; Fuzion -
Jitendra Purohit; Greenpeace Central and Eastern Europe - Patrick Figel; Jamie
Tillman; JMA Consulting - Monish Deb; Korlon - Stuart Gaston; MJCO - Mikey
O'Toole; Richard van Oosterhout; Skvare - Mark Hanna; Squiffle Consulting -
Aidan Saunders; Tadpole Collective - Kevin Cristiano
## <a name="feedback"></a>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`.