Update to Drupal 8.0.0 beta 14. For more information, see https://drupal.org/node/2544542

This commit is contained in:
Pantheon Automation 2015-08-27 12:03:05 -07:00 committed by Greg Anderson
parent 3b2511d96d
commit 81ccda77eb
2155 changed files with 54307 additions and 46870 deletions

View file

@ -0,0 +1,23 @@
id: d6_url_alias
label: Drupal 6 URL aliases
migration_tags:
- Drupal 6
source:
plugin: d6_url_alias
constants:
slash: '/'
process:
source:
plugin: concat
source:
- constants/slash
- src
alias:
plugin: concat
source:
- constants/slash
- dst
langcode: language
destination:
plugin: url_alias

View file

@ -55,28 +55,25 @@ class PathItem extends FieldItemBase {
/**
* {@inheritdoc}
*/
public function insert() {
if ($this->alias) {
$entity = $this->getEntity();
if ($path = \Drupal::service('path.alias_storage')->save('/' . $entity->urlInfo()->getInternalPath(), $this->alias, $this->getLangcode())) {
$this->pid = $path['pid'];
public function postSave($update) {
if (!$update) {
if ($this->alias) {
$entity = $this->getEntity();
if ($path = \Drupal::service('path.alias_storage')->save('/' . $entity->urlInfo()->getInternalPath(), $this->alias, $this->getLangcode())) {
$this->pid = $path['pid'];
}
}
}
}
/**
* {@inheritdoc}
*/
public function update() {
// Delete old alias if user erased it.
if ($this->pid && !$this->alias) {
\Drupal::service('path.alias_storage')->delete(array('pid' => $this->pid));
}
// Only save a non-empty alias.
elseif ($this->alias) {
$entity = $this->getEntity();
\Drupal::service('path.alias_storage')->save('/' . $entity->urlInfo()->getInternalPath(), $this->alias, $this->getLangcode(), $this->pid);
else {
// Delete old alias if user erased it.
if ($this->pid && !$this->alias) {
\Drupal::service('path.alias_storage')->delete(array('pid' => $this->pid));
}
// Only save a non-empty alias.
elseif ($this->alias) {
$entity = $this->getEntity();
\Drupal::service('path.alias_storage')->save('/' . $entity->urlInfo()->getInternalPath(), $this->alias, $this->getLangcode(), $this->pid);
}
}
}

View file

@ -0,0 +1,98 @@
<?php
/**
* @file
* Contains \Drupal\path\Plugin\migrate\destination\UrlAlias.
*/
namespace Drupal\path\Plugin\migrate\destination;
use Drupal\Core\Path\AliasStorage;
use Drupal\migrate\Entity\MigrationInterface;
use Drupal\migrate\Row;
use Drupal\migrate\Plugin\migrate\destination\DestinationBase;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
/**
* @MigrateDestination(
* id = "url_alias"
* )
*/
class UrlAlias extends DestinationBase implements ContainerFactoryPluginInterface {
/**
* The alias storage service.
*
* @var \Drupal\Core\Path\AliasStorage $aliasStorage
*/
protected $aliasStorage;
/**
* Constructs an entity destination plugin.
*
* @param array $configuration
* A configuration array containing information about the plugin instance.
* @param string $plugin_id
* The plugin_id for the plugin instance.
* @param mixed $plugin_definition
* The plugin implementation definition.
* @param MigrationInterface $migration
* The migration.
* @param \Drupal\Core\Path\AliasStorage $alias_storage
* The alias storage service.
*/
public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, AliasStorage $alias_storage) {
parent::__construct($configuration, $plugin_id, $plugin_definition, $migration);
$this->aliasStorage = $alias_storage;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration = NULL) {
return new static(
$configuration,
$plugin_id,
$plugin_definition,
$migration,
$container->get('path.alias_storage')
);
}
/**
* {@inheritdoc}
*/
public function import(Row $row, array $old_destination_id_values = array()) {
$path = $this->aliasStorage->save(
$row->getDestinationProperty('source'),
$row->getDestinationProperty('alias'),
$row->getDestinationProperty('langcode'),
$old_destination_id_values ? $old_destination_id_values[0] : NULL
);
return array($path['pid']);
}
/**
* {@inheritdoc}
*/
public function getIds() {
$ids['pid']['type'] = 'integer';
return $ids;
}
/**
* {@inheritdoc}
*/
public function fields(MigrationInterface $migration = NULL) {
return [
'pid' => 'The path id',
'source' => 'The source path.',
'alias' => 'The url alias.',
'langcode' => 'The language code for the url.',
];
}
}

View file

@ -0,0 +1,52 @@
<?php
/**
* @file
* Contains \Drupal\path\Plugin\migrate\source\d6\UrlAlias.
*/
namespace Drupal\path\Plugin\migrate\source\d6;
use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
/**
* Drupal 6 url aliases source from database.
*
* @MigrateSource(
* id = "d6_url_alias"
* )
*/
class UrlAlias extends DrupalSqlBase {
/**
* {@inheritdoc}
*/
public function query() {
$query = $this->select('url_alias', 'ua')
->fields('ua', array('pid', 'src', 'dst', 'language'));
$query->orderBy('pid');
return $query;
}
/**
* {@inheritdoc}
*/
public function fields() {
return array(
'pid' => $this->t('The numeric identifier of the path alias.'),
'src' => $this->t('The internal path.'),
'dst' => $this->t('The user set path alias.'),
'language' => $this->t('The language code of the url alias.'),
);
}
/**
* {@inheritdoc}
*/
public function getIds() {
$ids['pid']['type'] = 'integer';
return $ids;
}
}

View file

@ -0,0 +1,80 @@
<?php
/**
* @file
* Contains \Drupal\path\Tests\Migrate\d6\MigrateUrlAliasTest.
*/
namespace Drupal\path\Tests\Migrate\d6;
use Drupal\migrate\MigrateExecutable;
use Drupal\migrate\Plugin\MigrateIdMapInterface;
use Drupal\Core\Database\Database;
use Drupal\migrate_drupal\Tests\d6\MigrateDrupal6TestBase;
/**
* Url alias migration.
*
* @group path
*/
class MigrateUrlAliasTest extends MigrateDrupal6TestBase {
/**
* Modules to enable.
*
* @var array
*/
public static $modules = array('path');
/**
* {@inheritdoc}
*/
protected function setUp() {
parent::setUp();
$this->installSchema('system', ['url_alias']);
$this->loadDumps(['UrlAlias.php']);
$this->executeMigration('d6_url_alias');
}
/**
* Test the url alias migration.
*/
public function testUrlAlias() {
$migration = entity_load('migration', 'd6_url_alias');
// Test that the field exists.
$conditions = array(
'source' => '/node/1',
'alias' => '/alias-one',
'langcode' => 'en',
);
$path = \Drupal::service('path.alias_storage')->load($conditions);
$this->assertNotNull($path, "Path alias for node/1 successfully loaded.");
$this->assertIdentical($migration->getIdMap()->lookupDestinationID(array($path['pid'])), array('1'), "Test IdMap");
$conditions = array(
'source' => '/node/2',
'alias' => '/alias-two',
'langcode' => 'en',
);
$path = \Drupal::service('path.alias_storage')->load($conditions);
$this->assertNotNull($path, "Path alias for node/2 successfully loaded.");
// Test that we can re-import using the UrlAlias destination.
Database::getConnection('default', 'migrate')
->update('url_alias')
->fields(array('dst' => 'new-url-alias'))
->condition('src', 'node/2')
->execute();
db_update($migration->getIdMap()->mapTableName())
->fields(array('source_row_status' => MigrateIdMapInterface::STATUS_NEEDS_UPDATE))
->execute();
$migration = entity_load_unchanged('migration', 'd6_url_alias');
$executable = new MigrateExecutable($migration, $this);
$executable->import();
$path = \Drupal::service('path.alias_storage')->load(array('pid' => $path['pid']));
$this->assertIdentical('/new-url-alias', $path['alias']);
}
}

View file

@ -0,0 +1,55 @@
<?php
/**
* @file
* Contains \Drupal\Tests\path\Unit\Migrate\d6\UrlAliasTest.
*/
namespace Drupal\Tests\path\Unit\Migrate\d6;
use Drupal\Tests\migrate\Unit\MigrateSqlSourceTestCase;
/**
* Tests the D6 url alias migrations.
*
* @group path
*/
class UrlAliasTest extends MigrateSqlSourceTestCase {
const PLUGIN_CLASS = 'Drupal\path\Plugin\migrate\source\d6\UrlAlias';
protected $migrationConfiguration = array(
'id' => 'test',
'highWaterProperty' => array('field' => 'test'),
'idlist' => array(),
'source' => array(
'plugin' => 'd6_url_alias',
),
);
protected $expectedResults = array(
array(
'pid' => 1,
'src' => 'node/1',
'dst' => 'test-article',
'language' => 'en',
),
array(
'pid' => 2,
'src' => 'node/2',
'dst' => 'another-alias',
'language' => 'en',
),
);
/**
* {@inheritdoc}
*/
protected function setUp() {
foreach ($this->expectedResults as $row) {
$this->databaseContents['url_alias'][] = $row;
}
parent::setUp();
}
}