Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
D
drupal
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Custom Issue Tracker
Custom Issue Tracker
Labels
Merge Requests
220
Merge Requests
220
Requirements
Requirements
List
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Analytics
Analytics
Code Review
Insights
Issue
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
project
drupal
Commits
b833c53d
Commit
b833c53d
authored
Dec 07, 2013
by
webchick
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Issue
#2150257
by chx, mpgeek: Add a machine name process plugin.
parent
afb6c5aa
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
146 additions
and
0 deletions
+146
-0
core/modules/migrate/lib/Drupal/migrate/Plugin/migrate/process/MachineName.php
...lib/Drupal/migrate/Plugin/migrate/process/MachineName.php
+53
-0
core/modules/migrate/tests/Drupal/migrate/Tests/process/MachineNameTest.php
...te/tests/Drupal/migrate/Tests/process/MachineNameTest.php
+93
-0
No files found.
core/modules/migrate/lib/Drupal/migrate/Plugin/migrate/process/MachineName.php
0 → 100644
View file @
b833c53d
<?php
/**
* @file
* Contains \Drupal\migrate\Plugin\migrate\process\MachineName.
*/
namespace
Drupal\migrate\Plugin\migrate\process
;
use
Drupal\Core\Language\Language
;
use
Drupal\Core\Plugin\PluginBase
;
use
Drupal\migrate\MigrateExecutable
;
use
Drupal\migrate\Plugin\MigrateProcessInterface
;
use
Drupal\migrate\Row
;
/**
* This plugin creates a machine name.
*
* The current value gets transliterated, non-alphanumeric characters removed
* and replaced by an underscore and multiple underscores are collapsed into
* one.
*
* @PluginId("machine_name")
*/
class
MachineName
extends
PluginBase
implements
MigrateProcessInterface
{
/**
* @var \Drupal\Core\Transliteration\PHPTransliteration
*/
protected
$transliteration
;
/**
* {@inheritdoc}
*/
public
function
transform
(
$value
,
MigrateExecutable
$migrate_executable
,
Row
$row
,
$destination_property
)
{
$new_value
=
$this
->
getTransliteration
()
->
transliterate
(
$value
,
Language
::
LANGCODE_DEFAULT
,
'_'
);
$new_value
=
strtolower
(
$new_value
);
$new_value
=
preg_replace
(
'/[^a-z0-9_]+/'
,
'_'
,
$new_value
);
return
preg_replace
(
'/_+/'
,
'_'
,
$new_value
);
}
/**
* @return \Drupal\Core\Transliteration\PHPTransliteration
*/
protected
function
getTransliteration
()
{
if
(
!
isset
(
$this
->
transliteration
))
{
$this
->
transliteration
=
\
Drupal
::
transliteration
();
}
return
$this
->
transliteration
;
}
}
core/modules/migrate/tests/Drupal/migrate/Tests/process/MachineNameTest.php
0 → 100644
View file @
b833c53d
<?php
/**
* @file
* Contains \Drupal\migrate\Tests\process\MachineNameTest.
*/
namespace
Drupal\migrate\Tests\process
;
use
Drupal\migrate\Plugin\migrate\process\TestMachineName
;
/**
* Tests the machine name process plugin.
*
* @group migrate
* @group Drupal
*/
class
MachineNameTest
extends
MigrateProcessTestCase
{
/**
* The mock transliteration.
*
* @var \Drupal\Component\Transliteration\TransliterationInterface
*/
protected
$transliteration
;
/**
* @var bool
*/
protected
$mapJoinable
=
FALSE
;
/**
* {@inheritdoc}
*/
public
static
function
getInfo
()
{
return
array
(
'name'
=>
'Machine mame process plugin'
,
'description'
=>
'Tests the machine name process plugin.'
,
'group'
=>
'Migrate'
,
);
}
/**
* {@inheritdoc}
*/
public
function
setUp
()
{
$this
->
transliteration
=
$this
->
getMockBuilder
(
'Drupal\Component\Transliteration\TransliterationInterface'
)
->
disableOriginalConstructor
()
->
getMock
();
$this
->
row
=
$this
->
getMockBuilder
(
'Drupal\migrate\Row'
)
->
disableOriginalConstructor
()
->
getMock
();
$this
->
migrateExecutable
=
$this
->
getMockBuilder
(
'Drupal\migrate\MigrateExecutable'
)
->
disableOriginalConstructor
()
->
getMock
();
parent
::
setUp
();
}
/**
* Tests machine name transformation of non-alphanumeric characters.
*/
public
function
testMachineNames
()
{
// Tests the following transformations:
// - non-alphanumeric character (including spaces) -> underscore,
// - Uppercase -> lowercase,
// - Multiple consecutive underscore -> single underscore.
$human_name_ascii
=
'foo2, the.bar;2*&the%baz!YEE____HaW '
;
$human_name
=
$human_name_ascii
.
'áéő'
;
$expected_result
=
'foo2_the_bar_2_the_baz_yee_haw_aeo'
;
// Test for calling transliterate on mock object.
$this
->
transliteration
->
expects
(
$this
->
once
())
->
method
(
'transliterate'
)
->
with
(
$human_name
)
->
will
(
$this
->
returnValue
(
$human_name_ascii
.
'aeo'
));
$plugin
=
new
TestMachineName
(
array
(),
'machine_name'
,
array
());
$plugin
->
setTransliteration
(
$this
->
transliteration
);
$value
=
$plugin
->
transform
(
$human_name
,
$this
->
migrateExecutable
,
$this
->
row
,
'destinationproperty'
);
$this
->
assertEquals
(
$expected_result
,
$value
);
}
}
namespace
Drupal\migrate\Plugin\migrate\process
;
use
Drupal\Component\Transliteration\TransliterationInterface
;
class
TestMachineName
extends
MachineName
{
public
function
setTransliteration
(
TransliterationInterface
$transliteration
)
{
$this
->
transliteration
=
$transliteration
;
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment