# CiviCRM 5.29.0
Released September 2, 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?** | **yes** |
| **Fix problems installing or upgrading to a previous version?** | **yes** |
| **Introduce features?** | **yes** |
| **Fix bugs?** | **yes** |
## <a name="features"></a>Features
### Core CiviCRM
- **Contact export is very slow, creates huge temporary tables
Improves performance when exporting contacts by only exporting primary address
- **Allow different output formats for CiviReport results, like native excel
format, and untangle code
This makes it possible to extend CiviReport by reworking the PDF and CSV
generation code as new output handlers, and allowing for extension developers
to add new ones.
- **Icon in status message after saving a civireport is misleading
Improves icons in Status Messages for reports.
- **Show cron warning on Scheduled Jobs admin page
A pop-up message will appear on the Scheduled Jobs page if cron has not been
- **Add APIv4 and pseudoconstants for RelationshipCache
- **RelationshipCache - Add a high-level index to facilitate relationship
queries (more fields)
A new table caches relationships to provide a single resource for tracking
relationships from a specified contact's perspective. The RelationshipCache
records the "near" and "far" contacts and relationship names along with the
orientation and relationship type. Each record from `civicrm_relationship`
will have two records in `civicrm_relationship_cache`, one for each
- **Remove ORDER BY and GROUP BY from alphabetQuery to improve performance
- **Differentiate smart group from regular group using icon in select2 field
Improves Group's select2 by adding icon next to smart groups.
- **Feature: Ability to enable SSL for database connection.
Makes it so sites can use ssl to connect to mysql.
- **Add in hook to allow for altering of Profile Schemas
Extensions that allow additional fields to be added to profiles can now add
schemas so that fields can be added from new entities.
- **Why not make the buttons flat?
Buttons no longer have a gradient background.
- **SystemCheck: add ability to efficiently run only specified checks
The APIv4 system check action can now filter on name, running just the
- **Change inform-icon to fa-info-circle
The information icon is now produced with Font Awesome rather than a sprite.
- **APIv4 - Add keyword to select all custom fields
You can now use a wildcard to select all custom fields on an entity without
specifying each individually.
- **Improve caching of current domain
Domain information is now cached in one central place, making it more
straightforward to use and flush.
- **APIv4 - Specify BridgeEntities to assist with joins
Minor entities that intermediate many-to-many relationships are now specified
as bridge entities and extend from a new base class. This will allow them to
be distinguished better in the future.
- **APIv4 - Add shorthand for setCheckPermissions()
The CRUD functions of APIv4 now accept a boolean argument that corresponds to
the value sent to `setCheckPermissions()`. This provides a shorthand for a
very common use case.
- **Add search extension
An extension that replaces Search Builder is now shipped with core, though it
is hidden from the extensions user interface because it is currently
incompatible with the default theming framework.
- **Add configure and priceset url icons on public contribution & event pages
A "Configure" button now appears to administrators when viewing a contribution
page or event, or a priceset within either, from the frontend. This links to
the corresponding form to administer the contribution page, event, or
- **Move Event Cart to extension
The event cart features have been moved to a separate extension that is
shipped with core.
- **Option to update expired memberships as part of the job.process_membership
Improves the Job.process_membership API/Scheduled job by adding some new
- exclude_test_memberships: Exclude test memberships from calculations
(default = TRUE)
- only_active_membership_types: Exclude disabled membership types from
calculations (default = TRUE)
- exclude_membership_status_ids: Default: Exclude Pending, Cancelled,
Deceased will always be excluded
- **Add auto-renew status to membership detail report
The membership detail report can now display and filter on the auto-renew
status of each membership.
### Backdrop Integration
- **Support for installing CiviCRM-Backdrop via "setup" UI
Improves the installation and Setup process for Backdrop integration's so that
one enables the CiviCRM module like any other module and then is directed to
the setup screen to complete installation as opposed to having to navigate to
a specific link.
### Drupal Integration
- **Upgrading a site that still has "mysql" in the dsn string breaks in latest
This adds an upgrade message for 5.29.0 warning that Composer patching will
need to be enabled before upgrading to 5.30.0 or higher.
The "mysql" in the DSN (as opposed to "mysqli") will not be a problem, but the
solution for this is in a package patch that appears in 5.30.
- **Installation - Support "activate first" w/setup UI
The new setup user interface for Backdrop and WordPress installations is now
available for Drupal 7.
### WordPress Integration
- **Add system check to ensure WP base page exists
A new system check will display a message if the base page, as set in CiviCRM,
doesn't match an existing page in WordPress. No message will display if
WordPress multisite is enabled.
## <a name="bugs"></a>Bugs resolved
### Core CiviCRM
- **CRM_Dedupe_Finder parses phone key incorrectly
The process to match duplicate contacts was not accurately identifying phone
fields, causing contacts with matching phone numbers to be treated as if they
- **Dedupe: Location type is treated inconsistently
Duplicate matching now ignores location type for postal address fields, now
consistent with how it has ignored phone and email location types.
- **Installing Drupal 8 using civicrm-setup leads to "incorrect resource url"
system status check errors
Removes the resource URL status check.
- **API4: 500 error on chain with custom field
- **MySQL uses filesort index when building the query which can cause
- **Custom fields not copied on shared address
- **Email template permissions
Users sending an email are no longer able to save or modify a template if they
lack the "edit message templates" permission.
- **Using Parent tag in search form doesn't pull contacts marked with child tag
in search form result
- **Activity Search : Tags are not working
- **Autocomplete-select custom field is not searchable
- **Do not allow enabling database logging when using multilingual
This has never worked, with network errors as the result. This prevents it
from being set.
- **Can't remove subtype if any required custom field is based on it
- **User account form action not passing along contact id correctly possibly
leading to duplicate contacts
When creating a user account from a contact record, the contact ID was not
properly passed along. Depending upon your unsupervised duplicate matching
rule, it would potentially create a duplicate contact record.
- **Cannot edit a profile field of "Email" to use the Location Type "Primary"
The location type would get reset to your default location type rather than
staying as "primary".
- **Downgrade checkEnvironment level and skip non-prod checks (part of
In non-production environments, a system check produces a message saying so.
This downgrades it from an "Alert" to a more appropriate level of "Notice",
and it also suppresses cron and CiviMail system checks in this situation.
- **Slew of E_NOTICES on Profiles admin page and description field is always
- **CiviReport sent as email via mail_report job with a CSV attachment doesn't
show UTF8 characters properly in Excel
- **References to packages path in security status checks are assumed to be
under civicrm root
This changes how package and vendor paths are calculated in system checks
since (in Drupal 8 and potentially elsewhere) they may not be within the
CiviCRM root folder.
- **Custom data insert/update error if using reserved words
- **Advanced Search (search by complete or partial name) returns all contacts
The ability to search first/last name was recently added to core. The primary
intent was to properly handle advanced searches that originate from
quicksearch first/last name filters. While that was working, a first/last name
search that originated directly from an advanced search was not working. This
fixes the issue.
- **Miscellaneous E_NOTICES
- **CRM_Core_Key::valid() does backwards comparison
This removes legacy code that appeared to attempt to check for a valid
quickForm key but wasn't effectively doing so.
- **Upgrade fails for 4.6 => 5.29 during status-check
- **Installation doclinks not getting url-rewritten
Links to the new installation documentation are now handled in the same way as
other documentation sites.
- **Wrap multi record custom field inside a div
- **Fixed filling default values for tagssets in the advanced search form
- **Simplify caching of status checks
- **Ensure custom field checkboxes are populated in profiles
- **Upgrade PEAR/mail_mime package to be compliant with PHP7.4 and deploy it
using composer ((https://github.com/civicrm/civicrm-core/pull/17948))**
- **Setup UI - Validate that at least one "Component" is enabled
This prevents you from proceeding with installation without enabling at least
one component. Not enabling any components causes a messy failed
- **Call apiv4 from Contribution create rather than fugly addActivity function
- **Search debug ((https://github.com/civicrm/civicrm-core/pull/17887))**
- **Simplify flushing group contact cache query to reduce table locking and
- **Make api get upgrade-safe
This avoids database errors when the code and database versions don't match by
preventing the API from accessing fields that are unsupported in the database.
- **CheckEnv - Give new installs a grace period before 'Cron Not Running' msg
The system check will lower the severity of the "cron not running" check for
the first 24 hours after a site has been installed.
- **Sort permittedActivityTypes
This improves performance on filtering activity types by making it possible to
compare a list of permitted types with the overall list of activity type IDs.
- **APIv4 - Fix saving custom fields with same name
- **Status Checks - Use more specific label regarding "Domain"/"Organization"
- **SQL temp table not using utf8mb4 if server default already set to utf8mb4
- **Wrong link to admin page in error message about FROM address on PCP page
- **Fix sticky table header on "Find Activities" page
- **Fixed DB Error: syntax error if line item refers to civicrm_case
- **Fix potential js error on summary screen when reloading blocks
- **Fix 'Undefined variable: jsSet in CRM_Core_BAO_Mapping::loadSavedMapping()'
- **Fixed notice error on Relationships report
- **Fix obscure dedupe scenario where 'bad' location data can overwrite good
- **Fix JQuery Validation for radios
- **Fix case activity field set to allow long details to be exported
- **Case export has two fields that are not what they say they are
- **Collapsed custom field set for activities with a required radio makes case
activity buttons seem disabled
- **CRM_Utils_Check_Component_Case - Guard against post-upgrade crash
- **Define the logic that sets (or not) contribution receive_date in relation to
This undoes a regression where the contribution date of a pay-later
contribution would change when a payment completes the contribution. The
contribution date is the accrual date and is distinct from the date the
contribution is entered and the date when all payments have been received.
In the process, this changes the "Update pending contribution status" search
action to be "Record payments for contributions". The result is generally the
same, but the status change comes about because the payments complete the
contributions. You can modify contribution statuses in bulk with a profile by
using the "Update multiple contributions" action.
- **Disable frequency/interval fields if not required. Mark required if they are
so they are validated before submit
The frequency and interval fields for recurring contributions now use jQuery
validation to disable or require them as appropriate.
- **Paypal IPN sometimes fails to update the next scheduled payment date when
recording the latest recurring payment
- **Contribution Details Statistics are multiplied under many circumstances
- **Contribution Summary Report: The "general total" row does not take the
When the contribution summary report is used by filtering for a currency other
than the site's default currency, the "grand total" row shows the sign of the
default currency instead of the filtered currency.
- **Fix PaypalIPN single function to not receive-by-reference
- **Allow Failed -> Completed status for contributions
- **Fix currency symbol for Total Amount on contribution page
This resolves a but where the total amount would show the default system
currency symbol regardless of the currency configured on the contribution
- **On behalf label / Honoree Title / Honoree Description not translatable on
- **Load contribution page if live payment processor is disabled but test is
- **Remove requirement to pass 'contribution_status_id' => Pending from
- **Use saved contribution's line items rather than the primaryContributionID
- **Do not overwrite values saved from the repeatContribution routine
- **"Contribution Source" profile field has no effect on new contribution
- **Incorrect check for "soft_credit" after making pcp donation
- **Total Tax Amount on the Contribution (generated in backoffice/offline) no
longer adds up to sum of the Tax Amount for the individual line items
- **Downloaded Invoice activity attaches non wkhtmltopdf invoice
Downloading an invoice would ignore whether wkhtmltopdf was configured and
always use dompdf.
- **Fix repeattransaction api to use custom data from the template contribution
The Contribution.repeattransaction API will now copy custom data from the
template rather than the earliest related contribution.
- **Can't meaningfully disable self-service transfer/cancellation once enabled
- **Event registration form has inconsistent labeling
- **Event cart hidden/enabled in buildkit 5.29 RC
Ensures that the Event Cart functionality defaults to off.
- **Remove URL-tracking in mass SMS
Rewritten URLs were confusing and made SMS messages unnecessarily long. There
also have never been SMS tracking reports to use them anyway.
- **Test mailings create new contacts even when "Add Contacts" permission is not
Ensures contacts are not created when a user without permissions to create
contacts sends a test email.
- **Mailing Subscription form does not validate reCAPTCHA
- **Text version of unsubscribed email is missing the link to resubscribe
- **Add CiviMail synchronisation frequency setting
(in support of [dev/core#1768](https://lab.civicrm.org/dev/core/-/issues/1768):
This adds a setting for updating how frequently the database should be updated
with the status of emails that have been sent. Updating the database more
frequently can slow the process down, but it reduces the likelihood that a
recipient will be re-emailed when recovering from a stalled mailing.
- **Mark the new routes for "open.php" and "url.php" as public
This denotes the paths for open and URL tracking as "public" pages as they are
meant to be used by unauthenticated email clients and recipients.
- **Decimal Separator - Invalid value "total_amount" (NaN,N) creating or editing
a membership ([dev/core#1113](https://lab.civicrm.org/dev/core/-/issues/1113):
- **Offline Membership Renewal Tax Calculation is incorrect [regression]
### Drupal Integration
- **Drupal 8 - Using Create User Record action on a contact with no email is too
quiet. Also CRM_Core_Session::setStatus is sometimes ignored.
Require email when adding a user and ensure that errors show.
- **The following PHP variables are not set: $_SERVER[HTTP_HOST]
Skip the server variable checks if running in a CLI environment, removing an
error when running Drush commands against Drupal 8 and Drupal 9 based sites.
- **Can't find reCAPTCHA in Drupal 8
- **Fixed for multi-select filter
This fixes filters for multi-select fields in Views.
- **Fix URL for file field
This fixes the generated URL for file fields in Views.
### Wordpress Integration
- **[civicrm.files] token doesn't work in some cases since 5.27
Ensures the [civicrm.files] token plays nice for sites with older WordPress
file directory set ups.
- **CiviCRM and the WordPress Pods plugin (since version 2.7.13) is incompatible
due to Pods including marionette v3.3.1 for backbone, newer than CiviCRM's
bundled marionette v1.0.3
Ensures CiviCRM plays nicely with recent versions of Elementor Plugin.
- **Fix PHP notice on WordPress permissions form
- **Slow down the frequency of WordPress "heartbeat" calls in CiviCRM admin
- **Be more forgiving about slash in wpBasePage ([dev/wordpress#73](https://lab.civicrm.org/dev/wordpress/issues/73):
## <a name="misc"></a>Miscellany
- **APIv4 - Add BasicEntity helper class
- **Bump minimum upgradable version to 4.4.7
- **Update version in the test_data_second_domain file and also update the
setVersion script to update the file version as necessary
- **Be a little less supportive to cvs
- **Replace a load of references to the wiki with docs links
- **Remove unneccessary isoToDate function
- **CRM_Activity_Form_SearchTest::testQill can fail semi-randomly
- **Test for fatal error on new individual form
- **Bump lodash from 4.17.15 to 4.17.19
- **Update regen.sh with new & upcoming core extensions
- **APIv4 - Add activity contacts to APIv4 field spec
- **Adjust mysql SET NAMES in remaining places as we agreed this was the go
- **CRM_Utils_SQL - Add "onDuplicate()" and "syncInto()" helpers
- **Improve efficiency of findFiles
- **APIv4 Explorer: Improve selection of fields for HAVING
- **Convert CRM.utils.formatDate tests to karma
- **Teach CRM.utils.formatDate to also show time
- **CRM_Utils_Hook: deprecation warning and short array syntax
- **Remove check for valid email in synchronizeUFMatch
- **Remove unused "ufUniqID" session variable
- **Remove duplicate cache flush
- **Remove extraneous opportunistic cache flush.
- **Hooks/Dispatcher - Close loopholes that occur around "preboot" hooks
- **Use PrematureExit exception instead of weird hack in tests
- **Remove unnecessary try/catch per #17729
- **handlePaymentNotification() should not be declared as a static method
- **MembershipRenewalTest - Fix failure
- **Remove hard coded charset.
- **getLoggedInContactID() is a static function
- **Remove PaymentExpress ipn class
- **Remove unused, deprecated functions
- **CIVICRM_BAO_CACHE_ADAPTER - Remove obsolete option
- **More unused functions in GenCode
- **Temporary tables should follow consistent naming convention
- **CRM_Core_BAO_Cache - Remove functions deprecated a year ago
- **Fix all core processors to implement doPayment and not doTransferPayment or
- **[REF] Extract setUserContext on contribution form & cleanup on backend add
- **[REF] remove unnecessary variable variables
- **[REF] - Add helper function for the repetitive task of fetching multilingual
- **[REF] Unit test attempt to create reported bugs , minor cleanup
- **[REF] Extract addToRecentItems from membership create
- **[REF] Fix a couple of jQuery errors that have cropped up
- **[REF] regen.sh - Remove unusual handling of `zipcodes.mysql`
- **[REF] ScheduledJob cleanup, remove unused var
- **[REF] Migrate Event Cart Setting into the Extension
- **[REF] Only printOnly once
- **[REF] APIv4 ConformanceTest - Split apart into per-entity sub-tests
- **[REF] WebsiteTest - Mitigate flaky failures
- **[REF] Follow up cleanup
- **[REF] Remove ACL join on temp table creation in Member ContributionDetail
- **[REF] Do or do not - there is no try
- **[REF] Unused interface CRM_Report_Interface
- **[REF] - Cleanup StatusPreference BAO to be more standard
- **[REF] Reduce interaction between dedupe code and createProfileContact
- **[REF] Simplify field reference
- **[REF] [Test] Minor simplification on test
- **[REF] Simplify is_email_receipt in sendMail
- **[REF] Remove transaction from BaseIPN completeTransaction call
- **[REF] Simplify membership status date handling
- **[REF] Clean up handling of financial_type_id override
- **[REF] Remove transaction from completeOrder signature
- **[REF] Remove transaction instantiation in PaypalPro
- **[REF] Stop instantiating transaction in PaypalIPN
- **[REF] Remove pass-by-reference & always empty param
- **[REF] Tighten up function signature for dedupePair
- **[REF] Move noisily deprecate BaseIPN->sendMail, call api from it rather
than BAO function
- **[REF] Use CRM_Utils_Mail::send for sending emails for confirming unsubscribe
resubscribe auto replies and subscribing
- **[REF] Reduce calls to CRM_Member_PseudoConstant::membershipType
- **[REF] Use Standard function cacheClause to re-use contact acl cache table
- **[REF] Make explicit what we are doing with 'values' in this code
- **[REF] Minor code clean up
- **[REF] Grant cleanup
- **[REF] Refactor to use the standard CRM_Core_Form::addRadio function for a
number of radio elements
- **[REF] Fix the default to_financial_account_id for generated transactions
- **[REF] Upgrade dompdf version to be more compatible with PHP7.4
- **[REF] [Tests] Cleanup test declaration to take advantage of mapping
- **[REF] Remove unnecessary complexity on im export
- **[REF] GroupContact BAO - Minor code cleanup
- **[REF] Minor function signuture cleanup
- **[REF] Do not pass variable by reference
- **[REF] remove first attempt to set currency in repeattransaction flow
- **[REF] Even less variable variables
- **[REF] Move handling of form elements back to the Form
- **[REF] Simplify location metadata handling in Export class
- **[REF] Do not pass by reference to the recur function
- **[REF] Simplify getMembershipStatusByDate more
- **[REF] Remove mail_mime package as now supplied by composer
- **[REF] Remove some deprecated size function calls replaced with length
- **Refactor "applyLocale" and remove references to "language" column in UFMatch
- **[NFC] Fix provider unit test on PHP7.4
- **[NFC] Docblock cleanup
- **[NFC] Update versions file to remove reference to Mail_mime and Mail
- **[NFC] Re run regen after recent merges
- **[NFC] Fix nonstandard header comments
- **[NFC] Add in a unit test of calling the contribution page widget endpoint
and remove unneeded file
- **[NFC] Improve docs for APIv4 Save action
- **[NFC] Docblock cleanup
- **[NFC] Update a few doc/wiki links in code comments
- **[NFC] Comment block cleanup
- **[Test] Update hook signature in test
- **[Test] Attempt to replicate #17852
- **[Test fix] We might need this to ensure really quick test runs don't fail
- **Add testing to Authorize.net and remove the lines that are repeated
- **Add test on status calculation
- **Fix for failing test
- **[Test framework] re-re-fix test and add test for test
- **Re-fix test ((https://github.com/civicrm/civicrm-core/pull/18009))**
- **[Test framework] - Update failing test
- **[Test framework] - Combine triplicate createCase functions
- **Remove error checking by-pass in tests
- **[Test Framework] - Tests for report downloads
- **api_v3_TaxContributionPageTest - Remove hard coded processor id
- **API tests - label versions in dataprovider versionThreeAndFour
- **Extract code to set isEmailReceipt in Contribution.completeOrder
- **Do not pass-by-reference to recur function
- **Unused functions in GenCode
- **Fix typo in templates/CRM/Report/Form/Tabs/GroupBy.tpl
- **Remove unused "ufUniqID" session variable
- **Remove Net packages Net_Curl Net_DIME as they do not appear to be used
- **Update contributor key for Andrew
- **Fix qill typo
- **Update flexmailer release information
- **Remove invalid use of crmMoney formatter
- **Remove main PaymentExpress class
- **Remove unused parameter ids['billing']
- **Cache loader - remove legacy handling, handle null result from setting
- **Use case id to get relationship for activity creation
## <a name="credits"></a>Credits
This release was developed by the following code authors:
AGH Strategies - Alice Frumin, Andrew Hunt; Agileware - Justin Freeman;
Christian Wach; Circle Interactive - Pradeep Nayak; CiviCoop - Jaap Jansma,
Klaas Eikelboom; CiviCRM - Coleman Watts, Tim Otten; CiviDesk - Yashodha Chaku;
Coop SymbioTIC - Mathieu Lutfy, Samuel Vanhove; Dave D; Fuzion - Jitendra
Purohit; iXiam - César Ramos, Diego Muñio; JMA Consulting - Monish Deb, Seamus
Lee; John Kingsnorth; Joinery - Allen Shaw; Lighthouse Consulting and Design -
Brian Shaughnessy; Megaphone Technology Consulting - Jon Goldberg; MillerTech -
Chamil Wijesooriya; MJCO - Mikey O'Toole; MJW Consulting - Matthew Wire;
Progressive Technology Project - Jamie McClelland; Squiffle Consulting - Aidan
Saunders; Stephen Palmstrom; Tadpole Collective - Kevin Cristiano; 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 - Pengyi Zhang; Andrew Thompson; Artful Robot - Rich Lott; Australian
Greens - Andrew Cormick-Dockery, John Twyman; Bastien Ho; Blackfly Solutions -
Alan Dixon; Carlos Capote; CompuCorp - Jamie Novick; DevApp - Adam Kwiatkowski;
Francesc Bassas i Bullich; Freeform Solutions - Herb van den Dool; Greenpeace
Central and Eastern Europe - Patrick Figel; Irene Meisel; JMA Consulting - Joe
Murray; Korlon - Stuart Gaston; Nicol Wistreich; Rar9; Ray Wright; Semper IT -
Karin Gerritsen; Third Sector Design - Michael McAndrew
## <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`.