# CiviCRM 5.16.0
Released August 7, 2019
- **[Bugs resolved](#bugs)**
## <a name="synopsis"></a>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** |
## <a name="features"></a>Features
### Core CiviCRM
- **Allow extensions to define CSS themes / Add a configuration setting for when
to load custom CSS
Adds an option to the "Display Preferences" settings form to allow users to
more finely tune when CiviCRM's css is loaded. On WordPress and Joomla two
options are available the "Backend Theme" and "Frontend Theme", on Drupal and
Backdrop, the administration screen "Display Preferences" presents a singular
- **Clean up use of DAO::nullArray
Improves code stability by removing the unnecessary function
- **Consolidate handling of conflicts between the batch job and get_conflicts
Improves code consistency by ensuring that merge conflicts are stored during
batch_merge to the prev_next cache with the same format as when the api calls
get_conflicts, the code doing this wrangling is moved from the api to the BAO
- **Better support for hookable menubar colors
More colors in the menu, including the base color, highlight color, and text
color, can be modified with hooks.
- **Add csv reader package
Adds the CSV processing utility, league/csv ^9.2 which will help with future
PRs which introduce more test-coverage for CSV outputs and help cleanup some
of the csv code down the way.
- **Improve protected field metadata
Adds more robust metadata to fields protected by permissions in a format that
can be directly passed into `CRM_Core_Permissions::check()`.
- **Move api_key read/write permission checks from api to BAO
Moves the logic for checking the api_key field permissions from the api layer
to the BAO layer so it can be reused by api4 and other things.
- **Add a configuration setting for when to load custom CSS (initial work for
A new function, `CRM_Utils_System::isFrontEndPage()`, indicates whether a page
is considered "front-end".
- **Permit sort_name as a url parameter on advanced search
You can now set `sort_name=x` in the URL on the advanced search form. In
doing this, the sort name field is now defined through metadata rather than
- **Menubar - Improve flexibility & remove hardcoded values
The menu no longer relies on hardcoded pixel dimensions to determine mobile
appearance, and it replaces references to the ID selector `crm-container` with
the class selector of the same name (which is used more broadly).
This also resolves
- **Handle relative start & end dates passed to datepicker widget
Adds some client-side logic to the datepicker widget that was previously done
server-side. Paves the way for afform.
- **Improve utilities & tests for working with js notation
Removes dependence on an external library & improves robustness & accuracy of
reading/writing js notation. Adds a utility function for getting properties of
test for dealing with data in js notation.
- **i18n - Improve multilingual popup for text and wysiwyg fields
Fixes copying of values between multilingual popup and main form for wysiwyg
fields and makes text fields larger in multilingual pop-up.
- **Buttons inconsistencies
Adds support for "button" elements in CiviCRM ajax popup forms in addition to
the input type=button/submit and the "a class=button". This is a first step
towards cleaning up button handling from a theming perspective. Adds
buttons to 'Cleanup caches and update paths' in standard way
- **Display description next to 'paperclip' file icon - usually the filename
When viewing custom files displays the description (usually the filename) next
to the paperclip.
- **Address BAO - Handle standard 'custom' param as well as individual fields
Ensures that the Address BAO can handle both raw unformatted custom field
input and processed custom field inputs.
- **Update PSR16 handling for multisite extension legacy caching group
Only use a Legacy group if using a version of org.civicrm.multisite 2.6 or
- **Improve I18n schema by including comments and default and NOT NULL or NULL
statements to be more consistent with non lingual schema
Adds more information to the I18n schema structure so that when the
translated schema is created it is more similar to the non multilingual schema.
- **Add a couple customField pseudoconstants
Adds a couple missing option lists to the schema so that they show up in the
api explorer for the CustomField entity.
- **Deprecate ARCHIVE format for CiviCRM Database Logging (continues work for
Switches to using InnoDB for extended log tables instead of the ARCHIVE
- **ActivityForm - Redirect to contact page or activity view in standalone mode
When using the "standalone" New Activity form, moves from always redirecting
to the dashboard after saving to redirecting to the contact page (if 1
contact) and the activity view screen (if multiple).
- **URL support for some params in event search
Adds Event Search URL support for the params: sort_name, participant_status_id,
participant_register_date_low, participant_register_date_high, and
participant_register_date_relative. Date format is a string of numbers YmdHIS
- **Add checklist-model angular module
Adds the angular `checklist-model` library required by form builder.
- **Reduce deadlocks on inserting custom data by only using 'ON DUPLICATE' when
it is not a new row
Reduce deadlocks when processing contributions with custom data. This
specifically makes the custom data insert SQL more efficient.
- **Fix url support for receive_date_high & receive_date_low
As a part of a general standardization movement, adds Url support on the
contribution search form for the following fields: receive_date_high,
receive_date_low, contribution_cancel_date_high, contribution_cancel_date_low
and invoice_number=9. Deprecates and continues to support the start date being
passed to contribution search as "start=2018-01-01".
- **Deprecate contribution_date as a parameter
Add deprecation notice for accessing old field name for receive_date in query
- **Create payment activity when creating a payment via the api, test
Ensures when creating a payment via the api a payment activity is created.
- **Expose Primary member only/Non primary member only filter in membership
reports. ((https://github.com/civicrm/civicrm-core/pull/14530) and
On Membership Reports filters tabs, cleans up Membership Owner ID options.
- **Update Owner Membership ID label in reports to be Primary Membership to be
more consistent with rest of system
Changes the label of the Owner Membership ID in reports from "Membership Owner
ID" to "Primary Membership".
## <a name="bugs"></a>Bugs resolved
### Core CiviCRM
- **submitOnce revisited
Ensures "SubmitOnce" functionality works with forms with multiple buttons.
- **[regression] `cv` fails on CiviCRM 5.15.0
This fixes the return value of `CRM_Utils_System_Drupal8::languageNegotiationURL()`
- **Errors exporting contributions on 5.13.2 (continues work for
Applies a more robust fix to a bug exporting soft credits in 5.13.2.
- **Email created without location when syncing from CMS account
Adds a default for `location_type_id` in the API Email.create in order to
address a bug where Emails were being created without a location type when
syncing from a CMS account.
- **$this->_selectedTables is not populated incase of boleen filters
Fixes a bug where when a report was filtered on a boolean field with option No
then `$this->_selectedTables` was not being populated so that it is populated.
- **Block classes in unserialize field for IDE cheer
Ensures unserialize does not permit class unserialization.
- **Support api3 & 4 language syntax & improve test
Fixes support for api3 "language" option and extends test coverage to the new
syntax as well as api v4.
- **Reset language at end of localized api call
Restore the original language after changing it for an api call using
- **Activity formRule status check cleanup
Fixes a bug where under some circumstances, the activity_type_id from fields
and from the getKey call can both return NULL, causing the formRule to raise
an error that one cannot record a scheduled SMS activity.
- **Add query object support for receive_date_high & receive_date_low and
generically date fields
Ensures choosing from receive date in advanced search filters appropriately.
- **Fix setup.sh crash when using the -a flag
Fixes an error where the command setup.sh -a dies with an error because it
doesn't know what database to load.
- **Fix duplicate households on 'Merge same household' exports
Ensures "Merge same household" does not create duplicate rows for each
household, one for the "merged individuals" and one being the explicit
household directly exported.
- **Fix placeholder font in Quicksearch
Make the Quicksearch font be the CiviCRM font instead of the "FontAwesome"
- **CRM_Utils_SQL_ - Properly interpolate NULL values
Ensures the classes `CRM_Utils_SQL_Select`, `CRM_Utils_SQL_Delete`, and
`CRM_Utils_SQL_Insert` properly handle NULL values.
- **Fix deletion of contact sub_type in api4
Cleans up the contact BAO to not arbitrarily delete a contact's sub-type when
saving a contact using Api4.
- **Add in uniqueness to cache keys to mitigate clashes on multisite installs
Ensures cache keys are unique to the specific domain.
- **Object id is always NULL in ore hook in update activity mode
Ensures when using the pre hook with the Activity entity, the Activity id (i.e
the object id) is NOT NULL.
- **Scheduled jobs: replace outdated wiki link
- **Make the contact summary details popup on merge screen non bold a la contact
summary screen ([dev/core#1039](https://lab.civicrm.org/dev/core/issues/1039):
- **When using custom fields for smart group criteria with relative dates the
group does not respect the relative date over time
- **Improper character encoding breaks xml processor
- **Php 7.2 notices fix on import
- **Fix use of cached schema information in SchemaHandler
- **Ensure that contact groups caches are cleared if memory backed
- **Ensure recently converted groups cache matches previous behaviour by setting
`withArray` as fast for it
- **Does CiviCRM make it possible to specify which directories are private and
which are public-accessible? (continues work for
Removes an unused cache-driver for storing cache records in the file system
(under CIVICRM_TEMPLATE_COMPILEDIR, using PHP serialize() format).
- **CiviCRM Campaign, the Revenue Goal field stores 0 if $5,000 or any other
non-numeric value is entered
- **Make a_b relationships available as case roles
This change makes it so users can select b_a relationships AND a_b
relationships when creating case roles, before this change only b_a
relationships were available when creating case roles.
- **Too many divs in caseTypeDetails.html
- **Send copy of case activity is using the contribution receipt template -
actually all message templates seem to be mixed up (Test for
- **Add default receive_date for contributions at BAO level
This change ensures one cannot create contributions with no receive date using
- **Fix A.net to resolve time when using default
Fixes failure to resolve date in authorize.net - this is likely a test-only
- **Fixed visibility logic on Price field options.
Ensure that when adding price options to a price field with some public
options and some private options the new options are considered when
validating that there is an admin option.
- **Support storing IPNs in `civicrm_system_log` for processors that send JSON
Ensures Stripe can log to the `civicrm_system_log`.
- **Grab contribution status id from database
Replaces hard coded Contribution Status Id with a pseudoconstant.
- **Error in civicrm/payment/edit "Expected one FinancialTrxn but found 25
Fixes a bug where when ajax popup forms are disabled submitting the payment
edit form results in a fatal error "Expected one FinancialTrxn but found 25".
- **New contribution may overwrite other contribution if it's opened in other
- **Refund throws a fatal error if the main contribution amount is
- **Event Confirmation and ThankYou forms show tax rate with ALL the decimal
- **Deprecation notice on Find Contributions when get there from Manage
- **Fix refund payment not recording from additional payment form
- **contribution detail report: error when sorting by custom contrib field (DB
Error: no such field)
- **Fix notice on editing contribution
- **Ensure that completed status is selected by default on search contribution
- **Fix unreleased regression - fatal on financial account screen
- **When creating a new event using a template the new event screen is taking
the default values directly from the custom fields, and not from what's saved
in the event template.
- **Display bug for Checkboxes Custom field on Event Confirm / Thank you pages
- **Fix incorrect display of Line Items created via API when printing invoice
- **Add a helper function to ensure we always set the correct tab for manage
- **Removed hardcoded value for registered participant status
- **Hashed mailing URLs do not work with view mailing links
### Drupal Integration
- **Drupal8: CiviCRM menu does not use the correct locale (continues work for
Ensures CiviCRM menu is translated appropriately on Drupal 8 sites using the
locale module and CiviCRM in multilingual mode.
- **Drupal8: drupal_set_message is deprecated (or: Event Cart messages display
Fixes a bug where when using CiviCRM Event Cart in Drupal8, some status
messages were being displayed as HTML to the user.
### Joomla Integration
- **Upgrade to 5.14 fails on updating case views
- **CiviDist fails on BSD flavor of 'cp' with '-r -p' switch to '-R -p'
Ensures cividist does not fail for joomla-alt on MacOSX.
### Wordpress Integration
- **Recreate rewrite rules when basepage setting is updated
Ensures rewrite rules are flushed when saving the WordPress Base Page setting
- **Implement "document_title_parts" filter to apply CiviCRM title on basepage
Ensures when Clean URLs are not implemented, the `<title>` element is
correctly set on the civicrm base page.
## <a name="misc"></a>Miscellany
- **Revert "[REF] use generic loadStandardSearchOptionsFromUrl". Fix search
- **Remove duplicated code in contribution recur search build function
- **Civi\Angular\ChangeSet - Relax debug-mode consistency check
- **Alter PSR16 code to take into account of new entitysetting release with
- **Remove handling for legacy PrevNextCache group as it has now been converted
- **[Form cleanup] remove form classes & tpls for Event Component settings &
- **Add WP-oriented E2E test suite, with HookTest as an example
- **Decommission recordPartialPayment function
- **Fix erroneous variable passed to callAPISuccessGetValue
- **Deprecate some deprecated address functions: defaultCurrencySymbol
- **Extract code converting a date object to local timezone object to own
- **Replace jcalendar instances with datepicker (continues work for
- **[REF] Remove more instances of _nullArray
- **[REF] transform the setting of defaults in CustomField::create to be like
(some) other entities
- **[NFC] Fix Test function delcaration to match change in CiviUnitTestCa…
- **[NFC] Fix indenting in Misc Setting Template
- **[NFC] code formatting
- **[NFC][test] reformat jobTest class
- **[NFC] test cleanup. Uses CRM_Core_Exceptions, properly outputs unfiltered
- **[NFC][test] reformat activity search test
- **[NFC][test] code formatting only
- **[NFC] formatting on test class cleanup
- **NFC These pseudoconstant functions return array or string
- **NFC Comments and formatting only
- **NFC Cleanup comments on BAO event
- **[TEST] add assert to ensure nullArray & nullObject are not contaminated
- **[TEST] Update Email Common Test to incorporate testing for the fix fo…
- **[TEST] Fix intermittent test fail on NULL array getting contaminated
- **[Test] Add in unit test attempting to demonstrate issue caused by dev…
- **[test] Call parent tearDown more consistently
- **[test] convert export test to handle exception rather than early return
- **[test] truncate pledge block when cleaning up financial entities
- **Fix failing test by changing expected date format
- **Fix proportional test to test Payment.create & for the test to make more
- **Fix test which fails when run in isolation.
- **[REF] do not receive by reference in CustomField::create
- **[REF] extract createOptionValue function in CustomField::create
- **[REF] remove instances of pass-by-reference where no change takes place
- **[REF] extract prepareCreate from CustomField.create
- **[REF] Minor code cleanup on string concatenation
- **[REF] Move sort_name definition to searchFieldMetadata
- **[REF] Copy assignProportional Line items back into Payment.create function
- **[REF] minor code cleanup - move indexExist calculation to the only place in
the code that needs it
- **[REF] Remove columnName field
- **[REF + test] extract buildFieldChangeSql and add unit test
- **[REF] CRM_Case_BAO_Case::addcaseActivityLinks to CRM_Case_Selector_Search
- **[REF] dev/core#561 Convert Contribution Date field to use date picker…
- **[REF] do not pass by reference to store & create functions
- **[REF] Add in utility function for resetting ACL and System Level Caches
- **REF Extract getDefaultRoleID for add participant
- **REF Deduplicate recaptcha handling code
- **REF Extract override default currency function
- **REF: Extract preProcess paypalexpress
- **Remove more uses of CRM_Core_DAO::$_nullArray that are unncessary
- **Remove unncessary $_nullArray usage when calling createProfileContact
- **Remove unneeded use of CRM_Core_DAO::$_nullArray in executeQuery or s…
- **Remove more free calls
- **Remove a few places where pass by reference is used but does not need to be
- **Remove failing assertion
- **Removing unused spec function
- **Remove superfluous pass-by-ref in api3
- **Add in Andrei Mondoc(mecachisenros) to contributor key
- **Adding myself to the contributors file
## <a name="credits"></a>Credits
This release was developed by the following code authors:
AGH Strategies - Alice Frumin, Andrew Hunt, Eli Lisseck; Agileware - Alok Patel,
Francis Whittle; Andrei Mondoc; Australian Greens - Seamus Lee; Christian Wach;
CiviCRM - Coleman Watts, Tim Otten; CiviDesk - Yashodha Chaku; Coop SymbioTIC -
Mathieu Lutfy, Samuel Vanhove; Dave D; Electronic Frontier Foundation - Mark
Burdett; Fuzion - Jitendra Purohit; Greenpeace CEE - Patrick Figel; iXiam -
César Ramos; JMA Consulting - Monish Deb; John Kingsnorth; Megaphone Technology
Consulting - Jon Goldberg; MJW Consulting - Matthew Wire; Nicol Wistreich;
Pradeep Nayak; Squiffle Consulting - Aidan Saunders; Tadpole Collective - Kevin
Cristiano; Wikimedia Foundation - Eileen McNaughton
Most authors also reviewed code for this release; in addition, the following
reviewers contributed their comments:
Agileware - Justin Freeman; CiviCoop - Jaap Jansma; CiviDesk - Sunil Pawar;
Fuzion - Luke Stewart; JMA Consulting - Joe Murray; Korlon - Stuart Gaston;
Lighthouse Design and Consulting - Brian Shaughnessy; National Urban League -
Lisa Taliano; Palante Technology Cooperative - Morgan Robinson; Semper IT -
Karin Gerritsen; Tech To The People - Xavier Dutoit
## <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`.