summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNathaniel Catchpole2017-12-08 13:31:20 (GMT)
committerNathaniel Catchpole2017-12-08 13:31:20 (GMT)
commiteca600bdb6b6272f7e873290208b0f562adad3d5 (patch)
treead76be77bded1649501137b1496738e2a111146b
parentbc1e39c66bbe1c5125e4360beddebf3834f899f8 (diff)
Issue #2500521 by Jo Fitzgerald, RytoEX, quietone, gaurav.kapoor, hussainweb, phenaproxima: Upgrade path for Statistics 7.x and 6.x
-rw-r--r--core/modules/migrate_drupal/tests/fixtures/drupal6.php30
-rw-r--r--core/modules/statistics/migrations/statistics_node_counter.yml25
-rw-r--r--core/modules/statistics/src/Plugin/migrate/destination/NodeCounter.php96
-rw-r--r--core/modules/statistics/src/Plugin/migrate/source/NodeCounter.php44
-rw-r--r--core/modules/statistics/tests/src/Kernel/Migrate/d6/MigrateNodeCounterTest.php77
-rw-r--r--core/modules/statistics/tests/src/Kernel/Migrate/d7/MigrateNodeCounterTest.php73
-rw-r--r--core/modules/statistics/tests/src/Kernel/Plugin/migrate/source/NodeCounterTest.php67
7 files changed, 412 insertions, 0 deletions
diff --git a/core/modules/migrate_drupal/tests/fixtures/drupal6.php b/core/modules/migrate_drupal/tests/fixtures/drupal6.php
index 4ca588b..9334ac0 100644
--- a/core/modules/migrate_drupal/tests/fixtures/drupal6.php
+++ b/core/modules/migrate_drupal/tests/fixtures/drupal6.php
@@ -43535,6 +43535,36 @@ $connection->insert('node_counter')
'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',
'daycount' => '1',
diff --git a/core/modules/statistics/migrations/statistics_node_counter.yml b/core/modules/statistics/migrations/statistics_node_counter.yml
new file mode 100644
index 0000000..f0f1685
--- /dev/null
+++ b/core/modules/statistics/migrations/statistics_node_counter.yml
@@ -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
diff --git a/core/modules/statistics/src/Plugin/migrate/destination/NodeCounter.php b/core/modules/statistics/src/Plugin/migrate/destination/NodeCounter.php
new file mode 100644
index 0000000..e9771f3
--- /dev/null
+++ b/core/modules/statistics/src/Plugin/migrate/destination/NodeCounter.php
@@ -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')];
+ }
+
+}
diff --git a/core/modules/statistics/src/Plugin/migrate/source/NodeCounter.php b/core/modules/statistics/src/Plugin/migrate/source/NodeCounter.php
new file mode 100644
index 0000000..0877d3f
--- /dev/null
+++ b/core/modules/statistics/src/Plugin/migrate/source/NodeCounter.php
@@ -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;
+ }
+
+}
diff --git a/core/modules/statistics/tests/src/Kernel/Migrate/d6/MigrateNodeCounterTest.php b/core/modules/statistics/tests/src/Kernel/Migrate/d6/MigrateNodeCounterTest.php
new file mode 100644
index 0000000..ebd7766
--- /dev/null
+++ b/core/modules/statistics/tests/src/Kernel/Migrate/d6/MigrateNodeCounterTest.php
@@ -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());
+ }
+
+}
diff --git a/core/modules/statistics/tests/src/Kernel/Migrate/d7/MigrateNodeCounterTest.php b/core/modules/statistics/tests/src/Kernel/Migrate/d7/MigrateNodeCounterTest.php
new file mode 100644
index 0000000..8cdb9e7
--- /dev/null
+++ b/core/modules/statistics/tests/src/Kernel/Migrate/d7/MigrateNodeCounterTest.php
@@ -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());
+ }
+
+}
diff --git a/core/modules/statistics/tests/src/Kernel/Plugin/migrate/source/NodeCounterTest.php b/core/modules/statistics/tests/src/Kernel/Plugin/migrate/source/NodeCounterTest.php
new file mode 100644
index 0000000..0cbc76a
--- /dev/null
+++ b/core/modules/statistics/tests/src/Kernel/Plugin/migrate/source/NodeCounterTest.php
@@ -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;
+ }
+
+}