Commit eca600bd authored by catch's avatar catch

Issue #2500521 by Jo Fitzgerald, RytoEX, quietone, gaurav.kapoor, hussainweb,...

Issue #2500521 by Jo Fitzgerald, RytoEX, quietone, gaurav.kapoor, hussainweb, phenaproxima: Upgrade path for Statistics 7.x and 6.x
parent bc1e39c6
......@@ -43534,6 +43534,36 @@
'daycount',
'timestamp',
))
->values(array(
'nid' => '1',
'totalcount' => '2',
'daycount' => '0',
'timestamp' => '1421727536',
))
->values(array(
'nid' => '2',
'totalcount' => '1',
'daycount' => '0',
'timestamp' => '1471428059',
))
->values(array(
'nid' => '3',
'totalcount' => '1',
'daycount' => '0',
'timestamp' => '1471428153',
))
->values(array(
'nid' => '4',
'totalcount' => '1',
'daycount' => '1',
'timestamp' => '1478755275',
))
->values(array(
'nid' => '5',
'totalcount' => '1',
'daycount' => '1',
'timestamp' => '1478755314',
))
->values(array(
'nid' => '14',
'totalcount' => '1',
id: statistics_node_counter
label: Node counter
migration_tags:
- Drupal 6
- Drupal 7
source:
plugin: node_counter
process:
nid:
-
plugin: migration_lookup
migration: [d6_node, d7_node]
source: nid
-
plugin: skip_on_empty
method: row
totalcount: totalcount
daycount: daycount
timestamp: timestamp
destination:
plugin: node_counter
migration_dependencies:
optional:
- d6_node
- d7_node
<?php
namespace Drupal\statistics\Plugin\migrate\destination;
use Drupal\Core\Database\Connection;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\migrate\Plugin\migrate\destination\DestinationBase;
use Drupal\migrate\Plugin\MigrationInterface;
use Drupal\migrate\Row;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Destination for node counter.
*
* @MigrateDestination(
* id = "node_counter",
* destination_module = "statistics"
* )
*/
class NodeCounter extends DestinationBase implements ContainerFactoryPluginInterface {
/**
* The database connection.
*
* @var \Drupal\Core\Database\Connection
*/
protected $connection;
/**
* Constructs a node counter plugin.
*
* @param array $configuration
* Plugin configuration.
* @param string $plugin_id
* The plugin ID.
* @param mixed $plugin_definition
* The plugin definition.
* @param \Drupal\migrate\Plugin\MigrationInterface $migration
* The current migration.
* @param \Drupal\Core\Database\Connection $connection
* The database connection.
*/
public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, Connection $connection) {
parent::__construct($configuration, $plugin_id, $plugin_definition, $migration);
$this->connection = $connection;
}
/**
* {@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('database')
);
}
/**
* {@inheritdoc}
*/
public function getIds() {
return ['nid' => ['type' => 'integer']];
}
/**
* {@inheritdoc}
*/
public function fields(MigrationInterface $migration = NULL) {
return [
'nid' => $this->t('The ID of the node to which these statistics apply.'),
'totalcount' => $this->t('The total number of times the node has been viewed.'),
'daycount' => $this->t('The total number of times the node has been viewed today.'),
'timestamp' => $this->t('The most recent time the node has been viewed.'),
];
}
/**
* {@inheritdoc}
*/
public function import(Row $row, array $old_destination_id_values = []) {
$this->connection
->insert('node_counter')
->fields([
'nid' => $row->getDestinationProperty('nid'),
'daycount' => $row->getDestinationProperty('daycount'),
'totalcount' => $row->getDestinationProperty('totalcount'),
'timestamp' => $row->getDestinationProperty('timestamp'),
])
->execute();
return [$row->getDestinationProperty('nid')];
}
}
<?php
namespace Drupal\statistics\Plugin\migrate\source;
use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
/**
* Node counter source from database.
*
* @MigrateSource(
* id = "node_counter",
* source_module = "statistics"
* )
*/
class NodeCounter extends DrupalSqlBase {
/**
* {@inheritdoc}
*/
public function query() {
return $this->select('node_counter', 'nc')->fields('nc');
}
/**
* {@inheritdoc}
*/
public function fields() {
return [
'nid' => $this->t('The node ID.'),
'totalcount' => $this->t('The total number of times the node has been viewed.'),
'daycount' => $this->t('The total number of times the node has been viewed today.'),
'timestamp' => $this->t('The most recent time the node has been viewed.'),
];
}
/**
* {@inheritdoc}
*/
public function getIds() {
$ids['nid']['type'] = 'integer';
return $ids;
}
}
<?php
namespace Drupal\Tests\statistics\Kernel\Migrate\d6;
use Drupal\Tests\migrate_drupal\Kernel\d6\MigrateDrupal6TestBase;
/**
* Tests the migration of node counter data to Drupal 8.
*
* @group statistics
*/
class MigrateNodeCounterTest extends MigrateDrupal6TestBase {
/**
* {@inheritdoc}
*/
public static $modules = [
'menu_ui',
'node',
'statistics',
'text',
];
/**
* {@inheritdoc}
*/
protected function setUp() {
parent::setUp();
$this->installEntitySchema('node');
$this->installConfig('node');
$this->installSchema('statistics', ['node_counter']);
$this->executeMigrations([
'd6_filter_format',
'd6_user_role',
'd6_node_settings',
'd6_user',
'd6_node_type',
'd6_node',
'statistics_node_counter'
]);
}
/**
* Tests migration of node counter.
*/
public function testStatisticsSettings() {
$this->assertNodeCounter(1, 2, 0, 1421727536);
$this->assertNodeCounter(2, 1, 0, 1471428059);
$this->assertNodeCounter(3, 1, 0, 1471428153);
$this->assertNodeCounter(4, 1, 1, 1478755275);
$this->assertNodeCounter(5, 1, 1, 1478755314);
}
/**
* Asserts various aspects of a node counter.
*
* @param int $nid
* The node ID.
* @param int $total_count
* The expected total count.
* @param int $day_count
* The expected day count.
* @param int $timestamp
* The expected timestamp.
*/
protected function assertNodeCounter($nid, $total_count, $day_count, $timestamp) {
/** @var \Drupal\statistics\StatisticsViewsResult $statistics */
$statistics = $this->container->get('statistics.storage.node')->fetchView($nid);
// @todo Remove casting after https://www.drupal.org/node/2926069 lands.
$this->assertSame($total_count, (int) $statistics->getTotalCount());
$this->assertSame($day_count, (int) $statistics->getDayCount());
$this->assertSame($timestamp, (int) $statistics->getTimestamp());
}
}
<?php
namespace Drupal\Tests\statistics\Kernel\Migrate\d7;
use Drupal\Tests\migrate_drupal\Kernel\d7\MigrateDrupal7TestBase;
/**
* Tests the migration of node counter data to Drupal 8.
*
* @group statistics
*/
class MigrateNodeCounterTest extends MigrateDrupal7TestBase {
/**
* {@inheritdoc}
*/
public static $modules = [
'menu_ui',
'node',
'statistics',
'text',
];
/**
* {@inheritdoc}
*/
protected function setUp() {
parent::setUp();
$this->installEntitySchema('node');
$this->installConfig('node');
$this->installSchema('statistics', ['node_counter']);
$this->executeMigrations([
'd7_user_role',
'd7_user',
'd7_node_type',
'd7_node',
'statistics_node_counter'
]);
}
/**
* Tests migration of node counter.
*/
public function testStatisticsSettings() {
$this->assertNodeCounter(1, 2, 0, 1421727536);
$this->assertNodeCounter(2, 1, 0, 1471428059);
$this->assertNodeCounter(4, 1, 1, 1478755275);
}
/**
* Asserts various aspects of a node counter.
*
* @param int $nid
* The node ID.
* @param int $total_count
* The expected total count.
* @param int $day_count
* The expected day count.
* @param int $timestamp
* The expected timestamp.
*/
protected function assertNodeCounter($nid, $total_count, $day_count, $timestamp) {
/** @var \Drupal\statistics\StatisticsViewsResult $statistics */
$statistics = $this->container->get('statistics.storage.node')->fetchView($nid);
// @todo Remove casting after https://www.drupal.org/node/2926069 lands.
$this->assertSame($total_count, (int) $statistics->getTotalCount());
$this->assertSame($day_count, (int) $statistics->getDayCount());
$this->assertSame($timestamp, (int) $statistics->getTimestamp());
}
}
<?php
namespace Drupal\Tests\statistics\Kernel\Plugin\migrate\source;
use Drupal\Tests\migrate\Kernel\MigrateSqlSourceTestBase;
/**
* Tests the node_counter source plugin.
*
* @covers \Drupal\statistics\Plugin\migrate\source\NodeCounter
*
* @group statistics
*/
class NodeCounterTest extends MigrateSqlSourceTestBase {
/**
* {@inheritdoc}
*/
public static $modules = ['migrate_drupal', 'statistics'];
/**
* {@inheritdoc}
*/
public function providerSource() {
$tests = [];
// The source data.
$tests[0]['source_data']['node_counter'] = [
[
'nid' => 1,
'totalcount' => 2,
'daycount' => 0,
'timestamp' => 1421727536,
],
[
'nid' => 2,
'totalcount' => 1,
'daycount' => 0,
'timestamp' => 1471428059,
],
[
'nid' => 3,
'totalcount' => 1,
'daycount' => 0,
'timestamp' => 1471428153,
],
[
'nid' => 4,
'totalcount' => 1,
'daycount' => 1,
'timestamp' => 1478755275,
],
[
'nid' => 5,
'totalcount' => 1,
'daycount' => 1,
'timestamp' => 1478755314,
],
];
// The expected results.
$tests[0]['expected_data'] = $tests[0]['source_data']['node_counter'];
return $tests;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment