From be239896d32a6d4437d53ce67e1ccf71847cc845 Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Tue, 15 Sep 2015 14:52:02 +1200 Subject: [PATCH] API Refactor of File / Folder to use DBFile API Remove filesystem sync API to handle file manipulations --- _config.php | 7 +- _config/asset.yml | 2 + dev/Backtrace.php | 5 +- dev/FixtureBlueprint.php | 9 +- .../03_Forms/Field_types/05_UploadField.md | 387 +++--- .../05_Extending/01_Extensions.md | 5 +- .../14_Files/01_File_Management.md | 19 +- .../02_Developer_Guides/14_Files/02_Images.md | 67 +- docs/en/02_Developer_Guides/14_Files/index.md | 3 +- docs/en/04_Changelogs/4.0.0.md | 237 +++- filesystem/File.php | 959 +++++++------- filesystem/FileMigrationHelper.php | 105 ++ filesystem/Filesystem.php | 94 -- filesystem/Folder.php | 448 ++----- filesystem/GD.php | 578 --------- filesystem/GDBackend.php | 642 ++++++++++ filesystem/ImageManipulation.php | 767 +++++++++++ filesystem/ImagickBackend.php | 245 ++-- filesystem/Upload.php | 186 +-- filesystem/flysystem/AssetAdapter.php | 21 +- filesystem/flysystem/FlysystemAssetStore.php | 154 ++- filesystem/storage/AssetContainer.php | 72 +- filesystem/storage/AssetNameGenerator.php | 7 + filesystem/storage/AssetStore.php | 89 +- filesystem/storage/DBFile.php | 457 +++++++ .../storage/DefaultAssetNameGenerator.php | 32 +- forms/FileField.php | 41 +- forms/FormField.php | 20 + forms/HtmlEditorField.php | 905 ++++++++----- forms/UploadField.php | 125 +- javascript/HtmlEditorField.js | 11 +- model/DataDifferencer.php | 4 +- model/DataQuery.php | 4 +- model/Image.php | 1118 +---------------- model/Image_Backend.php | 134 +- model/fieldtypes/CompositeDBField.php | 5 +- model/fieldtypes/DBFile.php | 202 --- model/fieldtypes/ForeignKey.php | 35 +- oembed/Oembed.php | 20 +- parsers/ShortcodeHandler.php | 19 + parsers/ShortcodeParser.php | 8 +- tasks/CleanImageManipulationCache.php | 59 - tasks/MigrateFileTask.php | 23 + tests/control/ControllerTest.php | 2 +- tests/filesystem/AssetStoreTest.php | 204 ++- .../DefaultAssetNameGeneratorTest.php | 100 ++ tests/filesystem/FileMigrationHelperTest.php | 97 ++ tests/filesystem/FileMigrationHelperTest.yml | 21 + tests/filesystem/FileTest.php | 338 +++-- tests/filesystem/FileTest.yml | 37 +- tests/filesystem/FolderTest.php | 344 ++--- tests/filesystem/GDTest.php | 67 +- tests/filesystem/UploadTest.php | 198 ++- tests/filesystem/UploadTest.yml | 0 tests/filesystem/gdtest/nonimagedata.jpg | 1 + tests/forms/DBFileTest.php | 44 +- tests/forms/FormScaffolderTest.yml | 18 +- tests/forms/HtmlEditorFieldTest.php | 55 +- tests/forms/HtmlEditorFieldTest.yml | 10 +- ...le.jpg => HTMLEditorFieldTest-example.jpg} | Bin tests/forms/uploadfield/UploadFieldTest.php | 152 +-- tests/forms/uploadfield/UploadFieldTest.yml | 36 +- tests/model/DataDifferencerTest.php | 63 +- tests/model/DataDifferencerTest.yml | 30 +- tests/model/GDImageTest.php | 45 +- tests/model/ImageTest.php | 310 +---- tests/model/ImageTest.yml | 60 +- tests/model/ImagickImageTest.php | 15 +- ...uality.jpg => test-image-high-quality.jpg} | Bin ...quality.jpg => test-image-low-quality.jpg} | Bin .../{test_image.png => test-image.png} | Bin 71 files changed, 5540 insertions(+), 5037 deletions(-) create mode 100644 filesystem/FileMigrationHelper.php delete mode 100644 filesystem/GD.php create mode 100644 filesystem/GDBackend.php create mode 100644 filesystem/ImageManipulation.php create mode 100644 filesystem/storage/DBFile.php delete mode 100644 model/fieldtypes/DBFile.php create mode 100644 parsers/ShortcodeHandler.php delete mode 100644 tasks/CleanImageManipulationCache.php create mode 100644 tasks/MigrateFileTask.php create mode 100644 tests/filesystem/DefaultAssetNameGeneratorTest.php create mode 100644 tests/filesystem/FileMigrationHelperTest.php create mode 100644 tests/filesystem/FileMigrationHelperTest.yml delete mode 100644 tests/filesystem/UploadTest.yml create mode 100644 tests/filesystem/gdtest/nonimagedata.jpg rename tests/forms/images/{HTMLEditorFieldTest_example.jpg => HTMLEditorFieldTest-example.jpg} (100%) rename tests/model/testimages/{test_image_high-quality.jpg => test-image-high-quality.jpg} (100%) rename tests/model/testimages/{test_image_low-quality.jpg => test-image-low-quality.jpg} (100%) rename tests/model/testimages/{test_image.png => test-image.png} (100%) diff --git a/_config.php b/_config.php index 69b95fb55..25f2259a2 100644 --- a/_config.php +++ b/_config.php @@ -31,8 +31,11 @@ Object::useCustomClass('Datetime', 'SS_Datetime', true); */ define('MCE_ROOT', FRAMEWORK_DIR . '/thirdparty/tinymce/'); -ShortcodeParser::get('default')->register('file_link', array('File', 'link_shortcode_handler')); -ShortcodeParser::get('default')->register('embed', array('Oembed', 'handle_shortcode')); +ShortcodeParser::get('default') + ->register('file_link', array('File', 'handle_shortcode')) + ->register('embed', array('Oembed', 'handle_shortcode')); +// @todo +// ->register('dbfile_link', array('DBFile', 'handle_shortcode')) // Zend_Cache temp directory setting $_ENV['TMPDIR'] = TEMP_FOLDER; // for *nix diff --git a/_config/asset.yml b/_config/asset.yml index e51c01b69..a71ee605b 100644 --- a/_config/asset.yml +++ b/_config/asset.yml @@ -23,3 +23,5 @@ Injector: AssetNameGenerator: class: SilverStripe\Filesystem\Storage\DefaultAssetNameGenerator type: prototype + # Image mechanism + Image_Backend: GDBackend diff --git a/dev/Backtrace.php b/dev/Backtrace.php index 2397b5e33..6834d5c4d 100644 --- a/dev/Backtrace.php +++ b/dev/Backtrace.php @@ -161,12 +161,15 @@ class SS_Backtrace { /** * Render a backtrace array into an appropriate plain-text or HTML string. * - * @param string $bt The trace array, as returned by debug_backtrace() or Exception::getTrace() + * @param array $bt The trace array, as returned by debug_backtrace() or Exception::getTrace() * @param boolean $plainText Set to false for HTML output, or true for plain-text output * @param array List of functions that should be ignored. If not set, a default is provided * @return string The rendered backtrace */ public static function get_rendered_backtrace($bt, $plainText = false, $ignoredFunctions = null) { + if(empty($bt)) { + return ''; + } $bt = self::filter_backtrace($bt, $ignoredFunctions); $result = ($plainText) ? '' : '