diff --git a/docs/en/04_Changelogs/4.0.0.md b/docs/en/04_Changelogs/4.0.0.md index 849b8ea2c..4057e7f90 100644 --- a/docs/en/04_Changelogs/4.0.0.md +++ b/docs/en/04_Changelogs/4.0.0.md @@ -34,15 +34,14 @@ guide developers in preparing existing 3.x code for compatibility with 4.0 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 4 as a base. See the - [silverstripe blog post](https://www.silverstripe.org/blog/a-frameworks-framework-why-silverstripe-4-will-use-bootstrap/). +* CMS CSS has been re-developed using bootstrap 4 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 - [into a new module](https://github.com/silverstripe/silverstripe-asset-admin/) + module called [asset-admin](https://github.com/silverstripe/silverstripe-asset-admin/). You'll need to add this to your `composer.json` to retain file management capabilities for your CMS authors. * 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 act. Dependencies between versioned objects can be declared using the new ownership API, so that developers can ensure that relational consistency is - maintained during publishing. This new system can be managed via the new "Campaigns" CMS section. - See the [silverstripe blog post](https://www.silverstripe.org/blog/campaigns-in-silverstripe-4/). + maintained during publishing. 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. * Themes are now configured to cascade, where you can specify a list of themes, and have the template engine @@ -187,15 +186,11 @@ After: 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 the [Template casting](/developer_guides/templates/casting) section for specific details. +instead, or if used in an actual XML file use `.CDATA` (see [template casting](/developer_guides/templates/casting)). #### Upgrade code that uses SQLQuery -Where your code once used SQLQuery you should now use SQLSelect in all cases, as this has been removed. - -See the [3.2.0](3.2.0) upgrading notes for details on how existing code should be upgraded. +Where your code once used SQLQuery you should now use SQLSelect in all cases, as this has been removed (check the [3.2.0](3.2.0) upgrading notes). #### New asset storage mechanism @@ -215,7 +210,7 @@ Note that this will not allow you to utilise certain file versioning features in legacy_paths: true -See [/developer_guides/files/file_management] for more information on how the new system works. +See our ["File Management" guide](/developer_guides/files/file_management) for more information. #### Migrating File DataObject from 3.x to 4.0 @@ -301,7 +296,6 @@ existed in the assets folder, and that the Filename of the DataObject was set to 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. Before: @@ -357,7 +351,6 @@ which are used to generate what are now called "variants" of assets, is now a ge 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: @@ -378,9 +371,7 @@ Before: Image::add_extension('MyImageExtension'); -Now image manipulations are implemented with a single method via a callback generator. - -After: +Now image manipulations are implemented with a single method via a callback generator: :::php @@ -444,8 +435,7 @@ These methods have been updated to include base fields (such as ID, ClassName, C well as composite DB fields. `DataObject::database_fields` does not have a second parameter anymore, and can be called directly on an object -or class. E.g. `Member::database_fields()` - +or class. E.g. `Member::database_fields()`. If user code requires the list of fields excluding base fields, then use custom_database_fields instead, or make sure to call `unset($fields['ID']);` if this field should be excluded. @@ -481,7 +471,7 @@ the `table_name` config can be applied to any DataObject class. In order to ensure you are using the correct table for any class a new [api:DataObjectSchema] service -is available to manage these mappings. +is available to manage these mappings (see [versioned documentation](/developer_guides/model/data_model_and_orm)). :::php @@ -494,15 +484,11 @@ is available to manage these mappings. } -See [versioned documentation](/developer_guides/model/data_model_and_orm) for more information. - #### Upgrade implementations of augmentSQL Since this method now takes a `SQLSelect` as a first parameter, existing code referencing the deprecated `SQLQuery` type will raise a PHP error. -E.g. - Before: :::php @@ -547,8 +533,6 @@ In case that user code must customise this filename, such as for extensions whic for any error page, the extension point `updateErrorFilename` can be used. This extension point should also be used to replace any `alternateFilepathForErrorcode` used. -E.g. - :::php class MyErrorPageExtension extends SiteTreeExtension { @@ -583,7 +567,7 @@ 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. +See our ["File Security" guide](/developer_guides/files/file_security) for more information. #### `ListboxField` is now multiple-only @@ -650,8 +634,6 @@ Rather than declaring the list of stages a model has, the constructor for `Versi 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. -For instance: - :::php /** @@ -696,7 +678,6 @@ By default all versioned dataobjects will automatically publish objects that the 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. @@ -718,7 +699,7 @@ This means that for the most part, code that worked in 3.0 won't need to be chan 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. -For example: +Before: class MyObject extends DataObject { private static $db = array( @@ -735,7 +716,7 @@ For example: } } -Will become: +After: use SilverStripe\ORM\FieldType\DBVarchar; @@ -768,7 +749,6 @@ In case you want to keep using RestfulService, you can use `Firesphere/silverstr #### Upgrading from deprecated 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 oscarotero. #### Admin URL can now be configured via custom Director routing rule