### Core CiviCRM
-- **Implement more nuanced 'Administer CiviCRM permisions
+- **Implement more nuanced "Administer CiviCRM" permisions
([16482](https://github.com/civicrm/civicrm-core/pull/16482) and
[18671](https://github.com/civicrm/civicrm-core/pull/18671))**
- Breaks the "Administer CiviCRM" permission into two separate permissions:
- 'administer CiviCRM system' and 'administer CiviCRM data'.
+ Actions that required the "Administer CiviCRM" permission now require one of
+ two separate permissions: "administer CiviCRM system" and "administer CiviCRM
+ data". The "Administer CiviCRM" permission still exists, and users having it
+ are treated as implicitly having both of the new permissions.
+
+ However, it is now possible to grant permission to configure profiles,
+ scheduled reminders, and set admin-only price options independently of
+ granting permission to configure scheduled jobs, install extensions, and view
+ the system check. An organization might grant the former to senior staff and
+ the latter to technical staff.
- **Buttonrama ([18410](https://github.com/civicrm/civicrm-core/pull/18410) and
[307](https://github.com/civicrm/civicrm-packages/pull/307))**
- Improves appearance of buttons with icons and makes buttons look and feel more
- consistent.
+ This ensures icons and text within buttons are aligned vertically, and it
+ makes form buttons appear consistent with links that are rendered to appear
+ like buttons.
+
+ Specifically, most buttons are now `<button>` elements rather than `<input
+ type="button">`, and button styling now applies to the button itself rather
+ than a wrapper. Extension and theme developers should confirm that CSS and
+ DOM selectors accurately identify the intended button elements.
- **Custom field form reform
([18419](https://github.com/civicrm/civicrm-core/pull/18419))**
- Improves the admin form for creating/updating custom fields by improving
- validation, making defaults easier to select and allowing more flexibility
+ This improves the form for creating or updating custom fields by improving
+ validation, making defaults easier to select, and allowing more flexibility
around changing the widget type.
- **Add higher-level support for "bundles" and "collections" of resources
([18247](https://github.com/civicrm/civicrm-core/pull/18247))**
- Adds support for "Resource Bundles" and "Resource Collections" to make it
- easier for developers to add groups of files to a page or form.
-
-- **Bootstrap3 CSS (Work towards
- [dev/user-interface#27](https://lab.civicrm.org/dev/user-interface/-/issues/27):
- [18354](https://github.com/civicrm/civicrm-core/pull/18354))**
-
- Makes it easier for extension developers to work with Bootstrap3 by making it
- available as a "Resource Bundle".
+ "Resources" refers to CSS, Javascript, and DOM variables that developers can
+ add to certain pages. These can now be bundled together to reduce redundant
+ code and can be modified with the new `hook_civicrm_alterBundle()`.
-- **Add select2-bootstrap to greenwich theme
- ([18579](https://github.com/civicrm/civicrm-core/pull/18579))**
+ The core styles and other resources are now included as bundles, allowing them
+ to be modified in a standard way.
- Improves styling of select2s when using the greenwich theme.
+ In addition, page regions, bundles, and (to some extent) page resources are
+ now treated as "collections" which share a common interface for adding and
+ retrieving individual resources.
-- **Afform GUI: add bootstrap3
- ([18583](https://github.com/civicrm/civicrm-core/pull/18583))**
+- **Bootstrap3 CSS
+ ([dev/user-interface#27](https://lab.civicrm.org/dev/user-interface/-/issues/27):
+ [18354](https://github.com/civicrm/civicrm-core/pull/18354),
+ [18465](https://github.com/civicrm/civicrm-core/pull/18465),
+ [18550](https://github.com/civicrm/civicrm-core/pull/18550),
+ [18583](https://github.com/civicrm/civicrm-core/pull/18583), and
+ [18579](https://github.com/civicrm/civicrm-core/pull/18579))**
- Improves styling of the Afform extension.
+ CiviCRM introduced a theming system several years ago, but the existing look
+ and feel was left as a "default", with the *de facto* theming code spread
+ throughout the application. The new themes have generally used Bootstrap 3 as
+ a user interface framework.
-- **Add bootstrap bundle to search
- ([18550](https://github.com/civicrm/civicrm-core/pull/18550))**
+ A handful of new CiviCRM features have been developed that depend on Bootstrap
+ 3 for core functionality or at least for basic look and feel. Sites lacking a
+ newer theme need a way to load at least a minimal set of Bootstrap 3 code for
+ these features to be functional and attractive.
- Improves styling of the search kit extension.
+ This change introduces a new CiviCRM theme extension, named "Greenwich", that
+ is enabled and hidden by default for all sites. It provides Bootstrap 3 when
+ needed. In addition, it can serve as a vehicle for moving theming code out of
+ core.
- **APIv4 Search: Improve GROUP_CONCAT with :label prefix
([18572](https://github.com/civicrm/civicrm-core/pull/18572))**
- Improves the Search UI by exposing the DISTINCT modifier and fixing currency
- formatting.
-
-- **Search extension: edit smart groups
- ([18431](https://github.com/civicrm/civicrm-core/pull/18431))**
-
- Allows the search extension to edit smart groups.
+ This improves the Search UI by exposing the DISTINCT modifier and fixing
+ currency formatting.
- **Search ext: rename to Search Kit, mark as beta
([18672](https://github.com/civicrm/civicrm-core/pull/18672))**
- Makes "Search Kit" beta1 extension available for installation for all users.
+ An extension to replace the search user interface has been included, but
+ hidden, in CiviCRM for several months. Named Search Kit, it is now available
+ to be enabled for sites.
+
+- **Search extension: edit smart groups
+ ([18431](https://github.com/civicrm/civicrm-core/pull/18431))**
+
+ Search Kit can now edit smart groups. When installed, the "edit smart group
+ criteria" link will open the classic search forms or Search Kit as
+ appropriate.
- **Search ext: support complex joins & HAVING clause in api4 smart groups
([18644](https://github.com/civicrm/civicrm-core/pull/18644))**
- **Select field fixes for screen reader
([17675](https://github.com/civicrm/civicrm-core/pull/17675))**
- Improves user experience when using a screen reader by having the place holder
- text for select2's include the entity name. Screen readers do not read labels
- for select2's so having more explicit instruction in the placeholder (which is
- read) improves usability for these users.
+ The placeholder text for select drop-down fields now reflects the field label.
+ The Select2 widget makes it difficult for screen readers to identify the
+ field's label, so this helps identify the field for users who rely on screen
+ readers.
- **Add modified_date to list of activity tokens
([18611](https://github.com/civicrm/civicrm-core/pull/18611))**
Adds an "Execute Now" button to the Job log to make it easier to rerun a
scheduled job if needed.
-- **Proposal - add ability to segment query logs
- ([dev/core#2032](https://lab.civicrm.org/dev/core/-/issues/2032):
- [18471](https://github.com/civicrm/civicrm-core/pull/18471) and
- [309](https://github.com/civicrm/civicrm-packages/pull/309))**
-
- Creates an option to redirect sql logging output to a new file.
-
- **Send email to contacts when clicking on their email address on the contact's
card ([dev/core#1790](https://lab.civicrm.org/dev/core/-/issues/1790):
[18623](https://github.com/civicrm/civicrm-core/pull/18623))**
Improves the contact card by making the email a link which takes the user to a
- form to send an email to that contact.
-
-- **Add custom field groups to Membership Contribution Detail report
- ([dev/report#49](https://lab.civicrm.org/dev/report/-/issues/49):
- [18420](https://github.com/civicrm/civicrm-core/pull/18420))**
-
- Adds contact custom fields to the Membership Contribution Detail report.
+ form to send an email to that contact.
- **Ability to Search Smart or Normal Group using additional filter on Manage
Group page ([dev/report#45](https://lab.civicrm.org/dev/report/-/issues/45):
Adds the ability to edit the subject and cc fields when emailing an invoice
from a contribution.
+- **Add ability to segment query logs
+ ([dev/core#2032](https://lab.civicrm.org/dev/core/-/issues/2032):
+ [18471](https://github.com/civicrm/civicrm-core/pull/18471) and
+ [309](https://github.com/civicrm/civicrm-packages/pull/309))**
+
+ SQL queries can be sent to a debugging log when the `CIVICRM_DEBUG_LOG_QUERY`
+ environment variable is set. Now, the value of that variable can specify a
+ file name for the log.
+
### CiviContribute
- **Move ACls on LineItem create to financialacls core extension
[dev/financial#143](https://lab.civicrm.org/dev/financial/-/issues/143):
[18350](https://github.com/civicrm/civicrm-core/pull/18350))**
- Converts PaypalPro to use Guzzle in order to bring it in under unit testing.
+ The PayPal Pro payment processor integration now uses the Guzzle library for
+ HTTP requests. This improves consistency and allows for unit testing of the
+ request handling.
- **Migrate Eway(Single Currency) Payment Processor Type out into its own
extension ([18349](https://github.com/civicrm/civicrm-core/pull/18349))**
- Moves the Eway processor to its own extension.
+ The Eway payment processor is now a separate extension, albeit shipped with
+ core.
- **Make 'Record Payment' & 'Record Refund' visible regardless of whether the
balance 'requires' one
Makes it so the "Record Payment" and "Record Refund" links on Contributions
are always visible.
-- **Propose altering the default of send notification to contributor checkbox on
- cancel or edit recurring to off
+- **Alter the default of send notification to contributor checkbox on cancel or
+ edit recurring to off
([dev/core#1986](https://lab.civicrm.org/dev/core/-/issues/1986):
[18537](https://github.com/civicrm/civicrm-core/pull/18537))**
- When canceling or editing a recurring donation, changes the send notification
- default to off.
+ The "notify contributor" checkbox on the form to cancel or edit a recurring
+ donation is now unchecked by default.
- **PCP action links support for hook_civicrm_links
([dev/core#2061](https://lab.civicrm.org/dev/core/-/issues/2061):
[18570](https://github.com/civicrm/civicrm-core/pull/18570))**
- Ensures `hook_civicrm_links` can be used by extension developers for PCP
- actions.
+ This allows `hook_civicrm_links` to be used by extension developers to modify the
+ list of actions offered to personal campaign page creators.
- **Add Line Item v4 API
([dev/core#1980](https://lab.civicrm.org/dev/core/-/issues/1980):
[18388](https://github.com/civicrm/civicrm-core/pull/18388) and
[18352](https://github.com/civicrm/civicrm-core/pull/18352))**
- Adds the "Line Item" entity to v4 API.
+ Adds the "Line Item" entity to APIv4.
- **Improve metadata on LineItem DAO
([18521](https://github.com/civicrm/civicrm-core/pull/18521))**
- **Add options to Mail Account settings to improve inbound mail processing
([18624](https://github.com/civicrm/civicrm-core/pull/18624))**
- Adds fields to the Mail Account settings form to improve inbound email
- processing, specifically the following check boxes:
+ Two new options are added to the Mail Account settings form to improve inbound
+ email processing:
1. 'Skip emails which do not have a Case ID or Case token'
2. 'Do not create new contacts when filing emails'
Improves messaging to end user on Opt Out and Unsubscribe pages.
+### CiviMember
+
+- **Add custom field groups to Membership Contribution Detail report
+ ([dev/report#49](https://lab.civicrm.org/dev/report/-/issues/49):
+ [18420](https://github.com/civicrm/civicrm-core/pull/18420))**
+
+ Contact custom fields are now available on the Membership Contribution Detail
+ report.
+
### Drupal Integration
+- **Drupal 9 deprecations
+ ([dev/drupal#138](https://lab.civicrm.org/dev/drupal/-/issues/138):
+ [18461](https://github.com/civicrm/civicrm-core/pull/18461))**
+
+ Drupal now allows for smooth upgrades between major versions by gradually
+ introducing new API functions and deprecating others through the cycle of a
+ major version. A new major version starts by simply removing deprecated
+ function from the latest release of the prior major version.
+
+ This removes the use of a number of functions that have been deprecated since
+ Drupal 8.5 and are removed in Drupal 9. The result is that CiviCRM 5.31 is no
+ longer compatible with Drupal versions prior to 8.5 but is compatible with
+ Drupal 9.
+
- **Finish allowing use of SSL to connect to database
(Work Towards [dev/core#1926](https://lab.civicrm.org/dev/core/-/issues/1926):
[18264](https://github.com/civicrm/civicrm-core/pull/18264))**
- Makes it so if the CMS config is using ssl for mysql then it autodetects the
- ssl config for the --db parameter.
+ The setup screen now attempts to identify if the Drupal database connection
+ uses SSL and fills the configuration options to match.
- **drush civicrm-ext-list add ext's status filter and show version number
([597](https://github.com/civicrm/civicrm-drupal/pull/597))**
Extends the drush command `drush civicrm-ext-list` so that users can:
+
- Filter by the extension's status (installed, uninstalled, disabled)
- Show the extension version number in the result list
- Use the `--out` option to print results as json or as a pretty table
### Core CiviCRM
-- **View Payment owned by Different contact on Membership and Participant View.
- ([dev/report#48](https://lab.civicrm.org/dev/report/-/issues/48):
- [18281](https://github.com/civicrm/civicrm-core/pull/18281))**
-
- Ensures that when viewing a Membership or Participant with a related payment
- from a different contact that payment is displayed.
-
- **Public contribution form and Checksums: billing information not loaded if
using multiple processors
- ([18642](https://github.com/civicrm/civicrm-core/pull/18642))**
+ ([dev/core#334](https://lab.civicrm.org/dev/core/-/issues/334):
+ [18642](https://github.com/civicrm/civicrm-core/pull/18642))**
- Changes the default attributes for new custom value tables to be dependent on
- the current in use collation to prevent issues using multiple payment
- processors on front end contribution forms.
+ Custom data tables for contacts are now created with the charset and collation
+ to match the `civicrm_contact` table.
+
+ This resolves a bug when the billing information is not filled when visiting a
+ contribution page with multiple payment processors via a checksum link.
- **Deadlocks on acl_cache
(Work Towards [dev/core#1486](https://lab.civicrm.org/dev/core/-/issues/1486):
Removes foreign keys from the ACL cache tables as they are likely to
hinder performance.
-- **Proposal apiv4 - revisit required parameters on location entities
+- **APIv4 - revisit required parameters on location entities
([dev/core#2044](https://lab.civicrm.org/dev/core/-/issues/2044):
[18575](https://github.com/civicrm/civicrm-core/pull/18575))**
- **Rebuild triggers after utf8mb4 conversion
([18751](https://github.com/civicrm/civicrm-core/pull/18751))**
- Ensures that when the `system.utf8conversion` api call is run the triggers for
- relationship_cache are updated to use the right encoding.
+ When the `System.utf8conversion` API call is run, this ensures that the
+ triggers for relationship_cache are updated to use the right encoding.
- **Remove explicit COLLATE utf8_bin from RelationshipCache trigger
([18721](https://github.com/civicrm/civicrm-core/pull/18721))**
Ensure that relationship types can be edited after switching to utf8mb4.
-- **Fix way of identityfing custom serialized fields
+- **Fix way of identifying custom serialized fields
([18360](https://github.com/civicrm/civicrm-core/pull/18360))**
Removes references to field types that no longer exist, specifically the
Fixes help text when an option group is saved to show the title of the option
group instead of the name.
-- **Update civicrm_handler_field_contact_image.inc
- ([625](https://github.com/civicrm/civicrm-drupal/pull/625))**
-
- Fixes a notice.
-
-- **Update civicrm_handler_field_pseudo_constant.inc
- ([626](https://github.com/civicrm/civicrm-drupal/pull/626))**
-
- Fixes a notice.
-
- **Export fix on long custom fields
([18146](https://github.com/civicrm/civicrm-core/pull/18146))**
+ This resolves problems exporting custom fields that have long option values.
+
- **Contact form task delete php spelling fix
([18399](https://github.com/civicrm/civicrm-core/pull/18399))**
([dev/translation#54](https://lab.civicrm.org/dev/translation/-/issues/54):
[18690](https://github.com/civicrm/civicrm-core/pull/18690))**
-- **Contact Dashboard does not show Event Participations for non-admins
- ([dev/event#43](https://lab.civicrm.org/dev/event/-/issues/43):
- [18758](https://github.com/civicrm/civicrm-core/pull/18758))**
-
- **Error when viewing contact merged to permanently deleted contact
([dev/core#1838](https://lab.civicrm.org/dev/core/-/issues/1838):
[18564](https://github.com/civicrm/civicrm-core/pull/18564))**
+ When one contact is merged to another contact, the first contact remains in
+ the trash and refers to the second. However, there was a bug preventing that
+ first contact from being viewed if the second contact was deleted permanently.
+
- **E_WARNING when editing custom field with trigger-based logging turned on
([dev/core#1989](https://lab.civicrm.org/dev/core/-/issues/1989):
[18386](https://github.com/civicrm/civicrm-core/pull/18386))**
([dev/core#2027](https://lab.civicrm.org/dev/core/-/issues/2027):
[18470](https://github.com/civicrm/civicrm-core/pull/18470))**
-- **Dropdown for country seems to have reverted to a regular select instead of
- select2 ([dev/core#2030](https://lab.civicrm.org/dev/core/-/issues/2030):
- [18533](https://github.com/civicrm/civicrm-core/pull/18533))**
-
- **Multiple email activity cc recipients get scrunched together in recorded
activity details field
([dev/core#2040](https://lab.civicrm.org/dev/core/-/issues/2040):
- **Fix cache bypass
([18643](https://github.com/civicrm/civicrm-core/pull/18643))**
-- **Enotice fix ([18620](https://github.com/civicrm/civicrm-core/pull/18620))**
-
- **Fix bug in primary handling where TRUE rather than 1 used
([18598](https://github.com/civicrm/civicrm-core/pull/18598))**
-- **Enotice fix ([18707](https://github.com/civicrm/civicrm-core/pull/18707))**
-
- **Greenwich - fix conflict btw bootstrap & jQuery UI button
([18696](https://github.com/civicrm/civicrm-core/pull/18696))**
[18717](https://github.com/civicrm/civicrm-core/pull/18717) and
[18716](https://github.com/civicrm/civicrm-core/pull/18716))**
+ This affects all PDF letters.
+
### CiviCampaign
- **Fix default report permissions when creating reports from CiviCampaign
### CiviContribute
+- **View Payment owned by Different contact on Membership and Participant View.
+ ([dev/report#48](https://lab.civicrm.org/dev/report/-/issues/48):
+ [18281](https://github.com/civicrm/civicrm-core/pull/18281))**
+
+ This ensures that related payments are displayed when viewing a Membership or
+ Participant even if they come from a different contact.
+
+- **Dropdown for country seems to have reverted to a regular select instead of
+ select2 ([dev/core#2030](https://lab.civicrm.org/dev/core/-/issues/2030):
+ [18533](https://github.com/civicrm/civicrm-core/pull/18533))**
+
+ This resolves a bug in the display of the Country field in the billing address
+ section of a contribution page.
+
- **Fix formatLocaleNumericRoundedByCurrency
([18409](https://github.com/civicrm/civicrm-core/pull/18409))**
([dev/core#1994](https://lab.civicrm.org/dev/core/-/issues/1994):
[18340](https://github.com/civicrm/civicrm-core/pull/18340))**
- Standardizes LineItem pre hook.
+ This resolves a bug in the entity ID sent to `hook_civicrm_pre` when editing
+ line items.
- **Performance - do not retrieve soft credits & pcps when not required
([dev/core#2056](https://lab.civicrm.org/dev/core/-/issues/2056):
### CiviEvent
+- **Contact Dashboard does not show event registrations for non-admins
+ ([dev/event#43](https://lab.civicrm.org/dev/event/-/issues/43):
+ [18758](https://github.com/civicrm/civicrm-core/pull/18758))**
+
- **Set participant status notification to false by default
([18544](https://github.com/civicrm/civicrm-core/pull/18544))**
- Sets the participant status notification checkbox to false by default to avoid
- accidental notification emails being sent.
+ The "Send Notification" checkbox is now always unchecked when editing a participant's status. Previously it would be checked by default when changing a status to "Cancelled" or from "Waitlist" or "Pending waitlist".
- **ParticipantListing Report: only display the View link for web, unhardcode
others ([18704](https://github.com/civicrm/civicrm-core/pull/18704))**
### CiviMember
-- **Proposal on Membership Renewal form re 'fixMembershipBeforeRenew'
+- **Membership Renewal form re 'fixMembershipBeforeRenew'
([dev/membership#27](https://lab.civicrm.org/dev/membership/-/issues/27):
[18621](https://github.com/civicrm/civicrm-core/pull/18621))**
- Moves the updating of any expired memberships from after the Membership
- Renewal form is submitted to when it is loaded resulting in an accurate
- status showing on the form.
+ The status of an existing membership is now recalculated prior to loading the
+ renewal form. This allows an accurate status to be displayed and used for
+ calculating renewal dates.
- **Bug When Restoring Overridden Status on Related Memberships
([dev/core#1854](https://lab.civicrm.org/dev/core/-/issues/1854):
- **Make symfony aliased services public
([18443](https://github.com/civicrm/civicrm-core/pull/18443))**
- Fixes a warning "The "cache.short" service is private, getting it from the
- container is deprecated since Symfony 3.2 and will fail in 4.0. You should
- either make the service public, or stop using the container directly and use
- dependency injection instead. - File:
- ...\vendor\symfony\dependency-injection\Container.php - Line: 282" on the
- extensions form for Drupal 8 sites.
+ Fixes a warning on the extensions form for Drupal 8 sites.
- **Tarball includes a symlink that goes nowhere, which causes alternate drupal
install method to fail
Ensures that CiviCRM in multilingual mode respects the Drupal language.
-- **Drupal 9 deprecations
- ([dev/drupal#138](https://lab.civicrm.org/dev/drupal/-/issues/138):
- [18461](https://github.com/civicrm/civicrm-core/pull/18461))**
-
- Ensures CiviCRM plays nice with Drupal 9.
-
- **Do not block user incase 'Require approval' is checked
([18329](https://github.com/civicrm/civicrm-core/pull/18329))**
- **Fix customGroup getTableNameByEntityName to recognize all entities
([18546](https://github.com/civicrm/civicrm-core/pull/18546))**
- Ensures that all entities are recognized by webform integration.
+ This ensures that all entities are recognized by Webform integration.
- **Custom field values not showing in Drupal 7 Views filter
([dev/core#1929](https://lab.civicrm.org/dev/core/-/issues/1929):
membership types
([18427](https://github.com/civicrm/civicrm-core/pull/18427))**
-- **Greenwich: Add BootstrapCSS support via core extension
- ([18465](https://github.com/civicrm/civicrm-core/pull/18465))**
-
- **Fix civi version for greenwich
([18542](https://github.com/civicrm/civicrm-core/pull/18542))**
- **[NFC] Enable APIv4 testing on the Fin ACL Extension Line Item test
([18478](https://github.com/civicrm/civicrm-core/pull/18478))**
+- **Enotice fix ([18620](https://github.com/civicrm/civicrm-core/pull/18620))**
+
+- **Enotice fix ([18707](https://github.com/civicrm/civicrm-core/pull/18707))**
+
+- **Update civicrm_handler_field_contact_image.inc
+ ([625](https://github.com/civicrm/civicrm-drupal/pull/625))**
+
+ Fixes a notice.
+
+- **Update civicrm_handler_field_pseudo_constant.inc
+ ([626](https://github.com/civicrm/civicrm-drupal/pull/626))**
+
+ Fixes a notice.
+
## <a name="credits"></a>Credits
This release was developed by the following code authors: