# CiviCRM 5.47.0
Released March 4, 2022
- **[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? | no |
| **Introduce features?** | **yes** |
| **Fix bugs?** | **yes** |
## <a name="features"></a>Features
### Core CiviCRM
- **Add created_date & modified_date to civicrm_relationship
Adds created_date & modified_date to the civicrm_relationship table.
- **Add option to display money tokens without formatting
Adds an option to display money tokens without formatting.
- **SearchKit - Improve field/operator/value selection UI
Improves the SearchKit UI for selecting field/operator/value conditions.
Affects various parts of the UI, like css conditions, link conditions,
where/on/having clauses, etc.
- **SearchKit - Support operators in conditional css rules
Allows operators other than = in SearchKit conditional style rules.
- **SearchKit - Allow Smarty in field rewrite
Gives the ability to use Smarty syntax in the "rewrite" of SearchKit displays.
- **SearchKit: Relationship Description unavailable
Exposes relationship description, created/modified_date & permissions fields
- **SearchKit - add/remove tags action for all taggable entities
Adds a new angular-based action to SearchKit for bulk adding/removing tags
from contacts, cases, activities, etc.
- **SearchKit - Support conditional links
Adds an advanced feature to conditionally show/hide links in a
links/buttons/menu column, based on user permissions or row values.
- **SearchKit - Update operator labels
Updates SearchKit labels to hopefully better describe ReGex.
- **SearchKit - Enable joins for custom fields and option groups
Enables SearchKit to join custom groups to custom fields, and option groups to
- **APIv4 - Add SubscriptionHistory entity
Adds a SubscriptionHistory entity to APIv4.
- **APIv4 - Make Permission 'group' discoverable in API Explorer
Makes `group` options for the `Permission` API discoverable.
- **Improve field accessibility in legacycustomsearches
Improves accessibility of legacy custom searches.
- **Expose a REST end-point through standard routing (Work Towards
Makes 'civicrm/ajax/rest' interoperable with 'extern/rest.php' parameters and
adds an AuthX configuration screen.
- **Define more usable queue DX for multithreaded background work (Work Towards
Adds a high-level queue tracking table and updates the programmatic APIs to
make it easier to work with persistent queues.
- **Civi::pipe - Add support for background worker-processes with JSON pipes
Add an entry-point for external scripts to send multiple API calls to a
CiviCRM worker-process - while only bootstrapping one time.
- **Expose email on hold as filter for reports (Work towards
Exposes email on hold as filter on contribution reports.
- **Extensions - Add dependency status check
Adds a system status check to ensure extension dependencies are met, and warn
the admin of missing dependencies.
- **Add metadata so Activity Created Date is available in Form Builder
Makes the Activity Created date available in Form Builder.
- **Move permission access handling for
civicrm/admin/financial/financialType?reset=1 to extension
Moves permission access handling for
civicrm/admin/financial/financialType?reset=1 to extension.
- **Add setting "format_locale"
Adds a new setting, "Formatting Locale", which specifies that dates and
numbers should formatted according to designated localization rules.
This setting may be useful for a locale (eg `en_NZ`) whose language closely
resembles another (eg `en_US`) but which has a different currency.
- **Why are unique labels for price fields required?
Makes it so duplicate price field labels are allowed.
- **Use tokens in offline contribution receipt (new installs)
Use tokens instead of Smarty Variables in the offline contribution receipt
template for new installs.
- **Event Registration: allow default Price Set values from the URL
Makes it so one can set the default price field on event registration forms
using URL parameters.
- **Account for time zone on event registration pages
Adds timezone support for events.
- **updating misleading labels on buttons to confirmation pages
Changes the event registration button text based on if there are additional
- **CiviGrant - Use SearchKit for contact summary tab
switches the Grants tab on the contact summary page to use a SearchKit Display.
It looks nearly identical before and after, but is now easily customizable via
the SearchKit & Form-Builder GUI.
- **Migrate CiviGrant component to an extension
Moves the CiviGrant component to an extension.
- **Start phasing out 'preferred_mail_format' (Work towards
Generates text version of message at send time if one is not present.
### WordPress Integration
- **wp-cli/civicrm.php - Add 'civicrm pipe' subcommand
Adds support for subcommand `wp civicrm pipe`.
## <a name="bugs"></a>Bugs resolved
### Core CiviCRM
- **Only format Smarty aliases as money if specified
- **Avoid PHP notices on activity form
- **Fix typo preventing uninstalling ckeditor4
- **Fix return values for APIv3 Job.delete
- **enforce required fields on Contact.duplicatecheck
- **APIv4 SortableEntity - Fix sorting custom fields with option groups
- **APIv4 - Correctly return date-only custom field values without the time
- **APIv4 - Use empty string instead of 'null' to pass null values to the db
- **APIv4 - Fix incorrect placement of decodeRows in loop
- **SearchKit: In-place edit for custom dropdown field - can't blank it out
- **Minor SearchKit UI filtering annoyance
- **SearchKit - Fix selecting operators and values in clauses
- **SearchKit - Refresh contents after saving a popup when in a block/tab
- **Don't throw PHP notice when rendering dedupefind template.
- **Enotice fixes with datepicker
- **Enotice fix with priceset template
- **Enotice fixes
- **Enotice fix
- **Enotice fixes
- **CustomGroup - Ensure 'name' is always unique
- **Another set of PHPdoc corrections
- **Fix batch summary to use the api
- **Fix Smarty notices in footer files
- **Remove use of .font-size11pt and .font-size12pt
- **Don't pass redundent empty strings when instantiating
- **Fix call to log method warn (should be warning)
- **tpl notices and docblocks
- **Ensure assigned Smarty array has empty keys (not no keys)
- **Stop calling hook twice
- **Activity Details field on batch update via profile has wrong fieldname
- **Re-fix enotice on searchType to work with default modifiers
- **Unable to add new custom field set or new fields (to existing field set)
after enabling multilingual setting.
- **System.check permissions changed in Civi 5.46
Fixes the dedupe check to not require elevated permissions.
- **Search Builder crashes if you have admin access and CiviGrant is not enabled
- **CiviGrant info.xml update missing from 5.47 and
CRM_Utils_VersioncheckTest::testGetSiteStats should have been failing for a
- **Regression - fatal error when viewing custom fields with money > 1000
- **Fix broken function reference
- **Use rolling window for translating 2-digit years into 4-digit years
Fixes outdated hard-coded import logic: translates 2-digit years to 4 using
rolling -95yr to +5yr window
- **Rationalise relationship validation
- **Stop calling confusing function that doesn't do much .....
- **Navigation - Make required fields NOT NULL
- **Fight back against copy & paste gone wild
- **'CiviCampaign: access CiviCampaign' permission missing
- **CiviCase - Denote `created_date` as readonly
- **Remove category from case activity template
Remove category from case activity template to fix e-notices.
- **Fix ContributionRecur.payment_processor_id pseudoconstant
- **Manage Contribution page, the link to "Online Contribution (Test-drive)" is
an admin-only URL to register in the backend, should be a frontend URL
- **Avoid PHP notice on 'Manage Contribution Pages' screen
- **PCP is still active after contribution page is disabled.
- **don't allow multiple currencies in a batch
- **Foreign constraint violation on APIv3 contribution create if
financial_type_id is numeric
- **Error cancelling a contribution if CiviPledge is disabled
- **Import of contribution fails when invalid campaign ID is provided
- **Simplify getting contact_id from recurring contribution when generating
- **Fix Fatal Error on contribution tab and user dashboard when recurring
payment generated using extension get disabled
- **CiviCRM Event, the link to "On-line Registration (Test Drive)" is an
admin-only URL to register in the backend, should be a frontend URL
- **Set default values to avoid notices when rendering (event templates screen)
- **Fix Grant::retrieve to meet full phpcs standard
- **CiviGrant - Fix installation of dependencies during upgrade
- **CiviGrant - Menu appears twice
- **CiviGrant - Don't return grant fields as contact fields
- **CiviGrant - Declare API permissions
- **Editing a mailing triggers two autosaves instead of one
- **MailingEventQueue - Use consistent CamelCaseName. Prevent conflicts.
- **add `contact_id` to email params in `emailLetter` function
- **Fix syntax error in CRM_Mailing_Event_BAO_Reply
- **Smarty notice fix on Email help
- **Fix spelling mistake in function name, addMembershipToRealtedContacts should
- **Fix Smarty notices in membership dashboard
- **Don't default membership type create to inactive
### WordPress Integration
- **404 Error when I use the APIv4 with WordPress Multisite -> because no "do
not delete" post was generated for the subsite
## <a name="misc"></a>Miscellany
- **Move permission checks from Query & BAO to financialacl extension
- **Add billingStateProvince and standardized property names
- **Extensions - Revise prose for status check
- **Add type to phpdoc comment for report statistic function
- **Update phpdoc references to $self to include type
- **Improve method phpdoc for CRM_Utils_System
- **Run 'full Drupal strictness' standard over api/v3/examples
- **Run stricter phpcs on Civi dir
- **Fixes to spaces from phpcs
- **Various phpdoc fixes
- **Clarify contents of ids for further fixes
- **Replace all isset checks on line.tax_rate
- **Move function to the class that 'owns' it
- **PHPCS standards on css....
- **More comments & style fixes
- **Re-run regen
- **Add consistency between checkTemplateFileExists functions,
- **Increase GroupContact:create deprecation
- **APIv4 - Docblock updates, mark BAO::create functions deprecated
- **DAO - Centralize logic to derive unique name from label
- **Pass remove-by-reference
- **Mark function as private
- **Stop returning unused parameters
- **Duplicate function from deprecated utils onto calling classes & remove
- **Fix phpdoc types for $_query in CRM_Core_Selector_Base subclasses
- **Correctly document types for class consts
- **Make phpType definitions in generated DAO objects more accurate.
- **Ensure all APIv3 functions have documented types
- **CRM_Core_Component (et al) - Deprecate unused functions
- **Move deprecated function back to the only class that calls it
- **Fix PHP comments
- **A whole bunch of phpdoc fixes
- **Another set of PHPDoc fixes
- **Fix more phpdoc comments in member links functions
- **Fix PHP comments
- **Merge function back into parent function
- **Simplify variables pass in & out of function
- **Clean up input and outputs
- **Tidy CRM_Report_Page_Options code
- **Refactor buildPremiumPreviewBlock function to make intended usage clearer
- **Fix class references in phpdoc comments
- **Contact BAO - Deprecate unused function
- **report cleanup - no functional change
- **Split View Relationship tpl ito own file
- **Fix inaccuracy in docblock for method calculateBaseScheduleDate
- **Resolve inaccuracies in CRM_Core_BAO_File::attachmentInfo docblock
- **Tidy up functions related to printing.
- **Do not pass in tablename
- **More phpcbs code cleanups
- **Resolve docblock inaccuracy in CRM_Contribute_Form_Task_TaskTrait
- **Contributor key: Add Ian Wilson
- **Bump follow-redirects from 1.11.0 to 1.14.7
- **Bump engine.io from 4.1.1 to 4.1.2
- **Bump ansi-regex from 5.0.0 to 5.0.1
- **Bump log4js from 6.3.0 to 6.4.1
- **Update composer.json for composer 2.2 allow-plugins
- **Follow up fn removal
- **Fully remove contactAB function
- **Remove support for deprecated key
- **Remove duplicate file
- **Remove obsolete scripts
- **Remove method getWordReplacement.
- **Remove unused variable
- **Remove some old scripts
- **Remove handling for impossible array
- **Remove obsolete postIPN script
- **Remove / deprecate case param handling
- **Remove useless function
- **Remove param default
- **Remove htmlFile validation rule, as it can't possibly work.
- **Remove broken script
- **Remove unreachable else
- **Remove & deprecate silly function
- **Remove always-true-if
- **Remove seemingly unreachable help text
- **Remove unused variable
- **Remove IF that only loops through one value
- **Remove if & foreach that no longer do anything
- **Remove call to PHP 4 function
- **Remove empty check
- **Remove unreachable, nonsensical code
- **Remove deprecated code
- **Remove check for contact_check as it is always an array here
- **Remove unreachable code
- **Remove unnecessary pass-by-ref
- **Remove always-true IF
- **Remove deprecated language construct
- **Remove isset from online contribution receipt
- **Remove unused invalidProfiles variable, and simplify template.
- **(REF) Switch to using new `CRM_Core_Component::isEnabled()`
- **(REF) Remove unused variable
- **(REF) Tidy up group.tpl
- **(REF) Switch OptionGroup BAO to use new centralized logic to make name from
- **(REF) Rename variable to be meaningful
- **(REF) Improve APIv4 save functions
- **(REF) CRM_Core_Resources - Limit visibility of `getEntityRefMetadata`
- **(REF) ContactUtils - Rename local variables
- **(REF) CoreResources - Simplify disabled component check
- **(REF) Remove constructors that do nothing
- **(REF) Extract function `CRM_Core_Component::isEnabled()`
- **(REF) SearchKit docblock cleanup
- **(REF) SearchKit - Function extraction
- **(REF) SearchKit - Simplify import/export popup code
- **(REF) Upgrade jQuery UI to 1.13.0
- **(REF) Components - Use extracted function
- **(REF) SavedSearch - Deprecate/remove redundant/unused functions
- **(REF) Use CRM_Contact_BAO_ContactType::basicTypes()
- **(REF) Remove unused _colours property
- **(REF) Tidy up formatting in gotv.tpl, remove extra </div>
- **(REF) Stop returning unused variables
- **(REF) Centralize BAO handling of custom data
- **(REF) Remove handling for no organization being passed
- **(REF) APIv4 - Rename trait 'SoftDelete' to 'SoftDeleteEntity'
- **(REF) Cleanup Contact BAO variables
- **(REF) Queues - Expand docblocks. Extract SQL trait.
- **(REF) APIv4 - Deprecate and stop using PreSaveSubscriber
- **(REF) CustomField Admin - Decouple page code from form code
- **(NFC) Fix typo in docblock
- **(NFC) Tidy up phpdoc in CRM_Utils_QueryFormatter
- **(NFC) Update test example template and regenerate examples
- **(NFC) Correct type hints for bad null default values
- **(NFC) Minor phpdoc fixes to
- **(NFC) CiviReport, etal - More phpdoc fixes
- **(NFC) Minor amends to getGroupByFromSelectColumns
- **(NFC) Correctly document CRM_Utils_Hook::pre to allow null ID
- **(NFC) Update PHPDoc for alterDeferredRevenueItems
- **(NFC) Comment fixes Stricter phpcs
- **(NFC) Remaining css phpcs fixes
- **(NFC) Fixes to the type definitions for contactType methods
- **(NFC) Civi::pipe - Swap various quotes
- **NFC: Clean up description for alterDisplayName hook
- **(NFC) Membership Tests - Update assertions to match behavior circa leap-day
- **(NFC) Update Contribution Recur DAO following regen
- **(NFC) RestTest - Skip testNotCMSUser_q when it's not supported
- **APIv4 - Fix test
- **Test cleanup - remove direct calls to BAO_Membership::add
- **Unit tests for 22429 and apply same treatment to other money format
- **Simplify APIv4 conformance test
- **Add unit test on updateGreeting & remove deprecated fn call
- **[test] - Add test coverage for adjusting custom group weights
- **Fix testMultipleMembershipsContribution to use order api
- **Port test form earlier PR
- **Test for APIv4 contact delete bug
## <a name="credits"></a>Credits
This release was developed by the following code authors:
AGH Strategies - Andie Hunt; Agileware - Francis Whittle, Justin Freeman;
BrightMinded Ltd - Bradley Taylor; Christian Wach; CiviCoop - Klaas Eikelboom;
CiviCRM - Coleman Watts, Tim Otten; CiviDesk - Yashodha Chaku; Coop SymbioTIC -
Mathieu Lutfy; Dave D; Freeform Solutions - Herb van den Dool; Jens Schuppe; JMA
Consulting - Seamus Lee; Joinery - Allen Shaw; Lemniscus - Noah Miller;
Megaphone Technology Consulting - Jon Goldberg; MJW Consulting - Matthew Wire;
PERORA SRL - Samuele Masetto; Registered Nurses' Association of Ontario - Ian
Wilson; Romain Thouvenin; Skvare - Sunil Pawar; Third Sector Design - Kurund
Jalmi; Wikimedia Foundation - Eileen McNaughton
Most authors also reviewed code for this release; in addition, the following
reviewers contributed their comments:
Andy Burns; Artful Robot - Rich Lott; Betty Dolfing; Blackfly Solutions - Alan
Dixon; Circle Interactive - Pradeep Nayak; CiviCoop - Jaap Jansma; Coop
SymbioTIC - Shane Bill; Fuzion - Luke Stewart; in2part; JMA Consulting - Joe
Murray, Monish Deb; Korlon - Stuart Gaston; Mikey O'Toole; Peter Boling; Tadpole
Collective - Kevin Cristiano; Wildsight - Lars Sanders-Green