diff --git a/core/modules/migrate_drupal/tests/fixtures/drupal6.php b/core/modules/migrate_drupal/tests/fixtures/drupal6.php index 4ca588b9c7d5a5746484fd156c8749d774122d0f..9334ac01423eaaf3ccf737fb5199d15416aac796 100644 --- a/core/modules/migrate_drupal/tests/fixtures/drupal6.php +++ b/core/modules/migrate_drupal/tests/fixtures/drupal6.php @@ -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', 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 0000000000000000000000000000000000000000..f0f16851b3ba211a1f86f8823a54077f98d80ccf --- /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 0000000000000000000000000000000000000000..e9771f3d988c23c45a858e6d166d64657356ad77 --- /dev/null +++ b/core/modules/statistics/src/Plugin/migrate/destination/NodeCounter.php @@ -0,0 +1,96 @@ +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 0000000000000000000000000000000000000000..0877d3fbd5f37a49c06dcc109b562ae4db1c38d3 --- /dev/null +++ b/core/modules/statistics/src/Plugin/migrate/source/NodeCounter.php @@ -0,0 +1,44 @@ +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 0000000000000000000000000000000000000000..ebd776638625792d04943667719ea8400f7d88d6 --- /dev/null +++ b/core/modules/statistics/tests/src/Kernel/Migrate/d6/MigrateNodeCounterTest.php @@ -0,0 +1,77 @@ +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 0000000000000000000000000000000000000000..8cdb9e70731a2bef61a5c9036e3cb99e2a98302b --- /dev/null +++ b/core/modules/statistics/tests/src/Kernel/Migrate/d7/MigrateNodeCounterTest.php @@ -0,0 +1,73 @@ +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 0000000000000000000000000000000000000000..0cbc76afec3327e694cc2ed02dd32470f8eb3f26 --- /dev/null +++ b/core/modules/statistics/tests/src/Kernel/Plugin/migrate/source/NodeCounterTest.php @@ -0,0 +1,67 @@ + 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; + } + +}