Merge pull request #7412 from open-sausages/pulls/4.0/fun-times-in-thumbnails

Enhancement add notice for MigrateFileTask if FileMigrationHelper doesn't exist
This commit is contained in:
Damian Mooyman 2017-10-02 16:59:40 +13:00 committed by GitHub
commit b4910e133c
3 changed files with 76 additions and 18 deletions

View File

@ -0,0 +1,57 @@
summary: Manage migration of legacy files to the new database structure
# File migration
Since the structure of `File` dataobjects has changed between 3.0 and 4.0, a new task `MigrateFileTask`
has been added to assist in migration of legacy files.
You can run this task on the command line:
```
$ ./framework/sake dev/tasks/MigrateFileTask
```
This task will also support migration of existing File DataObjects to file versioning. Any
pre-existing File DataObjects will be automatically published to the live stage, to ensure
that previously visible assets remain visible to the public site.
If additional security or visibility rules should be applied to File dataobjects, then
make sure to correctly extend `canView` via extensions.
## Automatic migration
Migration can be invoked by either this task, or can be configured to automatically run during dev build
by setting the `File.migrate_legacy_file` config to true. However, it's recommended that this task is
run manually during an explicit migration process, as this process could potentially consume large
amounts of memory and run for an extended time.
```yml
SilverStripe\Assets\File:
migrate_legacy_file: true
```
## Migration of thumbnails
If you have the [asset admin](https://github.com/silverstripe/silverstripe-asset-admin) module installed
this will also ensure that thumbnails for these images are generated when running 'MigrateFileTask'.
Existing thumbnails will not be migrated however, and must be re-generated for use in the CMS.
Note: Thumbnails can be regenerated on a one-by-one basis within the CMS by re-saving it
within the file edit details form.
## Discarded files during migration
Note that any File dataobject which is not in the `File.allowed_extensions` config will be deleted
from the database during migration. Any invalid file on the filesystem will not be deleted,
but will no longer be attached to a dataobject anymore, and should be cleaned up manually.
To disable this, set the following config:
```yaml
SilverStripe\Assets\FileMigrationHelper:
delete_invalid_files: false
```
Note that pre-existing security solutions for 3.x (such as
[secure assets module](https://github.com/silverstripe/silverstripe-secureassets))
are incompatible with core file security.

View File

@ -829,24 +829,16 @@ guide for configuration instruction.
#### Migrating File DataObject from 3.x to 4.0 #### Migrating File DataObject from 3.x to 4.0
Since the structure of `File` dataobjects has changed, a new task `MigrateFileTask` has been added to assist Since the structure of `File` dataobjects has changed between 3.0 and 4.0, a new task `MigrateFileTask`
in migration of legacy files. Migration can be invoked by either this task, or can be configured to automatically has been added to assist in migration of legacy files.
run during dev build by setting the `File.migrate_legacy_file` config to true. However, it's recommended that
this task is run manually during an explicit migration process, as this process could potentially consume
large amounts of memory and run for an extended time.
You can run this task on the command line:
```yml ```
SilverStripe\Assets\File: $ ./framework/sake dev/tasks/MigrateFileTask
migrate_legacy_file: true
``` ```
This task will also support migration of existing File DataObjects to file versioning. Any For more information on this task please consult the [file migration documentation](/developer_guides/files/file_migration).
pre-existing File DataObjects will be automatically published to the live stage, to ensure
that previously visible assets remain visible to the public site.
If additional security or visibility rules should be applied to File dataobjects, then
make sure to correctly extend `canView` via extensions.
Note that any File dataobject which is not in the `File.allowed_extensions` config will be deleted Note that any File dataobject which is not in the `File.allowed_extensions` config will be deleted
from the database during migration. Any invalid file on the filesystem will not be deleted, from the database during migration. Any invalid file on the filesystem will not be deleted,
@ -859,10 +851,6 @@ SilverStripe\Assets\FileMigrationHelper:
delete_invalid_files: false delete_invalid_files: false
``` ```
Note that pre-existing security solutions for 3.x (such as
[secure assets module](https://github.com/silverstripe/silverstripe-secureassets))
are incompatible with core file security.
#### Upgrade code which acts on `Image` #### Upgrade code which acts on `Image`
As all image-specific manipulations has been refactored from `Image` into an `ImageManipulations` trait, which As all image-specific manipulations has been refactored from `Image` into an `ImageManipulations` trait, which

View File

@ -2,6 +2,7 @@
namespace SilverStripe\Dev\Tasks; namespace SilverStripe\Dev\Tasks;
use SilverStripe\AssetAdmin\Helper\ImageThumbnailHelper;
use SilverStripe\ORM\DB; use SilverStripe\ORM\DB;
use SilverStripe\Assets\FileMigrationHelper; use SilverStripe\Assets\FileMigrationHelper;
use SilverStripe\Dev\BuildTask; use SilverStripe\Dev\BuildTask;
@ -21,11 +22,23 @@ class MigrateFileTask extends BuildTask
public function run($request) public function run($request)
{ {
if (!class_exists(FileMigrationHelper::class)) {
DB::alteration_message("No file migration helper detected", "notice");
return;
}
$migrated = FileMigrationHelper::singleton()->run(); $migrated = FileMigrationHelper::singleton()->run();
if ($migrated) { if ($migrated) {
DB::alteration_message("{$migrated} File DataObjects upgraded", "changed"); DB::alteration_message("{$migrated} File DataObjects upgraded", "changed");
} else { } else {
DB::alteration_message("No File DataObjects need upgrading", "notice"); DB::alteration_message("No File DataObjects need upgrading", "notice");
} }
if (!class_exists(ImageThumbnailHelper::class)) {
DB::alteration_message("No image thumbnail helper detected", "notice");
return;
}
ImageThumbnailHelper::singleton()->run();
} }
} }