7.4 KiB
4.6.0
Overview
- MySQL tables are auto-converted from MyISAM to InnoDB
- Editing files directly in the insert-media modal
- MIME Type validation now a core module
- Solr no longer indexes draft/restricted content
- Simplify customisation of ModelAdmin
- Login forms module ships with installer
MySQL tables are auto-converted from MyISAM to InnoDB
Beginning with 4.4.0, our minimum requirement for MySQL is 5.6 (since MySQL 5.5 end of life reached in December 2018). Starting with MySQL 5.6, InnoDB is the new default storage engine, replacing the older MyISAM engine.
Silverstripe CMS already creates InnoDB tables by default,
mainly in order to benefit from their better support for database transactions.
Before MySQL 5.6, InnoDB didn't have a FULLTEXT
search index,
requiring us to enforce the MyISAM engine when devs opted into this index type
in their particular setup. There are a few ways in which this opt-in can happen:
- Adding the FulltextSearchable extension to a DataObject, as described in our search docs
- Defining
'type' => 'fulltext'
inDataObject::$db
column definitions - Implementing DBIndexable
on a custom
DBField
subclass. - Setting
'ENGINE=MyISAM'
inDataObject::$create_table_options
This search index is not required to enable simple text search in the "Pages" section of the CMS, or any ModelAdmin implementations. We generally recommend to choose a more powerful search addon (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,
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
before upgrading, and test upgrades on non-production systems first.
Our tests indicate that indexes with thousands of records and screen pages
worth of content (15MB index size) are converted in a few seconds.
In order to opt out of this change, you can set the engine explicitly for your DataObject implementations:
use SilverStripe\ORM\Connect\MySQLSchemaManager;
use SilverStripe\ORM\DataObject;
class MyDataObject extends DataObject
{
private static $create_table_options = [
MySQLSchemaManager::ID => 'ENGINE=MyISAM'
];
}
Editing files directly in the insert-media modal
Editors can now directly edit file details when selecting a file in an UploadField or when inserting media in a HTMLEditorField. The "image 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 asset administration area or in the "Insert Media Modal", you should do some regression testing when upgrading to make sure your customisations still work as expected.
If your project uses the popular jonom/focuspoint community module, you should upgrade it as well.
MIME Type validation now a core module
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 in the Silverstripe CMS doc for all the details.
File status icons in the file manager
Files and folders with permissions of either "Logged in users" or "Only these groups (choose from list)" now show a "Restricted access" icon in the file manager. These permissions can either be directly on the DataObject or they can be inherited from the parent folder.
Websites with the optional UserForms module installed will show a "Form submission" icon on files uploaded through a UserForm. UserForm uploaded files without a "Restricted access" icon show a "Form submission, unrestricted access" icon instead.
Solr no longer indexes draft/restricted content
At the time of this release a new version of the popular silverstripe/fulltextsearch module is also available, introducing more secure defaults. Most notably, draft and restricted content will no longer be indexed by default, due to a canView()
check being performed against an anonymous user prior to (re)indexing. Restricted content means that it has a permission level of either 'Logged-in users' or 'Only these groups'.
If your project uses this module, after upgrading your website, ensure that you run the Solr_Reindex
task on your production environment to remove previously indexed content that should no longer be there.
If your website requires draft or restricted content to be indexed, you can opt-out of the new secure defaults on a per-model basis.
This is a great opportunity to make sure that any custom indexes/search controllers in your project are correctly filtering results based on permissions and search visibility, which you can now achieve via a unified method (see SilverStripe\FullTextSearch\Search\Services\SearchableService::isSearchable()
.)
The silverstripe/fulltextsearch module readme provides additional information.
Simplify customisation of ModelAdmin
ModelAdmin::getEditForm()
has been split into smaller more discrete protected methods:
getGridField()
getGridFieldConfig()
.
Two matching extension hooks have been added as well:
updateGridField()
updateGridFieldConfig()
.
This will make it easier for developers to customise GridFields in their ModelAdmins.
Learn how to alter the ModelAdmin GridField or Form
Login forms module ships with installer
The silverstripe/login-forms
module is now part of the default installer. This alters the login form to provide
consistent styling and behaviour that's independent from the specifics in your project. Only new projects will
get the new login form. Older projects can manually require the silverstripe/login-forms
module to get the new
login form.
View the Silverstripe Login Forms readme on Github for more details.