silverstripe-framework/docs/en/04_Changelogs/4.1.0.md
Ingo Schommer 0a61f7ed16 DOCS Link to public folder instructions from 4.0.0 docs
It's far too common for people to follow 4.0.0, only to get surprised theres more to it
2018-06-15 16:20:57 +12:00

413 lines
41 KiB
Markdown

# 4.1.0
## Overview {#overview}
* Support for public webroot folder `public/`
* Better support for cross-platform filesystem path manipulation
## Upgrading
Note: if you receive an error message about an undefined constant while
upgrading with `composer`, re-running the command should solve the issue.
### Upgrade `public/` folder (optional) {#public-folder}
This release allows the maintenance of a public webroot folder which separates all
web-accessible files from protected project files (like the vendor folder
and all of your PHP files). This makes your web hosting more secure, and
less likely to leak information through accidentally deployed files like
a project README. New projects will default to this behaviour. Existing
projects (updating from 3.x or 4.0) will continue working as-is, but we
strongly recommend switching to the public webroot structure in order to
get the security benefits.
> This folder name is not configurable, but is turned on by creating this folder, and off by ensuring
this folder doesn't exist.
When separating the public webroot from the BASE_PATH it is necessary to move a few files during migration:
- Move your existing `.htaccess` from base to `public/`
- Update the `RewriteRule` directives in the `.htaccess` (check the [default .htaccess](https://github.com/silverstripe/recipe-core/blob/1.1/public/.htaccess))
- Create a new `.htaccess` in base that contains:
```
RewriteEngine On
RewriteRule ^(.*)$ public/$1
```
- Move `index.php` from base to `public/`
- If upgrading from 4.0, replace the [index.php](https://github.com/silverstripe/recipe-core/blob/1.1/public/index.php) file from `recipe-core` in order to fix autoloading paths
- Move `assets` folder (including the nested `assets/.protected` folder) into `public/`.
This is the only folder which needs write permissions.
- Ensure that the `public/resources` folder exists; If this folder already exists in root, you should
delete this, and re-generate it by running `composer vendor-expose` in your root path.
- Any public assets committed directly to your project intended to be served directly to the
webserver. E.g. move `mysite/javascript/script.js` to `public/javascript/script.js`.
You can then use `Requirements::css('javascript/script.js');` /
`<% require css('javascript/script.js') %>` to include this file.
- Ensure that the web-root configured for your server of choice points to the public/ folder instead of the base path.
E.g. an apache virtualhost configuration would look like:
```
<VirtualHost *:80>
ServerName mywebsite.com
ServerAlias *.mywebsite.com
VirtualDocumentRoot "/var/www/Sites/mywebsite/public/"
</VirtualHost>
```
You may also need to add various changes to your code if you reference the BASE_PATH directly:
- You should use `Director::publicFolder()` instead of `Director::baseFolder()` if referring to the
public folder.
- You can check if a public folder exists with `Director::publicDir()`
### Example `public/` folder structure {#public-folder-example}
For example, this is an existing folder structure:
```
/var/www/mysite
├── assets/
│ └── .protected/
├── mysite/
│ ├── code/
│ │ ├── Page.php
│ │ └── PageController.php
│ └── css/
│ └── projectstyle.css
├── resources/ _(auto-generated by vendor-plugin `composer vendor-expose` command)_
│ └── silverstripe/
│ └── blog/
│ └── css/ _(symlink)_
│ └── blog.css
├── themes/
│ └── mytheme/
│ ├── css/
│ │ └── theme.css
│ └── templates/
│ └── BlogPage.ss
├── vendor/
│ └── silverstripe/
│ └── blog/
│ ├── css/ _(exposed in blog composer.json)_
│ │ └── blog.css
│ └── composer.json
├── .htaccess
├── composer.json
├── favicon.ico
├── index.php
└── install.php
```
After migration the folder structure would look like:
```
/var/www/mysite
├── mysite/
│ └── code/
│ ├── Page.php
│ └── PageController.php
├── public/
│ ├── assets/
│ │ └── .protected/
│ ├── css/
│ │ └── somestyle.css
│ ├── resources/ _(auto-generated by vendor-plugin `composer vendor-expose` command)_
│ │ ├── themes/
│ │ │ └── mytheme/
│ │ │ └── css/ _(symlink)_
│ │ │ └── theme.css
│ │ └── vendor/
│ │ └── silverstripe/
│ │ └── blog/
│ │ └── css/ _(symlink)_
│ │ └── blog.css
│ ├── .htaccess
│ ├── favicon.ico
│ ├── index.php
│ └── install.php
├── themes/
│ └── mytheme/
│ ├── css/ _(exposed in root composer.json)_
│ │ └── theme.css
│ └── templates/
│ └── BlogPage.ss
├── vendor/
│ └── silverstripe/
│ └── blog/
│ ├── css/ _(exposed in blog composer.json)_
│ │ └── blog.css
│ └── composer.json
└── composer.php
```
### Use new `$public` theme set {#public-theme}
In addition there is a new helper pseudo-theme that you can configure to expose files in the `public/`
folder to the themed css / javascript file lookup. For instance, this is how you can prioritise those
files:
```yaml
---
Name: mytheme
---
SilverStripe\View\SSViewer:
themes:
- '$public'
- 'simple'
- '$default'
```
This would allow `<% require themedCSS('style.css') %>` to find a file comitted to `public/css/style.css`.
Note that `Requirements` calls will look in both the `public` folder (first) and then the base path when
resolving css or javascript files. Any files that aren't in the public folder must be exposed using
the composer.json "expose" mechanism described below.
### Expose root project files {#expose-root-files}
If you have files comitted to source control outside of the `public` folder, but you need them to be available
to the web server, you can also use the composer.json `expose` directive to symlink / copy these to `public/resources/`.
**composer.json** (in project root)
```json
{
"extra": {
"expose": [
"mysite/client"
]
}
}
```
You will also need to set your project `type` to `silverstripe-something`, for example `silverstripe-project` like so:
**composer.json** (in project root)
```json
{
"type": "silverstripe-project"
}
```
Then run the composer helper `composer vendor-expose` in your project root. This will symlink (or copy)
the `mysite/client` directory to `public/resources/mysite/client`.
If you are using third party modules which may not have explicit `expose` directives,
you can also expose those assets manually by declaring the full path to the directory to expose.
This works the same for `silverstripe-module` and `silverstripe-vendormodule` types.
```json
{
"extra": {
"expose": [
"vendor/somevendor/somemodule/css",
"anothermodule/css"
]
}
}
```
For more information on how vendor modules work please see the documentation on the
[vendor plugin page](https://github.com/silverstripe/vendor-plugin) or the
[publishing a module](/developer_guides/extending/how_tos/publish_a_module) documentation.
### Path manipulation helpers{#path-manipulation}
The following filesystem helpers have been added in order to better support working with cross-platform
path manipulation:
* `SilverStripe\Core\Convert::slashes()` to convert directory separators to either `/` or `\`
* `SilverStripe\Core\Path::join()` which will join one or more relative or absolute paths.
* `SilverStripe\Core\Path::normalise()` which will normalise and trim directory separators in a relative or absolute path
For example: normalising `Convert::normalise('/some\\dir/')` will convert to `/some/dir`.
Setting the second arg to true will also trim leading slashes.
E.g. `Convert::normalise('/sub\\dir/', true)` will convert to `sub/dir`.
It is preferrable to use these helpers in your code instead of assuming `DIRECTORY_SEPARATOR` === `/`
<!--- Changes below this line will be automatically regenerated -->
## Change Log
### API Changes
* 2018-02-13 [eed518b](https://github.com/silverstripe/silverstripe-assets/commit/eed518b00f9f8ea3e1785a82f0bcd3d69371f6ea) Shift TestAssetStore to non-test dev namespace to ensure this class is available for other modules (Damian Mooyman)
* 2018-02-01 [03cb478](https://github.com/silverstripe/silverstripe-asset-admin/commit/03cb4782a63d6ac50497dc9303e0da9ccf4faba5) Enable upload / attach options on UploadField to be individually toggled on or off (Damian Mooyman)
* 2018-01-30 [1b13072](https://github.com/silverstripe/silverstripe-versioned/commit/1b1307246d1a042213c49c203bece916d7b3b031) Ensure that duplications fail over to owned objects (Damian Mooyman)
* 2018-01-30 [aa2c71424](https://github.com/silverstripe/silverstripe-framework/commit/aa2c71424dbd4937abdcda63c37fca1ef56d3a51) Implement cascade_duplications (Damian Mooyman)
* 2018-01-22 [04050b275](https://github.com/silverstripe/silverstripe-framework/commit/04050b27538b6c3050ea4b66a6664a23f618f3b6) Director::host() now formally includes port in host (Damian Mooyman)
* 2018-01-18 [4b8140e](https://github.com/silverstripe/silverstripe-versioned/commit/4b8140e15e59a88b5908b6beb1523df7ca643c20) Refactor GridFieldVersionedState into versioned module (Damian Mooyman)
* 2018-01-18 [f4092f7bc](https://github.com/silverstripe/silverstripe-framework/commit/f4092f7bcf03b511816fcee695e5e3c036fc3219) Deprecate GridFieldVersionedState (Damian Mooyman)
* 2018-01-12 [8d077203d](https://github.com/silverstripe/silverstripe-framework/commit/8d077203d4d2a6f98b738f9c5f83e3264545677f) Implement support for public/ webroot folder (#7741) (Damian Mooyman)
* 2017-12-21 [8900298](https://github.com/silverstripe/silverstripe-assets/commit/890029813a73de5297397e3d432c9600c46e1e96) Support public/ webroot folder (Damian Mooyman)
* 2017-12-19 [b2ce6b4](https://github.com/silverstripe/recipe-core/commit/b2ce6b426703c2f75007745cc8459ab39c0c7112) Update to support public-files (Damian Mooyman)
* 2017-12-13 [c4ff8443b](https://github.com/silverstripe/silverstripe-framework/commit/c4ff8443bb1ea60a34d8eb941e6a5f368eb97635) Shift basic auth checking into middleware (Damian Mooyman)
* 2017-12-11 [c59c9e0](https://github.com/silverstripe/silverstripe-versioned/commit/c59c9e04cec808c2bc492cda32d840da1df84962) Split ownership and recursive publishing into RecursivePublishable (Damian Mooyman)
* 2017-12-11 [9170220d2](https://github.com/silverstripe/silverstripe-framework/commit/9170220d2c5f53a19ffc033f13c38f0b78931962) Add onAfterSave extension point to GridFieldDetailForm_ItemRequest (Damian Mooyman)
* 2017-11-27 [1fedc5fc](https://github.com/silverstripe/silverstripe-cms/commit/1fedc5fc10b6a1d2af417a051d7fe6bd8182b191) Make `CMSMain::getSiteTreeFor()` default to `null` nodeCount (#2029) (Lee Bradley)
* 2017-11-14 [f863573d1](https://github.com/silverstripe/silverstripe-framework/commit/f863573d1c2029be0414f352634adee3bc222663) Add getShortName to DBClassName (Damian Mooyman)
* 2017-11-07 [642cbdafc](https://github.com/silverstripe/silverstripe-framework/commit/642cbdafc8cf16d2ca48dcd0d51d5655f23ad664) Allow an array as a param to makeFieldReadOnly() (Reece Alexander)
### Features and Enhancements
* 2018-03-05 [32637413d](https://github.com/silverstripe/silverstripe-framework/commit/32637413deceb1a3c647fd51a78e1352e91ee15a) Improve upgrade rules to support advanced upgrader rewrites (#7903) (Damian Mooyman)
* 2018-03-05 [8c35e339](https://github.com/silverstripe/silverstripe-cms/commit/8c35e3391cf334917c5e314c6f1c459e9d06fbbc) Improve upgrade rules to support advanced upgrader rewrites (#2114) (Damian Mooyman)
* 2018-03-01 [61cfcc5](https://github.com/silverstripe/silverstripe-versioned/commit/61cfcc52a46895b6ff7fdb12956e01c48bfcf343) Improve upgrade rules to support advanced upgrader rewrites (Damian Mooyman)
* 2018-03-01 [e77e0f7](https://github.com/silverstripe/silverstripe-assets/commit/e77e0f758ed243a249c6056dbfc44f48b9fa535d) Improve upgrade rules to support advanced upgrader rewrites (Damian Mooyman)
* 2018-02-27 [aaf4f5a](https://github.com/silverstripe/silverstripe-asset-admin/commit/aaf4f5ad1b1160fc2dc0428d032617284e2b6f9c) expose extension point for item props in uploadfield (Christopher Joe)
* 2018-02-19 [9ebea37b](https://github.com/silverstripe/silverstripe-cms/commit/9ebea37b33d5d13ddf72a3dba4036cf5cf3209ad) Add extension point to CMSMain::Breadcrumbs (Robbie Averill)
* 2018-02-19 [1ae5f46](https://github.com/silverstripe/silverstripe-versioned/commit/1ae5f46409c03fa84da641c131ecea57dca8306c) Allow CMS breadcrumb badge to be extended (Robbie Averill)
* 2018-02-12 [9ce21338a](https://github.com/silverstripe/silverstripe-framework/commit/9ce21338a3083c80128c5923eab3d8b968f4dd83) composer.json missing notice (zanderwar)
* 2018-02-02 [dd225215](https://github.com/silverstripe/silverstripe-siteconfig/commit/dd2252156e6bb8450819a3cd544d31403acc060b) Use Bootstrap alerts instead of legacy message classes for install.php warning (Robbie Averill)
* 2018-02-02 [f582954a](https://github.com/silverstripe/silverstripe-cms/commit/f582954aea6b9f644283f1424ab0aefc41a05892) Use Bootstrap alerts instead of legacy message classes for install.php warning (Robbie Averill)
* 2018-01-31 [71f9a30](https://github.com/silverstripe/silverstripe-asset-admin/commit/71f9a30c9bad1ccf898f8d9c9e1deca0d2ad17e7) UploadField uses injector for child components (#722) (Chris Joe)
* 2018-01-30 [5892acf](https://github.com/silverstripe/silverstripe-versioned/commit/5892acfb958e4d5eade675689e7be94d7aa0c282) GraphQL versioning support (#83) (Aaron Carlino)
* 2018-01-30 [296d18c](https://github.com/silverstripe/silverstripe-graphql/commit/296d18c4657464c89df5b67c958a1cad024964c9) Versioning support for scaffolded operations (#128) (Aaron Carlino)
* 2018-01-24 [456871fd9](https://github.com/silverstripe/silverstripe-framework/commit/456871fd914cec8f8142dd5a00949c7f28caff26) Updated PasswordValidator to fallback to config options - still retains instance variables (Christopher Joe)
* 2018-01-24 [e99bd6f4](https://github.com/silverstripe/silverstripe-cms/commit/e99bd6f49e8ebb13cc6d44e9c79e47a2c26e16ce) Ensure all base folders are excluded (Damian Mooyman)
* 2018-01-23 [fcf502255](https://github.com/silverstripe/silverstripe-framework/commit/fcf50225509a7776527be351e212fcd391a28003) Add support for ordinals in DBDate::Format() (Loz Calver)
* 2018-01-22 [89c8a28](https://github.com/silverstripe/silverstripe-admin/commit/89c8a28b05097bf9974482440f2f9757cccd8daa) Put gridfield page count in button toolbar for security admin (Damian Mooyman)
* 2018-01-17 [827537f](https://github.com/silverstripe/silverstripe-versioned/commit/827537f8ac597e3aab979046964b7ead01e18fa9) Add version status badge in gridfield detail view (Saophalkun Ponlu)
* 2018-01-12 [9fddb5de9](https://github.com/silverstripe/silverstripe-framework/commit/9fddb5de999bb4faf3f95c81efcd23c19c857247) Add getter and setter for removeRelation in GridFieldDeleteAction (Robbie Averill)
* 2017-12-22 [ce1a3a4](https://github.com/silverstripe/silverstripe-versioned/commit/ce1a3a4fc704f5bbc1a8d437c7d592cfdde09837) Gridfield uses versioned by default (Saophalkun Ponlu)
* 2017-12-21 [294cfc8](https://github.com/silverstripe/silverstripe-admin/commit/294cfc8b4476a51820b2e9b1b3ea7006e40d1543) Add data object status badge in gridffield detail view (Saophalkun Ponlu)
* 2017-12-17 [8a29918a](https://github.com/silverstripe/silverstripe-reports/commit/8a29918ac586b2254a7e8daf7121105cee350b99) Remove duplicated report heading (Robbie Averill)
* 2017-12-13 [31e04c849](https://github.com/silverstripe/silverstripe-framework/commit/31e04c84917b66afd94cdda21ac8059ede09f508) Allow html in security failure message (Saophalkun Ponlu)
* 2017-12-12 [06cecc6](https://github.com/silverstripe/silverstripe-campaign-admin/commit/06cecc648774ce2080d70de5e604105121bf7b84) Set .gitattributes to ignore tests folder, and some source asset files which are not needed (Christopher Joe)
* 2017-12-12 [c342f49](https://github.com/silverstripe/silverstripe-asset-admin/commit/c342f499b52df747ef905f4bfaa916a0bdd22c3d) re-instate `setAllowedMaxFileNumber()` to the new UploadField (Christopher Joe)
* 2017-12-12 [4f946aa](https://github.com/silverstripe/silverstripe-assets/commit/4f946aaf9eadf9361ed401a5151d1852778e002c) Add cache service for file inherited permissions (Aaron Carlino)
* 2017-12-11 [d0e5bc1](https://github.com/silverstripe/silverstripe-admin/commit/d0e5bc1f9ae22a88e19855f0036c82c0120e9f73) Major refactor of validation and error handling on react forms (Aaron Carlino)
* 2017-12-10 [ccece4b](https://github.com/silverstripe/silverstripe-installer/commit/ccece4bf1c669cc5930cd7297e785e05aa157eba) update composer with --prefer-source flag so that tests are included (Christopher Joe)
* 2017-12-10 [1c1f9a1](https://github.com/silverstripe/silverstripe-versioned/commit/1c1f9a186a2a35383b91c4f38d27b3a71c711ec3) Set .gitattributes to ignore docs and tests folder, and some source asset files which are not needed (Christopher Joe)
* 2017-12-10 [33a68dda](https://github.com/silverstripe/silverstripe-siteconfig/commit/33a68ddabc8692152eff1c376f5fb5a0cfdee1f0) Set .gitattributes to ignore docs and tests folder, and some source asset files which are not needed (Christopher Joe)
* 2017-12-10 [4d805361](https://github.com/silverstripe/silverstripe-reports/commit/4d8053611d4b669e0f637c207ac7d8de728ee296) Set .gitattributes to ignore docs and tests folder, and some source asset files which are not needed (Christopher Joe)
* 2017-12-10 [b959af3](https://github.com/silverstripe/silverstripe-graphql/commit/b959af3cb800aa351cc800a2add062ac58f6e9e7) Set .gitattributes to ignore docs and tests folder, and some source asset files which are not needed (Christopher Joe)
* 2017-12-10 [aff4babfa](https://github.com/silverstripe/silverstripe-framework/commit/aff4babfa51ad458ebcf087e2a325ffed87612ac) Set .gitattributes to ignore docs and tests folder, and some source asset files which are not needed (Christopher Joe)
* 2017-12-10 [50ed744](https://github.com/silverstripe/silverstripe-errorpage/commit/50ed744e8072190eb51b1364db0c3fd3fb34a05e) Set .gitattributes to ignore docs and tests folder, and some source asset files which are not needed (Christopher Joe)
* 2017-12-10 [2985b4a6](https://github.com/silverstripe/silverstripe-cms/commit/2985b4a6e9f6aace7cca63b0f38fc25f6c067a01) Set .gitattributes to ignore docs and tests folder, and some source asset files which are not needed (Christopher Joe)
* 2017-12-10 [d08d472](https://github.com/silverstripe/silverstripe-assets/commit/d08d472155875d745a2b5690e07c7e4bf23538a2) Set .gitattributes to ignore docs and tests folder, and some source asset files which are not needed (Christopher Joe)
* 2017-12-10 [0d422e9](https://github.com/silverstripe/silverstripe-asset-admin/commit/0d422e9a2d0895c492c88fc85910b68049b09860) Set .gitattributes to ignore tests folder, and some source asset files which are not needed (Christopher Joe)
* 2017-12-07 [b8c9027](https://github.com/silverstripe/silverstripe-admin/commit/b8c9027f9d85ae69759b12518cc3c5c44626b9c9) Set .gitattributes to ignore docs and tests folder, and some source asset files which are not needed (Christopher Joe)
* 2017-11-30 [8ee5d9f5](https://github.com/silverstripe/silverstripe-cms/commit/8ee5d9f5ceddd4124feae69af9caf5a0f9b019f5) Cache canCreate (Aaron Carlino)
* 2017-11-29 [2dcb3fd2a](https://github.com/silverstripe/silverstripe-framework/commit/2dcb3fd2ab5c60c98068c8f92dde740e0e45d94e) Add documentation for pattern library (Christopher Joe)
* 2017-11-27 [a7847b573](https://github.com/silverstripe/silverstripe-framework/commit/a7847b573b65c1dc2f3d1e36ed3f53f9b1577abf) Add the ability to redirect a user to a custom page (Damian Mooyman)
* 2017-11-15 [c7ab5846d](https://github.com/silverstripe/silverstripe-framework/commit/c7ab5846df7e3f460b1c38e04a0946a914a35c19) Don't infer trace if explicitly provided (Damian Mooyman)
* 2017-11-07 [81aa617](https://github.com/silverstripe/silverstripe-campaign-admin/commit/81aa617f4c59928e6150f401a0b5e073a91d384a) eslint config (Aaron Carlino)
* 2017-11-07 [8adde15](https://github.com/silverstripe/silverstripe-asset-admin/commit/8adde153f5543dc5b3b590ba13f5f7677dcf1650) eslint config (Aaron Carlino)
* 2017-11-07 [7f3db6b](https://github.com/silverstripe/silverstripe-admin/commit/7f3db6b6fc6708e0805d16ab89faa4c596aed176) dependencies for eslint package (Aaron Carlino)
* 2017-11-06 [2e43780a8](https://github.com/silverstripe/silverstripe-framework/commit/2e43780a8ae664ead109bd99c094f3873defbfea) Add sort columns to DB index automatically (Daniel Hensby)
* 2017-11-01 [91f1a5801](https://github.com/silverstripe/silverstripe-framework/commit/91f1a58018b208b3677550dc4d22ac5d83f5124a) Allow chain-ability on adding and removing fields (zanderwar)
* 2017-10-23 [5b335ad5](https://github.com/silverstripe/silverstripe-reports/commit/5b335ad511a9cdef77c1ecb568d0cb92ba2dd2db) Add support for callable link formatting (Will Rossiter)
* 2017-09-28 [2f0a0cb63](https://github.com/silverstripe/silverstripe-framework/commit/2f0a0cb63f12c9428cce9403fdd11dd155f73116) Add (alt text) to title field for clarity (Robbie Averill)
* 2017-01-19 [da9c133c1](https://github.com/silverstripe/silverstripe-framework/commit/da9c133c1b294da9aaa580700353b6814e1d2c47) Add flattenFields() function to iterate over all deeply nested fields in a form (Jake Bentvelzen)
### Bugfixes
* 2018-03-11 [2b9faf46](https://github.com/silverstripe/silverstripe-cms/commit/2b9faf46fe6606a9236f9e1ec987f9a22689a2c7) Fix InSection failing on non-page controllers (Damian Mooyman)
* 2018-03-07 [bf2cee398](https://github.com/silverstripe/silverstripe-framework/commit/bf2cee3989028aaa461e9f0f929724b7738c1399) - Correct duplicate nesting of 'Content' to be returned to template (Joe Harvey)
* 2018-03-06 [5fee4a81a](https://github.com/silverstripe/silverstripe-framework/commit/5fee4a81aa880338fba7bb72731fd2b7be4643de) Files dataobjects with missing asset shouldn't un-attach themselves from parent object on save (Damian Mooyman)
* 2018-03-05 [dde13493](https://github.com/silverstripe/silverstripe-cms/commit/dde134936825e196ca97cb86ac3f5bc24d52278e) Fix invalid css classname in virtualpage (Damian Mooyman)
* 2018-03-05 [985a0af](https://github.com/silverstripe/silverstripe-admin/commit/985a0af292bb833ba48fa907a1b75892182ec390) Fix page icons (Damian Mooyman)
* 2018-03-02 [3bd714d](https://github.com/silverstripe/silverstripe-assets/commit/3bd714d293c3f6c12e8f7a0b3c7e054d99b410bd) Typo in "audio file" translation (Robbie Averill)
* 2018-03-01 [40c2e299a](https://github.com/silverstripe/silverstripe-framework/commit/40c2e299a0a9a63b4e64e14dff95e9f7d480db6e) "mb_stripos(): Empty delimiter" warning when no search-keywords are given for `DBText::ContextSummary`. (Roman Schmid)
* 2018-02-27 [d91c6ed](https://github.com/silverstripe/silverstripe-admin/commit/d91c6ed0dc699f769802e5d1310f3fe111dd8ecf) Fix $CMSVersion appearing visually (Damian Mooyman)
* 2018-02-26 [b27102f81](https://github.com/silverstripe/silverstripe-framework/commit/b27102f810e873d287fa04678a4ff242c40699f6) Fix incorrect assets created when ASSETS_PATH !== BASE_PATH . '/assets' (Damian Mooyman)
* 2018-02-22 [012bfec5](https://github.com/silverstripe/silverstripe-cms/commit/012bfec5bf8e0902f3325c8e7fb237d48bd189ad) Bug field help text translations no longer need to be HTML encoded (Rick Hambrook)
* 2018-02-20 [83c4ab8d](https://github.com/silverstripe/silverstripe-cms/commit/83c4ab8d180954b3d80d16ed5f5764e3c647ca6d) Fix test regressions in CMS page filters (Damian Mooyman)
* 2018-02-19 [cfe82e9](https://github.com/silverstripe/silverstripe-assets/commit/cfe82e912616ca230b8fd29fba3bd3270fac2502) Fix behaviour towards versioned but unstagable records (Damian Mooyman)
* 2018-02-19 [42c6caa](https://github.com/silverstripe/silverstripe-versioned/commit/42c6caadabe6f193ef6820efff6c470e8796dfe5) Fix behaviour towards versioned but unstagable records (4.1 specific) (Damian Mooyman)
* 2018-02-19 [4fc8166](https://github.com/silverstripe/silverstripe-versioned/commit/4fc816653e84c0a883a01afe30e16e8bd4129f53) Fix behaviour towards versioned but unstagable records (Damian Mooyman)
* 2018-02-19 [0e26c0664](https://github.com/silverstripe/silverstripe-framework/commit/0e26c066440d2591401e84d9688cbeef0595afcc) Fix behaviour towards versioned but unstagable records (Damian Mooyman)
* 2018-02-19 [3be0478e](https://github.com/silverstripe/silverstripe-cms/commit/3be0478e1c40cd2b9f577818596c4222b365b6b6) Fix behaviour towards versioned but unstagable records (Damian Mooyman)
* 2018-02-19 [33165e5](https://github.com/silverstripe/silverstripe-versioned/commit/33165e5b8f33ed1916b99b37cc61de182177897c) Always run updateBadge extension, even if Versioned has no badges of its own (Robbie Averill)
* 2018-02-19 [8be3930](https://github.com/silverstripe/silverstripe-versioned/commit/8be393061e8578c3bd9056c6540e5f0bbff43801) Fix doRollbackTo() writing old / unsaved version over restored version (Damian Mooyman)
* 2018-02-14 [2fab96b](https://github.com/silverstripe/silverstripe-asset-admin/commit/2fab96b11dff2e15f150f2b1cd9d2461d247b953) behat tests with new cms button labels (Christopher Joe)
* 2018-02-13 [911a50c](https://github.com/silverstripe/silverstripe-errorpage/commit/911a50c35c74e0482dbf182762112099eee30fbe) tests to use new TestAssetStore (Damian Mooyman)
* 2018-02-13 [c767e472d](https://github.com/silverstripe/silverstripe-framework/commit/c767e472dc494408460ef47c27b8d34475da4ac6) DataObject singleton creation (Jonathon Menz)
* 2018-02-13 [f2b82b1f7](https://github.com/silverstripe/silverstripe-framework/commit/f2b82b1f77a60de4bf1b5807e1b820aad263ae1b) docs for configuring before/after a specific config file (Christopher Joe)
* 2018-02-13 [0b7cf8033](https://github.com/silverstripe/silverstripe-framework/commit/0b7cf8033198077cf6594f91e3f816d562cabc50) Fix incorrect convert slashes argument (Damian Mooyman)
* 2018-02-13 [c6095cf](https://github.com/silverstripe/silverstripe-config/commit/c6095cfc0a07a74bb932e2191215d06f102e992a) word boundary issue with pathname matching (Christopher Joe)
* 2018-02-13 [1d27a14](https://github.com/silverstripe/silverstripe-admin/commit/1d27a14be75efb33a503f7f1c15b093ab3b59c7f) Remove border-radius add hover states to non-active tabs (Sacha Judd)
* 2018-02-12 [ad52ced](https://github.com/silverstripe/silverstripe-versioned/commit/ad52ced4353b8abe312aeacfb2c95657169feedc) Prevent nested permissions from breaking recursive publishing (Damian Mooyman)
* 2018-02-12 [0f08f85](https://github.com/silverstripe/silverstripe-admin/commit/0f08f85508d01a578015848caff032ae0fd62e4c) improve the browser warning logic show (Christopher Joe)
* 2018-02-12 [423cbe0](https://github.com/silverstripe/silverstripe-graphql/commit/423cbe0ada53fcb63789cbdbafc94952dc2d7637) Fix broken createArgs() for scaffolded reads (#138) (Damian Mooyman)
* 2018-02-08 [d86e5dfc](https://github.com/silverstripe/silverstripe-cms/commit/d86e5dfc883267ffaa0c43e9ece7576c4f42ed61) remove now superfluous print action destroyer (Dylan Wagstaff)
* 2018-02-08 [d3278d547](https://github.com/silverstripe/silverstripe-framework/commit/d3278d5470165bba14ee5026453ec7d529901f42) Add Nested DB transaction support (#7848) (Daniel Hensby)
* 2018-02-08 [0a486b8f5](https://github.com/silverstripe/silverstripe-framework/commit/0a486b8f5705242de523489190f3975d55b3b3e6) Fix issue with CLIDebugView failing on class name of existing class (Damian Mooyman)
* 2018-02-08 [df62ffa](https://github.com/silverstripe/silverstripe-versioned/commit/df62ffa2616212f4b6000ec7c7b51558e5414e61) Fix createArgs() for Versioned graphql operations (Damian Mooyman)
* 2018-02-07 [dd3fbf2c7](https://github.com/silverstripe/silverstripe-framework/commit/dd3fbf2c73a662a5d525178800d9697a895feea1) Fix installer checking wrong location for files (Damian Mooyman)
* 2018-02-07 [a0fa38b](https://github.com/silverstripe/silverstripe-asset-admin/commit/a0fa38b36fbe81941bcc56158428a2cc924532c0) Fit sort dropdown to icon on smaller sizes to prevent wrapping (Luke Edwards)
* 2018-02-07 [86f2ff4](https://github.com/silverstripe/silverstripe-asset-admin/commit/86f2ff4a13200305ff0800abd45c3939fe22c452) Align buttons to right to keep consistency (Luke Edwards)
* 2018-02-07 [24dfe11](https://github.com/silverstripe/silverstripe-asset-admin/commit/24dfe114cb926df3009aa59aeb59393fd63dbab8) Asset admin toolbar buttons stacking vertically on small screens (Luke Edwards)
* 2018-02-07 [e5ff48b35](https://github.com/silverstripe/silverstripe-framework/commit/e5ff48b352fc94cfab15f29132535752f7a7ed2f) Fix incorrect BASE_URL when webroot is parent of public folder (Damian Mooyman)
* 2018-02-07 [168b8999](https://github.com/silverstripe/silverstripe-cms/commit/168b899917957981086bc20f1d8259d7c8e6789f) Add missing button styles to restore draft action (Luke Edwards)
* 2018-02-07 [b060892](https://github.com/silverstripe/silverstripe-installer/commit/b060892992735cb12a2d57bbf6ba45c3803a03c8) Fix routing error for public assets (Damian Mooyman)
* 2018-02-06 [0094c19](https://github.com/silverstripe/silverstripe-admin/commit/0094c19304eea5ac02daf42095da341315dae84f) Add text-colour to status-archived, remove span.badge styles (Sacha Judd)
* 2018-02-06 [6b38031a1](https://github.com/silverstripe/silverstripe-framework/commit/6b38031a1e16e94d5bafcbcce4bdcb2d6b3680ed) Fix Director::test() not persisting removed session keys on teardown (Damian Mooyman)
* 2018-02-06 [660dfd34a](https://github.com/silverstripe/silverstripe-framework/commit/660dfd34a828e7eb7dc8ef9986b201a14620d17f) Issue where default admin has no password encryption (Daniel Hensby)
* 2018-02-05 [28ca11dd7](https://github.com/silverstripe/silverstripe-framework/commit/28ca11dd7e5e9a1c4fd1f5d4acbec856adfb7176) Regex range identifier correctly escaped (Daniel Hensby)
* 2018-02-05 [db9aa2c5c](https://github.com/silverstripe/silverstripe-framework/commit/db9aa2c5c7be75cfdf1a803c77e6c74d151163b0) Fix regression in has_one getters breaking DataDifferencer (Damian Mooyman)
* 2018-02-04 [dbecf1c](https://github.com/silverstripe/silverstripe-versioned/commit/dbecf1c5a7d8d94d18f653c53cf3a0debbc542e1) Prevent versioned records self-publishing (Damian Mooyman)
* 2018-02-04 [1ff32b3](https://github.com/silverstripe/silverstripe-admin/commit/1ff32b347911c1a6f8521f31e79131db68ed3084) Ensure lang is detected from html tag (Martin P)
* 2018-02-02 [6a025f7](https://github.com/silverstripe/silverstripe-versioned/commit/6a025f7893145e61767e59c789ed580d6f7cca86) Remove unnecessary recursivePublish() calls (Damian Mooyman)
* 2018-02-01 [bc2fc7f2d](https://github.com/silverstripe/silverstripe-framework/commit/bc2fc7f2dbf18d92ad6ef29c8173ff26b5213608) Prevent invalid members being written to database if validation_enabled is false (Damian Mooyman)
* 2018-01-31 [884cee7](https://github.com/silverstripe/silverstripe-versioned/commit/884cee753a97a47fa3232fbe64f2def368ea8741) Prevent versioned crashing in absence of graphql module (Damian Mooyman)
* 2018-01-30 [07e70148](https://github.com/silverstripe/silverstripe-cms/commit/07e70148dacb8cd84f976f796320c9f47c33b3a0) Add some exist check for tabsets which may not be there (#2079) (Chris Joe)
* 2018-01-30 [206e8b4](https://github.com/silverstripe/silverstripe-graphql/commit/206e8b44b85809789bbcee9eaead5535b1e813a9) Remove duplicate extensible traits (#133) (Damian Mooyman)
* 2018-01-26 [416915b08](https://github.com/silverstripe/silverstripe-framework/commit/416915b08248285083518850ad8d015ca8ed25c2) tableName is blank in CompositeDBField-&gt;addToQuery (Dominik Beerbohm)
* 2018-01-25 [cf69d0486](https://github.com/silverstripe/silverstripe-framework/commit/cf69d048665befa90eb43146f86cde984b876b3a) Fix ping including requirements (Damian Mooyman)
* 2018-01-24 [c2cd6b383](https://github.com/silverstripe/silverstripe-framework/commit/c2cd6b3832c6bc4775b2742df593b445c2aca391) Fix Member_GroupSet::removeAll() (fixes #3948) (Loz Calver)
* 2018-01-24 [f2b4c192e](https://github.com/silverstripe/silverstripe-framework/commit/f2b4c192ec4d70779f7c667a976e741a7f3a26c5) Fix UploadField cuts off “Save” button (closes #2862) (Loz Calver)
* 2018-01-24 [c23acae](https://github.com/silverstripe/recipe-core/commit/c23acaed9e0b629c6812f0e923eb008dacd5f0fb) remove linting error for dependents' benefit (Dylan Wagstaff)
* 2018-01-23 [cbcff97](https://github.com/silverstripe/silverstripe-admin/commit/cbcff97c97629666f07ad23a2d1da9d9c6b0b59e) performance issue with context for injector (#405) (Chris Joe)
* 2018-01-23 [7384e3fc2](https://github.com/silverstripe/silverstripe-framework/commit/7384e3fc25987742ea08af74b704857a936e8ec0) Gridfields with dropdowns having lots of overflow (Scott Hutchinson)
* 2018-01-22 [c32b3dd5b](https://github.com/silverstripe/silverstripe-framework/commit/c32b3dd5bae8d2eb43cf0049ae80a4d7495c1c9a) Prevent versioned from breaking gridfield tests (Damian Mooyman)
* 2018-01-18 [b32cc57](https://github.com/silverstripe/silverstripe-versioned/commit/b32cc57832ee00868507fd771fca1930c31407ca) breadcrumbs casting (Damian Mooyman)
* 2018-01-17 [7eef400](https://github.com/silverstripe/recipe-core/commit/7eef40098e73dfed8c21ea2be057c98fedbb7489) Ensure there is an error response if composers autoloader cant be found (Daniel Hensby)
* 2018-01-16 [ca2fe3b1f](https://github.com/silverstripe/silverstripe-framework/commit/ca2fe3b1f63823e059fb8652eb2d0d7098537f69) Fix themed editor.css url not being resolved properly (Damian Mooyman)
* 2018-01-16 [20348b5f4](https://github.com/silverstripe/silverstripe-framework/commit/20348b5f42d343e704e8cd8200a50a17e7a38326) Fix `upgrade-code doctor` with public path (Damian Mooyman)
* 2018-01-15 [15ef769e1](https://github.com/silverstripe/silverstripe-framework/commit/15ef769e1d68909908caf97daed9f8d854173c72) Don't re-declare manually-declared variables for public folder (Damian Mooyman)
* 2018-01-15 [292647d](https://github.com/silverstripe/recipe-core/commit/292647d26f13f9a9e139536f3f04cfdb6b283186) Fix routing error for public assets (Damian Mooyman)
* 2018-01-12 [23a23043](https://github.com/silverstripe/silverstripe-cms/commit/23a23043bc250f1e87a4bfdae719f6f36cc52ed6) successfullyinstalled() (#2069) (Damian Mooyman)
* 2018-01-02 [b3ae11fe4](https://github.com/silverstripe/silverstripe-framework/commit/b3ae11fe478a14b025a26858236e4bf86aaac661) Missing Part of Sentence (David Lloyd)
* 2017-12-22 [212178bb0](https://github.com/silverstripe/silverstripe-framework/commit/212178bb0d59199dc4ed2d214957db30d1c03b39) `SSViwer::execute_template` should allow requirements to be included (Daniel Hensby)
* 2017-12-19 [2fd81eea](https://github.com/silverstripe/silverstripe-cms/commit/2fd81eea9e593e97ccc939b0597e7369a459f87f) no button view type toggle when searching pages (Saophalkun Ponlu)
* 2017-12-19 [646ba571](https://github.com/silverstripe/silverstripe-cms/commit/646ba57152dee2cd2e168f95085c6fa55b878fc1) Amend rules to ignore test files only (Christopher Joe)
* 2017-12-19 [5fdd3a5](https://github.com/silverstripe/silverstripe-campaign-admin/commit/5fdd3a5d1520bbc3f2e324e21aeb4539bcd2a574) Amend rules to ignore test files only (Christopher Joe)
* 2017-12-19 [ae9d016](https://github.com/silverstripe/silverstripe-asset-admin/commit/ae9d016295461eeea0cd9ddb864f8320ab3fd7e7) Amend rules to ignore test files only (Christopher Joe)
* 2017-12-19 [fe319e85c](https://github.com/silverstripe/silverstripe-framework/commit/fe319e85ccf8fbd3cacab0b27539c184051e5e76) Amend rules to ignore test files only (Christopher Joe)
* 2017-12-18 [74cd028](https://github.com/silverstripe/silverstripe-admin/commit/74cd0281b2ad8691315ec9da1d9a545edd785214) applyTransforms not using new addErrors() API (Aaron Carlino)
* 2017-12-14 [c5bd9bb42](https://github.com/silverstripe/silverstripe-framework/commit/c5bd9bb424006a4cbce1c71806c323d9ca3328e1) Fix incorrect BASE_DIR inferred in CLI (Damian Mooyman)
* 2017-12-14 [b1099a9](https://github.com/silverstripe/silverstripe-asset-admin/commit/b1099a907b0441087263c842686a2f43397d653c) php lint errors (Saophalkun Ponlu)
* 2017-12-14 [140ed72e2](https://github.com/silverstripe/silverstripe-framework/commit/140ed72e2aa91a55e0923d9691587933968d1127) Fix message casting for html security messages (Damian Mooyman)
* 2017-12-14 [3eda4e0](https://github.com/silverstripe/silverstripe-admin/commit/3eda4e09849643ec8e0f54770842a2d3900fe0eb) Clean up i18n._t() (Christopher Joe)
* 2017-12-14 [8b1b9f022](https://github.com/silverstripe/silverstripe-framework/commit/8b1b9f022b5dae9fb2b6c78c2505cd21dc042968) linting issues (Damian Mooyman)
* 2017-12-14 [b4a35293](https://github.com/silverstripe/silverstripe-reports/commit/b4a3529339345b88cf9db9503caef1b386709dc6) Minor linting violation in Report (Robbie Averill)
* 2017-12-13 [210213a4](https://github.com/silverstripe/silverstripe-cms/commit/210213a45586b097c5478654286d9d9569ce10d2) search behaviour (Damian Mooyman)
* 2017-12-13 [c2d54a57](https://github.com/silverstripe/silverstripe-cms/commit/c2d54a571dfa8e5527202d8b7ce2036670ce5021) up code style, fix tests (Damian Mooyman)
* 2017-12-13 [749616e](https://github.com/silverstripe/silverstripe-admin/commit/749616ecf58f8a19b229cc578aa956e2226d337b) linting issues (Damian Mooyman)
* 2017-12-12 [8a04e9c4](https://github.com/silverstripe/silverstripe-cms/commit/8a04e9c46b3b6bfe75f7dfba7270cabfaceab475) wrong/confusing url segment (Saophalkun Ponlu)
* 2017-12-11 [6dd07b52](https://github.com/silverstripe/silverstripe-cms/commit/6dd07b5262c6d43f0b373214ff24b1c1d5a686e0) CI config for 4 branch (Damian Mooyman)
* 2017-12-10 [627b49637](https://github.com/silverstripe/silverstripe-framework/commit/627b49637986ab9baa9134aaf4aa4639fc3d705d) linting issue (Damian Mooyman)
* 2017-12-07 [381ad756f](https://github.com/silverstripe/silverstripe-framework/commit/381ad756f2fe9b81c13ac7f9f2aa4abfa8cb2d03) tests (Saophalkun Ponlu)
* 2017-12-07 [b391db49](https://github.com/silverstripe/silverstripe-cms/commit/b391db4977c7a6bdfd7c8fc8668c1e636acaf13a) search view (Saophalkun Ponlu)
* 2017-12-03 [fa2cb40](https://github.com/silverstripe/silverstripe-asset-admin/commit/fa2cb4020041706d66fef1184cd50e6ee0a598c9) travis (Christopher Joe)
* 2017-12-01 [682ef89](https://github.com/silverstripe/silverstripe-admin/commit/682ef89bde9bd30b19710c9f2b3ba757d4939893) loading order for modules (Christopher Joe)
* 2017-11-30 [0884f05](https://github.com/silverstripe/silverstripe-asset-admin/commit/0884f054268b367186748b9a0bb9703136d69501) Fix broken unit tests (Christopher Joe)
* 2017-11-29 [2717f0134](https://github.com/silverstripe/silverstripe-framework/commit/2717f013447069fd1879b24140dd84145ece9cef) link to nginx.org wiki (JorisDebonnet)
* 2017-11-29 [4b69fa49e](https://github.com/silverstripe/silverstripe-framework/commit/4b69fa49ece5065a6413559325fb4ea682cf1036) Fix travis (Christopher Joe)
* 2017-11-29 [5b40419](https://github.com/silverstripe/silverstripe-asset-admin/commit/5b404192426096cc194e1156402366d9d98ba411) Fix removed scss variables (Christopher Joe)
* 2017-11-27 [86f84597](https://github.com/silverstripe/silverstripe-reports/commit/86f845972f926d09186eabcd39cdabfa672b9f35) Actioned feedback (Christopher Joe)
* 2017-11-14 [4ba6056](https://github.com/silverstripe/silverstripe-admin/commit/4ba605688ef3e887ec4a2e89b82b17d5908b9eaa) update lock and eslintrc reference (Christopher Joe)
* 2017-11-14 [b5345fd](https://github.com/silverstripe/silverstripe-campaign-admin/commit/b5345fd7d2f4a69f92a8231bb1b5e3d34e775149) update lock and eslintrc reference (Christopher Joe)
* 2017-11-14 [861bfa7](https://github.com/silverstripe/silverstripe-asset-admin/commit/861bfa729f38b889566068aeb88ff5cdf9f07d00) update lock and eslintrc reference (Christopher Joe)
* 2017-11-09 [ba2c5b48f](https://github.com/silverstripe/silverstripe-framework/commit/ba2c5b48f7f0308db7878989cd17b37af7ee59a0) Ensure relObject() safely bails on empty objects (Damian Mooyman)
* 2017-10-26 [0dcc9d6](https://github.com/silverstripe/silverstripe-assets/commit/0dcc9d66aa442b1727f74c5085fe2bf7074ddd07) Prevent massive recursion of publish writes (Damian Mooyman)
* 2017-10-16 [cafa3fc29](https://github.com/silverstripe/silverstripe-framework/commit/cafa3fc29ae39c01dbbe52373bb366846e886798) switch to `trigger_error()` when a resource is not found (#7468) (Chris Joe)
* 2017-10-11 [7adedd0](https://github.com/silverstripe/silverstripe-admin/commit/7adedd0c0e67b29a6d2cc16060228c4c4666acfd) Remove duplicate "field" class in FieldGroup holder template (Robbie Averill)
* 2017-09-27 [c95916037](https://github.com/silverstripe/silverstripe-framework/commit/c959160375ddb77db5cff269c48c5721fad8cd51) Misnamed test namespaces (Daniel Hensby)
* 2016-10-21 [8e5bb6fbd](https://github.com/silverstripe/silverstripe-framework/commit/8e5bb6fbdce0b2ca2d08a45534df2264db5e6b12) Fix : relObject() should return null if one of the node is null (Jason)
* 2016-03-15 [22b3a71ec](https://github.com/silverstripe/silverstripe-framework/commit/22b3a71ec0c8cd8c38030fa0bf5449abefafe8a3) ing val reference to url in https hotlink (Denise Rivera)
* 2015-04-22 [1f63637b9](https://github.com/silverstripe/silverstripe-framework/commit/1f63637b9369d4644a92523ada5d1a5dc0576c12) for #4095, TinyMCE not able to modify props of embed media (bug 1) and invalid HTML inserted (bug 2) (Patrick Nelson)