Merge pull request #9558 from creative-commoners/pulls/4.6/improve-upgrade-notes

4.6.0 changelog improvements
This commit is contained in:
Serge Latyntsev 2020-06-26 07:31:28 +12:00 committed by GitHub
commit 0de4ab1390
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -9,40 +9,38 @@
## MySQL tables are auto-converted from MyISAM to InnoDB {#myisam} ## MySQL tables are auto-converted from MyISAM to InnoDB {#myisam}
Beginning with [4.4.0](https://docs.silverstripe.org/en/4/changelogs/4.4.0/), Beginning with [4.4.0](https://docs.silverstripe.org/en/4/changelogs/4.4.0/),
our minimum requirement for MySQL is 5.6 (since MySQL 5.5 end of life reached in December 2018). our minimum requirement for MySQL is 5.6 (since MySQL 5.5 end of life reached in
Starting with MySQL 5.6, [InnoDB](https://dev.mysql.com/doc/refman/5.6/en/innodb-introduction.html) December 2018). Starting with MySQL 5.6, [InnoDB](https://dev.mysql.com/doc/refman/5.6/en/innodb-introduction.html)
is the new default storage engine, is the new default storage engine, replacing the older [MyISAM](https://dev.mysql.com/doc/refman/5.6/en/myisam-storage-engine.html)
replacing the older [MyISAM](https://dev.mysql.com/doc/refman/5.6/en/myisam-storage-engine.html) engine. engine.
Silverstripe CMS already creates InnoDB tables by default, Silverstripe CMS already creates InnoDB tables by default, mainly in order to
mainly in order to benefit from their better support for database transactions. benefit from their better support for database transactions. Before MySQL 5.6,
Before MySQL 5.6, InnoDB didn't have a `FULLTEXT` search index, InnoDB didn't have a `FULLTEXT` search index, requiring us to enforce the MyISAM
requiring us to enforce the MyISAM engine when devs opted into this index type engine when devs opted into this index type in their particular setup. There are
in their particular setup. There are a few ways in which this opt-in can happen: a few ways in which this opt-in can happen:
* Adding the [FulltextSearchable](https://github.com/silverstripe/silverstripe-framework/blob/4/src/ORM/Search/FulltextSearchable.php) * Adding the [FulltextSearchable](https://github.com/silverstripe/silverstripe-framework/blob/4/src/ORM/Search/FulltextSearchable.php)
extension to a DataObject, as described in our extension to a DataObject, as described in our [search docs](https://docs.silverstripe.org/en/4/developer_guides/search/fulltextsearch/)
[search docs](https://docs.silverstripe.org/en/4/developer_guides/search/fulltextsearch/)
* Defining `'type' => 'fulltext'` in `DataObject::$db` column definitions * Defining `'type' => 'fulltext'` in `DataObject::$db` column definitions
* Implementing [DBIndexable](https://github.com/silverstripe/silverstripe-framework/blob/4/src/ORM/FieldType/DBIndexable.php) * Implementing [DBIndexable](https://github.com/silverstripe/silverstripe-framework/blob/4/src/ORM/FieldType/DBIndexable.php)
on a custom `DBField` subclass. on a custom `DBField` subclass.
* Setting `'ENGINE=MyISAM'` in `DataObject::$create_table_options` * Setting `'ENGINE=MyISAM'` in `DataObject::$create_table_options`
This search index is not required to enable simple text search This search index is not required to enable simple text search in the "Pages"
in the "Pages" section of the CMS, or any ModelAdmin implementations. section of the CMS, or any ModelAdmin implementations. We generally recommend
We generally recommend to choose a more powerful choosing a more powerful [search addon](https://addons.silverstripe.org/add-ons?search=fulltext&type=&sort=downloads)
[search addon](https://addons.silverstripe.org/add-ons?search=fulltext&type=&sort=downloads)
(e.g. based on Solr or ElasticSearch) for website frontend search use cases. (e.g. based on Solr or ElasticSearch) for website frontend search use cases.
As of 4.6.0, a `dev/build` will automatically switch MyISAM tables to InnoDB, As of 4.6.0, a `dev/build` will automatically switch MyISAM tables to InnoDB,
which automatically recreates any indexes required. If you have large indexes, which automatically recreates any indexes required. If you have large indexes,
this can extend the duration if this task. As usual, back up your database this can extend the duration of this task. As usual, back up your database
before upgrading, and test upgrades on non-production systems first. before upgrading, and test upgrades on non-production systems first. Our tests
Our tests indicate that indexes with thousands of records and screen pages indicate that indexes with thousands of records and screen pages worth of
worth of content (15MB index size) are converted in a few seconds. content (15MB index size) are converted in a few seconds.
In order to opt out of this change, you can set the engine explicitly In order to opt out of this change, you can set the engine explicitly for your
for your DataObject implementations: DataObject implementations:
```php ```php
use SilverStripe\ORM\Connect\MySQLSchemaManager; use SilverStripe\ORM\Connect\MySQLSchemaManager;
@ -56,24 +54,37 @@ class MyDataObject extends DataObject
} }
``` ```
## Editing files directly in the insert-media modal{#in-modal-editing} ## Editing files directly in the Insert Media modal {#in-modal-editing}
Editors can now directly edit file details when selecting a file in an UploadField or when inserting media in a Authors can now directly edit file details when selecting a file in an
HTMLEditorField. The "image placement" and "file link" forms that show when inserting an image or a link in an `UploadField` or when inserting media in a `HTMLEditorField`. The "image
HTMLEditorField have been simplified. placement" and "file link" forms that show when inserting an image or a link in
an `HTMLEditorField` have been simplified.
This does mean that the order and structure of fields have changed somewhat. If you have customised the forms in the If you have customised the fields in the asset administration UI or Insert Media
asset administration area or in the "Insert Media Modal", you should do some regression testing when upgrading to modal, you will need to do some regression testing when upgrading, and will
make sure your customisations still work as expected. likely need to make some minor adjustments to your code.
If your project uses the popular [jonom/focuspoint](https://github.com/jonom/silverstripe-focuspoint) community Implementing the new Edit Details UI required filtering the fields generated in
module, you should upgrade it as well. `File::getCMSFields()` into two `Form`s. The implementation in 4.6.0 does not
expose a clear API to custom fields for differentiating between the `Form`s, and
by default any fields added via an extension will appear in both views. For the
time being, a simple way to resolve this is to check for the presence of the
`Editor.Details.Title` field and add your field based on this. See the community
module [jonom/focuspoint](https://github.com/jonom/silverstripe-focuspoint/pull/78/files#diff-cc697eb8345aa25a5f88c89d1a87ff6aR27-R34)
for an example implementation, and ensure you update this module during your
upgrade to 4.6.0 if you have it installed.
We intend to improve this pattern in a future release of Silverstripe CMS.
## MIME Type validation now a core module {#mime-validator} ## MIME Type validation now a core module {#mime-validator}
`silverstripe/mimevalidator` is now a core module and will ship by default on new projects. Projects referencing `silverstripe/recipe-core` will automatically install `silverstripe/mimevalidator` when they upgrade to 4.6.0. `silverstripe/mimevalidator` is now a core module and will ship by default on
new projects. Projects referencing `silverstripe/recipe-core` will automatically
install `silverstripe/mimevalidator` when they upgrade to 4.6.0.
Read [Allowed file types](Developer_Guides/Files/Allowed_file_types) in the Silverstripe CMS doc for all the details. Read [Allowed file types](Developer_Guides/Files/Allowed_file_types) in the
Silverstripe CMS doc for all the details.
<!--- Changes below this line will be automatically regenerated --> <!--- Changes below this line will be automatically regenerated -->