# CiviCRM 5.15.0 Released July 3, 2019 - **[Synopsis](#synopsis)** - **[Features](#features)** - **[Bugs resolved](#bugs)** - **[Miscellany](#misc)** - **[Credits](#credits)** - **[Feedback](#feedback)** ## <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? | **yes** | | Introduce features? | **yes** | | Fix bugs? | **yes** | ## <a name="features"></a>Features ### Core CiviCRM - **Rearrange quick search options ([dev/core#628](https://lab.civicrm.org/dev/core/issues/628): [14441](https://github.com/civicrm/civicrm-core/pull/14441))** This change makes it so that the quicksearch field options can be rearranged. - **Improve formatting for settings checkboxes ([14461](https://github.com/civicrm/civicrm-core/pull/14461) and [14419](https://github.com/civicrm/civicrm-core/pull/14419))** Restyles the checkboxes on the "Display Preferences" screen so they all use the same styling for visual consistency and restyles the "Components" settings field as a checkbox list instead of it being an AdvMultiSelect element. - **Differentiate smart group from regular group using icon in select2 field (preliminary work for [dev/core#785](https://lab.civicrm.org/dev/core/issues/785): [14416](https://github.com/civicrm/civicrm-core/pull/14416))** Extends the addField() function to support fields of the type `select2` and `select`. - **Cleanup & api-ise the dedupe code (preliminary work for [dev/core#982](https://lab.civicrm.org/dev/core/issues/982): [14298](https://github.com/civicrm/civicrm-core/pull/14298))** Adds a `dedupe.getstatistics` API action. - **Add Contact.get_merge_conflicts API ([14394](https://github.com/civicrm/civicrm-core/pull/14394))** Adds a `contact.get_merge_conflicts` API action. - **Add API for Dedupe.getduplicates ([14411](https://github.com/civicrm/civicrm-core/pull/14411))** Adds a `dedupe.getduplicates` API action. - **Support latest PHPUnit versions ([dev/core#980](https://lab.civicrm.org/dev/core/issues/980): [14333](https://github.com/civicrm/civicrm-core/pull/14333), [14387](https://github.com/civicrm/civicrm-core/pull/14387), [14279](https://github.com/civicrm/civicrm-core/pull/14279), [14319](https://github.com/civicrm/civicrm-core/pull/14319), [14315](https://github.com/civicrm/civicrm-core/pull/14315), [14421](https://github.com/civicrm/civicrm-core/pull/14421), [14404](https://github.com/civicrm/civicrm-core/pull/14404), [254](https://github.com/civicrm/civicrm-packages/pull/254), [14283](https://github.com/civicrm/civicrm-core/pull/14283) and [14321](https://github.com/civicrm/civicrm-core/pull/14321))** Updates phpunit version support so that the CiviCRM test suite works with phpunit versions 5 thru 8. Removes dependency on discontinued dbunit. Moves towards using API functions instead of dbunit. - **Permit sort_name as a url parameter on advanced search ([14475](https://github.com/civicrm/civicrm-core/pull/14475))** Lays the ground work for a metadata based approach to search forms, Specifically for the contact form. Converts one field (sort_name) to be added by metadata and also to be supported via url (sort_name=x). - **Allow updating ENGINE_CONFIG for System.updatelogtables ([14348](https://github.com/civicrm/civicrm-core/pull/14348))** Makes it so users can modify the SQL engine config for log tables thru the api. - **Reduce cache bypasses - Do not bypass custom metadata cache in setGroupTree ([14292](https://github.com/civicrm/civicrm-core/pull/14292))** Improves performance when editing a form with custom data by using the cached metadata instead of doing a database query to rebuild the metadata. - **Try enabling api4 extension in test suite ([14241](https://github.com/civicrm/civicrm-core/pull/14241))** Makes the api4 extension available when running unit tests. - **Use data provider to test both API versions ([14153](https://github.com/civicrm/civicrm-core/pull/14153))** Makes it so 311 API v3 tests are converted to also test API v4. - **Advanced search: activity tags should use select2 ([ dev/core#924](https://lab.civicrm.org/dev/core/issues/924): [14247](https://github.com/civicrm/civicrm-core/pull/14247))** Changes the "Activity Tags" field on the "Advanced Search" form to be a select2 instead of a checkbox list to improve user experience. ## CiviContribute - **Better support in core for token payment processing (continues work for [dev/core#905](https://lab.civicrm.org/dev/core/issues/905): [14395](https://github.com/civicrm/civicrm-core/pull/14395) and [14343](https://github.com/civicrm/civicrm-core/pull/14343))** Separates the `contribution_recur` status_id option group from the `contribution` status_id option group and adds the contribution recur statuses 'Processing' and 'Failing'. - **Add cancel_reason field to civicrm_contribution_recur table ([dev/core#830](https://lab.civicrm.org/dev/core/issues/830): [13997](https://github.com/civicrm/civicrm-core/pull/13997))** Adds a `Cancellation Reason` field to the form to cancel recurring contributions. - **Add time start date and end date values on page contribution widget ajax response ([dev/core#964](https://lab.civicrm.org/dev/core/issues/964): [14262](https://github.com/civicrm/civicrm-core/pull/14262))** Makes campaign start and end dates available to the campaign widget on Contribution Pages so that one can customize the campaign widget with options such as "Starts in X days". - **Expose contribution page in Contribution Summary report ([dev/core#959](https://lab.civicrm.org/dev/core/issues/959): [14249](https://github.com/civicrm/civicrm-core/pull/14249))** Exposes the contribution page field in the "Contribution Summary" report. - **Add developer tab for summary report ([14254](https://github.com/civicrm/civicrm-core/pull/14254))** Adds a developer tab to the "Contribution Summary" report. - **Wrap titles in metadata in ts on payment.create API ([14450](https://github.com/civicrm/civicrm-core/pull/14450))** Improves the API v3 explorer for multilingual sites by translating the titles in the payment create API action. - **Translation in billingblock.tpl - dropping 'Information' ([14358](https://github.com/civicrm/civicrm-core/pull/14358))** Improves translation of the billing block on front facing contribution and event forms by removing the word Information from the title. ## CiviEvent - **WYSIWYG support for i18n event fields ([14384](https://github.com/civicrm/civicrm-core/pull/14384) and [14396](https://github.com/civicrm/civicrm-core/pull/14396))** Adds support for wysiwyg editor in i18n popup for event fields. ## Drupal Integration - **Pass the RFC 3164 severity level thru to drupal watchdog. ([14185](https://github.com/civicrm/civicrm-core/pull/14185))** Improves error logging for Drupal users by passing the severity level to drupal watchdog. Before this change all errors passed from CiviCRM to drupal watchdog were logged at the debug level now errors, warnings, notices, info, etc. can be logged as such. ## <a name="bugs"></a>Bugs resolved ### Core CiviCRM - **Fix Notice errors caused by l10n rewriting of query so query outputed create view rather than the create table ([dev/translation#26](https://lab.civicrm.org/dev/translation/issues/26): [14152](https://github.com/civicrm/civicrm-core/pull/14152))** Fixes a notice `Undefined property: CRM_Core_DAO::$Create_Table in CRM_Core_DAO::checkConstraintExists()..` when enabling a language in multilingual mode. - **File custom fields cause a fatal error when trying to merge ([dev/core#723](https://lab.civicrm.org/dev/core/issues/723): [14325](https://github.com/civicrm/civicrm-core/pull/14325))** Fixes a fatal error when trying to merge two contacts with the custom fields of type "file". - **Autogenerated .htaccess is for apache 2.2 ([dev/core#913](https://lab.civicrm.org/dev/core/issues/913): [14158](https://github.com/civicrm/civicrm-core/pull/14158))** Updates the auto-generated .htaccess so it no longer gives an internal error for sites on apache 2.4. - **Dedupe screen: single "flip" and multi-selected-flip have no effect ([dev/core#932](https://lab.civicrm.org/dev/core/issues/932): [14195](https://github.com/civicrm/civicrm-core/pull/14195))** Fixes the dedupe screen "flip selected duplicates" button so that it works as expected. - **$this can not be used in static methods ([dev/core#945](https://lab.civicrm.org/dev/core/issues/945): [14217](https://github.com/civicrm/civicrm-core/pull/14217))** Fixes "$this can not be used in static methods" error thrown by getIncompleteImportTables() in CRM/Contact/Import/ImportJob.php - **CiviCRM 5.13.4 - Specified key was too long; max key length is 767 bytes ([dev/core#978](https://lab.civicrm.org/dev/core/issues/978): [14363](https://github.com/civicrm/civicrm-core/pull/14363))** Fixes DB Error: `unknown error` if the system status check query fails. - **userFrameworkResourceURL gets wrong trailing slash on windows ([dev/core#985](https://lab.civicrm.org/dev/core/issues/985): [14405](https://github.com/civicrm/civicrm-core/pull/14405))** Fixes an issue where `addTrailingSlash` would generate a \ instead of a '/' on Windows. - **Can't set a non-breaking space as Thousands Separator in Administer > Localization settings ([dev/core#994](https://lab.civicrm.org/dev/core/issues/994): [14376](https://github.com/civicrm/civicrm-core/pull/14376))** Removes a form rule preventing location separators from having more than one character so that one can use a non-breaking space (or other string longer than one character). - **Add CRM_Utils_System::sendResponse(). Fix AssetBuilder's status-code on WP. ([14468](https://github.com/civicrm/civicrm-core/pull/14468))** Ensures that a consistent response is returned across CMS's in regards to Asset Builder URLs. Before this change Wordpress would return a different response then Drupal/Backdrop and E2E Unit tests would fail on Wordpress. - **Fix Exception API to save lower id number as contact 1 ([14448](https://github.com/civicrm/civicrm-core/pull/14448))** Improves consistency when deduping contacts. - **Fix Exception to remove result from duplicates ([14447](https://github.com/civicrm/civicrm-core/pull/14447))** Ensures that marking a non-duplicate contact removes them from the cached duplicates table. - **Fix upgrade on participant_register date ([14427](https://github.com/civicrm/civicrm-core/pull/14427))** Fixes conversion routing on participant register date when upgrading to 5.15. - **Misc translation 'ts' fixes ([14467](https://github.com/civicrm/civicrm-core/pull/14467))** Fixes a few places where `ts()` was used incorrectly so that is used correctly. - **Don't run search when editing smartgroup criteria ([14464](https://github.com/civicrm/civicrm-core/pull/14464))** Ensures that editing smart group criteria does not trigger a search on that smartgroup before the criteria can be viewed. - **Add angular-xeditable to angular ([14414](https://github.com/civicrm/civicrm-core/pull/14414))** Add angular xeditable component to our bower_components. - **crmRouteBinder - Remove params from url if they equal their defaults ([14211](https://github.com/civicrm/civicrm-core/pull/14211))** Ensures when a parameter is removed in the api4 explorer, it is also removed from the url. - **Remove wasteful double-caching of settings metadata ([14259](https://github.com/civicrm/civicrm-core/pull/14259))** Ensures that Settings metadata is cached once per domain and that `hook_civicrm_alterSettingsMetaData()` is invoked only once per domain. - **Remove CIVICRM_TEMP_FORCE_UTF8; deprecate TempTable::setUtf8() ([14004](https://github.com/civicrm/civicrm-core/pull/14004))** Continues work to phase out CIVICRM_TEMP_FORCE_UTF8. - **Stop overriding is_active default when saving new relationship ([14199](https://github.com/civicrm/civicrm-core/pull/14199))** Ensures that new relationships are saved as active by default. - **Enotice fix on creating a smart group ([14180](https://github.com/civicrm/civicrm-core/pull/14180))** Fixes an E-notice `Notice: Undefined index: component_mode in CRM_Contact_Form_Task_SaveSearch->PreProcess()` when creating a smart group. - **Ensure that the oldest creation date is preserved when deduping ([dev/core#996](https://lab.civicrm.org/dev/core/issues/996): [14368](https://github.com/civicrm/civicrm-core/pull/14368))** - **Recurring activities don't carry over custom data and tags ([CRM-21832](https://issues.civicrm.org/jira/browse/CRM-21832), [14183](https://github.com/civicrm/civicrm-core/pull/14183))** - **Disabling Alphabetical Pager is not respected for events and contribution pages. ([dev/core#705](https://lab.civicrm.org/dev/core/issues/705): [14203](https://github.com/civicrm/civicrm-core/pull/14203))** - **When creating relationship types don't munge names ([14216](https://github.com/civicrm/civicrm-core/pull/14216))** - **CRM_Extension_System - Only allow `test.*` extensions during headless testing. Hide from regular users. ([14392](https://github.com/civicrm/civicrm-core/pull/14392))** - **Fix name of cache key column to be all lower case rather than camel case in civicrm_prevnext_cache ([14359](https://github.com/civicrm/civicrm-core/pull/14359))** - **Don't apply api3 pre/post processing to api4 actions ([14357](https://github.com/civicrm/civicrm-core/pull/14357))** - **Fix fatal error when full group by mysql mode enabled & selecting contacts ([14331](https://github.com/civicrm/civicrm-core/pull/14331))** - **Caches - Normalize dependency on php-cache integration-tests ([14423](https://github.com/civicrm/civicrm-core/pull/14423))** - **Cache/IntegrationTests - Remove. This can be replaced by composer dependency ([255](https://github.com/civicrm/civicrm-packages/pull/255))** ## CiviCase - **Case report showing 1 result ([dev/core#743](https://lab.civicrm.org/dev/core/issues/743): [14082](https://github.com/civicrm/civicrm-core/pull/14082))** Fixes the Case Summary report so that it properly filters on case relationships. - **Set title properly on Move/Copy/File on Case popup ([14347](https://github.com/civicrm/civicrm-core/pull/14347))** Ensures when clicking "Move to Case"/"Copy to Case" from the Manage cases activity list the title is set correctly and stays set correctly instead of reverting to "File on Case". - **Manage Case search filter "Deleted Activities" no longer working ([dev/core#1022](https://lab.civicrm.org/dev/core/issues/1022): [14445](https://github.com/civicrm/civicrm-core/pull/14445))** Fixes the search filter "Deleted Activities" on the Manage Cases form. - **Closing a case gives a warning notice ([dev/core#896](https://lab.civicrm.org/dev/core/issues/896): [14160](https://github.com/civicrm/civicrm-core/pull/14160))** ## CiviContribute - **Bug in storing settings for CiviContribute component ([dev/financial#54](https://lab.civicrm.org/dev/financial/issues/54): [14267](https://github.com/civicrm/civicrm-core/pull/14267))** Ensures deferred revenue settings are respected. - **Changing financial type on a contribution records incorrect financial items ([dev/financial#56](https://lab.civicrm.org/dev/financial/issues/56): [14309](https://github.com/civicrm/civicrm-core/pull/14309))** Fixes a bug where changing the financial type on a contribution record would result in a sales tax row being added regardless of whether sales tax was turned on. - **Fix financial ACL permissions to respect check_permissions ([14118](https://github.com/civicrm/civicrm-core/pull/14118))** Fixes bug where `check_permissions=0` is ignored when doing contribution.get in conjunction with financial ACLs. - **Elavon payment processor seems to no longer accept url encoded emails ([dev/core#966](https://lab.civicrm.org/dev/core/issues/966): [14263](https://github.com/civicrm/civicrm-core/pull/14263))** Fixes payment processing for sites using an Elavon processor. - **Set new inactive statuses as 'Chargeback' does not exist on new installs and that breaks Contributionrecur.create API ([14398](https://github.com/civicrm/civicrm-core/pull/14398))** - **Fix inconsistent handling when searching contribution text fields ([14354](https://github.com/civicrm/civicrm-core/pull/14354))** - **Fix bug where contribution status is mishandled if label is changed ([14352](https://github.com/civicrm/civicrm-core/pull/14352))** ## CiviEvent - **Sorting participants ignored search values. ([dev/core#981](https://lab.civicrm.org/dev/core/issues/981): [14313](https://github.com/civicrm/civicrm-core/pull/14313))** Ensures when searching for participants for a specific event and then sorting the results the search parameters are respected, before this change all participants for all events would be displayed. - **Fix deprecation notice on manage events page ([14289](https://github.com/civicrm/civicrm-core/pull/14289))** Removes a `User deprecated function: Deprecated function CRM_Event_BAO_Event::CheckPermission` notice from the manage events page. - **Backoffice participant transfer form does not populate contact reference field ([dev/core#888](https://lab.civicrm.org/dev/core/issues/888): [14102](https://github.com/civicrm/civicrm-core/pull/14102))** ## CiviMail - **Deletion of SMS provider caused all scheduled reminders to fail to be sent (begins work for [dev/core#369](https://lab.civicrm.org/dev/core/issues/369): [14266](https://github.com/civicrm/civicrm-core/pull/14266))** Before this change if the Scheduled reminder job was triggered and there were active SMS scheduled reminders for which the SMS Provider has been deleted the job would fail with the message "Provider not known or not provided" and no scheduled reminders would go out this change makes it so that scheduled reminders for which a SMS Provider exists will go out even if there are some scheduled SMS reminders for which there is not an SMS Provider. - **E_NOTICE when creating bulk SMS ([dev/core#1023](https://lab.civicrm.org/dev/core/issues/1023): [14449](https://github.com/civicrm/civicrm-core/pull/14449))** Fixes E_NOTICE `Notice: Undefined index: Subject in civicrm_api3_mailing_preview()` when creating bulk SMS. - **"Confirm this subscription" URL generated by MailingEventSubscribe API should always be a front-end URL([dev/core#1005](https://lab.civicrm.org/dev/core/issues/1005): [14389](https://github.com/civicrm/civicrm-core/pull/14389))** Ensures that the "Confirm this subscription" URL included in bulk emails is always a front end URL. - **SMTP help text is misleading - references the wrong admin screen ([dev/core#879](https://lab.civicrm.org/dev/core/issues/879): [14329](https://github.com/civicrm/civicrm-core/pull/14329))** - **[Outbound mail admin form] fix some more notices resulting from recent change ([14433](https://github.com/civicrm/civicrm-core/pull/14433))** ## CiviPledge - **incorrect capitalization in default Pledges - Acknowledgement message template ([dev/core#1010](https://lab.civicrm.org/dev/core/issues/1010): [14465](https://github.com/civicrm/civicrm-core/pull/14465) and [14469](https://github.com/civicrm/civicrm-core/pull/14469))** Ensures that Pledge acknowledgments use correct capitalization and the `email_greeting`. - **correct syntax "IS NOT NULL" to get pledge payment count ([13374](https://github.com/civicrm/civicrm-core/pull/13374))** Ensures when editing a payment for a pledge the screen does not freeze because the API count returns 0. ## Drupal Integration - **incorrect Drupal 8 login URL ([dev/core#898]https://lab.civicrm.org/dev/core/issues/898(): [14138](https://github.com/civicrm/civicrm-core/pull/14138))** If you create a public contribution page on a Drupal 8 site, it will include a login link for unauthenticated users, with parameters ?destination=... to direct back to the contribution page after login. Fixes this link for recent Drupal versionsso it points to the right login url. - **Drupal8: Implement set UF locale/language (affects mailing tokens) ([dev/drupal#19](https://lab.civicrm.org/dev/drupal/issues/19): [14302](https://github.com/civicrm/civicrm-core/pull/14302) and [12152](https://github.com/civicrm/civicrm-core/pull/12152))** Fixes a 500 error when calling the REST API endpoint in Drupal 8 and fixes a bug when using Drupal 8 with a multilingual site where mailing token links were not taking the user to the page in the expected language. - **Drupal8/jquery ([dev/drupal#68](https://lab.civicrm.org/dev/drupal/issues/68): [14442](https://github.com/civicrm/civicrm-core/pull/14442))** Fixes a Javascript error if Drupal's jQuery is not loaded (when its not needed). - **Fix legacy IPN endpoint for Drupal ([dev/core#973](https://lab.civicrm.org/dev/core/issues/973): [14272](https://github.com/civicrm/civicrm-core/pull/14272))** Fixes a `PHP Fatal error: Uncaught Error: Call to undefined function variable_get()` error when bootstraping Drupal for Drupal sites collecting recurring PayPal donations. - **Don't call session_start() before CMS bootstrap (PHP 7.2 compat) ([14074](https://github.com/civicrm/civicrm-core/pull/14074))** Fixes a `Warning: ini_set(): A session is active` error for Drupal sites running PHP > 7.1. ## Joomla Integration - **Fix php warning when viewing profiles ([dev/joomla#11](https://lab.civicrm.org/dev/joomla/issues/11): [14312](https://github.com/civicrm/civicrm-core/pull/14312))** ## <a name="misc"></a>Miscellany - **Declare API Key as a protected field for future use ([14274](https://github.com/civicrm/civicrm-core/pull/14274))** - **Make apiRequst nextId accessible for api4 constructor ([14311](https://github.com/civicrm/civicrm-core/pull/14311))** - **Remove confusing pass params by ref ([14360](https://github.com/civicrm/civicrm-core/pull/14360))** - **Add EntityPageTrait ([14399](https://github.com/civicrm/civicrm-core/pull/14399))** - **[code-quality] [jcalendar] remove jcalendar usage from participant_register_date on event search ([14330](https://github.com/civicrm/civicrm-core/pull/14330))** - **Deprecate creating recipients from MailingJob.create. ([14097](https://github.com/civicrm/civicrm-core/pull/14097))** - **Fix running of CRM_Utils_MoneyTest on PHPUnit6+ ([14424](https://github.com/civicrm/civicrm-core/pull/14424))** - **Remove broken delete from customGroupCreate ([14239](https://github.com/civicrm/civicrm-core/pull/14239))** - **Remove duplicate line in case BAO ([14345](https://github.com/civicrm/civicrm-core/pull/14345))** - **Switch to calling Payment.create api when processing a refund from AdditionalPayment form ([14317](https://github.com/civicrm/civicrm-core/pull/14317))** - **Updating contact (with no email) via import adding email doesn't set email as primary (adds test for [dev/core#953](https://lab.civicrm.org/dev/core/issues/953): [14225](https://github.com/civicrm/civicrm-core/pull/14225))** - **Cancel first contribution associated to membership, cancels the membership (preliminary work for [dev/core#927](https://lab.civicrm.org/dev/core/issues/927): [14197](https://github.com/civicrm/civicrm-core/pull/14197))** - **Searching for removed contacts in a smart group doesn't work (preliminary work for [dev/core#926](https://lab.civicrm.org/dev/core/issues/926): [14181](https://github.com/civicrm/civicrm-core/pull/14181))** - **When using custom fields for smart group criteria with relative dates the group does not respect the relative date over time (preliminary work for [dev/core#389](https://lab.civicrm.org/dev/core/issues/389)[14401]: (https://github.com/civicrm/civicrm-core/pull/14401) and [14386](https://github.com/civicrm/civicrm-core/pull/14386))** - **Remove instances of $dao->free ([dev/core#562](https://lab.civicrm.org/dev/core/issues/562): [14179](https://github.com/civicrm/civicrm-core/pull/14179))** - **Correct syntax for Get pledge payment count (extend test coverage for [dev/core#627](https://lab.civicrm.org/dev/core/issues/627): [14350](https://github.com/civicrm/civicrm-core/pull/14350))** - **Remove never-called function _civicrm_api3_deprecated_contact_check_custom_params ([14341](https://github.com/civicrm/civicrm-core/pull/14341))** - **IDE re-format of tools directory ([14177](https://github.com/civicrm/civicrm-core/pull/14177))** - **Unit test for FGB error in #14331 ([14340](https://github.com/civicrm/civicrm-core/pull/14340))** - **Test tweaks that *might* help with intermittant test weirdness ([14458](https://github.com/civicrm/civicrm-core/pull/14458))** - **[TEST SUITE] Remove some use of dbunit from tests ([14271](https://github.com/civicrm/civicrm-core/pull/14271))** - **Test cleanup to remove references to discontinued package dbunit ([14276](https://github.com/civicrm/civicrm-core/pull/14276))** - **[dbunit test] remove dbunit dependency ([14328](https://github.com/civicrm/civicrm-core/pull/14328))** - **Add unit test for merge handling on custom data. ([14310](https://github.com/civicrm/civicrm-core/pull/14310))** - **Fix test / possible live error on submitting credit card renewals ([14316](https://github.com/civicrm/civicrm-core/pull/14316))** - **Update testGetActivityAccessCiviCRMEnough test for clarity ([14226](https://github.com/civicrm/civicrm-core/pull/14226))** - **[REF] Move retrieval of basicSearchFields to 'get' fn ([14476](https://github.com/civicrm/civicrm-core/pull/14476))** - **[REF] Remove input format function from deprecated utils to the only place that calls it ([14342](https://github.com/civicrm/civicrm-core/pull/14342))** - **[REF] extract isLiveMode ([14336](https://github.com/civicrm/civicrm-core/pull/14336))** - **[REF] use generic loadStandardSearchOptionsFromUrl ([14338](https://github.com/civicrm/civicrm-core/pull/14338))** - **[REF] Extract function to get cached duplicate matches ([14324](https://github.com/civicrm/civicrm-core/pull/14324))** - **[REF] minor code re-org ([14318](https://github.com/civicrm/civicrm-core/pull/14318))** - **[REF] Remove extraneous variable ([14261](https://github.com/civicrm/civicrm-core/pull/14261))** - **[REF] Centralize logic for resolving settings pseudoconstants ([14264](https://github.com/civicrm/civicrm-core/pull/14264))** - **[REF] Super Minor code readability fix ([14258](https://github.com/civicrm/civicrm-core/pull/14258))** - **[REF] Move copyCustomFields function from Event to Core_DAO for re-usablibilty ([14171](https://github.com/civicrm/civicrm-core/pull/14171))** - **[REF] Remove reference symbol from 2 variables ([14270](https://github.com/civicrm/civicrm-core/pull/14270))** - **[cleanup] Remove deprecated pattern &CRM_Core_Config::singleton() ([14178](https://github.com/civicrm/civicrm-core/pull/14178))** - **[REF] Refactor to reduce duplication on payment forms ([14206](https://github.com/civicrm/civicrm-core/pull/14206))** - **[REF+ test] start process of cleaning up payment activity handling ([14198](https://github.com/civicrm/civicrm-core/pull/14198))** - **[REF][Test] Remove call to CRM_Contribute_BAO_Contribution::recordAdditionalPayment in favour of payment create ([14137](https://github.com/civicrm/civicrm-core/pull/14137))** - **[REF+test] clean up code for getting labels for merge screen, stdise ([14260](https://github.com/civicrm/civicrm-core/pull/14260))** - **[REF] Simplify ACL page template ([14288](https://github.com/civicrm/civicrm-core/pull/14288))** - **[REF] Fix pointless use of CRM_Utils_Array::value in Campaign BAO ([14300](https://github.com/civicrm/civicrm-core/pull/14300))** - **[code-cleanup] remove orderBy param from getDuplicatePairs, it is not used ([14297](https://github.com/civicrm/civicrm-core/pull/14297))** - **[REF] extract buildGroupTree function ([14303](https://github.com/civicrm/civicrm-core/pull/14303))** - **[REF] Test class cleanup - Extract function to create nuanced custom fields to a trait ([14301](https://github.com/civicrm/civicrm-core/pull/14301))** - **[REF] Cleanup input & output on paymentActivityCreate & improve test ([14269](https://github.com/civicrm/civicrm-core/pull/14269))** - **[REF] move calculation of migrationInfo into the function that uses it ([14365](https://github.com/civicrm/civicrm-core/pull/14365))** - **[REF] extract buildClause from CRM_Report_Form_Event_Income ([14098](https://github.com/civicrm/civicrm-core/pull/14098))** - **[REF] Activity Summary report - move temp table generation etc from postProcess to buildQuery, remove postProcess, don't skip in unit tests ([14375](https://github.com/civicrm/civicrm-core/pull/14375))** - **[REF] Activity form - very minor tidy up ([14434](https://github.com/civicrm/civicrm-core/pull/14434))** - **[REF] Stop passing cacheKey to refillCache ([14337](https://github.com/civicrm/civicrm-core/pull/14337))** - **[REF] dev/core#998 make processDupes testable & add test ([14370](https://github.com/civicrm/civicrm-core/pull/14370))** - **[REF] Remove reference to 'changePaymentInstrument' from updateFinancialAccounts as never passed in ([14353](https://github.com/civicrm/civicrm-core/pull/14353))** - **[NFC][test-fix] centralise use of assertLike for comparing sql ([14470](https://github.com/civicrm/civicrm-core/pull/14470))** - **[nfc] [test] Skip testGetFromTo on date transition ([14472](https://github.com/civicrm/civicrm-core/pull/14472))** - **[NFC] Fix issue with Job Manager Test giving out a warning ([14327](https://github.com/civicrm/civicrm-core/pull/14327))** - **[NFC] Fix comment block for variable declarations ([14314](https://github.com/civicrm/civicrm-core/pull/14314))** - **(NFC) Update node package versions to latest ones ([14087](https://github.com/civicrm/civicrm-core/pull/14087))** - **[NFC] Update civicrm_generated data file following addition of contriā¦ ([14371](https://github.com/civicrm/civicrm-core/pull/14371))** - **(NFC) Remove without param tests ([14454](https://github.com/civicrm/civicrm-core/pull/14454))** - **[NFC] PHPCS fixes. ([14402](https://github.com/civicrm/civicrm-core/pull/14402))** - **[NFC] Update package-lock and civicrm_generated to fix langague issues ([14385](https://github.com/civicrm/civicrm-core/pull/14385))** - **[NFC] phpdoc cleanup ([14335](https://github.com/civicrm/civicrm-core/pull/14335))** - **[NFC] Fix variable types in DAO doc blocks ([14294](https://github.com/civicrm/civicrm-core/pull/14294))** - **[NFC] fix docblock types from boolean to bool ([14296](https://github.com/civicrm/civicrm-core/pull/14296))** - **[NFC] array formatting in CRM_Dedupe_MergerTest ([14273](https://github.com/civicrm/civicrm-core/pull/14273))** - **[NFC] Update Language to be more user friendly when checking logs ([14278](https://github.com/civicrm/civicrm-core/pull/14278))** - **[NFC] array formatting, some comments ([14291](https://github.com/civicrm/civicrm-core/pull/14291))** - **[NFC] fix comment blocks capitalising null ([14306](https://github.com/civicrm/civicrm-core/pull/14306))** - **[NFC] fix more places where var is declared as boolean rather than bool ([14305](https://github.com/civicrm/civicrm-core/pull/14305))** - **[NFC] formatting & comment fixes - Regenerate DAO files ([14304](https://github.com/civicrm/civicrm-core/pull/14304))** - **[NFC] ProfileTest class - formatting & general cleanup ([14282](https://github.com/civicrm/civicrm-core/pull/14282))** - **[NFC] Add trailing comma to pseudoconstant array in DAOs ([14295](https://github.com/civicrm/civicrm-core/pull/14295))** - **[NFC] array formatting in api_v3_paymentTest class ([14451](https://github.com/civicrm/civicrm-core/pull/14451))** - **[NFC] Update Exception DAO class ([14482](https://github.com/civicrm/civicrm-core/pull/14482))** - **[NFC] Further tests tidy up following removing of dbunit ([14344](https://github.com/civicrm/civicrm-core/pull/14344))** - **[NFC] Docblock fixes ([14323](https://github.com/civicrm/civicrm-core/pull/14323))** - **NFC Fix DAO Style issues ([14307](https://github.com/civicrm/civicrm-core/pull/14307))** - **[NFC] reformat UFFieldTest ([14308](https://github.com/civicrm/civicrm-core/pull/14308))** - **contributor-keys file - jira/lab.c.o username fix ([14200](https://github.com/civicrm/civicrm-core/pull/14200))** ## <a name="credits"></a>Credits This release was developed by the following code authors: AGH Strategies - Alice Frumin, Andrew Hunt, Eli Lisseck; Agileware - Francis Whittle; Australian Greens - Seamus Lee; Business & Code - Alain Benbassat; Christian Wach; Circle Interactive - Dave Jenkins; CiviCRM - Coleman Watts, Tim Otten; CiviDesk - Yashodha Chaku; Coop SymbioTIC - Mathieu Lutfy, Samuel Vanhove; Dave D; Electronic Frontier Foundation - Mark Burdett; Francesc Bassas i Bullich; Fuzion - Jitendra Purohit; iXiam - Vangelis Pantazis; JMA Consulting - Monish Deb; Just Hope - Phil Morice Brubaker; Megaphone Technology Consulting - Jon Goldberg; MJW Consulting - Matthew Wire; Onyemenam Ndubuisi; Pradeep Nayak; Progressive Technology Project - Jamie McClelland; Stephen Palmstrom; Wikimedia Foundation - Eileen McNaughton Most authors also reviewed code for this release; in addition, the following reviewers contributed their comments: Agileware - Justin Freeman; Artful Robot - Rich Lott; Blackfly Solutions - Alan Dixon; CEDC - Laryn Kragt Bakker; Chris Burgess; CiviCoop - Jaap Jansma; Centrale Organisatie van Voetbal Scheidsrechters (COVS) - Ed van Leeuwen; Fuzion - Luke Stewart; gareth-circle; Greenpeace CEE - Patrick Figel; JMA Consulting - Joe Murray; John Kingsnorth; John Kyle Cronan; Joinery - Allen Shaw; Lighthouse Design and Consulting - Brian Shaughnessy; myDropWizard - David Snopek; Nicol Wistreich; Webstanz - Adelson; ## <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`.