Merge branch '4.9' into 4

This commit is contained in:
Maxime Rainville 2021-10-05 18:32:45 +13:00
commit a2ab1a3608
11 changed files with 980 additions and 46 deletions

View File

@ -0,0 +1,77 @@
---
title: Migrating off CWP
summary: Migrate your project off the Common Web Platform v2
---
# Migrate your project off the Common Web Platform v2
Until November 2021, Silverstripe Ltd maintained a specialised version of the Silverstripe CMS project for the New Zealand Government and related New Zealand public-sector agencies. This version was called _Common Web Platform_ (CWP for short).
The CWP CMS release has been discontinued. CWP projects who wish to continue to receive updates must migrate their code base off the latest CWP release back to the regular Silverstripe CMS release.
## Steps to migrate away from CWP
Before you begin this process you must identify which version of Silverstripe CMS Recipe you want to upgrade to. You can upgrade to [Silverstripe CMS Recipe 4.9.0](/changelogs/4.9.0/) or greater.
[Review the changelog list](/changelogs/) to choose the Silverstripe CMS Recipe version you wish to upgrade to. Read the changelog carefully. It may contain additional release specific upgrade guidance beyond the steps in this guide.
1. If your current composer file contains `cwp/cwp-installer`, run `composer update-recipe cwp/cwp-installer` to inline the recipe.
2. If your current composer file contains `cwp/cwp-recipe-cms`, run `composer update-recipe cwp/cwp-recipe-cms` to inline the recipe.
3. If your current composer file contains `cwp/cwp-recipe-core`, replace it with `silverstripe/recipe-ccl`.
4. If your current composer file contains `cwp/cwp-recipe-search`, replace it with `silverstripe/recipe-solr-search`.
5. Review all your composer requirements and update the constraints so the module versions documented in the changelog for you desired Silverstripe CMS Recipe release are installable.
6. Run a `composer update` to get the lastest tag of each module.
The `silverstripe/recipe-solr-search` and `silverstripe/recipe-ccl` release versions follow the same numbering scheme as the recipes they superseded:
- the last release version of `cwp/cwp-recipe-search` and `cwp/cwp-recipe-core` is 2.8.0
- the first release version of `silverstripe/recipe-solr-search` and `silverstripe/recipe-ccl` is 2.9.0.
### Optional clean-up step
`composer update-recipe` adds some superfluous data to your `composer.json` file. You may remove the following entries from your composer file:
- `extra.project-dependencies-installed` and all the underlying entries
- all the `cwp` entries under the `provide` key.
Once you've completed the clean up, you should run a `composer update` to sync up your changes in the `composer.lock` file.
## Questions
### What constraint should I use in my requirement version?
That really depends on how comfortable your organisiation is with automatically applying updates to your Silverstripe CMS project.
The three broad constraint categories you can use are, in descending order of restrictiveness:
- _exact version_ which forces composer to install the exact version of a package (e.g.: `"silverstripe/userforms: "5.9.0"`)
- _tilde constraint_ which allows composer to install a later version of a package within the same minor release line (e.g.: `"silverstripe/userforms: "~5.9.2"` will allow composer to install the `5.9.2` or `5.9.3` releases, but not the `5.10.0` or `5.9.1` ones)
- _caret constraint_ which allows composer to install a later version of a package within the same major release line (e.g.: `"silverstripe/userforms: "^5.9.2"` will allow composer to install the `5.9.3` or `5.10.0` releases, but not the `6.0.0` one).
The _tilde constraint_ is a suitable default and is the constraint style that ships in the `silverstripe/installer`.
Read [Next Significant Release Operators](https://getcomposer.org/doc/articles/versions.md#next-significant-release-operators) in the composer documentation for more information version constraint operators.
### What if I get a conflict when running composer update?
Composer normally tells you which packages are in conflict. You can try using the `--with-all-dependencies` flag and allow composer upgrade or downgrade other dependencies to resolve conflicts:
```bash
composer update --with-all-dependencies
```
If the `--with-all-dependencies` flag doesn't fix the problem, carefully read the composer error message and try to identify which constraints need to be updated to resolve to an installable set of dependencies.
### What happens if I do not migrate off the CWP CMS recipes?
The CWP CMS recipes have been archived, but existing versions will remain installable for the indefinite future. No new versions of the CWP CMS recipes will be tagged. The CWP CMS recipes are in lockstep with exact versions of various Silverstripe CMS modules. This means you will not be able to upgrade to any Silverstripe CMS Recipes beyond the 4.8 release.
Your project will still work, but will not receive any bug fixes, security fixes or new features that ship in later releases.
### What if my project is still using CWP 1?
Read the [Upgrading to Silverstripe CMS 4](Upgrading_project.md) guide first.
Once you've completed the _Upgrade your dependencies_ step, follow the directions in this guide to remove all the legacy CWP CMS recipes.
### Is there a way to create a new project that would require all the modules a CWP project would have?
There's no officially supported alternative to the `cwp/cwp-installer` module. There's nothing stopping you from creating a new project using `cwp/cwp-installer` as a baseline and then inlining the CWP CMS recipes using the steps outlined in this guide.
However, your project will not be following the most up-to-date best practices if you use this approach.

View File

@ -1,8 +1,6 @@
# 4.9.0 (Unreleased)
## Overview
A full list of module versions included in CMS Recipe {{ version }} is provided below. We recommend referencing recipes in your dependencies, rather than individual modules, to simplify version tracking. See [Recipes](/getting_started/).
A full list of module versions included in CMS Recipe 4.9.0 is provided below. We recommend referencing recipes in your dependencies, rather than individual modules, to simplify version tracking. See [Recipes](/getting_started/).
<details>
@ -92,19 +90,36 @@ A full list of module versions included in CMS Recipe {{ version }} is provided
</details>
Upgrading to Recipe {{ version }} is recommended for all sites. This upgrade can be carried out by any development team familiar with Silverstripe.
Upgrading to Silverstripe CMS Recipe 4.9.0 is recommended for all sites. This upgrade can be carried out by any development team familiar with Silverstripe.
- [Security considerations](#security-considerations)
- [Security audit and regression test](#audit)
- [For development teams of Common Web Platform projects](#cwp-end)
- [Dropping support for Internet Explorer 11](#ie11eol)
- [Features and enhancements](#features-and-enhancements)
- [Changes to our release process](#release-process)
- [Image lazy loading](#image-lazy-loading)
- [Manage your CMS sessions across devices](#session-manager)
- [Default mail transport upgraded to sendmail](#sendmail)
- [Support for silverstripe/graphql v4](#graphqlv4)
- [Upgrade to Swiftmailer version 6](#swiftmailer)
- [Other new features](#other-features)
- [Bugfixes](#bugfixes)
## Security considerations {#security-considerations}
This release includes security fixes. Review the individual vulnerability disclosure for more detailed descriptions of each security fix. We highly encourage upgrading your project to include the latest security patches.
We have provided a high-level severity rating of the vulnerabilities below based on the CVSS score. Note that the impact of each vulnerability could vary based on the specifics of each project. You can [read the severity rating definitions in the Silverstripe CMS release process](/contributing/release_process/#severity-rating).
* [CVE-2021-28661 Default GraphQL permission checker not inherited by query subclass](https://www.silverstripe.org/download/security-releases/CVE-2021-28661) Severity: Low
* [CVE-2021-36150 Insert from files link text - Reflective (self) Cross Site Scripting](https://www.silverstripe.org/download/security-releases/CVE-2021-36150) Severity: Medium
### Note for CVE-2021-28661 Default GraphQL permission checker not inherited by query subclass
If your site has a custom GraphQL 3 ItemQuery/ListQuery Scaffolder implementation that relies on having no permission check, you will need to add a custom permission checker to bypass the `canView()` check. See the [security announcement](https://www.silverstripe.org/download/security-releases/CVE-2021-28661) for implementation details.
## Regression test and Security audit{#audit}
This release has been comprehensively regression tested and passed to a third party for a security-focused audit.
@ -115,7 +130,7 @@ While it is still advised that you perform your own due diligence when upgrading
This release marks the first release for Common Web Platform projects to eject out of managing projects in the CWP 2.x version line and to begin following the standard CMS 4.x version line, by adopting the CMS Recipe.
More information and guidance on how to manage your project composer.json file will be published as part of the CMS 4.9.0 stable release and supporting documentation.
Review the [Migrate your project off the Common Web Platform v2](/Upgrading/Migrating_off_CWP) guidance to learn how to transition from CWP.
## Dropping support for Internet Explorer 11{#ie11eol}
@ -127,6 +142,28 @@ While the Silverstripe CMS UI might not allow content authors to manage content
## Features and enhancements {#features-and-enhancements}
### Changes to our release process{#release-process}
This change log has historically focused on noting changes as part of the CMS modules contained in what's referred to as the CMS Recipe (see recipes).
This release brings a new approach to the way we shipped code and communicate its release. These changes are aimed at making it easier for developers to keep their project up to date and to understand what has been released in popular modules *outside* of the CMS Recipe.
#### Unified release for Core and Supported modules
Until recently, we shipped core modules and supported modules in two different releases. From now on, we will shipped core modules and supported modules in one go.
The main difference is that changelogs will now contain entries for all supported modules. This does not require Silverstripe CMS project to install any additianal modules when upgrading.
#### Looser constraints allow easier adoption of patch releases
The *CMS Recipe* is the recommended way that all CMS projects manage the core repositories that are required to run a standard Silverstripe CMS project. Previously, Silverstripe CMS recipes were *lockstep* with exact constraints. This precluded projects using recipes from installing patch releases of individual modules until a subsequent release of a recipe (often 3+ months later). Now, the CMS recipe and other recipes used to bundle module combinations have looser constraints.
The loose constraints will allow your project to take advantage of any subsequent patch releases of containing modules with a simple composer update, respecting commitments to SemVer versioning and not introducing any breaking changes. This allows projects to make more immediate use of bugfix releases, while giving module maintainers the incentive to release patch versions more frequently.
For projects that are more weary of frequent patch releases and would prefer to retain tighter module version constraints, it is recommended that you either:
- eject out of the CMS recipe
- record each module individually in the `composer.json` file
### Image lazy loading {#image-lazy-loading}
Most modern browsers support the ability to "lazy load" images. When an image is configured to be
@ -194,30 +231,624 @@ Functional tests should use `$this->logInAs($member)` and `$this->logOut()` when
Review the [Functional Testing developer documentation](/developer_guides/testing/functional_testing/#loginas) for more details on `logInAs()` and `logOut()`.
### Default mail transport upgraded to sendmail {#sendmail}
### Upgrade to Swiftmailer version 6 {#swiftmailer}
Silverstripe CMS provides an API over the top of the [SwiftMailer](http://swiftmailer.org/) PHP library which comes with an extensive list of "transports" for sending mail via different services.
Silverstripe CMS provides an API over the top of the [SwiftMailer](http://swiftmailer.org/) PHP library which comes with an extensive list of "transports" for sending mail via different services. Silverstripe CMS 4.9.0 upgrades to Swiftmailer version 6 from version 5.
Prior to 4.9.0, Silverstripe CMS 4 defaulted to using the built-in PHP `mail()` command via a deprecated class `Swift_MailTransport`. However, using this layer is less secure and is strongly discouraged.
#### Moving away from _Swift_MailTransport_
Prior to 4.9.0, Silverstripe CMS 4 defaulted to using the built-in PHP `mail()` command via a deprecated class `Swift_MailTransport`. However, the Swiftmailer maintainers have decided to remove this class because of some inherent security flaw in the way the PHP mail function handles the `from` header.
Installations of Silverstripe CMS setup using silverstripe/installer 4.9.0 or greater default to using the more secure class `Swift_SendmailTransport` which uses a `sendmail` binary.
Read this [GitHub comment by a SwiftMailer maintainer](https://github.com/swiftmailer/swiftmailer/issues/866#issuecomment-289291228) for a detailed explanation of the weakness of the PHP mail function.
It's highly recommended that existing Silverstripe CMS installation still using `Swift_MailTransport` upgrade to using `Swift_SendmailTransport` or another available transport, such as `Swift_SmtpTransport`. Details on how to use these classes are available in the [email section](https://docs.silverstripe.org/en/4/developer_guides/email/) of the developer docs.
We have included the deprecated `Swift_MailTransport` class in the `silverstripe/framework` codebase to ensure backward compatibility for project upgrading to Silverstripe Recipe CMS 4.9.0. However, using this layer is less secure and is strongly discouraged.
### Support for silverstripe/graphql v4 {#graphqlv4}
New Silverstripe CMS project created from `silverstripe/installer` 4.9.0 or greater will default to using the more secure class `Swift_SendmailTransport` which uses a `sendmail` binary.
The Silverstripe CMS 4.8.0 release added support for the experimental `silverstripe/graphql` v4 module. We made it easier for early adopters to run `silverstripe/graphql` v4 in this release:
- Upgrade to the Silverstripe CMS 4.9.0 release.
- Confirm your project `composer.json` file has a `"minimum-stability": "dev"` key.
- Explicitely require `silverstripe/graphql` v4 by running `composer require silverstripe/graphql:^4`
You don't need to inline any recipes anymore.
It's highly recommended that existing Silverstripe CMS installation using `Swift_MailTransport` upgrade to `Swift_SendmailTransport` or another available transport, such as `Swift_SmtpTransport`. Details on how to use these classes are available in the [email section](https://docs.silverstripe.org/en/4/developer_guides/email/) of the developer docs.
### Other new features
* [New title tip component](https://silverstripe.github.io/silverstripe-pattern-lib/?knob-Content=Example%20tip%20contents&selectedKind=Admin%2FTip&selectedStory=Title%20tip&full=0&addons=1&stories=1&panelRight=0&addonPanel=storybook%2Fnotes%2Fpanel) allowing you to provide extra context on the purpose of a field
* [Dot notation support in form fields](https://github.com/silverstripe/silverstripe-framework/pull/9192): Save directly into nested has_one relationships (see [docs](/developer_guides/forms/how_tos/handle_nested_data)).
## Bugfixes {#bugfixes}
This release includes a number of bug fixes to improve a broad range of areas. Check the change logs for full details of these fixes split by module. Thank you to the community members that helped contribute these fixes as part of the release!
<!--- Changes below this line will be automatically regenerated -->## Change Log
### Security
* silverstripe/admin (1.8.0 -&gt; 1.9.0)
* 2021-09-01 [e125ed4](https://github.com/silverstripe/silverstripe-admin/commit/e125ed4d349fbe11fd1a7fbdf57dfa9716a6b87b) Escape html tag characters in link text (Steve Boyd) - See [cve-2021-36150](https://www.silverstripe.org/download/security-releases/cve-2021-36150)
* silverstripe/graphql (3.5.0 -&gt; 3.6.0)
* 2021-08-11 [d391399](https://github.com/silverstripe/silverstripe-graphql/commit/d391399007efb67bd36c6b963e89f5e95bf0bdad) Add a CanViewPermissionChecker if permission checker is null (Steve Boyd) - See [cve-2021-28661](https://www.silverstripe.org/download/security-releases/cve-2021-28661)
### Features and Enhancements
* silverstripe/installer (4.8.0 -&gt; 4.9.0)
* 2021-08-18 [be9d875](https://github.com/silverstripe/silverstripe-installer/commit/be9d8751417847af8939e2a7cd663aa73e45491a) Use Swift_SendmailTransport for new projects (Steve Boyd)
* silverstripe/assets (1.8.0 -&gt; 1.9.0)
* 2021-07-05 [9526c54](https://github.com/silverstripe/silverstripe-assets/commit/9526c54eb4aeadc8381ffb13491c6cd12be66664) Add lazy loading to image rendered in SS template (Maxime Rainville)
* 2021-07-05 [ce3a649](https://github.com/silverstripe/silverstripe-assets/commit/ce3a649413c51f990bfcdab42473a6ca26c49848) Image lazy-loading for wysiwyg images (#455) (Steve Boyd)
* 2021-05-19 [80019e9](https://github.com/silverstripe/silverstripe-assets/commit/80019e9f92a246ceaa8d4879275bd8d718b76550) Ensure logged in members can access draft files (#446) (Aaron Carlino)
* silverstripe/config (1.1.0 -&gt; 1.2.0)
* 2018-02-26 [e0e4013](https://github.com/silverstripe/silverstripe-config/commit/e0e4013cce8904e9cbabc445ba7e6551b5e79b58) New alias for 1.x-dev (Daniel Hensby)
* silverstripe/framework (4.8.0 -&gt; 4.9.0)
* 2021-08-08 [f99ba5d71](https://github.com/silverstripe/silverstripe-framework/commit/f99ba5d71656eb2ce8797ef4ca48de4a08f19be7) Add extension point to DataObject-&amp;amp;gt;hydrate() (Matt Peel)
* 2021-07-31 [a90d46dbc](https://github.com/silverstripe/silverstripe-framework/commit/a90d46dbc4e7f23e2c022e7e4e931c7ee8900794) Title tips for form fields (Steve Boyd)
* 2021-07-18 [4cd6b1434](https://github.com/silverstripe/silverstripe-framework/commit/4cd6b1434ab2534f536f90335f4ad570181c98b4) Reduce duplication of code in GridField view and edit buttons. (#9953) (GuySartorelli)
* 2021-06-29 [e4e4b0924](https://github.com/silverstripe/silverstripe-framework/commit/e4e4b0924deeb6e2f254de1b44a8e72ce9af9cf7) Use text field&amp;#039;s title for validation messages. (GuySartorelli)
* 2021-06-25 [d710990e1](https://github.com/silverstripe/silverstripe-framework/commit/d710990e13f2ce430651538f2b746f36aa189347) Provide onBeforeRenderHolder extension hook. (GuySartorelli)
* 2021-06-17 [b625ba99b](https://github.com/silverstripe/silverstripe-framework/commit/b625ba99b3a5877e847004c41ae3e774b795f5be) Remove wording for authenticated devices being manageable (Steve Boyd)
* 2021-05-23 [9dd69c40e](https://github.com/silverstripe/silverstripe-framework/commit/9dd69c40e31186b09ae62e300104dacfab125715) Add DBText-&amp;amp;gt;Summary tests (Michal Kleiner)
* 2021-05-10 [f8a943115](https://github.com/silverstripe/silverstripe-framework/commit/f8a94311521db9fe52c2dd430b6ce731c51ce5f1) Add extension point to Director::is_site_url (Michal Kleiner)
* 2020-08-26 [8883413ba](https://github.com/silverstripe/silverstripe-framework/commit/8883413ba71a7b117b79a237d07f3ed72301fa8a) Add GridFieldDetailForm::setRedirectMissingRecords() (Sam Minnee)
* 2019-08-24 [02fb7c3b1](https://github.com/silverstripe/silverstripe-framework/commit/02fb7c3b178f85b75365b0efb46ae8b25a204590) Support dot syntax in form field names (Sam Minnee)
* silverstripe/mimevalidator (2.1.1 -&gt; 2.2.0)
* 2020-11-16 [c528307](https://github.com/silverstripe/silverstripe-mimevalidator/commit/c528307ecffaa7b5765e634fad9305547374d884) Update translations (Maxime Rainville)
* 2020-11-15 [b409695](https://github.com/silverstripe/silverstripe-mimevalidator/commit/b4096951574d70198306bd2189ce00a893b98763) Update translations (Maxime Rainville)
* silverstripe/admin (1.8.0 -&gt; 1.9.0)
* 2021-08-03 [e7a9513](https://github.com/silverstripe/silverstripe-admin/commit/e7a9513951a7163b2a12f6c3adf17df48609e22d) FormField Title tooltip (Steve Boyd)
* 2021-07-08 [4817216](https://github.com/silverstripe/silverstripe-admin/commit/4817216d1e4627d9318f47358f6b9555c6a9ea3f) Avoid &amp;quot;new&amp;quot; keyword to instantiate injectable CMSMenuItem (GuySartorelli)
* silverstripe/asset-admin (1.8.0 -&gt; 1.9.0)
* 2021-08-02 [a420ec9b](https://github.com/silverstripe/silverstripe-asset-admin/commit/a420ec9ba7bff41ad0a0da26b7b0e47e861f7d1c) Add image form input to opt out of lazy loading (Steve Boyd)
* 2021-06-28 [a77bae9e](https://github.com/silverstripe/silverstripe-asset-admin/commit/a77bae9e44e709e5d025d45685e592bb01a0e794) Remove duplicate permission check (Steve Boyd)
* 2021-06-20 [4979699a](https://github.com/silverstripe/silverstripe-asset-admin/commit/4979699a436467fb37ae8b20a47914f02be68cc8) Update data source used for file delete modal (Steve Boyd)
* silverstripe/session-manager (0.1.1 -&gt; 1.1.0)
* 2021-06-20 [efe3023](https://github.com/silverstripe/silverstripe-session-manager/commit/efe3023cf769cf125af2fbc3f840a2b24aeba7d2) Remove logout confirmation (Steve Boyd)
* 2021-06-09 [b8afcdd](https://github.com/silverstripe/silverstripe-session-manager/commit/b8afcdd74039cca1210c8f32cd7ff11736c2f66d) Update folders + namespaces, remove unused class (Steve Boyd)
* silverstripe/userforms (5.9.0 -&gt; 5.10.0)
* 2021-05-31 [3fbccea](https://github.com/silverstripe/silverstripe-userforms/commit/3fbccea2ea5e6808d4fc48afbf662be910e49f8a) Avoid use of &amp;#039;new&amp;#039; keyword on injectable classes from this module. (GuySartorelli)
* dnadesign/silverstripe-elemental (4.6.0 -&gt; 4.7.0)
* 2021-06-27 [eae0ff9](https://github.com/silverstripe/silverstripe-elemental/commit/eae0ff9ecae4fc28847cac0b96460f7a08cd4994) Top Page enhancements. (#832) (Mojmir Fendek)
* silverstripe/mfa (4.3.0 -&gt; 4.4.0)
* 2021-06-16 [51d6094](https://github.com/silverstripe/silverstripe-mfa/commit/51d60948e61b539cbdd21f6c62ac27bccddf0e6a) Increase rate limit (Steve Boyd)
### Bugfixes
* silverstripe/installer (4.8.0 -&gt; 4.9.0)
* 2021-06-21 [9487628](https://github.com/silverstripe/silverstripe-installer/commit/9487628f7a8476a8eb39a78fb5d4664b6de7a1ff) Fix typo (Seno)
* silverstripe/framework (4.8.0 -&gt; 4.9.0)
* 2021-08-23 [de87d91d2](https://github.com/silverstripe/silverstripe-framework/commit/de87d91d22e4dc35beae51da634a692fa16fd8ce) Trim email addresses to comply with RFC 2822, 3.6.2 (Steve Boyd)
* 2021-08-06 [9a7c99fc4](https://github.com/silverstripe/silverstripe-framework/commit/9a7c99fc4bbf97c7d08e6bc98192280f96470e44) Take current request protocol into account when deleting session cookie (Florian Thoma)
* 2021-08-05 [ecb233012](https://github.com/silverstripe/silverstripe-framework/commit/ecb233012d0569f0ea4982ec343c64992397352c) Fix error when executing method SSViewer::templates() when $subTemplates is still null (Bram de Leeuw)
* 2021-07-27 [e436e13df](https://github.com/silverstripe/silverstripe-framework/commit/e436e13dfcd6d3420935ffb6bd55abb58c503141) Fix link typo in 01_Caching.md (Vlad Mencl)
* 2021-07-07 [b2a85e7a0](https://github.com/silverstripe/silverstripe-framework/commit/b2a85e7a02a78359d11329e5b6a226dfe6ce8df7) BASE_PATH fallback assumed wrong file location (#9977) (Ingo Schommer)
* 2021-07-06 [87d076faa](https://github.com/silverstripe/silverstripe-framework/commit/87d076faa6b41694e7b21f9e2610cbd92e9d70b2) Cast DBInt value to int (Steve Boyd)
* 2021-07-01 [8e803bbcf](https://github.com/silverstripe/silverstripe-framework/commit/8e803bbcfcd542e58cab667d0789873270c8547a) Parse Enums with dots in their values (Steve Boyd)
* 2021-06-29 [0b979dc34](https://github.com/silverstripe/silverstripe-framework/commit/0b979dc3453cbeedad30befa8720d7ca5d41028e) Cache duplicate embeds separately (Steve Boyd)
* 2021-06-17 [7ed7ad025](https://github.com/silverstripe/silverstripe-framework/commit/7ed7ad0254195980f8226d1dbb542debe5288d85) Ensure changing a password to blank is validated (Steve Boyd)
* 2021-06-05 [28b5b803b](https://github.com/silverstripe/silverstripe-framework/commit/28b5b803be5570397d6db605f5547d3c6b9fdd5a) Defensively copy mocked datetime (David Peck)
* 2021-05-31 [472fc4ebb](https://github.com/silverstripe/silverstripe-framework/commit/472fc4ebb4a6459bb8485e0a60c14485b2ec56a3) Update DataQuery::exists to return false when limit causes no result to be returned (#9946) (Maxime Rainville)
* 2021-05-20 [5e2ca7f0a](https://github.com/silverstripe/silverstripe-framework/commit/5e2ca7f0a346df30135a00be32781a2ffa36229c) Tidy extension and cli fix for tests (Ingo Schommer)
* 2021-05-14 [7024af541](https://github.com/silverstripe/silverstripe-framework/commit/7024af541b61653e19caa596f293b7ce69b5e0c7) Fix typos in 04_Data_Types_and_Casting.md (Manuel Thalmann)
* 2021-05-14 [6e499b73a](https://github.com/silverstripe/silverstripe-framework/commit/6e499b73af1764cd26d3db9695eaca353c2afe83) Fix typos in 03_Lists.md (Manuel Thalmann)
* 2021-05-13 [a5e4a5c97](https://github.com/silverstripe/silverstripe-framework/commit/a5e4a5c97d78cd4efb47c3478b85b46fbc49d139) Fix typos in 02_Relations.md (Manuel Thalmann)
* 2021-05-13 [f44119ff5](https://github.com/silverstripe/silverstripe-framework/commit/f44119ff59937e3b4b7ec7dcbd557c348b70b4fb) Fix typos in 01_Data_Model_and_ORM.md (Manuel Thalmann)
* 2020-09-16 [2017a2043](https://github.com/silverstripe/silverstripe-framework/commit/2017a2043360f25676d5dff33a5422156051951a) Use empty array as a fallback for preg_split within dbtext summary (Michal Kleiner)
* 2020-08-04 [9d03a6856](https://github.com/silverstripe/silverstripe-framework/commit/9d03a6856c72b171b52a599268dea84eacc2c89e) Retain custom sort on custom lists in GridFieldAddExistingAutoCompleter (Ingo Schommer)
* 2019-08-26 [5dcf5197d](https://github.com/silverstripe/silverstripe-framework/commit/5dcf5197daa916c5b2126ec4421e35afe869c546) Make the ./_ substitution optional. (Sam Minnee)
* 2019-08-26 [c7c6bdebd](https://github.com/silverstripe/silverstripe-framework/commit/c7c6bdebdf655261f597b0f563bd11d3494dc9c4) Allow join-object to be referenced as a component (Sam Minnee)
* 2019-08-24 [6ba7bf7b2](https://github.com/silverstripe/silverstripe-framework/commit/6ba7bf7b2f5bda81f50392cf1331a359b779c407) Replace .s with _s in HTML IDs (Sam Minnee)
* silverstripe/admin (1.8.0 -&gt; 1.9.0)
* 2021-07-01 [e361ae2](https://github.com/silverstripe/silverstripe-admin/commit/e361ae257648c8d8011b1f355ae3cd5bc3b1fe66) Unload previous preview when new URL is not available (Steve Boyd)
* 2021-06-17 [c18402a](https://github.com/silverstripe/silverstripe-admin/commit/c18402ad046c2aa6498a33fdb3ceb002a5f0b6bd) Treedropdown css (Steve Boyd)
* 2021-06-04 [ec80b60](https://github.com/silverstripe/silverstripe-admin/commit/ec80b6051011f9d16c63450ce2dcde4cb2d0c01d) Fix broken ModelAdmin test (Maxime Rainville)
* 2021-06-02 [56c3a8f](https://github.com/silverstripe/silverstripe-admin/commit/56c3a8f7338fdc43d500bf1c5fe5e192e20203f3) Refactor HeaderField to be a functional component (Maxime Rainville)
* 2021-05-28 [a0a3701](https://github.com/silverstripe/silverstripe-admin/commit/a0a37011aa79114ca3568862a6d4a96c6886539d) managed_models slugs can&amp;#039;t have hyphens (#1220) (Andrew Aitken-Fincham)
* silverstripe/asset-admin (1.8.0 -&gt; 1.9.0)
* 2021-08-12 [f3065b6f](https://github.com/silverstripe/silverstripe-asset-admin/commit/f3065b6f86d013f162234631a21f6830d99ad108) Update unit test to use TestSession for session (Steve Boyd)
* 2021-07-16 [b7061ce8](https://github.com/silverstripe/silverstripe-asset-admin/commit/b7061ce8f51b2035026e8dce1504b13bbfce7153) Update Editor to fetch file info directly from GraphQL so the editor works even when viewing a file not on the current page (Maxime Rainville)
* 2021-07-15 [5db5c6cc](https://github.com/silverstripe/silverstripe-asset-admin/commit/5db5c6ccc2ae83d7a11a94143f88b169a00524de) Always sort by folders first (Steve Boyd)
* 2021-06-20 [91d59457](https://github.com/silverstripe/silverstripe-asset-admin/commit/91d594575ad279a2b0610d7b12a5d3d468fe5cdd) Update overrides url when file is selected (Steve Boyd)
* silverstripe/versioned-admin (1.8.0 -&gt; 1.9.0)
* 2021-06-10 [789e52c](https://github.com/silverstripe/silverstripe-versioned-admin/commit/789e52ceb8ba0b66ca704b9d7df695ae1a547089) Update broken translations (Maxime Rainville)
* silverstripe/cms (4.8.0 -&gt; 4.9.0)
* 2021-06-23 [9d77ff3b](https://github.com/silverstripe/silverstripe-cms/commit/9d77ff3b9021ed4a2d3516ed9013f95c059474fb) Show &amp;#039;No preview available&amp;#039; message for pages with no state (Steve Boyd)
* 2020-09-17 [2332831a](https://github.com/silverstripe/silverstripe-cms/commit/2332831a2d32265cc1ccb9bbfbff6a11cb576cc3) Fix Behat test to use new toast notification step (Maxime Rainville)
* silverstripe/session-manager (0.1.1 -&gt; 1.1.0)
* 2021-06-28 [cf17c0e](https://github.com/silverstripe/silverstripe-session-manager/commit/cf17c0e5cbaeffd0b6c7045e120b2988a4e9aea9) Fix title of user docs (Andre Kiste)
* 2021-04-22 [640bf52](https://github.com/silverstripe/silverstripe-session-manager/commit/640bf52761ea6c5bb01604111e91cd3333096b8c) Refactor LoginSessionController to use sensible REST request and to allow all users to invalidate their session (Maxime Rainville)
* silverstripe/login-forms (4.4.1 -&gt; 4.5.0)
* 2021-06-24 [c554983](https://github.com/silverstripe/silverstripe-login-forms/commit/c5549830ae19c5e452115f2d915104116f8c7a03) Add Darkmod style for popover (#98) (Maxime Rainville)
* silverstripe/spellcheck (2.2.0 -&gt; 2.2.1)
* 2021-05-30 [1a54396](https://github.com/silverstripe/silverstripe-spellcheck/commit/1a543961fec40cdd63cc3cd2b4ee3ddf71f9c43a) Add namespaces back to translation files (Steve Boyd)
* silverstripe/tagfield (2.6.0 -&gt; 2.7.0)
* 2021-07-26 [88c069c](https://github.com/silverstripe/silverstripe-tagfield/commit/88c069c3ae3a915c45c8cb3ec8363bb7f3c04178) Fix missing CSS class for StringTagField initialisation (closes #148) (Loz Calver)
* 2021-06-18 [325de9e](https://github.com/silverstripe/silverstripe-tagfield/commit/325de9e94d4d29ff65b49fe36ac2d14019c6ffa7) Fix StringTagField initialisation (fixes #148) (Loz Calver)
* silverstripe/widgets (2.1.0 -&gt; 2.1.1)
* 2021-05-30 [d4ae7ff](https://github.com/silverstripe/silverstripe-widgets/commit/d4ae7ff9ab0844551f64a9a3ac2fb8425319b87f) Add namespaces back to translation files (Steve Boyd)
* silverstripe/contentreview (4.2.0 -&gt; 4.3.0)
* 2020-10-29 [ebcfc48](https://github.com/silverstripe/silverstripe-contentreview/commit/ebcfc483beb17f11123eb53fc3b4715ee45d8241) Clear non-recurring custom date when reviewing (Jules)
* silverstripe/sharedraftcontent (2.4.0 -&gt; 2.5.0)
* 2021-07-27 [e010663](https://github.com/silverstripe/silverstripe-sharedraftcontent/commit/e0106638387575d271118b4dd6be838a8365fe72) Add `no-change-track` to link input (Will Rossiter)
* 2021-07-08 [e7e9633](https://github.com/silverstripe/silverstripe-sharedraftcontent/commit/e7e9633858b002095646a94870e09b6613722b76) Rename file to match class name (Steve Boyd)
* 2021-06-29 [82c2649](https://github.com/silverstripe/silverstripe-sharedraftcontent/commit/82c26498e98787da943cb34bd206796ee2f10558) resolve previewing pages which redirect (#143) (Will Rossiter)
* silverstripe/userforms (5.9.0 -&gt; 5.10.0)
* 2021-07-08 [69b397f](https://github.com/silverstripe/silverstripe-userforms/commit/69b397f4673b8d411b04872e5b13960d9d49aaaf) Fix bad lang merge (Daniel Hensby)
* 2021-06-22 [18eccb6](https://github.com/silverstripe/silverstripe-userforms/commit/18eccb65d426ec4ea873b1231789c6e8cf58ed94) Log any email exceptions gracefully (Will Rossiter)
* 2021-06-20 [02c15f3](https://github.com/silverstripe/silverstripe-userforms/commit/02c15f321aa4e688bd5b7e330d4be8229d22b7eb) Fix: Allow removing the Versioned extension from EditableFormField (GuySartorelli)
* 2021-05-31 [b13cb73](https://github.com/silverstripe/silverstripe-userforms/commit/b13cb73deb855e08182784316e71c13957f12ce8) Add namespaces back to translation files, use EditibleFileField class (Steve Boyd)
* 2021-04-12 [4a883f1](https://github.com/silverstripe/silverstripe-userforms/commit/4a883f1641b725b2ccbcc65ff25df31522b8b2b8) fix for testing EmailRecipients (Bauke Zwaan)
* 2021-03-31 [beaf901](https://github.com/silverstripe/silverstripe-userforms/commit/beaf90120865b9f5da7d3e46631eb881b96f1a75) When deleting form submission, delete linked file (Will Rossiter)
* 2021-03-22 [e925aa1](https://github.com/silverstripe/silverstripe-userforms/commit/e925aa197942eaac103661aa7a94723305000810) Uploaded files not appearing in emails (Will Rossiter)
* dnadesign/silverstripe-elemental (4.6.0 -&gt; 4.7.0)
* 2021-02-09 [ce4696e](https://github.com/silverstripe/silverstripe-elemental/commit/ce4696e94dae3c6e78e6ccd71edc08b882f77ca1) Add missing use statement. (GuySartorelli)
* 2021-02-08 [fb3bad4](https://github.com/silverstripe/silverstripe-elemental/commit/fb3bad4b05042e40720f0126d8692dc65af77633) ignored_classes Content field emptied by MigrateContentToElement task (GuySartorelli)
### API Changes
* silverstripe/assets (1.8.0 -&gt; 1.9.0)
* 2021-06-24 [46e11eb](https://github.com/silverstripe/silverstripe-assets/commit/46e11ebd8bd8d074aed68ca9959030d2cd47a46c) Add image lazy load config (Steve Boyd)
* silverstripe/framework (4.8.0 -&gt; 4.9.0)
* 2021-08-18 [92f47da08](https://github.com/silverstripe/silverstripe-framework/commit/92f47da08bcb6d70d46f178e71bcbb69b819a270) Update SwiftMailer from v5 to v6 (#10048) (Steve Boyd)
### Dependencies
* silverstripe/recipe-kitchen-sink (4.8.0 -&gt; 4.9.0)
* 2021-09-03 [80f7404](https://github.com/silverstripe/recipe-kitchen-sink/commit/80f7404dffff4c99536b4fa599b689182149a880) Update fluent version (Steve Boyd)
* 2021-08-29 [ee098d0](https://github.com/silverstripe/recipe-kitchen-sink/commit/ee098d0b9651a172a50d014c691d2856d220ac0d) Update dependency versions (Steve Boyd)
* silverstripe/recipe-cms (4.8.0 -&gt; 4.9.0)
* 2021-08-19 [03c6888](https://github.com/silverstripe/recipe-cms/commit/03c6888a7ff52b048340b2f1ded59334eb3b0f63) Add session manager (Steve Boyd)
* 2021-05-17 [53f9a7f](https://github.com/silverstripe/recipe-cms/commit/53f9a7f59496792f13b18de0cf035329d612c128) Use versioned 1.8 (Steve Boyd)
* 2021-05-17 [861afad](https://github.com/silverstripe/recipe-cms/commit/861afaddaed921b528f839046570d42d5b1bca56) Update dependencies for CMS 4.8 (Steve Boyd)
* silverstripe/recipe-core (4.8.0 -&gt; 4.9.0)
* 2021-05-17 [05c5042](https://github.com/silverstripe/recipe-core/commit/05c5042e7ad9d7ca9661110720d929100365c404) Update dependencies for CMS 4.8 (Steve Boyd)
* silverstripe/admin (1.8.0 -&gt; 1.9.0)
* 2021-05-14 [f7f1a1f](https://github.com/silverstripe/silverstripe-admin/commit/f7f1a1fb189dea3fac9aaf54504af37e96767da9) Bump ini from 1.3.5 to 1.3.8 (dependabot[bot])
* 2021-05-14 [a1c247f](https://github.com/silverstripe/silverstripe-admin/commit/a1c247fb8e007a6a3d896c9d1b3516659a088c00) Bump elliptic from 6.5.3 to 6.5.4 (dependabot[bot])
* 2021-03-30 [0671a5c](https://github.com/silverstripe/silverstripe-admin/commit/0671a5cbddcd0cf05e426781599b545557baf821) Bump y18n from 3.2.1 to 3.2.2 (dependabot[bot])
* silverstripe/asset-admin (1.8.0 -&gt; 1.9.0)
* 2021-05-14 [e907bc48](https://github.com/silverstripe/silverstripe-asset-admin/commit/e907bc48138a98c1471695e83fff1a4043e0bac3) Bump ini from 1.3.5 to 1.3.8 (dependabot[bot])
* 2021-03-30 [701cd745](https://github.com/silverstripe/silverstripe-asset-admin/commit/701cd7458039ae6750d963c1e843ee30e608c3db) Bump y18n from 3.2.1 to 3.2.2 (dependabot[bot])
* 2021-03-09 [33f7ed89](https://github.com/silverstripe/silverstripe-asset-admin/commit/33f7ed892cc3276904abfaeee5bb953f4fe42f48) Bump elliptic from 6.5.3 to 6.5.4 (dependabot[bot])
* 2020-10-16 [e6bfab23](https://github.com/silverstripe/silverstripe-asset-admin/commit/e6bfab2350540fe04153678842d6926ea9874ec7) Bump npm-user-validate from 1.0.0 to 1.0.1 (dependabot[bot])
* silverstripe/campaign-admin (1.8.0 -&gt; 1.9.0)
* 2021-05-14 [7fc5304](https://github.com/silverstripe/silverstripe-campaign-admin/commit/7fc5304157d1247eee29e0ab4ba561e693746e0b) Bump elliptic from 6.5.3 to 6.5.4 (dependabot[bot])
* 2021-05-14 [96df857](https://github.com/silverstripe/silverstripe-campaign-admin/commit/96df857964b8bf8cc7ab8774d8610500dcf11d57) Bump y18n from 3.2.1 to 3.2.2 (dependabot[bot])
* silverstripe/versioned-admin (1.8.0 -&gt; 1.9.0)
* 2021-08-05 [913781c](https://github.com/silverstripe/silverstripe-versioned-admin/commit/913781ca05c6cee4c8dfccf9b37cd26964bbfd6b) Bump hosted-git-info from 2.8.5 to 2.8.9 (dependabot[bot])
* 2021-05-14 [b014432](https://github.com/silverstripe/silverstripe-versioned-admin/commit/b0144328ee36e406226697421124dc9585a92e9c) Bump elliptic from 6.5.1 to 6.5.4 (dependabot[bot])
* 2021-05-07 [f9c0c1c](https://github.com/silverstripe/silverstripe-versioned-admin/commit/f9c0c1c22b5e83cf9d9170782e94223c2a9c2f2c) Bump url-parse from 1.4.7 to 1.5.1 (dependabot[bot])
* 2021-05-07 [6e411b5](https://github.com/silverstripe/silverstripe-versioned-admin/commit/6e411b56e3be83f37328036c0dd87bcffcb855c0) Bump handlebars from 4.7.6 to 4.7.7 (dependabot[bot])
* 2021-05-06 [c168356](https://github.com/silverstripe/silverstripe-versioned-admin/commit/c1683567d54be9577680661d1ac5bfbb236751d7) Bump ua-parser-js from 0.7.20 to 0.7.28 (dependabot[bot])
* 2021-03-30 [e58a8c0](https://github.com/silverstripe/silverstripe-versioned-admin/commit/e58a8c08888ed93b10c7e4c93afc3a3e513f1eaf) Bump y18n from 3.2.1 to 3.2.2 (dependabot[bot])
* 2020-12-31 [2f728b2](https://github.com/silverstripe/silverstripe-versioned-admin/commit/2f728b27e2855177f7e40efa06520194fe0e2354) Bump npm from 6.13.7 to 6.14.10 (dependabot[bot])
* silverstripe/cms (4.8.0 -&gt; 4.9.0)
* 2021-08-08 [1d2c4a21](https://github.com/silverstripe/silverstripe-cms/commit/1d2c4a21a755b9714193d9407e9fdb2954a4a5c1) Bump ws from 5.2.2 to 5.2.3 (dependabot[bot])
* 2021-05-14 [83e32a1f](https://github.com/silverstripe/silverstripe-cms/commit/83e32a1fe37edbc13d3e041691c35ec204737e63) Bump elliptic from 6.5.3 to 6.5.4 (dependabot[bot])
* 2021-05-12 [ac78336f](https://github.com/silverstripe/silverstripe-cms/commit/ac78336f1fac77ef0a29879d0764baf9070ce234) Bump merge from 1.2.1 to 2.1.1 (dependabot[bot])
* 2021-03-30 [26aba134](https://github.com/silverstripe/silverstripe-cms/commit/26aba13496a2700a063c4f63b18d52bba90cbb08) Bump y18n from 3.2.1 to 3.2.2 (dependabot[bot])
* silverstripe/versioned (1.8.0 -&gt; 1.9.0)
* 2021-05-24 [04d339b](https://github.com/silverstripe/silverstripe-versioned/commit/04d339b1fdfcb86f7cd46fb04ef6dfbad1bb39eb) Require-dev graphql ^3.5 or ^4 (Steve Boyd)
* silverstripe/session-manager (0.1.1 -&gt; 1.1.0)
* 2021-06-10 [036ba44](https://github.com/silverstripe/silverstripe-session-manager/commit/036ba44f4d9fce432f5dbef323a491dd6f3bc9a7) Bump css-what from 5.0.0 to 5.0.1 (dependabot[bot])
* 2021-06-10 [603dc5d](https://github.com/silverstripe/silverstripe-session-manager/commit/603dc5d7870db3fbe8a4e1fb8f3af96f4120fd27) Bump ws from 5.2.2 to 5.2.3 (dependabot[bot])
* silverstripe/login-forms (4.4.1 -&gt; 4.5.0)
* 2021-06-06 [179ad13](https://github.com/silverstripe/silverstripe-login-forms/commit/179ad13a0b7f8dc38619fe1e584b894ba8047ced) Bump ws from 6.2.1 to 6.2.2 (dependabot[bot])
* 2021-03-30 [0f68703](https://github.com/silverstripe/silverstripe-login-forms/commit/0f687032ce77d192406d847f1645d01743b694fb) Bump y18n from 3.2.1 to 3.2.2 (dependabot[bot])
* silverstripe/recipe-authoring-tools (1.8.0 -&gt; 1.9.0)
* 2021-08-29 [9f53596](https://github.com/silverstripe/recipe-authoring-tools/commit/9f53596ad73775eebc68012e5bca100b25f4017d) Update dependency versions (Steve Boyd)
* 2021-05-18 [c68cc2a](https://github.com/silverstripe/recipe-authoring-tools/commit/c68cc2a3d11940bc7447155b3ce1a59dbcc51a8f) Update dependencies for CMS 4.8 (#11) (Andre Kiste)
* silverstripe/tagfield (2.6.0 -&gt; 2.7.0)
* 2021-08-05 [068df7e](https://github.com/silverstripe/silverstripe-tagfield/commit/068df7e190d6b955c01bdc2b667b324793b0f7c2) Bump ini from 1.3.5 to 1.3.8 (dependabot[bot])
* 2021-08-05 [f996bba](https://github.com/silverstripe/silverstripe-tagfield/commit/f996bbab90c2fc5692355ff961d1503a1835b7bd) Bump ws from 5.2.2 to 5.2.3 (dependabot[bot])
* 2021-08-05 [1273c72](https://github.com/silverstripe/silverstripe-tagfield/commit/1273c728e58d77e912d276c002dc737eaf5258d5) Bump https-proxy-agent from 2.2.2 to 2.2.4 (dependabot[bot])
* 2021-05-10 [bb59a75](https://github.com/silverstripe/silverstripe-tagfield/commit/bb59a7562271ed2da87ae2669efe0470ba412824) Bump hosted-git-info from 2.8.8 to 2.8.9 (dependabot[bot])
* 2021-05-09 [7b289cc](https://github.com/silverstripe/silverstripe-tagfield/commit/7b289cca43d68567ee3af6e0b8836351e8f2ac7c) Bump lodash from 4.17.20 to 4.17.21 (dependabot[bot])
* 2021-05-08 [f685681](https://github.com/silverstripe/silverstripe-tagfield/commit/f685681fb3bb346f4c1ffa8016bc115fec587c92) Bump url-parse from 1.4.7 to 1.5.1 (dependabot[bot])
* 2021-05-07 [476e657](https://github.com/silverstripe/silverstripe-tagfield/commit/476e657971b522ca8231f95effca50f69e4aff82) Bump handlebars from 4.5.3 to 4.7.7 (dependabot[bot])
* 2021-05-07 [281e237](https://github.com/silverstripe/silverstripe-tagfield/commit/281e237eadea28b0f58b50a312ebc4f032510716) Bump ua-parser-js from 0.7.20 to 0.7.28 (dependabot[bot])
* 2021-03-30 [6406f21](https://github.com/silverstripe/silverstripe-tagfield/commit/6406f215c8c75f7b5d36157b9b8a6758e8580694) Bump y18n from 3.2.1 to 3.2.2 (dependabot[bot])
* 2021-03-09 [b11b434](https://github.com/silverstripe/silverstripe-tagfield/commit/b11b434cf51f4b74da61df81fb112a3094d3b2c0) Bump elliptic from 6.5.3 to 6.5.4 (dependabot[bot])
* 2020-10-16 [3427bd4](https://github.com/silverstripe/silverstripe-tagfield/commit/3427bd4ef76866d5b75f02c83c95f24ffa1df548) Bump npm-user-validate from 1.0.0 to 1.0.1 (dependabot[bot])
* silverstripe/recipe-blog (1.8.0 -&gt; 1.9.0)
* 2021-08-29 [ba5d424](https://github.com/silverstripe/recipe-blog/commit/ba5d424b81d06b5939e527645551b40eedf02e26) Update dependency versions (Steve Boyd)
* 2021-05-18 [aa6b6ab](https://github.com/silverstripe/recipe-blog/commit/aa6b6abaddaf5b3aa7fa67d2b8ac3d22840cdc2e) Update dependencies for CMS 4.8 (#22) (Andre Kiste)
* silverstripe/blog (3.7.0 -&gt; 3.8.0)
* 2021-06-06 [3a11155](https://github.com/silverstripe/silverstripe-blog/commit/3a11155ff40b32b51df2df1b13953ea3217deee7) Bump ws from 6.2.1 to 6.2.2 (dependabot[bot])
* 2021-05-15 [5e90a4a](https://github.com/silverstripe/silverstripe-blog/commit/5e90a4a606bd4651ad90baa3e18eb8a67487f258) Bump npm from 6.13.0 to 6.14.13 (dependabot[bot])
* 2021-05-14 [fde34fe](https://github.com/silverstripe/silverstripe-blog/commit/fde34fe80aafd9de19eabf45f3e2086e99550ba9) Bump hosted-git-info from 2.8.5 to 2.8.9 (dependabot[bot])
* 2021-05-14 [8f507d6](https://github.com/silverstripe/silverstripe-blog/commit/8f507d60eace33ece04190a434e87ca915d4748f) Bump y18n from 3.2.1 to 3.2.2 (dependabot[bot])
* 2021-05-14 [a5d1bb9](https://github.com/silverstripe/silverstripe-blog/commit/a5d1bb97ba1c59211773c6835c1e8e819396678a) Bump npm-registry-fetch from 4.0.2 to 4.0.7 (dependabot[bot])
* 2021-05-14 [04e2d42](https://github.com/silverstripe/silverstripe-blog/commit/04e2d42a4d06147b6bc61197d38070e4fa2a049f) Bump node-sass from 4.13.0 to 4.14.1 (dependabot[bot])
* 2021-04-07 [d7c4ad9](https://github.com/silverstripe/silverstripe-blog/commit/d7c4ad9a1be1d01b10be08d729b99bc2c52bcebf) Bump ini from 1.3.5 to 1.3.8 (dependabot[bot])
* 2021-04-07 [0a98ad2](https://github.com/silverstripe/silverstripe-blog/commit/0a98ad234c3f315ff24471b4b0d5727a328e2506) Bump bin-links from 1.1.3 to 1.1.8 (dependabot[bot])
* 2021-04-07 [b85e65b](https://github.com/silverstripe/silverstripe-blog/commit/b85e65bd3b1e5ac9dec1d8354d87fe2868fed179) Bump dot-prop from 4.2.0 to 4.2.1 (dependabot[bot])
* 2021-04-07 [5ecb37f](https://github.com/silverstripe/silverstripe-blog/commit/5ecb37f2c6f9ebf65aac765ae876ba4b4732b136) Bump elliptic from 6.5.3 to 6.5.4 (dependabot[bot])
* silverstripe/comments (3.5.0 -&gt; 3.6.0)
* 2021-06-05 [3a41303](https://github.com/silverstripe/silverstripe-comments/commit/3a4130302ddc4fdd20935044f4e659c7b813c7b6) Bump ws from 6.2.1 to 6.2.2 (dependabot[bot])
* 2021-05-10 [a4eeec4](https://github.com/silverstripe/silverstripe-comments/commit/a4eeec4bba3e8b23bd5bc1adaff14bf92115282e) Bump hosted-git-info from 2.8.8 to 2.8.9 (dependabot[bot])
* silverstripe/recipe-collaboration (1.8.0 -&gt; 1.9.0)
* 2021-08-29 [61a51a7](https://github.com/silverstripe/recipe-collaboration/commit/61a51a7797c6f822e8fac4b75538e4de4b6693cf) Update dependency versions (Steve Boyd)
* silverstripe/contentreview (4.2.0 -&gt; 4.3.0)
* 2021-08-08 [53209b9](https://github.com/silverstripe/silverstripe-contentreview/commit/53209b99db2f990890ef62016cb9e5d50e312c2e) Bump tar from 2.2.1 to 2.2.2 (dependabot[bot])
* 2021-08-05 [21aebc4](https://github.com/silverstripe/silverstripe-contentreview/commit/21aebc40febc79c1348ded0261511507d71020db) Bump node-sass from 4.5.3 to 4.14.1 (dependabot[bot])
* 2021-08-05 [aa019ea](https://github.com/silverstripe/silverstripe-contentreview/commit/aa019ea7ff1030480021a76a42b429deb06bc74b) Bump ini from 1.3.4 to 1.3.8 (dependabot[bot])
* 2021-05-14 [63e500e](https://github.com/silverstripe/silverstripe-contentreview/commit/63e500e0831f507b5e928f8cac4170b0bbefec07) Bump is-my-json-valid from 2.16.1 to 2.20.5 (dependabot[bot])
* 2021-05-12 [ce9ae1d](https://github.com/silverstripe/silverstripe-contentreview/commit/ce9ae1d0bef5db7b1fc4670165fcc7e751536b91) Bump merge from 1.2.0 to 1.2.1 (dependabot[bot])
* 2021-05-10 [497e8eb](https://github.com/silverstripe/silverstripe-contentreview/commit/497e8eb6c5e7e44df338de8043e0b3d7e9c1ccee) Bump hosted-git-info from 2.5.0 to 2.8.9 (dependabot[bot])
* 2021-05-07 [9c4b558](https://github.com/silverstripe/silverstripe-contentreview/commit/9c4b5586fe2dedaf9e19bfaec956b686b95bad29) Bump ua-parser-js from 0.7.14 to 0.7.28 (dependabot[bot])
* 2021-03-30 [30cf99e](https://github.com/silverstripe/silverstripe-contentreview/commit/30cf99ebe2be4fcd5600d4324b4e394d1d628433) Bump y18n from 3.2.1 to 3.2.2 (dependabot[bot])
* 2021-03-09 [4944a14](https://github.com/silverstripe/silverstripe-contentreview/commit/4944a142416d482f3d62eb3de411f07956a4b82a) Bump elliptic from 6.4.0 to 6.5.4 (dependabot[bot])
* silverstripe/sharedraftcontent (2.4.0 -&gt; 2.5.0)
* 2021-08-08 [a9858b5](https://github.com/silverstripe/silverstripe-sharedraftcontent/commit/a9858b591f5adf921114e7164957fd6d241f5294) Bump node-sass from 4.13.0 to 4.14.1 (dependabot[bot])
* 2021-08-08 [3906f66](https://github.com/silverstripe/silverstripe-sharedraftcontent/commit/3906f66de6882ac456ec5ca2a2f53542dce569bc) Bump url-parse from 1.4.7 to 1.5.3 (dependabot[bot])
* 2021-08-08 [a2d44cd](https://github.com/silverstripe/silverstripe-sharedraftcontent/commit/a2d44cd6443a20e566d2a27bc35206078350fd66) Bump ua-parser-js from 0.7.20 to 0.7.28 (dependabot[bot])
* 2021-08-05 [be19319](https://github.com/silverstripe/silverstripe-sharedraftcontent/commit/be19319c90a3ec4b587fb78e84950a257f7ec698) Bump npm from 6.13.4 to 6.14.14 (dependabot[bot])
* 2021-06-06 [a5ab724](https://github.com/silverstripe/silverstripe-sharedraftcontent/commit/a5ab7243464a7664c6721502c660ee38dd3914aa) Bump ws from 6.2.1 to 6.2.2 (dependabot[bot])
* 2021-05-10 [ac34e5b](https://github.com/silverstripe/silverstripe-sharedraftcontent/commit/ac34e5b52181e3ecc8cd8f0d1832001f508e923b) Bump hosted-git-info from 2.8.5 to 2.8.9 (dependabot[bot])
* 2021-05-09 [00e7219](https://github.com/silverstripe/silverstripe-sharedraftcontent/commit/00e7219306070501b2a99d01be7acbedc1658b3c) Bump lodash from 4.17.15 to 4.17.21 (dependabot[bot])
* 2021-03-30 [6372b33](https://github.com/silverstripe/silverstripe-sharedraftcontent/commit/6372b33ce4e671088cc97b78d2cb9ee9dc5a659e) Bump y18n from 3.2.1 to 3.2.2 (dependabot[bot])
* 2021-03-09 [bafecb1](https://github.com/silverstripe/silverstripe-sharedraftcontent/commit/bafecb130f41eea339e91251b7f67ff70403df3d) Bump elliptic from 6.5.1 to 6.5.4 (dependabot[bot])
* symbiote/silverstripe-advancedworkflow (5.4.0 -&gt; 5.5.0)
* 2021-08-04 [5a86ab1](https://github.com/symbiote/silverstripe-advancedworkflow/commit/5a86ab1c82a2d00eb2a68f050f31d40186a0a39e) Bump tar from 2.2.1 to 2.2.2 (dependabot[bot])
* 2021-05-14 [e78b63e](https://github.com/symbiote/silverstripe-advancedworkflow/commit/e78b63ec85e3df9366defbf80a3cf2fca57cd7d1) Bump ini from 1.3.5 to 1.3.8 (dependabot[bot])
* 2021-03-30 [c90dcad](https://github.com/symbiote/silverstripe-advancedworkflow/commit/c90dcad5e359658a4b362d596d6c49cf2f1a7ec5) Bump y18n from 3.2.1 to 3.2.2 (dependabot[bot])
* 2021-03-09 [2aa7257](https://github.com/symbiote/silverstripe-advancedworkflow/commit/2aa725704d27461972a3a98683b8b79fa913a15c) Bump elliptic from 6.5.3 to 6.5.4 (dependabot[bot])
* silverstripe/recipe-form-building (1.8.0 -&gt; 1.9.0)
* 2021-09-05 [6d5ab6a](https://github.com/silverstripe/recipe-form-building/commit/6d5ab6ae2bf0930c58665b32f2518cd9609479ce) Update dependency versions (Steve Boyd)
* 2021-05-18 [ac80737](https://github.com/silverstripe/recipe-form-building/commit/ac80737b65ee06ecb3091f423b11d225bfd21ea5) Update dependencies for CMS 4.8 (#11) (Andre Kiste)
* silverstripe/segment-field (2.3.0 -&gt; 2.4.0)
* 2021-06-05 [bbadba6](https://github.com/silverstripe/silverstripe-segment-field/commit/bbadba6f1ab29237c27b08b63b31c16307a500d5) Bump ws from 6.2.1 to 6.2.2 (dependabot[bot])
* 2021-05-10 [b073ad0](https://github.com/silverstripe/silverstripe-segment-field/commit/b073ad08a58ec5944183dd4ad2d66b6b823151f9) Bump hosted-git-info from 2.8.8 to 2.8.9 (dependabot[bot])
* 2021-05-09 [8c9484b](https://github.com/silverstripe/silverstripe-segment-field/commit/8c9484b40a1980aabe0f1990c85fba497fbabff2) Bump lodash from 4.17.20 to 4.17.21 (dependabot[bot])
* 2021-04-30 [b771e34](https://github.com/silverstripe/silverstripe-segment-field/commit/b771e34b637618e82ee25667c01ee0f85722f57c) Bump ssri from 6.0.1 to 6.0.2 (dependabot[bot])
* 2021-03-30 [e834d80](https://github.com/silverstripe/silverstripe-segment-field/commit/e834d80064f2a3220ed37a351f83f710ddce7df6) Bump y18n from 3.2.1 to 3.2.2 (dependabot[bot])
* 2021-03-09 [f710cbd](https://github.com/silverstripe/silverstripe-segment-field/commit/f710cbd4ab2d23ac8eec93bb5033dd9639f816a4) Bump elliptic from 6.5.3 to 6.5.4 (dependabot[bot])
* silverstripe/userforms (5.9.0 -&gt; 5.10.0)
* 2021-06-05 [9c1f935](https://github.com/silverstripe/silverstripe-userforms/commit/9c1f93543312290dd5df529e5033b5f9fa8f086b) Bump ws from 6.2.1 to 6.2.2 (dependabot[bot])
* 2021-05-14 [19a185d](https://github.com/silverstripe/silverstripe-userforms/commit/19a185d86abcd529bbb4b83750a253d575244c4a) Bump lodash from 4.17.20 to 4.17.21 (dependabot[bot])
* 2021-05-14 [e866b09](https://github.com/silverstripe/silverstripe-userforms/commit/e866b09376fcf0a1bfdd67c66845a1b1aa27ae74) Bump hosted-git-info from 2.8.5 to 2.8.9 (dependabot[bot])
* 2021-05-14 [9fcfe23](https://github.com/silverstripe/silverstripe-userforms/commit/9fcfe23f7fbee41803d6c04c8bdd6d79c9792046) Bump elliptic from 6.5.3 to 6.5.4 (dependabot[bot])
* 2021-03-30 [78a49b9](https://github.com/silverstripe/silverstripe-userforms/commit/78a49b9d492407aa2d428dea8cda674a21f91ecf) Bump y18n from 3.2.1 to 3.2.2 (dependabot[bot])
* 2021-03-11 [f1fb087](https://github.com/silverstripe/silverstripe-userforms/commit/f1fb087812f95145a04bf82902fc68addf3f91e8) Bump npm from 6.13.4 to 6.14.11 (dependabot[bot])
* silverstripe/recipe-reporting-tools (1.8.0 -&gt; 1.9.0)
* 2021-08-29 [67a9cfd](https://github.com/silverstripe/recipe-reporting-tools/commit/67a9cfd2a09b9a6c209641d94fccc1e97f9aa020) Update dependency versions (Steve Boyd)
* silverstripe/recipe-services (1.8.0 -&gt; 1.9.0)
* 2021-08-29 [c370c86](https://github.com/silverstripe/recipe-authoring-tools/commit/c370c8674eb67722d12665f0dba9c39597ff6dac) Update dependency versions (Steve Boyd)
* silverstripe/recipe-content-blocks (2.8.0 -&gt; 2.9.0)
* 2021-08-29 [228f0c1](https://github.com/silverstripe/recipe-content-blocks/commit/228f0c13d9a67d629e27d595b5caf9e342e3cab7) Update dependency versions (Steve Boyd)
* 2021-08-25 [3b9b5ff](https://github.com/silverstripe/recipe-content-blocks/commit/3b9b5ff6c354e43d18163bae8b8250125589ce1f) Update recipe content block to always release Elemental (Maxime Rainville)
* 2021-05-19 [16b88df](https://github.com/silverstripe/recipe-content-blocks/commit/16b88df9da7d996c54f7b538b3101f437f46dc45) Update dependencies for CMS 4.8 (#14) (Andre Kiste)
* dnadesign/silverstripe-elemental (4.6.0 -&gt; 4.7.0)
* 2021-04-19 [bff02b0](https://github.com/silverstripe/silverstripe-elemental/commit/bff02b0798a13b3c82afeb11efbedad74c06a094) Bump ssri from 6.0.1 to 6.0.2 (dependabot[bot])
* 2020-12-11 [058b0ce](https://github.com/silverstripe/silverstripe-elemental/commit/058b0ce1a90e45167892f557ee81649027f5aac0) Bump ini from 1.3.5 to 1.3.7 (dependabot[bot])
* silverstripe/elemental-fileblock (2.1.2 -&gt; 2.2.0)
* 2021-01-26 [1958c77](https://github.com/silverstripe/silverstripe-elemental-fileblock/commit/1958c774024be2f8b0f6c45e8698d31fa42458d2) PHP8 Support, remove branch alias (Steve Boyd)
* silverstripe/elemental-bannerblock (2.2.1 -&gt; 2.3.0)
* 2021-03-30 [56d3784](https://github.com/silverstripe/silverstripe-elemental-bannerblock/commit/56d37842b74b31a481e3c35c5faeb632ad185ecc) Bump y18n from 3.2.1 to 3.2.2 (dependabot[bot])
* silverstripe/recipe-solr-search (2.8.0 -&gt; 2.9.0)
* 2021-09-05 [653e8d1](https://github.com/silverstripe/recipe-solr-search/commit/653e8d1089c2818bda1a96c84279f2693a59bd95) Update dependency versions (Steve Boyd)
* 2021-05-18 [5b1b134](https://github.com/silverstripe/recipe-solr-search/commit/5b1b13413483f6eee6a290a523bb3487547d631d) Update dependencies for CMS 4.8 (Andre Kiste)
* silverstripe/totp-authenticator (4.1.1 -&gt; 4.2.0)
* 2021-08-05 [0b08f28](https://github.com/silverstripe/silverstripe-totp-authenticator/commit/0b08f28150357ec053babb7697526f796adfe3e9) Bump ws from 5.2.2 to 5.2.3 (dependabot[bot])
* 2021-05-14 [c4f4fe1](https://github.com/silverstripe/silverstripe-totp-authenticator/commit/c4f4fe16567820dc180ce0e40e16bbf4ac20a2da) Bump lodash from 4.17.20 to 4.17.21 (dependabot[bot])
* 2021-05-10 [58cfa12](https://github.com/silverstripe/silverstripe-totp-authenticator/commit/58cfa12b500e3f3e9028b038d245feb5b83afbff) Bump hosted-git-info from 2.8.8 to 2.8.9 (dependabot[bot])
* 2021-05-07 [4568894](https://github.com/silverstripe/silverstripe-totp-authenticator/commit/4568894bec83500cbf3e6727740b6acb6c86d303) Bump handlebars from 4.5.1 to 4.7.7 (dependabot[bot])
* 2021-03-30 [8b13f4a](https://github.com/silverstripe/silverstripe-totp-authenticator/commit/8b13f4a69fefce784a5d85d3be98ef643c3cf761) Bump y18n from 3.2.1 to 3.2.2 (dependabot[bot])
* 2021-03-09 [09a2e13](https://github.com/silverstripe/silverstripe-totp-authenticator/commit/09a2e13d06239bcfad5b06db5dbd088cb9e0e2dc) Bump elliptic from 6.5.3 to 6.5.4 (dependabot[bot])
* 2020-12-11 [5f52065](https://github.com/silverstripe/silverstripe-totp-authenticator/commit/5f52065a3d90e14c14348ead27a91fc6f2b38af8) Bump ini from 1.3.5 to 1.3.7 (dependabot[bot])
* 2020-11-11 [c5fd81f](https://github.com/silverstripe/silverstripe-totp-authenticator/commit/c5fd81feb4991ab0bd0b368204886e3fac7ac031) Bump dot-prop from 4.2.0 to 4.2.1 (dependabot[bot])
* silverstripe/mfa (4.3.0 -&gt; 4.4.0)
* 2021-08-05 [f31c85a](https://github.com/silverstripe/silverstripe-mfa/commit/f31c85a02f632ee53bd6dd7f39cb88f74801b6cf) Bump ws from 5.2.2 to 5.2.3 (dependabot[bot])
* 2021-05-14 [5cf337d](https://github.com/silverstripe/silverstripe-mfa/commit/5cf337d5f9dd46c44936da790946fff3a47192a5) Bump ini from 1.3.5 to 1.3.8 (dependabot[bot])
* 2021-05-11 [638148f](https://github.com/silverstripe/silverstripe-mfa/commit/638148fc60fa7f46b92b98d2ca66e14d5eaef9cf) Bump hosted-git-info from 2.8.8 to 2.8.9 (dependabot[bot])
* 2021-05-11 [52ce62f](https://github.com/silverstripe/silverstripe-mfa/commit/52ce62f1ed0baa35473e17e975052bf99906fae8) Bump lodash from 4.17.20 to 4.17.21 (dependabot[bot])
* 2021-05-09 [35eb656](https://github.com/silverstripe/silverstripe-mfa/commit/35eb6568fd3d511a9ff8ad3e43d2148cc546361c) Bump handlebars from 4.7.6 to 4.7.7 (dependabot[bot])
* 2021-05-07 [2667e73](https://github.com/silverstripe/silverstripe-mfa/commit/2667e73abb0e6891e917498aefc2870eda6e92cc) Bump ua-parser-js from 0.7.20 to 0.7.28 (dependabot[bot])
* 2021-04-01 [6dadc43](https://github.com/silverstripe/silverstripe-mfa/commit/6dadc43d6d2dd345e6f4a5c8d6f627620447d705) Bump y18n from 3.2.1 to 3.2.2 (dependabot[bot])
* 2021-03-10 [dfc08a5](https://github.com/silverstripe/silverstripe-mfa/commit/dfc08a5b23733d6e61326dbbda23446581ca727f) Bump elliptic from 6.5.3 to 6.5.4 (dependabot[bot])
* silverstripe/crontask (2.2.0 -&gt; 2.3.0)
* 2021-08-05 [2ccad81](https://github.com/silverstripe/silverstripe-crontask/commit/2ccad81a4e4e4e4d29eae288c631988eba994aa4) php 8 requirement too narrow (Steve Boyd)
* silverstripe/ckan-registry (1.2.0 -&gt; 1.3.0)
* 2021-05-10 [66b90b8](https://github.com/silverstripe/silverstripe-ckan-registry/commit/66b90b844ad6a5f7ef0bca4d946f30be2f30270f) Bump hosted-git-info from 2.8.5 to 2.8.9 (dependabot[bot])
* 2021-05-07 [38b6e34](https://github.com/silverstripe/silverstripe-ckan-registry/commit/38b6e340c5cabe3bca4d9a45c4008eab76a75b49) Bump url-parse from 1.4.7 to 1.5.1 (dependabot[bot])
* 2021-05-07 [e75e844](https://github.com/silverstripe/silverstripe-ckan-registry/commit/e75e844922cf0fb05d75d87a7ae029ee8e6d2c5b) Bump handlebars from 4.5.1 to 4.7.7 (dependabot[bot])
* 2021-05-06 [da3ab3a](https://github.com/silverstripe/silverstripe-ckan-registry/commit/da3ab3ae97ccd7ee728974ff97d69b670eeed6d4) Bump ua-parser-js from 0.7.20 to 0.7.28 (dependabot[bot])
* 2021-03-30 [973429b](https://github.com/silverstripe/silverstripe-ckan-registry/commit/973429bb461366ba3b8a519d4337c23226350676) Bump y18n from 3.2.1 to 3.2.2 (dependabot[bot])
* 2021-03-09 [adc04ba](https://github.com/silverstripe/silverstripe-ckan-registry/commit/adc04ba7a6d6aedab188a43a905b25637daa6814) Bump elliptic from 6.5.1 to 6.5.4 (dependabot[bot])
* 2020-06-06 [8e56dbb](https://github.com/silverstripe/silverstripe-ckan-registry/commit/8e56dbb7e197a3b326ddcf72ab87ada1a813408c) Bump websocket-extensions from 0.1.3 to 0.1.4 (dependabot[bot])
* silverstripe/webauthn-authenticator (4.2.0 -&gt; 4.3.0)
* 2021-08-05 [6d4eea7](https://github.com/silverstripe/silverstripe-webauthn-authenticator/commit/6d4eea7fa75d1c68a5421c1c989f46adc0f26332) Bump ws from 5.2.2 to 5.2.3 (dependabot[bot])
* 2021-05-10 [4b48b24](https://github.com/silverstripe/silverstripe-webauthn-authenticator/commit/4b48b243f495c42220d4ee8f0d481a1086796e5a) Bump hosted-git-info from 2.8.8 to 2.8.9 (dependabot[bot])
* 2021-05-08 [23033b1](https://github.com/silverstripe/silverstripe-webauthn-authenticator/commit/23033b18cdc04cb69f7e3be62356b20a250b5d67) Bump lodash from 4.17.20 to 4.17.21 (dependabot[bot])
* 2021-05-07 [32e9eab](https://github.com/silverstripe/silverstripe-webauthn-authenticator/commit/32e9eabaf8121445808c4bdaeef8c17c4efc0921) Bump handlebars from 4.7.6 to 4.7.7 (dependabot[bot])
* 2021-03-30 [5ee0fa1](https://github.com/silverstripe/silverstripe-webauthn-authenticator/commit/5ee0fa10db8901c40b6d2cae8dd20d6aa859ab8c) Bump y18n from 3.2.1 to 3.2.2 (dependabot[bot])
* 2021-03-09 [1414320](https://github.com/silverstripe/silverstripe-webauthn-authenticator/commit/1414320cb920ea93c3f9b5a402a3b48378f58716) Bump elliptic from 6.5.3 to 6.5.4 (dependabot[bot])
* silverstripe/recipe-ccl (2.8.0 -&gt; 2.9.0)
* 2021-05-19 [630511b](https://github.com/silverstripe/recipe-ccl/commit/630511b020be1c3401ab7a137dd7f4e8f19c04b3) Update dependencies for CMS 4.8 (#19) (Andre Kiste)
### Documentation
* silverstripe/assets (1.8.0 -&gt; 1.9.0)
* 2021-03-19 [4064bb0](https://github.com/silverstripe/silverstripe-assets/commit/4064bb0463404bb573b804acc829ec4883b14245) Update PHPDoc for Upload_Validator::setAllowedMaxFileSize to reflect that a string can be provided (Maxime Rainville)
* silverstripe/framework (4.8.0 -&gt; 4.9.0)
* 2021-09-06 [00e29758f](https://github.com/silverstripe/silverstripe-framework/commit/00e29758ff7a1caf31e65ab41791b7b89c4a6ffc) Add information regarding Security::setCurrentUser() (Steve Boyd)
* 2021-08-26 [b38b27fad](https://github.com/silverstripe/silverstripe-framework/commit/b38b27fad7fba0b54b5b0d90b4e31f482fbe3e37) Add SwiftMailer to changelog (Steve Boyd)
* 2021-08-23 [a2f850d65](https://github.com/silverstripe/silverstripe-framework/commit/a2f850d65f09a9ac52643d3d62353d6acc5fce64) Add email section to server requirements (Steve Boyd)
* 2021-08-18 [c59ef273e](https://github.com/silverstripe/silverstripe-framework/commit/c59ef273e2b2a514eea79004a1328020f335aa05) incorrect php version reference (brynwhyman)
* 2021-08-17 [2838625a0](https://github.com/silverstripe/silverstripe-framework/commit/2838625a090987aa2a4877a63c204084f3cbb8c6) Add extra detail to the Image Lazy Loading doc (#10049) (Maxime Rainville)
* 2021-08-15 [e78a93588](https://github.com/silverstripe/silverstripe-framework/commit/e78a93588b8e3a04f0bc3b56a4d7d8f3f9ea3c21) Add session-manager to changelog (Steve Boyd)
* 2021-08-10 [0128bbd80](https://github.com/silverstripe/silverstripe-framework/commit/0128bbd80471c8ea91aabb04c021173853a4d25b) core committer onboarding proccess (brynwhyman)
* 2021-08-04 [0c998fc5c](https://github.com/silverstripe/silverstripe-framework/commit/0c998fc5ceedc0db0bf7f7f420609faae165f708) Add Michal Kleiner as core committer (Aaron Carlino)
* 2021-07-17 [c8c7ee4a0](https://github.com/silverstripe/silverstripe-framework/commit/c8c7ee4a0858a1fd4be4900f184d3180a3075dd8) better docblock for TinyMCEConfig::removeButtons (Nicolaas)
* 2021-06-30 [fdbd89976](https://github.com/silverstripe/silverstripe-framework/commit/fdbd89976628a150de403b8a55166c9aaa8298b2) Update SilverStripe to Silverstripe CMS (Michael Pritchard)
* 2021-06-30 [29320841c](https://github.com/silverstripe/silverstripe-framework/commit/29320841c91ef9797397086e32b35c6bb11c72bc) improve graphql inheritance docs (Aaron Carlino)
* 2021-06-30 [0537e769f](https://github.com/silverstripe/silverstripe-framework/commit/0537e769fc4868c71a9e1da9ad0bb72787eee90a) Fix line break (Aaron Carlino)
* 2021-06-30 [f3e1cd459](https://github.com/silverstripe/silverstripe-framework/commit/f3e1cd45997929156ba8c85e859e19fa00547b01) new union and interface inheritance pattern (#9912) (Aaron Carlino)
* 2021-06-24 [b5a1024b1](https://github.com/silverstripe/silverstripe-framework/commit/b5a1024b139b22e0c1c0113b2716623ad3c60738) update SilverStripe to Silverstripe (Michael Pritchard)
* 2021-06-22 [53ef257ff](https://github.com/silverstripe/silverstripe-framework/commit/53ef257ff483233a66090e13f072cf9ce1adeaf9) update SilverStripe to Silverstripe (Michael Pritchard)
* 2021-06-08 [ecd58cbc6](https://github.com/silverstripe/silverstripe-framework/commit/ecd58cbc6972cf2a0fa2ab726ebe8cc88b36f0ab) Remove stray 3.x changelogs (Ingo Schommer)
* 2021-06-08 [f1f946296](https://github.com/silverstripe/silverstripe-framework/commit/f1f946296164191b4e4b03c64872f409eb955644) Add recipe version (Steve Boyd)
* 2021-06-08 [1fc1e71bb](https://github.com/silverstripe/silverstripe-framework/commit/1fc1e71bbff3606f1e49a3259edf42a28dc5a587) Tweak 4.8.0 changelog GraphQL entry (Maxime Rainville)
* 2021-06-08 [d5d9f4fd4](https://github.com/silverstripe/silverstripe-framework/commit/d5d9f4fd413502e70640c6b25bc47a3a471af552) Changelog for 4.8.0 (Steve Boyd)
* 2021-06-01 [fa3c5e6fe](https://github.com/silverstripe/silverstripe-framework/commit/fa3c5e6fea795d9d8c283c655f0932f0858cd334) Clearer sysadmin guidance for &amp;quot;packaging&amp;quot; (#9960) (Ingo Schommer)
* 2021-06-01 [6e13600a8](https://github.com/silverstripe/silverstripe-framework/commit/6e13600a884e90b08d33c61f9d0524f36648ecf4) Update pattern library link to point to new repo (Maxime Rainville)
* 2021-05-20 [8c9e203f1](https://github.com/silverstripe/silverstripe-framework/commit/8c9e203f1e337f803717f7e6b92587bc8c0ca417) 4.9.0 changelog with dot notation changes (Ingo Schommer)
* 2021-05-20 [99c56fc91](https://github.com/silverstripe/silverstripe-framework/commit/99c56fc913369f12b33f24cd1bcb8fd261189bb6) Handling nested form data (Ingo Schommer)
* silverstripe/versioned-admin (1.8.0 -&gt; 1.9.0)
* 2020-10-01 [936a54f](https://github.com/silverstripe/silverstripe-versioned-admin/commit/936a54fdc5a8e2b67f06dd92f68248ace0e2284a) include userhelp link in versioned readme (brynwhyman)
* silverstripe/session-manager (0.1.1 -&gt; 1.1.0)
* 2021-08-11 [2bedbc9](https://github.com/silverstripe/silverstripe-session-manager/commit/2bedbc9a633f8f51b39a7549d03cb7ad1e91f869) Move userhelp to silverstripe-userhelp-content (Steve Boyd)
* 2021-06-27 [ad3deb7](https://github.com/silverstripe/silverstripe-session-manager/commit/ad3deb73c263d0a40dead4318cc325668bb6b52e) Add userhelp for session manager (Andre Kiste)
* silverstripe/recipe-content-blocks (2.8.0 -&gt; 2.9.0)
* 2021-08-25 [01fd174](https://github.com/silverstripe/recipe-content-blocks/commit/01fd1746a75fe524845633788f8d78d05c4af2c2) Remove reference to SilverStripe and CWP (Maxime Rainville)
### Other changes
* silverstripe/recipe-kitchen-sink (4.8.0 -&gt; 4.9.0)
* 2021-08-25 [2361535](https://github.com/silverstripe/recipe-kitchen-sink/commit/23615358a2a1f88200ab03caed3fd72a431ed6f7) Loosen contstrain for release (Maxime Rainville)
* 2021-08-25 [cfeb879](https://github.com/silverstripe/recipe-kitchen-sink/commit/cfeb879866880cb9fe836ab67c1ae775cc8462ab) Set up changelog (Maxime Rainville)
* silverstripe/assets (1.8.0 -&gt; 1.9.0)
* 2021-07-16 [627be98](https://github.com/silverstripe/silverstripe-assets/commit/627be983b2abc6cfa377d3b8a9d7d76e02a317d9) PATCH: fix docblock for FIle::find (Nicolaas)
* 2021-07-08 [576fd35](https://github.com/silverstripe/silverstripe-assets/commit/576fd352f91679abec98904c7603f2fb3cbfd4a4) Remove ability to set loading state with &amp;#039;eager&amp;#039;/&amp;#039;lazy&amp;#039; string (Maxime Rainville)
* 2021-07-06 [f0695d2](https://github.com/silverstripe/silverstripe-assets/commit/f0695d2c3e77c542ced0372613adde5b6f0cb992) Update pre-existing test to work with new image syntax (Maxime Rainville)
* 2021-07-06 [bc7a718](https://github.com/silverstripe/silverstripe-assets/commit/bc7a7182c8d2d7c3b3271a881d13ae89b2966244) Tweak casting settings (Maxime Rainville)
* 2021-07-06 [c0844ea](https://github.com/silverstripe/silverstripe-assets/commit/c0844ea4273a9b9878aa102c3ecc4e594bd6204d) Silly typo fix (Maxime Rainville)
* silverstripe/config (1.1.0 -&gt; 1.2.0)
* 2021-01-21 [dbadfe5](https://github.com/silverstripe/silverstripe-config/commit/dbadfe5d85dc412818b09e7371d8213921af35dc) Update build status badge (Steve Boyd)
* 2020-12-06 [480475f](https://github.com/silverstripe/silverstripe-config/commit/480475f1dcc1aae979a363476f9c73469bee4a9f) Use stable for topsort (Steve Boyd)
* silverstripe/framework (4.8.0 -&gt; 4.9.0)
* 2021-10-05 [d66b64b6a](https://github.com/silverstripe/silverstripe-framework/commit/d66b64b6aebf605a2f1bc94ae2a82010b1af56c4) Update translations (Maxime Rainville)
* 2021-08-26 [5ee6fa5ef](https://github.com/silverstripe/silverstripe-framework/commit/5ee6fa5ef204e19494dd6d8dcc51c3f42c2fd9a9) Update translations (Maxime Rainville)
* 2021-08-22 [c8d1b4988](https://github.com/silverstripe/silverstripe-framework/commit/c8d1b49880066829c83884d8435cd6a8a50098ac) Adding spider food for SEO purposes. (Patrick Nelson)
* 2021-08-06 [6e8a39056](https://github.com/silverstripe/silverstripe-framework/commit/6e8a3905619d85e1b1b2dbf84296d5cb084b5e3f) Change SilverStripe to Silverstripe CMS (Michael Pritchard (HEIW))
* 2021-08-02 [cacd76235](https://github.com/silverstripe/silverstripe-framework/commit/cacd7623574969fb30586f39d40962be25b14205) Avoid &amp;quot;new&amp;quot; keyword to instantiate CompositeValidator (GuySartorelli)
* 2021-07-13 [3e2ca3027](https://github.com/silverstripe/silverstripe-framework/commit/3e2ca3027ba178bfe73a1b84ac23c1aff4497150) destroy session on logout instead of restarting it (Florian Thoma)
* 2021-07-08 [03b43227a](https://github.com/silverstripe/silverstripe-framework/commit/03b43227a5b484bcc3a9eac8340c73a28477e664) Update 02_Images.md (Steve Boyd)
* 2021-07-01 [8225b2e89](https://github.com/silverstripe/silverstripe-framework/commit/8225b2e890e752f593ba1285bed05c0ed4816943) Update 02_Images.md (Andre Kiste)
* 2021-06-25 [b6d12bc14](https://github.com/silverstripe/silverstripe-framework/commit/b6d12bc1440df7d08fad1cfeed9056682679f742) Add docs for lazy loading (André Kiste)
* 2021-06-21 [62a74e97c](https://github.com/silverstripe/silverstripe-framework/commit/62a74e97ccb94a780a9906077bf93249c38eaf31) Instructions Memcached change (Remy Vaartjes)
* 2021-05-31 [843671d10](https://github.com/silverstripe/silverstripe-framework/commit/843671d108f16ed8e46257d8ac330e3309970ab8) [doc] Add additional information required to run the test (Pen y Fan)
* 2021-05-31 [bba872e02](https://github.com/silverstripe/silverstripe-framework/commit/bba872e02ce34e18a7533e734db76dd875d35f67) [doc] Update to Silverstripe 4 convention (Pen y Fan)
* 2021-05-31 [44c30aea2](https://github.com/silverstripe/silverstripe-framework/commit/44c30aea2d48e347c539622f9df67ee3f2e00b8e) META: Publish docs on updates to 3 branch, not 3.7 (Aaron Carlino)
* 2021-05-20 [7a0d35452](https://github.com/silverstripe/silverstripe-framework/commit/7a0d354529a46e1b9542714a29fcd4805d224eab) Linter fixes (Ingo Schommer)
* 2021-05-20 [8806b3bef](https://github.com/silverstripe/silverstripe-framework/commit/8806b3befc447c7d6e0a26452bdab314b66229c1) Fixes required for dot notation support in fields (Ingo Schommer)
* 2021-05-19 [ebdbbfd59](https://github.com/silverstripe/silverstripe-framework/commit/ebdbbfd5955cf2ae3b3e26f660d0472971b2a58f) Update 04_Shortcodes.md (chromos33)
* 2021-05-16 [3a49759c0](https://github.com/silverstripe/silverstripe-framework/commit/3a49759c0fe9034d57d2dfae38a35c9e06c8c97d) Update 09_Casting.md (Manuel Thalmann)
* 2021-05-16 [293f7e9d0](https://github.com/silverstripe/silverstripe-framework/commit/293f7e9d0506e5e20097513bdf936be0dc1c2395) Update 06_Themes.md (Manuel Thalmann)
* 2021-05-16 [0d649e0dd](https://github.com/silverstripe/silverstripe-framework/commit/0d649e0dd84481f470ad3839bf040faa3126bbdd) Update 05_Template_Inheritance.md (Manuel Thalmann)
* 2021-05-16 [deb767d9f](https://github.com/silverstripe/silverstripe-framework/commit/deb767d9fcb662fcc5cd89ca892c847dbaab34f0) Update 03_Requirements.md (Manuel Thalmann)
* 2021-05-16 [64d569ee0](https://github.com/silverstripe/silverstripe-framework/commit/64d569ee0200e8d7bcb5b824fc019f3840c9d841) Update 02_Common_Variables.md (Manuel Thalmann)
* 2021-05-16 [a1ace4229](https://github.com/silverstripe/silverstripe-framework/commit/a1ace422949ce1843fb1709e1542d1e50455b544) Update 01_Syntax.md (Manuel Thalmann)
* 2021-05-16 [c3ff7a417](https://github.com/silverstripe/silverstripe-framework/commit/c3ff7a417bb83f1d7c97aa8a1c699eeecbd5d451) Update index.md (Manuel Thalmann)
* 2021-05-14 [4de89323f](https://github.com/silverstripe/silverstripe-framework/commit/4de89323f7e8c2454a9659bd158c79f77cc3d27f) Update Grouping_DataObject_Sets.md (Manuel Thalmann)
* 2021-05-14 [e37188da4](https://github.com/silverstripe/silverstripe-framework/commit/e37188da4cb52488037d95d1102ae2d6312cbf2f) Revert unnecessary change (Manuel Thalmann)
* 2021-05-14 [4f57bd94d](https://github.com/silverstripe/silverstripe-framework/commit/4f57bd94decc36d048928e99a370115358d3d959) Apply further suggestion (Manuel Thalmann)
* 2021-05-14 [42f0957bd](https://github.com/silverstripe/silverstripe-framework/commit/42f0957bd53e99806b58a494ccc6dd46778ce113) Update Dynamic_Default_Fields.md (Manuel Thalmann)
* 2021-05-14 [ff7654db1](https://github.com/silverstripe/silverstripe-framework/commit/ff7654db1f4ec82cf2479c6da1df41348d345bc3) Update 11_Scaffolding.md (Manuel Thalmann)
* 2021-05-14 [b0cdff361](https://github.com/silverstripe/silverstripe-framework/commit/b0cdff361931a92a97ec6d7109df4fdb4c961c51) Apply suggestions (Manuel Thalmann)
* 2021-05-14 [ac7cbef6b](https://github.com/silverstripe/silverstripe-framework/commit/ac7cbef6b91fe183568f0b1aeb1c2a60c764996d) Update 10_Versioning.md (Manuel Thalmann)
* 2021-05-14 [ff9fc2846](https://github.com/silverstripe/silverstripe-framework/commit/ff9fc284689dd2a369e781ca70efa252a9a6f02a) Update 08_SQL_Select.md (Manuel Thalmann)
* 2021-05-13 [ed50c1b94](https://github.com/silverstripe/silverstripe-framework/commit/ed50c1b94e172cadd518421a9187821066e06df4) Update docs/en/02_Developer_Guides/00_Model/02_Relations.md (Manuel Thalmann)
* 2021-05-13 [8c0efd398](https://github.com/silverstripe/silverstripe-framework/commit/8c0efd39804c2e918ff577d0736aa6236121d1b9) Extension hooks for CsvBulkLoader (Ingo Schommer)
* 2021-05-11 [e7e586b8c](https://github.com/silverstripe/silverstripe-framework/commit/e7e586b8c3d3a23b5f7d4462445b1d391677e737) Update 01_Validation.md (Daniel Pina)
* 2021-05-05 [b6a31d922](https://github.com/silverstripe/silverstripe-framework/commit/b6a31d9229fb79cd6711bdbdf8a58a02320be0d8) Update 01_ModelAdmin.md (Daniel Pina)
* 2020-09-21 [23ffd2bbd](https://github.com/silverstripe/silverstripe-framework/commit/23ffd2bbd6bd38f553c2675e7351fa8492926508) Linting fix (Dan Hensby)
* silverstripe/mimevalidator (2.1.1 -&gt; 2.2.0)
* 2021-08-26 [3597100](https://github.com/silverstripe/silverstripe-mimevalidator/commit/35971005ed12d2fd4e1a3397fa645df51d9180aa) Update translations (Maxime Rainville)
* 2021-07-30 [0dbebc3](https://github.com/silverstripe/silverstripe-mimevalidator/commit/0dbebc33c77c774b1d3fc1a2ce798483f1450e06) Add PHP-8 support for CSV mime type (Ralph Slooten)
* 2021-01-21 [a998d50](https://github.com/silverstripe/silverstripe-mimevalidator/commit/a998d50ab6799669a7ca082a7332cfb19a2b8000) Update build status badge (Steve Boyd)
* 2020-11-26 [a424d03](https://github.com/silverstripe/silverstripe-mimevalidator/commit/a424d03d36ec68505ba3cdcf91af623f9b73cc19) Revert translation updates (Steve Boyd)
* silverstripe/admin (1.8.0 -&gt; 1.9.0)
* 2021-10-05 [792a634](https://github.com/silverstripe/silverstripe-admin/commit/792a634a6d310a007dd1617054c4f6b7c91184d6) Update translations (Maxime Rainville)
* 2021-08-26 [5610053](https://github.com/silverstripe/silverstripe-admin/commit/5610053072553f0a57e42874f7854bd5a230b855) Update translations (Maxime Rainville)
* 2021-07-01 [a4a4cbe](https://github.com/silverstripe/silverstripe-admin/commit/a4a4cbe7758b744c369863df3b4b906cb3f004e3) Update CMSDialog.ss (Thomas Portelange)
* 2021-05-24 [1f9c2fc](https://github.com/silverstripe/silverstripe-admin/commit/1f9c2fc927fa763b735bf52eb11722313c31bb64) Remove broken versioneye badgets (Ingo Schommer)
* silverstripe/asset-admin (1.8.0 -&gt; 1.9.0)
* 2021-10-05 [7a5d3a10](https://github.com/silverstripe/silverstripe-asset-admin/commit/7a5d3a10027e83abed88ad420d76055628f2472b) Update translations (Maxime Rainville)
* 2021-08-26 [762afeb0](https://github.com/silverstripe/silverstripe-asset-admin/commit/762afeb06bdd908bb2ffdb25b566d6fd2cf68f08) Update translations (Maxime Rainville)
* silverstripe/campaign-admin (1.8.0 -&gt; 1.9.0)
* 2021-08-05 [5733dff](https://github.com/silverstripe/silverstripe-campaign-admin/commit/5733dff1577b7963896b4aa08b4c92473a812808) Add hook (#205) (Alex Saelens)
* silverstripe/versioned-admin (1.8.0 -&gt; 1.9.0)
* 2021-10-05 [96309ac](https://github.com/silverstripe/silverstripe-versioned-admin/commit/96309ac90db6ad7dd0e16a4feadb9b245528a87e) Update translations (Maxime Rainville)
* 2021-08-26 [b0bb6df](https://github.com/silverstripe/silverstripe-versioned-admin/commit/b0bb6dffcc279ea0aa82850606a4507eaa46ce2f) Update translations (Maxime Rainville)
* silverstripe/cms (4.8.0 -&gt; 4.9.0)
* 2021-10-05 [9f7262f9](https://github.com/silverstripe/silverstripe-cms/commit/9f7262f99daccda72ac3f95b30e4386c6b78569a) Update translations (Maxime Rainville)
* 2021-08-26 [8cbc6d21](https://github.com/silverstripe/silverstripe-cms/commit/8cbc6d2110f1366538250b0e8461917bb866e52b) Update translations (Maxime Rainville)
* 2021-07-16 [10e2c1f2](https://github.com/silverstripe/silverstripe-cms/commit/10e2c1f271468a9665d1d107b0ff0244ec23aa38) PATCH: docblock for return value fixed for get_by_link (Nicolaas)
* 2021-05-24 [8438bf98](https://github.com/silverstripe/silverstripe-cms/commit/8438bf98ec10381d267ec40dd8f94404c83425f2) Remove broken versioneye badges (Ingo Schommer)
* 2021-05-07 [ed4ff6ea](https://github.com/silverstripe/silverstripe-cms/commit/ed4ff6eadc846de9bc20cbe5d6a5255a510264c2) BUGFIX: Ensure SiteTree is always available in the CMS, along with ancestors (Aaron Carlino)
* 2021-04-06 [85c3b109](https://github.com/silverstripe/silverstripe-cms/commit/85c3b1096b42934fdc2cb4c943bd0313bd84d6fa) UPDATE generate canonical via MetaComponents (Nic Horstmeier)
* silverstripe/errorpage (1.8.0 -&gt; 1.9.0)
* 2021-10-05 [b4c948b](https://github.com/silverstripe/silverstripe-errorpage/commit/b4c948be5393790cb29c41102556e1629e4efb76) Update translations (Maxime Rainville)
* 2021-08-26 [8716194](https://github.com/silverstripe/silverstripe-errorpage/commit/871619482b616f06f1ccbb5b0da2148f24189141) Update translations (Maxime Rainville)
* silverstripe/siteconfig (4.8.0 -&gt; 4.9.0)
* 2021-08-26 [7ea7072c](https://github.com/silverstripe/silverstripe-siteconfig/commit/7ea7072c3a16a26bea806053aa804d5b16ae3522) Update translations (Maxime Rainville)
* 2021-07-20 [01fc2218](https://github.com/silverstripe/silverstripe-siteconfig/commit/01fc2218c15f5644b8700e270cb5ca570a798e10) Add an extension point to customise/override returned current site config (Michal Kleiner)
* silverstripe/versioned (1.8.0 -&gt; 1.9.0)
* 2021-09-07 [c97131a](https://github.com/silverstripe/silverstripe-versioned/commit/c97131a9ec0b3fa2e7bdf6277597822093127ecb) BUGFIX: Ensure scalar plugin is assigned to Version field (Aaron Carlino)
* 2021-08-26 [ee5b708](https://github.com/silverstripe/silverstripe-versioned/commit/ee5b7085bc6fc1a3c88a8cd80e1b1b091b016438) Update translations (Maxime Rainville)
* 2021-06-24 [32b7282](https://github.com/silverstripe/silverstripe-versioned/commit/32b7282cbf5100dc56919698c5cef28c0204fd33) Ensure versioning is applied before inheritance (Aaron Carlino)
* 2021-05-24 [c6ca052](https://github.com/silverstripe/silverstripe-versioned/commit/c6ca0529c15ae4ed1b245a2f851e85f69fb15da8) Remove broken versioneye badges (Ingo Schommer)
* silverstripe/graphql (3.5.0 -&gt; 3.6.0)
* 2021-08-11 [90570dc](https://github.com/silverstripe/silverstripe-graphql/commit/90570dc0e24c3fddd2f5a6b3386794566293ff0d) BUGFIX: Replace graceful failure of field access on dataobjects (#399) (Aaron Carlino)
* 2021-05-07 [f70d296](https://github.com/silverstripe/silverstripe-graphql/commit/f70d29681066b05d153c94be56d2a1e2645b5922) BUGFIX: Ensure referential equality of two connection types in new GraphQL 4 compatible node/edges implementation (Aaron Carlino)
* silverstripe/session-manager (0.1.1 -&gt; 1.1.0)
* 2021-10-05 [fbf5aac](https://github.com/silverstripe/silverstripe-session-manager/commit/fbf5aacef4d1d920ea0503470f2f2e7d3944f943) Update translations (Maxime Rainville)
* 2021-08-26 [f227681](https://github.com/silverstripe/silverstripe-session-manager/commit/f22768100e90929b69d90c7be593437ec0361359) Update translations (Maxime Rainville)
* 2021-06-28 [5e14993](https://github.com/silverstripe/silverstripe-session-manager/commit/5e1499383594131de51e8ba072830e005de88ce8) Downscale image (André Kiste)
* 2021-06-28 [cada525](https://github.com/silverstripe/silverstripe-session-manager/commit/cada525dff10ab2161a762d73d36512de9991d50) Build docs on 1 instead of master (Andre Kiste)
* 2021-06-15 [268facc](https://github.com/silverstripe/silverstripe-session-manager/commit/268facc3946db16dd7836848da91656c5be20aba) Refer to sessions correctly, instead of devices. (#71) (Andre Kiste)
* 2021-06-08 [7852e7a](https://github.com/silverstripe/silverstripe-session-manager/commit/7852e7a4dab5af27bc4ca2830ec20c2ea1600a23) Improve transition when removing login sessions (André Kiste)
* silverstripe/login-forms (4.4.1 -&gt; 4.5.0)
* 2021-10-05 [e6e23a8](https://github.com/silverstripe/silverstripe-login-forms/commit/e6e23a817ebaf4b39777e02898f0d63e9b7476be) Update translations (Maxime Rainville)
* 2021-08-26 [451169f](https://github.com/silverstripe/silverstripe-login-forms/commit/451169fa35dbd12dd2aef5b97d36b2c606674ca2) Update translations (Maxime Rainville)
* 2021-06-17 [f0e5dbe](https://github.com/silverstripe/silverstripe-login-forms/commit/f0e5dbef3306a2113a3a43444ccc1811fc6b988c) Remove the help link (André Kiste)
* silverstripe/blog (3.7.0 -&gt; 3.8.0)
* 2021-10-05 [41bf421](https://github.com/silverstripe/silverstripe-blog/commit/41bf42184376d28aa7673a000936dc6a52908a43) Update translations (Maxime Rainville)
* 2021-08-26 [bb574c7](https://github.com/silverstripe/silverstripe-blog/commit/bb574c7ed3dda6951860bdb84e4078b1f54a5a02) Update translations (Maxime Rainville)
* silverstripe/contentreview (4.2.0 -&gt; 4.3.0)
* 2021-05-14 [c89a759](https://github.com/silverstripe/silverstripe-contentreview/commit/c89a759af6920e3b3978463b7fb2fb83e5620cf1) Add test (Daniel Hensby)
* symbiote/silverstripe-advancedworkflow (5.4.0 -&gt; 5.5.0)
* 2021-07-19 [9f3a5f8](https://github.com/symbiote/silverstripe-advancedworkflow/commit/9f3a5f852582b20bbdf20f1a93d658d4ef0b0520) $this-&amp;amp;gt;extend() doesn&amp;#039;t exist, add extensible (azt3k)
* silverstripe/userforms (5.9.0 -&gt; 5.10.0)
* 2021-10-05 [aa4e892](https://github.com/silverstripe/silverstripe-userforms/commit/aa4e89257325449f888633a064e816ec69b4cec1) Update translations (Maxime Rainville)
* 2021-08-26 [62b726e](https://github.com/silverstripe/silverstripe-userforms/commit/62b726e5ca55867b4cb68aef28eddc5b05d8401b) Update translations (Maxime Rainville)
* 2021-07-19 [63a1d1d](https://github.com/silverstripe/silverstripe-userforms/commit/63a1d1deb2b659f1d1c752801e89b71dde5f615d) BUGFIX: Fixed issue causing the regex on windows to throw an error due to escaping of the parenthesis caused by DIRECTORY_SEPARATOR (UndefinedOffset)
* 2021-06-22 [80c3d2e](https://github.com/silverstripe/silverstripe-userforms/commit/80c3d2e686e9c05f6819c2930b870ce37fdf9cd7) Update de_DE.yml (chromos33)
* 2021-04-12 [b01d296](https://github.com/silverstripe/silverstripe-userforms/commit/b01d296c424036b689707743122221c7004a1dec) Avoids reply to address being set to empty, if reply to field value is empty (James Cocker)
* 2021-04-06 [34883ad](https://github.com/silverstripe/silverstripe-userforms/commit/34883adb120daadc276ce3fcf3cecaa6771ed4f2) Add testing (Bauke Zwaan)
* 2021-03-12 [fad372d](https://github.com/silverstripe/silverstripe-userforms/commit/fad372d4bae8224c245a5984c86dac34caafaa47) Only add attachments when HideFormData-setting is not set for this recipient (Bauke Zwaan)
* silverstripe/versionfeed (2.0.3 -&gt; 2.1.0)
* 2021-10-05 [52f303d](https://github.com/silverstripe/silverstripe-versionfeed/commit/52f303d4970b8668de26325dc4cdc8c0dced12dc) Update translations (Maxime Rainville)
* 2021-08-26 [b4ce6ca](https://github.com/silverstripe/silverstripe-versionfeed/commit/b4ce6caead42b146bb3bb9c8b655e8f5252bf149) Update translations (Maxime Rainville)
* 2021-01-21 [42ea538](https://github.com/silverstripe/silverstripe-versionfeed/commit/42ea538f0f3e6aae1e80aaa415f919ee98d43f82) Update build status badge (Steve Boyd)
* 2019-12-19 [8de3ec1](https://github.com/silverstripe/silverstripe-versionfeed/commit/8de3ec1dfce1a52ae8551bbd53770287b079dd36) META: Add github action to build docs (Aaron Carlino)
* 2018-06-15 [9065f82](https://github.com/silverstripe/silverstripe-versionfeed/commit/9065f82d795b7fe9934363c1f217f3a4892544e2) Add supported module badge to readme (Dylan Wagstaff)
* dnadesign/silverstripe-elemental (4.6.0 -&gt; 4.7.0)
* 2021-08-05 [cfddd7d](https://github.com/silverstripe/silverstripe-elemental/commit/cfddd7da0c111c385dc7277bcda001afe188448d) Patch 2 (#919) (Nicolaas)
* 2021-07-04 [e8dce69](https://github.com/silverstripe/silverstripe-elemental/commit/e8dce69b73fa5a1a47bf34cd5ab8daa191dee42e) BUGFIX: Ensure graphql3 compat in type name generation (#912) (Aaron Carlino)
* 2021-06-17 [2ca448b](https://github.com/silverstripe/silverstripe-elemental/commit/2ca448b0bc3be4e6787e53ec40ecfb3e8b9d88c7) Add config to disable the content search in ElementSiteTreeFilterSearch (Alexandre)
* 2021-05-19 [9035ae4](https://github.com/silverstripe/silverstripe-elemental/commit/9035ae40a2f1c3fd3b62f811a5425382dfe91282) ADD test for ignored_classes being respected when migrating content. (Guy Sartorelli)
* silverstripe/elemental-fileblock (2.1.2 -&gt; 2.2.0)
* 2021-10-05 [802878e](https://github.com/silverstripe/silverstripe-elemental-fileblock/commit/802878e2d12cb9e5035b3315c2e2137fb2e06411) Update translations (Maxime Rainville)
* 2021-01-21 [239da3b](https://github.com/silverstripe/silverstripe-elemental-fileblock/commit/239da3b5d404aae1e7ac00ed78c299e1833a0986) Update build status badge (Steve Boyd)
* silverstripe/elemental-bannerblock (2.2.1 -&gt; 2.3.0)
* 2021-10-05 [786ecab](https://github.com/silverstripe/silverstripe-elemental-bannerblock/commit/786ecabc61a30cfd976e276da1fe8ec88e1cf3f6) Update translations (Maxime Rainville)
* 2021-08-26 [6e41234](https://github.com/silverstripe/silverstripe-elemental-bannerblock/commit/6e412340a0544234ec958ff8bbbfc8b30d752618) Update translations (Maxime Rainville)
* 2021-01-21 [ffce72b](https://github.com/silverstripe/silverstripe-elemental-bannerblock/commit/ffce72b4a5a76a4aca5c0b5ddf3837fb9faafbd9) Update build status badge (Steve Boyd)
* 2021-01-19 [42d170b](https://github.com/silverstripe/silverstripe-elemental-bannerblock/commit/42d170bc8d4dd426c9147ff8f330853d4d451ed1) Require minimum recipe of 4.7.x-dev (Steve Boyd)
* silverstripe/totp-authenticator (4.1.1 -&gt; 4.2.0)
* 2021-08-26 [2250b46](https://github.com/silverstripe/silverstripe-totp-authenticator/commit/2250b4625f20b5de20536a4d4e757f42aa7d3629) Update translations (Maxime Rainville)
* 2021-01-21 [282eaaa](https://github.com/silverstripe/silverstripe-totp-authenticator/commit/282eaaafc1f5f12615788786b351a972c6c07523) Update build status badge (Steve Boyd)
* silverstripe/crontask (2.2.0 -&gt; 2.3.0)
* 2021-08-05 [5c123a9](https://github.com/silverstripe/silverstripe-crontask/commit/5c123a979e471284e75589b2de4ec25c0e4cc541) Update php constraint to ^7.1 || ^8 (Mason Dechaineux)
* silverstripe/gridfieldqueuedexport (2.4.0 -&gt; 2.5.0)
* 2021-06-08 [9f5396e](https://github.com/silverstripe/silverstripe-gridfieldqueuedexport/commit/9f5396e89609e99863b1933505967743ee1ddba0) Apply filters when exporting (ishan jayamanne)
* silverstripe/realme (4.1.0 -&gt; 4.1.1)
* 2021-04-26 [c0e1674](https://github.com/silverstripe/silverstripe-realme/commit/c0e16748c5d6e61c00fa9ae5e8d5705e58f72e2a) Update configuration.md (torleif)
* silverstripe/hybridsessions (2.2.1 -&gt; 2.3.0)
* 2021-01-21 [8ab99f7](https://github.com/silverstripe/silverstripe-hybridsessions/commit/8ab99f71c78dcfbc4e0054d8a7afe03b2b906174) Update build status badge (Steve Boyd)
* 2019-11-18 [f6a8f2a](https://github.com/silverstripe/silverstripe-hybridsessions/commit/f6a8f2a9861fcf21f2f815ea9199acb327b2d147) Update code style in CookieStore (Serge Latyntcev)
<!--- Changes above this line will be automatically regenerated -->

View File

@ -501,7 +501,7 @@ class TreeDropdownField extends FormField
// Begin marking
$markingSet->markPartialTree();
// Explicitely mark our search results if necessary
// Explicitly mark our search results if necessary
foreach ($this->searchIds as $id => $marked) {
if ($marked) {
$object = $this->objectForKey($id);

View File

@ -4,6 +4,8 @@ namespace SilverStripe\ORM\Hierarchy;
use SilverStripe\Admin\LeftAndMain;
use SilverStripe\Control\Controller;
use SilverStripe\Core\ClassInfo;
use SilverStripe\Core\Extensible;
use SilverStripe\ORM\DataList;
use SilverStripe\ORM\SS_List;
use SilverStripe\ORM\ValidationResult;
@ -28,7 +30,7 @@ class Hierarchy extends DataExtension
{
/**
* The lower bounds for the amount of nodes to mark. If set, the logic will expand nodes until it reaches at least
* this number, and then stops. Root nodes will always show regardless of this settting. Further nodes can be
* this number, and then stops. Root nodes will always show regardless of this setting. Further nodes can be
* lazy-loaded via ajax. This isn't a hard limit. Example: On a value of 10, with 20 root nodes, each having 30
* children, the actual node count will be 50 (all root nodes plus first expanded child).
*
@ -284,7 +286,7 @@ class Hierarchy extends DataExtension
/**
* Return the number of direct children. By default, values are cached after the first invocation. Can be
* augumented by {@link augmentNumChildrenCountQuery()}.
* augmented by {@link augmentNumChildrenCountQuery()}.
*
* @param bool $cache Whether to retrieve values from cache
* @return int
@ -320,7 +322,7 @@ class Hierarchy extends DataExtension
/**
* Pre-populate any appropriate caches prior to rendering a tree.
* This is used to allow for the efficient rendering of tree views, notably in the CMS.
* In the cace of Hierarchy, it caches numChildren values. Other extensions can provide an
* In the case of Hierarchy, it caches numChildren values. Other extensions can provide an
* onPrepopulateTreeDataCache(DataList $recordList = null, array $options) methods to hook
* into this event as well.
*
@ -333,7 +335,7 @@ class Hierarchy extends DataExtension
if (empty($options['numChildrenMethod']) || $options['numChildrenMethod'] === 'numChildren') {
$idList = is_array($recordList) ? $recordList :
($recordList instanceof DataList ? $recordList->column('ID') : null);
self::prepopulate_numchildren_cache($this->owner->baseClass(), $idList);
self::prepopulate_numchildren_cache($this->getHierarchyBaseClass(), $idList);
}
$this->owner->extend('onPrepopulateTreeDataCache', $recordList, $options);
@ -407,25 +409,47 @@ class Hierarchy extends DataExtension
&& in_array($controller->getAction(), ["treeview", "listview", "getsubtree"]);
}
/**
* Find the first class in the inheritance chain that has Hierarchy extension applied
*
* @return string
*/
private function getHierarchyBaseClass(): string
{
$ancestry = ClassInfo::ancestry($this->owner);
$ancestorClass = array_shift($ancestry);
while ($ancestorClass && !Extensible::has_extension($ancestorClass, self::class)) {
$ancestorClass = array_shift($ancestry);
}
return $ancestorClass;
}
/**
* Return children in the stage site.
*
* @param bool $showAll Include all of the elements, even those not shown in the menus. Only applicable when
* extension is applied to {@link SiteTree}.
* @param bool $skipParentIDFilter Set to true to supress the ParentID and ID where statements.
* @param bool $skipParentIDFilter Set to true to suppress the ParentID and ID where statements.
* @return DataList
*/
public function stageChildren($showAll = false, $skipParentIDFilter = false)
{
$hideFromHierarchy = $this->owner->config()->hide_from_hierarchy;
$hideFromCMSTree = $this->owner->config()->hide_from_cms_tree;
$baseClass = $this->owner->baseClass();
$baseTable = $this->owner->baseTable();
$staged = DataObject::get($baseClass)->where(sprintf(
/** @var DataObject|Hierarchy $owner */
$owner = $this->owner;
$hideFromHierarchy = $owner->config()->hide_from_hierarchy;
$hideFromCMSTree = $owner->config()->hide_from_cms_tree;
$class = $this->getHierarchyBaseClass();
$schema = DataObject::getSchema();
$tableForParentID = $schema->tableForField($class, 'ParentID');
$tableForID = $schema->tableForField($class, 'ID');
$staged = DataObject::get($class)->where(sprintf(
'%s.%s <> %s.%s',
Convert::symbol2sql($baseTable),
Convert::symbol2sql($tableForParentID),
Convert::symbol2sql("ParentID"),
Convert::symbol2sql($baseTable),
Convert::symbol2sql($tableForID),
Convert::symbol2sql("ID")
));
@ -466,7 +490,7 @@ class Hierarchy extends DataExtension
$hideFromHierarchy = $owner->config()->hide_from_hierarchy;
$hideFromCMSTree = $owner->config()->hide_from_cms_tree;
$children = DataObject::get($owner->baseClass())
$children = DataObject::get($this->getHierarchyBaseClass())
->filter('ParentID', (int)$owner->ID)
->exclude('ID', (int)$owner->ID)
->setDataQueryParam([

View File

@ -12,6 +12,8 @@ use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\Form;
use SilverStripe\Forms\TreeDropdownField;
use SilverStripe\ORM\DataObject;
use SilverStripe\ORM\Tests\HierarchyTest\HierarchyOnSubclassTestObject;
use SilverStripe\ORM\Tests\HierarchyTest\HierarchyOnSubclassTestSubObject;
use SilverStripe\ORM\Tests\HierarchyTest\TestObject;
class TreeDropdownFieldTest extends SapphireTest
@ -20,7 +22,9 @@ class TreeDropdownFieldTest extends SapphireTest
protected static $fixture_file = 'TreeDropdownFieldTest.yml';
protected static $extra_dataobjects = [
TestObject::class
TestObject::class,
HierarchyOnSubclassTestObject::class,
HierarchyOnSubclassTestSubObject::class,
];
public function testSchemaStateDefaults()
@ -52,7 +56,7 @@ class TreeDropdownFieldTest extends SapphireTest
{
$field = new TreeDropdownField('TestTree', 'Test tree', Folder::class);
// case insensitive search against keyword 'sub' for folders
// case-insensitive search against keyword 'sub' for folders
$request = new HTTPRequest('GET', 'url', ['search'=>'sub', 'format' => 'json']);
$request->setSession(new Session([]));
$response = $field->tree($request);
@ -83,7 +87,7 @@ class TreeDropdownFieldTest extends SapphireTest
{
$field = new TreeDropdownField('TestTree', 'Test tree', Folder::class);
// case insensitive search against keyword 'sub' for folders
// case-insensitive search against keyword 'sub' for folders
$request = new HTTPRequest('GET', 'url', ['search'=>'sub', 'format' => 'json', 'flatList' => '1']);
$request->setSession(new Session([]));
$response = $field->tree($request);
@ -137,11 +141,42 @@ class TreeDropdownFieldTest extends SapphireTest
$this->assertEquals($expectedNodeIDs, $actualNodeIDs);
}
public function testTreeSearchJsonFlatlistWithLowNodeThresholdUsingSubObject()
{
// Initialise our TreeDropDownField
$field = new TreeDropdownField('TestTree', 'Test tree - Hierarchy on subclass', HierarchyOnSubclassTestSubObject::class);
$field->config()->set('node_threshold_total', 2);
// Search for all Test object matching our criteria
$request = new HTTPRequest(
'GET',
'url',
['search' => 'SubObject', 'format' => 'json', 'flatList' => '1']
);
$request->setSession(new Session([]));
$response = $field->tree($request);
$tree = json_decode($response->getBody(), true);
$actualNodeIDs = array_column($tree['children'], 'id');
// Get the list of expected node IDs from the YML Fixture
$expectedNodeIDs = array_map(
function ($key) {
return $this->objFromFixture(HierarchyOnSubclassTestSubObject::class, $key)->ID;
},
['four', 'fourB', 'fourA2'] // Those are the identifiers of the object we expect our search to find
);
sort($actualNodeIDs);
sort($expectedNodeIDs);
$this->assertEquals($expectedNodeIDs, $actualNodeIDs);
}
public function testTreeSearch()
{
$field = new TreeDropdownField('TestTree', 'Test tree', Folder::class);
// case insensitive search against keyword 'sub' for folders
// case-insensitive search against keyword 'sub' for folders
$request = new HTTPRequest('GET', 'url', ['search'=>'sub']);
$request->setSession(new Session([]));
$response = $field->tree($request);
@ -179,7 +214,7 @@ class TreeDropdownFieldTest extends SapphireTest
$field = new TreeDropdownField('TestTree', 'Test tree', File::class);
// case insensitive search against keyword 'sub' for files
// case-insensitive search against keyword 'sub' for files
$request = new HTTPRequest('GET', 'url', ['search'=>'sub']);
$request->setSession(new Session([]));
$response = $field->tree($request);
@ -233,6 +268,39 @@ class TreeDropdownFieldTest extends SapphireTest
);
}
public function testTreeSearchUsingSubObject()
{
$field = new TreeDropdownField('TestTree', 'Test tree', HierarchyOnSubclassTestSubObject::class);
// case-insensitive search against keyword 'SubObject' for objects that have Hierarchy extension
// applied to a class that doesn't directly inherit from DataObject
$request = new HTTPRequest('GET', 'url', ['search' => 'SubObject']);
$request->setSession(new Session([]));
$response = $field->tree($request);
$tree = $response->getBody();
$subObject1 = $this->objFromFixture(HierarchyOnSubclassTestSubObject::class, 'four');
$subObject1ChildB = $this->objFromFixture(HierarchyOnSubclassTestSubObject::class, 'fourB');
$parser = new CSSContentParser($tree);
$cssPath = 'ul.tree li#selector-TestTree-' . $subObject1->ID . ' li#selector-TestTree-' . $subObject1ChildB->ID . ' a';
$firstResult = $parser->getBySelector($cssPath);
$this->assertEquals(
$subObject1ChildB->Name,
(string)$firstResult[0],
$subObject1ChildB->Name . ' is found, nested under ' . $subObject1->Name
);
// other objects which don't contain the keyword 'SubObject' are not returned in search results
$subObject2 = $this->objFromFixture(HierarchyOnSubclassTestSubObject::class, 'five');
$cssPath = 'ul.tree li#selector-TestTree-' . $subObject2->ID . ' a';
$noResult = $parser->getBySelector($cssPath);
$this->assertEmpty(
$noResult,
$subObject2 . ' is not found'
);
}
public function testReadonly()
{
$field = new TreeDropdownField('TestTree', 'Test tree', File::class);
@ -272,7 +340,7 @@ class TreeDropdownFieldTest extends SapphireTest
$treeBaseID = $this->idFromFixture(Folder::class, 'folder1');
$field = new TreeDropdownField('TestTree', 'Test tree', Folder::class);
// getSchemaDataDefaults needs the field to be attach to a form
// getSchemaDataDefaults needs the field to be attached to a form
new Form(
null,
'mock',

View File

@ -62,3 +62,29 @@ SilverStripe\ORM\Tests\HierarchyTest\TestObject:
ParentID: =>SilverStripe\ORM\Tests\HierarchyTest\TestObject.twoA
three:
Title: Three MatchSearchCriteria
SilverStripe\ORM\Tests\HierarchyTest\HierarchyOnSubclassTestSubObject:
four:
Title: Four SubObject
fourA:
Parent: =>SilverStripe\ORM\Tests\HierarchyTest\HierarchyOnSubclassTestSubObject.four
Title: Child A of Four
fourB:
Parent: =>SilverStripe\ORM\Tests\HierarchyTest\HierarchyOnSubclassTestSubObject.four
Title: Child B of Four SubObject
fourA1:
Parent: =>SilverStripe\ORM\Tests\HierarchyTest\HierarchyOnSubclassTestSubObject.fourA
Title: Child 1 of Child A of Four
fourA2:
Parent: =>SilverStripe\ORM\Tests\HierarchyTest\HierarchyOnSubclassTestSubObject.fourA
Title: Child 2 of Child A of Four SubObject
fourB1:
Parent: =>SilverStripe\ORM\Tests\HierarchyTest\HierarchyOnSubclassTestSubObject.fourB
Title: Child 1 of Child B of Four
fourB2:
Parent: =>SilverStripe\ORM\Tests\HierarchyTest\HierarchyOnSubclassTestSubObject.fourB
Title: Child 2 of Child B of Four
fourB3:
Parent: =>SilverStripe\ORM\Tests\HierarchyTest\HierarchyOnSubclassTestSubObject.fourB
Title: Child 3 of Child B of Four
five:
Title: Five

View File

@ -9,6 +9,8 @@ use SilverStripe\Versioned\Versioned;
use SilverStripe\ORM\Tests\HierarchyTest\TestObject;
use SilverStripe\ORM\Tests\HierarchyTest\HideTestObject;
use SilverStripe\ORM\Tests\HierarchyTest\HideTestSubObject;
use SilverStripe\ORM\Tests\HierarchyTest\HierarchyOnSubclassTestObject;
use SilverStripe\ORM\Tests\HierarchyTest\HierarchyOnSubclassTestSubObject;
/**
* @internal Only test the right values are returned, not that the cache is actually used.
@ -22,6 +24,8 @@ class HierachyCacheTest extends SapphireTest
TestObject::class,
HideTestObject::class,
HideTestSubObject::class,
HierarchyOnSubclassTestObject::class,
HierarchyOnSubclassTestSubObject::class
];
public function setUp()
@ -48,10 +52,10 @@ class HierachyCacheTest extends SapphireTest
[TestObject::class, 'obj2', true, 2, 'Root object numChildren should count direct children when cache'],
[TestObject::class, 'obj3a', false, 2, 'Sub object numChildren should count direct children'],
[TestObject::class, 'obj3a', true, 2, 'Sub object numChildren should count direct children when cache'],
[TestObject::class, 'obj3d', false, 0, 'Childess Sub object numChildren should be 0'],
[TestObject::class, 'obj3d', true, 0, 'Childess Sub object numChildren should be 0 when cache'],
[TestObject::class, 'obj3d', false, 0, 'Childless Sub object numChildren should be 0'],
[TestObject::class, 'obj3d', true, 0, 'Childless Sub object numChildren should be 0 when cache'],
[HideTestObject::class, 'obj4', false, 1, 'Hidden object should not be included in count'],
[HideTestObject::class, 'obj4', true, 1, 'Hidden object should not be included in couunt when cache']
[HideTestObject::class, 'obj4', true, 1, 'Hidden object should not be included in count when cache']
];
}
@ -68,7 +72,7 @@ class HierachyCacheTest extends SapphireTest
$this->assertEquals($expected, $actual, $message);
if ($cache) {
// When caching is eanbled, try re-accessing the numChildren value to make sure it doesn't change.
// When caching is enabled, try re-accessing the numChildren value to make sure it doesn't change.
$actual = $node->numChildren($cache);
$this->assertEquals($expected, $actual, $message);
}

View File

@ -14,6 +14,8 @@ class HierarchyTest extends SapphireTest
HierarchyTest\TestObject::class,
HierarchyTest\HideTestObject::class,
HierarchyTest\HideTestSubObject::class,
HierarchyTest\HierarchyOnSubclassTestObject::class,
HierarchyTest\HierarchyOnSubclassTestSubObject::class,
];
public static function getExtraDataObjects()
@ -145,6 +147,43 @@ class HierarchyTest extends SapphireTest
);
}
public function testNumChildrenHierarchyOnSubclass()
{
/** @var HierarchyTest\HierarchyOnSubclassTestObject $obj5 */
$obj5 = $this->objFromFixture(HierarchyTest\HierarchyOnSubclassTestObject::class, 'obj5');
$this->assertFalse(
$obj5->hasMethod('numChildren'),
'numChildren() cannot be called on object without Hierarchy extension'
);
/** @var HierarchyTest\HierarchyOnSubclassTestSubObject $obj5a */
$obj5a = $this->objFromFixture(HierarchyTest\HierarchyOnSubclassTestSubObject::class, 'obj5a');
/** @var HierarchyTest\HierarchyOnSubclassTestSubObject $obj5b */
$obj5b = $this->objFromFixture(HierarchyTest\HierarchyOnSubclassTestSubObject::class, 'obj5b');
$this->assertEquals(2, $obj5a->numChildren());
$this->assertEquals(1, $obj5b->numChildren());
$obj5bChild2 = new HierarchyTest\HierarchyOnSubclassTestSubObject();
$obj5bChild2->ParentID = $obj5b->ID;
$obj5bChild2->write();
$this->assertEquals(
$obj5b->numChildren(false),
2,
'numChildren() caching can be disabled through method parameter'
);
$obj5bChild3 = new HierarchyTest\HierarchyOnSubclassTestSubObject();
$obj5bChild3->ParentID = $obj5b->ID;
$obj5bChild3->write();
$obj5b->flushCache();
$this->assertEquals(
$obj5b->numChildren(),
3,
'numChildren() caching can be disabled by flushCache()'
);
}
public function testLoadDescendantIDListIntoArray()
{
/** @var HierarchyTest\TestObject $obj2 */
@ -219,7 +258,7 @@ class HierarchyTest extends SapphireTest
$this->assertEquals('Obj 2 &raquo; Obj 2a &raquo; Obj 2aa', $obj2aa->getBreadcrumbs());
}
public function testNoHideFromHeirarchy()
public function testNoHideFromHierarchy()
{
/** @var HierarchyTest\HideTestObject $obj4 */
$obj4 = $this->objFromFixture(HierarchyTest\HideTestObject::class, 'obj4');
@ -232,7 +271,7 @@ class HierarchyTest extends SapphireTest
$this->assertEquals($obj4->liveChildren()->Count(), 2);
}
public function testHideFromHeirarchy()
public function testHideFromHierarchy()
{
HierarchyTest\HideTestObject::config()->update(
'hide_from_hierarchy',

View File

@ -53,3 +53,20 @@ SilverStripe\ORM\Tests\HierarchyTest\HideTestObject:
SilverStripe\ORM\Tests\HierarchyTest\HideTestSubObject:
obj4b:
Parent: =>SilverStripe\ORM\Tests\HierarchyTest\HideTestObject.obj4
SilverStripe\ORM\Tests\HierarchyTest\HierarchyOnSubclassTestObject:
obj5:
Title: Obj 5
SilverStripe\ORM\Tests\HierarchyTest\HierarchyOnSubclassTestSubObject:
obj5a:
Title: Obj 5a
obj5b:
Title: Obj 5b
obj5aa:
Parent: =>SilverStripe\ORM\Tests\HierarchyTest\HierarchyOnSubclassTestSubObject.obj5a
Title: Obj 5aa
obj5ab:
Parent: =>SilverStripe\ORM\Tests\HierarchyTest\HierarchyOnSubclassTestSubObject.obj5a
Title: Obj 5ab
obj5ba:
Parent: =>SilverStripe\ORM\Tests\HierarchyTest\HierarchyOnSubclassTestSubObject.obj5b
Title: Obj 5ba

View File

@ -0,0 +1,30 @@
<?php
namespace SilverStripe\ORM\Tests\HierarchyTest;
use SilverStripe\Dev\TestOnly;
use SilverStripe\ORM\DataObject;
use SilverStripe\Versioned\Versioned;
/**
* @mixin Versioned
*/
class HierarchyOnSubclassTestObject extends DataObject implements TestOnly
{
private static $table_name = 'HierarchyOnSubclassTest_Object';
private static $db = [
'Title' => 'Varchar'
];
private static $extensions = [
Versioned::class,
];
private static $default_sort = 'Title ASC';
public function cmstreeclasses()
{
return $this->markingClasses();
}
}

View File

@ -0,0 +1,18 @@
<?php
namespace SilverStripe\ORM\Tests\HierarchyTest;
use SilverStripe\Dev\TestOnly;
use SilverStripe\ORM\Hierarchy\Hierarchy;
/**
* @mixin Hierarchy
*/
class HierarchyOnSubclassTestSubObject extends HierarchyOnSubclassTestObject implements TestOnly
{
private static $table_name = 'HierarchyOnSubclassTest_SubObject';
private static $extensions = [
Hierarchy::class,
];
}