# 4.0.0
## Introduction
This version introduces many breaking changes, which in most projects can be managed through a combination
of automatic upgrade processes as well as manual code review. This changelogs described all API changes in detail.
[Read _Upgrading to SilverStripe 4_](/upgrading/) for a detailed step-by-step guide on upgrading your SilverStripe 3 project to SilverStripe 4.
It describes how to use an automated [upgrader tool](https://github.com/silverstripe/silverstripe-upgrader)
to make the job easier.
For users upgrading to later versions, please see the specific [4.1.0](4.1.0) and [4.2.0](4.2.0) changelogs.
## Overview {#overview}
* Minimum version dependencies have increased; PHP 5.6 and Internet Explorer 11 (or other modern browser)
are required.
* All code earlier marked as deprecated for 4.0 has now been removed (check our
[deprecation process](/contributing/release_process))
* **4.1.0 only** Support for public webroot folder `public/` ([details](4.1.0#public-folder))
* All code has been migrated to follow the PSR-2 coding standard. Most significantly, all SilverStripe
classes are now namespaced, and some have been renamed. This has major implications for
arrangement of templates, as well as other references to classes via string literals or configuration.
Automatic upgrading tools have been developed to cope with the bulk of these changes (see
[upgrading notes](#upgrading)).
* Object class has been replaced with traits ([details](#object-replace)).
* Asset storage has been abstracted, and a new concept of `DBFile` references via database column references
now exists in addition to references via the existing `File` dataobject. File security and protected files
are now a core feature ([details](#asset-storage))
* A new front-end development process has been developed for the construction of javascript based components,
prominently featuring ReactJS to develop highly functional CMS content areas. A new standard form schema
API has been developed to allow back-end PHP constructed forms to scaffold themselves within ReactJS
powered sections.
* CMS CSS has been re-developed using Bootstrap v4 as a base
([blog post](https://www.silverstripe.org/blog/a-frameworks-framework-why-silverstripe-4-will-use-bootstrap/))
* Asset admin has been replaced with a purely ReactJS powered upgrade, and split out
module called [asset-admin](https://github.com/silverstripe/silverstripe-asset-admin/).
* Versioning is now a much more powerful feature, with the addition of campaigns to allow batches of related
or inter-dependent objects to be published as a single "changeset" ([details](#changeset)).
* Dependencies between versioned objects can be
declared using the new ownership API, so that developers can ensure that relational consistency is
maintained during publishing ([details](#ownership))
This new system can be managed via the new "Campaigns" CMS section ([blog post](https://www.silverstripe.org/blog/campaigns-in-silverstripe-4/))
* Template variable casting (e.g. `
$Title
`) is enforced by default, which will ensure safe HTML encode
unless explicitly opted out ([details](#template-casting))
* Themes are now configured to cascade, where you can specify a list of themes, and have the template engine
search programatically through a prioritised list when resolving template and CSS file paths.
* Removed module path constants (e.g. `FRAMEWORK_PATH`) and support for hardcoded file paths (e.g. `mysite/css/styles.css`) ([details](#module-paths))
* Replaced Zend_Translate with symfony/translation ([details](#i18n))
* Replaced `Zend_Cache` and the `Cache` API with a PSR-16 implementation (symfony/cache) ([details](#cache))
* `_ss_environment.php` files have been removed in favour of `.env` and "real" environment variables ([details](/upgrading/#env)).
* Behat support updated to v3 (
[details](https://github.com/silverstripe/silverstripe-behat-extension))
* The `GDBackend` and `ImagickBackend` classes have been replaced by a unified `InterventionBackend` which uses the
[intervention/image](https://github.com/intervention/image) library to power manipualations.
* Dependencies can managed via [recipe-plugin](https://github.com/silverstripe/recipe-plugin). See [recipe-core](https://github.com/silverstripe/recipe-core) and [recipe-cms](https://github.com/silverstripe/recipe-cms) as examples.
* Authentication has been upgraded to a modular approach using re-usable interfaces and easier to hook in to LoginHandlers ([details](#custom-authenticators)).
* Core modules are installed in the `vendor/` folder by default (other modules can opt-in, see [guide](/developer_guides/extending/how_tos/publish_a_module))
* Renamed constant for temp folder from `TEMP_FOLDER` to `TEMP_PATH` for naming consistency with other path variables and constants
## Upgrading Guide {#upgrading}
The below sections describe how to go about updating an existing site to be prepared for upgrade to 4.0.
Most of these upgrading tasks will involve manual code review, although in some cases there are
some automated processes that users can run.
### Composer dependency update {#deps}
As a first step, you need to update your composer dependencies.
The easiest way is to start with a new `composer.json` file
and gradually move over settings from your old one.
This way you don't get dependency conflicts with potentially incompatible modules.
Backup your existing `composer.json` and overwrite it with the following content:
```json
{
"name": "myvendor/myproject",
"require": {
"silverstripe/recipe-cms": "^1.0"
},
"prefer-stable": true,
"minimum-stability": "dev"
}
```
This composer file uses the new [recipe](https://github.com/silverstripe/recipe-plugin) approach
which bundles all core dependencies in a meta package. If you want more granular control over what gets installed,
reading through the README documentation in the [recipe plugin repo](https://github.com/silverstripe/recipe-plugin)
and also checking the `composer.json` files in [recipe-core](https://github.com/silverstripe/recipe-core) and
[recipe-cms](https://github.com/silverstripe/recipe-cms).
Now run a `composer update`. This will remove all existing modules from your local codebase
since we replaced your project's `composer.json`. Now you can move your modules back
one by one, checking for compatible versions on [packagist.org](http://packagist.org).
Note: If you have issues with a pre-existing composer install you can force a clean re-install with the
below commands:
```bash
rm -rf vendor/composer
rm composer.lock
composer update
```
For modules with stable releases, simply set your composer constraints to the new version
(with a [next significant release](https://getcomposer.org/doc/articles/versions.md#next-significant-release-operators) operator).
```diff
{
"require": {
- "myvendor/compatible-module": "~2.0",
+ "myvendor/compatible-module": "~3.0",
}
}
```
For modules with a compatible pre-release, use an explicit [stability constraints](https://getcomposer.org/doc/articles/versions.md#stability-constraints).
This can be changed to a [next significant release](https://getcomposer.org/doc/articles/versions.md#next-significant-release-operators) operator
once the module is stable.
```diff
{
"require": {
- "myvendor/prerelease-module": "~2.0",
+ "myvendor/prerelease-module": "~3.0@dev",
}
}
```
For modules that don't have a pre-release branch started, you should raise an issue on the repository asking for 4.0
compatibility.
For now, you should attempt to continue the upgrade without the module and temporarily disable its functionality.
### Using the upgrader tool {#upgrader-tool}
We've developed [an upgrader tool](https://github.com/silverstripe/silverstripe-upgrader) which you can use to help
with the upgrade process to SilverStripe 4. See the README documentation in the repository for more detailed
instructions on how to use it.
### `index.php` and `.htaccess` rewrites {#index-php-rewrites}
The location of SilverStripe's "entry file" has changed. Your project and server environment will need
to adjust the path to this file from `framework/main.php` to `public/index.php`.
Use [`recipe-core` index.php](https://github.com/silverstripe/recipe-core) as a reference to ensure the contents of
your `index.php` file is correct.
If you are running Apache, adjust your `.htaccess` file. For other webservers,
please consult the [installation guides](getting_started/installation/).
Since 4.0, URL rewrite capabilities are required,
unless you use PHP's built-in webserver through [silverstripe/serve](https://github.com/silverstripe/silverstripe-serve).
The [upgrader tool](https://github.com/silverstripe/silverstripe-upgrader/) has a task runner which
automates this process for you.
After installing, run the upgrader:
```
cd ~/my-project-root
upgrade-code doctor
```
This will ensure that your `.htaccess` and `index.php` are set to a reasonable default value
for a clean installation. If you have applied customisations to your `.htaccess`
file (e.g. a custom `main.php`, HTTP header configuration, deny file access),
you'll need to manually reapply these to the copied default file.
### Migrate File DataObject {#migrate-file}
Since the structure of `File` dataobjects has changed, a new task `MigrateFileTask`
has been added to assist in migration of legacy files (see [file migration documentation](/developer_guides/files/file_migration)).
```
$ ./vendor/bin/sake dev/tasks/MigrateFileTask
```
Any `File` in the database with an extension which is not in the `File.allowed_extensions` config will be considered
invalid and deleted from the database during migration.
Any invalid file on the filesystem will not be deleted in the filesystem, but will no longer be recorded in the
database, and should be cleaned up manually.
To disable deleting from the database, set the following config:
```yaml
SilverStripe\Assets\FileMigrationHelper:
delete_invalid_files: false
```
### Get upgrade tips on your code {#inspect-hints}
While there's some code we can automatically rewrite, other uses of changed SilverStripe APIs aren't that obvious.
You can use our heuristics to get some hints on where you need to review code manually.
Hints will generally point to more detail about a specific upgrade in this guide.
This task should be run *after* `upgrade-code upgrade`.
```
~/.composer/vendor/bin/upgrade-code inspect ./mysite
```
These hints only cover a part of the upgrade work,
but can serve as a good indicator for where to start.
### Object class replaced by traits {#object-replace}
Object has been superseded by traits.
- `Injectable`: Provides `MyClass::create()` and `MyClass::singleton()`
- `Configurable`: Provides `MyClass::config()`
- `Extensible`: Provides all methods related to extensions (E.g. add_extension()).
Upgrade subclass use
```diff
-class MyClass extends Object
-{
-}
+use SilverStripe\Core\Extensible;
+use SilverStripe\Core\Injector\Injectable;
+use SilverStripe\Core\Config\Configurable;
+class MyClass
+{
+ use Extensible;
+ use Injectable;
+ use Configurable;
+}
```
Upgrade references to $this->class
```diff
-$obj->class
+get_class($obj);
-$this->class;
+static::class;
```
Upgrade parse_class_spec()
```diff
-$spec = Object::parse_class_spec($spec);
+$spec = ClassInfo::parse_class_spec($spec);
```
Upgrade create_from_string()
```diff
-$obj = Object::create_from_string('Varchar(100)');
+$obj = Injector::inst()->create('Varchar(100)');
```
Upgrade extension use
```diff
-Object::add_extension('File', 'Versioned');
+File::add_extension(Versioned::class);
+DataObject::add_extension(File::class, Versioned::class); // alternate
-$has = Object::has_extension('File', 'Versioned');
+$has = File::has_extension(Versioned::class);
+$has = DataObject::has_extension(File::class, Versioned::class); // alternate
-$extensions = Object::get_extensions('File');
+$extensions = File::get_extensions();
+$extensions = DataObject::get_extensions(File::class); // alternate
```
### Rewrite literal table names {#literal-table-names}
In 3.x the class name of any DataObject matched the table name, but in 4.x all classes are namespaced, and it is
necessary to map between table and class for querying the database.
In order to ensure you are using the correct table for any class a new
[DataObjectSchema](api:SilverStripe\ORM\DataObjectSchema) service is available to manage these mappings
(see [Versioned documentation](/developer_guides/model/data_model_and_orm)).
For example, the below shows how you would update a query with a hard-coded table name:
```diff
public function countDuplicates($model, $fieldToCheck)
{
$query = new SilverStripe\ORM\Queries\SQLSelect();
+ $table = SilverStripe\ORM\DataObject::getSchema()->tableForField($model, $field);
- $query->setFrom("\"{$model}\"");
+ $query->setFrom("\"{$table}\"");
- $query->setWhere(["\"{$model}\".\"{$field}\"" => $model->$fieldToCheck]);
+ $query->setWhere(["\"{$table}\".\"{$field}\"" => $model->$fieldToCheck]);
return $query->count();
}
```
### Rewrite literal class names {#literal-class-names}
You'll need to update any strings that represent class names and make sure they're fully
qualified. In particular, relationship definitions such as `has_one` and `has_many` will need
to be updated to refer to fully qualified class names.
In configs and with literal PHP strings it is recommended to use the php `::class` constant,
as demonstrated below.
```diff
'Member',
+ 'Author' => Member::class,
];
}
```
In the context of YAML, the magic constant `::class` does not apply. Fully qualified class names must be hard coded.
```diff
-MyObject:
+My\Project\MyObject:
property: value
```
### Controllers renamed {#controllers-renamed}
The convention for naming controllers is now `[MyPageType]Controller`, where it used to be `[MyPageType]_Controller`. This change was made to be more compatible with the PSR-2 standards.
You can still use, for example, `Page_Controller`, but you will get a deprecation notice. It is
best to change it to `PageController` during your upgrade process. Keep in mind any modules or
other thirdparty code that extend `PageController` are likely to assume that class exists.
By default, a controller for a page type *must* reside in the same namespace as its page. To use different logic, override `SiteTree::getControllerName()`.
### Template locations and references {#template-locations}
Templates are now more strict about their locations.
Case is now also checked on case-sensitive filesystems.
Either include the folder in the template name (`renderWith('MyEmail.ss')` => `renderWith('emails/MyEmail.ss')`),
move the template into the correct directory, or both.
Core template locations have moved - if you're including or overriding these
(e.g. for `FormField` templates) please adjust to the new paths. The `forms` folder
no longer exists, and instead template locations will be placed in paths that match
the class namespace, `SilverStripe\Forms`.
When using the `<% include %>` template tag you can continue to leave out the `Includes` folder,
but this will search templates in the base folder if no Include can be found.
`<% include Sidebar %>` will match `Includes/Sidebar.ss`, but will also match `Sidebar.ss`
if the former is not present.
Please refer to our [template syntax](/developer_guides/templates/syntax) for details.
### Config settings should be set to `private static` {#private-static}
Class configuration defined as `static` properties need to be marked as `private` to take effect:
```diff
-public static $allowed_actions = [
+private static $allowed_actions = [
'suggest'
];
```
### Module paths can't be hardcoded {#module-paths}
You should no longer rely on modules being placed in a deterministic folder (e.g. `/framework`),
and use getters on the [Module](api:SilverStripe\Core\Manifest\Module) object instead.
They expect a module composer name, followed by the module relative path, separated by a double colon.
This prepares SilverStripe for moving modules out of the webroot at a later point.
Usage in templates:
```diff
-
+
-<% require css("framework/css/styles.css") %>
+<% require css("silverstripe/framework: css/styles.css") %>
```
Usage in Requirements:
```diff
-Requirements::css('framework/css/styles.css');
+Requirements::css('silverstripe/framework: css/styles.css');
```
Usage with custom logic:
```diff
+use SilverStripe\Core\Manifest\ModuleLoader;
+use SilverStripe\View\ThemeResourceLoader;
+use SilverStripe\View\SSViewer;
-$moduleFilePath = FRAMEWORK_DIR . '/MyFile.php';
+$moduleFilePath = ModuleLoader::getModule('silverstripe/framework')->getResource('MyFile.php')->getRelativePath();
-$baseFilePath = BASE_PATH . '/composer.json';
+$baseFilePath = Director::baseFolder() . '/composer.json';
-$mysiteFilePath = 'mysite/css/styles.css';
+$mysiteFilePath = ModuleLoader::getModule('mysite')->getResource('css/styles.css')->getRelativePath();
-$themesFilePath = SSViewer::get_theme_folder() . '/css/styles.css';
+$themes = SSViewer::get_themes();
+$themesFilePath = ThemeResourceLoader::inst()->findThemedResource('css/styles.css', $themes);
-$themeFolderPath = THEMES_DIR . '/simple';
+$themeFolderPath = ThemeResourceLoader::inst()->getPath('simple');
```
Usage for Page and ModelAdmin:
```php
class ListingPage extends \Page
{
private static $icon = 'mycompany/silverstripe-mymodule: client/images/sitetree_icon.png';
}
```
```php
class MyCustomModelAdmin extends \SilverStripe\Admin\ModelAdmin
{
private static $menu_icon = 'mycompany/silverstripe-mymodule: client/images/modeladmin_icon.png';
}
```
To ensure consistency, we've also deprecated support for path constants:
* Deprecated `FRAMEWORK_DIR` and `FRAMEWORK_PATH`
* Deprecated `FRAMEWORK_ADMIN_DIR` and `FRAMEWORK_ADMIN_PATH`
* Deprecated `FRAMEWORK_ADMIN_THIRDPARTY_DIR` and `FRAMEWORK_ADMIN_THIRDPARTY_PATH`
* Deprecated `THIRDPARTY_DIR` and `THIRDPARTY_PATH`
* Deprecated `CMS_DIR` and `CMS_PATH`
* Deprecated `THEMES_DIR` and `THEMES_PATH`
* Deprecated `MODULES_PATH` and `MODULES_DIR`
### Adapt tooling to modules in vendor folder {#vendor-folder}
SilverStripe modules can now be installed like any other composer package: In the `vendor/` folder
instead of the webroot. Modules need to opt in to this behaviour after they've ensured
that no hardcoded path references exist (see "Upgrade module paths in file references").
All core modules have been moved over already:
```diff
-framework/
+vendor/silverstripe/framework/
-cms/
+vendor/silverstripe/cms/
...
```
Since the `vendor/` folder isn't publicly accessible, modules need to declare
which files need to be exposed via the new [vendor-plugin](https://github.com/silverstripe/vendor-plugin)
(e.g. images or CSS/JS files). These files will be either symlinked or copied into a new `resources/`
folder automatically on `composer install`.
If your deployment process relies on `composer install` on the production environment,
and this environment supports symlinks, you don't need to change anything.
If you deploy release archives or upload code via FTP,
either ensure those archives can correctly extract symlinks,
or explicitly switch to the "copy" mode to avoid symlinks.
At this point, you should consider using a [public/ folder as the webroot](4.1.0#public-folder),
which was introduced in the newer [4.1.0](4.1.0) release.
The same [vendor-plugin](https://github.com/silverstripe/vendor-plugin) mechanism
should be used to expose public files in your themes and project folders.
### SS_Log replaced with PSR-3 logging {#psr3-logging}
One of the great changes that comes with SilverStripe 4 is the introduction of
[PSR-3](http://www.php-fig.org/psr/psr-3/) compatible logger interfaces. This
means we can use thirdparty services like Monolog. `SS_Log` has been replaced
with a logger which can be accessed using the LoggerInterface::class service.
For instance, code which logs errors should be upgraded as below:
```diff
-SS_Log::log('My error message', SS_Log::ERR);
+use Psr\Log\LoggerInterface;
+use SilverStripe\Core\Injector\Injector;
+Injector::inst()->get(LoggerInterface::class)->error('My error message');
```
If necessary, you may need to customise either the default logging handler, or
one of the error formatters. For example, if running unit tests you may want to
suppress errors. You can temporarily disable logging by setting a `NullHandler`
```yml
---
Name: custom-dev-logging
After: dev-logging
Only:
environment: dev
---
# Replace default handler with null
SilverStripe\Core\Injector\Injector:
Monolog\Handler\HandlerInterface: Monolog\Handler\NullHandler
```
Alternatively you can customise one or both of the below services:
- `Monolog\Formatter\FormatterInterface.detailed` service, which is used for displaying
detailed error messages useful for developers.
- `Monolog\Formatter\FormatterInterface.friendly` service, which is used to display "error"
page content to visitors of the site who encounter errors.
For example, a custom error page generator could be added as below:
```yml
---
Name: custom-errorpage
After:
- '#loggingformatters'
---
SilverStripe\Core\Injector\Injector:
Monolog\Formatter\FormatterInterface.friendly:
class: WebDesignGroup\ShopSite\Logging\ErrorPageFormatter
```
`WebDesignGroup\ShopSite\Logging\ErrorPageFormatter` should be a class that
implements the `Monolog\Formatter\FormatterInterface` interface.
### Upgrade `mysite/_config.php` {#config-php}
The global `$project` is deprecated in favour of the configuration setting
`SilverStripe\Core\Manifest\ModuleManifest.project`.
Changes to `mysite/_config.php`:
```diff
getSession()->set('loggedIn', null);
}
```
In some places it may still be necessary to access the session object where no request is available.
In rare cases it is still possible to access the request of the current controller via
`Controller::curr()->getRequest()` to gain access to the current session.
### Extensions are now singletons {#extensions-singletons}
Extensions are now all singletons, meaning that state stored as protected vars
within extensions are now shared across all object instances that use this extension.
As a result, you must take care that all protected vars are either refactored to be stored against
the owner object, or are keyed in a fashion distinct to the parent.
```diff
class MyExtension extends Extension {
public function getContent() {
- if (!$this->contentCache) {
- $this->contentCache = $this->generateContent();
- }
- return $this->contentCache;
+ $contentCache = $this->owner->getField('contentCache');
+ if (!$contentCache) {
+ $contentCache = $this->generateContent();
+ $this->owner->setField('contentCache', $contentCache);
+ }
+ return $contentCache;
}
}
```
When using extensions with distinct constructor arguments it's advisable to
use `yml` to register those constructor arguments and use a service name or alias in
`private static $extensions`. Please review the default service definitions below:
```yaml
---
Name: versionedextension
---
SilverStripe\Core\Injector\Injector:
# Versioning only
SilverStripe\Versioned\Versioned.versioned:
class: SilverStripe\Versioned\Versioned
constructor:
mode: Versioned
# Staging and Versioning
SilverStripe\Versioned\Versioned.stagedversioned:
class: SilverStripe\Versioned\Versioned
constructor:
mode: StagedVersioned
# Default is alias for .stagedversioned
SilverStripe\Versioned\Versioned: '%$SilverStripe\Versioned\Versioned.stagedversioned'
```
Upgrade your extension references:
```diff
class MyClass extends DataObject {
private static $extensions = [
- Versioned::class . '(Versioned)',
+ Versioned::class . '.versioned',
];
}
```
### Javascript files in framework/admin {#js-in-framework}
Most JavaScript files in `framework/javascript` have been removed,
and are bundled through [Webpack](http://webpack.github.io/) into a combined file instead.
If you have referenced these files elsewhere, please consider
running the ES6 source files in `vendor/silverstripe/admin/client/src/legacy`
through your own transpiling and bundle process.
This also includes JavaScript i18n support, and the removal of the `i18n::js_i18n`
configuration option used in `Requirements::add_i18n_javascript()`.
The CMS UI is moving away from `Requirements::combine_files()` in favour of Webpack.
This method is being considered for deprecation in future versions.
All JavaScript thirdparty dependencies have either been moved to NPM (see `package.json`),
or moved into the `framework/admin/thirdparty` folder. If you are hotlinking to any
of these files, please consider packaging your own versions in your projects and modules.
For CMS modules, you can also use many library globals which the core bundles already expose
(see [Build Tooling](/contributing/build_tooling)).
One commonly linked thirdparty dependency is `jquery.js` bundled with SilverStripe:
```
framework/thirdparty/jquery/jquery.js => framework/admin/thirdparty/jquery/jquery.js
```
If you have customised the CMS UI (via JavaScript or CSS), please read our guide to
[customise the admin interface](/developer_guides/customising_the_admin_interface/).
### Explicit text casting on template variables {#template-casting}
Now whenever a `$Variable` is used in a template, regardless of whether any casts or methods are
suffixed to the reference, it will be cast to either an explicit DBField for that field, or
the value declared by the `default_cast` on the parent object.
The default value of `default_cast` is `Text`, meaning that now many cases where a field was
left un-uncoded, this will now be safely encoded via `Convert::raw2xml`. In cases where
un-cast fields were used to place raw HTML into templates, this will now encode this until
explicitly cast for that field.
You can resolve this in your model by adding an explicit cast to HTML for those fields.
```diff
use SilverStripe\View\ViewableData;
use SilverStripe\Core\Convert;
class MyObject extends ViewableData
{
+ private static $casting = [
+ 'SomeHTML' => 'HTMLText'
+ ];
public function getSomeHTML
{
- $title = Convert::raw2xml($this->Title);
+ $title = Convert::raw2xml($this->Title);
return "
{$title}
";
}
}
```
If you need to encode a field (such as `HTMLText`) for use in HTML attributes, use `.ATT`
instead, or if used in an actual XML file use `.CDATA` (see [template casting](/developer_guides/templates/casting)).
### Replace UploadField with injected service {#uploadfield}
This field has been superceded by a new class provided by the
[asset-admin](https://github.com/silverstripe/silverstripe-asset-admin) module, which provides a more
streamlined simpler mechanism for uploading `File` dataobjects.
A helper service `FileHandleField` is provided to assist with dependency injection. Where the asset-admin
module is not installed this service will fall back to the `FileField` class instead.
Usages of `UploadField` will need to be upgraded as below.
```diff
use SilverStripe\Forms\FieldList;
-use SilverStripe\AssetAdmin\Forms\UploadField;
+use SilverStripe\Forms\FileHandleField;
+use SilverStripe\Core\Injector\Injector;
use SilverStripe\ORM\DataObject;
class MyClass extends DataObject
{
public function getCMSFields()
{
return new FieldList(
- new UploadField('Files')
+ Injector::inst()->create(FileHandleField::class, 'Files')
);
}
}
```
### i18n placeholders, plurals and i18nEntityProvider {#i18n}
In many cases, localisation strings which worked in 3.x will continue to work in 4.0, however certain patterns
have been deprecated and will be removed in 5.0. These include:
- `_t()` calls with sprintf-style placeholders (`%s`). Replace with named placeholders instead.
- `_t()` calls with non-associative injection arguments. Please use an associative array for all arguments.
- `_t()` calls which do not include a default value will now raise a warning. This can be disabled by setting
the `i18n.missing_default_warning` config to false.
If you attempt to use non-associative injection arguments with named placeholders, the result will
now trigger an exception.
Implementors of `i18nEntityProvider` should note that the return type for `provideI18nEntities()` has changed as well.
The non-associative array return type is deprecated. If returning a default string for a module
other than itself, it should return an array with the `default` and `module` keys respectively.
Full locale-rule respecting localisation for plural forms is now supported. The default
key for an object plural form is `.PLURALS`, and follows CLDR array form for each
pluralisation. See [the CLDR chart](http://www.unicode.org/cldr/charts/latest/supplemental/language_plural_rules.html)
for reference.
The below demonstrates how you can provide new localisation strings for an object,
including both plurals and cross-module localisations.
```php
use SilverStripe\ORM\DataObject;
class MyObject extends DataObject, implements i18nEntityProvider
{
public function provideI18nEntities()
{
return [
'MyObject.SINGULAR_NAME' => 'object',
'MyObject.PLURAL_NAME' => 'objects',
'MyObject.PLURALS' => [
'one' => 'An object',
'other' => '{count} objects',
],
'AnotherSection.DESCRIPTION' => [
'default' => 'This is the description for this section',
'module' => 'extendedmodule',
],
];
}
}
```
In YML format this will be expressed as the below:
`mymodule/lang/en.yml`:
```yml
en:
MyObject:
SINGULAR_NAME: 'object'
PLURAL_NAME: 'objects'
PLURALS:
one: 'An object',
other: '{count} objects'
```
`extendedmodule/lang/en.yml`:
```yml
en:
AnotherSection:
DESCRIPTION: 'This is the description for this section'
```
Usage of these pluralised strings is through the existing `_t()` method,
and require a `|` pipe-delimeter with a `{count}` argument.
```php
public function pluralise($count)
{
return _t('MyObject.PLURALS', 'An object|{count} objects', [ 'count' => $count ]);
}
```
In templates this can also be invoked as below:
```ss
<%t MyObject.PLURALS 'An item|{count} items' count=$Count %>
```
### Removed Member.DateFormat and Member.TimeFormat database settings {#member-date-time-fields}
We're using [native HTML5 date and time pickers](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/date)
in `DateField` and `TimeField` now ([discussion](https://github.com/silverstripe/silverstripe-framework/issues/6626)),
where the browser localises the output based on the browser/system preferences.
In this context it no longer makes sense to give users control over their own
date and time formats in their CMS profile.
Consequently, we've also removed `MemberDatetimeOptionsetField`.
`Member->getDateFormat()` and `Member->getTimeFormat()` still exist, and default to
the [IntlDateFormatter defaults](http://php.net/manual/en/class.intldateformatter.php) for the selected locale.
### New asset storage mechanism {#asset-storage}
File system has been abstracted into an abstract interface. By default, the out of the box filesystem
uses [Flysystem](http://flysystem.thephpleague.com/) with a local storage mechanism (under the assets directory).
Because the filesystem now uses the sha1 of file contents in order to version multiple versions under the same
filename, the default storage paths in 4.0 will not be the same as in 3.
In order to retain existing file paths in line with framework version 3 you should set the
`\SilverStripe\Filesystem\Flysystem\FlysystemAssetStore.legacy_paths` config to true.
Note that this will not allow you to utilise certain file versioning features in 4.0.
```yml
SilverStripe\Filesystem\Flysystem\FlysystemAssetStore:
legacy_paths: true
```
See our ["File Management" guide](/developer_guides/files/file_management) for more information.
Depending on your server configuration, it may also be necessary to adjust your assets folder
permissions. Please see the [common installation problems](/getting_started/installation/common_problems)
guide for configuration instruction.
### Image handling {#image-handling}
As all image-specific manipulations has been refactored from `Image` into an `ImageManipulations` trait, which
is applied to both `File` and `DBFile`. These both implement a common interface `AssetContainer`, which
has the `getIsImage()` method. In some cases, it may be preferable to invoke this method to detect
if the asset is an image or not, rather than checking the subclass, as the asset may also be a `DBFile` with
an image filter applied, rather than an instance of the `Image` dataobject.
In addition, a new file category `image/supported` has been added, which is a subset of the `image` category.
This is the subset of all image types which may be assigned to the [`Image`](api:SilverStripe\Assets\Image)
dataobject, and may have manipulations applied to it. This should be used as the file type restriction on any
[`UploadField`](api:SilverStripe\AssetAdmin\Forms\UploadField) which is intended to upload images for manipulation.
```diff
-if($file instanceof Image) {
- $upload = new UploadField();
- $upload->setAllowedFileCategories('image');
-}
+if ($file->getIsImage()) {
+ $upload = new UploadField(); // see higher about using FileHandleField instead
+ $upload->setAllowedFileCategories('image/supported');
+}
```
In cases where image-only assets may be assigned to relationships then your datamodel should specify explicitly
an `Image` datatype, or refer to `DBFile('image/supported')`.
```php
use SilverStripe\Assets\Image;
class MyObject extends SilverStripe\ORM\DataObject
{
private static $has_one = [
"ImageObject" => Image::class
];
private static $db = [
"ImageField" => "DBFile('image/supported')"
];
}
```
### Writing to `File` dataobjects or the assets folder {#write-file-dataobject}
In the past all that was necessary to write a `File` DataObject to the database was to ensure a physical file
existed in the assets folder, and that the Filename of the DataObject was set to the same location.
Since the storage of physical files is no longer a standard location, it's necessary to delegate the writing of such
files to the asset persistence layer. As a wrapper for an individual file, you can use any of the `setFrom*`
methods to assign content from a local (e.g. temporary) file, a stream, or a string of content.
You would need to upgrade your code as below.
```diff
-function importTempFile($tmp)
-{
- copy($tmp, ASSETS_PATH . '/imported/' . basename($tmp));
- $file = new File();
- $file->setFilename('assets/imported/'.basename($tmp));
- $file->write();
-}
+public function importTempFile($tmp)
+{
+ Versioned::reading_stage('Stage');
+ $file = new File();
+ $file->setFromLocalFile($tmp, 'imported/' . basename($tmp));
+ $file->write();
+ $file->doPublish();
+}
```
Note that 'assets' is no longer present in the new code, and the path beneath what was once assets is now
used to generate the 'filename' value. This is because there is no longer an assumption that files are
stored in the assets folder.
There are other important considerations in working with File dataobjects which differ from legacy:
* File synchronisation is no longer automatic. This is due to the fact that there is no longer a 1-to-1 relationship
between physical files and File DataObjects.
* Folder DataObjects are now purely logical DataObjects, and perform no actual filesystem folder creation on write.
* All Files are versioned, which means that by default, new File records will not be visibile
to the public site. You will need to make sure to invoke `->doPublish()` on any File DataObject
you wish visitors to be able to see.
You can disable File versioning by adding the following to your `_config.php`
```php
SilverStripe\Assets\File::remove_extension('Versioned');
```
### Custom image manipulations {#image-manipulations}
As file storage and handling has been refactored into the abstract interface, many other components which were
once specific to Image.php have now been moved into a shared `ImageManipulation` trait. Manipulations of file content,
which are used to generate what are now called "variants" of assets, is now a generic api available to both `File`
and `DBFile` classes through this trait.
Custom manipulations, applied via extensions, must be modified to use the new API.
For instance, code which sizes images to a fixed width should be updated as below:
Before:
```php
// in MyImageExtension.php
class MyImageExtension extends SilverStripe\ORM\DataExtension
{
public function GalleryThumbnail($height)
{
return $this->getFormattedImage('GalleryThumbnail', $height);
}
public function generateGalleryThumbnail(Image_Backend $backend, $height)
{
return $backend->paddedResize(300, $height);
}
}
// in _config.php
SilverStripe\Assets\Image::add_extension('MyImageExtension');
```
Now image manipulations are implemented with a single method via a callback generator:
```php
use SilverStripe\Assets\File;
// in MyImageExtension.php
class MyImageExtension extends SilverStripe\Core\Extension
{
public function GalleryThumbnail($height)
{
// Generates the manipulation key
$variant = $this->owner->variantName(__FUNCTION__, $height);
// Instruct the backend to search for an existing variant with this key,
// and include a callback used to generate this image if it doesn't exist
return $this->owner->manipulateImage($variant, function (Image_Backend $backend) use ($height) {
return $backend->paddedResize(300, $height);
});
}
}
// in _config.php
File::add_extension('MyImageExtension');
\SilverStripe\Filesystem\Storage\DBFile::add_extension('MyImageExtension');
```
There are a few differences in this new API:
* The extension is no longer specific to DataObjects, so it uses the generic `Extension` class instead of `DataExtension`
* This extension is added to both `DBFile` and `File`, or order to make this manipulation available to non-dataobject
file references as well, but it could be applied to either independently.
* A helper method `variantName` is invoked in order to help generate a unique variant key. Custom code may use another
generation mechanism.
* Non-image files may also have manipulations, however the specific `manipulateImage` should not be used in this case.
A generic `manipulate` method may be used, although the callback for this method both is given, and should return,
an `AssetStore` instance and file tuple (Filename, Hash, and Variant) rather than an Image_Backend.
### Customising file edit form fields {#customising-file-editform}
In 3.x, customisation of the edit form for files and images could be done using the conventional
`updateCMSFields(FieldList $fields)` hook. In 4.x, this method no longer has any influence
on the file edit form that gets rendered in asset-admin. Instead, create an extension for
`FileFormFactory` and use the `updateFormFields(FieldList $fields)` hook.
In this example, we'll add a `description` field to the `File` object and give it an editable
field in the CMS.
*app/_config/app.yml*
```yml
SilverStripe\Assets\File:
extensions:
- MyProject\MyFileExtension
SilverStripe\AssetAdmin\Forms\FileFormFactory:
extensions:
- MyProject\MyFormFactoryExtension
```
*app/src/MyFileExtension.php*
```php
namespace MyProject;
use SilverStripe\ORM\DataExtension;
class MyFileExtension extends DataExtension
{
private static $db = [
'Description' => 'Text',
];
}
```
*app/src/MyFormFactoryExtension.php*
```php
namespace MyProject;
use SilverStripe\Core\Extension;
use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\TextareaField;
class MyFormFactoryExtension extends Extension
{
public function updateFormFields(FieldList $fields)
{
$fields->insertAfter(
'Title',
TextareaField::create('Description', 'Description')
);
}
}
```
### File or Image shortcode handler {#file-shortcode}
The `handle_shortcode` methods have been removed from the core File and Image classes
and moved to separate classes in their own respective namespace.
`Image` and `File` do not implement the `ShortcodeHandler` interface anymore.
The shortcode handler for `File` has been moved to
`SilverStripe\Assets\ShortcodesFileShortcodeProvider` and
the Image handler has been moved to `SilverStripe\Assets\Shortcodes\ImageShortcodeProvider`
Example of changed shortcode handling:
```diff
+use SilverStripe\Assets\Shortcodes\FileShortcodeProvider;
class MyShortcodeUser extends Object
{
private $content;
public function Content($arguments, $parser, $shortcode)
{
- return File::handle_shortcode($arguments, $this->content, $parser, $shortcode);
+ return FileShortcodeProvider::handle_shortcode($arguments, $this->content, $parser, $shortcode);
}
}
```
### Composite db fields {#compositedbfield}
The `CompositeDBField` interface has been replaced with an abstract class, `DBComposite`. In many cases, custom code
that handled saving of content into composite fields can be removed, as it is now handled by the base class.
The below describes the minimum amount of effort required to implement a composite DB field.
```php
use SilverStripe\ORM\FieldType\DBComposite;
class MyAddressField extends DBComposite
{
private static $composite_db = [
'Street' => 'Varchar(200)',
'Suburb' => 'Varchar(100)',
'City' => 'Varchar(100)',
'Country' => 'Varchar(100)'
];
public function scaffoldFormField($title = null, $params = null)
{
new SilverStripe\Forms\TextField($this->getName(), $title);
}
}
```
### Removed `DataObject::database_fields` or `DataObject::db` {#dataobject-db-database-fields}
The methods `DataObject::database_fields()`, `DataObject::custom_database_fields()` and `DataObject::db()` have
been removed.
Instead, to get all database fields for a dataobject, including base fields (such as ID, ClassName, Created, and LastEdited), use `DataObject::getSchema()->databaseFields($className, $aggregate = true)`.
To omit the base fields, pass a value of `false` as the `$aggregate` parameter, e.g. `DataObject::getSchema()->databaseFields(Member::class, false)`.
Composite database fields are omitted from the `databaseFields()` method. To get those, use `DataObject::getSchema()->compositeFields($className, $aggregate = true)`.
### Rewrite SQLQuery to more specific classes {#sqlquery}
Instead of `SQLQuery`, you should now use `SQLSelect`, `SQLUpdate`, `SQLInsert`
or `SQLDelete` - check the [3.2.0](3.2.0#sqlquery) upgrading notes for details.
Example:
```diff
-function augmentSQL(SQLQuery &$query, DataQuery &$dataQuery = null)
+public function augmentSQL(SQLSelect $query, DataQuery $dataQuery = null)
{
if(!preg_match('/MyField/', implode(' ', $query->getWhere()))) {
- $query->addWhere('"MyField" = \'foo\'');
+ $query->addWhere(['"MyField"' => 'foo']);
}
}
```
### Upgrade BuildTask classes {#buildtask-segment}
Similarly to the `$table_name` configuration property for DataObjects, you should define a `private static $segment` for `BuildTask`
instances to ensure that you can still run your task via `sake dev/tasks/MyTask`. Without defining it, the default
will be a fully-qualified class name like `sake dev/tasks/Me-MyModule-Tasks-MyTask`. This can also be configured in YAML.
```php
use SilverStripe\Dev\BuildTask;
class MyTask extends BuildTask
{
private static $segment = 'MyTask';
}
```
### Moved ErrorPage into a new module {#errorpage}
**NOTE**: This is included automatically if you switch to using the `recipe-cms` module.
ErrorPage has been moved to a separate [silverstripe/errorpage module](http://addons.silverstripe.org/add-ons/silverstripe/errorpage)
to allow for alternative approaches to managing error responses.
The module is installed by default on new projects, but needs to be added to existing projects
to preserve functionality on the existing "Page not found" and "Server error" pages in the CMS.
composer require silverstripe/errorpage
Alternatively you can implement your own `onBeforeHTTPError()` handling to present custom errors.
By default, SilverStripe will display a plaintext "not found" message when the module isn't installed.
Check the [module upgrading guide](http://addons.silverstripe.org/add-ons/silverstripe/errorpage)
for more configuration API changes on the `ErrorPage` class.
### Server configuration files for assets {#assets-server-config}
Server configuration files for `/assets` are no longer static, and are regenerated via a set of
standard SilverStripe templates on flush. These templates include:
* `Assets_HTAccess.ss`: Template for public permissions on the Apache server.
* `Assets_WebConfig.ss`: Template for public permissions on the IIS server.
* `Protected_HTAccess.ss`: Template for the protected store on the Apache server (should deny all requests).
* `Protected_WebConfig.ss`: Template for the protected store on the IIS server (should deny all requests).
You will need to make sure that these files are writable via the web server, and that any necessary
configuration customisation is done via overriding these templates.
Depending on your server configuration, it may also be necessary to adjust your assets folder
permissions. Please see the [common installation problems](/getting_started/installation/common_problems)
guide for configuration instruction.
If upgrading from an existing installation, make sure to invoke `?flush=all` at least once.
See our ["File Security" guide](/developer_guides/files/file_security) for more information.
### TinyMCE v4 {#tinymce}
Please see the [TinyMCE upgrading guide](http://archive.tinymce.com/wiki.php/Tutorial:Migration_guide_from_3.x)
to assist with upgrades to customisations to TinyMCE v3.
In Framework 4.0 the user interface for TinyMCE has been trimmed down considerably, with certain toolbar
buttons removed from the default cms configuration:
* Strikethrough
* Styles dropdown
* Block quotes
* Horizontal Rule
* Undo / Redo
* Cut / Paste as word
* Select all
* Fullscreen
However, these function may be enabled on a case by case basis through modification of the default TinyMCE config,
or by creating custom configurations (check [TinyMCE documentation](https://www.tinymce.com/docs/configure/)).
The optional `ss_macron` plugin for inserting Māori diacritical marks
has been removed from core. You can configure the built-in `charmap` plugin instead:
```php
$editor = SilverStripe\Forms\HTMLEditor\HtmlEditorConfig::get('cms');
$editor->enablePlugins('charmap');
$editor->addButtonsToLine(1, 'charmap');
$editor->setOption('charmap_append', [
['256','A - macron'],
['274','E - macron'],
['298','I - macron'],
['332','O - macron'],
['362','U - macron'],
['257','a - macron'],
['275','e - macron'],
['299','i - macron'],
['333','o - macron'],
['363','u - macron']
]);
```
### DataObjects with the `Versioned` extension {#dataobject-versioned}
In most cases, versioned models with the default versioning parameters will not need to be changed. However,
there are now additional restrictions on the use of custom stage names.
Rather than declaring the list of stages a model has, the constructor for `Versioned` will take a single mode
parameter, which declares whether or not the model is versioned and has a draft and live stage, or alternatively
if it only has versioning without staging.
Each form of this extension is registered under the appropriate service identifier, which you should use in your
model as below:
```php
use SilverStripe\ORM\DataObject;
use SilverStripe\ORM\Versioning\Versioned;
/**
* This model has staging and versioning. Stages will be "Stage" and "Live"
*/
class MyStagedModel extends SilverStripe\ORM\DataObject
{
private static $extensions = [
Versioned::class . '.stagedversioned',
];
}
/**
* This model has versioning only, and will not has a draft or live stage, nor be affected by the current stage.
*/
class MyVersionedModel extends DataObject
{
private static $extensions = [
Versioned::class . '.versioned',
];
}
```
Additionally, the following api methods have been added:
* `Versioned::publishRecursive` Publishes this object, and all owned objects
* `Versioned::publishSingle` Publishes this object, but not owned objects
* `Versioned::copyVersionToStage` Replaces the old `publish` method.
These methods are deprecated:
* `Versioned::publish` Replaced by `Versioned::copyVersionToStage`
* `Versioned::doPublish` Replaced by `Versioned::publishRecursive`
### New Ownership API {#ownership}
In order to support the recursive publishing of dataobjects, a new API has been developed to allow
developers to declare dependencies between versioned objects.
```php
private static $owns = [
'Banners', // This page depends on banners, declared as a separate 'has_many'
'FooterImage', // This page depends on the footer image, declared as a separate 'has_one'
];
```
This is done to ensure that the published state of linked components are consistent with their "owner".
Without the concept of ownership, these linked components could be implicitly exposed on the frontend,
which may not align with the intent of the content author.
For instance, on a products page which has a list of products, the products should not be published unless
the products page is, too. The ownership API solves this by allowing you to declare a two-way relationship
between objects, typically, but not necessarily, linked by a database relationship
(`has_many`, `many_many`, etc.).
```php
use SilverStripe\Versioned\Versioned;
use SilverStripe\ORM\DataObject;
class ProductPage extends Page
{
private static $has_many = [
'Products' => Product::class
];
private static $owns = [
'Products'
];
}
class Product extends DataObject
{
private static $extensions = [
Versioned::class
];
private static $has_one = [
'Parent' => ProductPage::class
];
}
```
If your objects are linked by something other than a database relationship, for instance, a custom
getter that is computed at runtime, the same rules can be applied, as long as you provide an `$owned_by`
setting on the child object.
For more information, see the [DataObject ownership](https://docs.silverstripe.org/en/4/developer_guides/model/versioning/#dataobject-ownership) documentation and the [versioning](/developer_guides/model/versioning) documentation
### ChangeSet batch publishing {#changeset}
ChangeSet objects have been added, which allow groups of objects to be published in
a single atomic transaction.
This API will utilise the ownership API to ensure that changes to any object include
all necessary changes to owners or owned entities within the same changeset.
### New `[image]` shortcode in `HTMLText` fields {#image-shortcode}
The new Ownership API relies on relationships between objects.
Many of these relationships are already made explicit through `has_one`, `has_many` and `many_many`.
Images inserted into `HTMLText` fields (through a WYSIWYG editor) need to be tracked as well.
Instead of `` tags, the field will insert `[image]` shortcodes which point to the database identifier
of the `Image` record rather than its path on the filesystem. The shortcode will be automatically replaced
when the field is rendered. Newly inserted images will automatically receive the shortcode and ownership tracking,
and existing `` will continue to work.
### Renamed DBField and subclasses {#dbfield-rename}
All `DBField` subclasses are namespaced, have a `DB` prefix, and drop any existing `SS_` prefix.
For example, `Text` becomes `SilverStripe\ORM\FieldType\DBText`,
and `SS_Datetime` becomes `SilverStripe\ORM\FieldType\DBDatetime`.
Since they are aliased to their old name, you likely won't need to change your `DataObject::$db` definitions.
If you are instanciating or otherwise referencing those classes directly (not through strings),
they'll likely get rewritten automatically through the
[upgrader tool](https://github.com/silverstripe/silverstripe-upgrader/).
Example:
```diff
use SilverStripe\ORM\DataObject;
+use SilverStripe\ORM\FieldType\DBVarchar;
class MyObject extends DataObject
{
private static $db = [
'Number' => 'Int',
- 'Time' => 'SS_Datetime'
+ 'Time' => 'Datetime'
];
public function TextNumber()
{
- return new Varchar('TextNumber', 'Number is ' . $this->Number);
+ return new DBVarchar('TextNumber', 'Number is ' . $this->Number);
}
}
```
### Removed RestfulService {#restfulservice}
The `RestfulService` API was a (poor) attempt at a built-in HTTP client.
We've removed it, and recommend using [Guzzle](http://docs.guzzlephp.org/en/latest/) instead.
### Removed Oembed {#oembed}
Instead of Oembed, the framework now relies on [oscarotero/Embed](https://github.com/oscarotero/Embed) to handle getting the shortcode-data for embedding.
If you have custom embedding-code relying on `Oembed`, please refer to the documentation provided by this package.
### Configurable Admin URL {#admin-url}
The default `admin/` URL to access the CMS interface can now be changed via a custom Director routing rule for
`AdminRootController`. If your website or module has hard coded `admin` URLs in PHP, templates or JavaScript, make sure
to update those with the appropriate function or config call. See
[CMS architecture](/developer_guides/customising_the_admin_interface/cms-architecture#the-admin-url) for language
specific functions.
### Custom Authenticators {#custom-authenticators}
The methods `register()` and `unregister()` on `Authenticator` are deprecated in favour
of the `Config` system. This means that any custom `Authenticator` needs to be registered
through the YAML config. Check the [Authentication docs](/developer_guides/Security/Authentication)
for details how to setup a custom handler.
```yml
SilverStripe\Security\Authenticator;
authenticators:
- MyVendor\MyModule\MyAuthenticator
```
If there is no authenticator registered, `Authenticator` will try to fall back on the `default_authenticator`,
which can be changed using the following config, replacing the `MemberAuthenticator` with your authenticator:
```yml
SilverStripe\Security\Authenticator:
default_authenticator: SilverStripe\Security\MemberAuthenticator
```
As soon as a custom authenticator is registered, the default authenticator will not be available anymore, unless enabled specifically in the config.
By default, the `SilverStripe\Security\MemberAuthenticator` is seen as the default authenticator until it's explicitly set in the config.
Every request is now authenticated against an `IdentityStore` interface.
By default that's a `CookieAuthenticationHandler` and a `SessionAuthenticationHandler`,
which are called from the `AuthenticationHandler`.
If there is a valid `Member`, it is set on `Security::setCurrentUser()`, which defaults to `null`.
IdentityStores are responsible for logging members in and out (e.g. destroy cookies and sessions, or instantiate them).
### Config is now immutable {#config}
Performance optimisations have been made to Config which, under certain circumstances, require developer
care when modifying or caching config values. The top level config object is now immutable on application
bootstrap, and requires a developer to invoke `Config::modify()` to make mutable prior to modification.
This will immediately have a slight performance hit, so should be done sparingly, and avoided at all
if possible in performance intensive applications.
The `Config::inst()->update()` method is deprecated, and replaced with `Config::modify()->set()` and
`Config::modify()->merge()` to respectively replace and merge config.
When config is merged (either via modification or merged between yml blocks) falsey-values (including nulls)
now replace any prior values (even arrays).
One removed feature is the `Config::FIRST_SET` option. Either use uninherited config directly on the class
directly, or use the inherited config lookup. As falsey values now overwrite all parent class values, it is
now generally safer to use the default inherited config, where in the past you would need to use `FIRST_SET`.
### Replace Zend_Cache with symfony/cache {#cache}
We have replaced the unsupported `Zend_Cache` library with [symfony/cache](https://github.com/symfony/cache).
This also allowed us to remove SilverStripe's `Cache` API and use dependency injection with a standard
[PSR-16](http://www.php-fig.org/psr/psr-16/) cache interface instead.
Caches should be retrieved through `Injector` instead of `Cache::factory()`,
and have a slightly different API (e.g. `set()` instead of `save()`).
```diff
-$cache = Cache::factory('myCache');
+use Psr\SimpleCache\CacheInterface;
+$cache = Injector::inst()->get(CacheInterface::class . '.myCache');
// create a new item by trying to get it from the cache
-$myValue = $cache->load('myCacheKey');
+$myValue = $cache->get('myCacheKey');
// set a value and save it via the adapter
-$cache->save(1234, 'myCacheKey');
+$cache->set('myCacheKey', 1234);
// retrieve the cache item
-if (!$cache->load('myCacheKey')) {
- // ... item does not exists in the cache
-}
+if (!$cache->has('myCacheKey')) {
+ // ... item does not exists in the cache
+}
// Remove a cache key
-$cache->remove('myCacheKey');
+$cache->delete('myCacheKey');
```
With the necessary minimal config in `_config/mycache.yml`
```yml
---
Name: mycache
---
SilverStripe\Core\Injector\Injector:
Psr\SimpleCache\CacheInterface.myCache:
factory: SilverStripe\Core\Cache\CacheFactory
constructor:
namespace: 'mycache'
```
Caches are now configured through dependency injection services instead of PHP.
See our ["Caching" docs](/developer-guides/performance/caching) for more details.
Before (`mysite/_config.php`):
```php
Cache::add_backend(
'primary_memcached',
'Memcached',
[
'servers' => [
'host' => 'localhost',
'port' => 11211,
]
]
);
Cache::pick_backend('primary_memcached', 'any', 10);
```
After (`mysite/_config/config.yml`):
```yml
# setup cache
---
After:
- '#corecache'
---
SilverStripe\Core\Injector\Injector:
MemcachedClient:
class: 'Memcached'
calls:
- [ addServer, [ 'localhost', 11211 ] ]
SilverStripe\Core\Cache\CacheFactory:
class: 'SilverStripe\Core\Cache\MemcachedCacheFactory'
constructor:
client: '%$MemcachedClient
```
### User-code style upgrades {#usercode-style-upgrades}
Although it is not mandatory to upgrade project code to follow SilverStripe and
PSR-2 standard it is highly recommended to ensure that code is consistent. The below sections
will assist you with bringing yourself up to speed.
Please note that before upgrading user code style it is necessary to run the standard upgrade path
to fix references and usages of framework API.
#### Updating custom dataobjects to use existing table names
Once you have namespaced your user code it will be necessary to customise the `table_name` config
for your dataobjects, in order to ensure the correct table is used after upgrade. It is recommended
to point this to the base name of the class, excluding namespace, as in 3.x.
```diff
namespace WebDesignGroup\ShopSite;
use SilverStripe\ORM\DataObject;
use Page;
class GalleryPage extends Page
{
+ private static $table_name = 'GalleryPage';
}
```
#### Class name remapping {#class-name-remapping}
If you've namespaced one of your custom page types, you may notice a message in the CMS
telling you it's obsolete. This is likely because the `ClassName`
field in the `SiteTree` table still contains the singular model name, e.g. `GalleryPage`
and that when you change it to `WebDesignGroup\ShopSite\GalleryPage` then everything
works again.
The `dev/build` task is configured to look for a legacy class name mapping
configuration setting and will update this for you automatically. You can use
this to add DB upgrading rules for your own classes.
For example, you could upgrade references to the newly namespaced Banner class by adding
this to your `mysite/_config/upgrade.yml` file:
```yml
SilverStripe\ORM\DatabaseAdmin:
classname_value_remapping:
GalleryPage: WebDesignGroup\ShopSite\GalleryPage
```
The next time you run a dev/build the class name for all `GalleryPage` pages will
be automatically updated to the new `WebDesignGroup\ShopSite\GalleryPage`
#### PSR-2 Coding Standard compliance {#psr2}
You can use the [php codesniffer](https://github.com/squizlabs/PHP_CodeSniffer) tool
to not only detect and lint PSR-2 coding errors, but also do some minimal automatic
code style migration.
- Install the necessary library:
`composer require squizlabs/php_codesniffer`
- Copy silverstripe standards config file from framework/phpcs.xml to your project root:
`cp ./framework/phpcs.xml ./phpcs.xml`
- Run the automatic upgrade tool on your code folder
`vendor/bin/phpcbf ./mysite/code`
- Run the automatic linting tool to detect and manually fix other errors:
`vendor/bin/phpcs ./mysite/code`
Repeat the final step and manually repair suggested changes, as necessary,
until you no longer have any linting issues.
#### PSR-4 autoloading for project code {#psr4}
While not critical to an upgrade, SilverStripe 4.0 has adopted the [PSR-4 autoloading](http://www.php-fig.org/psr/psr-4/)
standard for the core modules, so it's probably a good idea to be consistent.
You can implement this in your composer configuration like so:
```json
{
"autoload": {
"psr-4": {
"WebDesignGroup\\ShopSite\\": "mysite/src/"
}
}
}
```
Now you just need to ensure that each class site in the correct folder location
(including case sensitivity) to match its namespace. For example,
`WebDesignGroup\ShopSite\Model\GalleryItem.php` should live at `mysite/src/Model/GalleryItem.php`.
Note that you don’t have to use `src/` as the root folder name. You can continue
to use `code/` if you want to. SilverStripe has adopted the PSR-4 approach and
have also started to use `src/` as a default folder location instead of
`code/`. If you’re going to change, it's probably a good time to do it while you're
upgrading.
For examples, take a look at the file/folder structure and to the
`composer.json` configuration in either the `framework` or `cms` modules.
Please note that there are changes to template structure which in some cases
require templates to be in a folder location that matches the namespace of the class
that it belongs to, e.g. `themes/mytheme/templates/MyVendor/Foobar/Model/MyModel.ss`.
## API Changes {#api-changes}
### General {#overview-general}
* Minimum PHP version raised to 5.6 (with support for PHP 7.x)
* Dropped support for PHP safe mode (removed php 5.4).
* Once PHP versions become [unsupported by the PHP Project](http://php.net/supported-versions.php)),
we drop support for those versions in the [next minor release](/contributing/release-process
This means PHP 5.6 and PHP 7.0 support will become unsupported in Dec 2018.
* Minimum CMS browser requirement raised from Internet Explorer 8 to Internet Explorer 11
* Updated PHPUnit from 3.7 to 4.8 ([upgrade notes](https://github.com/sebastianbergmann/phpunit/wiki/Release-Announcement-for-PHPUnit-4.0.0#backwards-compatibility-issues)).
Please remove any PHPUnit related `require_once()` calls (e.g. in `FeatureContext`
definitions of the [behat-extension](https://github.com/silverstripe-labs/silverstripe-behat-extension) module).
Run `composer require --dev 'phpunit/phpunit:~4.8'` on existing projects to pull in the new dependency.
* `always_populate_raw_post_data` will now raise a deprecation warning in install.php when running in php 5.x,
unless set to `-1`. This is due to `$HTTP_RAW_POST_DATA` being removed in php 7.
See the [http://php.net/manual/en/reserved.variables.httprawpostdata.php](php documentation) for more information.
* Admin URL can now be configured via custom Director routing rule
* `Controller::init` visibility changed to protected. Use `Controller::doInit()` instead.
* `Controller::join_links` supports an array of link sections.
* `Object::useCustomClass` has been removed. You should use the config API with Injector instead. {#object-usecustomclass}
* `Object::invokeWithExtensions` now has the same method signature as `Object::extend` and behaves the same way.
* `ServiceConfigurationLocator` is now an interface not a class.
* `i18nTextCollectorTask` merge is now true by default.
* `Object` has been broken up into various traits, each of which can be added to other objects independently:
* `Configurable` Provides Config API helper methods
* `Injectable` Provides Injector API helper methods
* `Extensible` Allows extensions to be applied
* `Convert` class has extra methods for formatting file sizes in php_ini compatible format
* `Convert::memstring2bytes()` will parse a php_ini memory size.
* `Convert::bytes2memstring()` will format the memory size with the appropriate scale.
* `SiteTree.alternatePreviewLink` is deprecated. Use `updatePreviewLink` instead.
* `Injector` dependencies no longer automatically inherit from parent classes.
* `$action` parameter to `Controller::Link()` method is standardised.
* Moved test database cleanup task from `sake dev/tests/cleanupdb` to `sake dev/tasks/CleanupTestDatabasesTask`
* `Injector::load` given a `src` parameter will no longer guess the
service name from the filename. Now the service name will either
by the array key, or the `class` parameter value.
* Uniqueness checks for `File.Name` is performed on write only (not in `setName()`)
* Created `Resettable` interface to better declare objects which should be reset between tests.
* Added a server requirement for the php-intl extension (shipped by default with most PHP distributions)
* Replaced `Zend_Date` and `Zend_Locale` with the `php-intl` extension.
* Consistently use CLDR date formats (rather than a mix of CLDR and `date()` formats)
* Moved config into a new module: [silverstripe/config](https://github.com/silverstripe/silverstripe-config/).
See upgrading notes below.
* Falsey config values (null, 0, false, etc) can now replace non-falsey values.
* Introduced new `ModuleLoader` manifest, which allows modules to be found via composer name.
E.g. `$cms = ModuleLoader::inst()->getManifest()->getModule('silverstripe/cms')`
* `ClassManifest::getOwnerModule()` now returns a `Module` object instance.
* Moved `Object::parse_class_spec()` to `ClassInfo`
* Removed `create_from_spec()`. Supportede by `Injector` natively.
* Moved `Controller::Link()` to parent class (`RequestHandler`)
* Moved `Controller::redirect()` to parent class (`RequestHandler`)
* Moved `Controller::redirectBack()` to parent class (`RequestHandler`)
* `RequestHandler::Link()` now relies on the `url_segment` handler being provided for the class.
If left unset, this will raise an error.
* `RequestHandler::getBackURL()` and `getReturnReferer()` have been added to safely inspect the current request
to see if there is a url to redirect back to.
* Renamed `LeftAndMain_TreeNode` to `CMSMain_TreeNode`
* Removed `LeftAndMain::SiteTreeAsUL()` (override left in `CMSMain`)
* Removed `LeftAndMain::setApplicationLink()` (Deprecated from 3.x)
* Removed `LeftAndMain::setApplicationName()` (Deprecated from 3.x)
* Moved `LeftAndMain::getSiteTreeFor()` to `CMSMain`
* Moved `LeftAndMain::getsubtree()` to `CMSMain`
* Moved `LeftAndMain::updatetreenodes()` to `CMSMain`
* Moved `LeftAndMain::savetreenodes()` to `CMSMain`
* Renamed `LeftAndMain::EditorToolbar()` to `Modals()`. Returns a `ModalController` handler
instance rather than a `HTMLEditorField_Toolbar`
* Removed `Director::$dev_servers` and `Director::$test_servers`
* Removed `Director::$urlParams` and `Director::setUrlParams()`
* Removed `Director.alternate_host`. Use `Director.alternate_base_url` instead.
* Removed `Director.alternate_protocol`. Use `Director.alternate_base_url` instead.
* 'BlockUntrustedIPS' env setting has been removed.
All IPs are untrusted unless `SS_TRUSTED_PROXY_IPS` is set to '*'
See [Environment Management docs](/getting_started/environment_management/) for full details.
* `SS_TRUSTED_PROXY_HOST_HEADER`, `SS_TRUSTED_PROXY_PROTOCOL_HEADER`, and `SS_TRUSTED_PROXY_IP_HEADER`
are no longer supported. These settings should go into the Injector service configuration for
TrustedProxyMiddleware instead.
* Removed `SS_HOST` environment constant. Use `SS_BASE_URL` instead.
* `Member::canLogIn()` now returns boolean. Use `Member::validateCanLogin()` to get a `ValidationResult`
* Moved `Security::has_default_admin` to `DefaultAdminService::hasDefaultAdmin()`
* Moved `Security::check_default_admin` to `DefaultAdminService::isDefaultAdminCredentials()`
* Moved `Security::default_admin_torname` to `DefaultAdminService::getDefaultAdminUsername()`
* Moved `Security::default_admin_password` to `DefaultAdminService::getDefaultAdminPassword()`
* Moved `Security::setDefaultAdmin` to `DefaultAdminService::setDefaultAdmin()`
* Moved `Security::clearDefaultAdmin` to `DefaultAdminService::clearDefaultAdmin()`
* Moved `Security::findAnAdministrator` to `DefaultAdminService::findOrCreateDefaultAdmin()`
* Deprecated `Member::checkPassword()`. Use `Authenticator::checkPassword()` instead
* Deprecated `RequestFilter`. Use
[HTTPMiddleware](/developer_guides/controllers/middlewares) instead.
* Changed `RequestFilter`: The `$session` and `$dataModel` variables removed from preRequest / postRequest.
* `Extension` instances are now singletons and no longer are constructed once per extended object.
See the 'Upgrade extensions to work as singletons' section on this page for more information.
* Removed `ConfigureFromEnv.php`
* Changed `Session` object to avoid static access (`Session::inst()`).
Use it from the current request via `$request->getSession()` instead.
All static methods have been removed, and the `inst_` prefix removed from all instance members.
* `Director.rules` config no longer support `redirect:` directly via config.
* Removed `Director::get_environment_type()` and `Director::set_environment_type()`.
Get the `Kernel` instance via injector and query `getEnvironment()` instead.
(e.g. `$type = Injector::inst()->get(Kernel::class)->getEnvironment()`)
* Removed `Director.environment_type` to configure the environment via YAML.
Use a [.env file](/getting_started/environment_management) to manage environment settings.
* Removed `increase_xdebug_nesting_level_to()` (functionality has been inlined into `AppKernel`)
* Moved `set_increase_time_limit_max()` to `Environment::setTimeLimitMax()`
* Moved `get_increase_time_limit_max()` to `Environment::getTimeLimitMax()`
* Moved `set_increase_memory_limit_max()` to `Environment::setMemoryLimitMax()`
* Moved `get_increase_memory_limit_max()` to `Environment::getMemoryLimitMax()`
* Moved `increase_time_limit_to()` to `Environment::increaseTimeLimitTo()`
* Moved `increase_memory_limit_to()` to `Environment::increaseMemoryLimitTo()`
* Moved `translate_memstring()` to `Convert::memstring2bytes`.
* Moved `getTempFolder()` to `TempFolder::getTempFolder()`
* Removed `getTempParentFolder()`
* Removed `getTempFolderUsername()`
* Removed `CMSMain::buildbrokenlinks()`
* Removed `Injector::unregisterAllObjects()`. Use `unregisterObjects` to unregister
groups of objects limited by type instead.
* Removed `SS_Log`. Use `Injector::inst()->get(LoggerInterface::class)` instead.
* Removed `CMSBatchAction_Delete`
* Removed `CMSBatchAction_DeleteFromLive`
* Removed `CMSMain.enabled_legacy_actions` config.
* `CMSmain.getCMSTreeTitle` is now ignored on extensions. Use `updateCMSTreeTitle` in extensions instead.
* Removed ability to run tests via web requests (`http://mydomain.com/dev/tests`), use the standard CLI
command instead (`vendor/bin/phpunit`).
* Removed `dev/jstests/` controller
* Removed `TestRunner` and `JSTestRunner`
* Removed `PhpUnitWrapper`, `PhpUnitWrapper_3_4`, `PhpUnitWrapper_3_5`, `PhpUnitWrapper_Generic`, `SapphireTestSuite` APIs
* Removed `SapphireTestReporter` and `CliTestReporter`
* Removed `SapphireTest::skipTest()`, use `markTestSkipped()` in a `setUp()` method instead
* `debugmethods` querystring argument has been removed from debugging.
* Moved `ErrorPage` into a new module: [silverstripe/errorpage](http://addons.silverstripe.org/add-ons/silverstripe/errorpage). See upgrading notes in that module.
* Removed `VirtualPage_Controller`. Virtual pages will now share whichever controller the “target” page uses
* Removed `Config_LRU`
* Removed `SilverStripeInjectionCreator`
* Removed `i18n::get_translatable_modules` method.
* Removed `i18nTextCollector_Writer_Php`
* `i18nTextCollector` no longer collects from `themes/` root dir.
Modules which provide themes via `/themes/` are now preferred.
* Removed `i18nSSLegacyAdapter`
* Removed `FunctionalTest::stat()`
* Removed `LeftAndMainMarkingFilter`
* Removed `Controller::getFormOwner()`
* Removed `TeamCityListener`
* Removed the `Spyc` YAML library. Please load it yourself, or use the included Symfony YAML component.
* Removed `RestfulService`. Use Guzzle instead ([details](#restfulservice))
* Removed `Oembed` in favour of a
[oscarotero/Embed](https://github.com/oscarotero/Embed)
* Removed `TextParser` and `BBCodeParser`. These are available in an archived module,
[silverstripe-archive/bbcodeparser](https://github.com/silverstripe-archive/silverstripe-bbcodeparser)
* Removed `ViewableData::ThemeDir`. Use `ThemeResourceLoader::findThemedResource` in conjunction with `SSViewer::get_themes` instead.
* Removed `Config::FIRST_SET` and `Config::INHERITED`
* Removed `RequestHandler.require_allowed_actions`. This is now fixed to on and cannot be
disabled.
* Removed `ClassManifest::getModules()`. Use `ModuleLoader` instead
* Removed `ClassManifest::getConfigDirs()`. Use `ModuleLoader` instead
* Removed `ClassManifest::getConfigs()`. Use `ModuleLoader` instead
* Removed `Session::set_config()` and `Session::get_config()`. Use the `Session.timeout` config setting instead
* Removed `Security::set_login_recording()` and `Security::get_login_recording()`.
Use the `Security.login_recording` config setting instead.
* Removed `ModelAsController::find_old_page()`. Use `OldPageRedirector::find_old_page()` instead
* Removed `RootURLController:set_default_homepage_link()` and `RootURLController::get_default_homepage_link()`.
Use the `RootURLController.default_homepage_link` config setting instead.
* Removed `CreditCardField`, `CountryDropdownField`, `PhoneNumberField`, `MemberDatetimeOptionsetField`, `InlineFormAction`.
Use custom code instead
* Removed `ResetFormAction`, use `FormAction::create()->setAttribute('type', 'reset')` instead
* `Injector` now complies with [PSR-11](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-11-container.md).
Accordingly, `hasService()` has been renamed to `has()`, and `get()` will throw
`SilverStripe\Core\Injector\InjectorNotFoundException` when the service can't be found.
* Removed `CustomMethods::createMethod()`. Use closures instead.
* Removed `Extension::$ownerBaseClass` property. You should use `$this->owner->baseClass()` instead.
The second argument of `Extension::setOwner()` has also been removed.
* Deprecated `ClassInfo::baseDataClass()`. Use `DataObject::getSchema()->baseDataClass()` instead.
* Deprecated `ClassInfo::table_for_object_field()`. Use `DataObject::getSchema()->tableForField()` instead
* Deprecated `Config::inst()->update()`. Use `Config::modify()->set()` or `Config::modify()->merge()`
instead.
### ORM {#overview-orm}
* Deprecated `SQLQuery` in favour `SQLSelect` ([details](#sqlquery))
* Added `DataObject.many_many` 'through' relationships now support join dataobjects in place of
automatically generated join tables. See the [/developer_guides/relations](datamodel relationship docs)
for more info.
* Added `DataList::filter()` by null now internally generates "IS NULL" or "IS NOT NULL" conditions
appropriately on queries.
* Changed `DataObject` constructor to require an additional parameter, which must be included in subclasses.
* `DataObject::db` now returns composite fields.
* `DataObject::ClassName` field has been refactored into a `DBClassName` type field (instead of a string).
* `DataObject::can()` has new method signature with `$context` parameter.
* `DataObject::duplicate()` now requires explicit flag to duplicate `belongs_many_many` (off by default),
but now works with unsaved relations. By default only `many_many` are duplicated.
* `HTMLText` no longer enables shortcodes by default. Two injector aliases have been created for this
class which can be used to select the correct behaviour. Use `HTMLText` for shortcodes enabled,
and `HTMLFragment` without shortcodes enabled (the new default).
* Renamed `String::NoHTML()` to `Plain()`
* Removed `String::LimitWordCountXML()`. Use `LimitWordCount()` instead.
* Removed `String::BigSummary()`. Use `Summary()` instead.
* Changed `HTMLText` limit methods to operate on plain text rather than attempt to manipulate the underlying HTML.
* `FormField::Title()` and `FormField::RightTitle()` are now cast as plain text by default (but can be overridden).
* Renamed `FormField#createTag()` to `FormField::create_tag()`
* `Hierarchy` class has had much of it's functionality refactored out into `MarkedSet`:
* `isMarked()`
* `isTreeOpened()`
* `isExpanded()`
* `markByID()`
* `markPartialTree()`
* `markExpanded()`
* `markUnexpanded()`
* `markToExpose()`
* `markClosed()`
* `markOpened()`
* `markedNodeIDs()`
* `getChildrenAsUL()` replaced with `renderChildren()`, which now takes a template name.
* `markingFilterMatches()` (and made protected)
* `markChildren()` (and made protected)
* Search filter classes (e.g. `ExactMatchFilter`) are now registered with `Injector`
via a new `DataListFilter.` prefix convention.
see [search filter documentation](/developer_guides/model/searchfilters) for more information.
* `Permission::flush_permission_cache()` renamed to `reset()` and added to `Resettable` interface.
* Changed `Versioned` constructor now only allows a single string to declare whether staging is enabled or not. The
number of names of stages are no longer able to be specified. See below for upgrading notes for models
with custom stages.
* Renamed `Versioned::reading_stage()` to `set_stage()` (throws an error if setting an invalid stage)
* Renamed `Versioned::current_stage()` to `get_stage()`
* Removed `Versioned::getVersionedStages()`
* Removed `Versioned::get_live_stage()`. Use the `Versioned::LIVE` constant instead.
* Removed `Versioned::getDefaultStage()`. Use the `Versioned::DRAFT` constant instead.
* Changed `Versioned::$versionableExtensions` from `private static` to `protected static`
* Added `Versioned::hasStages()` to check if an object has a given stage.
* Added `Versioned::stageTable()` to get the table for a given class and stage.
* Any extension declared via `versionableExtensions` config on Versioned dataobject must now
`VersionableExtension` interface at a minimum. `Translatable` has been removed from default
`versionableExtensions`
* The default CMS delete behaviour for versioned dataobjects is now to delete from both draft
and live stages, and to save to the archive. There is no longer a separate "Archive" action.
* Any writes to versioned dataobjects (in either Draft or Live) will always write to the draft
(main) table as a source of truth. This means that records created in Live mode will always be
available to the CMS and in draft mode.
* `_versions` suffixed tables are now renamed to `_Versions`. This fix will be automatically
applied during dev/build.
* A lot of standard versioned API has been refactored from `SiteTree` into `Versioned` extension.
* All versioned DataObjects have `canPublish()`, `canArchive()`, `canUnpublish()` permission checks
* All versioned Dataobjects have `doPublish()`, `doArchive()`, `doPublish()`, and `doUnpublish()` actions.
However, `do*()` methods will no longer automatically check `can*()` permissions, and must be done by
usercode before invocation.
* Moved `SiteTree::getIsAddedToStage()` to `Versioned::isOnDraftOnly()`
* Moved `SiteTree::getIsModifiedOnStage()` to `Versioned::isModifiedOnDraft()`
* Moved `SiteTree::isPublished()` to `Versioned`.
* Renamed `SiteTree::getExistsOnLive()` to `isPublished()`
* Added `Versioned::isOnDraft()`
* Added `Versioned::isArchived()`
* Added `Versioned::isOnLiveOnly()`
* Added `ChangeSet` and `ChangeSetItem` for batch publishing of versioned dataobjects.
* Added `DataObject.table_name` config to customise the database table for any record.
* Added `DataObjectSchema` class to assist with mapping between classes and tables.
* Changed `DataObject.indexes` to use `columns` instead of `value` to define index contents.
* Changed `Money` to treat values as empty only if `Amount` field is null. If an `Amount` value
is provided without a `Currency` specified, it will be formatted as per the current locale.
* Removed `DatabaseAdmin#clearAllData()`. Use `DB::get_conn()->clearAllData()` instead
* Moved `SapphireTest` temp DB methods into a new `TempDatabase` class.
This allows applications to create temp databases when not running tests.
* Moved `SapphireTest::using_temp_db()` to `TempDatabase->isUsed()`
* Moved `SapphireTest::kill_temp_db()` to `TempDatabase->kill()`
* Moved `SapphireTest::empty_temp_db()` to `TempDatabase->clearAllData()`
* Moved `SapphireTest::create_temp_db()` to `TempDatabase->build()`
* Moved `SapphireTest::delete_all_temp_dbs()` to `TempDatabase->deleteAll()`
* Moved `SapphireTest::resetDBSchema()` to `TempDatabase->resetSchema()`
* `DBDate`, `DBTime` and `DBDatetime` have changed methods:
* Added `getTimestamp()` to get the respective date / time as unix timestamp (seconds since 1970-01-01)
* Changed `Format()` method to use [CLDR format strings](http://userguide.icu-project.org/formatparse/datetime),
rather than [PHP format string](http://php.net/manual/en/function.date.php).
E.g. `d/m/Y H:i:s` (php format) should be replaced with to `dd/MM/y HH:mm:ss` (CLDR format).
* Added `getISOFormat()` to return the standard date/time ISO 8601 pattern in CLDR format.
* Changed `setValue()` method to expect dates and times to be passed in
ISO 8601 format (y-MM-dd) or (HH:mm:ss). Certain date formats will attempt to parse with
the below restrictions:
- `/`, `.` or `-` are supported date separators, but will be replaced with `-` internally.
- US date formats (m-d-y / y-d-m) will not be supported and may be parsed incorrectly.
(Note: Date form fields will still support localised date formats).
- `dd-MM-y` will be converted to `y-MM-dd` internally.
- 2-digit values for year will now raise errors.
* Changed `FormatFromSettings()` to default to `Nice()` format if no member is logged in.
* Changed `Nice()`, `Long()` and `Full()` methods to follow standard formatting rules for the
current locale, rather than pre-defined formats.
* Added `Short()` to format concise date/time values, as a shorter version than `Nice`
* Added `getFormatter()` to return a locale-specific date/time formatter.
* Added `DBTime::FormatFromSettings()`
* Deprecated globals `$database` and `$databaseConfig`. Use `DB::setConfig()` instead.
* Removed `DataModel`
* Changed `DataObject::can*()` methods to no longer accept a member ID. These must now be passed a `Member` object or left null
* Moved `DataObject::db()` to `DataObjectSchema::fieldSpec()` and `DataObjectSchema::fieldSpecs()`
* Moved `DataObject::manyManyComponent()` to `DataObjectSchema` (access through `DataObject->getSchema()`)
* Moved `DataObject::belongsToComponent()` to `DataObjectSchema` (access through `DataObject->getSchema()`)
* Moved `DataObject::hasOneComponent()` to `DataObjectSchema` (access through `DataObject->getSchema()`)
* Moved `DataObject::hasManyComponent()` to `DataObjectSchema` (access through `DataObject->getSchema()`)
* Moved `DataObject::getRemoteJoinField()` to `DataObjectSchema` (access through `DataObject->getSchema()`)
* Moved `DataObject::database_fields()` to `DataObjectSchema::databaseFields()`
* Moved `DataObject::has_own_table()` to `DataObjectSchema::classHasTable()`
* Moved `DataObject::composite_fields()` to `DataObjectSchema::compositeFields()`
* Moved `DataObject::manyManyExtraFieldsForComponent()` to `DataObjectSchema`
* Deprecated `DataObject::$destroyed`
* Removed `DataObject::validateModelDefinitions`. Relations are now validated within `DataObjectSchema`
* Removed `DataObject` methods `hasOwnTableDatabaseField`, `has_own_table_database_field` and {#dataobject-has-own}
`hasDatabaseFields` are superceded by `DataObjectSchema::fieldSpec`.
Use `$schema->fieldSpec($class, $field, DataObjectSchema::DB_ONLY | DataObjectSchema::UNINHERITED )`.
Exclude `uninherited` option to search all tables in the class hierarchy.
* Renamed `DataObject::is_composite_field()` to `DataObjectSchema::compositeField()`
* Renamed `DataObject::custom_database_fields()`to `DataObjectSchema::databaseFields()`
or `DataObjectSchema::fieldSpecs()` instead.
* Removed `DataList::getRelation`, as it was mutable. Use `DataList::applyRelation` instead, which is immutable.
* `Member` Field 'RememberLoginToken' removed, replaced with 'RememberLoginHashes' has_many relationship
* Removed `UpgradeSiteTreePermissionSchemaTask`
* Removed `EncryptAllPasswordsTask`
* Removed `DBString::LimitWordCountXML()` method. Use `LimitWordCount()` for XML safe version.
* Removed `SiteTree::getExistsOnLive()`. Use `isPublished()` instead.
* Removed `SiteTree::getIsDeletedFromStage()`. Use `isOnDraft()` instead (inverse case).
* Changed `DataObject.many_many` to remove triangular resolution. Both the `many_many` and `belongs_many_many`
must point directly to the specific class on the opposing side, not a subclass or parent.
* Removed `DataObject::validateModelDefinitions()`. Validation and parsing of config is now handled
within `DataObjectSchema`.
* `CMSBatchAction_Delete` removed. Use `CMSBatchAction_Archive` instead.
* Removed `Date::past_date()`
* Removed `Date::prior_monday()`
* Removed `Date::weekday()`
* Removed `Date::next_day()`
* Removed `Date::day_before()`
* Removed `Date::days_between()`
* Removed `Date::nice_format()`. Use locale-specific formatting for `Nice()`
* Removed `Time::nice_format()`. Use locale-specific formatting for `Nice()`
* Removed `Datetime::nice_format()`. Use locale-specific formatting for `Nice()`
* Removed `Time::TwelveHour()`
* Removed `Time::Nice24()`
* Removed `Money::NiceWithShortname()`
* Removed `Money::NiceWithName()`
* Removed `Money::getShortName()`
* Removed `Money::getCurrencyName()`
* Removed additional arguments from `Money::getSymbol()`. The result of this value is
now localised based on the currency code assigned to the `Money` instance
* Removed `Money::getAllowedCurrencies`. Apply validation to `MoneyField` instead.
* Removed `Hierarchy::parentStack()` removed. Use `getAncestors()` instead
* Removed `Hierarchy::doAllChildrenIncludingDeleted()`. Use `AllChildrenIncludingDeleted()` instead
* Removed `Hierarchy::naturalNext()`
* Removed `Hierarchy::naturalPrev()`
* Removed `Hierarchy::markingFinished()`
### Filesystem {#overview-filesystem}
* Image manipulations have been moved into a new [`ImageManipulation`](api:SilverStripe\Assets\ImageManipulation) trait.
* Removed `CMSFileAddController`
* `UploadField::setAllowedFileCategories('image')` now excludes non-resizeable images. 'unresizeable_image' is
can be used to validate these types.
* `Image_Backend` API now loads and saves from `AssetContainer` instances rather than local files.
* The following File categories have been renamed: 'zip' to 'archive', 'doc' to 'document', and 'mov' to 'video'
* `File::updateLinks()` no longer takes urls as parameters. All file links are now identified either by
the `DataObject::ID` in a `data-fileid` property, or via shortcodes. This is necessary because file
urls are no longer able to identify assets.
* Extension point `HtmlEditorField::processImage` has been removed, and moved to `Image::regenerateImageHTML()`
* `Upload::load()` now stores assets directly without saving into a `File` dataobject.
* Protected file storage is now a core Framework API. See [File Security](/developer_guides/files/file_security) for
more information.
* `File` is now versioned, and should be published before they can be used on the frontend.
See section on [Migrating File DataObject from 3.x to 4.0](#migrating-file-dataobject-from-3x-to-40)
below for upgrade notes.
* New filesystem abstraction including new `DBFile` database field to hold file references.
* `ShortcodeHandler` interface to help generate standard handlers for HTML shortcodes in the editor.
* `File::handle_shortcode()` and `Image::handle_shortcode()` have moved to their own classes in `SilverStripe\Assets\Shortcodes`,
and are named `FileShortcodeProvider` and `ImageShortcodeProvider` respectively.
* `AssetNameGenerator` interface, including a `DefaultAssetNameGenerator` implementation, which is used to generate
renaming suggestions based on an original given filename in order to resolve file duplication issues.
* `GeneratedAssetHandler` API now used to store and manage generated files (such as those used for error page
cache or combined files).
* `Requirements_Minifier` API can be used to declare any new mechanism for minifying combined required files.
By default this api is provided by the `JSMinifier` class, but user code can substitute their own.
* `AssetControlExtension` is applied by default to all DataObjects, in order to support the management
of linked assets and file protection.
* `ProtectedFileController` class is used to serve up protected assets.
* `AssetAdaptor` has a new config `default_server` which helps tell the code which server type to use if no matching type was found by scanning the server software - defaults to `apache`
The following image manipulations have been removed:
* Renamed `Image::SetRatioSize()` to `Fit()`
* Renamed `Image::SetWidth()` to `ScaleWidth()`
* Renamed `Image::SetHeight()` to `ScaleHeight()`
* Renamed `Image::SetSize()` to `Pad()`
* Renamed `Image::PaddedImage()` to `Pad()`
* Renamed `Image::CroppedImage()` to `Fill()`
* Renamed `Image::AssetLibraryPreview()` to `PreviewThumbnail()`
* Renamed `Image::AssetLibraryThumbnail()` to `CMSThumbnail()`
The following `File` methods have been removed. Since there is no longer any assumed local path for any file,
methods which dealt with such paths may no longer be relied on.
* Removed `File::deletedatabaseOnly()`
* Renamed `File::link_shortcode_handler()` to `handle_shortcode()`
* Removed `File::setParentID()`
* Removed `File::getFullPath()`
* Removed `File::getRelativePath()`
* Removed `File::Content` database field (wasn't used by core)
Image manipulations have been moved out of `Image` and now available to any `File` or `DBFile` which has the
appropriate mime types. The following file manipulations classes and methods have been removed:
* Removed `Image_Cached`
* Removed `Image::regenerateFormattedImages()`
* Removed `Image::getGeneratedImages()`
* Removed `Image::deleteFormattedImages()`
* Removed `Image::handle_shortcode()` moved to `SilverStripe\Assets\Shortcodes\ImageShortcodeProvider::handle_shortcode()`
* Removed `AssetAdmin::deleteunusedthumbnails()`
* Removed `AssetAdmin::getUnusedThumbnails()`
* Removed `Folder_UnusedAssetsField`
* Removed `Folder::syncChildren()`
* Removed `Folder::constructChild()`
* Removed `Folder::addUploadToFolder()`
* Removed `RegenerateCachedImagesTask`
* Removed `CleanImageManipulationCache`
* Removed `Filesystem::sync()`
* Removed `AssetAdmin::doSync()`
### Templates and Form {#overview-template}
* Upgrade to TinyMCE 4.x
* Templates now use a standard template lookup system via `SSViewer::get_templates_by_class()`
which builds a candidate list for a given class. Actual resolution of existing templates
for any list of candidates is actually performed by `SSViewer::chooseTemplate`
* `HtmlEditorConfig` is now an abstract class, with a default implementation `TinyMCEConfig` for the built in
TinyMCE editor.
* `HtmlEditorField::setEditorConfig()` may now take an instance of a `HtmlEditorConfig` class, as well as a
standard config identifier name.
* `HeaderField` requires a `$name` constructor argument (`new HeaderField('MyName', 'My Title')`
* `FormField` templates no longer look in the 'forms' folder for templates. As all form fields are
now namespaced, the path for these templates will now match the namespace of the given class instead.
* `$module` parameter in `themedCSS()` and `themedJavascript()` removed.
* Ability to select a theme through `admin/settings` has been removed from `SiteConfig`. Please use `SSViewer.themes` config instead.
* `FormAction::setValidationExempt())` can be used to turn on or off form validation for individual actions
* GridField edit form now has improved support for versioned DataObjects, with basic publishing
actions available when editing records.
* `PopoverField` added to provide popup-menu behaviour in react forms (currently not available for
non-react forms).
* Introduction of experimental `FormFactory` API as a substitute for DataObject classes being responsible
for building their own form fields. This builds a form based on a given controller and model,
and can be customised on a case by case basis. This has been introduced initially for the asset-admin
module.
* Introduced `AssetAdmin\Forms\UploadField` as a React-friendly version of `UploadField`. This may also
be used in normal entwine forms for managing files in a similar way to `UploadField`. However, this
does not support inline editing of files.
* Added method `FormField::setSubmittedValue($value, $data)` to process input submitted from form
submission, in contrast to `FormField::setValue($value, $data)` which is intended to load its
value from the ORM. The second argument to `setValue()` has been added.
* `FormField::create_tag()` moved to `SilverStripe\View\HTML->createTag()`.
* `CompositeField::setID()` is removed. ID is generated from name indirectly.
Use SilverStripe\Form\FormField::setName() instead
* Changed `ListboxField` to multiple only. Previously, this field would operate as either a
single select (default) or multi-select through `setMultiple()`.
Now this field should only be used for multi-selection. Single-selection should be done using
a regular `DropdownField`.
* `GroupedDropdownField::setDisabled()` now only accepts a list of values
instead of a list of grouped values. The method now expectes
a non-associative array of values (not titles) or an `SS_List`.
The following methods and properties on `Requirements_Backend` have been renamed: {#requirements}
* Renamed `$combine_files` to `$combinedFiles`
* Renamed `$combine_js_with_min` to `$minifyCombinedFiles`
* Renamed `$write_header_comments` to `$writeHeaderComment`
* Renamed `$write_js_to_body` to `$writeJavascriptToBody`
* Renamed `$force_js_to_bottom` to `$forceJSToBottom`
* Renamed `get_combined_files_enabled()` to `getCombinedFilesEnabled()`
* Renamed `set_combined_files_enabled()` to `setCombinedFilesEnabled()`
* Renamed `get_suffix_requirements()` to `getSuffixRequirements()`
* Renamed `set_suffix_requirements()` to `setSuffixRequirements()`
* Renamed `get_custom_scripts()` to `getCustomScripts()`
* Renamed `unblock_all()` to `unblockAll()`
* Renamed `include_in_response()` to `includeInResponse()`
* Renamed `combine_files()` to `combineFiles()`
* Renamed `get_combine_files()` to `getCombinedFiles()`
* Renamed `clear_combined_files()` to `clearCombinedFiles()`
* Renamed `process_combined_files()` to `processCombinedFiles()`
* Renamed `set_write_js_to_body()` to `setWriteJavascriptToBody()`
* Renamed `set_force_js_to_bottom()` to `setForceJSToBottom()`
* Added `get_minify_combined_js_files()` and `set_minify_combined_js_files()`
* Added `get_force_js_to_bottom()`
* Added `get_write_js_to_body()`
* Changed `includeInHTML()` to remove the first parameter (`$template`)
A new config `Requirements_Backend.combine_in_dev` has been added in order to allow combined files to be
forced on during development. If this is off, combined files is only enabled in live environments.
Form validation has been refactored significantly. A new `FormMessage` trait has been created to {#form-validation}
handle `FormField` and `Form` messages. This trait has a new`setMessage()` API to assign a message, type, and cast.
Use `getMessage()`, `getMessageType()`, `getMessageCast()` and `getMessageCastingHelper()` to retrieve them.
`Form` behaviour methods have been changed:
* `__construct()` now allows a `RequestHandler` to be passed as a first argument, rather than a controller.
In addition this argument is now optional. This allows forms to be constructed as a model only.
* `validate` is replaced with `validationResult` instead, which returns a `ValidationResult` instance.
This is no longer automatically persisted in the state by default, unless a redirection occurs.
You can also save any response in the state by manually invoking `saveFormState` inside a custom
validation response handler.
* Renamed `setupFormErrors()` to `restoreFormState()`
* Renamed `resetValidation()` to `clearFormState()`
* Added `loadMessagesFrom()` to load a `ValidationResult` into a form.
* Changed `setMessage()` to accept `$cast` as a third parameter (instead of a `$escapeHtml` boolean)
* Removed `messageForForm()`. Use `setMessage()` or `sessionMessage()` instead.
* Added `getSessionValidationResult()` / `setSessionValidationResult()` to get / set session errors
* Added `getSessionData()` / `setSessionData()` to get / set field values cached in the session
* Removed `addErrorMessage()`. Use `sessionMessage()` or `sessionError()` to add a
form level message, throw a `ValidationException` during submission, or add a custom validator.
* `Form` is no longer a `RequestHandler`, but implements the `HasRequestHandler` interface and returns
a `FormRequestHandler` instance from `getRequestHandler()`. the `Form` constructor no longer has
any mandatory parameters, and the first parameter allows a non-`Controller` `RequestHandler` to be
passed.
* Moved `buttonClicked()` to `FormRequestHandler`
* Moved `checkAccessAction()` to `FormRequestHandler`
* Moved `handleField()` to `FormRequestHandler`
* Moved `httpSubmission()` to `FormRequestHandler`
* Moved `Link()` to `FormRequestHandler`
`Validator` methods have changed:
* Changed `validate()` to return a `ValidationResult` instance.
* Removed `requireField()`. Use `RequiredFields` subclass instead.
`ValidationResult` now has these methods:
* Added `serialize()` / `unserialize()` for saving within session state
* Renamed `messageList()` to `getMessages()`
* Changed `error()` to `addMessage()` / `addError()` / `addFieldMessage()` / `addFieldError()`
* Renamed `valid()` to `isValid()`
`ValidationException` has these changes:
* Changed constructor to remove second argument (`$message`). It now only accepts `$result`,
which may be a string, and optional `$code`
New `DatetimeField` methods replace `getConfig()` / `setConfig()`: {#datetimefield}
* Added `getTimezone()` / `setTimezone()`
* Added `getDateTimeOrder()` / `setDateTimeOrder()`
* Added `getLocale()` / `setLocale()`
* Removed `datavaluefield` config as internal data value is now fixed to ISO 8601 format
The `DatetimeField` has changed behaviour:
* It uses a combined input instead of a composite from `DateField` and `TimeField`
Consequently, `getDateField()` and `getTimeField()` have been removed.
* It returns [ISO 8601 normalised dates](https://html.spec.whatwg.org/multipage/infrastructure.html#local-dates-and-times)
by default in `Value()`, which include a "T" separator between date and time.
This is required to allow HTML5 input. Either use `setHTML5(false)` to set your custom format,
or use `dataValue()` to retrieve a whitespace separated representation.
* It no longer accepts `setValue()` as an array with 'date' and 'time' keys
* Added `getHTML5()` / `setHTML5()`
New `DateField` methods replace `getConfig()` / `setConfig()`: {#datefield}
* Added `getDateFormat()` / `setDateFormat()`
* Added `getMinDate()` / `setMinDate()`
* Added `getMaxDate()` / `setMaxDate()`
* Added `getLocale()` / `setLocale()`
The `DateField` has changed behavior:
* `DateField` no longer provides a jQuery UI date picker (`showcalendar` option),
and uses [HTML5 date pickers](https://www.wufoo.com/html5/types/4-date.html) by default instead.
* `DateField` provides an optional polyfill for
[browsers without HTML5 date picker support](http://caniuse.com/#feat=input-datetime)
* The `dmyfields` option has been replced with native HTML5 behaviour (as one single ``).
* `getClientLocale` / `setClientLocale` have been removed (handled by `DateField->locale` and browser settings)
New `TimeField` methods replace `getConfig()` / `setConfig()` {#timefield}
* Added `getTimeFormat()` / `setTimeFormat()`
* Added `getLocale()` / `setLocale()`
Further API changes:
* Removed `TabularStyle`
* Removed `NestedForm`
* Removed `FieldList->getTabPathRewrites()`
* Removed `FieldList->setTabPathRewrites()`
* Removed `FieldList->rewriteTabPath()`
* Removed `Form->transformTo()`
* Removed `Form->callfieldmethod()`
* Removed `Form->single_field_required()`
* Removed `Form->current_action()`
* Removed `Form->set_current_action()`
* Removed `Form->testSubmission()`
* Removed `Form->testAjaxSubmission()`
* Removed `ValidationResult->messageList()`
* Removed `ValidationResult->codeList()`
* Removed `ValidationResult->message()`
* Removed `ValidationResult->starredList()`
* Removed `ValidationResult->error()`
* Removed `ValidationResult->valid()`
* Removed `ReportAdminForm.ss` template
* Removed `FormField::dontEscape()`. Escaping is now managed on a class by class basis.
* Removed `PermissionCheckboxSetField::getAssignedPermissionCodes()`
* Removed `Requirements::delete_combined_files()`
* Removed `NumericField_Readonly`. Use `setReadonly(true)` instead.
* Removed `SSViewer->set_source_file_comments()`
* Removed `SSViewer->get_source_file_comments()`
* Removed `SSViewer->getOption()`
* Removed `SSViewer->setOption()`
* Removed `MemberDatetimeOptionsetField` (no replacement)
* Removed `DateField_View_JQuery` (replaced with native HTML5 support in `DateField`)
* Moved `HTMLEditorField_Toolbar` to `SilverStripe\Admin\ModalController`
* Moved `HTMLEditorField_Embed` to`SilverStripe\AssetAdmin\EmbedResource`
* Removed `HTMLEditorField_File`
* Removed `HTMLEditorField_Flash`
* Removed `HTMLEditorField_Image`
### i18n {#overview-i18n}
* Upgrade of i18n to symfony/translation
* Localisation based on language-only (without any specific locale) is now supported
* `i18nEntityProvider::provideI18nEntities()` Now is expected to return only a single array
map of key to default values.
* i18n keys for '.PLURAL_NAME' and '.SINGULAR_NAME' have been changed back to use the namespaced class names
for all DataObject subclasses, rather than just the basename without namespace.
* i18n key for locale-respective pluralisation rules added as '.PLURALS'. These can be configured
within yaml in array format as per [ruby i18n pluralization rules](http://guides.rubyonrails.org/i18n.html#pluralization).
* Moved `i18n.all_locales` config setting to `SilverStripe\i18n\Data\Locales.locales`
* Moved `i18n.common_languages` config setting to `SilverStripe\i18n\Data\Locales.languages`
* Moved `i18n.likely_subtags` config setting to `SilverStripe\i18n\Data\Locales.likely_subtags`
* Moved `i18n.tinymce_lang` config setting to `SilverStripe\Forms\HTMLEditor\TinyMCEConfig.tinymce_lang`
* Moved `i18n::get_tinymce_lang()` to `SilverStripe\Forms\HTMLEditor\TinyMCEConfig::get_tinymce_lang()`
* Moved `i18n::get_locale_from_lang()` to `SilverStripe\i18n\Data\Locales::localeFromLang()`
* Moved `i18n::get_lange_from_locale()` to `SilverStripe\i18n\Data\Locales::langFromLocale()`
* Moved `i18n::validate_locale()` to `SilverStripe\i18n\Data\Locales::validate()`
* Moved `i18n::get_common_languages()` to `SilverStripe\i18n\Data\Locales::getLanguages()`
* Moved `i18n::get_locale_name()` to `SilverStripe\i18n\Data\Locales::localeName()`
* Moved `i18n::get_language_name()` to `SilverStripe\i18n\Data\Locales::languageName()`
* Moved `i18n.module_priority` config setting to `SilverStripe\i18n\Data\Sources.module_priority`
* Moved `i18n::get_owner_module()` to `SilverStripe\Core\Manifest\ClassManifest::getOwnerModule()`
This now returns a `Module` object instance instead of a string.
* Moved `i18n::get_existing_translations()` to `SilverStripe\i18n\Data\Sources::getKnownLocales()`
* Removed `Zend_Translate`
* Changed `i18n::_t()` to remove support for sprintf-style `%s` arguments
* Changed `i18n::_t()` to remove support for non-associative injection with named parameters
* Removed `i18n::get_language_name()`
* Removed `i18n::get_language_code()`
* Removed `i18n::get_common_locales()`
* Removed `i18n.common_locales`
### Email {#overview-mailer}
* Changed `Mailer` to an interface
* `Email` re-written to be powered by [SwiftMailer](https://github.com/swiftmailer/swiftmailer)
* Default template body variable renamed from `$Body` to `$EmailContent`
* Renamed `Email->setTemplate()` to `Email->setHTMLTemplate()`
* Added `Email->setPlainTemplate()` for rendering plain versions of email
* Renamed `Email->populateTemplate()` to `Email->setData()`
### SapphireTest {#overview-testing}
* `is_running_tests()` is no longer public and user code should not rely on this. Test-specific behaviour
should be implemented in `setUp()` and `tearDown()`
* Removed `setUpOnce()`. Please use `setUpBeforeClass()`
* Removed `tearDownOnce()`. Please use `tearDownAfterClass()`
* Removed `TestListener`
* Renamed `$requiredExtensions` to `$required_extensions` (and made static)
* Renamed `$extraDataObjects` to `$extra_dataobjects` (and made static)
* Renamed `$extraControllers` to `$extra_controllers` (and made static)
### Security {#overview-security}
* `LoginForm` now has an abstract method `getAuthenticatorName()`. If you have made subclasses of this,
you will need to define this method and return a short name describing the login method.
* `MemberLoginForm` has a new constructor argument for the authenticator class, although this is usually
constructed by `MemberAuthenticator` and won't affect normal use.
* `Authenticator` methods `register()` and `unregister()` are deprecated in favour of using `Config`
* Unused `SetPassword` property removed from `Member`. Use `Member::changePassword` or set `Password` directly.
## Change Log
### Security
* 2017-05-09 [30986b4ea](https://github.com/silverstripe/silverstripe-framework/commit/30986b4ea3d6a111e182f1970267696b991ea660) Lock out users who dont exist in the DB (Daniel Hensby) - See [ss-2017-002](http://www.silverstripe.org/download/security-releases/ss-2017-002)
* 2016-05-03 [70480f5ee](https://github.com/silverstripe/silverstripe-framework/commit/70480f5ee433d9a67bcd54fa7f284d764fb73a47) HtmlEditorField_Toolbar#viewfile not whitelisting URLs (Damian Mooyman) - See [ss-2015-027](http://www.silverstripe.org/download/security-releases/ss-2015-027)
### API Changes
* 2017-10-05 [b996e2c22](https://github.com/silverstripe/silverstripe-framework/commit/b996e2c22c47eb8eecd1656e1dd69160b97fc68c) Extensions are now stateless (Damian Mooyman)
* 2017-09-27 [f686b5082](https://github.com/silverstripe/silverstripe-framework/commit/f686b50824a75eb17677987adfcc4366dc9f8f65) Rename assert dos to assert list (Werner M. Krauß)
* 2017-09-05 [496b9c8c](https://github.com/silverstripe/silverstripe-cms/commit/496b9c8c045af1625f9b3484b3db5a0607ae10d0) Implement insert-anchor modal (Damian Mooyman)
* 2017-09-04 [a9c479f2](https://github.com/silverstripe/silverstripe-cms/commit/a9c479f26a9d0d48b3d708873d9034c1d7496b48) Allow SiteTree::Link to be extended (Damian Mooyman)
* 2017-08-23 [595ba75a5](https://github.com/silverstripe/silverstripe-framework/commit/595ba75a50e2cb8eb0b5fc7088f398474f17785d) Make FormField::hasClass return a boolean instead of an int (Robbie Averill)
* 2017-08-14 [c14233f74](https://github.com/silverstripe/silverstripe-framework/commit/c14233f7435d87fe1641c179f647a8e5441afc5d) Enable config files to be loaded for behat tests (Damian Mooyman)
* 2017-08-08 [2c54e331](https://github.com/silverstripe/silverstripe-cms/commit/2c54e33106ae1dfa2eb4d873769c2f17edd406ff) Virtual pages now respect cascade_deletes on source page (Damian Mooyman)
* 2017-08-08 [323644c7b](https://github.com/silverstripe/silverstripe-framework/commit/323644c7bb963f9310704a7871419ade356c1683) Implement cascade_deletes (Damian Mooyman)
* 2017-07-31 [078a508d7](https://github.com/silverstripe/silverstripe-framework/commit/078a508d718f9a37dc6ac413be2db5ecd124a03b) Replace legacy tiny_mce_gzip compressor with asset generator (Damian Mooyman)
* 2017-07-26 [3364f5c5](https://github.com/silverstripe/silverstripe-cms/commit/3364f5c52bc7a5059412a946fbe193235196001b) Use setTitleField to use MenuTitle for selecting internal links (Damian Mooyman)
* 2017-07-16 [f4af1fab](https://github.com/silverstripe/silverstripe-reports/commit/f4af1fab7731c76c742d0823717b22db00268516) Remove Report::add_excluded_report() and make excluded_reports configurable (Robbie Averill)
* 2017-07-12 [2b266276c](https://github.com/silverstripe/silverstripe-framework/commit/2b266276c2146f4d8fd6e5fec69e28fc9848586e) Implement new module sorting pattern (Aaron Carlino)
* 2017-07-12 [a69600fa](https://github.com/silverstripe/silverstripe-cms/commit/a69600fa7b4fccf55ef1264cb62e97b559b87469) Update module sorting (Damian Mooyman)
* 2017-07-11 [ccda816f9](https://github.com/silverstripe/silverstripe-framework/commit/ccda816f909b3004c3a8e00dec02fa37e35d1667) added flatList argument for generating the json tree list with a context string property (Christopher Joe)
* 2017-07-11 [2d04b84](https://github.com/silverstripe/silverstripe-installer/commit/2d04b844b78d4b4fbbff054e58fbf1b06d965060) Convert installer to recipe (Damian Mooyman)
* 2017-06-27 [cf511562](https://github.com/silverstripe/silverstripe-reports/commit/cf5115624dee09861409370446ebb27f5a3ebee9) Remove REPORTS_DIR and its use. (Sam Minnee)
* 2017-06-27 [ef6db273](https://github.com/silverstripe/silverstripe-cms/commit/ef6db273a1e71d35185e1d505d9d85d2849e9ded) Remove CMS_PATH and CMS_DIR (Sam Minnee)
* 2017-06-27 [741166e36](https://github.com/silverstripe/silverstripe-framework/commit/741166e36963735884a847b24a3bbf05776f41e0) ModulePath template global now takes any composer package name. (Sam Minnee)
* 2017-06-25 [69fe16689](https://github.com/silverstripe/silverstripe-framework/commit/69fe166897686b50ef2536808fb3ba5712408174) Director::handleRequest() is no longer static - use a Director service (Sam Minnee)
* 2017-06-25 [d20ab50f9](https://github.com/silverstripe/silverstripe-framework/commit/d20ab50f9d480372a2b6489278f9876d1a85134c) Stronger Injector service unregistration (Damian Mooyman)
* 2017-06-25 [e92c63c54](https://github.com/silverstripe/silverstripe-framework/commit/e92c63c5457bf56fe320d83977e3475c1fc60908) Remove $sid argument of Session::start() (Sam Minnee)
* 2017-06-23 [10866c080](https://github.com/silverstripe/silverstripe-framework/commit/10866c0809623426e875c335ee9175e11935f98c) Replace Director::direct() with Director::handleRequest(). (Sam Minnee)
* 2017-06-22 [b30f410ea](https://github.com/silverstripe/silverstripe-framework/commit/b30f410ea02b2330eef871a2eb59ad022fdfa102) Deprecate RequestFilter. (Sam Minnee)
* 2017-06-22 [3873e4ba0](https://github.com/silverstripe/silverstripe-framework/commit/3873e4ba008cfc2af7e26ca86665affc289cd677) Refactor bootstrap, request handling (Damian Mooyman)
* 2017-06-15 [024371c37](https://github.com/silverstripe/silverstripe-framework/commit/024371c37e96326c0ae001d5940e1a1839191f6f) authentication ValidationResult handling to pass by-reference (Damian Mooyman)
* 2017-06-15 [62d095305](https://github.com/silverstripe/silverstripe-framework/commit/62d095305b965840a2991b5f19f16e9453dd0456) Update DefaultAdmin services (Damian Mooyman)
* 2017-06-12 [77ec2b90](https://github.com/silverstripe/silverstripe-cms/commit/77ec2b90c6e72039394cfd96f403f562b43cdbec) Removed ErrorPage (Jonathon Menz)
* 2017-06-10 [413b4936a](https://github.com/silverstripe/silverstripe-framework/commit/413b4936a1cfe6447832c08c26a4fceb9a3a36a6) Add extension hook to FormField::extraClass() (Damian Mooyman)
* 2017-06-09 [0559da7f](https://github.com/silverstripe/silverstripe-siteconfig/commit/0559da7f5c7064dc98d85d78273f83b910af0771) s for Authenticator refactor (Damian Mooyman)
* 2017-06-09 [03125b8c](https://github.com/silverstripe/silverstripe-reports/commit/03125b8c6cd0f2deb757d856807b050566adeb89) s for Authenticator refactor (Simon Erkelens)
* 2017-05-25 [f82f0844](https://github.com/silverstripe/silverstripe-cms/commit/f82f0844c1ffd8c7fd40520072983e9eaf82ae21) Add insert internal link modal (Damian Mooyman)
* 2017-05-25 [e7d87add9](https://github.com/silverstripe/silverstripe-framework/commit/e7d87add9f6cafb8fdfd49310a0106ce94356762) Remove legacy HTMLEditor classes (Damian Mooyman)
* 2017-05-22 [2e94a11](https://github.com/silverstripe/silverstripe-installer/commit/2e94a11c8b6863cca505ff08e3fb430cb1b9190a) Add pgsql + behat tests to installer (Damian Mooyman)
* 2017-05-19 [ad43a8292](https://github.com/silverstripe/silverstripe-framework/commit/ad43a8292339af4df5614e9c29fcd7e71bc9fc7a) Consistent use of inst() naming across framework (Robbie Averill)
* 2017-05-19 [963d9197d](https://github.com/silverstripe/silverstripe-framework/commit/963d9197d3e714e4f137ae538b86c4bd6288c0e2) Ensure that all DataQuery joins are aliased based on relationship name (Damian Mooyman)
* 2017-05-19 [100048da3](https://github.com/silverstripe/silverstripe-framework/commit/100048da33c7ea2561de008033deed99a59e7723) PSR-11 compliance (fixes #6594) (#6931) (Ingo Schommer)
* 2017-05-17 [fba8e2c24](https://github.com/silverstripe/silverstripe-framework/commit/fba8e2c245ba21febb983de8148242fdf27394c4) Remove Object class (Damian Mooyman)
* 2017-05-12 [906a4c444](https://github.com/silverstripe/silverstripe-framework/commit/906a4c444b43fddc243f905962a40f6fc25a2dac) Add streamable response object (Damian Mooyman)
* 2017-05-12 [23e1aa8c](https://github.com/silverstripe/silverstripe-cms/commit/23e1aa8c45f31ac191ed005bbf761229d923074f) Refactor inherited permissions (#1811) (Damian Mooyman)
* 2017-05-11 [0b70b008b](https://github.com/silverstripe/silverstripe-framework/commit/0b70b008b36b3d4c0c7cb42db86eea3ad675f7a9) Implement InheritedPermission calculator (#6877) (Damian Mooyman)
* 2017-05-11 [259f957ce](https://github.com/silverstripe/silverstripe-framework/commit/259f957ce89be071ddd7ba850c8c941fe51ef59b) Rename services to match FQN of interface / classes (Damian Mooyman)
* 2017-05-11 [49e559b0](https://github.com/silverstripe/silverstripe-cms/commit/49e559b08cebe4311e1af581c15a42eddc467242) Rename services to match FQN of interface / classes (Damian Mooyman)
* 2017-05-08 [484a4ec4](https://github.com/silverstripe/silverstripe-cms/commit/484a4ec4f6f59d34934233cca3c5ea5ff0d2beaf) Removed deprecated RootURLController:set_default_homepage_link (Ingo Schommer)
* 2017-05-08 [7c2f49d44](https://github.com/silverstripe/silverstripe-framework/commit/7c2f49d443833dd151c137f6f596210b37399ba8) Removed RootURLController:set_default_homepage_link() (Ingo Schommer)
* 2017-05-08 [cec983b62](https://github.com/silverstripe/silverstripe-framework/commit/cec983b628f3ee8780126a940351ca6268d2ff4b) Removed deprecated ModelAsController::find_old_page() (Ingo Schommer)
* 2017-05-08 [de41e145](https://github.com/silverstripe/silverstripe-cms/commit/de41e14518fee36be957afe146ea1acd63d8e9f1) Removed deprecated ModelAsController::find_old_page() (Ingo Schommer)
* 2017-05-08 [5784a7d2d](https://github.com/silverstripe/silverstripe-framework/commit/5784a7d2d7c4c5ec27765498660f9a71cbdb7f48) Removed deprecated Security::set_login_recording() (Ingo Schommer)
* 2017-05-08 [2a7c76e9e](https://github.com/silverstripe/silverstripe-framework/commit/2a7c76e9e99eb2ae315671191ba3575c827a0108) Removed deprecated DatabaseAdmin#clearAllData() (Ingo Schommer)
* 2017-05-08 [81e5c7ac4](https://github.com/silverstripe/silverstripe-framework/commit/81e5c7ac4017fe5813e9eebb5edb5cc38a41dfa1) Removed deprecated Session::set_config() (Ingo Schommer)
* 2017-05-08 [1d438d3fb](https://github.com/silverstripe/silverstripe-framework/commit/1d438d3fb5eb822081c7e428d57c271bf3aee180) Remove deprecated FormAction::createTag() (Ingo Schommer)
* 2017-05-08 [75b7e1906](https://github.com/silverstripe/silverstripe-framework/commit/75b7e19066c504708b721dca3cd39fe5ea45ac6b) Remove deprecated SS_HOST (Ingo Schommer)
* 2017-05-08 [0d9b38363](https://github.com/silverstripe/silverstripe-framework/commit/0d9b3836319b40160bab56774dfdb548934399ce) Removed legacy form fields (fixes #6099) (Ingo Schommer)
* 2017-05-02 [963568d7](https://github.com/silverstripe/silverstripe-siteconfig/commit/963568d7a2c39599280e0752af336ba0c394ac87) Refactor inheritable permissions (Damian Mooyman)
* 2017-04-28 [03750acbe](https://github.com/silverstripe/silverstripe-framework/commit/03750acbee6ee26b4f5cae762c22ea6dc3cf4492) Namespace i18n keys (Damian Mooyman)
* 2017-04-28 [b1c59d40](https://github.com/silverstripe/silverstripe-cms/commit/b1c59d40c6808fc3fd3a3ccfbec443577559973a) Namespace i18n keys (Damian Mooyman)
* 2017-04-27 [61388b153](https://github.com/silverstripe/silverstripe-framework/commit/61388b153f9fbad0d794d3280516d8fa9aa29e5a) Rewrite Date and Time fields to support HTML5 (Damian Mooyman)
* 2017-04-26 [de8abe116](https://github.com/silverstripe/silverstripe-framework/commit/de8abe11675941ee9c5bfa49f491155dd8f22293) rename (Ingo Schommer)
* 2017-04-23 [7af7e6719](https://github.com/silverstripe/silverstripe-framework/commit/7af7e6719e82385a1a60813141fd291df5a16667) Security.authenticators is now a map, not an array (Sam Minnee)
* 2017-04-21 [df100b87](https://github.com/silverstripe/silverstripe-cms/commit/df100b8798f5c9a270b15d9f8ba1bb084b053247) Upgrade to behat 3 (Damian Mooyman)
* 2017-04-21 [0a55ff9f8](https://github.com/silverstripe/silverstripe-framework/commit/0a55ff9f8c4367d4026ed477ebafb7e9c3c32f71) Remove SapphireTestReporter and CliTestReporter (Ingo Schommer)
* 2017-04-17 [64e802f79](https://github.com/silverstripe/silverstripe-framework/commit/64e802f7955df2738d6d7381d30843f0cd438332) Move createTag to HTML class (Damian Mooyman)
* 2017-04-13 [f54ff29](https://github.com/silverstripe/silverstripe-installer/commit/f54ff29a023e0d77678365e8447f3ddba0a99226) Remove BlockUntrustedIPs (Damian Mooyman)
* 2017-04-13 [2548bfba1](https://github.com/silverstripe/silverstripe-framework/commit/2548bfba1ea5904302c60523b8a8d6d51d4515ab) Replace SS_HOST with SS_BASE_URL (Damian Mooyman)
* 2017-04-11 [0791b387b](https://github.com/silverstripe/silverstripe-framework/commit/0791b387b81aa4a3e6a931fe10d60d0d7a795d80) Update serialisation of JSON tree data (Damian Mooyman)
* 2017-04-10 [f2768c85b](https://github.com/silverstripe/silverstripe-framework/commit/f2768c85b10edeaf195ffaa336a0ac2468feb471) Enable namespaced-localisation keys in templates (Damian Mooyman)
* 2017-04-06 [d75a3cb0](https://github.com/silverstripe/silverstripe-cms/commit/d75a3cb0e9db7b3f52bedec71043ebeefc969d1c) Update site tree hierarchy to use a MarkingSet and template (Damian Mooyman)
* 2017-04-03 [e61257c27](https://github.com/silverstripe/silverstripe-framework/commit/e61257c27b42a29bf45acaf8e5a15a13a1e9ed34) Update embed/embed to 3.0 (Damian Mooyman)
* 2017-04-03 [9be22701f](https://github.com/silverstripe/silverstripe-framework/commit/9be22701fd31123e4cb63102c04c6eb4b82b8792) exists() no longer true for nullifyIfEmpty if empty string (Damian Mooyman)
* 2017-03-30 [4b7994036](https://github.com/silverstripe/silverstripe-framework/commit/4b79940368bd765840d22a5dabddb62c40df7b6c) Drop IE10 support (fixes #6321) (Ingo Schommer)
* 2017-03-30 [326aa37ea](https://github.com/silverstripe/silverstripe-framework/commit/326aa37ea4f1e09319098105932467a10d6782e6) HTML5 date/time fields, remove member prefs (fixes #6626) (Ingo Schommer)
* 2017-03-29 [92a5e4a05](https://github.com/silverstripe/silverstripe-framework/commit/92a5e4a057176916a92158f38b5f98fbdb9e13cf) Refactor CMS-specific code out of LeftAndMain (Damian Mooyman)
* 2017-03-29 [136b67f59](https://github.com/silverstripe/silverstripe-framework/commit/136b67f5976737fb98837989f5ee7d662f27b089) Major refactor of Hierarchy into MarkedSet (Damian Mooyman)
* 2017-03-28 [98e77a48](https://github.com/silverstripe/silverstripe-cms/commit/98e77a48a920706b3b8d91bd9f2c6c3be85c6a9d) Rename SiteTree::description() to SiteTree::classDescription() to prevent clash (Damian Mooyman)
* 2017-03-23 [874c6ccdd](https://github.com/silverstripe/silverstripe-framework/commit/874c6ccdd4a4eb887c989e858a8bb3b34d02f384) Add experimental getResource() to Module (Damian Mooyman)
* 2017-03-22 [1186f0783](https://github.com/silverstripe/silverstripe-framework/commit/1186f0783041fc236f872e2b14e69f3746d7bd45) Use mysql-safe table namespace separator (Damian Mooyman)
* 2017-03-21 [5ce98ace](https://github.com/silverstripe/silverstripe-cms/commit/5ce98aced2058670e303a16db899428ed5777df4) Upgrade to rely on silverstripe/versioned module (Damian Mooyman)
* 2017-03-21 [ac3a9c9e6](https://github.com/silverstripe/silverstripe-framework/commit/ac3a9c9e6e4dd5dfd0f9d93696b17652cea5be59) Split out SilverStripe\ORM\Versioned into new module (Damian Mooyman)
* 2017-03-19 [62f8aa440](https://github.com/silverstripe/silverstripe-framework/commit/62f8aa4408189e407fd81e827c239eb0fd58c4ef) Drop PHP 5.5 support, limit PHP 5.6 to 2018 (Damian Mooyman)
* 2017-03-16 [dae6d5902](https://github.com/silverstripe/silverstripe-framework/commit/dae6d5902f7968222a1ad8b3f879fbf4ab2b2f7a) Split SilverStripe\Assets into separate module (Damian Mooyman)
* 2017-03-16 [3a0099161](https://github.com/silverstripe/silverstripe-framework/commit/3a0099161bbaa88d53d67d20384bccc7cfe26cab) Remove Log class (Damian Mooyman)
* 2017-03-14 [4599b2b5](https://github.com/silverstripe/silverstripe-reports/commit/4599b2b52cb910d07ef906260e65fe702a365a0f) move CMSPreviewable to ORM (Damian Mooyman)
* 2017-03-14 [54ba08a30](https://github.com/silverstripe/silverstripe-framework/commit/54ba08a306d23139e1e5a15f9bc54c4d7dc9f34a) Replace ManifestCache with ManifestCacheFactory (Damian Mooyman)
* 2017-03-12 [a07a9bffc](https://github.com/silverstripe/silverstripe-framework/commit/a07a9bffc43b3d0a5188dad149fa0c3c42667834) Add FormRequestHandler::forTemplate() for backwards compatibility (Damian Mooyman)
* 2017-03-10 [9f953770f](https://github.com/silverstripe/silverstripe-framework/commit/9f953770f5228c0387de5a0607e32448cc26a265) Move CMSPreviewable to framework module (Damian Mooyman)
* 2017-03-09 [ce1406091](https://github.com/silverstripe/silverstripe-framework/commit/ce14060913fee01d86d73ca8513d3a68d87c627c) Apply default logger to all caches (Damian Mooyman)
* 2017-03-09 [8f0f9fa11](https://github.com/silverstripe/silverstripe-framework/commit/8f0f9fa1190a36f91eb07ccde62065da566389ba) Apply logging to config cache (Damian Mooyman)
* 2017-03-02 [0c41a97a8](https://github.com/silverstripe/silverstripe-framework/commit/0c41a97a8b1ecde2341122b49ebc58b9e6e2a9e0) Refactor Form request handling into FormRequestHandler (Damian Mooyman)
* 2017-03-01 [466c50b30](https://github.com/silverstripe/silverstripe-framework/commit/466c50b30217a301a8fb69e9ac61efcbb8487ec2) Switch from npm4 and shrinkwrap to npm6 and yarn (Christopher Joe)
* 2017-02-28 [50deb1776](https://github.com/silverstripe/silverstripe-framework/commit/50deb17763098d938478c6422f1767da67a375a1) remove UploadField, AssetField and associated files (Christopher Joe)
* 2017-02-27 [e74556b32](https://github.com/silverstripe/silverstripe-framework/commit/e74556b32277b03c299efce62a75b37a4b0cbdd3) Protect Director::get_environment_type() from invoking (Damian Mooyman)
* 2017-02-26 [b3fc11e59](https://github.com/silverstripe/silverstripe-framework/commit/b3fc11e594bda2569f467630e42486a472cbc123) Move ssmedia plugin to asset-admin (Damian Mooyman)
* 2017-02-26 [c452d5f6c](https://github.com/silverstripe/silverstripe-framework/commit/c452d5f6cd87ba512869c12494b73d40b93a2c86) Rename CoreConfigCreator to CoreConfigFactory (Damian Mooyman)
* 2017-02-24 [1d49c4afe](https://github.com/silverstripe/silverstripe-framework/commit/1d49c4afe9f2e9a1957e3f3f1d183eaa1c0cb461) Remove non-asset-admin TinyMCE media dialog (Damian Mooyman)
* 2017-02-23 [d220ca3f6](https://github.com/silverstripe/silverstripe-framework/commit/d220ca3f67de0198269610fcc2045bd016ea6cf2) Use symfony/cache (fixes #6252) (Ingo Schommer)
* 2017-02-23 [358bb8ba](https://github.com/silverstripe/silverstripe-cms/commit/358bb8baecf2434e4d43831d5f47fe839cd9e1e0) Remove insert-media tests (now covered by asset-admin, not cms) (Damian Mooyman)
* 2017-02-22 [8444a21cb](https://github.com/silverstripe/silverstripe-framework/commit/8444a21cbfc440035f4b6805b9a07771ab9363b0) Upgrade tests to use new Config API (Damian Mooyman)
* 2017-02-22 [3362e15a2](https://github.com/silverstripe/silverstripe-framework/commit/3362e15a2978918c7d3f2b72b30844e2f5ee53eb) Upgrade code to use updated config (Damian Mooyman)
* 2017-02-22 [395878885](https://github.com/silverstripe/silverstripe-framework/commit/39587888582f1ab41b73d2cf00edd983327df6eb) Remove Director.environment_type config and replace with static methods (Damian Mooyman)
* 2017-02-22 [a6e9a7111](https://github.com/silverstripe/silverstripe-framework/commit/a6e9a7111bf7b6d5d79e90611d6443cbce2204f2) Substitute core config system with new silverstripe/config module (Damian Mooyman)
* 2017-02-22 [72ddac2a5](https://github.com/silverstripe/silverstripe-framework/commit/72ddac2a56f8cb89be4046c041077484a227783e) Implement ModuleLoader for module registration by composer name (Damian Mooyman)
* 2017-02-22 [6bae8047](https://github.com/silverstripe/silverstripe-cms/commit/6bae804744f4fb513ffc79c116ce6cee561ce6e7) Use symfony/cache (Ingo Schommer)
* 2017-02-19 [2513a0f4c](https://github.com/silverstripe/silverstripe-framework/commit/2513a0f4c3edcef63619fa03074b7328ed243b2e) Added drag and drop libraries (Christopher Joe)
* 2017-02-16 [4885736b](https://github.com/silverstripe/silverstripe-cms/commit/4885736b0eccf8f4b6843e8892ba7d389480e749) Upgrade CMS to use new Config API (Damian Mooyman)
* 2017-02-14 [014f0d23e](https://github.com/silverstripe/silverstripe-framework/commit/014f0d23edbb604ee285274711b2c49124acc3f7) Create SeparatedDateField (Damian Mooyman)
* 2017-01-30 [9d35ff8f9](https://github.com/silverstripe/silverstripe-framework/commit/9d35ff8f9559ae7087ce189880db749fe1569efa) Remove ViewableData::ThemeDir, update changelog to reflect suggested replacement (Robbie Averill)
* 2017-01-26 [029a8b958](https://github.com/silverstripe/silverstripe-framework/commit/029a8b9586888cff44f621b7e4299eddd0f6528d) Substitute Zend_Currency with NumberFormatter based solution (Damian Mooyman)
* 2017-01-20 [942c0257b](https://github.com/silverstripe/silverstripe-framework/commit/942c0257b765ebc46bb0b2c3069721ccb8915ff6) Upgrade to behat 3 (Damian Mooyman)
* 2017-01-18 [8a07c56bd](https://github.com/silverstripe/silverstripe-framework/commit/8a07c56bdf28a4d74ebd22c17b1e258f91a273b2) Replace i18n message localisation with symfony/translation (Damian Mooyman)
* 2017-01-17 [3033953cc](https://github.com/silverstripe/silverstripe-framework/commit/3033953cc93ea0f721084cbc1d4d77842963eafd) Scaffolded redux form fields have the parent form name assigned as a property (Damian Mooyman)
* 2017-01-13 [7d67c5b9b](https://github.com/silverstripe/silverstripe-framework/commit/7d67c5b9bd578b7e7b4ff17fe6d8df3bec621979) Allow users to act-as another (Damian Mooyman)
* 2017-01-13 [ce38f1f1f](https://github.com/silverstripe/silverstripe-framework/commit/ce38f1f1fd1722fb50285dd57aa9b528d2794105) Allow "removeComponentsByType" to remove multiple component"s" (Robbie Averill)
* 2017-01-12 [2c274c838](https://github.com/silverstripe/silverstripe-framework/commit/2c274c838ece66256a0fc94fc3d9680f212cfff9) Shift Security page class config to separate option (Damian Mooyman)
* 2017-01-10 [9e563ebd3](https://github.com/silverstripe/silverstripe-framework/commit/9e563ebd3a2cd7aab164184b0d28f25be2d9fbfe) Moved iShouldSeeAButton to behat-extension (Damian Mooyman)
* 2017-01-05 [fb06cc0](https://github.com/silverstripe/silverstripe-installer/commit/fb06cc0075d524cd42bfd7495b2f9aa458e91ef8) Page_Controller to PageController (PSR-2 compliance) (Robbie Averill)
* 2016-12-29 [0927e547](https://github.com/silverstripe/silverstripe-cms/commit/0927e54780d2f5b7d240ffd7f1f39522c19610a0) Allow controller discovery without underscore (PSR-2 compliance) (Robbie Averill)
* 2016-12-20 [9be5142fc](https://github.com/silverstripe/silverstripe-framework/commit/9be5142fc15b17395562a0c88b53eece0fbd2c4b) Set::publish() / canPublish() no longer treats hasChanges() = false as a permission error (Damian Mooyman)
* 2016-12-14 [bb71a37cc](https://github.com/silverstripe/silverstripe-framework/commit/bb71a37cc8274f05d5a9abeae39bf3793155df0d) added enlarge icon (Christopher Joe)
* 2016-12-12 [88b4ae65c](https://github.com/silverstripe/silverstripe-framework/commit/88b4ae65cc51041f866ee47c66a7764aa3e107f8) Add css class to assist with bootstrapping entwine sections (Damian Mooyman)
* 2016-12-12 [178bd480e](https://github.com/silverstripe/silverstripe-framework/commit/178bd480eb141f6dc0eb8d07097d85d0e80a8e07) s required for asset search behaviour (Paul Clarke)
* 2016-12-09 [63ac2efa](https://github.com/silverstripe/silverstripe-siteconfig/commit/63ac2efaa2e7e8caca178579f16d1526fe2a0746) Update validation handling (#43) (Damian Mooyman)
* 2016-12-09 [bf58c5ae](https://github.com/silverstripe/silverstripe-cms/commit/bf58c5aef4578657678857fe0f0f59f8c60f759e) Update to use new form submission handling (#1691) (Damian Mooyman)
* 2016-12-06 [6b06fd9f2](https://github.com/silverstripe/silverstripe-framework/commit/6b06fd9f2d9321ced73eee46964da42ea87b473e) Add buttonTooltop to PopoverField and fix critical positioning issue (Damian Mooyman)
* 2016-11-28 [97d0fc61d](https://github.com/silverstripe/silverstripe-framework/commit/97d0fc61d8a8d246ae2fa05ad769fdb741a3c8ea) Include psr-2 checks in CI (Damian Mooyman)
* 2016-11-28 [f16d7e183](https://github.com/silverstripe/silverstripe-framework/commit/f16d7e1838d834575738086326d1191db3a5cfd8) Deprecate unused / undesirable create_new_password implementation (Damian Mooyman)
* 2016-11-23 [799ebe5ba](https://github.com/silverstripe/silverstripe-framework/commit/799ebe5ba8f3b95139031c3a905598a331fedab6) Expose QueryString library and lib/Format as external for formatting items (Christopher Joe)
* 2016-11-23 [6e589aac7](https://github.com/silverstripe/silverstripe-framework/commit/6e589aac7598878d60490a390537c4a12c24f619) Updates to Form, ValidationResponse, ValidationException (Damian Mooyman)
* 2016-11-22 [875811fdf](https://github.com/silverstripe/silverstripe-framework/commit/875811fdfd9d3269d168f1767ccd55bbf24d5a13) Create loading state for schema (Christopher Joe)
* 2016-11-15 [38070ab2](https://github.com/silverstripe/silverstripe-cms/commit/38070ab2d3a8d768c60047e31d39d74e12c13242) Update tests to reflect renamed services (Damian Mooyman)
* 2016-11-13 [cac326eeb](https://github.com/silverstripe/silverstripe-framework/commit/cac326eebb8e3914813b7dcee3cdba4d09434e1b) Add getExtraDataObjects() and getExtraControllers() methods to SapphireTest (Damian Mooyman)
* 2016-11-04 [7cba50e3a](https://github.com/silverstripe/silverstripe-framework/commit/7cba50e3a544780badc4e1eda6ed3e2cf8b49417) Refactor UploadField, FileField and AssetField into traits Uploadable and FileUploadable (Damian Mooyman)
* 2016-11-03 [8e4ed776d](https://github.com/silverstripe/silverstripe-framework/commit/8e4ed776d893e9828326d31b8bfb1345888894ae) Expose FieldHolder react component (Damian Mooyman)
* 2016-10-28 [1142757c2](https://github.com/silverstripe/silverstripe-framework/commit/1142757c21df7d421057be9d185cc88ab97abe1b) Add 'validation' to form schema (Damian Mooyman)
* 2016-10-28 [1734e0d2a](https://github.com/silverstripe/silverstripe-framework/commit/1734e0d2a334c0d48d276f673df1cac1fc78edc0) Shorten overly-verbose invalid extension error (#6231) (Damian Mooyman)
* 2016-10-25 [555104083](https://github.com/silverstripe/silverstripe-framework/commit/555104083995678e16717dd7f3238cf55755c496) Update listview / treeview to use pjax instead of deferred loading (Damian Mooyman)
* 2016-10-25 [13d40f96](https://github.com/silverstripe/silverstripe-cms/commit/13d40f96f3d0f6459ff47a398c31a5d6a27725b4) Rename _versions table to _Versions (#1655) (Damian Mooyman)
* 2016-10-25 [d54ae8bb](https://github.com/silverstripe/silverstripe-cms/commit/d54ae8bb26b37f7424ba5767f5ee5b9175069e23) Consolidate "Delete from draft" and "Archive" actions into a consistent behaviour (#1653) (Damian Mooyman)
* 2016-10-21 [8c87ea6b](https://github.com/silverstripe/silverstripe-cms/commit/8c87ea6b79fc6298008cdfc956d0a1cd733d8d87) Update listview / treeview to use pjax instead of deferred loading (Damian Mooyman)
* 2016-10-20 [ea6851fd7](https://github.com/silverstripe/silverstripe-framework/commit/ea6851fd700aa8ba5407e54c361f150d1769f122) Rename _versions table to _Versions (Damian Mooyman)
* 2016-10-19 [840f27523](https://github.com/silverstripe/silverstripe-framework/commit/840f275235fff97132a3b541e83bcffe848ed407) Created a generic FormFactory interface (#6178) (Damian Mooyman)
* 2016-10-18 [316ac8603](https://github.com/silverstripe/silverstripe-framework/commit/316ac8603647a03e7d8705a83343430cc8b88141) Writes to versioned dataobjects always writes to stage even when written on live (Damian Mooyman)
* 2016-10-14 [6e8304ff2](https://github.com/silverstripe/silverstripe-framework/commit/6e8304ff2f4b2582b8535ef549b9f2ad9479925e) Namespace framework tests (Damian Mooyman)
* 2016-10-13 [055795d4d](https://github.com/silverstripe/silverstripe-framework/commit/055795d4d1e6da449af5eef3a9bebfacb284eb69) Support fixture paths relative to current directory (Damian Mooyman)
* 2016-10-11 [f60fe7d4a](https://github.com/silverstripe/silverstripe-framework/commit/f60fe7d4a9a698a009298c63915a4872bcfadfcf) Versioned::publishRecursive() now uses a ChangeSet (Damian Mooyman)
* 2016-10-11 [f5f6fdce1](https://github.com/silverstripe/silverstripe-framework/commit/f5f6fdce12abd6074de210b11b98a68fd929c62c) Duplication of many_many relationships now defaults to many_many only (Damian Mooyman)
* 2016-10-06 [cb24d199b](https://github.com/silverstripe/silverstripe-framework/commit/cb24d199b6e7c57204032452100fa79338e0219a) Convert fieldSpec options to bitwise operators (#6161) (Damian Mooyman)
* 2016-10-06 [d1dbe912](https://github.com/silverstripe/silverstripe-cms/commit/d1dbe912470295fb11a5f38ebcdeb4d4c4447bdc) Update for DataObjectSchema changes (Damian Mooyman)
* 2016-10-06 [11bbed4f7](https://github.com/silverstripe/silverstripe-framework/commit/11bbed4f76b2dab35ed0c1db50114eef4a29c4b7) Move many methods from DataObject to DataObjectSchema (Damian Mooyman)
* 2016-10-05 [380d6523c](https://github.com/silverstripe/silverstripe-framework/commit/380d6523c5db67041721077c58e06f54e46dfe0a) Cleaned up versioned status checks (Damian Mooyman)
* 2016-10-05 [1ce243cc](https://github.com/silverstripe/silverstripe-cms/commit/1ce243ccc1c724edce1140a43cdf61e1900df537) Cleaned up versioned status checks (Damian Mooyman)
* 2016-10-03 [f0dd9af69](https://github.com/silverstripe/silverstripe-framework/commit/f0dd9af699cd03e3e315ff6e8297efdc0a9cfd23) Support named join alias for many_many through list (Damian Mooyman)
* 2016-09-30 [27d35403e](https://github.com/silverstripe/silverstripe-framework/commit/27d35403e863d47745d32025ee7969b1b1d1171c) Force formschema to be reloaded on form submission (Damian Mooyman)
* 2016-09-30 [92e34b743](https://github.com/silverstripe/silverstripe-framework/commit/92e34b743432a47f3be6d460b0c48f044ed96882) controller::join_links supports array values (Damian Mooyman)
* 2016-09-28 [2f4867fef](https://github.com/silverstripe/silverstripe-framework/commit/2f4867fef85b273f60b8c0b794e4ecf10a59d0d5) added watch command to package.json (Christopher Joe)
* 2016-09-26 [e7303170c](https://github.com/silverstripe/silverstripe-framework/commit/e7303170c2ff62adc0fb5d09fdffaacf88c614dd) Implement many_many through (Damian Mooyman)
* 2016-09-21 [760caaab](https://github.com/silverstripe/silverstripe-cms/commit/760caaab444837a5bb58d49e9f8727f1b61a876c) use new bootstrap button row template (Damian Mooyman)
* 2016-09-21 [5a59c4f4b](https://github.com/silverstripe/silverstripe-framework/commit/5a59c4f4b40523592174d661f1be490d3cafdea9) Add bootstrap button row template (Damian Mooyman)
* 2016-09-20 [4f19113c](https://github.com/silverstripe/silverstripe-cms/commit/4f19113c5cce68ae6806c13d87c4f916bcc977ba) Use new DBField::getSchemaValue() (Damian Mooyman)
* 2016-09-19 [ea50e3007](https://github.com/silverstripe/silverstripe-framework/commit/ea50e300791bf8bf4e187ae048ef56b2ad78d994) Move PreviewLink logic into File dataobject (Christopher Joe)
* 2016-09-15 [8f23fa99a](https://github.com/silverstripe/silverstripe-framework/commit/8f23fa99a5cbb91e47a10c4d9008ef7364137b10) Moved CMS-specific JavaScript to admin/thirdparty (Ingo Schommer)
* 2016-09-15 [7d67b24c2](https://github.com/silverstripe/silverstripe-framework/commit/7d67b24c257c515ee758ca7df11aba81766d82fd) Removed legacy Jasmine JS Unit tests (Ingo Schommer)
* 2016-09-14 [e8375111b](https://github.com/silverstripe/silverstripe-framework/commit/e8375111b17dd2cf4b08b709f140786f69a9f924) Enable default value to be specified for dbstring types at the db level (Damian Mooyman)
* 2016-09-13 [aecf5260f](https://github.com/silverstripe/silverstripe-framework/commit/aecf5260fc41f4a3a1161e21a955d0cb3b2f075a) Remove TextParser and BBCodeParser (Sam Minnee)
* 2016-09-13 [2316b0da9](https://github.com/silverstripe/silverstripe-framework/commit/2316b0da9fd18423c0246b7ce4a156f11d2e96a3) Remove i18n::js_i18n option (Ingo Schommer)
* 2016-09-13 [ee10dbb68](https://github.com/silverstripe/silverstripe-framework/commit/ee10dbb680d7653b1f727e5e146b07df87e66b37) Moved frontend assets into admin/ "module" (Ingo Schommer)
* 2016-09-13 [327a8a32](https://github.com/silverstripe/silverstripe-cms/commit/327a8a320e882d7c96118036f837d29acd9e8ca8) Move preview template to cms section (Damian Mooyman)
* 2016-09-13 [9b1c24cf4](https://github.com/silverstripe/silverstripe-framework/commit/9b1c24cf4c74c8241f7b1e9fac1ded5fcdc3c3df) Move preview panel to CMS module (Damian Mooyman)
* 2016-09-13 [190ed628b](https://github.com/silverstripe/silverstripe-framework/commit/190ed628bc14f8da67b21e77ded01ab060a09574) PreviewThumbnail now uses ScaleMaxWidth (Christopher Joe)
* 2016-09-12 [ab7e5944d](https://github.com/silverstripe/silverstripe-framework/commit/ab7e5944d1f5e8cd2896fd132a6bfa87e8440a5f) Derive BASE_PATH from composer autoloader (Sam Minnee)
* 2016-09-07 [9cb9a05ec](https://github.com/silverstripe/silverstripe-framework/commit/9cb9a05ec0b0478e6228f9ea72e94dcafa036112) Removed duplicated thirdparty deps (Ingo Schommer)
* 2016-09-07 [0a380a94c](https://github.com/silverstripe/silverstripe-framework/commit/0a380a94cd6470f860300ba793f4e6c9d406004b) Removed unused UMD builds of individual JS files (Ingo Schommer)
* 2016-09-05 [efb004b72](https://github.com/silverstripe/silverstripe-framework/commit/efb004b72aab74c65871c3dbd268a8c453a353d7) use injector for DataObject::newClassInstance() (Damian Mooyman)
* 2016-09-05 [fc353dc17](https://github.com/silverstripe/silverstripe-framework/commit/fc353dc17a092aa6e8114cf78ad87a8342d4267d) Allow has_many fixtures to be declared with array format as well as many_many (#5944) (Damian Mooyman)
* 2016-09-01 [5f7b13ee4](https://github.com/silverstripe/silverstripe-framework/commit/5f7b13ee4971d0433278691d95fde0922a5e0c28) Removed unused images across CMS UI (Ingo Schommer)
* 2016-08-31 [b599095a](https://github.com/silverstripe/silverstripe-cms/commit/b599095a50cc97d3f181a44adee3771e1c82deb8) Remove AssetAdmin (moved to asset-admin module) (Ingo Schommer)
* 2016-08-31 [5ddd8c331](https://github.com/silverstripe/silverstripe-framework/commit/5ddd8c3318a4b449ee0619cc752be2b77f191159) Adapt File/Folder getCMSFields() to new AssetAdmin (Ingo Schommer)
* 2016-08-29 [710509949](https://github.com/silverstripe/silverstripe-framework/commit/710509949754c28975dabcaa00e5880dbd88a016) behaviour of filter API to support injected search filter classes (Damian Mooyman)
* 2016-08-23 [8e89d08e7](https://github.com/silverstripe/silverstripe-framework/commit/8e89d08e7b1889d93ca8e1763dff2146252b5ae0) Remove js/css requirements include from form fields. (Sam Minnee)
* 2016-08-23 [c9b6e9bac](https://github.com/silverstripe/silverstripe-framework/commit/c9b6e9bac0aaf78e3b2963c9e6ad38ad27fa46f1) Update template lookup to late resolution for performance reasons (Damian Mooyman)
* 2016-08-21 [2e577ddb1](https://github.com/silverstripe/silverstripe-framework/commit/2e577ddb1d68e52e990f0f89222fe03ad6deb7ca) Use Webpack (Sam Minnee)
* 2016-08-18 [8dd644d25](https://github.com/silverstripe/silverstripe-framework/commit/8dd644d25d4e01b6853922164440f8ac9c824f22) Namespace all classes (Damian Mooyman)
* 2016-08-12 [a96ab15a](https://github.com/silverstripe/silverstripe-reports/commit/a96ab15af33a3ac38a61fc7b261c290fac8e4f7a) issue with namespaced reports (Damian Mooyman)
* 2016-08-11 [90aff08d](https://github.com/silverstripe/silverstripe-cms/commit/90aff08df75386899665cc7d2f868da97dc68cb7) remove obsolete template (Damian Mooyman)
* 2016-08-10 [afdae4937](https://github.com/silverstripe/silverstripe-framework/commit/afdae4937ecfecb16442c228f3d04457e6b64f8d) Add CMSMenu::remove_menu_class to remove items by class instead of code (Damian Mooyman)
* 2016-08-09 [cb1f4335a](https://github.com/silverstripe/silverstripe-framework/commit/cb1f4335a09113feff1707dbe3fff777e3736779) remove DataFormatter class and all subclasses (Damian Mooyman)
* 2016-08-09 [cf6f882e2](https://github.com/silverstripe/silverstripe-framework/commit/cf6f882e2931d229ec621b5ed7d61b2de989a605) Ensure that i18n plural / singular names use shortname prior to namespaced translations (Damian Mooyman)
* 2016-08-04 [19b81155](https://github.com/silverstripe/silverstripe-cms/commit/19b811555cbdc9ebdbd6995d1215e3e055fcd730) Move NestedController from cms to framework (Damian Mooyman)
* 2016-08-04 [1c3ec1935](https://github.com/silverstripe/silverstripe-framework/commit/1c3ec1935377e9a1469d44ecb083622b996e5343) Move NestedController from cms to framework (Damian Mooyman)
* 2016-08-04 [6005a1c2b](https://github.com/silverstripe/silverstripe-framework/commit/6005a1c2b2abba919cc660dc2fd2a5fc0becbbd6) Upgrade for silverstripe CMS namespace changes (Damian Mooyman)
* 2016-08-04 [59539578](https://github.com/silverstripe/silverstripe-reports/commit/59539578816c2f77ca689c9a17f4f2415a9d51dc) Update for SilverStripe\CMS namespace (Damian Mooyman)
* 2016-08-02 [4ca3d1dc9](https://github.com/silverstripe/silverstripe-framework/commit/4ca3d1dc9487be2dadd1722823f75f7146bd7a60) Allow custom 'type' option for scripts (Damian Mooyman)
* 2016-07-28 [9188628ae](https://github.com/silverstripe/silverstripe-framework/commit/9188628ae335fb6ea3c377013ec3e64f24d2260d) Add $action parameter to Controller::Link (Damian Mooyman)
* 2016-07-26 [c556b0107](https://github.com/silverstripe/silverstripe-framework/commit/c556b010718c7bfdb5eba58913868bb9388a1b4c) Update core templates for CompositeField / SelectionGroup.ss (Damian Mooyman)
* 2016-07-25 [5e8e8c87](https://github.com/silverstripe/silverstripe-siteconfig/commit/5e8e8c87b2468b69fc2065bcfabaa73d11b977f6) Remove theme selector (#31) (Damian Mooyman)
* 2016-07-25 [93f4dd1](https://github.com/silverstripe/silverstripe-installer/commit/93f4dd17642fc8b55057b1179248109de1c4e318) Support nested themes API (#129) (Damian Mooyman)
* 2016-07-25 [ff07a2e2](https://github.com/silverstripe/silverstripe-cms/commit/ff07a2e2641eaa11c48425b16bddf484742c758f) Convert CMS forms to bootstrap (Damian Mooyman)
* 2016-07-25 [a809e80d0](https://github.com/silverstripe/silverstripe-framework/commit/a809e80d015786bd448652f859e3d6cff6e5bc09) Convert CMS forms to bootstrap (Damian Mooyman)
* 2016-07-24 [c7387ff45](https://github.com/silverstripe/silverstripe-framework/commit/c7387ff45f294b2a652dee11838eda60539ed025) Upgrade to SilverStripe\CMS namespace (Damian Mooyman)
* 2016-07-24 [4d007cd1](https://github.com/silverstripe/silverstripe-cms/commit/4d007cd13cf3b7d843c6e177b6252e861d99c6d2) remove obsolete CMSMain::buildbrokenlinks() (Damian Mooyman)
* 2016-07-24 [70179c8b](https://github.com/silverstripe/silverstripe-cms/commit/70179c8b873676cf2408afc1e5af9fb9e8e9e6c2) Better behaviour for virtualised controller (Damian Mooyman)
* 2016-07-24 [886d65ad](https://github.com/silverstripe/silverstripe-cms/commit/886d65ad37c33c14dfdd2922092fb524ad2e5f53) Remove obsolete Folder_UsusedAssetsField (Damian Mooyman)
* 2016-07-24 [b135c256](https://github.com/silverstripe/silverstripe-cms/commit/b135c2566c1807fddfedd3ce80af4fcaf10648ec) remove obsolete UpgradeSiteTreePermissionSchemaTask (Damian Mooyman)
* 2016-07-19 [20daf1f8e](https://github.com/silverstripe/silverstripe-framework/commit/20daf1f8e11746ef6dc4f925c75754c3b6063106) Abstract ThemeManifest into ThemeList (Damian Mooyman)
* 2016-07-19 [4b4aa4e91](https://github.com/silverstripe/silverstripe-framework/commit/4b4aa4e91c31b930e664527994840895fe176466) Exclude templates in 'themes' directories from $default theme (#5820) (Damian Mooyman)
* 2016-07-14 [6e68f38ef](https://github.com/silverstripe/silverstripe-framework/commit/6e68f38efb6443ebe04ac7036678deca627dedfb) Update react sections to use react-router instead of page.js (#5796) (Damian Mooyman)
* 2016-07-13 [b8b4e98ac](https://github.com/silverstripe/silverstripe-framework/commit/b8b4e98ac2a157992be0a5f679bf3902d0d16991) Theme stacking (Hamish Friedlander)
* 2016-07-12 [26d46517a](https://github.com/silverstripe/silverstripe-framework/commit/26d46517aca15ff02281ec5cbac9888d21084652) Remove custom DBHTMLText::exists() custom behaviour (Damian Mooyman)
* 2016-07-07 [859acf571](https://github.com/silverstripe/silverstripe-framework/commit/859acf571e0328a5d6e49264acae6a8ba2936d41) mute frontend debugging by default (#5777) (Damian Mooyman)
* 2016-07-07 [628455f7](https://github.com/silverstripe/silverstripe-siteconfig/commit/628455f723b12801f3b8e0d5dd4d7ac9e984ba3f) Apply SilverStripe\Security namespace (#28) (Damian Mooyman)
* 2016-07-07 [39b6d129](https://github.com/silverstripe/silverstripe-reports/commit/39b6d12969053ad97b04dc70d022643a94901cff) Apply SilverStripe\Security namespace (#35) (Damian Mooyman)
* 2016-07-06 [5cb4ab4a8](https://github.com/silverstripe/silverstripe-framework/commit/5cb4ab4a82993d5b16fa0316e008f547f38d8e98) Add PopoverField for extra-actions popup in react (Damian Mooyman)
* 2016-07-06 [9e1b12a89](https://github.com/silverstripe/silverstripe-framework/commit/9e1b12a8918b121c9f66d9491e5506aa3248ed0c) Support composite react formfields (Damian Mooyman)
* 2016-06-22 [25e4cad1](https://github.com/silverstripe/silverstripe-cms/commit/25e4cad1645f17f2a4c60511cec71de5f1281bee) Apply SilverStripe\Security namespace (Damian Mooyman)
* 2016-06-22 [af22a8316](https://github.com/silverstripe/silverstripe-framework/commit/af22a83166a088311805cf9dc301f8eaca5b46b7) Apply Framework\Security namespace (Damian Mooyman)
* 2016-06-22 [80e5b9149](https://github.com/silverstripe/silverstripe-framework/commit/80e5b9149e3b207b07cbb98f7d3454f4887067a7) Move dependency on model class from form schema API (Damian Mooyman)
* 2016-06-17 [b7ac5c564](https://github.com/silverstripe/silverstripe-framework/commit/b7ac5c564d212cd2616e8062919da77182fb73c6) / BUG Fix DBField summary methods (Damian Mooyman)
* 2016-06-16 [ab819611](https://github.com/silverstripe/silverstripe-reports/commit/ab81961115f2ec19d1e54608263e354b836d27a5) Apply SilverStripe\ORM namespace (Damian Mooyman)
* 2016-06-16 [fbc90e10](https://github.com/silverstripe/silverstripe-siteconfig/commit/fbc90e1070060c90164074e499d58c3083ad63a2) Update for new SilverStripe\ORM namespace (Damian Mooyman)
* 2016-06-16 [e378332f](https://github.com/silverstripe/silverstripe-cms/commit/e378332ff3c781cda167d5f39a680448cbe8cf96) Update for new SilverStripe\ORM namespace (Damian Mooyman)
* 2016-06-16 [83308689d](https://github.com/silverstripe/silverstripe-framework/commit/83308689d5cfb3ecd228cdea775573ebd0a9779e) Initialise React controllers via routes (#5436) (David Craig)
* 2016-06-15 [80d4af6b6](https://github.com/silverstripe/silverstripe-framework/commit/80d4af6b6e00b39fd5fefddfb87a52708baf714e) Apply Framework\ORM Namespace to model (Hamish Friedlander)
* 2016-06-13 [c50bc917](https://github.com/silverstripe/silverstripe-cms/commit/c50bc91772af2b400dbcd664f187730b25ba148b) Cleanup inconsistent SiteTree::duplicate API (Damian Mooyman)
* 2016-06-03 [5c9044a00](https://github.com/silverstripe/silverstripe-framework/commit/5c9044a007d3e0e49d5a57f8794c71717a5aa5d1) Enforce default_cast for all field usages (Damian Mooyman)
* 2016-05-25 [5e8ae41d4](https://github.com/silverstripe/silverstripe-framework/commit/5e8ae41d4772f750f8ce14103ed45a697a147f6d) Refactor dataobject schema management into separate service (Damian Mooyman)
* 2016-05-23 [04e617d6](https://github.com/silverstripe/silverstripe-cms/commit/04e617d65def656d66f0920c9ad13b27861160b7) Allow extensions to influence canCreate, canEdit, canView, canDelete, and canAddChildren even for admins. (Damian Mooyman)
* 2016-05-10 [7f03b88e5](https://github.com/silverstripe/silverstripe-framework/commit/7f03b88e5e1826da662bba1fbfc36221232215f5) Add empty campaign layout (Damian Mooyman)
* 2016-05-09 [8b94dd83d](https://github.com/silverstripe/silverstripe-framework/commit/8b94dd83dfb8a31f79cd001fc1672d76aa82ffab) Add CSRF to Campaign delete (Damian Mooyman)
* 2016-05-09 [3edbfd944](https://github.com/silverstripe/silverstripe-framework/commit/3edbfd944ebb6035c9ca681fa153dd1c3e017b05) Implement breadcrumbs via controllable state (Damian Mooyman)
* 2016-05-04 [65eb0bde6](https://github.com/silverstripe/silverstripe-framework/commit/65eb0bde6a25fbdd84a5c369eaa591df8ed9d523) Look for templates of namespaced classes in subfolders. (Sam Minnee)
* 2016-05-03 [8ce3d90e1](https://github.com/silverstripe/silverstripe-framework/commit/8ce3d90e18050519c2b94f0cf529e0864a372713) Injector dependencies no longer inherit from parent classes automatically (Damian Mooyman)
* 2016-05-03 [8d2cc91](https://github.com/silverstripe/silverstripe-installer/commit/8d2cc913e9d4ee1db68e8641da3c784c38fb55be) Include asset-admin module in installer (Damian Mooyman)
* 2016-05-02 [8b1146be9](https://github.com/silverstripe/silverstripe-framework/commit/8b1146be9adac324e1487ca7f0af159ab201c542) Implement campaign item edit button (Damian Mooyman)
* 2016-05-02 [6948267c4](https://github.com/silverstripe/silverstripe-framework/commit/6948267c41c486eb501049555df95903fb6573ec) LeftAndMain::menu_title can be overridden (#5423) (Damian Mooyman)
* 2016-05-02 [0d4c71f39](https://github.com/silverstripe/silverstripe-framework/commit/0d4c71f393a9d73981b9cf25287e3213ffddeb1a) Filtering on invalid relation is no longer a silent error (Damian Mooyman)
* 2016-05-01 [46f69b0c](https://github.com/silverstripe/silverstripe-cms/commit/46f69b0c0dd484d7c4ed007158b77cbcc2306cf6) set menu title without editing transifex masters (Damian Mooyman)
* 2016-04-27 [72fcfbf4b](https://github.com/silverstripe/silverstripe-framework/commit/72fcfbf4bc3344a3992a8e99ce9d0d506acac5bc) Campaign preview for images (Damian Mooyman)
* 2016-04-27 [1aa54924](https://github.com/silverstripe/silverstripe-cms/commit/1aa54924108a877e40fb3048eb87919b64028ac0) Cleanup SilverStripeNavigator and CMSPreview (Damian Mooyman)
* 2016-04-27 [4be5e7c96](https://github.com/silverstripe/silverstripe-framework/commit/4be5e7c961f7041dd5babb10d6d5550766f8c7be) Implement basic preview behaviour (Damian Mooyman)
* 2016-04-25 [daf538583](https://github.com/silverstripe/silverstripe-framework/commit/daf53858331179badd4ad6ab6e37e30dc56e2192) in behaviour to flysystem reporting for root folders (Damian Mooyman)
* 2016-04-22 [241cdfed1](https://github.com/silverstripe/silverstripe-framework/commit/241cdfed1bb7ef9a1cab70f309283a8110bcbd4e) Allow actions to declare they are exempt from validation themselves (Hamish Friedlander)
* 2016-04-20 [e463fcce6](https://github.com/silverstripe/silverstripe-framework/commit/e463fcce6eaa80719a4f14d59dca9ee56d1f3d12) redux-logger respects ss environment (Damian Mooyman)
* 2016-04-19 [19de22f42](https://github.com/silverstripe/silverstripe-framework/commit/19de22f42714874abcebfe7ece192546f4d8dd1a) Moved frontend assets into admin/client/ (Ingo Schommer)
* 2016-04-19 [e2afcd0ac](https://github.com/silverstripe/silverstripe-framework/commit/e2afcd0acb1c65810b5a90ca2a9921f902c6a8e0) Implement back end for saving forms via react (Damian Mooyman)
* 2016-04-18 [dbd17bd49](https://github.com/silverstripe/silverstripe-framework/commit/dbd17bd49a04a61d7b11d98f28f1b7307d25541c) Remove routing from silverstripe-component (Damian Mooyman)
* 2016-04-18 [2e9003577](https://github.com/silverstripe/silverstripe-framework/commit/2e900357713a54803d5ae5ed2649d99bf23b1514) Campaign publish button (Damian Mooyman)
* 2016-04-12 [31247a67b](https://github.com/silverstripe/silverstripe-framework/commit/31247a67bd8cfb34023421da46f59786d49811a0) Replace baked-in and modified Chosen 0.9.8 with npm'ed in Chosen 1.5.1 (Hamish Friedlander)
* 2016-04-11 [590089375](https://github.com/silverstripe/silverstripe-framework/commit/590089375327aa80c6c92007462b9bfa439ad207) Implement campaign list view (Damian Mooyman)
* 2016-04-11 [2d16d69dd](https://github.com/silverstripe/silverstripe-framework/commit/2d16d69ddb863b55de3a94fd83a49a3f666354af) Use base data class for ChangeSetItem#ObjectClass, not just ClassName (Hamish Friedlander)
* 2016-04-07 [05973cee5](https://github.com/silverstripe/silverstripe-framework/commit/05973cee55a9a80b30421c88a3c12baddb63a4f0) Add i18n pluralisation (Damian Mooyman)
* 2016-04-05 [db6251a9](https://github.com/silverstripe/silverstripe-cms/commit/db6251a9b74886ddb2f15bcb28b393c2c9ae0a73) Update to use new travis-artifacts (Damian Mooyman)
* 2016-04-01 [3c2b53157](https://github.com/silverstripe/silverstripe-framework/commit/3c2b53157e6f064ebac2269dc9950db2b36501ec) Update Versioned methods (Damian Mooyman)
* 2016-04-01 [716baa6b](https://github.com/silverstripe/silverstripe-cms/commit/716baa6b1fb55c25112066a6b1a3c10a6be38c0b) Support renamed Versioned API (Damian Mooyman)
* 2016-03-30 [87ee4365e](https://github.com/silverstripe/silverstripe-framework/commit/87ee4365e7f51089742d1ca24687e25c3b251fb8) Implement ChangeSets for batch publishing (Damian Mooyman)
* 2016-03-30 [64b7a84bb](https://github.com/silverstripe/silverstripe-framework/commit/64b7a84bb2be4de93a21a7263dc8529085a3eba3) SapphireTest::logInWithPermission now supports multiple permissions (Damian Mooyman)
* 2016-03-30 [29c5eff43](https://github.com/silverstripe/silverstripe-framework/commit/29c5eff433ff7a62bbf66c7dd3bd0e31b6a368ed) Add $context method to DataObject::can for consistency with canCreate() (Damian Mooyman)
* 2016-03-30 [501b2f180](https://github.com/silverstripe/silverstripe-framework/commit/501b2f180913cb6d3454fdebc868a929ccb89f28) CMSMenu::get_cms_classes() is now sorted (Damian Mooyman)
* 2016-03-28 [d22ad706](https://github.com/silverstripe/silverstripe-cms/commit/d22ad706a99504680ca1fdf8ef482e13a7441ab4) Support new DataObject::can() signature (Damian Mooyman)
* 2016-03-27 [b2e4e9622](https://github.com/silverstripe/silverstripe-framework/commit/b2e4e9622b2dd3a65b4ed7e994f38c8965dd58e9) Remove deprecated caching behaviour from ViewableData (closes #4063) (Loz Calver)
* 2016-03-23 [8abede133](https://github.com/silverstripe/silverstripe-framework/commit/8abede13395ca97d52e6a8d6cb82106da37127fb) Add SS_Database::withTransaction for nice enclosed transactions (Damian Mooyman)
* 2016-03-22 [094745ec0](https://github.com/silverstripe/silverstripe-framework/commit/094745ec0ffe24ffd9c5b36d0188ec90ad2bb8b5) Formally support custom ownership relations (Damian Mooyman)
* 2016-03-21 [2d56ea278](https://github.com/silverstripe/silverstripe-framework/commit/2d56ea278aaeebf49be80b4a40f718caf7cffba2) Move ss buttons plugin out of thirdparty (Damian Mooyman)
* 2016-03-17 [4cc7b080](https://github.com/silverstripe/silverstripe-cms/commit/4cc7b0806d12166c72f1e1bdf829d0c14e7beaf2) Update to use new Versioned API (Damian Mooyman)
* 2016-03-09 [067d44ac](https://github.com/silverstripe/silverstripe-cms/commit/067d44ac6ca2bf6353a8efdbc8e00266bd42fa9f) Update link tracking for image shortcodes (Damian Mooyman)
* 2016-03-08 [8ae794ee9](https://github.com/silverstripe/silverstripe-framework/commit/8ae794ee99b17bed83d969005be03a6621a4ccad) TinyMCE Image shortcodes (Ingo Schommer)
* 2016-03-07 [14d74f7a](https://github.com/silverstripe/silverstripe-siteconfig/commit/14d74f7ae369483edab421b679d39c3c2955e888) Refactor for removal of CMSForm class (Damian Mooyman)
* 2016-03-02 [0848aca46](https://github.com/silverstripe/silverstripe-framework/commit/0848aca4625954be8ffc4818be3e3df633f521fd) Massive refactor of Versioned (Damian Mooyman)
* 2016-02-26 [8366d22](https://github.com/silverstripe/silverstripe-installer/commit/8366d22a1930e0171179b084afce1baaac666e2b) Replace old assets/.htaccess with better default (Damian Mooyman)
* 2016-02-25 [b196d33bf](https://github.com/silverstripe/silverstripe-framework/commit/b196d33bfa067e11c8a74771ef0aa6898548136a) Ownership API (Damian Mooyman)
* 2016-02-25 [c275c2105](https://github.com/silverstripe/silverstripe-framework/commit/c275c21057f8739e6d881625812a5d6fe39af663) Extensible::invokeWithExtension has same method signature as Extensible::extend (Damian Mooyman)
* 2016-02-21 [de6db9f5](https://github.com/silverstripe/silverstripe-cms/commit/de6db9f5c6f32eb8b6efd72e78d7ff2fe212c772) Mark image tracking as owned (Damian Mooyman)
* 2016-02-16 [99394a84](https://github.com/silverstripe/silverstripe-cms/commit/99394a84d0ae1611754353423723a96601cfa2f0) Remove references to class aliases; Use correct classname (Damian Mooyman)
* 2016-02-12 [f20ad434c](https://github.com/silverstripe/silverstripe-framework/commit/f20ad434ce66d0102a4bd43c66df517ef385aa2b) Update TinyMCE to 4.x (Damian Mooyman)
* 2016-01-27 [829135a85](https://github.com/silverstripe/silverstripe-framework/commit/829135a85a0f97d5c4387ed2b66ee7cef7d7d7ad) remove Object::useCustomClass (Damian Mooyman)
* 2016-01-26 [1c907dd2](https://github.com/silverstripe/silverstripe-cms/commit/1c907dd227a41be8cd25ba0c751f6aa7a308ebfe) Support versioned File management (Damian Mooyman)
* 2016-01-26 [510c55673](https://github.com/silverstripe/silverstripe-framework/commit/510c55673972ea5aeaca40bc6ef9166fb2b339c3) File has Versioned extension (Damian Mooyman)
* 2016-01-25 [9662d938f](https://github.com/silverstripe/silverstripe-framework/commit/9662d938f385a24c00d8613fef9bd9340081fd44) remove obsolete class loaders from test listeners (Damian Mooyman)
* 2016-01-25 [17ee318d](https://github.com/silverstripe/silverstripe-cms/commit/17ee318d06edb37229634206a5f1dd4e032bcdd8) VirtualPage permissions now can be set independently of the mirrored page (Damian Mooyman)
* 2016-01-21 [e77389d0c](https://github.com/silverstripe/silverstripe-framework/commit/e77389d0c88225e68098fa8250a6b2ccdbf8a4ac) Standardise SS_List::map() implementation (Damian Mooyman)
* 2016-01-21 [c9764707](https://github.com/silverstripe/silverstripe-cms/commit/c97647078b065b962d2d1d5fd7ae85db40216e15) Refactor out Page default classname hack (Damian Mooyman)
* 2016-01-21 [5138bf1b7](https://github.com/silverstripe/silverstripe-framework/commit/5138bf1b7fe9a660574444d77ac5324b5687f40d) Refactor out Page default classname hack (Damian Mooyman)
* 2016-01-14 [8e1ae55ff](https://github.com/silverstripe/silverstripe-framework/commit/8e1ae55ff67647c495c4e1d528907d280d78ad37) Enable single javascript files to declare that they include other files (Damian Mooyman)
* 2015-12-21 [99de74d69](https://github.com/silverstripe/silverstripe-framework/commit/99de74d69e1bf39a43890487bee3e441b8b01105) Add isDisabledValue to SelectField (Damian Mooyman)
* 2015-12-09 [037467bea](https://github.com/silverstripe/silverstripe-framework/commit/037467beae90b92598500c27ecfe5d1fcbfea883) Asset Access Control implementation (Damian Mooyman)
* 2015-11-30 [c13b5d989](https://github.com/silverstripe/silverstripe-framework/commit/c13b5d989f4267e457fb08e0ff0ccdfdd77aa7fe) Enable advanced configuration options for requirements combined files (Damian Mooyman)
* 2015-11-26 [c50dc064](https://github.com/silverstripe/silverstripe-cms/commit/c50dc06401b7ea08bee4eef81b33586a2e2c1bbd) Update ErrorPage to use FilesystemGeneratedAssetHandler (Damian Mooyman)
* 2015-11-26 [ce28259c5](https://github.com/silverstripe/silverstripe-framework/commit/ce28259c5f21620db2a61f79fd6479be60a2d8c4) Replace CacheGeneratedAssetHandler with FlysystemGeneratedAssetHandler (Damian Mooyman)
* 2015-11-09 [369f3dda](https://github.com/silverstripe/silverstripe-cms/commit/369f3dda8d46d846c66bfc4e0c55fef7fcdf90d0) Remove deprecated ListboxField::setMultiple() (Damian Mooyman)
* 2015-11-09 [0b897477](https://github.com/silverstripe/silverstripe-siteconfig/commit/0b8974774781ab611e02a50318486472709263be) Remove deprecated setMultiple() (Damian Mooyman)
* 2015-10-29 [641c26299](https://github.com/silverstripe/silverstripe-framework/commit/641c26299ce9bce5c63f36277d8626aa3c1fe6e8) Enable linear-only restriction for DataList::applyRelation (Damian Mooyman)
* 2015-10-23 [e17a49f8a](https://github.com/silverstripe/silverstripe-framework/commit/e17a49f8a50ad1cf6539b41baedfde34277956c8) Restore JS Minification (Damian Mooyman)
* 2015-10-19 [d1ea74e40](https://github.com/silverstripe/silverstripe-framework/commit/d1ea74e40d7558e2ba8fef4c0fa5cecd0a98650b) Implement AssetField to edit DBFile fields (Damian Mooyman)
* 2015-10-14 [2bd9d00d](https://github.com/silverstripe/silverstripe-cms/commit/2bd9d00da0187558b7c76cd0bdc9d9664c140572) Remove filesystem sync (Damian Mooyman)
* 2015-10-13 [227e2ba1](https://github.com/silverstripe/silverstripe-cms/commit/227e2ba1628cc8969a5367e6aab3e20f253c7a82) Move ErrorPage to new generated files API (Damian Mooyman)
* 2015-10-12 [f9892c628](https://github.com/silverstripe/silverstripe-framework/commit/f9892c628c8709333969acb3c8ace4cb820b9987) Generated files API (Damian Mooyman)
* 2015-09-23 [f26c220d8](https://github.com/silverstripe/silverstripe-framework/commit/f26c220d865786725f85860d7848cbd8d137c6c0) Support trait loading (Damian Mooyman)
* 2015-09-16 [2b1e5ee07](https://github.com/silverstripe/silverstripe-framework/commit/2b1e5ee071e72494c02a1c04a508b54e401afe35) Enable DataList::sort to support composite field names (similar to filter) (Damian Mooyman)
* 2015-09-15 [be239896d](https://github.com/silverstripe/silverstripe-framework/commit/be239896d32a6d4437d53ce67e1ccf71847cc845) Refactor of File / Folder to use DBFile (Damian Mooyman)
* 2015-09-14 [051c69ba3](https://github.com/silverstripe/silverstripe-framework/commit/051c69ba3217d464a18270704364590ca752303c) (minor): Freshening up SS_Log API documentation and removed $extras param which was not being used anyway. (Patrick Nelson)
* 2015-09-10 [10dece653](https://github.com/silverstripe/silverstripe-framework/commit/10dece653f36d65a5649014464d40df85833c49f) Consolidate DataObject db methods (Damian Mooyman)
* 2015-09-04 [ee639deed](https://github.com/silverstripe/silverstripe-framework/commit/ee639deedbc3330ea419ee20a6bcd6a04e576bd2) showqueries=1 now shows parameters (Damian Mooyman)
* 2015-09-04 [9872fbef4](https://github.com/silverstripe/silverstripe-framework/commit/9872fbef4d3ae8f649451febb9d0e30ed6dcf843) Refactor CompositeDBField into an abstract class (Damian Mooyman)
* 2015-09-03 [ac27836d2](https://github.com/silverstripe/silverstripe-framework/commit/ac27836d2b3ebe286464744105e8628ec170f236) Implementation of RFC-1 Asset Abstraction (Damian Mooyman)
* 2015-08-30 [aeccb8b8e](https://github.com/silverstripe/silverstripe-framework/commit/aeccb8b8e05f1b26d5ee77075809d330fcedbb4a) Move DBField subclasses into SilverStripe\Model\FieldType namespace (Sam Minnee)
* 2015-07-31 [3e7eecf97](https://github.com/silverstripe/silverstripe-framework/commit/3e7eecf9784b21f7c0fcac14ed58172c575884e0) Remove SQLQuery (Damian Mooyman)
* 2015-07-23 [1b8d29576](https://github.com/silverstripe/silverstripe-framework/commit/1b8d2957673f50ec7c7e52bfb70980aa28519634) Shift to Monolog for error reporting and logging (Sam Minnee)
* 2015-07-16 [40cc567c3](https://github.com/silverstripe/silverstripe-framework/commit/40cc567c368cc8bc633c2486ca2c420bb1256924) Force resampling by default (Jonathon Menz)
* 2015-07-16 [d1af214ef](https://github.com/silverstripe/silverstripe-framework/commit/d1af214ef5efb817c14b85b639525104d94ef2d9) Removed custom dev/tests/ execution (Ingo Schommer)
* 2015-07-16 [a16588aac](https://github.com/silverstripe/silverstripe-framework/commit/a16588aac3b5b3ea0228d13f5c1f9cf437ac9582) Removed JSTestRunner (Ingo Schommer)
* 2015-06-17 [4aa84f3d](https://github.com/silverstripe/silverstripe-cms/commit/4aa84f3dd2856fb0caa597018a7f668f6e1265eb) make DataObject::validate public (Damian Mooyman)
* 2015-06-17 [55170a0b7](https://github.com/silverstripe/silverstripe-framework/commit/55170a0b746e09c59fc6a0d78f2461bfea5f835c) make DataObject::validate public (Damian Mooyman)
* 2015-06-12 [513f0191f](https://github.com/silverstripe/silverstripe-framework/commit/513f0191fba490275bb15e1a5d5f3c4b0c9cb5a5) default behaviour for Director::getAbsoluteUrl (Damian Mooyman)
* 2015-06-08 [3bc76e69](https://github.com/silverstripe/silverstripe-cms/commit/3bc76e69fb7e6da4803707c235431a80652da4f3) Formalise new DataObject::canCreate argument (Damian Mooyman)
* 2015-06-08 [e9d486382](https://github.com/silverstripe/silverstripe-framework/commit/e9d4863828882c12f0cb94d90affa43e6bef45bc) Formalise new additional arguments to DataObject::canCreate, DataExtension::augmentSQL, and DataObject::extendedCan (Damian Mooyman)
* 2015-05-19 [922d02f53](https://github.com/silverstripe/silverstripe-framework/commit/922d02f5356d5904debaf10003477cdd00306192) Enable filters to perform 'IS NULL' or 'IS NOT NULL' checks (Damian Mooyman)
* 2015-03-25 [7f5608c59](https://github.com/silverstripe/silverstripe-framework/commit/7f5608c599106a2b15509168cd575e1f62b133a5) Public visibility on DataQuery::selectField (Uncle Cheese)
* 2015-02-13 [bdb1a9575](https://github.com/silverstripe/silverstripe-framework/commit/bdb1a957583662fb0c463f61fee70cfefd26c988) Cleanup and refactor of select fields (Damian Mooyman)
* 2015-02-10 [dc8d4ffe](https://github.com/silverstripe/silverstripe-cms/commit/dc8d4ffe0bfa98043e23d24899f2fcf8c74cdd09) Refactor usages of HTMLText -> HTMLFragment (Daniel Hensby)
### Features and Enhancements
* 2017-10-30 [0c178f934](https://github.com/silverstripe/silverstripe-framework/commit/0c178f934de942b8b3f6b8fda78b1228656d9906) Adjust tinymce footer, remove branding and restore path (Damian Mooyman)
* 2017-10-26 [f6b7cf888](https://github.com/silverstripe/silverstripe-framework/commit/f6b7cf88893fdc5bc50f1c10d59696b41f924dc2) disable current user from removing their admin permission (Christopher Joe)
* 2017-10-24 [324bdad48](https://github.com/silverstripe/silverstripe-framework/commit/324bdad48c7ad3c3faa75388e22a34dfdf7ae4b9) Ensure DBVarchar scaffolds text field with TextField with appropriate max length (Damian Mooyman)
* 2017-10-19 [04b4596be](https://github.com/silverstripe/silverstripe-framework/commit/04b4596bec408f04f1f8f2ba08872d0cf95b7d27) Don't fail immediately on imagick install (Damian Mooyman)
* 2017-10-16 [78f39e6b](https://github.com/silverstripe/silverstripe-cms/commit/78f39e6b1167e94cc39a123bece8cb02b4ca0ca8) hide tree view icon when searching (Christopher Joe)
* 2017-10-12 [7e97f04e4](https://github.com/silverstripe/silverstripe-framework/commit/7e97f04e47a1adf3848589269fbdba6c2b3737e1) Allow extensions to intercept incorrect deletes on unpublish (Damian Mooyman)
* 2017-10-10 [11b2c7453](https://github.com/silverstripe/silverstripe-framework/commit/11b2c74533f8c646085b1e1921b81525a3a6b194) Improve upgrade experience for beta3 -> beta4 upgrade (Damian Mooyman)
* 2017-10-05 [cdf6ae45a](https://github.com/silverstripe/silverstripe-framework/commit/cdf6ae45a3a7d5bcd44c85d684a2aa2c4c75fb80) Ensure changePassword is called by onBeforeWrite for a consistent API (Robbie Averill)
* 2017-10-03 [43ec2f87e](https://github.com/silverstripe/silverstripe-framework/commit/43ec2f87eda5e8e2dbacc5679520da6eac3a8610) Implement accept attribute in FileField (closes #7279) (Loz Calver)
* 2017-10-03 [6b5241269](https://github.com/silverstripe/silverstripe-framework/commit/6b52412693eaf13d0ae60bb807180069d9cb7eec) Make Member::changePassword extensible (Robbie Averill)
* 2017-09-29 [f4b141761](https://github.com/silverstripe/silverstripe-framework/commit/f4b1417612426e1f7e26c3b31f2be5a403a2a1e3) Use less expensive i18n defaults in Member::populateDefaults() (Damian Mooyman)
* 2017-09-27 [36397c787](https://github.com/silverstripe/silverstripe-framework/commit/36397c787ccef002c7bba793e2e255112a8652c1) add notice for MigrateFileTask if FileMigrationHelper doesn't exist (Christopher Joe)
* 2017-09-27 [90d0361a6](https://github.com/silverstripe/silverstripe-framework/commit/90d0361a6ca3805370c21e9699bb602eb5c272e4) update set_themes to not update config (Christopher Joe)
* 2017-09-26 [28552155c](https://github.com/silverstripe/silverstripe-framework/commit/28552155c33f82d834d25cead433d4683fff0d42) Add actWithPermission to SapphireTest for shortcut to perform actions with specific permissions (Daniel Hensby)
* 2017-09-21 [fa57deeba](https://github.com/silverstripe/silverstripe-framework/commit/fa57deeba4099d74a8746909e3ba1767353c465b) Allow vendor modules with url rewriting (Damian Mooyman)
* 2017-09-21 [7e92b053f](https://github.com/silverstripe/silverstripe-framework/commit/7e92b053f4c01593539a18b3796c41ad0683ad46) Add setter and getter for certain classes, so that LeftAndMain no longer updates config during init (Christopher Joe)
* 2017-09-19 [261302a12](https://github.com/silverstripe/silverstripe-framework/commit/261302a12150b88068a70f829f7265f31e57f551) Don't force all class names to lowercase (Damian Mooyman)
* 2017-09-13 [04b1bb816](https://github.com/silverstripe/silverstripe-framework/commit/04b1bb816e8f3f6aa79e147179d53b0e9a8fff04) RateLimiter for Security controller (Daniel Hensby)
* 2017-09-05 [c707fccf6](https://github.com/silverstripe/silverstripe-framework/commit/c707fccf69cfb6683d7f905d0e440ffa35874e5a) Allow GridFieldEditButton to have configurable HTML classes. Change edit icon. (Sacha Judd)
* 2017-08-29 [98c10b089](https://github.com/silverstripe/silverstripe-framework/commit/98c10b089c0c3a9315f075dc44ab46bbe361369a) Allow <% include %> to fallback outside of the Includes folder (Damian Mooyman)
* 2017-08-28 [0b34066f0](https://github.com/silverstripe/silverstripe-framework/commit/0b34066f0cec8de2c1afdd717613ffab201d02a8) incorrect scalar types in doc blocks, add chainable returns in setters (Robbie Averill)
* 2017-08-23 [2c34af72e](https://github.com/silverstripe/silverstripe-framework/commit/2c34af72e18c7ba577591d389ca1eff2c4bc9eaf) Log user constants during CI for debugging improvements (Damian Mooyman)
* 2017-08-14 [0eebeedd0](https://github.com/silverstripe/silverstripe-framework/commit/0eebeedd0325609bd6785c4e1990109ea3052f23) Test php 7.2 (Sam Minnee)
* 2017-08-10 [9dc11eff4](https://github.com/silverstripe/silverstripe-framework/commit/9dc11eff4362f91c56ad63cf042cf4936f8ae7d3) Add a path option for the schema data, so a full tree is not required for this data (Christopher Joe)
* 2017-08-03 [8577ad128](https://github.com/silverstripe/silverstripe-framework/commit/8577ad128059f4c508f03df4e5566c09fe161be5) Added SSL support for MySQLi Connector (fixes #7242) (John)
* 2017-08-03 [417caf29](https://github.com/silverstripe/silverstripe-cms/commit/417caf29724c1bd6df286d4a0ef9bad71152bf2f) Allow insert links with display link text (Saophalkun Ponlu)
* 2017-08-03 [06efd2ac1](https://github.com/silverstripe/silverstripe-framework/commit/06efd2ac12d92bdfb08d23bcc317a83e9c369cd3) Ensure flush destroys temp tinymce files (Damian Mooyman)
* 2017-08-02 [2f9bfae1f](https://github.com/silverstripe/silverstripe-framework/commit/2f9bfae1f9f6bb2d33e3f979601e0abae243a7f6) Added MySQL SSL PDO Support (John)
* 2017-08-01 [ae97c15e4](https://github.com/silverstripe/silverstripe-framework/commit/ae97c15e4206f70bbdf6028365cb86373d8329ee) Soft-code CSS explicit height and compute against rows (Damian Mooyman)
* 2017-07-26 [74873096b](https://github.com/silverstripe/silverstripe-framework/commit/74873096bdd2cbc3ca1ed9a777987c595431dfb4) getSummary() API for SearchContext (Aaron Carlino)
* 2017-07-21 [392cda15f](https://github.com/silverstripe/silverstripe-framework/commit/392cda15f67dd6935a125483f66584051a3bd140) Add updateRules extension point to Director::handleRequest (Robbie Averill)
* 2017-07-20 [78d4d0d5d](https://github.com/silverstripe/silverstripe-framework/commit/78d4d0d5dd2811047833d5f3624fc1a3bf63c855) add support for TreeMultiselectField in react (Christopher Joe)
* 2017-07-16 [ac851f3a](https://github.com/silverstripe/silverstripe-siteconfig/commit/ac851f3afa1e46a35e355d04ce6cc91c05bd1589) Upgrade to Behat 3, remove old feature contexts, update Travis configuration (Robbie Averill)
* 2017-07-16 [12310d5d](https://github.com/silverstripe/silverstripe-siteconfig/commit/12310d5d2bc81605f4ec7ed2ea834fc84b799dfe) Change "only these people" to "only these groups" in permissions (Robbie Averill)
* 2017-07-16 [2dd5bb4d1](https://github.com/silverstripe/silverstripe-framework/commit/2dd5bb4d19a8f226e3179f89e7bb9514c630db84) Add Behat CMS header tab context methods (Robbie Averill)
* 2017-07-14 [6fc1491f](https://github.com/silverstripe/silverstripe-cms/commit/6fc1491f0b823ae43f86354d843ba3cd3a4cfbb1) Add edit command and its url test for page insert (Saophalkun Ponlu)
* 2017-07-13 [1cf8a67f](https://github.com/silverstripe/silverstripe-cms/commit/1cf8a67f21563c99044bccd78af6c7f02b1ebb81) Use injector for creating SSViewer (Robbie Averill)
* 2017-07-12 [f367a0aa6](https://github.com/silverstripe/silverstripe-framework/commit/f367a0aa62baef0969091cc766c41822ad305087) add web accessible colours to web view dev/build (Sacha Judd)
* 2017-07-10 [823e49526](https://github.com/silverstripe/silverstripe-framework/commit/823e49526fe43b554e1b05a098ddff498bb52210) Allow SSViewer and SSViewer_FromString to be injectable (Robbie Averill)
* 2017-07-04 [b347ab86](https://github.com/silverstripe/silverstripe-cms/commit/b347ab866d50a589a598fa4f27fef787a24d9879) Add version provider configuration (Robbie Averill)
* 2017-07-04 [ee4d8b4d4](https://github.com/silverstripe/silverstripe-framework/commit/ee4d8b4d4e22a25b86c90785c45cc480f8423861) Add new SilverStripeVersionProvider to provider module versions (Robbie Averill)
* 2017-07-04 [bd5782adc](https://github.com/silverstripe/silverstripe-framework/commit/bd5782adcaf46e4a7281b778504a38e4dc6badf3) Allow index type to be configured per DBField instance (Robbie Averill)
* 2017-07-03 [4c1dbd40](https://github.com/silverstripe/silverstripe-cms/commit/4c1dbd402b69093c069ffa12d8e01e4e5a816d83) Change "only these people" to "only these groups" in permissions (Robbie Averill)
* 2017-06-27 [ce730319](https://github.com/silverstripe/silverstripe-cms/commit/ce730319ecdf9f0c93c0ea4001d120fe238e9250) Remove use of MODULE_DIR constants (Sam Minnee)
* 2017-06-27 [8bb53215](https://github.com/silverstripe/silverstripe-siteconfig/commit/8bb5321546dfe289d29a970d0ba7d7ccd4527674) Remove use of MODULE_DIR constants (Sam Minnee)
* 2017-06-23 [c9c439061](https://github.com/silverstripe/silverstripe-framework/commit/c9c43906191511bce8ef6f4dc8b84600eebaebf2) Ensure polymorphic has_one fields are indexed (Robbie Averill)
* 2017-06-23 [ccc86306b](https://github.com/silverstripe/silverstripe-framework/commit/ccc86306b6a0d6eb9bbb8b41b209b8595393d591) Add TrustedProxyMiddleware (Sam Minnee)
* 2017-06-23 [c4d038f20](https://github.com/silverstripe/silverstripe-framework/commit/c4d038f20dfcba582c7ab35b596b106ae0938075) Add HTTPRequest::getScheme()/setScheme() (Sam Minnee)
* 2017-06-23 [4d89daac7](https://github.com/silverstripe/silverstripe-framework/commit/4d89daac786ac501a4c651d4bbe62d8eac701388) Register Injector::inst()->get(HTTPRequest) (Sam Minnee)
* 2017-06-23 [d3d426bdf](https://github.com/silverstripe/silverstripe-framework/commit/d3d426bdfc021b8bf1ae801674a1f9efa7ecfd57) restored Extension::__construct() (Franco Springveldt)
* 2017-06-23 [72a7655e9](https://github.com/silverstripe/silverstripe-framework/commit/72a7655e95f89aa63fe9ed7b3bce3d7fd32cd989) Moved allowed-hosts checking to a middleware. (Sam Minnee)
* 2017-06-23 [db080c060](https://github.com/silverstripe/silverstripe-framework/commit/db080c0603a14a4a134a83400d46cbf34d19bae5) Move session activation to SessionMiddleware. (Sam Minnee)
* 2017-06-23 [254204a3a](https://github.com/silverstripe/silverstripe-framework/commit/254204a3a66045e97ed076dc27910f85721177a9) Replace AuthenticationRequestFilter with AuthenticationMiddleware (Sam Minnee)
* 2017-06-23 [e85562289](https://github.com/silverstripe/silverstripe-framework/commit/e85562289045cdc7c5c0c619811444e4b1f4dcd9) Replace FlushRequestFilter with FlushMiddleware (Sam Minnee)
* 2017-06-22 [26b9bf11e](https://github.com/silverstripe/silverstripe-framework/commit/26b9bf11edcc2cb5a27a681ab52ad0f8299df81a) Allow “%$” prefix in Injector::get() (Sam Minnee)
* 2017-06-15 [a990c99d6](https://github.com/silverstripe/silverstripe-framework/commit/a990c99d6e6f477ab6e973ada13f9dff234682f5) suffix subfolder in silverstripe-cache with php-version (#6810) (Lukas)
* 2017-06-15 [5d27dccd6](https://github.com/silverstripe/silverstripe-framework/commit/5d27dccd6013d3d2ae8e26db74469c6b5f22ecdd) Add CSRF token to logout action (Loz Calver)
* 2017-06-11 [7178caf4a](https://github.com/silverstripe/silverstripe-framework/commit/7178caf4a947cf48f3785b2b1b6ec658a2ce146a) show the path which threw the error (Christopher Joe)
* 2017-06-01 [9a0e01d4a](https://github.com/silverstripe/silverstripe-framework/commit/9a0e01d4a083514c70992d8c7625c6cfedd6e54a) DB Driver defaults to PDO (Daniel Hensby)
* 2017-05-31 [0f90c5b63](https://github.com/silverstripe/silverstripe-framework/commit/0f90c5b63fdd5dedf0d5689c78208f44ddb4b4c1) Update style of CMSLogin form (Damian Mooyman)
* 2017-05-31 [844420df](https://github.com/silverstripe/silverstripe-cms/commit/844420df40c18fed97976da75265297e6386852a) Translation strings updated (Christopher Joe)
* 2017-05-24 [e327bf3c7](https://github.com/silverstripe/silverstripe-framework/commit/e327bf3c70a5f0510e579016ffce85f1efadaef1) add contribution notes about releasing to NPM (Christopher Joe)
* 2017-05-18 [c2841b6d6](https://github.com/silverstripe/silverstripe-framework/commit/c2841b6d64d2c756f4ad046bb1ef6eacf9d861ea) Remove "Remove link" button from the editor's main toolbar (Saophalkun Ponlu)
* 2017-05-18 [3e556b596](https://github.com/silverstripe/silverstripe-framework/commit/3e556b59660b1126a4079bd99e030415780997e2) Move index generation to DataObjectSchema and solidify index spec (Daniel Hensby)
* 2017-05-16 [9a31b19e](https://github.com/silverstripe/silverstripe-cms/commit/9a31b19ed28c4fc530dc4a231031313943a14799) RedirectorPage extensions can now modify fields (Damian Mooyman)
* 2017-05-11 [6869e450a](https://github.com/silverstripe/silverstripe-framework/commit/6869e450a0f98fdf44ec888308ee85262210ab60) added customisable emptyTitle and a showRootOption property in TreeDropdownField (Christopher Joe)
* 2017-05-10 [7fa47e234](https://github.com/silverstripe/silverstripe-framework/commit/7fa47e234f9082d770e4618a4e78ea2c5f74c80b) API for minified files using injectable service (Aaron Carlino)
* 2017-05-08 [afd157526](https://github.com/silverstripe/silverstripe-framework/commit/afd157526777b6f3a62644c800155c4286401e30) GridField passes in context for canCreate (Aaron Carlino)
* 2017-05-07 [f9ea752ba](https://github.com/silverstripe/silverstripe-framework/commit/f9ea752bae7344ea9df1eeef56e7e8259e65fbcb) Add AuthenticationHandler interface (Sam Minnee)
* 2017-05-05 [edcb220e4](https://github.com/silverstripe/silverstripe-framework/commit/edcb220e4afd99d294e105c2363fac3fbf0beb62) add EmailLink form factory server-side (Christopher Joe)
* 2017-05-04 [f4179d60](https://github.com/silverstripe/silverstripe-cms/commit/f4179d608de86f04cdc7d1d4211901d31ded3d52) Simplify test runs. (Sam Minnee)
* 2017-05-04 [1691e90fb](https://github.com/silverstripe/silverstripe-framework/commit/1691e90fbd4ef15fdf2514ba8da2e0500e0c7b29) Allow SapphireTest::objFromFixture() to accept either table or class (Sam Minnee)
* 2017-05-04 [2ee0d9980](https://github.com/silverstripe/silverstripe-framework/commit/2ee0d99806daca5e1fdcd033e5046a91785bfcac) switch FormFactories to use RequestHandler instead of Controller (Christopher Joe)
* 2017-04-24 [b6d4eb3e](https://github.com/silverstripe/silverstripe-cms/commit/b6d4eb3e77d3f7dd68067b1e46c93e391809290b) module-based JS translation keys (Aaron Carlino)
* 2017-04-20 [d51c4891e](https://github.com/silverstripe/silverstripe-framework/commit/d51c4891e2f585bf89c67071d9ad665c0c97151a) namespaced i18n keys (Uncle Cheese)
* 2017-04-20 [29805ee4](https://github.com/silverstripe/silverstripe-cms/commit/29805ee4462b5cc7620040864312d707e4a8d191) namespaced i18n keys (Uncle Cheese)
* 2017-04-13 [a58416b6](https://github.com/silverstripe/silverstripe-reports/commit/a58416b6f67b48651960368bbc513b92fed786f6) style travis tests (Ingo Schommer)
* 2017-04-03 [b8db4505](https://github.com/silverstripe/silverstripe-cms/commit/b8db45055ca8f08291d5d2ba4317a755339917a7) Refactor archive message to a separate method (Saophalkun Ponlu)
* 2017-04-03 [8b1c020b9](https://github.com/silverstripe/silverstripe-framework/commit/8b1c020b9f1890ba5818206baa7b51ee38ec1cb3) Downgrade MSSQL from commercially supported to community supported (Sam Minnee)
* 2017-03-31 [5b90141c](https://github.com/silverstripe/silverstripe-cms/commit/5b90141c03208873fc15e2a1e807ede52868ac41) Update archive warning message (Saophalkun Ponlu)
* 2017-02-27 [fc54fa160](https://github.com/silverstripe/silverstripe-framework/commit/fc54fa160064e50c6234dfbd17df13fee1c5984c) Add class to clear underline styling for fieldholders (Christopher Joe)
* 2017-02-02 [0982f77ec](https://github.com/silverstripe/silverstripe-framework/commit/0982f77ec70bfa69cd88767204fac55e677e4bc2) /aggregate data filters (#6553) (Aaron Carlino)
* 2017-02-02 [3952769ea](https://github.com/silverstripe/silverstripe-framework/commit/3952769ea390cdecf831c9c6fd653a7355a6d4af) More helpful error when .env is missing. (Sam Minnee)
* 2017-01-30 [06b4758](https://github.com/silverstripe/silverstripe-installer/commit/06b475896d69738541d3033690ed3768f8f42955) Add .env support (Daniel Hensby)
* 2017-01-30 [8c8231c03](https://github.com/silverstripe/silverstripe-framework/commit/8c8231c03e3fd1fea8d91da3c03676d59ed0847c) Director::host() to determine host name of site (Daniel Hensby)
* 2017-01-30 [873fd8c5b](https://github.com/silverstripe/silverstripe-framework/commit/873fd8c5bc03a848aae84f39b7d73af67b661798) replace _ss_environment.php with .env and environment vars (Daniel Hensby)
* 2017-01-16 [87ac3e397](https://github.com/silverstripe/silverstripe-framework/commit/87ac3e3971381945b2039c9e90934a6aa3dcb4a7) Display warning on always_populate_raw_post_data not being -1 in php 5 (#6507) (Damian Mooyman)
* 2017-01-13 [3ea5015f8](https://github.com/silverstripe/silverstripe-framework/commit/3ea5015f8bbed1a88b5ea9ba27c5fe33cf75ff36) Move to SwiftMailer powered Emails (#6466) (Daniel Hensby)
* 2017-01-11 [b52a963ed](https://github.com/silverstripe/silverstripe-framework/commit/b52a963ed7e6bea244ac08f83636db632f242c64) Remove jquery-ui button() api from default HTML editor dialog (Damian Mooyman)
* 2016-12-23 [ed26b251c](https://github.com/silverstripe/silverstripe-framework/commit/ed26b251c830bd7b096cd717bc1baeb6c2d4c590) Better output type detection for debugging (Damian Mooyman)
* 2016-12-21 [cf5c055de](https://github.com/silverstripe/silverstripe-framework/commit/cf5c055dede91a0da362aef8b3a9e5465af16de4) Campaign admin publish button styles missing (Paul Clarke)
* 2016-12-20 [e893fc4c5](https://github.com/silverstripe/silverstripe-framework/commit/e893fc4c5164b6cba9a1ea67b4651410b6cb01d1) improve secondary action colours (Paul Clarke)
* 2016-12-14 [d8843c6fe](https://github.com/silverstripe/silverstripe-framework/commit/d8843c6fe2bfd4a7116c327ba3be6d9926072227) Split out the fetch call easier mocking (Christopher Joe)
* 2016-12-13 [ddc9a9c6d](https://github.com/silverstripe/silverstripe-framework/commit/ddc9a9c6d6d48b9a689e3d3e0588aae07d344547) up buttons within gridfield search (Will Rossiter)
* 2016-12-12 [7b90ee137](https://github.com/silverstripe/silverstripe-framework/commit/7b90ee137dcd589c3c31d9683f4804f7f2607717) resize icon to sit inline and increase size of search icon and Upload icon (Paul Clarke)
* 2016-12-08 [085c8f5a4](https://github.com/silverstripe/silverstripe-framework/commit/085c8f5a43636cbb0c09d7a6cbeb218a8a7128e9) 2x increase in scanning of files for ConfigManifest (Jake Bentvelzen)
* 2016-12-07 [2a25a525c](https://github.com/silverstripe/silverstripe-framework/commit/2a25a525cb53a1f4158f87481a1658aa25e0c51f) Move temporary JSON block into standard component (Damian Mooyman)
* 2016-12-05 [6ec780493](https://github.com/silverstripe/silverstripe-framework/commit/6ec780493202c4a06165c9dafe0c2d7961de33a1) Add icon size for 14px icons and table padding for asset list (Paul Clarke)
* 2016-11-30 [cb6ec11f1](https://github.com/silverstripe/silverstripe-framework/commit/cb6ec11f1b179acadc0dd52d902aa52ca1284f2a) Implement import CSV icon and tidy up import forms (Will Rossiter)
* 2016-11-29 [0e92ecea0](https://github.com/silverstripe/silverstripe-framework/commit/0e92ecea0c1dc57ccde5b1b152934a880960375a) Prevent test DBs persisting after testing (Damian Mooyman)
* 2016-11-22 [8ab382ed7](https://github.com/silverstripe/silverstripe-framework/commit/8ab382ed78031a0da43417f3020e18c878bd92cb) Insert media modal in react (Damian Mooyman)
* 2016-11-21 [35e313de1](https://github.com/silverstripe/silverstripe-framework/commit/35e313de17acbf88a6b1c33c74f07136e25310cc) height for modal in IE10 (Paul Clarke)
* 2016-11-21 [0d788ddf](https://github.com/silverstripe/silverstripe-cms/commit/0d788ddfbc8be0e00d54b4316bf544104cb4cbdb) Code Coverage via CodeCov.io (#1631) (Ingo Schommer)
* 2016-11-01 [5650254b5](https://github.com/silverstripe/silverstripe-framework/commit/5650254b53a7ab25872657cdd6932ef5e63afdf3) es to allow code files in src/ folder. (Damian Mooyman)
* 2016-11-01 [213cf8841](https://github.com/silverstripe/silverstripe-framework/commit/213cf8841b5675c59a1578f36a3af9dd397d2eae) Test webpack build as part of NPM test run. (Sam Minnee)
* 2016-11-01 [e9d2f2f73](https://github.com/silverstripe/silverstripe-framework/commit/e9d2f2f733343bff29f5bab0fc94263d02119f0b) Use composer autoloader to set the right include path. (Sam Minnee)
* 2016-11-01 [7a10c194b](https://github.com/silverstripe/silverstripe-framework/commit/7a10c194bdd751f74669c07836befecc1fde400e) Move code files into src/ folder. (Sam Minnee)
* 2016-10-31 [741c515c](https://github.com/silverstripe/silverstripe-cms/commit/741c515cb2f5ed07d429cbcdcff32331aedb5d64) Improved behaviour for flexbox on smaller screens (Damian Mooyman)
* 2016-10-28 [bf9939e3](https://github.com/silverstripe/silverstripe-cms/commit/bf9939e32c1e624fdff4de8b0ca213531093a496) Refactor test bootstrap to be more modular. (Sam Minnee)
* 2016-10-26 [c47a1d909](https://github.com/silverstripe/silverstripe-framework/commit/c47a1d9091c4cba52109c7fa9d9a46ac57d4ea93) Simplified test runs. (Sam Minnee)
* 2016-10-24 [added212](https://github.com/silverstripe/silverstripe-cms/commit/added2129f7c91812442cc6ebfc01c72b9f68605) Simplified travis run (Sam Minnee)
* 2016-09-17 [b19475d74](https://github.com/silverstripe/silverstripe-framework/commit/b19475d748a8f3039605a5b63f8ef829688044a3) Ignore npm-shrinkwrap for greenskeeper-provided PRs. (Sam Minnee)
* 2016-09-17 [c2ebff5c1](https://github.com/silverstripe/silverstripe-framework/commit/c2ebff5c19ada06110f6422e9a74ffde8dacb182) Use sass-lint over scss-lint (Sam Minnee)
* 2016-09-15 [f700d8655](https://github.com/silverstripe/silverstripe-framework/commit/f700d86557375a0f7510344274337bb58b37e68f) Run JS/CSS linting in Travis. (Sam Minnee)
* 2016-09-14 [cebcf7fb8](https://github.com/silverstripe/silverstripe-framework/commit/cebcf7fb8c4bedb45cf8360978e95c11a831ff8b) More flexible theme resolution for framework and cms. (Sam Minnee)
* 2016-09-13 [07396e443](https://github.com/silverstripe/silverstripe-framework/commit/07396e4437064ace9cad66bedc5ea07eced78bf5) Move Travis behat test to run locally. (Sam Minnee)
* 2016-09-13 [96126323d](https://github.com/silverstripe/silverstripe-framework/commit/96126323d24349ade5900f68a3f3ea13e226ff77) themedCSS() and themedJavascript() work with any file layout. (Sam Minnee)
* 2016-09-12 [9dd5ebee8](https://github.com/silverstripe/silverstripe-framework/commit/9dd5ebee8cd04fd5b7544c7ca7cad0d065e7b8ed) Don’t set up SilverStripe project for test run (Sam Minnee)
* 2016-09-12 [6b847d361](https://github.com/silverstripe/silverstripe-framework/commit/6b847d36144a5d10aa2eb1bf691a641efa82f73f) Allow project root to be treated as a module. (Sam Minnee)
* 2016-09-08 [3d827543](https://github.com/silverstripe/silverstripe-cms/commit/3d827543a8d7d419bba5ac79d398614f31b296a7) Allow pages to specify the controller they use (Loz Calver)
* 2016-05-21 [a9eebdc7e](https://github.com/silverstripe/silverstripe-framework/commit/a9eebdc7edc31023cb7272ed3fff2ca6f31de0b1) Allow namespaces in template include statements. (Sam Minnee)
* 2016-04-11 [21a106532](https://github.com/silverstripe/silverstripe-framework/commit/21a106532922fb9533c6be3c156015ba0149c2e3) Add createEndpointFetcher to backend (Sam Minnee)
* 2016-04-03 [a17c5cb14](https://github.com/silverstripe/silverstripe-framework/commit/a17c5cb148cbf08b59b846586fc6707cf6da5b1b) Expose silverstripe-backend for modules to access. (Sam Minnee)
* 2016-03-02 [ae3161969](https://github.com/silverstripe/silverstripe-framework/commit/ae3161969567215670574f0cca273a124586fa40) styles for main nav (Paul Clarke)
* 2016-02-04 [bab1f230b](https://github.com/silverstripe/silverstripe-framework/commit/bab1f230bfccf8f7fcc66bc38630eb4b2c1c2c4a) Cross device "Remember Me" feature (Jean-Fabien Barrois)
* 2015-08-28 [53ffc1a0d](https://github.com/silverstripe/silverstripe-framework/commit/53ffc1a0dbac52ad682a150d387b104c1dc0616f) Defining byID functions in SS_Filterable (Daniel Hensby)
* 2015-08-27 [52ca089d0](https://github.com/silverstripe/silverstripe-framework/commit/52ca089d0bb01a8a588ecaecbf841f92e9cec050) Ensure php7 builds pass. (Sam Minnee)
* 2015-07-29 [a1f7dcafa](https://github.com/silverstripe/silverstripe-framework/commit/a1f7dcafa23380ed9f357d3574dd6aea4bffd653) Add ‘calls’ section to Injector configs. (Sam Minnee)
* 2015-07-27 [ebc3900c4](https://github.com/silverstripe/silverstripe-framework/commit/ebc3900c4af39ff3c46a0127b0cf681c829666a6) Replace DebugView’s writeX() functions with renderX() functions. (Sam Minnee)
* 2015-05-27 [223466a8b](https://github.com/silverstripe/silverstripe-framework/commit/223466a8b8554046a0525de5b794c702cb56fdae) Configurable file version prefix (Jonathon Menz)
* 2015-05-01 [9f91b4782](https://github.com/silverstripe/silverstripe-framework/commit/9f91b4782513b703926a9ff90d6248bf4dc3059d) Update SS_ConfigStaticManifest to use Reflection (micmania1)
* 2014-07-05 [533d5dbd4](https://github.com/silverstripe/silverstripe-framework/commit/533d5dbd4b79c307d8b6289f8c6fb28ae743a9ca) Admin url can now be customized (Thierry François)
### Bugfixes
* 2017-11-07 [8497b9e1e](https://github.com/silverstripe/silverstripe-framework/commit/8497b9e1e6f2710733a22d210b2b7f3d79c287ff) Disable directory index with missing slash (Damian Mooyman)
* 2017-11-03 [1929ec46b](https://github.com/silverstripe/silverstripe-framework/commit/1929ec46bba443c870b0a756df791520a485e352) Prevent logOut() from clearing site stage during bootstrapping due to flushed session (Damian Mooyman)
* 2017-11-02 [6a73466b4](https://github.com/silverstripe/silverstripe-framework/commit/6a73466b41a1fbc1947bf2608c5ea35f78934f50) Fix basicauth (Damian Mooyman)
* 2017-11-02 [1b190de7](https://github.com/silverstripe/silverstripe-cms/commit/1b190de7e1844f817caa0f65d3bfe5fdff31d264) Fix regression to cancel draft changes (Christopher Joe)
* 2017-11-02 [a61ce077c](https://github.com/silverstripe/silverstripe-framework/commit/a61ce077c64851fdf5dd4aa041cfd74509590011) Sessions must be destroyed on logout (Daniel Hensby)
* 2017-11-02 [27907304](https://github.com/silverstripe/silverstripe-cms/commit/27907304c16950ccd3b9e4a81e6952dad96ee64b) Ensure we publish pages to update permissions during testing (Damian Mooyman)
* 2017-11-01 [df50c8da0](https://github.com/silverstripe/silverstripe-framework/commit/df50c8da03033c3282a9589b292b00002f4f08e8) Use parse_str in place of guzzle library (Damian Mooyman)
* 2017-11-01 [897cba55c](https://github.com/silverstripe/silverstripe-framework/commit/897cba55cbf6bf2fae6ec0bc2f464b4b61b4dd22) Move Member log out extension points to non-deprecated methods (Robbie Averill)
* 2017-11-01 [c331deda](https://github.com/silverstripe/silverstripe-cms/commit/c331dedae929478c971348a5cfd431d99ea09bbd) Fix ambiguous query for content report (Christopher Joe)
* 2017-10-30 [4fb53060](https://github.com/silverstripe/silverstripe-cms/commit/4fb5306008328f38886c7ddb7b0b2a31addffc47) Safely check for is_site_url before parsing a shortcode (Damian Mooyman)
* 2017-10-29 [26dc7373](https://github.com/silverstripe/silverstripe-reports/commit/26dc7373bae2fde3889f67103bd2db2c59d70afb) Add primary button class to 'Filter' button (Robbie Averill)
* 2017-10-27 [4d063289](https://github.com/silverstripe/silverstripe-cms/commit/4d0632892bf1c4bc56041881fccb9e0ff9c1d5db) Add warning state to revert action in CMS page history (Robbie Averill)
* 2017-10-26 [9d3277f3d](https://github.com/silverstripe/silverstripe-framework/commit/9d3277f3d3937845d893ce9a93863a63b99b4546) Fix forceWWW and forceSSL not working in _config.php (Damian Mooyman)
* 2017-10-26 [68c3279fd](https://github.com/silverstripe/silverstripe-framework/commit/68c3279fd9b342f9664146c0131d185ca17c340a) Ensure readonly tree dropdown is safely encoded (Damian Mooyman)
* 2017-10-25 [8725672ea](https://github.com/silverstripe/silverstripe-framework/commit/8725672eaec2a85bfb1e6af05c37ad0e8a6e1790) changelog anchors (Ingo Schommer)
* 2017-10-25 [da4989e8f](https://github.com/silverstripe/silverstripe-framework/commit/da4989e8f624247cb3618c1244d7c19055672a6c) Do not escape the readonly values since they get escaped when rendered (Robbie Averill)
* 2017-10-25 [d6c528b](https://github.com/silverstripe/silverstripe-installer/commit/d6c528b8bc433914cadb60ce4435c011c861fa59) test paths (Damian Mooyman)
* 2017-10-25 [2f82d0846](https://github.com/silverstripe/silverstripe-framework/commit/2f82d084600cabc51bbadd9ae8c63b755087a8f7) Fix env loading in installer (Damian Mooyman)
* 2017-10-24 [d56c75607](https://github.com/silverstripe/silverstripe-framework/commit/d56c75607429229867a4d8d5b14ad13617661754) ed changelog indentation (Ingo Schommer)
* 2017-10-20 [4caf34506](https://github.com/silverstripe/silverstripe-framework/commit/4caf34506af4725a0e8ddcbdda68d6d72366051e) switch to using the Convert class for decoding (Christopher Joe)
* 2017-10-19 [689c198f](https://github.com/silverstripe/silverstripe-cms/commit/689c198fbecefe7fb73e035184314bb0fa21af06) revert to this button after archiving (Christopher Joe)
* 2017-10-18 [bb9501797](https://github.com/silverstripe/silverstripe-framework/commit/bb9501797f9f96bd7a5dc702ea6c5c084c6f4fde) Use isolated scope when requiring files for module activation (Loz Calver)
* 2017-10-18 [dabdc905c](https://github.com/silverstripe/silverstripe-framework/commit/dabdc905ce849583b7818751db461c81832d5496) Fix enable email subclasses to use their respective templates (Christopher Joe)
* 2017-10-18 [0b3363d0a](https://github.com/silverstripe/silverstripe-framework/commit/0b3363d0a05bf45dfe20003b7ba7d67d39558574) Fix documentation for permissions (Christopher Joe)
* 2017-10-17 [77b26b36](https://github.com/silverstripe/silverstripe-cms/commit/77b26b36fdfc28538f8050e877b8a46ec0b00478) Fix page icons in vendor modules (Damian Mooyman)
* 2017-10-17 [884fdd61b](https://github.com/silverstripe/silverstripe-framework/commit/884fdd61b18d9669c7b45c2465eef0260d8377ad) Ensure sake works when called from any directory (Damian Mooyman)
* 2017-10-16 [199f8377](https://github.com/silverstripe/silverstripe-cms/commit/199f83775ce10a3f7dd3cecb993766a11b729fa1) standardise "cms-content-header" content with ModalAdmin layout (Christopher Joe)
* 2017-10-16 [b9cb1e69e](https://github.com/silverstripe/silverstripe-framework/commit/b9cb1e69e6f20fa17522aec68a137d79f075ae5d) Replace phpdotenv with thread-safe replacement (Damian Mooyman)
* 2017-10-16 [076d7d78c](https://github.com/silverstripe/silverstripe-framework/commit/076d7d78c652be7fc041bc67873110f3a5411743) cache the cacheKey in TreeDropdownField, so it doesn't need to query for it multiple times in the same request (Christopher Joe)
* 2017-10-12 [7ff707df7](https://github.com/silverstripe/silverstripe-framework/commit/7ff707df7388c5c8d62784d4cf87c98036958a53) Fixed issue on windows where the BASE_URL constant would get set wrong if the site was in a sub-folder of the web root (UndefinedOffset)
* 2017-10-12 [a930d7ae](https://github.com/silverstripe/silverstripe-cms/commit/a930d7ae2e9d9a1f59eea74960700958f0ae896b) Fix up markup and classes to work better with flexbox (Christopher Joe)
* 2017-10-12 [6fe1e2c5](https://github.com/silverstripe/silverstripe-reports/commit/6fe1e2c5b2d5300a478eaec1e3c959e77300a600) align heading properly (Christopher Joe)
* 2017-10-12 [5ccbabd36](https://github.com/silverstripe/silverstripe-framework/commit/5ccbabd36ca9072b008f0ae444982de57ce6eb19) Fix sake path lookup to find vendor framework (Damian Mooyman)
* 2017-10-10 [c8f95182](https://github.com/silverstripe/silverstripe-cms/commit/c8f95182cbd46d2a8c0cf3fb4bf2ba95c9f97d25) icon urls (Damian Mooyman)
* 2017-10-10 [6a55dcfc1](https://github.com/silverstripe/silverstripe-framework/commit/6a55dcfc16eacf3210fa8d630953d588433275d5) references to resource paths / urls (Damian Mooyman)
* 2017-10-09 [9d873db9](https://github.com/silverstripe/silverstripe-cms/commit/9d873db976751c5ea3fc8172dbbbd3b842c359ca) paths in Install_successfullyinstalled.ss (Damian Mooyman)
* 2017-10-09 [fd630a99b](https://github.com/silverstripe/silverstripe-framework/commit/fd630a99b0226f9581268627c07a96ab36be98c5) Fix decimal scaffolding (Damian Mooyman)
* 2017-10-09 [f34f7cb66](https://github.com/silverstripe/silverstripe-framework/commit/f34f7cb6689c3fd991fe325242f45ec1c06fb551) surname behat test (Christopher Joe)
* 2017-10-08 [6bc716d7c](https://github.com/silverstripe/silverstripe-framework/commit/6bc716d7c98e723aa4c72da305c2be39d104b17c) ed incorrect statement on ID generation (Sam Minnée)
* 2017-10-08 [89db5870b](https://github.com/silverstripe/silverstripe-framework/commit/89db5870bc71d08966e9ecb43cd493512b21e0d8) typo in docs (Christopher Joe)
* 2017-10-08 [504e762c6](https://github.com/silverstripe/silverstripe-framework/commit/504e762c6eab9746990f1fb08020530f310a9ff4) Fix missing property in requirements minificaction docs (Damian Mooyman)
* 2017-10-06 [bd874ca91](https://github.com/silverstripe/silverstripe-framework/commit/bd874ca91f84b75594c3dab2232d43134f715659) ed docs paths (fixes #7075) (Ingo Schommer)
* 2017-10-06 [578f3f208](https://github.com/silverstripe/silverstripe-framework/commit/578f3f208c82fd9789990fe2a986d40ea474f49c) behat test (Christopher Joe)
* 2017-10-05 [3bdc8c7e6](https://github.com/silverstripe/silverstripe-framework/commit/3bdc8c7e65c6f6ecb9992042a83043f65658cb0d) Trim whitespace off names in Injector (Robbie Averill)
* 2017-10-05 [e07658ef5](https://github.com/silverstripe/silverstripe-framework/commit/e07658ef50d737f60c3234222d17fe1a9a46659c) linting issues and fix doc (Christopher Joe)
* 2017-10-05 [a1a834192](https://github.com/silverstripe/silverstripe-framework/commit/a1a834192940c01144c310bae2fc663d59fdb954) refactor TreeMultiselectField to be clearable if nothing is selected (Christopher Joe)
* 2017-10-04 [ca60b94f](https://github.com/silverstripe/silverstripe-reports/commit/ca60b94f2e982a7b42a74c15c6aa3431c8f2f153) Fix vendor bootstrap path (Damian Mooyman)
* 2017-10-04 [924e2a714](https://github.com/silverstripe/silverstripe-framework/commit/924e2a714f0e85ff28b2a2e00e1e7a14ff4fb1c7) sake path relative to vendor (Ingo Schommer)
* 2017-10-04 [f6ce07dc8](https://github.com/silverstripe/silverstripe-framework/commit/f6ce07dc889897516ff07d72e7cf4df1de38ddfe) behat bootstrap path (Ingo Schommer)
* 2017-10-04 [1b6d0144c](https://github.com/silverstripe/silverstripe-framework/commit/1b6d0144c5f330c8bf1cc9a180152c80af6f0f6b) Fix resource mapping for TinyMCE (Damian Mooyman)
* 2017-10-03 [2fc3f80f](https://github.com/silverstripe/silverstripe-cms/commit/2fc3f80f1f48b322acaeed0522ca6ee1a94f1d25) tinymce issue (Damian Mooyman)
* 2017-10-03 [ab4044e2](https://github.com/silverstripe/silverstripe-siteconfig/commit/ab4044e23e91db6c6108fb00ab1d271d9745262c) CI config (Damian Mooyman)
* 2017-10-03 [f4a77649a](https://github.com/silverstripe/silverstripe-framework/commit/f4a77649a4a77e506ad4b5de91f32a66bf96f803) requirements tests (Damian Mooyman)
* 2017-10-03 [5ffe64f02](https://github.com/silverstripe/silverstripe-framework/commit/5ffe64f024ba2f9b15517af6a01d433136e3648e) tinymce plugins (Damian Mooyman)
* 2017-10-02 [e1b98d154](https://github.com/silverstripe/silverstripe-framework/commit/e1b98d154e672aacf137798f906ec43d4861567f) tinymce operation for resource paths (Ingo Schommer)
* 2017-10-02 [7de2e07](https://github.com/silverstripe/silverstripe-installer/commit/7de2e07139352c7d332945e9b9db5fc65a8a507e) main.php path in install.php (Ingo Schommer)
* 2017-10-02 [8e49b563a](https://github.com/silverstripe/silverstripe-framework/commit/8e49b563a9184e1fdb9578bc05d3d9d5580bd577) installer paths for vendorised module (Ingo Schommer)
* 2017-10-02 [e88f765](https://github.com/silverstripe/silverstripe-installer/commit/e88f7654da811df43be6fa6bd2070619d774f717) main.php path (Ingo Schommer)
* 2017-10-02 [85255891b](https://github.com/silverstripe/silverstripe-framework/commit/85255891be79588407bc750527bea6c83a79c5be) test environment type (Damian Mooyman)
* 2017-10-02 [a2f0a79b](https://github.com/silverstripe/silverstripe-cms/commit/a2f0a79b21ab99e5b821f824e7290eb11d5d0e9c) test environment type (Damian Mooyman)
* 2017-10-02 [26f7f0482](https://github.com/silverstripe/silverstripe-framework/commit/26f7f0482cfb87086e7c984e9583026985c0128b) typos in FilesystemCacheFactory (Christopher Joe)
* 2017-09-29 [e2750c03f](https://github.com/silverstripe/silverstripe-framework/commit/e2750c03fc5569f33395f33637d278bfea2dbcd1) Restore SS_USE_BASIC_AUTH env var (Damian Mooyman)
* 2017-09-27 [53b2fcd1e](https://github.com/silverstripe/silverstripe-framework/commit/53b2fcd1ea7efa7b7b4e6fcd91a397075f40a21b) amend TinyMCE combined generator's unit test to be more lenient with encoding (Christopher Joe)
* 2017-09-27 [51ac297c5](https://github.com/silverstripe/silverstripe-framework/commit/51ac297c599ade6a964c395f5f631f4f15ba3e5a) es to ratelimiter and new features (Daniel Hensby)
* 2017-09-27 [c7cbbb29f](https://github.com/silverstripe/silverstripe-framework/commit/c7cbbb29f4a06bc4edf1cee0cad3c4953c11d2b4) links on paginated lists when there are GET vars (Andrew O'Neil)
* 2017-09-27 [4dbd72720](https://github.com/silverstripe/silverstripe-framework/commit/4dbd72720629f4cda578ae2efc077382992ef03d) Config updates are now applied after middleware not before (Damian Mooyman)
* 2017-09-26 [33ae463e5](https://github.com/silverstripe/silverstripe-framework/commit/33ae463e5b982214fbb1871c04cbaa0ed68440a6) Class name in _t() call in installer and run text collector (Robbie Averill)
* 2017-09-25 [b8e5a2ce3](https://github.com/silverstripe/silverstripe-framework/commit/b8e5a2ce322eb1f0c7d54111a69a8fdf01dbf9bf) readonly PermissionCheckboxSetField (Mike Cochrane)
* 2017-09-21 [fe4688b93](https://github.com/silverstripe/silverstripe-framework/commit/fe4688b9325d60c92a7e51c6f1344794bb672c5f) gridfield button title alignment (Saophalkun Ponlu)
* 2017-09-20 [f1a12e15b](https://github.com/silverstripe/silverstripe-framework/commit/f1a12e15be6546ebe9a7c3deec17d5bd9e1d65a4) Fix sub-template lookup for includes (Damian Mooyman)
* 2017-09-20 [265f91060](https://github.com/silverstripe/silverstripe-framework/commit/265f91060c2a8da61cb3e3a0de3f2d867809bcda) phpcs error (Christopher Joe)
* 2017-09-19 [f5b97b18](https://github.com/silverstripe/silverstripe-siteconfig/commit/f5b97b18bbdceca88d12d95d6587437f9d98ac8a) Update translation default from "only these people" to "only these groups" to match CMS (Robbie Averill)
* 2017-09-19 [09b3a24f3](https://github.com/silverstripe/silverstripe-framework/commit/09b3a24f30ec7da01a081f6c6aaa7080ddf0248b) Detect, warn, and fix invalid SS_BASE_URL (Damian Mooyman)
* 2017-09-18 [cda78e2d](https://github.com/silverstripe/silverstripe-reports/commit/cda78e2d887de13bb6143fba47a4d6a6153af7df) add space below report filter form (Saophalkun Ponlu)
* 2017-09-15 [68128b46](https://github.com/silverstripe/silverstripe-cms/commit/68128b46c3b5945fd1875f79caa2709fd65912c4) toolbar title layou (Saophalkun Ponlu)
* 2017-09-15 [df957681](https://github.com/silverstripe/silverstripe-siteconfig/commit/df9576814e48e9d492cc069a183a4381c3fb4c27) toolbar title layout (Saophalkun Ponlu)
* 2017-09-15 [5351ba67](https://github.com/silverstripe/silverstripe-reports/commit/5351ba670f64dc1f426420a9d4b7115b6dedd34d) toolbar title layout (Saophalkun Ponlu)
* 2017-09-13 [919831365](https://github.com/silverstripe/silverstripe-framework/commit/919831365846995e42b89de3fbb0920371f36bf0) HTTP Headers are case insensitive (Daniel Hensby)
* 2017-09-13 [f8ef97c16](https://github.com/silverstripe/silverstripe-framework/commit/f8ef97c1672e72508a7db946fac06c01a299e54a) Fix import modal (Damian Mooyman)
* 2017-09-12 [1892a0207](https://github.com/silverstripe/silverstripe-framework/commit/1892a02076b9c1a4deb823577cd6ff869921ad70) Fix gridfield print styles (Damian Mooyman)
* 2017-09-12 [0aac4ddb](https://github.com/silverstripe/silverstripe-cms/commit/0aac4ddb7ecf0f17eda8add235017c10c9f57255) Default LoginForm generated from default_authenticator (Daniel Hensby)
* 2017-09-12 [e15373ba](https://github.com/silverstripe/silverstripe-cms/commit/e15373ba0edbd5d0812b1c2485da57a478b6a635) ed linting errors and tests (Christopher Joe)
* 2017-09-12 [6613826ed](https://github.com/silverstripe/silverstripe-framework/commit/6613826ed8022c6feb112524b7835ea2bee73d74) SSViewer::add_themes() to properly prepend (Andrew Aitken-Fincham)
* 2017-09-12 [2b2cdb4c](https://github.com/silverstripe/silverstripe-cms/commit/2b2cdb4c4418bdc61668fbf2e28d933c93809657) Fix yarn build (Damian Mooyman)
* 2017-09-12 [905c4e04d](https://github.com/silverstripe/silverstripe-framework/commit/905c4e04d55c1dabca47154e4ee0ac15eb28e896) Incorrect path for requirements file (Damian Mooyman)
* 2017-09-12 [12480633b](https://github.com/silverstripe/silverstripe-framework/commit/12480633bfc3976940aba1c708f662a015fddde6) grid field button styles (Saophalkun Ponlu)
* 2017-09-11 [4f3b4f76](https://github.com/silverstripe/silverstripe-cms/commit/4f3b4f762616677cf5c5ca13d2d826c6b1cd769a) Fine-tune button styles (Saophalkun Ponlu)
* 2017-09-11 [d18568c3](https://github.com/silverstripe/silverstripe-cms/commit/d18568c3951051a8fbf4624cd0b758d268efa58c) Ensure client config merging includes existing parent "form" attributes (Robbie Averill)
* 2017-09-07 [49fd3391](https://github.com/silverstripe/silverstripe-cms/commit/49fd3391fec06dbac72a92329e2eae454119c64c) Prevent icons CSS being included twice (Damian Mooyman)
* 2017-09-06 [2dde7771](https://github.com/silverstripe/silverstripe-cms/commit/2dde77713206f6709a5ffa6a5b758a3c1abd7a5f) Add styles for url segment field (Sacha Judd)
* 2017-09-06 [dc240ce7f](https://github.com/silverstripe/silverstripe-framework/commit/dc240ce7f32a398400df541d22d46ebc0d1e1eaa) use correct namespaces for middleware injection (Andrew Aitken-Fincham)
* 2017-09-05 [25380eb45](https://github.com/silverstripe/silverstripe-framework/commit/25380eb45406b417482a03b047a5f337b3c61cbb) permission check for admin role (Christopher Joe)
* 2017-09-05 [3669f30e](https://github.com/silverstripe/silverstripe-cms/commit/3669f30e4eae880e6219d16994992f02707d1e50) Fix race condition with change detection / loading animation (Damian Mooyman)
* 2017-09-05 [2f7f4e73d](https://github.com/silverstripe/silverstripe-framework/commit/2f7f4e73d9490c4fb524a03ef78506ed20a68011) toolbar button margin and spacing (Saophalkun Ponlu)
* 2017-09-04 [4b26ed6a](https://github.com/silverstripe/silverstripe-cms/commit/4b26ed6a838b3c20b75916aa667d9a83a13afc16) Prevent treeview loading repeatedly on each page edit form (Damian Mooyman)
* 2017-09-04 [afda58c51](https://github.com/silverstripe/silverstripe-framework/commit/afda58c515d8caeb90086618b99a437e9d2356ea) add schema to the "auto" parts request (Christopher Joe)
* 2017-09-01 [eaa0a2a4](https://github.com/silverstripe/silverstripe-cms/commit/eaa0a2a4cba9bfe037800fd339d666a133225241) Update unused button classes for url segment field (Sacha Judd)
* 2017-08-31 [acc58c2b6](https://github.com/silverstripe/silverstripe-framework/commit/acc58c2b689f334bf754b23af80a27976f55b216) incorrect $has_one documentation (Matt Peel)
* 2017-08-31 [806ffb934](https://github.com/silverstripe/silverstripe-framework/commit/806ffb934e32644ddefc0dfb470d76218bd39334) Ensure installer.php works nicely with .env files (Damian Mooyman)
* 2017-08-31 [1c321019](https://github.com/silverstripe/silverstripe-cms/commit/1c321019c46538b73c1364388e1b76abd52e1ede) icons in right click menu (Christopher Joe)
* 2017-08-30 [1273059b](https://github.com/silverstripe/silverstripe-cms/commit/1273059b4cf90e444f6352ed32e661b6c58716a6) campaign form validation errors (Damian Mooyman)
* 2017-08-28 [e4b506cbe](https://github.com/silverstripe/silverstripe-framework/commit/e4b506cbe724d0c690b588a7b5846dbff50af967) add combinedFiles to clear logic (Christopher Joe)
* 2017-08-25 [8c15e451c](https://github.com/silverstripe/silverstripe-framework/commit/8c15e451c61a5bb721ccc5bcbd61077b82846039) Removed unnecessary database_is_ready call. (Sam Minnee)
* 2017-08-24 [9350b4a4](https://github.com/silverstripe/silverstripe-cms/commit/9350b4a425ac4ab714eec322972aa44e1131e919) Fix inconsistent breadcrumbs in CMS section (Damian Mooyman)
* 2017-08-24 [d0fd96d4](https://github.com/silverstripe/silverstripe-cms/commit/d0fd96d4e69b7f34e332256d2ff9752d4988f566) Remove entry points to tree in search mode (Saophalkun Ponlu)
* 2017-08-24 [5a9131a11](https://github.com/silverstripe/silverstripe-framework/commit/5a9131a1165ce59b99b62a67fedceca28d381df9) Do not try and access sessions when they are not ready (Robbie Averill)
* 2017-08-24 [c4ff9df1b](https://github.com/silverstripe/silverstripe-framework/commit/c4ff9df1b0b5b837a1f6e57997403ab14a9f2743) Use correct bootstrap class or GridFieldDetailForm delete button (Robbie Averill)
* 2017-08-24 [6efb35fb](https://github.com/silverstripe/silverstripe-cms/commit/6efb35fbcfbfa42ae6c151475165e1ec7809425c) Fix “Show unpublished versions” (#1930) (Damian Mooyman)
* 2017-08-24 [80cf096a6](https://github.com/silverstripe/silverstripe-framework/commit/80cf096a6eb07d620c86eedc76906da7fbd496df) Prioritise SS_BASE_URL over flakey SCRIPT_FILENAME check (Damian Mooyman)
* 2017-08-23 [d03edb20](https://github.com/silverstripe/silverstripe-cms/commit/d03edb208e4f386a6f59e9c1865e32e0231e9d9f) Search in page edit should now redirect to (full) table view (Saophalkun Ponlu)
* 2017-08-23 [1b087221d](https://github.com/silverstripe/silverstripe-framework/commit/1b087221d221523c76755e5a684f5b408c306ef7) Fix BASE_URL on CLI (Damian Mooyman)
* 2017-08-22 [47fced888](https://github.com/silverstripe/silverstripe-framework/commit/47fced88806935a65fb281951f14bc053b49bd97) Capture errors after a reload token redirect to login url (Damian Mooyman)
* 2017-08-21 [fc2a60391](https://github.com/silverstripe/silverstripe-framework/commit/fc2a6039154d6691468b31453f74cb2cf9bc5cc3) Don’t construct extension_instances on objects that never use them (Damian Mooyman)
* 2017-08-21 [c50cd34df](https://github.com/silverstripe/silverstripe-framework/commit/c50cd34df67d81cf048515bf7f9e07f5cf77d3f4) Prevent repeated lookup of obj.dependencies by Injector (Sam Minnee)
* 2017-08-21 [249c7048d](https://github.com/silverstripe/silverstripe-framework/commit/249c7048d9d488fcc7082d2926fe1fe45435fd66) trim accept header parts (Christopher Joe)
* 2017-08-16 [ce5e15df6](https://github.com/silverstripe/silverstripe-framework/commit/ce5e15df6ea37ffc2c43476ecc2ddbb757343c68) Fix issue with multiple editors breaking plugins (Damian Mooyman)
* 2017-08-15 [02cd72074](https://github.com/silverstripe/silverstripe-framework/commit/02cd72074835a61ce9f81db217f8f73d6687e8dd) Remove deprecated assert() usage. (Sam Minnee)
* 2017-08-14 [0926b0451](https://github.com/silverstripe/silverstripe-framework/commit/0926b04512c3ab9fc667d66b60dd7e69847032df) Fix latent bug in DataObject (Sam Minnee)
* 2017-08-14 [d469a2dc](https://github.com/silverstripe/silverstripe-cms/commit/d469a2dc8832d821296bb40767958d8706488bd7) regressions from tinymce upgrade (#1923) (Damian Mooyman)
* 2017-08-08 [1a4a006d0](https://github.com/silverstripe/silverstripe-framework/commit/1a4a006d09e4397c3126fcf32c61692f90834b8a) PDOConnector ssl_cipher bug fixes #7258 (John)
* 2017-08-07 [5d5fac745](https://github.com/silverstripe/silverstripe-framework/commit/5d5fac7450bf6403ad25375ba60d8bc4cbd9938f) Throw exception when "value" is used to define indexes. Update docs. (Robbie Averill)
* 2017-08-07 [c164fcfe5](https://github.com/silverstripe/silverstripe-framework/commit/c164fcfe54dc7f170a617293a4502831ca101f09) reference to IE10 when it should be IE11 (Christopher Joe)
* 2017-08-07 [068156710](https://github.com/silverstripe/silverstripe-framework/commit/06815671023b0e86ff85dfa4513d62f5a37b69a3) Fix flushing on live mode (#7241) (Damian Mooyman)
* 2017-08-06 [f7bebdd8f](https://github.com/silverstripe/silverstripe-framework/commit/f7bebdd8f8ef17a5d3caca717f442cf4206a10cd) Fix install issue with IIS (Damian Mooyman)
* 2017-08-03 [b6a8e4588](https://github.com/silverstripe/silverstripe-framework/commit/b6a8e458882cd8f3d0a7a2e36ffbafc76ea04ffd) Ensure mocked controller has request assigned (Damian Mooyman)
* 2017-08-02 [e64acef53](https://github.com/silverstripe/silverstripe-framework/commit/e64acef53a68fae99978147cfbb2ea8ad33f37b1) Fix invalid i18n yaml (Damian Mooyman)
* 2017-08-02 [841801145](https://github.com/silverstripe/silverstripe-framework/commit/8418011456b12c1f2b5c39ba9f9b1a3ae637037e) linting issues (Damian Mooyman)
* 2017-08-01 [685320450](https://github.com/silverstripe/silverstripe-framework/commit/6853204504e869f525d24be32b66ab0d7e1e9883) Fix ajax loading wait for behat tests (Damian Mooyman)
* 2017-07-31 [424b1c0](https://github.com/silverstripe/silverstripe-installer/commit/424b1c04dd21bcf10d05378d08837dc54e24c251) Include .env.example and .editorconfig in git export (Sam Minnee)
* 2017-07-28 [53a0206b](https://github.com/silverstripe/silverstripe-cms/commit/53a0206b1d1216bde067435d0c58fb905a19fe51) check if parent context is SiteTree instance (Nic Horstmeier)
* 2017-07-28 [980d6b7ef](https://github.com/silverstripe/silverstripe-framework/commit/980d6b7ef77052bbf99158c072cfd36235c7aa8b) ?showqueries=inline failed on PDO databases (fixes #7199) (Loz Calver)
* 2017-07-28 [a85bc86fd](https://github.com/silverstripe/silverstripe-framework/commit/a85bc86fd320aaa3d3cfbcfb8546947d61dbcbc6) behat tree dropdown trigger (Damian Mooyman)
* 2017-07-27 [4e222fc18](https://github.com/silverstripe/silverstripe-framework/commit/4e222fc1896d864c000e547dc162f97614aaf34c) add function for selecting a value in the new tree dropdown in behat using react (Christopher Joe)
* 2017-07-27 [3ef9ca69d](https://github.com/silverstripe/silverstripe-framework/commit/3ef9ca69d1b4d284eabf94ff6044dea3fe7eb430) DBComposite doesn't allow arbitrary property assignment (Aaron Carlino)
* 2017-07-27 [47f24ce05](https://github.com/silverstripe/silverstripe-framework/commit/47f24ce05befd3b97686baafb0386bed22593be8) up test linting (Damian Mooyman)
* 2017-07-24 [980bf83](https://github.com/silverstripe/silverstripe-installer/commit/980bf834b7aee202becec2bbe0cdf854d723f9de) recipe plugin version constraint (Damian Mooyman)
* 2017-07-21 [d49a5f5a](https://github.com/silverstripe/silverstripe-cms/commit/d49a5f5af37819efc71d8eaf99174877ee82fbff) Yaml syntax (Daniel Hensby)
* 2017-07-21 [5bf9ccc23](https://github.com/silverstripe/silverstripe-framework/commit/5bf9ccc235cdce7155a6430ba074f1b425fc11b9) Deprecated yml syntax (Daniel Hensby)
* 2017-07-21 [2385b7385](https://github.com/silverstripe/silverstripe-framework/commit/2385b738550c8d9678c87cc09f2d40a4d8c078c4) fix config rules to match updated `Except` (Damian Mooyman)
* 2017-07-20 [db5f81d3](https://github.com/silverstripe/silverstripe-cms/commit/db5f81d39308fbb79acbd4189049360f60139596) behat tests (Saophalkun Ponlu)
* 2017-07-20 [cc6b4422](https://github.com/silverstripe/silverstripe-cms/commit/cc6b44223ec2e606ccc2fc19b60679c5e9862884) ContentController still using global $project; (Aaron Carlino)
* 2017-07-20 [6fd6a3894](https://github.com/silverstripe/silverstripe-framework/commit/6fd6a38949a7ac524defbc917e7ebcca86e10522) Fix unassigned nestedFrom (Damian Mooyman)
* 2017-07-19 [8aeec9208](https://github.com/silverstripe/silverstripe-framework/commit/8aeec92087d2815b71901652ff1b3c95ef12295f) FulltextSearchable DB engine not set correctly (Daniel Hensby)
* 2017-07-18 [fca3ba73](https://github.com/silverstripe/silverstripe-cms/commit/fca3ba73f52e2712b40538b015ebf250407edbd0) Pages search now defaults to list view (Saophalkun Ponlu)
* 2017-07-18 [ac388a559](https://github.com/silverstripe/silverstripe-framework/commit/ac388a5591bdf38adaa29aedad4e5845831cafd1) Exclude thirdparty dir from code coverage (Robbie Averill)
* 2017-07-18 [a5ca4ecb5](https://github.com/silverstripe/silverstripe-framework/commit/a5ca4ecb596cc5b0d7c706e849a864153854d60f) Log in as someone else returns user back to login screen (Robbie Averill)
* 2017-07-18 [fb6e6162](https://github.com/silverstripe/silverstripe-cms/commit/fb6e6162ca5f9991f536c14824e94339c0349a47) Use better inheritance based logic for deciding which active tab to display in edit page (Robbie Averill)
* 2017-07-17 [e8c77463](https://github.com/silverstripe/silverstripe-cms/commit/e8c77463c53e2329b1875c9c1cde9593538b047d) Use injection for CMSMain in tests (Robbie Averill)
* 2017-07-17 [ba9ad5527](https://github.com/silverstripe/silverstripe-framework/commit/ba9ad55274de9412f0a2112d1f57eda784615c2f) Base URL defaults to a slash in currentURL if not defined already (Robbie Averill)
* 2017-07-17 [da4e46e4d](https://github.com/silverstripe/silverstripe-framework/commit/da4e46e4de6142c463e7bf2c039b64f5ffe5e0da) Use merge and set instead of update for config calls (Robbie Averill)
* 2017-07-17 [c3cda42b](https://github.com/silverstripe/silverstripe-cms/commit/c3cda42b92729c448e81e0cb0f7fc9be00a6bc2a) Use merge or set instead of update for config calls (Robbie Averill)
* 2017-07-17 [ea4181166](https://github.com/silverstripe/silverstripe-framework/commit/ea4181166fa023e88c96c1311b972886a0636313) Ensure phpdbg calls are registered by SilverStripe core as a CLI call (Robbie Averill)
* 2017-07-16 [dd4d5740](https://github.com/silverstripe/silverstripe-cms/commit/dd4d5740b81ead5ece1042139799714ad831ff8f) Ensure tab states are reflected when switching on page edit screen (Robbie Averill)
* 2017-07-16 [85c79d4e](https://github.com/silverstripe/silverstripe-reports/commit/85c79d4e662706760bfa2c05e661d6194fcf420e) Re-enable code coverage runs with phpdbg (Robbie Averill)
* 2017-07-16 [8b12e97d7](https://github.com/silverstripe/silverstripe-framework/commit/8b12e97d7a6da351740ae4ec5db5b2372e255601) Enable code coverage builds with phpdbg and 7.1.7 (Robbie Averill)
* 2017-07-15 [1a38feff2](https://github.com/silverstripe/silverstripe-framework/commit/1a38feff2259c35f7a24af98d58bedaef8a59a80) Version provider uses early bound config getter, move LeftAndMain config to admin module (Robbie Averill)
* 2017-07-14 [844462108](https://github.com/silverstripe/silverstripe-framework/commit/844462108ec4398cf176b174f54986e842611dc3) diff reference (Damian Mooyman)
* 2017-07-13 [b726d64d1](https://github.com/silverstripe/silverstripe-framework/commit/b726d64d1d1516b4a22c173f924e08a1fb358f6d) SearchEngine to use quoted table names (martimiz)
* 2017-07-13 [b16896f22](https://github.com/silverstripe/silverstripe-framework/commit/b16896f22bc70457bf53d48ac71c30e40c2ad660) Ignore exceptions thrown when deleting test databases (Robbie Averill)
* 2017-07-13 [5fcd7d084](https://github.com/silverstripe/silverstripe-framework/commit/5fcd7d084fb6c4af92873af470ccf3032fbbf212) Fix registered shutdown function not handling responsibility for outputting redirection response (Damian Mooyman)
* 2017-07-13 [16b66440c](https://github.com/silverstripe/silverstripe-framework/commit/16b66440c22595ebd1db7e57af342b38ef2e84ef) Incorrect module delimiter (Aaron Carlino)
* 2017-07-13 [4898c0a4a](https://github.com/silverstripe/silverstripe-framework/commit/4898c0a4ad8402632748ebdbe388a3051501f316) Incorrect module delimited (Damian Mooyman)
* 2017-07-13 [3cf9910f](https://github.com/silverstripe/silverstripe-cms/commit/3cf9910fe4a4957c331e0c1ce86f48ea42c5d04c) Incorrect module delimited (Damian Mooyman)
* 2017-07-06 [85359ad59](https://github.com/silverstripe/silverstripe-framework/commit/85359ad59eedd6a5bc9a9b25aa702e4bc78d4817) Ensure that installer can create an initial admin account (Damian Mooyman)
* 2017-07-05 [55dc3724d](https://github.com/silverstripe/silverstripe-framework/commit/55dc3724dbfbf286dc2e04232afb71cbb87f6cb3) Invalid composer.json (Damian Mooyman)
* 2017-07-04 [c836a2e2d](https://github.com/silverstripe/silverstripe-framework/commit/c836a2e2d288d10e601a29003bcc30a9fb7a3d94) Module resource regex does not allow ports (Aaron Carlino)
* 2017-07-04 [f14e6bae2](https://github.com/silverstripe/silverstripe-framework/commit/f14e6bae2c353468f1e9f0dfb3e2af64b3061402) numeric field for null values (John Milmine)
* 2017-07-04 [4b2320583](https://github.com/silverstripe/silverstripe-framework/commit/4b23205838a8bb16d64a3e44a069731b235ca6ca) unnamespaced i18n keys (Damian Mooyman)
* 2017-07-03 [fdbd6015](https://github.com/silverstripe/silverstripe-reports/commit/fdbd6015d820a2c866051a3cbc5698eb94591ab8) dependencies (Damian Mooyman)
* 2017-07-03 [8bb325f3](https://github.com/silverstripe/silverstripe-cms/commit/8bb325f3cac0f14400d49811d94675c8bc640507) upgrade paths (Damian Mooyman)
* 2017-07-03 [63ba09276](https://github.com/silverstripe/silverstripe-framework/commit/63ba092765be08303ce6708bc5d20179de8038dc) Add namespaces in markdown docs (#7088) (Saophalkun Ponlu)
* 2017-07-03 [f65e3627d](https://github.com/silverstripe/silverstripe-framework/commit/f65e3627dcdab37073a4c136169f9840ae911654) Implement or exclude all pending upgrader deltas (Damian Mooyman)
* 2017-06-30 [363394769](https://github.com/silverstripe/silverstripe-framework/commit/3633947699e0a6130e21b94f001b01c8705982a4) Fix broken installer assets and session crash (Damian Mooyman)
* 2017-06-30 [99f9d4a2](https://github.com/silverstripe/silverstripe-cms/commit/99f9d4a2d3f9ef6f8eac477044c9eb21979263a7) assertions (Damian Mooyman)
* 2017-06-29 [0200e2b62](https://github.com/silverstripe/silverstripe-framework/commit/0200e2b62aee0366f513403477408fd7c9d43303) Fix travis artifacts paths (Damian Mooyman)
* 2017-06-29 [061393a09](https://github.com/silverstripe/silverstripe-framework/commit/061393a0980784d0b6e1e3eee9add906bd390f8f) enable ?flush rather than just ?flush=1 (Christopher Joe)
* 2017-06-29 [522af3f2](https://github.com/silverstripe/silverstripe-cms/commit/522af3f29db2cf6fa573aa4546ba66be4b97015e) Test updates to comply with https://github.com/silverstripe/silverstripe-framework/pull/7083 (Sam Minnee)
* 2017-06-29 [2c8790ca7](https://github.com/silverstripe/silverstripe-framework/commit/2c8790ca7d03461c682083cd651e6c2a2020b013) DataObject::get_one() misses return null, not false (Sam Minnee)
* 2017-06-28 [b2f3b218a](https://github.com/silverstripe/silverstripe-framework/commit/b2f3b218a330a343a2377d246db87d3a2f4fbb61) Fix incorrect $database autoinit (Damian Mooyman)
* 2017-06-28 [8078ee08f](https://github.com/silverstripe/silverstripe-framework/commit/8078ee08f2726677c52860ad154d1f3c1adf3208) Fix folder urls getting mtime querystring appended (Damian Mooyman)
* 2017-06-27 [b8750d9](https://github.com/silverstripe/silverstripe-installer/commit/b8750d9399112de32265463a808a0b27e226b2d1) Delete Page_Controller from SS4 compat branch (Robbie Averill)
* 2017-06-27 [af1654ed](https://github.com/silverstripe/silverstripe-cms/commit/af1654eda3dd9306a9828e5e5c7ac784a8ec47c6) Don’t click hidden button (Damian Mooyman)
* 2017-06-27 [ab0b3d8a](https://github.com/silverstripe/silverstripe-reports/commit/ab0b3d8a2f2d500513e7dd2e1be796119a3d99df) namespaces in docs (Saophalkun Ponlu)
* 2017-06-26 [b34519e7](https://github.com/silverstripe/silverstripe-cms/commit/b34519e7e8bdc29195cdff7a40e2594a1663a9ed) insert link modal to work with new injector API (#1860) (Chris Joe)
* 2017-06-25 [3c35d25a6](https://github.com/silverstripe/silverstripe-framework/commit/3c35d25a646d187c40878e40fbf558922e4dd9ae) Allow DB::setConfig() in _config.php (Sam Minnee)
* 2017-06-25 [67887febc](https://github.com/silverstripe/silverstripe-framework/commit/67887febc55a05e4c3613b3428d295b3e2eff5af) - session now uses request (Sam Minnee)
* 2017-06-23 [95a266c6b](https://github.com/silverstripe/silverstripe-framework/commit/95a266c6b97c82588a3342eebfac61fc23932891) Add tests for middleware (Sam Minnee)
* 2017-06-22 [ad347af7](https://github.com/silverstripe/silverstripe-cms/commit/ad347af76f825ca9fd8af2973db6502025068a64) linter (Ingo Schommer)
* 2017-06-22 [fa568e333](https://github.com/silverstripe/silverstripe-framework/commit/fa568e333e31f075fda57e4bb6da01bf7a19141f) ed linting errors (Ingo Schommer)
* 2017-06-22 [c2ad41ef](https://github.com/silverstripe/silverstripe-cms/commit/c2ad41ef1b13da2b29ed6d3b26aa7a092bfecd9c) Allow RedirectorPage to have non-redirected actions, move redirection to index (Robbie Averill)
* 2017-06-22 [8d23cfc2](https://github.com/silverstripe/silverstripe-cms/commit/8d23cfc2aaa2b57fa8687062ce546095a3a5e2a3) Ensure LoginForm on ContentController can load the member authenticator correctly (Robbie Averill)
* 2017-06-22 [12c2edc1d](https://github.com/silverstripe/silverstripe-framework/commit/12c2edc1d573452451f46c660704dde2e335afc0) DeprecationTest (Ingo Schommer)
* 2017-06-22 [ad54e7eb3](https://github.com/silverstripe/silverstripe-framework/commit/ad54e7eb30be0632c00c81feaa33b61f79f0327d) ImportButton not opening the modal (Will Rossiter)
* 2017-06-22 [fb09e0b65](https://github.com/silverstripe/silverstripe-framework/commit/fb09e0b65fe983397fa57046816e3d210f4930d9) merge error (Ingo Schommer)
* 2017-06-22 [e592bed3e](https://github.com/silverstripe/silverstripe-framework/commit/e592bed3e5287b766f646a0b9db226d1731f3b96) ed merge error (Ingo Schommer)
* 2017-06-21 [8cebb275](https://github.com/silverstripe/silverstripe-cms/commit/8cebb2758d5e49e22ebf780ecfd73264ec1026ce) behat issues (Damian Mooyman)
* 2017-06-21 [b05dbc91](https://github.com/silverstripe/silverstripe-siteconfig/commit/b05dbc91f0b23da3166f3cb23c4c435e918325ff) module tests (Damian Mooyman)
* 2017-06-21 [288de2eb1](https://github.com/silverstripe/silverstripe-framework/commit/288de2eb14f38effdd90428eaf9903b8ada83b68) Add flag on form whether to notify user when there's unsaved changes (Saophalkun Ponlu)
* 2017-06-21 [c2c75aa9](https://github.com/silverstripe/silverstripe-cms/commit/c2c75aa9e3a897bc810d348f29459cff891de8bf) and upgrade all tests (Damian Mooyman)
* 2017-06-21 [7a7e8003](https://github.com/silverstripe/silverstripe-siteconfig/commit/7a7e80030f9ca32afd1e79aacc6eea732e00487c) Use double escapes backslashes in translation string (Robbie Averill)
* 2017-06-15 [54879402c](https://github.com/silverstripe/silverstripe-framework/commit/54879402ce74e609f8f129a38ded715a2635ff87) Removed reserved / removed / invalid country codes (Damian Mooyman)
* 2017-06-15 [957d238ca](https://github.com/silverstripe/silverstripe-framework/commit/957d238caa1a3ee63bc3645e8c3868cfd65b2b34) Remove reference to removed method parseIndexSpec (Damian Mooyman)
* 2017-06-15 [fdbe38d4](https://github.com/silverstripe/silverstripe-cms/commit/fdbe38d44483d3b990e447efaa3d3407433fe04b) SS4 Right click, add page fails (Antony Thorpe)
* 2017-06-11 [0dcfa5fa9](https://github.com/silverstripe/silverstripe-framework/commit/0dcfa5fa9df60f159380d4ddb5471171518c951c) CMSSecurity doesn't have Authenticators assigned. (Damian Mooyman)
* 2017-06-10 [3fe837dad](https://github.com/silverstripe/silverstripe-framework/commit/3fe837dad7d887f52096ba1adb26102f3a16754c) for CMS Authenticator. Should only apply to CMSSecurity (Simon Erkelens)
* 2017-06-09 [10196e4f](https://github.com/silverstripe/silverstripe-cms/commit/10196e4f75f99b01752a625d62c4ad2e674a77ff) composer requirements (Christopher Joe)
* 2017-06-02 [d12c986dd](https://github.com/silverstripe/silverstripe-framework/commit/d12c986dd544877bb566bcdf4920e4df466d37e0) es printing from crashing (Christopher Joe)
* 2017-06-02 [e267d29b9](https://github.com/silverstripe/silverstripe-framework/commit/e267d29b9ad1ecb192e6b6c54ca674ff4e651cef) Consistent return values for first and last methods (Saophalkun Ponlu)
* 2017-05-30 [13ee3148d](https://github.com/silverstripe/silverstripe-framework/commit/13ee3148d95f88190df6dfbefa0bc24eabd45388) Bracket should implement TestOnly (Daniel Hensby)
* 2017-05-30 [3c7c6399](https://github.com/silverstripe/silverstripe-cms/commit/3c7c639901d8854b3dfa3c972308b4d59d4708ed) remove temp external entries (Christopher Joe)
* 2017-05-29 [acb74a857](https://github.com/silverstripe/silverstripe-framework/commit/acb74a8577dc02a1e25ac9572d4d3a7157732480) $class variable from being clobbered (Nick)
* 2017-05-29 [db59e51c4](https://github.com/silverstripe/silverstripe-framework/commit/db59e51c4a3342ec3a8ffa3f0070e64da436d172) es a bug with split file names during CSV import (Colin Tucker)
* 2017-05-25 [9c63a8c8c](https://github.com/silverstripe/silverstripe-framework/commit/9c63a8c8ce2910b7690c3cfb0ed70f95d8a1d205) Fix race conditions in DatetimeFieldTest (Damian Mooyman)
* 2017-05-24 [0cd40ca6e](https://github.com/silverstripe/silverstripe-framework/commit/0cd40ca6e50cecf582eda952d3a7a0a3788a5397) Fix minor accessors of legacy ->class property (Damian Mooyman)
* 2017-05-22 [09164e7e2](https://github.com/silverstripe/silverstripe-framework/commit/09164e7e2a32accd56ade5e1552fe839c55ebcb8) Better error checking for non-writable temp paths (Sam Minnee)
* 2017-05-22 [40d9bbfd6](https://github.com/silverstripe/silverstripe-framework/commit/40d9bbfd69dc5e6c83616d2dca3359a57a011f54) Don’t assume posix_getpwuid is available. (Sam Minnee)
* 2017-05-22 [f7e7fa584](https://github.com/silverstripe/silverstripe-framework/commit/f7e7fa5847beb995c43364971b042348d5df0108) linting issues (Damian Mooyman)
* 2017-05-19 [c034ead6](https://github.com/silverstripe/silverstripe-cms/commit/c034ead6df933665247539e8a9d8b36492859fa9) beforeUpdateCMSFields added to ErrorPage and VirtualPage (Franco Springveldt)
* 2017-05-19 [a29f4f88](https://github.com/silverstripe/silverstripe-siteconfig/commit/a29f4f88df92cbfaf5f8814d5c6e22d74caa1ffe) Remove legacy translation behaviour in template (Robbie Averill)
* 2017-05-19 [31578d477](https://github.com/silverstripe/silverstripe-framework/commit/31578d4771eec4b5f4ecb5d8e1103bb9b21adcd9) Parent treedropdownfield for an orphaned page is broken (Mike Cochrane)
* 2017-05-19 [fc036208](https://github.com/silverstripe/silverstripe-cms/commit/fc0362087e42d66d7d4a138c9fd52be0be0d9f50) Remove legacy sprintf style translations in favour of placeholders (Robbie Averill)
* 2017-05-17 [dddf88278](https://github.com/silverstripe/silverstripe-framework/commit/dddf88278c48eaa2e67442d1087fbed76fd4d69b) a typo in comment (Nick)
* 2017-05-17 [0534a5ec0](https://github.com/silverstripe/silverstripe-framework/commit/0534a5ec0c79ff4ee3412eaf58d476614763179e) TreeDowndropField copying (Christopher Joe)
* 2017-05-16 [eebae1f7](https://github.com/silverstripe/silverstripe-cms/commit/eebae1f76684f2dbcea9ce2ca8dd9c9229d0789c) Fix insert link behat command (Damian Mooyman)
* 2017-05-16 [7a7e8e5f9](https://github.com/silverstripe/silverstripe-framework/commit/7a7e8e5f94f68dd6e25a8880ea6257670efc4f12) Fix artifacts index.html download path (Damian Mooyman)
* 2017-05-16 [6c5e0f82](https://github.com/silverstripe/silverstripe-cms/commit/6c5e0f829a9b5771585fc076265d324ea2e721c7) Ensure logs are saved to artifacts (Damian Mooyman)
* 2017-05-16 [0b24e02d](https://github.com/silverstripe/silverstripe-cms/commit/0b24e02db462fbca2cb68ac88dbdcb35b46d1116) Fix missing path to travis-upload-artifacts.php (Damian Mooyman)
* 2017-05-16 [287ad35f0](https://github.com/silverstripe/silverstripe-framework/commit/287ad35f0dca7e1b53219b58b39eb4221abb0e78) change API to hasEmptyDefault() to be inline with SingleSelectField (Christopher Joe)
* 2017-05-15 [1ec7c4e52](https://github.com/silverstripe/silverstripe-framework/commit/1ec7c4e523f1f40dbdb9f8e865daf4a40bbf8fb2) lint error (Saophalkun Ponlu)
* 2017-05-15 [3927e7e24](https://github.com/silverstripe/silverstripe-framework/commit/3927e7e24868f7feba42669613161f7a456e48be) added cache key for TreeDropdownField cache (Christopher Joe)
* 2017-05-12 [6939841e4](https://github.com/silverstripe/silverstripe-framework/commit/6939841e47666080785b8513e20c5569358ce6ef) update ss template FormActions to be closer to React's implementation (Christopher Joe)
* 2017-05-12 [e2b7ca2e](https://github.com/silverstripe/silverstripe-cms/commit/e2b7ca2e796a56a5ac541820a768c23eee51ddf6) for save and publish buttons shrinking (Christopher Joe)
* 2017-05-12 [de079154](https://github.com/silverstripe/silverstripe-cms/commit/de079154f4e82ca0eaf4ddc42272a6e92e35db9e) Webpack dev config was overwriting plugins rather than concatenating (Aaron Carlino)
* 2017-05-11 [43a122cc3](https://github.com/silverstripe/silverstripe-framework/commit/43a122cc36a5d12f31758afc05e679bf39e842b7) for meta closing tags (Ralph Slooten)
* 2017-05-09 [4373bdb99](https://github.com/silverstripe/silverstripe-framework/commit/4373bdb991c9b2f57084e8c867b5bf5037940d6b) Prevent infinite loop (Mike Cochrane)
* 2017-05-09 [17ddfab87](https://github.com/silverstripe/silverstripe-framework/commit/17ddfab87749b13e3bac249ed39442cea5a79beb) Test form factories use the new interface (Christopher Joe)
* 2017-05-09 [f3b442e9](https://github.com/silverstripe/silverstripe-cms/commit/f3b442e9b4e52da63bdd527cd44a10bdedf38268) behat tests for insert link to work with react implementation (Christopher Joe)
* 2017-05-05 [11b8926c](https://github.com/silverstripe/silverstripe-cms/commit/11b8926c1a5956959e8d44be9d1293429fb63858) up - prefer-stable necessary to avoid armageddon (Sam Minnee)
* 2017-05-05 [6ddd7534](https://github.com/silverstripe/silverstripe-cms/commit/6ddd753471184299648ce299667b744759633b0e) up - fix behat.paths.base reference (Sam Minnee)
* 2017-05-04 [e2271d1b](https://github.com/silverstripe/silverstripe-cms/commit/e2271d1b0a2d4771b15b52d0dbd239cb01acb7ac) up - make behat work (Sam Minnee)
* 2017-05-04 [c1b3d87b](https://github.com/silverstripe/silverstripe-cms/commit/c1b3d87b58dd15301c589b34db50fb06ffc3ea5c) up - don't need to explicitly include testsession (Sam Minnee)
* 2017-05-04 [a05958b3e](https://github.com/silverstripe/silverstripe-framework/commit/a05958b3ea7511553f94527a28e6b7ce9b64a668) i18n test fixtures stricter for Symfony3 (Sam Minnee)
* 2017-05-04 [4332d2fa](https://github.com/silverstripe/silverstripe-reports/commit/4332d2fa8e8914aa999950d7699cfbd4d245e5c3) Drop php5.5, add php7.1, simplify build (Sam Minnee)
* 2017-05-04 [c58dc97d3](https://github.com/silverstripe/silverstripe-framework/commit/c58dc97d3927c41ab4681d2d148830eabca5a65d) optional $id param because of how methodSchema passes a parameter (Christopher Joe)
* 2017-05-04 [1f8de20ce](https://github.com/silverstripe/silverstripe-framework/commit/1f8de20ce755e75b3cd54fe2663e6630f6470f37) FormSchemaTest.php linting issues (Damian Mooyman)
* 2017-05-03 [0c52ea067](https://github.com/silverstripe/silverstripe-framework/commit/0c52ea067c65aa1f0d5064e1fadd5b81ff9ee659) Fix incorrect text collection of __CLASS__ following an Name::class constant (#6868) (Damian Mooyman)
* 2017-05-02 [8b9f41d4f](https://github.com/silverstripe/silverstripe-framework/commit/8b9f41d4f444b281aa86402c00e8babd68a035a3) Fix ApcuCache and MemCache namespace (Damian Mooyman)
* 2017-04-30 [8dd3f4ce1](https://github.com/silverstripe/silverstripe-framework/commit/8dd3f4ce1de9f014c617e6a20b331bb81979aff9) template localisation namespaces (#6852) (Damian Mooyman)
* 2017-04-29 [391901df8](https://github.com/silverstripe/silverstripe-framework/commit/391901df87b94c2727f4f5a291a258d94193d38c) quote outside the if statement. (Simon Erkelens)
* 2017-04-28 [9147fa44](https://github.com/silverstripe/silverstripe-cms/commit/9147fa44ba7d64351fe5781aa3c1134af4eae3e1) source file encoding (Damian Mooyman)
* 2017-04-28 [699d5d6a4](https://github.com/silverstripe/silverstripe-framework/commit/699d5d6a42a8485f35567a9abb7f630e82210699) i18nTextCollector handling of special string characters (Damian Mooyman)
* 2017-04-27 [daed727ac](https://github.com/silverstripe/silverstripe-framework/commit/daed727accb205c5a8fc46026c03539707aa2d2c) ed form schema validation (Ingo Schommer)
* 2017-04-27 [a2ee6a76a](https://github.com/silverstripe/silverstripe-framework/commit/a2ee6a76a0dfed5bb738852c932d04a91545614c) ed formschematest (Ingo Schommer)
* 2017-04-27 [3a372a1f4](https://github.com/silverstripe/silverstripe-framework/commit/3a372a1f41a9a1612beb83bd628282aba550391b) IntlLocales::validate when lang and region are the same e.g. de_DE (Robbie Averill)
* 2017-04-27 [c95c6c466](https://github.com/silverstripe/silverstripe-framework/commit/c95c6c466f70e48f9c53e37ce4c7ef6ff9f4b502) Regression from 3.x: allow $required_extensions to have arguments (Robbie Averill)
* 2017-04-27 [2ae8fde2d](https://github.com/silverstripe/silverstripe-framework/commit/2ae8fde2d352882fd90c7ea1a5ac7aac3405aab8) tests (Damian Mooyman)
* 2017-04-27 [cbe534c67](https://github.com/silverstripe/silverstripe-framework/commit/cbe534c67523bb5e0bdb019e353a1efa6c35b345) ed component capitalisation (Ingo Schommer)
* 2017-04-26 [1f74221c2](https://github.com/silverstripe/silverstripe-framework/commit/1f74221c2d603bf4010d954e6746865b759979ce) unit tests (Christopher Joe)
* 2017-04-26 [1ec2abe75](https://github.com/silverstripe/silverstripe-framework/commit/1ec2abe75f9f3541fa8866361e20a3d939249358) ed timezone and normalised ISO handling (Ingo Schommer)
* 2017-04-24 [4c772c80c](https://github.com/silverstripe/silverstripe-framework/commit/4c772c80c3bff06e46bcafdece10e63a03b2e61c) Show detailed errors on CLI for live environments (Sam Minnee)
* 2017-04-21 [cf2b0417](https://github.com/silverstripe/silverstripe-cms/commit/cf2b0417cb3d6fb5ad7c3fd6913b85f4eb488947) coding conventions (Ingo Schommer)
* 2017-04-21 [4b19987a](https://github.com/silverstripe/silverstripe-cms/commit/4b19987ad211fb1dc2eeff807dd76c52a4c97784) tweak visibility around the slideDown/slideUp animation (Christopher Joe)
* 2017-04-21 [3b69a471](https://github.com/silverstripe/silverstripe-cms/commit/3b69a4715843d9836285d624187a9c8588ea9c5e) Hidden listbox #1785 (Ishan Jayamanne)
* 2017-04-20 [19974fe1](https://github.com/silverstripe/silverstripe-reports/commit/19974fe1f2a94272dd6a16f3397d0e4222bcecf9) PHPDoc for Report::add_excluded_reports method. (Garion Herman)
* 2017-04-20 [0d5e84d0b](https://github.com/silverstripe/silverstripe-framework/commit/0d5e84d0b8a58bf35496fa8dde4216b64569a358) Add PHP extension requirements to composer. (Sam Minnee)
* 2017-04-20 [dba1f61f1](https://github.com/silverstripe/silverstripe-framework/commit/dba1f61f133f22cba1ecd1fe07f4838a61a1486d) tests related to date time (Saophalkun Ponlu)
* 2017-04-20 [403f4db14](https://github.com/silverstripe/silverstripe-framework/commit/403f4db14d2892d0af7c791e4bd6c64c60952a3e) change titles to return schema values in schema (Christopher Joe)
* 2017-04-19 [9d7eef7cf](https://github.com/silverstripe/silverstripe-framework/commit/9d7eef7cf3de62c5b1c50ee74b54c3ac521c3a2b) datetime field validation for the refactor (Saophalkun Ponlu)
* 2017-04-13 [8318e20c2](https://github.com/silverstripe/silverstripe-framework/commit/8318e20c25cf17ed5c48d1e3b409dd3715431eb8) close button placement (Christopher Joe)
* 2017-04-12 [8999f70ac](https://github.com/silverstripe/silverstripe-framework/commit/8999f70acc0fa9853c94786da8c3b5c713f8a359) ing broken search in SecurityAdmin Groups field (Sean Harvey)
* 2017-04-11 [03a2a907](https://github.com/silverstripe/silverstripe-cms/commit/03a2a907cea7d857a210c1b974df8d4fe61c2153) whitespace in templates causing double arrows (Damian Mooyman)
* 2017-04-11 [9cad8ba0](https://github.com/silverstripe/silverstripe-cms/commit/9cad8ba01b4e8ebfca229ad53a4e2853f2eb5598) ed linting (Ingo Schommer)
* 2017-04-11 [1ca51eb57](https://github.com/silverstripe/silverstripe-framework/commit/1ca51eb57a933964e9640c02697a78c068a8c462) Ensure that mysite test boostrap configuration is loaded after core and before the database connection (Robbie Averill)
* 2017-04-05 [f9f61cb](https://github.com/silverstripe/silverstripe-installer/commit/f9f61cbce286b8685ccd6f81a7d2a3c4a4478b2d) Fix cow release config (Damian Mooyman)
* 2017-04-05 [8cbdfa456](https://github.com/silverstripe/silverstripe-framework/commit/8cbdfa4561036a63e8b93fa7ddbd485188b40c3c) invalid json file (Damian Mooyman)
* 2017-04-05 [e12a2709](https://github.com/silverstripe/silverstripe-cms/commit/e12a2709d0dc92f684f5056d20f9bc0981736cb4) syntax error in selector (Christopher Joe)
* 2017-04-03 [e3fbd1dca](https://github.com/silverstripe/silverstripe-framework/commit/e3fbd1dcac3ab911542f82772bd39ee2d76851ff) ed coding conventions (Ingo Schommer)
* 2017-04-03 [e9693467b](https://github.com/silverstripe/silverstripe-framework/commit/e9693467bf341b66bfd45fe3fb633ef108eecced) ed tests (Ingo Schommer)
* 2017-04-03 [a70de91b3](https://github.com/silverstripe/silverstripe-framework/commit/a70de91b330cc87305327b038dcd1760faffcb76) DatetimeFieldTest (Ingo Schommer)
* 2017-04-03 [bb880a325](https://github.com/silverstripe/silverstripe-framework/commit/bb880a32576451e6b0b35b47961cc521f22ea338) Clarify PHP 5.6 support for 4.x (Sam Minnee)
* 2017-03-30 [3b89d704](https://github.com/silverstripe/silverstripe-siteconfig/commit/3b89d704f201849f92e49baa0ed95d0408ea7660) Fix test run, remove 5.5, add 7.1 (Sam Minnee)
* 2017-03-30 [227ba8dcc](https://github.com/silverstripe/silverstripe-framework/commit/227ba8dcc44e71a30f607d3e9e63bfe467ab4e50) illegal_extensions in unit tests not being removed (Mike Cochrane)
* 2017-03-29 [9cdcb339e](https://github.com/silverstripe/silverstripe-framework/commit/9cdcb339e952b6567acd2d34c143ce9c67594f7f) Fix test breakage in most recent change. (Sam Minnee)
* 2017-03-29 [b1b0c6af](https://github.com/silverstripe/silverstripe-cms/commit/b1b0c6af6316aa02ef1111fb9cf29da319f70c8c) Ensure all CMS forms include full ID / VersionID in path (Damian Mooyman)
* 2017-03-28 [538a5838](https://github.com/silverstripe/silverstripe-siteconfig/commit/538a58381f259831143d5425a81baa9d105972ab) Rename license file to match module standard. (Sam Minnee)
* 2017-03-28 [59a9ff84](https://github.com/silverstripe/silverstripe-reports/commit/59a9ff845915e4b6335b79ef2a1f8645df96ed17) Rename license file to match module standard. (Sam Minnee)
* 2017-03-28 [ae5b5a95](https://github.com/silverstripe/silverstripe-cms/commit/ae5b5a95ce26065bc9b310fb958656d22f71ccd8) Rename license file to match module standard. (Sam Minnee)
* 2017-03-28 [0828b03dc](https://github.com/silverstripe/silverstripe-framework/commit/0828b03dc627985d6892578f57d02dc4be5e087d) Add separate license file to match module standard. (Sam Minnee)
* 2017-03-28 [6396310](https://github.com/silverstripe/silverstripe-installer/commit/639631013fa03f208cd80ffcaa5d3c74d27d5e48) Split licence into separate file to match standard. (Sam Minnee)
* 2017-03-28 [ede549a6e](https://github.com/silverstripe/silverstripe-framework/commit/ede549a6edf8a1d10ae54eb75020b521b400d0cc) illegalExtensions are optional, requiredExtensions are mandatory with useful error messages. (Damian Mooyman)
* 2017-03-28 [bd14f6db9](https://github.com/silverstripe/silverstripe-framework/commit/bd14f6db9e574a6f57440e45ad7f327291b1a743) Update config API reference in FulltextSearchable and use namespaced imports for class names (Robbie Averill)
* 2017-03-28 [4a8bd1a07](https://github.com/silverstripe/silverstripe-framework/commit/4a8bd1a07d1cd260b25efb9f6394b10d4bfcddcf) Remove campaign related classes from upgrade map - moved to campaign-admin (Robbie Averill)
* 2017-03-28 [59a5eb430](https://github.com/silverstripe/silverstripe-framework/commit/59a5eb430844132da3116ced5d89007e6980b2e4) Don't mistake \ for _ in dev/build (Sam Minnee)
* 2017-03-24 [6b4a72dee](https://github.com/silverstripe/silverstripe-framework/commit/6b4a72dee83deed73c39d9b9edc52fd1babd42fe) ing deprecated PHPUnit APIs (Daniel Hensby)
* 2017-03-20 [e4c68bc2b](https://github.com/silverstripe/silverstripe-framework/commit/e4c68bc2bfd3ef24a9f4320ec61a9e5888a95da2) and test pluralisation usages (Damian Mooyman)
* 2017-03-16 [53b98284f](https://github.com/silverstripe/silverstripe-framework/commit/53b98284fe5f9ee9b3b4e013eef66d21c170cce5) Remove undefined var from installer (Daniel Hensby)
* 2017-03-16 [66b1c72d4](https://github.com/silverstripe/silverstripe-framework/commit/66b1c72d4adf64ce0a18c6f31651c107033abb93) dev CI builds (Damian Mooyman)
* 2017-03-16 [61e5b38](https://github.com/silverstripe/silverstripe-installer/commit/61e5b3836e3cc29057201491a9c4c0d3e10759cf) dev dependencies for root project (Damian Mooyman)
* 2017-03-14 [3ec5a5b03](https://github.com/silverstripe/silverstripe-framework/commit/3ec5a5b0359622719c2993db83623b62d0f0e133) ed upgrading path references (Ingo Schommer)
* 2017-03-13 [bd409bfd](https://github.com/silverstripe/silverstripe-cms/commit/bd409bfd3092189c5133b059f04074891d8726c1) Fix PHPUNIT_COVERAGE_TEST by moving to php 5 build (Damian Mooyman)
* 2017-03-10 [d3177ef94](https://github.com/silverstripe/silverstripe-framework/commit/d3177ef94c8f01fb07bd71e706631fa9515545bf) work-around for form property on formfields not working (Damian Mooyman)
* 2017-03-09 [cb955f08](https://github.com/silverstripe/silverstripe-cms/commit/cb955f08f7230939c38c1980de8810fe10e205a6) non_virtual_fields being ignored (Mike Cochrane)
* 2017-03-08 [09d7493a4](https://github.com/silverstripe/silverstripe-framework/commit/09d7493a4fec79df75acad2b3ad2f121e15405c6) webpack location for font files (Damian Mooyman)
* 2017-03-07 [9c9443602](https://github.com/silverstripe/silverstripe-framework/commit/9c9443602df8847c3926eb6e0bcc66373e54b9f3) Installer no longer causes recursion in yml config (Daniel Hensby)
* 2017-03-03 [263e747d0](https://github.com/silverstripe/silverstripe-framework/commit/263e747d071a6f11814a9be9ede890cc83c792e0) for APCu cache otherwise you get 'Cache key must be string, "boolean" given' (Lee Bradley)
* 2017-03-02 [abe967f23](https://github.com/silverstripe/silverstripe-framework/commit/abe967f23560094068eccea4ecab84605627cd98) /pass arguments directly (not in array) (Andrew Aitken-Fincham)
* 2017-03-02 [b6d9b34ce](https://github.com/silverstripe/silverstripe-framework/commit/b6d9b34ce4c00798295a9fe219f388da8a0198c2) Mark $instance as internal to prevent being saved to config (Damian Mooyman)
* 2017-02-28 [6ed98a3a9](https://github.com/silverstripe/silverstripe-framework/commit/6ed98a3a949ac99f17931e154557d9f7ee462fa9) Prevent obsolete class cache breaking autoload (Damian Mooyman)
* 2017-02-28 [dfe25c27](https://github.com/silverstripe/silverstripe-cms/commit/dfe25c27f0f2758e3533f5d382f1ea69573fd71f) Fix allowedChildren() and link tracking (Damian Mooyman)
* 2017-02-28 [ac685e4](https://github.com/silverstripe/silverstripe-installer/commit/ac685e4d38d0e970fa8729e2438dcfd76f9e7996) remove the wildcard After condition in config.yml (Christopher Joe)
* 2017-02-28 [2fafff08](https://github.com/silverstripe/silverstripe-cms/commit/2fafff084f425a7d47197f2fed72064cc424ee2e) history comparison fields will now show diff properly, rather than escaped html diff (Christopher Joe)
* 2017-02-27 [0c47bc3e](https://github.com/silverstripe/silverstripe-cms/commit/0c47bc3e62cee59ea7b6c86baa8b0d1ae3e33ddf) viewer and editor groups to only show when the last option is selected (Christopher Joe)
* 2017-02-27 [badf7d3a7](https://github.com/silverstripe/silverstripe-framework/commit/badf7d3a73af24696b4e3bf77fca33c2fdce297b) Add quotes to constants in YAML to ensure syntax validity (Robbie Averill)
* 2017-02-27 [45a7fbd38](https://github.com/silverstripe/silverstripe-framework/commit/45a7fbd387b033609b1cab36af0f5b5c925fcd27) Confirm delete actions in React GridFields (e.g. Campaign admin) (Robbie Averill)
* 2017-02-27 [e64e8d151](https://github.com/silverstripe/silverstripe-framework/commit/e64e8d151f2f50b4b665959e9ec588e7ed96208f) Remove duplicated tab "active" state in Security admin (Robbie Averill)
* 2017-02-27 [cbc5aca26](https://github.com/silverstripe/silverstripe-framework/commit/cbc5aca26a8740b850e54d5d8aa6a97ce9454c09) add fieldgroup specific flexbox styles to the inner fields (Christopher Joe)
* 2017-02-27 [ff47bc03d](https://github.com/silverstripe/silverstripe-framework/commit/ff47bc03d74a6b3a483467ac47163add13f55c02) Remove reference to $_SERVER within FakeController (Damian Mooyman)
* 2017-02-27 [695194546](https://github.com/silverstripe/silverstripe-framework/commit/695194546db8a55d78d9ea3bb37a5d102e9670fe) Ensure test fixture uses test module manifest (Damian Mooyman)
* 2017-02-26 [b7123abf2](https://github.com/silverstripe/silverstripe-framework/commit/b7123abf22121767ee2015dbc6d0d0c2e4bc4f56) prevent unsaved changes alert when clicking a save button (Christopher Joe)
* 2017-02-26 [423b1d4ee](https://github.com/silverstripe/silverstripe-framework/commit/423b1d4eee0334747176b9c1c7778f35248fbbf8) Fix modeladmin scrollable height cropping pagination (Damian Mooyman)
* 2017-02-26 [c9e2c249](https://github.com/silverstripe/silverstripe-reports/commit/c9e2c249c2f4fd31ac2f47a7dfa9df6370ba17c3) Allow pre-release versions of SS4. (Sam Minnee)
* 2017-02-26 [240c3638](https://github.com/silverstripe/silverstripe-siteconfig/commit/240c3638b334d95f9e7ca4fc208ecdda6ebc9d46) Allow pre-release versions of SS4. (Sam Minnee)
* 2017-02-26 [6befcee3](https://github.com/silverstripe/silverstripe-cms/commit/6befcee3c5be1a327700910968ab3ac104bc73b0) issue with CI installing non-dev dependencies (Damian Mooyman)
* 2017-02-26 [3983b4d1b](https://github.com/silverstripe/silverstripe-framework/commit/3983b4d1b13d39f2ed43465f98568cd070df0e49) cache used in ModuleManifest (Damian Mooyman)
* 2017-02-23 [8b5fcd333](https://github.com/silverstripe/silverstripe-framework/commit/8b5fcd3336f30e981a82c8b93f8de07429205fca) download file link works with the new TreeDropdown (Christopher Joe)
* 2017-02-21 [036119426](https://github.com/silverstripe/silverstripe-framework/commit/0361194267a5f2228f03224136e30f6daf481eff) es for issues introduced in 5e19d905 (Lee Bradley)
* 2017-02-17 [f6f19908d](https://github.com/silverstripe/silverstripe-framework/commit/f6f19908dea76cae453769f9d3636d81a0cd1805) for bug introduced in #5e19d905 (Lee Bradley)
* 2017-02-15 [a9f2e9e73](https://github.com/silverstripe/silverstripe-framework/commit/a9f2e9e73d168935f99695d82486cd9ad3e27842) ed DateFieldSeparated docs (Ingo Schommer)
* 2017-02-07 [b8a0944bd](https://github.com/silverstripe/silverstripe-framework/commit/b8a0944bda00e572e0e62369cabf9f9ab9be15ea) /load fields if lazy ones exists (Andrew Aitken-Fincham)
* 2017-02-04 [e307f067e](https://github.com/silverstripe/silverstripe-framework/commit/e307f067edfa741e1387eabc40da308a8b08614a) Replace deprecated %s placeholders in translations with named placeholders (Robbie Averill)
* 2017-02-02 [f63b741e4](https://github.com/silverstripe/silverstripe-framework/commit/f63b741e465fe39a80f0215405fe9ee5f4108b63) Improve DebugView’s display of non-header information. (Sam Minnee)
* 2017-01-30 [d8fe6d02](https://github.com/silverstripe/silverstripe-cms/commit/d8fe6d020ff8513dd4465cbd33f5478d8ed448e2) Remap redirector and virtual page class names during build (Robbie Averill)
* 2017-01-29 [232b218df](https://github.com/silverstripe/silverstripe-framework/commit/232b218dfbfa183c74e83491c360e6a8bd9677e6) Ensure that Zend_ classes can still be autoloaded (Robbie Averill)
* 2017-01-25 [7b26b4a1f](https://github.com/silverstripe/silverstripe-framework/commit/7b26b4a1f3e2c20df902893a87511fcbd1fd87be) Ensure that tests run with flush=1 clean Flushables (Damian Mooyman)
* 2017-01-25 [732b1f0a](https://github.com/silverstripe/silverstripe-cms/commit/732b1f0a5794506ca3f7993678aeb0082f2bb93f) Fix reference to Install_deleteinstallfiles (Damian Mooyman)
* 2017-01-24 [5d6c90361](https://github.com/silverstripe/silverstripe-framework/commit/5d6c90361c680f3d0e05bc1c06a31f0538465c18) Ensure root path of any local adapter is safely created and mapped from symlink (Damian Mooyman)
* 2017-01-24 [00de0989](https://github.com/silverstripe/silverstripe-cms/commit/00de0989f4fb8c2fbfa483baad067fbc59e89e64) Javascript .addAttr() doesn't exist (Mike Cochrane)
* 2017-01-23 [3c8a56f9](https://github.com/silverstripe/silverstripe-reports/commit/3c8a56f904d180e7a0b6ca7e9cd53d836c28dec0) Fix missing default on _t(‘GridField.Filter’) (Damian Mooyman)
* 2017-01-19 [5e19d905f](https://github.com/silverstripe/silverstripe-framework/commit/5e19d905f8e946a10a634ce1ed6d26c6f1e5f4ff) loading indicator position (fixes #6153) (Zac Pullar-Strecker)
* 2017-01-18 [b0512abf](https://github.com/silverstripe/silverstripe-cms/commit/b0512abfb63508d126bd3a5f3d566c58369f5bae) es load indicator position (fixes #1625) (Reid Hokai)
* 2017-01-17 [d192a4f86](https://github.com/silverstripe/silverstripe-framework/commit/d192a4f86fd4bc8e23e8492cff99d229776f7e3b) Fix root folder getFilename() returning incorrect path (#6510) (Damian Mooyman)
* 2017-01-16 [7ad02787e](https://github.com/silverstripe/silverstripe-framework/commit/7ad02787e8cc65d54c8bd117ed099974ae658ca1) Regression in CompositeField displaying fields in their holders (Robbie Averill)
* 2017-01-16 [09f967bf6](https://github.com/silverstripe/silverstripe-framework/commit/09f967bf67e04910435aebea2b697b5d20d9c306) Prevent type-loss of graphql variables by using JSON.stringify (Damian Mooyman)
* 2017-01-16 [96bd4edce](https://github.com/silverstripe/silverstripe-framework/commit/96bd4edce5157dbcedc47415d22b58e1d6e0424d) things not aligning well in the toolbar (Christopher Joe)
* 2017-01-13 [ccf349938](https://github.com/silverstripe/silverstripe-framework/commit/ccf3499380eccefe91791abc45f36d9b2a5740f0) fix: calling full method name to pass attributes (Neil Gladwin)
* 2017-01-13 [c707a9120](https://github.com/silverstripe/silverstripe-framework/commit/c707a9120637caeb79e501fa9676f5d4ed07b8d5) shift graphql to use post data due to php-5.6.10+ deprecation message (Christopher Joe)
* 2017-01-12 [30d125f14](https://github.com/silverstripe/silverstripe-framework/commit/30d125f144910817aaffdca1b8a561d322ae9c28) MySQLQuery::seek() failed to return a row (Loz Calver)
* 2017-01-12 [a4bc9f49d](https://github.com/silverstripe/silverstripe-framework/commit/a4bc9f49d10daf302be336da826cabb798a3bac1) Regression in using template_main to render the Security area (Robbie Averill)
* 2017-01-11 [54c2afd01](https://github.com/silverstripe/silverstripe-framework/commit/54c2afd0191b8598a76fd0500e0b9a5e0d1d846e) regression issues in campaigns (Christopher Joe)
* 2017-01-11 [2d1d2aea7](https://github.com/silverstripe/silverstripe-framework/commit/2d1d2aea796ff73457a6cf3331f3f255e899a0aa) Remap versioned ClassNames during build process (Robbie Averill)
* 2017-01-11 [773c848c](https://github.com/silverstripe/silverstripe-cms/commit/773c848c0f81e88f7156d609483386cf8fb1b39b) Separate PageController fixture into its own file (PSR-2 compat) (Robbie Averill)
* 2017-01-11 [6fc50cae5](https://github.com/silverstripe/silverstripe-framework/commit/6fc50cae5c2794e576392eec8c0a3b34a80d9af3) Refactor TestMailer to better be base class (Sam Minnee)
* 2017-01-11 [4e257435d](https://github.com/silverstripe/silverstripe-framework/commit/4e257435df513d587a524b352faf52bb3092925f) Shift react breadcrumbs to use flexbox for placement (Christopher Joe)
* 2017-01-10 [62eb0e614](https://github.com/silverstripe/silverstripe-framework/commit/62eb0e61422de7e59c335eed4c789587e225f13c) Rename template parser from .inc to .peg so PHP doesn't include it automatically (Robbie Averill)
* 2017-01-10 [ae2861d48](https://github.com/silverstripe/silverstripe-framework/commit/ae2861d487a905ca687f8cca61df66141fcbf4b3) Fix frameworkpath (Damian Mooyman)
* 2017-01-10 [4ea614f04](https://github.com/silverstripe/silverstripe-framework/commit/4ea614f04cc80b0b01039303e674ba8b9dac16f9) linting issues (Damian Mooyman)
* 2017-01-10 [63cb343cf](https://github.com/silverstripe/silverstripe-framework/commit/63cb343cf5e47829685622b32b1ed58e4c0809cb) Fix modal animations (Damian Mooyman)
* 2017-01-10 [8badad90d](https://github.com/silverstripe/silverstripe-framework/commit/8badad90df2177453f5e872ee476308611c49515) Make sure image backends implement method getImageResource (Daniel Hensby)
* 2017-01-10 [b62f9b60a](https://github.com/silverstripe/silverstripe-framework/commit/b62f9b60a02ae8823226101f6659eedb4926366d) Fix broken member / group import (Damian Mooyman)
* 2017-01-10 [9959ef63](https://github.com/silverstripe/silverstripe-cms/commit/9959ef63f276ca9cc4ed93c76a355baa21f2ae93) double-escaped ampersands in CMSMain_TreeView and CMSMain::LinkPageAdd (Colin Tucker)
* 2017-01-09 [87fbd5f78](https://github.com/silverstripe/silverstripe-framework/commit/87fbd5f7816ce0924edf544bd3d165d21888c88f) for v4: Admin returns "Too many pages" for subpages below top level (#6464) (Lee Bradley)
* 2017-01-09 [cdd86aaf5](https://github.com/silverstripe/silverstripe-framework/commit/cdd86aaf53caeb4717f351b3f1caecb8c261cc45) breadcrumbs search results text sometimes disappearing (Christopher Joe)
* 2017-01-05 [cf3a74ec](https://github.com/silverstripe/silverstripe-cms/commit/cf3a74ec571717252596449c3c31e7d9a31d0521) Remove deprecation tests, bump deprecation version to 5.0 (Robbie Averill)
* 2016-12-29 [6fb49224b](https://github.com/silverstripe/silverstripe-framework/commit/6fb49224b979f33a5b74c79d83fd918e4dfa6e33) SSViewer should resolve templates with or without underscores (Robbie Averill)
* 2016-12-29 [d41ebbaaf](https://github.com/silverstripe/silverstripe-framework/commit/d41ebbaaff405c6b970e1b43bd00102c7462f9f9) Correct namespaes for test classes in upgrade.yml (Robbie Averill)
* 2016-12-29 [6f4162ed7](https://github.com/silverstripe/silverstripe-framework/commit/6f4162ed74f6e7e07242a1b378d9f1142a93097b) PHP 7.x should use random_bytes for entropy ahead of deprecated mcrypt lib (Robbie Averill)
* 2016-12-29 [7448622a1](https://github.com/silverstripe/silverstripe-framework/commit/7448622a1a19889a34864b2d6fcf91c46f957302) Replace ini casting to int with explicit split and cast for PHP 7.1. Add tests. (Robbie Averill)
* 2016-12-28 [fc45e9e0](https://github.com/silverstripe/silverstripe-cms/commit/fc45e9e0abcf72b5e1204663533825c1ef38e80e) ing tests (Daniel Hensby)
* 2016-12-23 [947c1fe1](https://github.com/silverstripe/silverstripe-cms/commit/947c1fe156d0c8646bd7bc9735020986cfd59767) broken unit test (Christopher Joe)
* 2016-12-23 [8118448a9](https://github.com/silverstripe/silverstripe-framework/commit/8118448a9c12578f3f940da4daae56f53f678112) PHP linting issues (Christopher Joe)
* 2016-12-20 [2d5aa7ce0](https://github.com/silverstripe/silverstripe-framework/commit/2d5aa7ce0e4b4344172901d6990ca75156f83ed2) Campaign List toggle (Fixes #6067) (Will Rossiter)
* 2016-12-20 [7c76d2cb0](https://github.com/silverstripe/silverstripe-framework/commit/7c76d2cb09bf4135f89cd284076ae1742b7d79d3) show formatting help not appearing (#6423) (Will Rossiter)
* 2016-12-19 [8ad030bab](https://github.com/silverstripe/silverstripe-framework/commit/8ad030baba0ce7c13bf09dfba31907bd7599cd98) Make GridField filter button selector more specific (Robbie Averill)
* 2016-12-19 [fae005554](https://github.com/silverstripe/silverstripe-framework/commit/fae0055544d524c8d3ca32f7f892c15205bd235a) Fix missing TRAVIS_NODE_VERSION (#6419) (Damian Mooyman)
* 2016-12-16 [eb0a27406](https://github.com/silverstripe/silverstripe-framework/commit/eb0a27406998cb8b5af988cf5f0ccd1fb84d8ba5) Update links to docs.ss for default template (Robbie Averill)
* 2016-12-09 [fcf1eedee](https://github.com/silverstripe/silverstripe-framework/commit/fcf1eedee475ae9dfca80cfeb7937692f3828806) getting fileSize shouldn't give a "NaN" (Christopher Joe)
* 2016-12-04 [fdb1bed0](https://github.com/silverstripe/silverstripe-siteconfig/commit/fdb1bed018e1eac792cb26aefb8f55a06200edff) Fix crash when installed with framework-only (Damian Mooyman)
* 2016-11-13 [00c9c2c77](https://github.com/silverstripe/silverstripe-framework/commit/00c9c2c775aa1041f2ba3756c2a8220e14cc942c) Fix DataObject::dbObject assigning incorrect table to DBField instance (Damian Mooyman)
* 2016-11-13 [22cb3d0d7](https://github.com/silverstripe/silverstripe-framework/commit/22cb3d0d74feae7f3470e469a8e0a54d79b2776e) various ORM test issues (Damian Mooyman)
* 2016-11-10 [804ff7c2](https://github.com/silverstripe/silverstripe-reports/commit/804ff7c247b69bf590a4f2e6c38acc5aa1e84e8f) Fixing test errors (Daniel Hensby)
* 2016-11-08 [9dbb5c0a1](https://github.com/silverstripe/silverstripe-framework/commit/9dbb5c0a1a2199fe1bcc0650db1eeecbe9bf97d8) safari tabs active border (Paul Clarke)
* 2016-11-07 [aca9deed2](https://github.com/silverstripe/silverstripe-framework/commit/aca9deed23295472445b5c9b5a94ac866408aebb) for safari scroll in campaign area (Paul Clarke)
* 2016-11-07 [962519c6](https://github.com/silverstripe/silverstripe-cms/commit/962519c6a715e71c9d08a7f9d5280232bba4adce) for safari height in main container – shows action bar (Paul Clarke)
* 2016-11-04 [f18ef75c3](https://github.com/silverstripe/silverstripe-framework/commit/f18ef75c3dbc843ad13e2769663eedb7d0f2593f) Fixed crash when BASE_PATH is set by assuming the location of Constants.php (UndefinedOffset)
* 2016-11-04 [8bd5349e](https://github.com/silverstripe/silverstripe-cms/commit/8bd5349e4204540431471eda07be10b35105c3e2) Fixed issue on windows where the CMS_DIR constant would be set containing a backslash causing a crash in the cms (UndefinedOffset)
* 2016-11-04 [c5fb7127](https://github.com/silverstripe/silverstripe-cms/commit/c5fb7127ac7a0d1705ea850661f2b51476317a35) Page History 'Comparing versions' banner missing (Mike Cochrane)
* 2016-11-03 [cc451d9ca](https://github.com/silverstripe/silverstripe-framework/commit/cc451d9ca43fc47e077ba45fdcb6c9f7cc223662) Fix crash when re-ordering pages (#6281) (Damian Mooyman)
* 2016-11-03 [eefecc21f](https://github.com/silverstripe/silverstripe-framework/commit/eefecc21fc79a383c9b354cc5cb46e114810d4ff) Fix incorrect include paths in tests and railsyml (#6279) (Damian Mooyman)
* 2016-11-02 [4ee78fc29](https://github.com/silverstripe/silverstripe-framework/commit/4ee78fc29d93793bbe3d16f7aeea602d7394809c) Restore travis artifacts (#6277) (Damian Mooyman)
* 2016-11-02 [3449d5df0](https://github.com/silverstripe/silverstripe-framework/commit/3449d5df0f4dcfce785e6ee070252eed652445e1) Fix broken promise handling (Damian Mooyman)
* 2016-11-02 [0901de299](https://github.com/silverstripe/silverstripe-framework/commit/0901de2995686a315a279969d85e1743763b708e) Fix php schema generation (Christopher Joe)
* 2016-11-02 [019e99dd4](https://github.com/silverstripe/silverstripe-framework/commit/019e99dd4dbcf957b457db8385b47d8a2a7562c5) Fix regressions from src folder creation (#6272) (Damian Mooyman)
* 2016-11-01 [51a9fdf](https://github.com/silverstripe/silverstripe-installer/commit/51a9fdf5d1e3e41974e31b9a40716912f8161edc) Fix test listener path (Damian Mooyman)
* 2016-11-01 [6da36a9ed](https://github.com/silverstripe/silverstripe-framework/commit/6da36a9ed102080a3b6957b86f7554492b5a6129) some issues with tests (Damian Mooyman)
* 2016-11-01 [c0c219e17](https://github.com/silverstripe/silverstripe-framework/commit/c0c219e178c13b2a6978656995014ead759403ca) invalid files_path (Damian Mooyman)
* 2016-11-01 [38fdafb47](https://github.com/silverstripe/silverstripe-framework/commit/38fdafb474e8204077849e83267ee3308b701afe) tinymce breaking in non-typical install location (Damian Mooyman)
* 2016-10-31 [81087ce15](https://github.com/silverstripe/silverstripe-framework/commit/81087ce15c6c6c94d482903820b63cdc1e7c397c) restore CMS build as required in framework tests (Damian Mooyman)
* 2016-10-30 [4cc6cc315](https://github.com/silverstripe/silverstripe-framework/commit/4cc6cc3151973ec77082df8864dc7178b17a7d47) position of back button on empty preview within campaigns (Paul Clarke)
* 2016-10-30 [17ef686f](https://github.com/silverstripe/silverstripe-cms/commit/17ef686f61bc6bc48941b4ba108c897180131fc8) for History versions extending outside collapsed panel (Paul Clarke)
* 2016-10-28 [bb2cb3d48](https://github.com/silverstripe/silverstripe-framework/commit/bb2cb3d487643a671efde3ed2b5d1f7e7cdc5dcc) webpack css config, removes duplicate css files that were generated (Christopher Joe)
* 2016-10-28 [7d18cda7](https://github.com/silverstripe/silverstripe-cms/commit/7d18cda7eed7d94f46f3a24e3066d589d6423b85) Test fixes needed for the new simplified test run structure. (Sam Minnee)
* 2016-10-28 [eef14c1a](https://github.com/silverstripe/silverstripe-cms/commit/eef14c1afc52af0db740e11342985fb9adaf4b96) Fix behat tests. (Sam Minnee)
* 2016-10-28 [a5d3dccd3](https://github.com/silverstripe/silverstripe-framework/commit/a5d3dccd37d7bb69ae6535112e04c5ecc35b59a2) for preview being under toolbar (Paul Clarke)
* 2016-10-28 [d7ed308e1](https://github.com/silverstripe/silverstripe-framework/commit/d7ed308e17192b9df0ed250ade63a19dcc97d7b7) Fix minor html encoding issue in SecurityAdmin (#6240) (Damian Mooyman)
* 2016-10-28 [1df533298](https://github.com/silverstripe/silverstripe-framework/commit/1df533298d17a48689f6280727a6d251046caa35) abstract HTMLEditorConfig instantiates (#6244) (Michael Strong)
* 2016-10-27 [d0619c1f](https://github.com/silverstripe/silverstripe-cms/commit/d0619c1f0f97253770b53d3e749855ab912c4f75) for double scroll in history area (Paul Clarke)
* 2016-10-27 [e386c6a15](https://github.com/silverstripe/silverstripe-framework/commit/e386c6a1534f1184bbf9480e67294eb910a1fa5c) Refactor bootstrap.php to allow for code sharing with cms bootstrap (Damian Mooyman)
* 2016-10-27 [c4d748cb](https://github.com/silverstripe/silverstripe-cms/commit/c4d748cb7d7cfdc89abeab59514c968b32f3e3c3) Fix firefox compatibility (Damian Mooyman)
* 2016-10-26 [02bac8c4b](https://github.com/silverstripe/silverstripe-framework/commit/02bac8c4bc591329e4a3b2451e8bc3f985423454) Fix missing loading overlay (Damian Mooyman)
* 2016-10-26 [42096bb41](https://github.com/silverstripe/silverstripe-framework/commit/42096bb41b6a634a03772c2f280ffbf84d11e1f4) Prevent pagination wrapping (Damian Mooyman)
* 2016-10-26 [f7fd4ffae](https://github.com/silverstripe/silverstripe-framework/commit/f7fd4ffae14eb1e8417e61f0920d78d08ecb5683) Fix incorrect change detection on checkbox fields (Damian Mooyman)
* 2016-10-26 [4bf4fca4](https://github.com/silverstripe/silverstripe-cms/commit/4bf4fca416b1aedbc41c7fac6f37e673473b2021) Prevent archived pages from having add to campaign action (Damian Mooyman)
* 2016-10-26 [040ae2e6a](https://github.com/silverstripe/silverstripe-framework/commit/040ae2e6a30f30c5277a9d572ee50ce7e5b53cbb) Fix clicking "No items found" from causing ajax error (Damian Mooyman)
* 2016-10-26 [513c7aebc](https://github.com/silverstripe/silverstripe-framework/commit/513c7aebc79b3406c21e6741bcb4408077a9f8ac) HtmlEditorField.js indentation (Damian Mooyman)
* 2016-10-26 [015411307](https://github.com/silverstripe/silverstripe-framework/commit/015411307d7e9a6479914cfb8832da558188c4af) Require php7 support. (Sam Minnee)
* 2016-10-26 [424008cf](https://github.com/silverstripe/silverstripe-cms/commit/424008cff47ab35b00f7b9850a5f381540b29836) Fix installer for 4.0 (#1644) (Damian Mooyman)
* 2016-10-26 [c80417a94](https://github.com/silverstripe/silverstripe-framework/commit/c80417a949c7f2821ab4ce1f76ccbc5b6649fcaf) Fix ViewableData::__isset() for getXXX() getters. (Sam Minnee)
* 2016-10-26 [7b44fc7bc](https://github.com/silverstripe/silverstripe-framework/commit/7b44fc7bce54fc6dca9161dda7d3def25a1be23e) Fix SSViewerTest in PHP7 (Sam Minnee)
* 2016-10-26 [e5550dd6](https://github.com/silverstripe/silverstripe-cms/commit/e5550dd68022641b3e50edfd18f7b91ae751ec9e) Fix search not respecting view mode (Damian Mooyman)
* 2016-10-26 [a0d31e86d](https://github.com/silverstripe/silverstripe-framework/commit/a0d31e86d6427bfa7acf3863c3cbcf1d98ba78f2) helperPath in _register_database.php (David Alexander)
* 2016-10-25 [75b18509](https://github.com/silverstripe/silverstripe-cms/commit/75b185092e86b80bf6751f6f769368c1f89f6c90) Remove reference to Object class. (#1634) (Sam Minnée)
* 2016-10-24 [d946a3b2](https://github.com/silverstripe/silverstripe-cms/commit/d946a3b240f99b856cc4a14eeecbaa3c5fd2f01e) Allow CMS_DIR at the root. (Sam Minnee)
* 2016-10-24 [e83f3962a](https://github.com/silverstripe/silverstripe-framework/commit/e83f3962a1c6d3f16cb66f70187f8297059a316f) Prevent intermittent "Element is not currently visible and so may not be interacted with" (Damian Mooyman)
* 2016-10-17 [84c0df3db](https://github.com/silverstripe/silverstripe-framework/commit/84c0df3db0578ea726314733c3b91ae0080f98d8) double forward slash link in campaign admin (Christopher Joe)
* 2016-10-13 [0ebde90dd](https://github.com/silverstripe/silverstripe-framework/commit/0ebde90dd040c77eea2adddc231f79a58bf631f5) flexbox 'fill-height' overflowing container (Loz Calver)
* 2016-10-12 [5df58057](https://github.com/silverstripe/silverstripe-cms/commit/5df580578a064d3955baf53681d7149563ff147c) double nested alert message (Christopher Joe)
* 2016-10-11 [72fd3b949](https://github.com/silverstripe/silverstripe-framework/commit/72fd3b949e447fccf3bc817b1ae655c1b134e671) linting issues (Damian Mooyman)
* 2016-10-11 [5a5d62fa2](https://github.com/silverstripe/silverstripe-framework/commit/5a5d62fa272823cb164a98fd85e2ef8905648e6e) profile layout (Christopher Joe)
* 2016-10-11 [20cee7358](https://github.com/silverstripe/silverstripe-framework/commit/20cee735832060e192cf7d0c328d0241a91fdb7f) pages background (Damian Mooyman)
* 2016-10-11 [7b36df286](https://github.com/silverstripe/silverstripe-framework/commit/7b36df286ec395f07fef45c490516c31e33fb9b0) split mode disappearing as an option (Christopher Joe)
* 2016-10-11 [26e0ff806](https://github.com/silverstripe/silverstripe-framework/commit/26e0ff806618fbf5ce387511284701c591d378bc) Fix installer for 4.0 (Damian Mooyman)
* 2016-10-10 [712849c7](https://github.com/silverstripe/silverstripe-cms/commit/712849c732d3e0998a35f492c73eaf8137630b20) page form layout (Christopher Joe)
* 2016-10-09 [7acb3b5fc](https://github.com/silverstripe/silverstripe-framework/commit/7acb3b5fc25b1e9e6a9e4c7d66ce4eb0bcd005d4) selected view mode not reflected on button (Christopher Joe)
* 2016-10-07 [89150c48e](https://github.com/silverstripe/silverstripe-framework/commit/89150c48e7d111278ac2286efb33bfb01e2d9cc3) preview in pages section (Christopher Joe)
* 2016-10-06 [21dc23868](https://github.com/silverstripe/silverstripe-framework/commit/21dc238685537b9ce05d7791587f90ce59f54ef4) ed classes that weren't matching icon (Christopher Joe)
* 2016-10-02 [ebbb0258d](https://github.com/silverstripe/silverstripe-framework/commit/ebbb0258ddf544d50132c87385823f9837d88b73) linting issue (Damian Mooyman)
* 2016-09-30 [963445e74](https://github.com/silverstripe/silverstripe-framework/commit/963445e74373e33d22a5864f36aa456c4d0e47b7) tab link on top panel changes even when "cancel to browse" was selected (Christopher Joe)
* 2016-09-30 [dd7d1d26a](https://github.com/silverstripe/silverstripe-framework/commit/dd7d1d26af073a39f91543995b0ab0b9c15d15d5) Prevent missing records crashing ChangeSetItem (Damian Mooyman)
* 2016-09-29 [30d161625](https://github.com/silverstripe/silverstripe-framework/commit/30d161625ffeb3c29310db4a62e1de55b6fef3b1) unmock qs module, Backend-test refactored to not time out on error (Christopher Joe)
* 2016-09-27 [fe0ca63c](https://github.com/silverstripe/silverstripe-reports/commit/fe0ca63c7a7bed3977ef89733f9da9ebff457409) Remove referencies to Object::$class (Sam Minnee)
* 2016-09-27 [11888a00](https://github.com/silverstripe/silverstripe-cms/commit/11888a006ad9a978dea0cf7083dcac1886263a24) Remove references to Object::$class (Sam Minnee)
* 2016-09-26 [ad79b5c88](https://github.com/silverstripe/silverstripe-framework/commit/ad79b5c88c6919b70d422b6dec6e91eab52db97c) ing bad folder caseing (Daniel Hensby)
* 2016-09-26 [ce91c3820](https://github.com/silverstripe/silverstripe-framework/commit/ce91c3820e090da11b9ca79157a437929cc78816) IX: Fix regression causing the admin to crash on windows due to FRAMEWORK_DIR being prefixed by a backslash (UndefinedOffset)
* 2016-09-26 [9cb33ea5b](https://github.com/silverstripe/silverstripe-framework/commit/9cb33ea5bfd7cdc7befe59eb21bc324961b6f93f) ed @covers namespaces (Ingo Schommer)
* 2016-09-23 [cbe0ac850](https://github.com/silverstripe/silverstripe-framework/commit/cbe0ac8507f94ea3e35680a97f44b58a296e168e) Fix invalid import form requirements (#6071) (Damian Mooyman)
* 2016-09-23 [ffe85db3](https://github.com/silverstripe/silverstripe-cms/commit/ffe85db33fbdacda117619c077b93118b6eabd35) Fix incorrect search form (Damian Mooyman)
* 2016-09-22 [c52adad1f](https://github.com/silverstripe/silverstripe-framework/commit/c52adad1fec6ad5fcb4a99623fbc73d033688517) Graceful degradation if obsolete classnames in ChangeSetItem (fixes #6065) (Sam Minnee)
* 2016-09-22 [aa7a9565c](https://github.com/silverstripe/silverstripe-framework/commit/aa7a9565ce237c75e538690fa8efa74d136b1d63) Fix incorrect ssviewertest path (#6060) (Damian Mooyman)
* 2016-09-22 [4301fa8](https://github.com/silverstripe/silverstripe-installer/commit/4301fa850d38cca76c0e0a73e85080b7a002bca7) Fix incorrect backslash escaping in htaccess template (#140) (Damian Mooyman)
* 2016-09-22 [65ff0a4d3](https://github.com/silverstripe/silverstripe-framework/commit/65ff0a4d38d2a276ff785d542785781288d8111b) Fix incorrect backslash escaping in htaccess template (Damian Mooyman)
* 2016-09-22 [4b2c6b05](https://github.com/silverstripe/silverstripe-cms/commit/4b2c6b05035de2b309ebd2fa4136aff7e2e7e85a) Break dist javascript and onto newlines. (Ingo Schommer)
* 2016-09-22 [9a9cd97bc](https://github.com/silverstripe/silverstripe-framework/commit/9a9cd97bc36a55b30798bfa7c9fecbe5ae6ccf89) Fix invalid file uploads not being validated (Damian Mooyman)
* 2016-09-21 [c24201b5f](https://github.com/silverstripe/silverstripe-framework/commit/c24201b5f391ef251921895dccdf069f32817477) Break dist javascript and onto newlines. (Sam Minnee)
* 2016-09-21 [51ef36963](https://github.com/silverstripe/silverstripe-framework/commit/51ef369630f9436e853c6d3896b4a183204f7ad4) stringify api call body to work for IE10 (#6032) (Chris Joe)
* 2016-09-20 [4d52d655f](https://github.com/silverstripe/silverstripe-framework/commit/4d52d655fdec88205b78b9ba233a6be7f2e20ed4) for spacing of sitetree panel, reportAdmin, and toggle on Member details page (#5955) (Paul)
* 2016-09-20 [2e054af7b](https://github.com/silverstripe/silverstripe-framework/commit/2e054af7b1cdd8c647d88cfb0c452b683257c068) Throw more helpful error if tests are run badly. (Sam Minnee)
* 2016-09-20 [3ea23ce2b](https://github.com/silverstripe/silverstripe-framework/commit/3ea23ce2b7ab877a279e8b03deb307ea5c39a69b) Make PR builds work. (Sam Minnee)
* 2016-09-20 [53f251e4](https://github.com/silverstripe/silverstripe-siteconfig/commit/53f251e42e44bfd154b2974a0b54e69f4ea1bbcc) fix incorrect CMSTabSet reference (Damian Mooyman)
* 2016-09-20 [18939157](https://github.com/silverstripe/silverstripe-cms/commit/18939157f0e595217556c9dfe86d68b6b1cd989b) Fix pages level up link (Damian Mooyman)
* 2016-09-19 [ef88619d2](https://github.com/silverstripe/silverstripe-framework/commit/ef88619d2fa31e832e7474bd6e0dc5cfcc45437d) Fix error in campaign area (Damian Mooyman)
* 2016-09-19 [82e72d062](https://github.com/silverstripe/silverstripe-framework/commit/82e72d062f99880c0b3dc74cf8c3384c430d4afd) prevent form data / validation persisting in state when using form schema (Damian Mooyman)
* 2016-09-17 [b61c5a56d](https://github.com/silverstripe/silverstripe-framework/commit/b61c5a56de334d8f60b9e2b0992431c311262fbc) sass-lint styleguide fixes (Sam Minnee)
* 2016-09-15 [30174db45](https://github.com/silverstripe/silverstripe-framework/commit/30174db4594d81ddb01bbcdb42769e1f266ca0be) i18n JS regression about locale selection (Ingo Schommer)
* 2016-09-15 [cd3ae42c](https://github.com/silverstripe/silverstripe-cms/commit/cd3ae42c1df97719590bc145383eda64c0c7fbf3) ed jquery.js path (Ingo Schommer)
* 2016-09-14 [5415afe8b](https://github.com/silverstripe/silverstripe-framework/commit/5415afe8bf0a1d5ade9a78be071e4e39692bc2a7) ed react-bootstrap tabs warnings (Ingo Schommer)
* 2016-09-14 [abaebbe1d](https://github.com/silverstripe/silverstripe-framework/commit/abaebbe1d791634f50edd9c15ef6f50a67cec2d5) Manually fix issue in jquery-ui 1.9 (Damian Mooyman)
* 2016-09-12 [61d7c3af2](https://github.com/silverstripe/silverstripe-framework/commit/61d7c3af28d7b657721bb39c7c9632169ec97497) Fix tests when running directly from framework. (Sam Minnee)
* 2016-09-12 [6b640f81f](https://github.com/silverstripe/silverstripe-framework/commit/6b640f81f2ed4ffdbac6036f5fb099a2c7f47e51) Don’t double-include composer autoloader (Sam Minnee)
* 2016-09-12 [93a0122c0](https://github.com/silverstripe/silverstripe-framework/commit/93a0122c0f61b487cf0cc9d010913e3cdf655597) Don’t treat URLs as root relative when FRAMEWORK_DIR = “” (Sam Minnee)
* 2016-09-10 [701c700d4](https://github.com/silverstripe/silverstripe-framework/commit/701c700d4c132dca835ed624d81fb2bd423957e4) ed UploadField JS dependencies (Ingo Schommer)
* 2016-09-10 [68c6137f2](https://github.com/silverstripe/silverstripe-framework/commit/68c6137f293efc5ab0f1562031913254dc8f58bd) GroupedDropdownField include namespace (Ingo Schommer)
* 2016-09-09 [5a786624a](https://github.com/silverstripe/silverstripe-framework/commit/5a786624aa13b9a275d6fdf48656d3bff71fe805) Remove unnecessary manual includes (Sam Minnee)
* 2016-09-09 [dbf78243](https://github.com/silverstripe/silverstripe-cms/commit/dbf782436797de4b6ef847fcd53d3807ff04a148) SiteTreeURLSegmentField.ss in wrong location (fixes #1607) (Loz Calver)
* 2016-09-08 [a12d52a1](https://github.com/silverstripe/silverstripe-cms/commit/a12d52a1611129b42da17b5838339643525592af) Fix some namespace class errors (Damian Mooyman)
* 2016-09-08 [d4de776a4](https://github.com/silverstripe/silverstripe-framework/commit/d4de776a45b5499887dd91f999bb6836b00d3540) fix core include (Damian Mooyman)
* 2016-09-08 [d2229ce8a](https://github.com/silverstripe/silverstripe-framework/commit/d2229ce8a6479e29bbdbba88b0e01db00a09fb89) Fix issue with Folder::validate() failing on allowed_extensions (Damian Mooyman)
* 2016-09-08 [eaac95724](https://github.com/silverstripe/silverstripe-framework/commit/eaac957248d2f9e40f093c49531901c803e955d8) case of required paths (Damian Mooyman)
* 2016-09-08 [77d167730](https://github.com/silverstripe/silverstripe-framework/commit/77d16773043797dbbb70e3f0845e0a1d82d1b6f0) issue with core/Core.php includes (Damian Mooyman)
* 2016-09-06 [f7f1cf0e8](https://github.com/silverstripe/silverstripe-framework/commit/f7f1cf0e878d037aaa15d983ff3b55dc6f85d512) SingleSelectField readonly view (Ingo Schommer)
* 2016-09-06 [b53ce4c19](https://github.com/silverstripe/silverstripe-framework/commit/b53ce4c19041fb8a11b3060b45fa4c3848628a9c) Button loading indicator (Ingo Schommer)
* 2016-09-05 [9c48b939](https://github.com/silverstripe/silverstripe-cms/commit/9c48b9398323450a3cae83b8ed33e32d7ef0925f) Ensure changes in class write to an instance of the new class, not the old one (Damian Mooyman)
* 2016-09-04 [cbdf3eb72](https://github.com/silverstripe/silverstripe-framework/commit/cbdf3eb7257b85ccc4102f5c665c1b4d3d300010) Show formatting help toggle link (Robbie Averill)
* 2016-09-01 [c9d964ff0](https://github.com/silverstripe/silverstripe-framework/commit/c9d964ff0d6e10e2c962df6eda60766fd8093d85) HTMLEditorField image reference (Ingo Schommer)
* 2016-09-01 [ecaed8c08](https://github.com/silverstripe/silverstripe-framework/commit/ecaed8c08d38ff23452024055aeae8b2be031748) ed icon regression in <Breadcrumb> (Ingo Schommer)
* 2016-08-30 [fa5e6bbd6](https://github.com/silverstripe/silverstripe-framework/commit/fa5e6bbd692ef22b406d69054e515c3b79d8fe37) ed breadcrumb icon spacing (Ingo Schommer)
* 2016-08-29 [a6f1fa3](https://github.com/silverstripe/silverstripe-installer/commit/a6f1fa3b9193fb97f100f9226407dcef5736be4b) use 1.0.x-dev for asset-admin composer contraint (Robbie Averill)
* 2016-08-28 [b509f9199](https://github.com/silverstripe/silverstripe-framework/commit/b509f9199df32c01d4dd681cdc0df61ada7d0fc2) Modal response positioning (Christopher Joe)
* 2016-08-26 [1b527fca3](https://github.com/silverstripe/silverstripe-framework/commit/1b527fca3f59e2aa577162eb8f4547fd57971fb3) Webpack handles images & fonts. (Sam Minnee)
* 2016-08-23 [b77d21c25](https://github.com/silverstripe/silverstripe-framework/commit/b77d21c25a7d70eeabfed03a40cd36818d075328) pages add to campaign, improved FormActions error handling, Popover focus highlight and refactored AddToCampaignModal to FormBuilderModal (Christopher Joe)
* 2016-08-23 [c411c500](https://github.com/silverstripe/silverstripe-cms/commit/c411c500a5325af1a5d07cb4e7d2106b4598f91d) for pages admin add to campaign modal (Christopher Joe)
* 2016-08-21 [a6049ec38](https://github.com/silverstripe/silverstripe-framework/commit/a6049ec383f313f448431d2e55173178927eead1) Use chosen from npm package. (Sam Minnee)
* 2016-08-21 [beef8fa0](https://github.com/silverstripe/silverstripe-cms/commit/beef8fa072db896c548c3e8f88857b4f1aef18b7) Switch gulp JavaScript generation to Webpack (Sam Minnee)
* 2016-08-19 [a49456df2](https://github.com/silverstripe/silverstripe-framework/commit/a49456df208ebd30fd1fbaca2fed24b790390e66) for batch actions not postponed under toolbar on open/close (Paul Clarke)
* 2016-08-18 [5c2e8d129](https://github.com/silverstripe/silverstripe-framework/commit/5c2e8d1299a7b23a1a2533b980c3599ca4ae2248) form attr merging order (Ingo Schommer)
* 2016-08-17 [a9bdf33ca](https://github.com/silverstripe/silverstripe-framework/commit/a9bdf33ca8df700097615ecfc3cec6b638153dd2) SingleSelect styling, added add to campaign documentation (Christopher Joe)
* 2016-08-12 [b4435027](https://github.com/silverstripe/silverstripe-siteconfig/commit/b443502777e223a445e9cf8e09d58c30d3e5fc55) issues with templates (Damian Mooyman)
* 2016-08-11 [ed7fe6515](https://github.com/silverstripe/silverstripe-framework/commit/ed7fe65156c13e612b6fb59506d2fa7b33a425ee) Fix usage of $this as closure argument (Damian Mooyman)
* 2016-08-11 [041d1212](https://github.com/silverstripe/silverstripe-cms/commit/041d12129adf30405706bbaeb3c4078e4a9b7450) regressions from namespacing (Damian Mooyman)
* 2016-08-10 [59efd280a](https://github.com/silverstripe/silverstripe-framework/commit/59efd280adafc04581899a4eb6e54ac5bbee9a49) issues with CMS permission codes (Damian Mooyman)
* 2016-08-05 [7026da20d](https://github.com/silverstripe/silverstripe-framework/commit/7026da20dbc8fca6b9cc14f41aa31e5535b68e3e) Make template lookup use 'type' correctly (Damian Mooyman)
* 2016-08-04 [01a13dcba](https://github.com/silverstripe/silverstripe-framework/commit/01a13dcba970f9f641fb7f239b7e99582701c76d) Fix incorrect use of baseClass as baseTable (Damian Mooyman)
* 2016-08-02 [7448fb7ba](https://github.com/silverstripe/silverstripe-framework/commit/7448fb7baebef7c7d6d8d1efb491c8b6f9b90b03) batch action permissions not applied to new nodes loaded (Christopher Joe)
* 2016-08-01 [ab60850a](https://github.com/silverstripe/silverstripe-cms/commit/ab60850a281c849e32b958d43bad2f64a9282ea0) Fix incorrect route registration order (Damian Mooyman)
* 2016-08-01 [7c151321](https://github.com/silverstripe/silverstripe-cms/commit/7c151321b4eb93a769a957c14b391c654b25c535) Fix issue with old asset-admin repeating "level up" button (Damian Mooyman)
* 2016-08-01 [12adba3d3](https://github.com/silverstripe/silverstripe-framework/commit/12adba3d3484248599bdaf420fe1bed64ef04db3) Fix `[buttons]` appearing instead of actual buttons when uploading files (Damian Mooyman)
* 2016-08-01 [9d31bb05](https://github.com/silverstripe/silverstripe-reports/commit/9d31bb0542d1d3913be7c3aa12f88d9498847e48) Fix broken form actions on parent and nested gridfields (Damian Mooyman)
* 2016-07-29 [06ae50e4f](https://github.com/silverstripe/silverstripe-framework/commit/06ae50e4f52082e6d1f58f233dd4984c1d474479) Fix hash link navigation in CMS (Damian Mooyman)
* 2016-07-28 [c54b8b5a](https://github.com/silverstripe/silverstripe-reports/commit/c54b8b5a6c7c12b872096cd0cd6653c9341afed5) link formatting (Damian Mooyman)
* 2016-07-28 [d2142f25](https://github.com/silverstripe/silverstripe-reports/commit/d2142f252e4f50a063747d12babf6cfa4e8e762b) psr-2 formatting (Damian Mooyman)
* 2016-07-28 [4d2fd04c6](https://github.com/silverstripe/silverstripe-framework/commit/4d2fd04c6451d051d5659184e8df58fc328c24d1) Behat preview mode finder being too specific (#5846) (Hamish Friedlander)
* 2016-07-28 [d15b19d20](https://github.com/silverstripe/silverstripe-framework/commit/d15b19d2083075a99662c9e57c08f1823395b336) merge regressions in add-link fixes (Damian Mooyman)
* 2016-07-28 [a868ecdbf](https://github.com/silverstripe/silverstripe-framework/commit/a868ecdbfa166ea4792125203a3a28b42321c81e) Correct include paths for legacy JS files (Damian Mooyman)
* 2016-07-28 [1f8c2f781](https://github.com/silverstripe/silverstripe-framework/commit/1f8c2f781bda8b2b16d453160eeb1247de426a2c) "Insert Link" dialog in HTMLEditorField. CSS still needs work. (Hamish Friedlander)
* 2016-07-28 [6e74b57c3](https://github.com/silverstripe/silverstripe-framework/commit/6e74b57c36816f3ba763ea0f8fb862306a362506) Fix issue with gulpfile.js not compiling client/src/legacy dir (Damian Mooyman)
* 2016-07-26 [d7fa0026](https://github.com/silverstripe/silverstripe-cms/commit/d7fa00267eb8b1c796fa5497b549ef951a6b0e69) field casting (Damian Mooyman)
* 2016-07-25 [f9b487258](https://github.com/silverstripe/silverstripe-framework/commit/f9b4872583aa3c9750f29d111ac073ab9ddf631d) Remap obsolete ClassName values. (Sam Minnee)
* 2016-07-21 [7c2470380](https://github.com/silverstripe/silverstripe-framework/commit/7c24703804f31d9ef1eab749a7bb5527f7d52624) Fix regressions in custom admin url from #3274 (Damian Mooyman)
* 2016-07-18 [761cbf0d](https://github.com/silverstripe/silverstripe-reports/commit/761cbf0dc2ce98e7db6ce7df3913330b8f79c380) Use new admin_url (Daniel Hensby)
* 2016-07-18 [0a7437db](https://github.com/silverstripe/silverstripe-cms/commit/0a7437db40bbca078a4c7518d8f907228bf03462) Allow changing admin URLs (Daniel Hensby)
* 2016-07-18 [b89fcfa18](https://github.com/silverstripe/silverstripe-framework/commit/b89fcfa1884140e3b972cd44516825974f6148c5) Fix regression with uploadfield casting (Damian Mooyman)
* 2016-07-15 [0f950800](https://github.com/silverstripe/silverstripe-cms/commit/0f950800ef7009806e241914becf16157879000d) wrongly named themes after themestack API change (#1548) (Hamish Friedlander)
* 2016-07-14 [2d47fed7](https://github.com/silverstripe/silverstripe-reports/commit/2d47fed75dc8771e1d7754d117440fed3e40b84a) ReportAdmin::Link() not returning correct home url (#38) (Damian Mooyman)
* 2016-07-14 [83c2af72c](https://github.com/silverstripe/silverstripe-framework/commit/83c2af72ca32b73c405876a2a7daec370ea99492) Fix some regressions from #5653 (#5806) (Damian Mooyman)
* 2016-07-13 [f8b1c27e](https://github.com/silverstripe/silverstripe-cms/commit/f8b1c27e3c7eb418fa091f465b04ce57390c42fc) Fix regressions from https://github.com/silverstripe/silverstripe-framework/pull/5653 (Damian Mooyman)
* 2016-07-13 [fb6f8a0a0](https://github.com/silverstripe/silverstripe-framework/commit/fb6f8a0a049154da82c5bf4a4330d519727f0713) Fix Security page showing double escaped HTML (Damian Mooyman)
* 2016-07-13 [e78bf010b](https://github.com/silverstripe/silverstripe-framework/commit/e78bf010b0c1135c242c0686da8e5b7aaff2b8fa) Fix augmentWriteVersioned (Damian Mooyman)
* 2016-07-13 [7d82304bb](https://github.com/silverstripe/silverstripe-framework/commit/7d82304bb09b5391bd9e95d1446b3bd938022f5e) Fix route invoking multiple handleStateChanges on single navigation actions (Damian Mooyman)
* 2016-07-06 [dfe375e87](https://github.com/silverstripe/silverstripe-framework/commit/dfe375e87e8bac103a4445ce7a146374750179e1) MemberDatetime helper description, and shifted them to templates (#5766) (Chris Joe)
* 2016-07-06 [59d4b51d](https://github.com/silverstripe/silverstripe-cms/commit/59d4b51d8ef873e0fbe23ef5ab5b2ca94996cd4c) Fix missing tabs layout in pages view (Damian Mooyman)
* 2016-07-04 [1931ed497](https://github.com/silverstripe/silverstripe-framework/commit/1931ed497f7e702f13d95a58ceab5216be1307c6) unit test for xml content check (Christopher Joe)
* 2016-07-04 [4a22c2bd7](https://github.com/silverstripe/silverstripe-framework/commit/4a22c2bd788d491e8a687dbe12296948bafcad9c) Revert incorrect class rename (#5765) (Damian Mooyman)
* 2016-07-01 [efef02502](https://github.com/silverstripe/silverstripe-framework/commit/efef0250277b83484536546763931c6646cb852d) Fix missing use statements (Damian Mooyman)
* 2016-06-30 [06623537c](https://github.com/silverstripe/silverstripe-framework/commit/06623537c48c9d317aa647bf4021c4d846375fb9) Don't hard-code folder into treedropdownfield search hint (Damian Mooyman)
* 2016-06-30 [abda4dc2](https://github.com/silverstripe/silverstripe-cms/commit/abda4dc2d854c6bb1f73e1f16c10f023ca8eb9df) Restore SiteTree::canPublish method to resolve incorrect fallback to SiteTreeExtension (Damian Mooyman)
* 2016-06-24 [6d835a64a](https://github.com/silverstripe/silverstripe-framework/commit/6d835a64adfcf0154bfa457c49e6f284d373108a) Saving null values to the _versions table. (Frank Mullenger)
* 2016-06-22 [e0c829f47](https://github.com/silverstripe/silverstripe-framework/commit/e0c829f471f464d4ab23ab5b18775f2d16ccba6e) es issue 5188: X-Forwarded Proto (Ian Walls)
* 2016-06-17 [6a7c1056f](https://github.com/silverstripe/silverstripe-framework/commit/6a7c1056fe54afa94641b4f1a0c3455c66d5f9e3) Fix shortcode parsing in HTMLEditorField::getanchors() (Damian Mooyman)
* 2016-06-17 [009f2de17](https://github.com/silverstripe/silverstripe-framework/commit/009f2de17ca1d435aba0f0945f3f76f575fb91d2) Fix incorrect enum string parsing (Damian Mooyman)
* 2016-06-03 [a0213aa2b](https://github.com/silverstripe/silverstripe-framework/commit/a0213aa2bfb500060d9e82a0b0ea5321065aedab) Fix HTTP url rewriting (Damian Mooyman)
* 2016-05-27 [5cace7c69](https://github.com/silverstripe/silverstripe-framework/commit/5cace7c693640cd10e6a05aaea64fbbc91f8623d) ed javascript/ docs references (#5599) (Ingo Schommer)
* 2016-05-23 [092c8986](https://github.com/silverstripe/silverstripe-cms/commit/092c8986cbfebc4a7394b62bb411fdb43dddf07c) Query string not built properly (Daniel Hensby)
* 2016-05-23 [88321f5d5](https://github.com/silverstripe/silverstripe-framework/commit/88321f5d56ff59091395ae7f7619b6bc8be0cdf9) CleanupTestDatabasesTask permission failure response (Loz Calver)
* 2016-05-23 [ad213b35](https://github.com/silverstripe/silverstripe-cms/commit/ad213b3576e7eccb38311011b2ae2e683f0faeac) Fix rollback page crash (Damian Mooyman)
* 2016-05-23 [0f646ba3](https://github.com/silverstripe/silverstripe-cms/commit/0f646ba375150bd334d05668517ccfdb06d687da) undefined index error (Damian Mooyman)
* 2016-05-20 [90397c94](https://github.com/silverstripe/silverstripe-cms/commit/90397c945d2eec1ea07ecfee7a4adab15279dac9) fix missing install image (Damian Mooyman)
* 2016-05-12 [a61d0a2f0](https://github.com/silverstripe/silverstripe-framework/commit/a61d0a2f0babedd4cc8bc639e5c4890eaf0d3351) Persistant Loading... indicator when no campaigns yet in admin (Hamish Friedlander)
* 2016-05-12 [73939958](https://github.com/silverstripe/silverstripe-cms/commit/7393995836de89509aa7643d64b322c289ff6b7a) preview in Asset Admin (Hamish Friedlander)
* 2016-05-09 [1263bf8a](https://github.com/silverstripe/silverstripe-cms/commit/1263bf8a04d4873037b9fee5fecf7d1a5b8c2f70) Not being able to save when viewing page settings (Hamish Friedlander)
* 2016-05-09 [2af63a84](https://github.com/silverstripe/silverstripe-cms/commit/2af63a84efd1b0a91985ea877fc65447c198ea02) add_i18n_javascript calls not being updated after JS move (Hamish Friedlander)
* 2016-05-09 [b2786c228](https://github.com/silverstripe/silverstripe-framework/commit/b2786c228b2384acab7ef99b6fce66e352895f15) add_i18n_javascript calls not being updated after JS move (Hamish Friedlander)
* 2016-05-06 [0b295137c](https://github.com/silverstripe/silverstripe-framework/commit/0b295137c21da6b0aea58678b07702bb2d03b7d4) unguarded JS check in LeftAndMain.Preview.js (Ingo Schommer)
* 2016-05-06 [83d70c441](https://github.com/silverstripe/silverstripe-framework/commit/83d70c4414f7f416c68317abac1d9fc19073907c) es font used for add page steps and alignment (Paul Clarke)
* 2016-05-06 [261ca9378](https://github.com/silverstripe/silverstripe-framework/commit/261ca9378e8e3465be5a5961b96aa3e5e6cf3cf4) es campaign thumbnail left alignment issue (Paul Clarke)
* 2016-05-05 [b4cd617ee](https://github.com/silverstripe/silverstripe-framework/commit/b4cd617ee339ab1ecdf927523724136fe68096d9) Renaming to HTMLEditorConfig. (Frank Mullenger)
* 2016-05-05 [9ba362065](https://github.com/silverstripe/silverstripe-framework/commit/9ba362065eb091c78f87a493b82e4fa970e3d94d) loading icon bug on IE (Scott Hutchinson)
* 2016-05-05 [c251fab9a](https://github.com/silverstripe/silverstripe-framework/commit/c251fab9af82b3779188c5ab67f39ba1a37f08ae) ed more SCSSLint errors, disabled some files (Ingo Schommer)
* 2016-05-04 [e04fb5b98](https://github.com/silverstripe/silverstripe-framework/commit/e04fb5b986ca0f55194a0930765c890fcd154078) es missing actions on responsive gridfield, cleanup indentation (#5446) (Paul)
* 2016-05-04 [4b8e98b35](https://github.com/silverstripe/silverstripe-framework/commit/4b8e98b351ad617fad0f5a8b6c1aa1d8919fca37) for scss linting issues in new scss (#5448) (Paul)
* 2016-05-02 [f88d708ee](https://github.com/silverstripe/silverstripe-framework/commit/f88d708ee997804e5a7b0490e8d5b80cf3736566) Fix GridFieldAddExistingAutocompleter and GridFieldExportButton (Damian Mooyman)
* 2016-05-01 [e7d5c92ec](https://github.com/silverstripe/silverstripe-framework/commit/e7d5c92ec1b05323694f8dde172d137eb897ef4c) merge regressions (Damian Mooyman)
* 2016-05-01 [8d2f063f0](https://github.com/silverstripe/silverstripe-framework/commit/8d2f063f0c40cbb1ec39c05fc653486efe7c867f) eslint errors (#5411) (Damian Mooyman)
* 2016-04-29 [baa3d4e7d](https://github.com/silverstripe/silverstripe-framework/commit/baa3d4e7d7ae12e63953801397ae1e1987e3afa4) trailing spaces on merge (Damian Mooyman)
* 2016-04-26 [cb723a684](https://github.com/silverstripe/silverstripe-framework/commit/cb723a684ab75b22142137e30e9b99f3c51dd95e) ed docs wording (Ingo Schommer)
* 2016-04-26 [fc8d94d78](https://github.com/silverstripe/silverstripe-framework/commit/fc8d94d789c8e849989be4ff69a30d20d7ef6824) for toolbar-south width (#5391) (Paul)
* 2016-04-26 [43f2680af](https://github.com/silverstripe/silverstripe-framework/commit/43f2680af8042b5577980b53faa86407107800b3) Fix missing return in ReadonlyField (Damian Mooyman)
* 2016-04-26 [778ed1257](https://github.com/silverstripe/silverstripe-framework/commit/778ed1257db81b5650fa885988e102a51a8f278e) campaign section cancel buttons (David Craig)
* 2016-04-25 [7e7946e50](https://github.com/silverstripe/silverstripe-framework/commit/7e7946e50a91f62ff6b6cd496da59b06ab1bda73) ed case sensitive naming regressions (David Craig)
* 2016-04-25 [c66a45c8b](https://github.com/silverstripe/silverstripe-framework/commit/c66a45c8b899b0390a3f0aa0a17acd934a191cfc) ed GridField JS test warnings (Ingo Schommer)
* 2016-04-22 [9a4b93a05](https://github.com/silverstripe/silverstripe-framework/commit/9a4b93a058ee06a66867d64264d9720a1f5cde85) Fix baseurl in IE missing leading / (Damian Mooyman)
* 2016-04-22 [2f7a7c3a5](https://github.com/silverstripe/silverstripe-framework/commit/2f7a7c3a5cf889d462669adaf6bbb5422bdb5a64) GridFieldComponent not rendering all records (David Craig)
* 2016-04-21 [fa8075367](https://github.com/silverstripe/silverstripe-framework/commit/fa8075367d79a6cc146c9a66dbe6682e346e435d) Fix routing tests (Damian Mooyman)
* 2016-04-21 [85fb0803](https://github.com/silverstripe/silverstripe-cms/commit/85fb080319c3b9a43c627f64f2d1c9a691cdf11c) font-icon regression on tree view (David Craig)
* 2016-04-21 [d376944d4](https://github.com/silverstripe/silverstripe-framework/commit/d376944d483338f1ac74cc970f081b4f081cc67e) regression with font-icon styles (David Craig)
* 2016-04-21 [8c63ae3d6](https://github.com/silverstripe/silverstripe-framework/commit/8c63ae3d68e65e75a8c63efa086858be0eaf9089) AssetAdmin icon reference (Ingo Schommer)
* 2016-04-21 [b2e8fd96e](https://github.com/silverstripe/silverstripe-framework/commit/b2e8fd96ec20b4b1709b89d920ad99d3093f8093) Fix form schema to use correct ID values (Damian Mooyman)
* 2016-04-20 [95e441528](https://github.com/silverstripe/silverstripe-framework/commit/95e4415288c9bd29674be9ae53435178c22c42da) for IE, added ability to adjust panel height based on the amount of toolbars (Paul Clarke)
* 2016-04-20 [8cf38720b](https://github.com/silverstripe/silverstripe-framework/commit/8cf38720b5de1133c676a12d3f878b8c2a74d418) Chosen.js selector for Behat feature (Ingo Schommer)
* 2016-04-19 [a7e5da822](https://github.com/silverstripe/silverstripe-framework/commit/a7e5da82286fefe4e914ea23f6a29a680675a5e1) for height (Paul Clarke)
* 2016-04-19 [0bd62735b](https://github.com/silverstripe/silverstripe-framework/commit/0bd62735bc6e20774aa4e8fd3dfd611240031c61) Fix issue with Requirements mangling custom scripts (#5337) (Damian Mooyman)
* 2016-04-19 [ddfe660f0](https://github.com/silverstripe/silverstripe-framework/commit/ddfe660f0a5ac8f4606b14fcd1b0d6ccd02da7ab) variable references when debugging (David Craig)
* 2016-04-19 [6ccfbb7c5](https://github.com/silverstripe/silverstripe-framework/commit/6ccfbb7c521df3d4f728327e2a843656aa68e795) ed breadcrumbs test (Ingo Schommer)
* 2016-04-19 [47ca88956](https://github.com/silverstripe/silverstripe-framework/commit/47ca889567556ebe706d65e07a5b98f8670ae435) for Add campaign button spacing (Paul Clarke)
* 2016-04-17 [90e352ca7](https://github.com/silverstripe/silverstripe-framework/commit/90e352ca7d2ebfc9958e184b0131952eac30652f) "urlencoded" HTTP header notation (Ingo Schommer)
* 2016-04-15 [9a5db5f76](https://github.com/silverstripe/silverstripe-framework/commit/9a5db5f760c835f8d6b7a5801f4b9b584b15543d) ChangeSet test mixing Object ID and ChangeSetItem ID up (Hamish Friedlander)
* 2016-04-13 [7e37abeb](https://github.com/silverstripe/silverstripe-cms/commit/7e37abeb217cd0e214ad1e291d6e965fc2b40cce) Fix chosen dropdown on settings being cropped (Damian Mooyman)
* 2016-04-13 [5f2edb4e9](https://github.com/silverstripe/silverstripe-framework/commit/5f2edb4e91117b7018c332116fe8d7d4d7dbaf6a) ESLint issues, shrinkwrap, and missing image (Damian Mooyman)
* 2016-04-12 [f7237a993](https://github.com/silverstripe/silverstripe-framework/commit/f7237a9936d873ffcf81f227649485911a738ecb) <FormAction> external and prop definition (Ingo Schommer)
* 2016-04-12 [2983dd58f](https://github.com/silverstripe/silverstripe-framework/commit/2983dd58ff9d152d641deffa519aa10b966d03b8) admin area after upgrade to Chosen 1.5 (Hamish Friedlander)
* 2016-04-11 [5d29d3011](https://github.com/silverstripe/silverstripe-framework/commit/5d29d30118025d67a80b929c4832c05d98f533d5) ed silverstripe-backend GET use regression (Ingo Schommer)
* 2016-04-11 [d7eed8fe8](https://github.com/silverstripe/silverstripe-framework/commit/d7eed8fe8d4eb7079656cc01cc4ddd71593524e1) gulpfile.js ESLint syntax (Ingo Schommer)
* 2016-04-11 [cc897d0f8](https://github.com/silverstripe/silverstripe-framework/commit/cc897d0f855ddffdc8bcb23cd18b6f16f409dfb2) for add page steps and 1px out in southbar (Paul Clarke)
* 2016-04-10 [ce8ac58dd](https://github.com/silverstripe/silverstripe-framework/commit/ce8ac58ddbe8b4ccaead8b22953ba2980960f295) React DOM warnings about <form> attrs (Ingo Schommer)
* 2016-04-07 [0aec89d0c](https://github.com/silverstripe/silverstripe-framework/commit/0aec89d0c8f0a6402122a3aec0f338cd84658dec) for #5279 Addressing only a few PSR-2 items in one file, but primarily targeting Director::is_https() and invalid URL's. (Patrick Nelson)
* 2016-04-05 [7337f26d3](https://github.com/silverstripe/silverstripe-framework/commit/7337f26d3ae877dbfee288f868da408a3720a8ae) non-standard url encoding in CMS search form (Ingo Schommer)
* 2016-04-05 [5a86f4232](https://github.com/silverstripe/silverstripe-framework/commit/5a86f4232e42232bcb5fa61e4383561a64133070) Fix error when using search bar (Damian Mooyman)
* 2016-04-04 [c4a97207](https://github.com/silverstripe/silverstripe-cms/commit/c4a97207308396190bb2c0719429f9c84d134d68) IE support by using babelify transforms (Ingo Schommer)
* 2016-04-04 [0fadd7a15](https://github.com/silverstripe/silverstripe-framework/commit/0fadd7a15a6b256322639b44ba687bafb506f1da) IE compat through babelify (Ingo Schommer)
* 2016-04-03 [640691f54](https://github.com/silverstripe/silverstripe-framework/commit/640691f544d21ca86b8c995892fbb3dda45f6bdf) fix missing language on non-global configs (Damian Mooyman)
* 2016-03-31 [d8d005d1e](https://github.com/silverstripe/silverstripe-framework/commit/d8d005d1e27d0105fade2c4758f2a695cb09a4e4) move test file to correct folder and fix class_exists (Damian Mooyman)
* 2016-03-31 [e8a68c42c](https://github.com/silverstripe/silverstripe-framework/commit/e8a68c42ce022f46c25688c3538e081c30d50a19) Prevent live manifest loading files from nested test directories (Damian Mooyman)
* 2016-03-30 [c69e55c49](https://github.com/silverstripe/silverstripe-framework/commit/c69e55c49c1a9310f1c6739444bd101b474ba3c6) Fix issue with SapphireTest::assertDOSEquals incorrectly passing on empty set (Damian Mooyman)
* 2016-03-22 [46b35ecb](https://github.com/silverstripe/silverstripe-cms/commit/46b35ecb0e4336991e374226983f3916834af1df) Changes to support php7 and new DBFields (Sam Minnee)
* 2016-03-21 [8ae289489](https://github.com/silverstripe/silverstripe-framework/commit/8ae289489001448f8866a2e5dd10959b7617f45d) form schema ID getter (Ingo Schommer)
* 2016-03-16 [6b1444709](https://github.com/silverstripe/silverstripe-framework/commit/6b1444709fe38ece828e30f43fd248e856c9a55d) menu dropdown icon (scott1702)
* 2016-03-15 [d4ad1504a](https://github.com/silverstripe/silverstripe-framework/commit/d4ad1504a979a478dc96944f7639cd706de6c215) bottom toolbar height (David Craig)
* 2016-03-13 [7769f03cc](https://github.com/silverstripe/silverstripe-framework/commit/7769f03ccc0300510daffdfe2bce7723f2193ee1) Remove duplicate extension hook (Damian Mooyman)
* 2016-03-09 [e2a377e21](https://github.com/silverstripe/silverstripe-framework/commit/e2a377e21ea7a91e3b289d41947ab4ce952dbe0c) Fix CleanupTestDatabaseTask (Damian Mooyman)
* 2016-03-09 [3673a5e14](https://github.com/silverstripe/silverstripe-framework/commit/3673a5e14116b60601a3fce1eae9eb5c786a4e08) Inserting a 'Download a file' without selecting an image (Mike Cochrane)
* 2016-03-09 [0b81bbef2](https://github.com/silverstripe/silverstripe-framework/commit/0b81bbef22a0145e1972973761248070f0bd1c66) attempt to access https iframe from http interface (Mike Cochrane)
* 2016-03-09 [a3ee9ece9](https://github.com/silverstripe/silverstripe-framework/commit/a3ee9ece90f17eda2f9d2021f8e47c74af8d3890) avoid javascript error when preview is https (Mike Cochrane)
* 2016-03-09 [70062ebc](https://github.com/silverstripe/silverstripe-cms/commit/70062ebc9cef301f2742ee08d2fade1bb7a41866) 'Settings' fields being overwritten by 'Content' fields (Mike Cochrane)
* 2016-03-06 [3d99ed24a](https://github.com/silverstripe/silverstripe-framework/commit/3d99ed24ac3bfcd7afaa7210b654b65c978a8817) Better filtering of versionable tables during SQL augmentation (Damian Mooyman)
* 2016-03-06 [627fbf905](https://github.com/silverstripe/silverstripe-framework/commit/627fbf9051845dd0be1f1711a1d68762e5eceab7) ed merge regression (Ingo Schommer)
* 2016-03-03 [4b5bd2d74](https://github.com/silverstripe/silverstripe-framework/commit/4b5bd2d744c4db7e49c65a21023024d22913b1f6) cleaner can* methods for Member (Nicolaas)
* 2016-03-02 [8eede847c](https://github.com/silverstripe/silverstripe-framework/commit/8eede847cdf3638bfcdd5cf8bf450237c13eddbd) i18n.sprintf() parameters being off by one (Mike Cochrane)
* 2016-03-01 [3317d3427](https://github.com/silverstripe/silverstripe-framework/commit/3317d342769e7f94d063a9cf29ce1f4350326243) Prevent fatal errors during test failure halt tests (Damian Mooyman)
* 2016-02-26 [40723aaa5](https://github.com/silverstripe/silverstripe-framework/commit/40723aaa58fcee4496b25ac82ebc55eaefa3fb4d) undeclared variable in UploadField.js (David Craig)
* 2016-02-24 [beba0f25](https://github.com/silverstripe/silverstripe-cms/commit/beba0f2551f368a04edc8a9dd4d7446e77778c20) Fix behat tests for asset abstraction (Damian Mooyman)
* 2016-02-23 [0ee156489](https://github.com/silverstripe/silverstripe-framework/commit/0ee1564896be9a1da97d61f5141d6cffe416a7e5) Fix deprecated API usage in DataFormatter API and DataObjectTest (Damian Mooyman)
* 2016-02-19 [7580d35be](https://github.com/silverstripe/silverstripe-framework/commit/7580d35be816ad73ca6d9434f7992301c000d0fa) ability to edit files immeditately after upload (scott1702)
* 2016-01-25 [d031f53e](https://github.com/silverstripe/silverstripe-reports/commit/d031f53e7314498c900c84923f94f66e4aa3303a) incorrect version dependency (Damian Mooyman)
* 2016-01-21 [8872ed51](https://github.com/silverstripe/silverstripe-siteconfig/commit/8872ed51931efcab859c9d6f148c8dc61aa4509f) Fix broken travis yml (Damian Mooyman)
* 2016-01-21 [6cebffd89](https://github.com/silverstripe/silverstripe-framework/commit/6cebffd89bce5e4ed15d4fbd2ceb7680ec74894a) Fix SSViewerTest not restoring old requirements (Damian Mooyman)
* 2016-01-05 [45dc510da](https://github.com/silverstripe/silverstripe-framework/commit/45dc510da7051c03c6ac71cdac688b7462142d1c) ing typo (Peter Thaleikis)
* 2015-12-22 [b6627a2f7](https://github.com/silverstripe/silverstripe-framework/commit/b6627a2f7c045c040ab51512af981dad08780418) Change Requirements::include_in_response() to not add empty (Jacob Buck)
* 2015-12-15 [31888735b](https://github.com/silverstripe/silverstripe-framework/commit/31888735bdd665dd33f0b08e5fdfc9d033072b66) Fix incorrect error page handling (Damian Mooyman)
* 2015-12-02 [ed76b3f5](https://github.com/silverstripe/silverstripe-siteconfig/commit/ed76b3f56c9cf4b81a51b144a843130f89bd6e1d) Fix yml and behat (Damian Mooyman)
* 2015-12-02 [387eb227](https://github.com/silverstripe/silverstripe-siteconfig/commit/387eb2277bd76e53aca9e43e249c90bf95923f91) Fix CI (Damian Mooyman)
* 2015-12-02 [d0ee35c5](https://github.com/silverstripe/silverstripe-cms/commit/d0ee35c540f7b980cb2ee6a8ea32c81821e45ef0) composer dependencies (scott1702)
* 2015-11-12 [03169a429](https://github.com/silverstripe/silverstripe-framework/commit/03169a429fe0a408078a39e1c1d8d3e0dae96aab) typo (Nabil Kadimi)
* 2015-10-22 [fe3d23f0d](https://github.com/silverstripe/silverstripe-framework/commit/fe3d23f0d4c381040f47d24c4dcc9b27768a06b8) Fix GeneratedAssetHandler crashing on expired resources (Damian Mooyman)
* 2015-10-19 [d7dcb41b](https://github.com/silverstripe/silverstripe-cms/commit/d7dcb41b271e6b5d5e74988a979a286185a0093e) Remove tab - invalid YAML (Loz Calver)
* 2015-10-18 [c8a0347b7](https://github.com/silverstripe/silverstripe-framework/commit/c8a0347b78af0e643b1fd3032d100f8e7ed55ee2) Monolog constant use (Ingo Schommer)
* 2015-10-15 [27a8afe78](https://github.com/silverstripe/silverstripe-framework/commit/27a8afe78bae34a4e0cbd6fb225840312dc8fa5f) Fix regressions in fulltextsearch (Damian Mooyman)
* 2015-10-14 [d884c859d](https://github.com/silverstripe/silverstripe-framework/commit/d884c859d189a0803974636fa6f699cbc474233a) Fix file link tracking for new asset abstraction (Damian Mooyman)
* 2015-10-06 [c13dfc2fa](https://github.com/silverstripe/silverstripe-framework/commit/c13dfc2fa0d84fab40d01f38441295d40d2d1df5) ing phpdoc blocks to refering to Objects to built-in types of PHP (Peter Thaleikis)
* 2015-09-28 [1f632a10c](https://github.com/silverstripe/silverstripe-framework/commit/1f632a10c9661d7f7eb27bd1fcf7e03081e8010e) Replace direct reference to $_REQUEST['url'] with request object getter (Damian Mooyman)
* 2015-09-28 [8e3f549b](https://github.com/silverstripe/silverstripe-cms/commit/8e3f549b19bd4930f2fa80a7fa6a528cdc5e4011) Fix regressions in CMS from db field changes (Damian Mooyman)
* 2015-09-09 [60e75cbd](https://github.com/silverstripe/silverstripe-cms/commit/60e75cbd990669dade21633a475ff845e089a1d6) travis php version back to 5.4 (Damian Mooyman)
* 2015-09-09 [143e4eae5](https://github.com/silverstripe/silverstripe-framework/commit/143e4eae5fe293735b82f22c09e8bc2b541d2a10) travis php version back to 5.4 (Damian Mooyman)
* 2015-09-09 [812b5ecb6](https://github.com/silverstripe/silverstripe-framework/commit/812b5ecb629c839cb582477fb95628be7db8caf2) merge regressions (Damian Mooyman)
* 2015-09-04 [fa8702f0c](https://github.com/silverstripe/silverstripe-framework/commit/fa8702f0c8b22581e1cbe48fc3741a146b546bc9) Fix reference to missing Debug::loadErrorHandlers() (Damian Mooyman)
* 2015-08-28 [f5af0c85b](https://github.com/silverstripe/silverstripe-framework/commit/f5af0c85bade63174d282162a6c99fb37461b433) Don’t use SplFixedArray in PHP 7. (Sam Minnee)
* 2015-08-27 [8518fc142](https://github.com/silverstripe/silverstripe-framework/commit/8518fc142556c3992d0a485c4b3e90e2095f4c0c) Clarify PHP7-incompatible call styles. (Sam Minnee)
* 2015-08-27 [083799ec0](https://github.com/silverstripe/silverstripe-framework/commit/083799ec03899b8388352849cbdc42e4c74fbf4d) Minimal data-model changes to support PHP7. (Sam Minnee)
* 2015-08-27 [12a83d70a](https://github.com/silverstripe/silverstripe-framework/commit/12a83d70aef7a36c5b5b403b86d4864402275eaa) Removed PHP4 syntax from Diff.php (Sam Minnee)
* 2015-08-27 [680b19a1d](https://github.com/silverstripe/silverstripe-framework/commit/680b19a1da75aa940da4ce4283710eff337139c6) Correct PHP4-style constructors in SimpleTest. (Sam Minnee)
* 2015-08-25 [5fa3c8528](https://github.com/silverstripe/silverstripe-framework/commit/5fa3c852804d3c627d5d2f8db6fd4b73da698531) for #4417: Ensuring ->removeValidation() is defined on instances of Validator. Setup new API for enabling/disabling validation. Documentation and better type handling. (Patrick Nelson)
* 2015-08-17 [bf6a84bd](https://github.com/silverstripe/silverstripe-cms/commit/bf6a84bd2fd0c16f040902dcd7902538a6c9bf50) ing behat regression (Daniel Hensby)
* 2015-08-14 [e13aebc3d](https://github.com/silverstripe/silverstripe-framework/commit/e13aebc3d701b30667d7df23edbff2ce2418a4f0) for #4502 Prevents JSON.parse() from scrambling sorted results from server-side. (Patrick Nelson)
* 2015-08-04 [053c47499](https://github.com/silverstripe/silverstripe-framework/commit/053c47499ee00c984f85ee83bcb389175b0b11ea) datefield to work with other form markup (hex0id)
* 2015-04-28 [cadc02b63](https://github.com/silverstripe/silverstripe-framework/commit/cadc02b63b1f8248a5518e202da6f948ffa5064e) for #4129: Ensure belongsToComponent() and hasManyComponent() methods return null instead of false, to be consistent with other relation component methods. (Patrick Nelson)
* 2015-04-28 [512b3db0](https://github.com/silverstripe/silverstripe-siteconfig/commit/512b3db0153306d8ff591eefd00418f619de58f7) Fix SiteTree / SiteConfig permissions (Ingo Schommer)
* 2015-03-10 [622ad54c5](https://github.com/silverstripe/silverstripe-framework/commit/622ad54c5b21dc4e12914181e74dacfb47b8e151) Fix yaml generation to conform to version 1.1, accepted by transifex (Damian Mooyman)
* 2015-02-23 [e04e992c](https://github.com/silverstripe/silverstripe-cms/commit/e04e992c73cfd329cec535e2ed4bccf82356b589) es relating to Controller cleanup (Daniel Hensby)
* 2015-02-12 [83db2f2d3](https://github.com/silverstripe/silverstripe-framework/commit/83db2f2d30067dd81eb3af233a2beec3971c6bc6) ed "Removed DataObject::$allowed_actions #3880" on master (Aden Fraser)
* 2015-02-11 [0223b6164](https://github.com/silverstripe/silverstripe-framework/commit/0223b6164cb661e71dd8d84485e7209d6685a340) ed " Image_Backend interface constructor needs updating (master) #3477 " on both the Image_Backend Model and Imagick_Backend filesystem class (Aden Fraser)
* 2014-12-15 [1f7e627a5](https://github.com/silverstripe/silverstripe-framework/commit/1f7e627a50a769a0ebc00dbf8c2b8adb686e5afe) How to folder on forms (Cam Findlay)
* 2014-12-10 [6ff6c6f5](https://github.com/silverstripe/silverstripe-cms/commit/6ff6c6f572e2981df136d2665dcfe0e8a241451c) Removed multifile thirdparty library which isn't used any more in ss. (micmania1)
* 2014-12-08 [ddd83304c](https://github.com/silverstripe/silverstripe-framework/commit/ddd83304ceef3ce46b511daafa3becbb1449b5a1) Feedback to name the fields section to "field types" to make it clearer what the section is about. (Cam Findlay)
* 2014-12-08 [1f181a65c](https://github.com/silverstripe/silverstripe-framework/commit/1f181a65c920f3f650889bb3df2be4f93f8a8d35) use GFMD code blocks to fix code formatting consistency. (Cam Findlay)
* 2014-12-04 [00e029f57](https://github.com/silverstripe/silverstripe-framework/commit/00e029f574f09e47f059d314d35392ecde3d9092) check for suite existence in endCurrentTest (Will Morgan)
* 2014-11-20 [6ace5641](https://github.com/silverstripe/silverstripe-cms/commit/6ace56418e82d4f6dcb82c84836860bc98e667c5) dependency on framework master branch (Damian Mooyman)
* 2014-06-02 [e732aee6e](https://github.com/silverstripe/silverstripe-framework/commit/e732aee6eb4132aba85ecb3e1e3e72543ea2003c) es #3182 Fixes lazy loading of fields when query was created in default stage (Craig Weber)