# CiviCRM 5.4.0
Released August 1, 2018
- **[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?** | **yes** |
| **Fix problems installing or upgrading to a previous version?** | **yes** |
| **Introduce features?** | **yes** |
| **Fix bugs?** | **yes** |
## Features
### Core CiviCRM
- **[CRM-20430](https://issues.civicrm.org/jira/browse/CRM-20430) A permission
'save Report Criteria'
([12107](https://github.com/civicrm/civicrm-core/pull/12107))**
Permission to edit the criteria for saved reports is now separate from the
permission to access and preview modifications of report criteria. This will
prevent non-privileged users from modifying the criteria of an organization's
standard reports. However when upgrading, site administrators will need to
grant the Save Report Criteria permission to roles that need that capability.
- **[dev/core#174](https://lab.civicrm.org/dev/core/issues/174) Consistently use
swappable cache interfaces
([12321](https://github.com/civicrm/civicrm-core/pull/12321),
[12322](https://github.com/civicrm/civicrm-core/pull/12322),
[12323](https://github.com/civicrm/civicrm-core/pull/12323),
[12330](https://github.com/civicrm/civicrm-core/pull/12330),
[12331](https://github.com/civicrm/civicrm-core/pull/12331),
[12336](https://github.com/civicrm/civicrm-core/pull/12336),
[12342](https://github.com/civicrm/civicrm-core/pull/12342),
[12348](https://github.com/civicrm/civicrm-core/pull/12348),
[12354](https://github.com/civicrm/civicrm-core/pull/12354),
[12362](https://github.com/civicrm/civicrm-core/pull/12362),
[12368](https://github.com/civicrm/civicrm-core/pull/12368),
[12376](https://github.com/civicrm/civicrm-core/pull/12376),
[12378](https://github.com/civicrm/civicrm-core/pull/12378),
[12379](https://github.com/civicrm/civicrm-core/pull/12379),
[12380](https://github.com/civicrm/civicrm-core/pull/12380),
[12381](https://github.com/civicrm/civicrm-core/pull/12381),
[12389](https://github.com/civicrm/civicrm-core/pull/12389), and
[215](https://github.com/civicrm/civicrm-packages/pull/215))**
Sites using Redis or Memcache for caches and sessions will now use those
facilities exclusively rather than retaining the `civicrm_cache` table as
a backstop. This improves performance for these sites, especially those
using multiple MySQL servers.
As a precaution, Redis or Memcache administrators with very active sites
may wish to double-check that they have ample capacity for their caches and
sessions.
For developers, the `CRM_Utils_Cache` APIs now support expiration/TTL
times and [PSR-16 CacheInterface](https://www.php-fig.org/psr/psr-16/).
The Civi implementation is slightly more permissive than the PSR-16
specification; for full compliance, enable `CIVICRM_PSR16_STRICT`.
- **[CRM-21574](https://issues.civicrm.org/jira/browse/CRM-21574) Allow to
disable sending of email from source contact for tell a friend on pcp
([12355](https://github.com/civicrm/civicrm-core/pull/12355)) (preliminary
work)**
Emails from the "tell a friend" feature are sent as if they are from the
donor's address. This can cause delivery failures as the site may not be a
valid source for the donor's email domain. Changes here are preliminary
cleanup.
- **[dev/core#32](https://lab.civicrm.org/dev/core/issues/32) Add option to
disable cancel button on a profile form
([11883](https://github.com/civicrm/civicrm-core/pull/11883))**
The Cancel button is now optional on profile forms.
- **[CRM-21392](https://issues.civicrm.org/jira/browse/CRM-21392) Allow viewing
groups/smartgroups as as other entities (eg. memberships, events)
([11241](https://github.com/civicrm/civicrm-core/pull/11241))**
The Find Groups page now has a similar "View Results As" feature as the
Advanced Search: you can choose to view memberships, events, activities, etc.
of group subscribers rather than the contacts themselves.
- **[CRM-21622](https://issues.civicrm.org/jira/browse/CRM-21622) Make the Add
Parent Groups on Group Settings be a multiselect
([11481](https://github.com/civicrm/civicrm-core/pull/11481))**
The New Group form now allows you to set multiple parent groups for a single
group.
- **[CRM-21460](https://issues.civicrm.org/jira/browse/CRM-21460) Programmatic
access to job execution status
([11337](https://github.com/civicrm/civicrm-core/pull/11337))**
Extension developers can implement two new hooks, `hook_civicrm_preJob` and
`hook_civicrm_postJob`, which are invoked before and after executing a
scheduled job.
- **Change default for `CIVICRM_CONTAINER_CACHE` to simplify admin/developer
experience ([12426](https://github.com/civicrm/civicrm-core/pull/12426))**
- **[dev/core#223](https://lab.civicrm.org/dev/core/issues/223) Expose prefix
and suffix in reports
([12394](https://github.com/civicrm/civicrm-core/pull/12394))**
Individuals' prefix and suffix fields are now available as columns and filters
among the contact fields in most reports.
- **[dev/core#101](https://lab.civicrm.org/dev/core/issues/101) Allow further
customization of search form in hooks
([12078](https://github.com/civicrm/civicrm-core/pull/12078))**
Fields are no longer explicitly included in the search form template since
that makes it hard to add or remove fields. Instead, the fields are listed in
template variables, and the template iterates over the list to render the
field elements.
- **[dev/core#183](https://lab.civicrm.org/dev/core/issues/183) Temporary tables
should follow consistent naming convention
([12311](https://github.com/civicrm/civicrm-core/pull/12311)) (partially
completed)**
This moves towards naming temporary tables--both true temporary tables in
MySQL and regular tables created for temporary use--in a consistent manner in
order to help database administrators employ replication policies based upon
table names.
- **[dev/core#144](https://lab.civicrm.org/dev/core/issues/144)
`getCustomFieldID` switch to API, add caching, add full string return option
([12218](https://github.com/civicrm/civicrm-core/pull/12218) and
[12283](https://github.com/civicrm/civicrm-core/pull/12283))**
The function to retrieve a custom field ID now relies upon APIv3 rather than
an *ad hoc* SQL query. It also contains an option to return the ID preceded
by `custom_`. Finally, the function caches the result and attempts to return
the cached value rather than looking it up each time.
- **[dev/core#47](https://lab.civicrm.org/dev/core/issues/47) Add "clone"
functionality to scheduled jobs
([11945](https://github.com/civicrm/civicrm-core/pull/11945))**
Scheduled jobs can now be copied, including their parameters, both from the
Scheduled Jobs page and through a new `Job.clone` API method.
### CiviCase
- **[dev/core#107](https://lab.civicrm.org/dev/core/issues/107) After creating a
new case, the assignee for each activity must be selected manually
([11998](https://github.com/civicrm/civicrm-core/pull/11998))**
You can now select the default assignee for each activity in the standard
timeline for a case type. This may be defined according to a relationship
with the client, a single specific contact, or the contact who created the
case.
- **CiviCase, added reference of activities from different timelines.
([12236](https://github.com/civicrm/civicrm-core/pull/12236))**
From an activity on a case timeline, you can now reference any activity
available to the case--not just those on that case timeline.
### CiviContribute
- **Add support for hidden fields in general (and 'token' specifically) on the
payment form. ([12332](https://github.com/civicrm/civicrm-core/pull/12332)
and [12391](https://github.com/civicrm/civicrm-core/pull/12391))**
A new authorization token field is added to the payment form to support
token-based payment processors.
- **[CRM-21808](https://issues.civicrm.org/jira/browse/CRM-21808) Install custom
group for Contribution or ContributioRecur subtypes based on XML file
([11726](https://github.com/civicrm/civicrm-core/pull/11726))**
Extensions created custom data sets for contributions can now specify the
custom data to apply only to a single financial type.
- **(dev/core/50) and
[dev/core#195](https://lab.civicrm.org/dev/core/issues/195) Add Separate
Sub-tabs for Contributions and Recurring Contributions
([11956](https://github.com/civicrm/civicrm-core/pull/11956) and
[12345](https://github.com/civicrm/civicrm-core/pull/12345))**
The Contributions tab on a contact now contains two sub-tabs--one for single
contributions, and the other for recurring contribution series--instead of
displaying one after the other.
- **[dev/core#96](https://lab.civicrm.org/dev/core/issues/96) Expose source
column in booking report
([12374](https://github.com/civicrm/civicrm-core/pull/12374))**
The contribution Source field is now available as a column and filter on the
Bookkeeping Transactions report.
- **Use html5 color input for contribution page widget
([12339](https://github.com/civicrm/civicrm-core/pull/12339))**
### CiviMail
- **[dev/mail#1](https://lab.civicrm.org/dev/mail/issues/1) Add pause/resume
functionality to civicrm bulk mailing.
([11803](https://github.com/civicrm/civicrm-core/pull/11803) and
[12284](https://github.com/civicrm/civicrm-core/pull/12284))**
A CiviMail mailing that is scheduled or in progress can now be paused in order
to allow an urgent message to go out first.
- **Add in bootstrap button classes to CiviMail interface
([12013](https://github.com/civicrm/civicrm-core/pull/12013) and
[12338](https://github.com/civicrm/civicrm-core/pull/12338))**
This allows the interfaces to be themed more easily by Bootstrap-based themes.
## Bugs resolved
### Core CiviCRM
- **[dev/core#222](https://lab.civicrm.org/dev/core/issues/222) Importing
contacts with dedupe rule does not use the rule
([12393](https://github.com/civicrm/civicrm-core/pull/12393))**
- **[dev/core#284](https://lab.civicrm.org/dev/core/issues/284) Aggressive cache
clearing significantly increases test time
([12590](https://github.com/civicrm/civicrm-core/pull/12590))**
Settings, compiled Javascript, extension, and other caches are now only
flushed along with the `default` CiviCRM cache if an external cache like Redis or
Memcache is in use. (This reproduces the `5.3` behavior.)
- **[dev/core#279](https://lab.civicrm.org/dev/core/issues/279) When Merging two
contacts, Flip between original and duplicate link not working in WordPress
([12568](https://github.com/civicrm/civicrm-core/pull/12568))**
- **Handle 'Check for Matching Contact(s)' button with ajax
([12552](https://github.com/civicrm/civicrm-core/pull/12552))**
This resolves a bug where the "Check for Matching Contact(s)" button would not
work if AJAX Deduping is enabled.
- **[dev/core#131](https://lab.civicrm.org/dev/core/issues/131) Add in missing
UK shire Monmouthshire
([12538](https://github.com/civicrm/civicrm-core/pull/12538)) (follow-up on
previous work)**
Many individual sites had manually added the county of Monmouthshire in Wales
to the `civicrm_state_province` table, and upgrading to 5.3.0, which added the
missing record, would cause them a database error.
- **[dev/core#258](https://lab.civicrm.org/dev/core/issues/258) Possible
unreleased regression - message template update altered customised template
([12492](https://github.com/civicrm/civicrm-core/pull/12492))**
- **[dev/core#249](https://lab.civicrm.org/dev/core/issues/249) Contact Export
fails in 5.4 when trying to export using the All radio button
([12447](https://github.com/civicrm/civicrm-core/pull/12447))**
- **[dev/core#234](https://lab.civicrm.org/dev/core/issues/234) Upgrade Steps in
5.3.alpha1 may not have been run
([12419](https://github.com/civicrm/civicrm-core/pull/12419),
[12420](https://github.com/civicrm/civicrm-core/pull/12420), and
[12425](https://github.com/civicrm/civicrm-core/pull/12425))**
- **[dev/core#155](https://lab.civicrm.org/dev/core/issues/155) Improvements and
bugfixes to Option Groups UI
([12233](https://github.com/civicrm/civicrm-core/pull/12233) and
[12411](https://github.com/civicrm/civicrm-core/pull/12411))**
The Option Groups page now displays whether each option group is reserved or
enabled. In addition, sites using sample data no longer have the sample
custom fields reserved.
- **[CRM-20184](https://issues.civicrm.org/jira/browse/CRM-20184) Some System
Workflow templates still miss {contact.email_greeting}
([12296](https://github.com/civicrm/civicrm-core/pull/12296))**
This makes receipt templates more consistent in using the contact's email
greeting when sent to individuals.
- **[dev/core#41](https://lab.civicrm.org/dev/core/issues/41) Search Builder:
Not empty with date or integer custom fields gives a sql warning
([12351](https://github.com/civicrm/civicrm-core/pull/12351) and
[12363](https://github.com/civicrm/civicrm-core/pull/12363))**
- **Make all form tasks inherit from `CRM_Core_Form_Task`
([12318](https://github.com/civicrm/civicrm-core/pull/12318))**
This addresses some export problems caused by tasks lacking certain properties
because their classes did not extend `CRM_Core_Form_Task`.
- **[dev/core#178](https://lab.civicrm.org/dev/core/issues/178) Redis driver -
Error messages are invisible
([12303](https://github.com/civicrm/civicrm-core/pull/12303))**
The log now contains error messages passed from Redis.
- **[dev/core#180](https://lab.civicrm.org/dev/core/issues/180) Deleting custom
values and custom_hook parameter `$entity_id` empty
([12309](https://github.com/civicrm/civicrm-core/pull/12309))**
The ID of the affected entity is now passed to `hook_civicrm_custom` when a
value is deleted from a custom field.
- **Fix access to scheduled reminders for admins without event access
([11733](https://github.com/civicrm/civicrm-core/pull/11733))**
Users with Administer CiviCRM permission but lacking Manage Events permission
would get an error when trying to create a non-event scheduled reminder.
- **Only treat a request as a get request (and hence use GET) if it starts with
get ([12308](https://github.com/civicrm/civicrm-core/pull/12308))**
- **[dev/core#179](https://lab.civicrm.org/dev/core/issues/179) Redis driver -
Allow anonymous connections
([12304](https://github.com/civicrm/civicrm-core/pull/12304))**
Redis no longer attempts to authenticate when no password is set, such as on
local development environments.
- **[dev/core#177](https://lab.civicrm.org/dev/core/issues/177) Redis driver -
Reports incorrect value for cache-miss
([12302](https://github.com/civicrm/civicrm-core/pull/12302))**
When a cache key is undefined, Redis now returns `NULL` rather than `FALSE`.
- **[dev/core#175](https://lab.civicrm.org/dev/core/issues/175) Smart group
involving relationship type filter display incorrect results.
([12301](https://github.com/civicrm/civicrm-core/pull/12301))**
- **Make Send SMS permission independent of Edit Contact permission
([12067](https://github.com/civicrm/civicrm-core/pull/12067))**
You no longer need the permission to edit a contact (in addition to the Send
SMS permission) to send the contact a SMS message.
- **[dev/core#134](https://lab.civicrm.org/dev/core/issues/134) Search Builder
broken filter for Source Contact ID
([12181](https://github.com/civicrm/civicrm-core/pull/12181))**
- **[dev/core#140](https://lab.civicrm.org/dev/core/issues/140) add missing
pseudoconstant for `option_group_id` in CustomField.xml
([12195](https://github.com/civicrm/civicrm-core/pull/12195))**
Extensions creating custom fields can now refer to option groups by name
rather than ID.
- **[dev/accessiblity#3](https://lab.civicrm.org/dev/accessibility/issues/3) Add
aria-label (and label?) to form elements missing them
([12209](https://github.com/civicrm/civicrm-core/pull/12209) and
[213](https://github.com/civicrm/civicrm-packages/pull/213)) (partial work)**
Besides adding `aria-label` attributes to sub-elements of the Quickform
date field, event info pages no longer wrap basic information labels in
`