Issue #2500483 by svendecabooter, phenaproxima, lostkangaroo: Upgrade path for Image 7.x
parent
bf74e9d38b
commit
191aec4229
|
@ -0,0 +1,18 @@
|
||||||
|
id: d7_image_styles
|
||||||
|
label: Image styles
|
||||||
|
migration_tags:
|
||||||
|
- Drupal 7
|
||||||
|
source:
|
||||||
|
plugin: d7_image_styles
|
||||||
|
process:
|
||||||
|
name: name
|
||||||
|
label: label
|
||||||
|
effects:
|
||||||
|
plugin: iterator
|
||||||
|
source: effects
|
||||||
|
process:
|
||||||
|
id: name
|
||||||
|
weight: weight
|
||||||
|
data: data
|
||||||
|
destination:
|
||||||
|
plugin: entity:image_style
|
|
@ -0,0 +1,71 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Contains \Drupal\image\Plugin\migrate\source\d7\ImageStyles.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Drupal\image\Plugin\migrate\source\d7;
|
||||||
|
|
||||||
|
use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
|
||||||
|
use Drupal\migrate\Row;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Drupal image styles source from database.
|
||||||
|
*
|
||||||
|
* @MigrateSource(
|
||||||
|
* id = "d7_image_styles",
|
||||||
|
* source_provider = "image"
|
||||||
|
* )
|
||||||
|
*/
|
||||||
|
class ImageStyles extends DrupalSqlBase {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function query() {
|
||||||
|
return $this->select('image_styles', 'ims')
|
||||||
|
->fields('ims');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function fields() {
|
||||||
|
$fields = [
|
||||||
|
'isid' => $this->t('The primary identifier for an image style.'),
|
||||||
|
'name' => $this->t('The style machine name.'),
|
||||||
|
'label' => $this->t('The style administrative name.'),
|
||||||
|
];
|
||||||
|
return $fields;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function getIds() {
|
||||||
|
$ids['isid']['type'] = 'integer';
|
||||||
|
return $ids;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function prepareRow(Row $row) {
|
||||||
|
$effects = array();
|
||||||
|
|
||||||
|
$results = $this->select('image_effects', 'ie')
|
||||||
|
->fields('ie')
|
||||||
|
->condition('isid', $row->getSourceProperty('isid'))
|
||||||
|
->execute();
|
||||||
|
|
||||||
|
foreach ($results as $key => $result) {
|
||||||
|
$result['data'] = unserialize($result['data']);
|
||||||
|
$effects[$key] = $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
$row->setSourceProperty('effects', $effects);
|
||||||
|
return parent::prepareRow($row);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,78 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Contains \Drupal\image\Tests\Migrate\d7\MigrateImageStylesTest.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Drupal\image\Tests\Migrate\d7;
|
||||||
|
|
||||||
|
use Drupal\image\Entity\ImageStyle;
|
||||||
|
use Drupal\image\ImageStyleInterface;
|
||||||
|
use Drupal\image\ImageEffectBase;
|
||||||
|
use Drupal\migrate_drupal\Tests\d7\MigrateDrupal7TestBase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test image styles migration to config entities.
|
||||||
|
*
|
||||||
|
* @group image
|
||||||
|
*/
|
||||||
|
class MigrateImageStylesTest extends MigrateDrupal7TestBase {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public static $modules = array('image');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
protected function setUp() {
|
||||||
|
parent::setUp();
|
||||||
|
$this->installConfig(static::$modules);
|
||||||
|
$this->executeMigration('d7_image_styles');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test the image styles migration.
|
||||||
|
*/
|
||||||
|
public function testImageStylesMigration() {
|
||||||
|
$this->assertEntity('custom_image_style_1', "Custom image style 1", ['image_scale_and_crop', 'image_desaturate'], [['width' => 55, 'height' => 55], []]);
|
||||||
|
$this->assertEntity('custom_image_style_2', "Custom image style 2", ['image_resize', 'image_rotate'], [['width' => 55, 'height' => 100], ['degrees' => 45, 'bgcolor' => '#FFFFFF', 'random' => false]]);
|
||||||
|
$this->assertEntity('custom_image_style_3', "Custom image style 3", ['image_scale', 'image_crop'], [['width' => 150, 'height' => NULL, 'upscale' => false], ['width' => 50, 'height' => 50, 'anchor' => 'left-top']]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Asserts various aspects of an ImageStyle entity.
|
||||||
|
*
|
||||||
|
* @param string $id
|
||||||
|
* The expected image style ID.
|
||||||
|
* @param string $label
|
||||||
|
* The expected image style label.
|
||||||
|
* @param array $expected_effect_plugins
|
||||||
|
* An array of expected plugins attached to the image style entity
|
||||||
|
* @param array $expected_effect_config
|
||||||
|
* An array of expected configuration for each effect in the image style
|
||||||
|
*/
|
||||||
|
protected function assertEntity($id, $label, array $expected_effect_plugins, array $expected_effect_config) {
|
||||||
|
$style = ImageStyle::load($id);
|
||||||
|
$this->assertTrue($style instanceof ImageStyleInterface);
|
||||||
|
/** @var \Drupal\image\ImageStyleInterface $style */
|
||||||
|
$this->assertIdentical($id, $style->id());
|
||||||
|
$this->assertIdentical($label, $style->label());
|
||||||
|
|
||||||
|
// Check the number of effects associated with the style.
|
||||||
|
$effects = $style->getEffects();
|
||||||
|
$this->assertIdentical(count($effects), count($expected_effect_plugins));
|
||||||
|
|
||||||
|
$index = 0;
|
||||||
|
foreach ($effects as $effect) {
|
||||||
|
$this->assertTrue($effect instanceof ImageEffectBase);
|
||||||
|
$this->assertIdentical($expected_effect_plugins[$index], $effect->getPluginId());
|
||||||
|
$config = $effect->getConfiguration();
|
||||||
|
$this->assertIdentical($expected_effect_config[$index], $config['data']);
|
||||||
|
$index++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,61 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Contains \Drupal\Tests\image\Unit\Plugin\migrate\source\d7\MigrateImageStylesTest.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Drupal\Tests\image\Unit\Plugin\migrate\source\d7;
|
||||||
|
|
||||||
|
use Drupal\Tests\migrate\Unit\MigrateSqlSourceTestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests D7 ImageStyles source plugin.
|
||||||
|
*
|
||||||
|
* @group image
|
||||||
|
*/
|
||||||
|
class MigrateImageStylesTest extends MigrateSqlSourceTestCase {
|
||||||
|
|
||||||
|
const PLUGIN_CLASS = 'Drupal\image\Plugin\migrate\source\d7\ImageStyles';
|
||||||
|
|
||||||
|
protected $migrationConfiguration = [
|
||||||
|
'id' => 'test',
|
||||||
|
'source' => [
|
||||||
|
'plugin' => 'd7_image_styles',
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
protected $expectedResults = [
|
||||||
|
[
|
||||||
|
'isid' => 1,
|
||||||
|
'name' => 'custom_image_style_1',
|
||||||
|
'label' => 'Custom image style 1',
|
||||||
|
'effects' => [
|
||||||
|
[
|
||||||
|
'ieid' => 1,
|
||||||
|
'isid' => 1,
|
||||||
|
'weight' => 1,
|
||||||
|
'name' => 'image_desaturate',
|
||||||
|
'data' => [],
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function setUp() {
|
||||||
|
foreach ($this->expectedResults as $k => $row) {
|
||||||
|
foreach (array('isid', 'name', 'label') as $field) {
|
||||||
|
$this->databaseContents['image_styles'][$k][$field] = $row[$field];
|
||||||
|
}
|
||||||
|
foreach ($row['effects'] as $id => $effect) {
|
||||||
|
$row['effects'][$id]['data'] = serialize($row['effects'][$id]['data']);
|
||||||
|
}
|
||||||
|
$this->databaseContents['image_effects'] = $row['effects'];
|
||||||
|
}
|
||||||
|
parent::setUp();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -64,8 +64,44 @@ class ImageEffects extends DrupalDumpBase {
|
||||||
'name',
|
'name',
|
||||||
'data',
|
'data',
|
||||||
))
|
))
|
||||||
->execute();
|
->values(array(
|
||||||
|
'ieid' => '3',
|
||||||
|
'isid' => '1',
|
||||||
|
'weight' => '1',
|
||||||
|
'name' => 'image_scale_and_crop',
|
||||||
|
'data' => 'a:2:{s:5:"width";s:2:"55";s:6:"height";s:2:"55";}',
|
||||||
|
))->values(array(
|
||||||
|
'ieid' => '4',
|
||||||
|
'isid' => '1',
|
||||||
|
'weight' => '2',
|
||||||
|
'name' => 'image_desaturate',
|
||||||
|
'data' => 'a:0:{}',
|
||||||
|
))->values(array(
|
||||||
|
'ieid' => '5',
|
||||||
|
'isid' => '2',
|
||||||
|
'weight' => '1',
|
||||||
|
'name' => 'image_resize',
|
||||||
|
'data' => 'a:2:{s:5:"width";s:2:"55";s:6:"height";s:3:"100";}',
|
||||||
|
))->values(array(
|
||||||
|
'ieid' => '6',
|
||||||
|
'isid' => '2',
|
||||||
|
'weight' => '2',
|
||||||
|
'name' => 'image_rotate',
|
||||||
|
'data' => 'a:3:{s:7:"degrees";s:2:"45";s:7:"bgcolor";s:7:"#FFFFFF";s:6:"random";i:0;}',
|
||||||
|
))->values(array(
|
||||||
|
'ieid' => '7',
|
||||||
|
'isid' => '3',
|
||||||
|
'weight' => '1',
|
||||||
|
'name' => 'image_scale',
|
||||||
|
'data' => 'a:3:{s:5:"width";s:3:"150";s:6:"height";s:0:"";s:7:"upscale";i:0;}',
|
||||||
|
))->values(array(
|
||||||
|
'ieid' => '8',
|
||||||
|
'isid' => '3',
|
||||||
|
'weight' => '2',
|
||||||
|
'name' => 'image_crop',
|
||||||
|
'data' => 'a:3:{s:5:"width";s:2:"50";s:6:"height";s:2:"50";s:6:"anchor";s:8:"left-top";}',
|
||||||
|
))->execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
#02b95b18fd065377d10d2eb5db756894
|
#5e2aa799db43de19b84994816b4a426b
|
||||||
|
|
|
@ -50,8 +50,20 @@ class ImageStyles extends DrupalDumpBase {
|
||||||
'name',
|
'name',
|
||||||
'label',
|
'label',
|
||||||
))
|
))
|
||||||
->execute();
|
->values(array(
|
||||||
|
'isid' => '1',
|
||||||
|
'name' => 'custom_image_style_1',
|
||||||
|
'label' => 'Custom image style 1',
|
||||||
|
))->values(array(
|
||||||
|
'isid' => '2',
|
||||||
|
'name' => 'custom_image_style_2',
|
||||||
|
'label' => 'Custom image style 2',
|
||||||
|
))->values(array(
|
||||||
|
'isid' => '3',
|
||||||
|
'name' => 'custom_image_style_3',
|
||||||
|
'label' => 'Custom image style 3',
|
||||||
|
))->execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
#64077dfb27e8f49e53f6d40a40b6d36d
|
#ace52192be7a9ef33a60e4202b6f33f4
|
||||||
|
|
Loading…
Reference in New Issue