From b7d24fde31be9ab2f52ba743729570625072b26d Mon Sep 17 00:00:00 2001 From: Maxime Rainville Date: Mon, 2 Mar 2020 17:40:41 +1300 Subject: [PATCH] Adjust ImageForm logic to support new behaviour to be introduce in silverstripe/assets 1.6 --- .travis.yml | 25 +++-- .../FocusPointAssetFormFactoryExtension.php | 16 ++-- ...ocusPointAssetFormFactoryExtensionTest.php | 91 +++++++++++++++++++ 3 files changed, 118 insertions(+), 14 deletions(-) create mode 100644 tests/Extensions/FocusPointAssetFormFactoryExtensionTest.php diff --git a/.travis.yml b/.travis.yml index 38a139f..b0e37d5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,21 +2,28 @@ language: php sudo: false -dist: trusty +dist: xenial + +services: + - mysql + - postgresql env: global: - - COMPOSER_ROOT_VERSION=3.0.x-dev + - COMPOSER_ROOT_VERSION=3.x-dev - SS_ENVIRONMENT_TYPE="dev" + - DB=MYSQL matrix: include: - php: 5.6 - env: - - DB=MYSQL + env: ASSET_VERSION=1.4.x-dev - php: 7.1 - env: - - DB=PGSQL + env: DB=PGSQL + - php: 7.3 + env: ASSET_VERSION=1.5.x-dev + - php: 7.4 + env: ASSET_VERSION=1.x-dev before_script: # Init PHP @@ -27,8 +34,10 @@ before_script: # Install composer dependencies - export PATH=~/.composer/vendor/bin:$PATH - composer validate - - composer install --prefer-source - - if [[ $DB == PGSQL ]]; then composer require silverstripe/postgresql:^2.2 --prefer-source; fi + - composer require silverstripe/asset-admin $ASSET_VERSION --no-update + - if [[ $DB == PGSQL ]]; then composer require silverstripe/postgresql:^2.2 --no-update; fi + - composer update --prefer-source + script: - vendor/bin/phpunit diff --git a/src/Extensions/FocusPointAssetFormFactoryExtension.php b/src/Extensions/FocusPointAssetFormFactoryExtension.php index 853b96d..376cf5c 100755 --- a/src/Extensions/FocusPointAssetFormFactoryExtension.php +++ b/src/Extensions/FocusPointAssetFormFactoryExtension.php @@ -23,12 +23,16 @@ public function updateFormFields(FieldList $fields, $controller, $formName, $con $image = isset($context['Record']) ? $context['Record'] : null; if ($image && $image->appCategory() === 'image') { $fpField = FocusPointField::create('FocusPoint', $image->fieldLabel('FocusPoint'), $image); - $titleField = $fields->dataFieldByName('Title'); - if ($titleField && $titleField->isReadonly()) $fpField = $fpField->performReadonlyTransformation(); - $fields->insertAfter( - 'Title', - $fpField - ); + + $titleField = $fields->fieldByName('Editor.Details.Title'); + if ($titleField) { + if ($titleField->isReadonly()) $fpField = $fpField->performReadonlyTransformation(); + $fields->insertAfter( + 'Title', + $fpField + ); + } + } } } diff --git a/tests/Extensions/FocusPointAssetFormFactoryExtensionTest.php b/tests/Extensions/FocusPointAssetFormFactoryExtensionTest.php new file mode 100644 index 0000000..64abfeb --- /dev/null +++ b/tests/Extensions/FocusPointAssetFormFactoryExtensionTest.php @@ -0,0 +1,91 @@ + $this->objFromFixture(Image::class, 'pngLeftTop') + ]; + + + $ext->updateFormFields($fields, $controller, $formName, $context); + + $focusField = $fields->fieldByName('Editor.Details.FocusPoint'); + $this->assertNotEmpty($focusField, 'Focus field has been added to image edit form.'); + } + + public function testUpdateFormFieldsOnPlacementForm() + { + $ext = new FocusPointAssetFormFactoryExtension(); + + $fields = FieldList::create( + TextField::create('Title') + ); + $controller = new Controller(); + $formName = 'fileEditForm'; + $context = [ + 'Record' => $this->objFromFixture(Image::class, 'pngLeftTop') + ]; + + + $ext->updateFormFields($fields, $controller, $formName, $context); + + $focusField = $fields->fieldByName('Editor.Details.FocusPoint'); + $this->assertEmpty($focusField, 'Focus field has NOT been added to the form.'); + } + + public function testUpdateFormFieldsOnNonImageForm() + { + $ext = new FocusPointAssetFormFactoryExtension(); + + $fields = FieldList::create( + TabSet::create( + 'Editor', + Tab::create( + 'Details', + TextField::create('Title') + ) + ) + ); + $controller = new Controller(); + $formName = 'fileEditForm'; + $context = [ + 'Record' => $this->objFromFixture(Folder::class, 'folder1') + ]; + + $ext->updateFormFields($fields, $controller, $formName, $context); + + $focusField = $fields->fieldByName('Editor.Details.FocusPoint'); + $this->assertEmpty($focusField, 'Focus field has NOT been added to the form.'); + } +}