*`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 [/developer_guides/files/file_security] for
more information.
*`Object::useCustomClass` has been removed. You should use the config API with Injector instead.
* Upgrade of TinyMCE to version 4.
*`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.
* Removed `dev/tests/` controller in favour of standard `vendor/bin/phpunit` command
* 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.
*`Object::invokeWithExtensions` now has the same method signature as `Object::extend` and behaves the same way.
*`CMSMain` model actions have been changed:
*`CMSBatchAction_Delete` and `CMSMain::delete` are no longer deprecated.
*`CMSBatchAction_DeleteFromLive` is removed.
*`CMSMain.enabled_legacy_actions` config is removed.
*`DataObject::can` has new method signature with `$context` parameter.
*`SiteTree.alternatePreviewLink` is deprecated. Use `updatePreviewLink` instead.
*`Injector` dependencies no longer automatically inherit from parent classes.
## New API
* 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.
*`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.
*`AssetField` formfield to provide an `UploadField` style uploader for the new `DBFile` database field.
*`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.
*`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
* 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 (no replacement)
* Moved test database cleanup task from `sake dev/tests/cleanupdb` to `sake dev/tasks/CleanupTestDatabasesTask`
* Removed `SapphireTest->skipTest`, use `markTestSkipped()` in a `setUp()` method instead
*`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.
* A lot of standard versioned API has been refactored from `SiteTree` into `Versioned` extension. Now
all versioned DataObjects have `canPublish()`, `canArchive()`, `canUnpublish()`, `doPublish()`, `doArchive()`
`doUnpublish()`, `isPublished()` and `isonDraft()` out of the box. However, `do*()` methods will no longer
automatically check `can*()` permissions, and must be done by usercode before invocation.
* GridField edit form now has improved support for versioned DataObjects, with basic publishing
actions available when editing records.
*`Versioned` API has some breaking changes:
* 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.
*`reading_stage` is now `set_stage`
*`current_stage` is now `get_stage`
*`getVersionedStages` is gone.
*`get_live_stage` is removed. Use the `Versioned::LIVE` constant instead.
*`getDefaultStage` is removed. Use the `Versioned::DRAFT` constant instead.
*`$versionableExtensions` is now `private static` instead of `protected static`
*`hasStages` is addded to check if an object has a given stage.
*`stageTable` is added to get the table for a given class and stage.
*`ChangeSet` and `ChangeSetItem` have been added for batch publishing of versioned dataobjects.
*`FormAction::setValidationExempt` can be used to turn on or off form validation for individual actions
### Front-end build tooling for CMS interface
* Management of CMS JavaScript dependencies via [npm](https://www.npmjs.com/)
* ES6 is now available in all core JavaScript files via [Babel](https://babeljs.io/)
* Bundling of core JavaScript via [Browserify](http://browserify.org/)
* CMS build tasks managed by [Gulp](http://gulpjs.com/)
For more details see the docs on [working with client-side dependencies](../contributing/code#working-with-client-side-dependencies). Note that you don't need any of these tools for running SilverStripe
or developing your own website. These improvements are mainly geared at CMS core development.
* Added SilverStripeComponent base class for building React UIs
### Compiling CSS
[Compass](http://compass-style.org/) has been removed and css/sprite compilation is now handled with [gulp](http://gulpjs.com/) (see [Markup and Style Conventions](../developer_guides/customising_the_admin_interface/cms_architecture/#markup-and-style-conventions)).
### Bootstrap CSS
Bootstrap 4 Alpha.2 CSS is available in `admin/css/bootstrap`.
### Changed paths of static assets
All static files (images, javascript, stylesheets, fonts) used for the CMS and forms interfaces
in `framework` and `cms` have moved locations. These assets are now placed in a `client/` subfolder,
to account for a structural change where both javascript and styles are co-located in component-specific folders.
This will affect you if you have used `Requirements::block()` on files in the `framework/` or `cms/` folder.
Care should also be taken when referencing images in these folders from your own stylesheets.
*`debugmethods` querystring argument has been removed from debugging.
### ORM
*`DataList::getRelation` is removed, as it was mutable. Use `DataList::applyRelation` instead, which is immutable.
### ErrorPage
*`ErrorPage.static_filepath` config has been removed.
*`ErrorPage::get_filepath_for_errorcode` has been removed
*`ErrorPage::alternateFilepathForErrorcode` extension point has been removed
See notes below on upgrading extensions to the ErrorPage class
### Member
*`Member` Field 'RememberLoginToken' removed, replaced with 'RememberLoginHashes' has_many relationship
### Assets and Filesystem
The following image manipulations previously deprecated has been removed:
*`Image::SetRatioSize` superceded by `Fit`
*`Image::SetWidth` superceded by `ScaleWidth`
*`Image::SetHeight` superceded by `ScaleHeight`
*`Image::SetSize` superceded by `Pad`
*`Image::PaddedImage` superceded by `Pad`
*`Image::CroppedImage` superceded by `Fill`
*`Image::AssetLibraryPreview` superceded by `PreviewThumbnail`
*`Image::AssetLibraryThumbnail` superceded by `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.
*`File::deletedatabaseOnly`
*`File::link_shortcode_handler` renamed to `handle_shortcode`
*`File::setParentID`
*`File::getFullPath`
*`File::getRelativePath`
*`File::Content` database field is removed
Image manipulations have been moved out of Image.php and now available to any File or DBFile which has the
appropriate mime types. The following file manipulations classes and methods have been removed:
*`CleanImageManipulationCache` class
*`Image_Cached` class
*`Image::regenerateFormattedImages`
*`Image::getGeneratedImages`
*`Image::deleteFormattedImages`
*`AssetAdmin::deleteunusedthumbnails`
*`AssetAdmin::getUnusedThumbnails`
Many `Folder` methods have also been removed:
*`Folder::syncChildren`
*`Folder::constructChild`
*`Folder::addUploadToFolder`
The following filesystem synchronisation methods are also removed
*`Filesystem::sync`
*`AssetAdmin::doSync`
The Spyc YAML library has been removed from /thirdparty. Please load it yourself, or use the Symfony YAML component that’s automatically installed by composer.
### Requirements
The following methods and properties on `Requirements_Backend` have been renamed:
*`Requirements_Backund::$combine_files` made protected and renamed `$combinedFiles`
*`Requirements_Backend::$combine_js_with_min` made protected and renamed `$minifyCombinedFiles`
*`Requirements_Backend::$write_header_comments` made protected and renamed `$writeHeaderComment`
*`Requirements_Backend::$write_js_to_body` made protected and renamed to `$writeJavascriptToBody`
*`Requirements_Backend::$force_js_to_bottom` renamed to `$forceJSToBottom`
*`get_combined_files_enabled` renamed to `getCombinedFilesEnabled`
*`set_combined_files_enabled` renamed to `setCombinedFilesEnabled`
*`get_suffix_requirements` renamed to `getSuffixRequirements`
*`set_suffix_requirements` renamed to `setSuffixRequirements`
*`get_custom_scripts` renamed to `getCustomScripts`
*`unblock_all` renamed to `unblockAll`
*`include_in_response` renamed to `includeInResponse`
*`combine_files` renamed to `combineFiles`
*`get_combine_files` renamed to `getCombinedFiles`
*`clear_combined_files` renamed to `clearCombinedFiles`
*`process_combined_files` renamed to `processCombinedFiles`
*`set_write_js_to_body` renamed to `setWriteJavascriptToBody`
*`set_force_js_to_bottom` renamed to `setForceJSToBottom`
New methods on `Requirements` are added to access these:
*`get_minify_combined_js_files`
*`set_minify_combined_js_files`
*`get_force_js_to_bottom`
*`get_write_js_to_body`
Some methods on `Requirements` have had their method signatures changed:
*`includeInHTML` has had the first parameter $template removed as it was previously deprecated.
And some methods on `Requirements` and `Requirements_Backend` have been removed as they are obsolete.
*`delete_combined_files` (both classes)
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.
In addition, a new API for javascript files has been added to support front-end tools
such as [browserify](http://browserify.org/) that pre-combine scripts. You can specify
a 'provides' option to the second parameter of `Requirements::javascript` to declare
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
### Upgrading asset web.config, .htaccess, or other server configuration
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.
If upgrading from an existing installation, make sure to invoke `?flush=all` at least once.
See [/developer_guides/files/file_security] for more information.
### `ListboxField` is now multiple-only
Previously, this field would operate as either a single select (default) or multi-select by setting
`setMultiple` to either true or false.
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.
Where previously you could specify a list of grouped values in the same way as `setSource`, this
method now only accepts either a non-associative array of values (not titles) or an `SS_List`
of items to disable.
### Upgrading Requirements file paths
`Requirements` now throws an exception then a file is not found, rather than failing silently, so check your `Requirements` are pointing to files that exist.
Core JavaScript files paths have changed, so if you're referencing these, you'll have to update your file paths. Files previously in `admin/javascript` are now located in `admin/javascript/dist` and files previously located in `javascript` are now locatied in `javascript/dist`.
If you're not doing this already, we suggest looking into a JavaScript bundler like [Browserify](http://browserify.org/), to combine JavaScript files. SilverStripe core is moving away from `Requirements::combine_files` in favour of Browserify as of 4.0 and `Requirements::combine_files` is being considered for deprecation in future versions.
### Upgrading TinyMCE to 4.0
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 3.
In Framework 4.0 the user interface for TinyMCE has been trimmed down considerably, with certain toolbar
buttons removed from the default cms configuration. These include:
* 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 modifification of the default
tinymce config, or by creating custom configurations.
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 = 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']
]);
For more information on available options and plugins please refer to the
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`
### Implementation of ownership API
In order to support the recursive publishing of dataobjects, a new API has been developed to allow
developers to declare dependencies between objects. See the
[versioned documentation](/developer_guides/model/versioning) for more information.
By default all versioned dataobjects will automatically publish objects that they own.
### ChangeSet batch publishing
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
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 `<img>` 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 `<img>` will continue to work.
### Upgrading references to DBField and subclasses
A major change in 4.0 is the introduction of namespaced DBField subclasses. Now as a standard, all DBField subclasses have a `DB` prefix, are namespaced, and have an associative alias which omits the DB prefix.
This means that for the most part, code that worked in 3.0 won't need to be changed, although if you have any hard class literals which reference the old classes, they will need to be updated to point to the new namespaced classes.
An exception to this is any classes which once had the `SS_` prefix, which will now be instead prefixed with `DB`, and have an un-aliased prefix. For example `SS_Datetime` is now `DBDateTime`, and has the alias `DateTime` which may be used in config.
* 2016-05-09 [8b94dd8](https://github.com/silverstripe/silverstripe-framework/commit/8b94dd83dfb8a31f79cd001fc1672d76aa82ffab) Add CSRF to Campaign delete (Damian Mooyman)
* 2016-05-09 [3edbfd9](https://github.com/silverstripe/silverstripe-framework/commit/3edbfd944ebb6035c9ca681fa153dd1c3e017b05) Implement breadcrumbs via controllable state (Damian Mooyman)
* 2016-05-03 [8ce3d90](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 [6948267](https://github.com/silverstripe/silverstripe-framework/commit/6948267c41c486eb501049555df95903fb6573ec) LeftAndMain::menu_title can be overridden (#5423) (Damian Mooyman)
* 2016-05-02 [0d4c71f](https://github.com/silverstripe/silverstripe-framework/commit/0d4c71f393a9d73981b9cf25287e3213ffddeb1a) Filtering on invalid relation is no longer a silent error (Damian Mooyman)
* 2016-05-01 [46f69b0](https://github.com/silverstripe/silverstripe-cms/commit/46f69b0c0dd484d7c4ed007158b77cbcc2306cf6) set menu title without editing transifex masters (Damian Mooyman)
* 2016-04-27 [72fcfbf](https://github.com/silverstripe/silverstripe-framework/commit/72fcfbf4bc3344a3992a8e99ce9d0d506acac5bc) Campaign preview for images (Damian Mooyman)
* 2016-04-27 [1aa5492](https://github.com/silverstripe/silverstripe-cms/commit/1aa54924108a877e40fb3048eb87919b64028ac0) Cleanup SilverStripeNavigator and CMSPreview (Damian Mooyman)
* 2016-04-25 [daf5385](https://github.com/silverstripe/silverstripe-framework/commit/daf53858331179badd4ad6ab6e37e30dc56e2192) in behaviour to flysystem reporting for root folders (Damian Mooyman)
* 2016-04-22 [241cdfe](https://github.com/silverstripe/silverstripe-framework/commit/241cdfed1bb7ef9a1cab70f309283a8110bcbd4e) Allow actions to declare they are exempt from validation themselves (Hamish Friedlander)
* 2016-04-20 [e463fcc](https://github.com/silverstripe/silverstripe-framework/commit/e463fcce6eaa80719a4f14d59dca9ee56d1f3d12) redux-logger respects ss environment (Damian Mooyman)
* 2016-04-19 [19de22f](https://github.com/silverstripe/silverstripe-framework/commit/19de22f42714874abcebfe7ece192546f4d8dd1a) Moved frontend assets into admin/client/ (Ingo Schommer)
* 2016-04-19 [e2afcd0](https://github.com/silverstripe/silverstripe-framework/commit/e2afcd0acb1c65810b5a90ca2a9921f902c6a8e0) Implement back end for saving forms via react (Damian Mooyman)
* 2016-04-18 [dbd17bd](https://github.com/silverstripe/silverstripe-framework/commit/dbd17bd49a04a61d7b11d98f28f1b7307d25541c) Remove routing from silverstripe-component (Damian Mooyman)
* 2016-04-12 [31247a6](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 [5900893](https://github.com/silverstripe/silverstripe-framework/commit/590089375327aa80c6c92007462b9bfa439ad207) Implement campaign list view (Damian Mooyman)
* 2016-04-11 [2d16d69](https://github.com/silverstripe/silverstripe-framework/commit/2d16d69ddb863b55de3a94fd83a49a3f666354af) Use base data class for ChangeSetItem#ObjectClass, not just ClassName (Hamish Friedlander)
* 2016-04-05 [db6251a](https://github.com/silverstripe/silverstripe-cms/commit/db6251a9b74886ddb2f15bcb28b393c2c9ae0a73) Update to use new travis-artifacts (Damian Mooyman)
* 2016-04-01 [716baa6](https://github.com/silverstripe/silverstripe-cms/commit/716baa6b1fb55c25112066a6b1a3c10a6be38c0b) Support renamed Versioned API (Damian Mooyman)
* 2016-03-30 [87ee436](https://github.com/silverstripe/silverstripe-framework/commit/87ee4365e7f51089742d1ca24687e25c3b251fb8) Implement ChangeSets for batch publishing (Damian Mooyman)
* 2016-03-30 [64b7a84](https://github.com/silverstripe/silverstripe-framework/commit/64b7a84bb2be4de93a21a7263dc8529085a3eba3) SapphireTest::logInWithPermission now supports multiple permissions (Damian Mooyman)
* 2016-03-30 [29c5eff](https://github.com/silverstripe/silverstripe-framework/commit/29c5eff433ff7a62bbf66c7dd3bd0e31b6a368ed) Add $context method to DataObject::can for consistency with canCreate() (Damian Mooyman)
* 2016-03-30 [501b2f1](https://github.com/silverstripe/silverstripe-framework/commit/501b2f180913cb6d3454fdebc868a929ccb89f28) CMSMenu::get_cms_classes() is now sorted (Damian Mooyman)
* 2016-03-28 [d22ad70](https://github.com/silverstripe/silverstripe-cms/commit/d22ad706a99504680ca1fdf8ef482e13a7441ab4) Support new DataObject::can() signature (Damian Mooyman)
* 2016-03-22 [094745e](https://github.com/silverstripe/silverstripe-framework/commit/094745ec0ffe24ffd9c5b36d0188ec90ad2bb8b5) Formally support custom ownership relations (Damian Mooyman)
* 2016-03-21 [2d56ea2](https://github.com/silverstripe/silverstripe-framework/commit/2d56ea278aaeebf49be80b4a40f718caf7cffba2) Move ss buttons plugin out of thirdparty (Damian Mooyman)
* 2016-03-17 [4cc7b08](https://github.com/silverstripe/silverstripe-cms/commit/4cc7b0806d12166c72f1e1bdf829d0c14e7beaf2) Update to use new Versioned API (Damian Mooyman)
* 2016-03-09 [067d44a](https://github.com/silverstripe/silverstripe-cms/commit/067d44ac6ca2bf6353a8efdbc8e00266bd42fa9f) Update link tracking for image shortcodes (Damian Mooyman)
* 2016-03-07 [14d74f7](https://github.com/silverstripe/silverstripe-siteconfig/commit/14d74f7ae369483edab421b679d39c3c2955e888) Refactor for removal of CMSForm class (Damian Mooyman)
* 2016-03-07 [634e86f](https://github.com/silverstripe/silverstripe-framework/commit/634e86f949e0ced1eb5e14c9bb7ec43ecc52652c) Include File.ParentID in fulltext search results (Damian Mooyman)
* 2016-03-02 [0848aca](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 [b196d33](https://github.com/silverstripe/silverstripe-framework/commit/b196d33bfa067e11c8a74771ef0aa6898548136a) Ownership API (Damian Mooyman)
* 2016-02-25 [c275c21](https://github.com/silverstripe/silverstripe-framework/commit/c275c21057f8739e6d881625812a5d6fe39af663) Extensible::invokeWithExtension has same method signature as Extensible::extend (Damian Mooyman)
* 2016-02-21 [de6db9f](https://github.com/silverstripe/silverstripe-cms/commit/de6db9f5c6f32eb8b6efd72e78d7ff2fe212c772) Mark image tracking as owned (Damian Mooyman)
* 2016-02-16 [99394a8](https://github.com/silverstripe/silverstripe-cms/commit/99394a84d0ae1611754353423723a96601cfa2f0) Remove references to class aliases; Use correct classname (Damian Mooyman)
* 2016-02-12 [f20ad43](https://github.com/silverstripe/silverstripe-framework/commit/f20ad434ce66d0102a4bd43c66df517ef385aa2b) Update TinyMCE to 4.x (Damian Mooyman)
* 2016-01-26 [1c907dd](https://github.com/silverstripe/silverstripe-cms/commit/1c907dd227a41be8cd25ba0c751f6aa7a308ebfe) Support versioned File management (Damian Mooyman)
* 2016-01-26 [510c556](https://github.com/silverstripe/silverstripe-framework/commit/510c55673972ea5aeaca40bc6ef9166fb2b339c3) File has Versioned extension (Damian Mooyman)
* 2016-01-25 [9662d93](https://github.com/silverstripe/silverstripe-framework/commit/9662d938f385a24c00d8613fef9bd9340081fd44) remove obsolete class loaders from test listeners (Damian Mooyman)
* 2016-01-25 [17ee318](https://github.com/silverstripe/silverstripe-cms/commit/17ee318d06edb37229634206a5f1dd4e032bcdd8) VirtualPage permissions now can be set independently of the mirrored page (Damian Mooyman)
* 2016-01-14 [8e1ae55](https://github.com/silverstripe/silverstripe-framework/commit/8e1ae55ff67647c495c4e1d528907d280d78ad37) Enable single javascript files to declare that they include other files (Damian Mooyman)
* 2015-12-21 [99de74d](https://github.com/silverstripe/silverstripe-framework/commit/99de74d69e1bf39a43890487bee3e441b8b01105) Add isDisabledValue to SelectField (Damian Mooyman)
* 2015-12-13 [62f183d](https://github.com/silverstripe/silverstripe-framework/commit/62f183d03792c1bd1e0e2e385ca587b94de08d83) before/afterExtend now support parameters passed by reference (Damian Mooyman)
* 2015-12-09 [037467b](https://github.com/silverstripe/silverstripe-framework/commit/037467beae90b92598500c27ecfe5d1fcbfea883) Asset Access Control implementation (Damian Mooyman)
* 2015-11-26 [c50dc06](https://github.com/silverstripe/silverstripe-cms/commit/c50dc06401b7ea08bee4eef81b33586a2e2c1bbd) Update ErrorPage to use FilesystemGeneratedAssetHandler (Damian Mooyman)
* 2015-11-26 [ce28259](https://github.com/silverstripe/silverstripe-framework/commit/ce28259c5f21620db2a61f79fd6479be60a2d8c4) Replace CacheGeneratedAssetHandler with FlysystemGeneratedAssetHandler (Damian Mooyman)
* 2015-10-13 [227e2ba](https://github.com/silverstripe/silverstripe-cms/commit/227e2ba1628cc8969a5367e6aab3e20f253c7a82) Move ErrorPage to new generated files API (Damian Mooyman)
* 2015-10-12 [f9892c6](https://github.com/silverstripe/silverstripe-framework/commit/f9892c628c8709333969acb3c8ace4cb820b9987) Generated files API (Damian Mooyman)
* 2015-09-23 [f26c220](https://github.com/silverstripe/silverstripe-framework/commit/f26c220d865786725f85860d7848cbd8d137c6c0) Support trait loading (Damian Mooyman)
* 2015-09-16 [2b1e5ee](https://github.com/silverstripe/silverstripe-framework/commit/2b1e5ee071e72494c02a1c04a508b54e401afe35) Enable DataList::sort to support composite field names (similar to filter) (Damian Mooyman)
* 2015-09-15 [be23989](https://github.com/silverstripe/silverstripe-framework/commit/be239896d32a6d4437d53ce67e1ccf71847cc845) Refactor of File / Folder to use DBFile (Damian Mooyman)
* 2015-09-14 [051c69b](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 [10dece6](https://github.com/silverstripe/silverstripe-framework/commit/10dece653f36d65a5649014464d40df85833c49f) Consolidate DataObject db methods (Damian Mooyman)
* 2015-09-04 [ee639de](https://github.com/silverstripe/silverstripe-framework/commit/ee639deedbc3330ea419ee20a6bcd6a04e576bd2) showqueries=1 now shows parameters (Damian Mooyman)
* 2015-09-04 [9872fbe](https://github.com/silverstripe/silverstripe-framework/commit/9872fbef4d3ae8f649451febb9d0e30ed6dcf843) Refactor CompositeDBField into an abstract class (Damian Mooyman)
* 2015-09-03 [ac27836](https://github.com/silverstripe/silverstripe-framework/commit/ac27836d2b3ebe286464744105e8628ec170f236) Implementation of RFC-1 Asset Abstraction (Damian Mooyman)
* 2015-08-28 [f6fe142](https://github.com/silverstripe/silverstripe-framework/commit/f6fe1427c286fa5fc58b83cd10d84bf5930889e2) Making ArrayList (and others) more consistent with DataList (Daniel Hensby)
* 2015-07-23 [1b8d295](https://github.com/silverstripe/silverstripe-framework/commit/1b8d2957673f50ec7c7e52bfb70980aa28519634) Shift to Monolog for error reporting and logging (Sam Minnee)
* 2015-07-16 [40cc567](https://github.com/silverstripe/silverstripe-framework/commit/40cc567c368cc8bc633c2486ca2c420bb1256924) Force resampling by default (Jonathon Menz)
* 2015-06-17 [4aa84f3](https://github.com/silverstripe/silverstripe-cms/commit/4aa84f3dd2856fb0caa597018a7f668f6e1265eb) make DataObject::validate public (Damian Mooyman)
* 2015-06-17 [55170a0](https://github.com/silverstripe/silverstripe-framework/commit/55170a0b746e09c59fc6a0d78f2461bfea5f835c) make DataObject::validate public (Damian Mooyman)
* 2015-06-12 [513f019](https://github.com/silverstripe/silverstripe-framework/commit/513f0191fba490275bb15e1a5d5f3c4b0c9cb5a5) default behaviour for Director::getAbsoluteUrl (Damian Mooyman)
* 2015-06-08 [3bc76e6](https://github.com/silverstripe/silverstripe-cms/commit/3bc76e69fb7e6da4803707c235431a80652da4f3) Formalise new DataObject::canCreate argument (Damian Mooyman)
* 2015-06-08 [e9d4863](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 [922d02f](https://github.com/silverstripe/silverstripe-framework/commit/922d02f5356d5904debaf10003477cdd00306192) Enable filters to perform 'IS NULL' or 'IS NOT NULL' checks (Damian Mooyman)
* 2015-03-25 [7f5608c](https://github.com/silverstripe/silverstripe-framework/commit/7f5608c599106a2b15509168cd575e1f62b133a5) Public visibility on DataQuery::selectField (Uncle Cheese)
* 2015-02-13 [bdb1a95](https://github.com/silverstripe/silverstripe-framework/commit/bdb1a957583662fb0c463f61fee70cfefd26c988) Cleanup and refactor of select fields (Damian Mooyman)
### Features and Enhancements
* 2016-04-11 [21a1065](https://github.com/silverstripe/silverstripe-framework/commit/21a106532922fb9533c6be3c156015ba0149c2e3) Add createEndpointFetcher to backend (Sam Minnee)
* 2016-04-03 [a17c5cb](https://github.com/silverstripe/silverstripe-framework/commit/a17c5cb148cbf08b59b846586fc6707cf6da5b1b) Expose silverstripe-backend for modules to access. (Sam Minnee)
* 2016-03-27 [1e7281a](https://github.com/silverstripe/silverstripe-framework/commit/1e7281a2ba70b6281e6e72070e2fdb559b406c98) Add onBeforeRender() hook to GridField (Loz Calver)
* 2016-03-02 [ae31619](https://github.com/silverstripe/silverstripe-framework/commit/ae3161969567215670574f0cca273a124586fa40) styles for main nav (Paul Clarke)
* 2016-02-23 [375bbf9](https://github.com/silverstripe/silverstripe-framework/commit/375bbf954e0b1d24e6119edec267608a8d0ec85c) and fix for issue #3186 (Tyler Kidd)
* 2016-02-22 [01c8d38](https://github.com/silverstripe/silverstripe-framework/commit/01c8d388854466642b6fcc624d6b35b39e44bf7a) Passing $tmpFile to extension. (Taras Yemtsov)
* 2016-02-04 [bab1f23](https://github.com/silverstripe/silverstripe-framework/commit/bab1f230bfccf8f7fcc66bc38630eb4b2c1c2c4a) Cross device "Remember Me" feature (Jean-Fabien Barrois)
* 2015-12-22 [c9ba0e4](https://github.com/silverstripe/silverstripe-framework/commit/c9ba0e48fc927557b34faec5c672a80709ad0632) Add ViewableData::setFailover() to refresh detected methods when changing failover (Loz Calver)
* 2015-05-27 [223466a](https://github.com/silverstripe/silverstripe-framework/commit/223466a8b8554046a0525de5b794c702cb56fdae) Configurable file version prefix (Jonathon Menz)
* 2015-05-01 [9f91b47](https://github.com/silverstripe/silverstripe-framework/commit/9f91b4782513b703926a9ff90d6248bf4dc3059d) Update SS_ConfigStaticManifest to use Reflection (micmania1)
### Bugfixes
* 2016-05-12 [a61d0a2](https://github.com/silverstripe/silverstripe-framework/commit/a61d0a2f0babedd4cc8bc639e5c4890eaf0d3351) Persistant Loading... indicator when no campaigns yet in admin (Hamish Friedlander)
* 2016-05-12 [7393995](https://github.com/silverstripe/silverstripe-cms/commit/7393995836de89509aa7643d64b322c289ff6b7a) preview in Asset Admin (Hamish Friedlander)
* 2016-05-10 [d1df67d](https://github.com/silverstripe/silverstripe-framework/commit/d1df67d3089a51c0db63fbaed869738453bee482) SQLSelect count methods now cast to int (fixes #5498) (Loz Calver)
* 2016-05-09 [1263bf8](https://github.com/silverstripe/silverstripe-cms/commit/1263bf8a04d4873037b9fee5fecf7d1a5b8c2f70) Not being able to save when viewing page settings (Hamish Friedlander)
* 2016-05-09 [2af63a8](https://github.com/silverstripe/silverstripe-cms/commit/2af63a84efd1b0a91985ea877fc65447c198ea02) add_i18n_javascript calls not being updated after JS move (Hamish Friedlander)
* 2016-05-09 [b2786c2](https://github.com/silverstripe/silverstripe-framework/commit/b2786c228b2384acab7ef99b6fce66e352895f15) add_i18n_javascript calls not being updated after JS move (Hamish Friedlander)
* 2016-05-05 [b4cd617](https://github.com/silverstripe/silverstripe-framework/commit/b4cd617ee339ab1ecdf927523724136fe68096d9) Renaming to HTMLEditorConfig. (Frank Mullenger)
* 2016-04-21 [b2e8fd9](https://github.com/silverstripe/silverstripe-framework/commit/b2e8fd96ec20b4b1709b89d920ad99d3093f8093) Fix form schema to use correct ID values (Damian Mooyman)
* 2016-04-13 [7e37abe](https://github.com/silverstripe/silverstripe-cms/commit/7e37abeb217cd0e214ad1e291d6e965fc2b40cce) Fix chosen dropdown on settings being cropped (Damian Mooyman)
* 2016-04-07 [0aec89d](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 [5a86f42](https://github.com/silverstripe/silverstripe-framework/commit/5a86f4232e42232bcb5fa61e4383561a64133070) Fix error when using search bar (Damian Mooyman)
* 2016-04-03 [640691f](https://github.com/silverstripe/silverstripe-framework/commit/640691f544d21ca86b8c995892fbb3dda45f6bdf) fix missing language on non-global configs (Damian Mooyman)
* 2016-03-31 [d8d005d](https://github.com/silverstripe/silverstripe-framework/commit/d8d005d1e27d0105fade2c4758f2a695cb09a4e4) move test file to correct folder and fix class_exists (Damian Mooyman)
* 2016-03-31 [e8a68c4](https://github.com/silverstripe/silverstripe-framework/commit/e8a68c42ce022f46c25688c3538e081c30d50a19) Prevent live manifest loading files from nested test directories (Damian Mooyman)
* 2016-03-30 [c69e55c](https://github.com/silverstripe/silverstripe-framework/commit/c69e55c49c1a9310f1c6739444bd101b474ba3c6) Fix issue with SapphireTest::assertDOSEquals incorrectly passing on empty set (Damian Mooyman)
* 2016-03-29 [7907d20](https://github.com/silverstripe/silverstripe-framework/commit/7907d20da7af4c2945fa2ced2963eb938bee4f3c) changing all cases of filesize spelling to file size (Tim Kung)
* 2016-03-22 [46b35ec](https://github.com/silverstripe/silverstripe-cms/commit/46b35ecb0e4336991e374226983f3916834af1df) Changes to support php7 and new DBFields (Sam Minnee)
* 2016-03-17 [96c586b](https://github.com/silverstripe/silverstripe-framework/commit/96c586b39d8c06d439e67a2a6df33ada97fe8dd1) only output $CleartextPassword if it has a value (Christopher Darling)
* 2016-03-09 [3673a5e](https://github.com/silverstripe/silverstripe-framework/commit/3673a5e14116b60601a3fce1eae9eb5c786a4e08) Inserting a 'Download a file' without selecting an image (Mike Cochrane)
* 2016-03-09 [0b81bbe](https://github.com/silverstripe/silverstripe-framework/commit/0b81bbef22a0145e1972973761248070f0bd1c66) attempt to access https iframe from http interface (Mike Cochrane)
* 2016-03-09 [a3ee9ec](https://github.com/silverstripe/silverstripe-framework/commit/a3ee9ece90f17eda2f9d2021f8e47c74af8d3890) avoid javascript error when preview is https (Mike Cochrane)
* 2016-03-09 [70062eb](https://github.com/silverstripe/silverstripe-cms/commit/70062ebc9cef301f2742ee08d2fade1bb7a41866) 'Settings' fields being overwritten by 'Content' fields (Mike Cochrane)
* 2016-03-06 [3d99ed2](https://github.com/silverstripe/silverstripe-framework/commit/3d99ed24ac3bfcd7afaa7210b654b65c978a8817) Better filtering of versionable tables during SQL augmentation (Damian Mooyman)
* 2016-03-03 [4b5bd2d](https://github.com/silverstripe/silverstripe-framework/commit/4b5bd2d744c4db7e49c65a21023024d22913b1f6) cleaner can* methods for Member (Nicolaas)
* 2016-03-01 [3317d34](https://github.com/silverstripe/silverstripe-framework/commit/3317d342769e7f94d063a9cf29ce1f4350326243) Prevent fatal errors during test failure halt tests (Damian Mooyman)
* 2016-02-23 [0ee1564](https://github.com/silverstripe/silverstripe-framework/commit/0ee1564896be9a1da97d61f5141d6cffe416a7e5) Fix deprecated API usage in DataFormatter API and DataObjectTest (Damian Mooyman)
* 2016-02-12 [a34f17f](https://github.com/silverstripe/silverstripe-framework/commit/a34f17f83970f4bfb04e6c80188ca36a29125dd2) for #5028: Ensure empty YML configs don't break when merging them in (i.e. make sure it's traversable before foreach'ing over it). (Patrick Nelson)
* 2016-01-26 [b1b403c](https://github.com/silverstripe/silverstripe-cms/commit/b1b403cd089ee2fcb6ed28d62fa3e81f00a18f4d) Borders on CMS Actions (Daniel Hensby)
* 2016-01-11 [122784b](https://github.com/silverstripe/silverstripe-framework/commit/122784b1cb93c5892f1f02cd50cc79297177ea19) OptionsetField input has required #4901 (torleif)
* 2016-01-11 [288c8a8](https://github.com/silverstripe/silverstripe-framework/commit/288c8a8b272af85cf1b62d82b5633e16bbf44d15) OptionsetField returns valid HTML #4901 (torleif)
* 2016-01-06 [bf6337c](https://github.com/silverstripe/silverstripe-cms/commit/bf6337c59a291124985a4ea6b490c304193d7b25) Changes needed to respond to whitespace changes. (Sam Minnee)
* 2016-01-06 [4aa5053](https://github.com/silverstripe/silverstripe-framework/commit/4aa50534d566722df81bfac8efd2c3db7ed92596) Fixes needed to adapt to whitespace changes. (Sam Minnee)
* 2015-12-22 [24660af](https://github.com/silverstripe/silverstripe-framework/commit/24660afabd7ddcaf87aa859df396862cecea2ef8) Parameters passed to includes overwrite all scopes (fixes #2617) (Loz Calver)
* 2015-12-22 [b6627a2](https://github.com/silverstripe/silverstripe-framework/commit/b6627a2f7c045c040ab51512af981dad08780418) Change Requirements::include_in_response() to not add empty (Jacob Buck)
* 2015-12-02 [ed76b3f](https://github.com/silverstripe/silverstripe-siteconfig/commit/ed76b3f56c9cf4b81a51b144a843130f89bd6e1d) Fix yml and behat (Damian Mooyman)
* 2015-12-02 [387eb22](https://github.com/silverstripe/silverstripe-siteconfig/commit/387eb2277bd76e53aca9e43e249c90bf95923f91) Fix CI (Damian Mooyman)
* 2015-11-04 [fb43e59](https://github.com/silverstripe/silverstripe-cms/commit/fb43e59b0024ee5dea3b64447d1075ec151ac11c) Setting hide_ancestor=true causes a random page type to be hidden (Loz Calver)
* 2015-10-15 [27a8afe](https://github.com/silverstripe/silverstripe-framework/commit/27a8afe78bae34a4e0cbd6fb225840312dc8fa5f) Fix regressions in fulltextsearch (Damian Mooyman)
* 2015-10-14 [d884c85](https://github.com/silverstripe/silverstripe-framework/commit/d884c859d189a0803974636fa6f699cbc474233a) Fix file link tracking for new asset abstraction (Damian Mooyman)
* 2015-09-28 [1f632a1](https://github.com/silverstripe/silverstripe-framework/commit/1f632a10c9661d7f7eb27bd1fcf7e03081e8010e) Replace direct reference to $_REQUEST['url'] with request object getter (Damian Mooyman)
* 2015-09-28 [8e3f549](https://github.com/silverstripe/silverstripe-cms/commit/8e3f549b19bd4930f2fa80a7fa6a528cdc5e4011) Fix regressions in CMS from db field changes (Damian Mooyman)
* 2015-09-04 [fa8702f](https://github.com/silverstripe/silverstripe-framework/commit/fa8702f0c8b22581e1cbe48fc3741a146b546bc9) Fix reference to missing Debug::loadErrorHandlers() (Damian Mooyman)
* 2015-08-28 [f5af0c8](https://github.com/silverstripe/silverstripe-framework/commit/f5af0c85bade63174d282162a6c99fb37461b433) Don’t use SplFixedArray in PHP 7. (Sam Minnee)
* 2015-08-27 [083799e](https://github.com/silverstripe/silverstripe-framework/commit/083799ec03899b8388352849cbdc42e4c74fbf4d) Minimal data-model changes to support PHP7. (Sam Minnee)
* 2015-08-27 [12a83d7](https://github.com/silverstripe/silverstripe-framework/commit/12a83d70aef7a36c5b5b403b86d4864402275eaa) Removed PHP4 syntax from Diff.php (Sam Minnee)
* 2015-08-27 [680b19a](https://github.com/silverstripe/silverstripe-framework/commit/680b19a1da75aa940da4ce4283710eff337139c6) Correct PHP4-style constructors in SimpleTest. (Sam Minnee)
* 2015-08-14 [e13aebc](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 [e94c0fa](https://github.com/silverstripe/silverstripe-framework/commit/e94c0fa221a65fdac1a6604b839901e438592093) extraClass() method to match parent method (Florian Thoma)
* 2015-04-28 [cadc02b](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-03-10 [622ad54](https://github.com/silverstripe/silverstripe-framework/commit/622ad54c5b21dc4e12914181e74dacfb47b8e151) Fix yaml generation to conform to version 1.1, accepted by transifex (Damian Mooyman)
* 2014-12-15 [1f7e627](https://github.com/silverstripe/silverstripe-framework/commit/1f7e627a50a769a0ebc00dbf8c2b8adb686e5afe) How to folder on forms (Cam Findlay)
* 2014-12-10 [6ff6c6f](https://github.com/silverstripe/silverstripe-cms/commit/6ff6c6f572e2981df136d2665dcfe0e8a241451c) Removed multifile thirdparty library which isn't used any more in ss. (micmania1)
* 2014-12-08 [ddd8330](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 [1f181a6](https://github.com/silverstripe/silverstripe-framework/commit/1f181a65c920f3f650889bb3df2be4f93f8a8d35) use GFMD code blocks to fix code formatting consistency. (Cam Findlay)
* 2014-12-04 [00e029f](https://github.com/silverstripe/silverstripe-framework/commit/00e029f574f09e47f059d314d35392ecde3d9092) check for suite existence in endCurrentTest (Will Morgan)
* 2014-10-29 [61a9b2a](https://github.com/silverstripe/silverstripe-framework/commit/61a9b2a41a7ad6f4b47f65d4badb9e583469fda1) GridFieldPaginator now prevents viewing pages with no results (fixes #3192) (Loz Calver)