Issue #2500521 by Jo Fitzgerald, RytoEX, quietone, gaurav.kapoor, hussainweb, phenaproxima: Upgrade path for Statistics 7.x and 6.x
parent
bc1e39c66b
commit
eca600bdb6
|
@ -43534,6 +43534,36 @@ $connection->insert('node_counter')
|
||||||
'daycount',
|
'daycount',
|
||||||
'timestamp',
|
'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(
|
->values(array(
|
||||||
'nid' => '14',
|
'nid' => '14',
|
||||||
'totalcount' => '1',
|
'totalcount' => '1',
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
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
|
|
@ -0,0 +1,96 @@
|
||||||
|
<?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')];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,44 @@
|
||||||
|
<?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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,77 @@
|
||||||
|
<?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());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,73 @@
|
||||||
|
<?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());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,67 @@
|
||||||
|
<?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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue