Skip to content
Snippets Groups Projects
Commit 3056a6b4 authored by git's avatar git Committed by Lucas Hedding
Browse files

Issue #2923891 by JorgeLM, hl17, heddn, edysmp: Transliterate file names

parent 88df0385
No related branches found
No related tags found
No related merge requests found
<?php
namespace Drupal\migrate_plus\Plugin\migrate\process;
use Drupal\Component\Transliteration\TransliterationInterface;
use Drupal\Core\Language\LanguageInterface;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\migrate\ProcessPluginBase;
use Drupal\migrate\MigrateExecutableInterface;
use Drupal\migrate\Row;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Transliterates text from Unicode to US-ASCII
*
* The transliteration process plugin takes the source value and runs it through
* the transliteration service. Letters will have language decorations and
* accents removed.
*
* Example:
*
* @code
* process:
* bar:
* plugin: transliteration
* source: foo
* @endcode
*
* If the value of foo in the source is 'áéí!' then the destination value of bar
* will be 'aei!'.
*
* @see \Drupal\migrate\Plugin\MigrateProcessInterface
*
* @MigrateProcessPlugin(
* id = "transliteration"
* )
*/
class Transliteration extends ProcessPluginBase implements ContainerFactoryPluginInterface {
/**
* The transliteration service.
*
* @var \Drupal\Component\Transliteration\TransliterationInterface
*/
protected $transliteration;
/**
* Constructs a Transliteration plugin.
*
* @param array $configuration
* The plugin configuration.
* @param string $plugin_id
* The plugin ID.
* @param mixed $plugin_definition
* The plugin definition.
* @param \Drupal\Component\Transliteration\TransliterationInterface $transliteration
* The transliteration service.
*/
public function __construct(array $configuration, $plugin_id, $plugin_definition, TransliterationInterface $transliteration) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->transliteration = $transliteration;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static(
$configuration,
$plugin_id,
$plugin_definition,
$container->get('transliteration')
);
}
/**
* {@inheritdoc}
*/
public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
return $this->transliteration->transliterate($value, LanguageInterface::LANGCODE_DEFAULT, '_');
}
}
<?php
namespace Drupal\Tests\migrate_plus\Unit\process;
use Drupal\Component\Transliteration\PhpTransliteration;
use Drupal\migrate\MigrateExecutableInterface;
use Drupal\migrate\Row;
use Drupal\migrate_plus\Plugin\migrate\process\Transliteration;
use Drupal\Tests\migrate\Unit\process\MigrateProcessTestCase;
/**
* Tests the transliteration process plugin.
*
* @group migrate_plus
*/
class TransliterationTest extends MigrateProcessTestCase {
/**
* A transliteration instance.
*
* @var \Drupal\Component\Transliteration\TransliterationInterface
*/
protected $transliteration;
/**
* {@inheritdoc}
*/
protected function setUp() {
$this->transliteration = new PhpTransliteration();
$this->row = $this->getMockBuilder(Row::class)
->disableOriginalConstructor()
->getMock();
$this->migrateExecutable = $this->getMockBuilder(MigrateExecutableInterface::class)
->disableOriginalConstructor()
->getMock();
parent::setUp();
}
/**
* Tests transliteration transformation of non-alphanumeric characters.
*/
public function testTransform() {
$actual = '9000004351_53494854_Spøgelsesjægerneáéö';
$expected_result = '9000004351_53494854_Spogelsesjaegerneaeo';
$plugin = new Transliteration([], 'transliteration', [], $this->transliteration);
$value = $plugin->transform($actual, $this->migrateExecutable, $this->row, 'destinationproperty');
$this->assertEquals($expected_result, $value);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment