diff --git a/core/modules/statistics/statistics.module b/core/modules/statistics/statistics.module index 222fe98530d..01c804debc3 100644 --- a/core/modules/statistics/statistics.module +++ b/core/modules/statistics/statistics.module @@ -123,10 +123,13 @@ function statistics_title_list($dbfield, $dbrows) { /** * Retrieves a node's "view statistics". * - * @deprecated in Drupal 8.2.x, will be removed before Drupal 9.0.0. - * Use \Drupal::service('statistics.storage.node')->fetchView($id). + * @deprecated in drupal:8.2.0 and is removed from drupal:9.0.0. Use + * \Drupal::service('statistics.storage.node')->fetchView($id) instead. + * + * @see https://www.drupal.org/node/2778245 */ function statistics_get($id) { + @trigger_error("statistics_get() is deprecated in drupal:8.2.0 and is removed from drupal:9.0.0. Use Drupal::service('statistics.storage.node')->fetchView() instead. See https://www.drupal.org/node/2778245", E_USER_DEPRECATED); if ($id > 0) { /** @var \Drupal\statistics\StatisticsViewsResult $statistics */ $statistics = \Drupal::service('statistics.storage.node')->fetchView($id); diff --git a/core/modules/statistics/statistics.tokens.inc b/core/modules/statistics/statistics.tokens.inc index 056cac45f38..467c6b4289a 100644 --- a/core/modules/statistics/statistics.tokens.inc +++ b/core/modules/statistics/statistics.tokens.inc @@ -40,25 +40,22 @@ function statistics_tokens($type, $tokens, array $data, array $options, Bubbleab if ($type == 'node' & !empty($data['node'])) { $node = $data['node']; - + /** @var \Drupal\statistics\StatisticsStorageInterface $stats_storage */ + $stats_storage = \Drupal::service('statistics.storage.node'); foreach ($tokens as $name => $original) { if ($name == 'total-count') { - $statistics = statistics_get($node->id()); - $replacements[$original] = $statistics['totalcount']; + $replacements[$original] = $stats_storage->fetchView($node->id())->getTotalCount(); } elseif ($name == 'day-count') { - $statistics = statistics_get($node->id()); - $replacements[$original] = $statistics['daycount']; + $replacements[$original] = $stats_storage->fetchView($node->id())->getDayCount(); } elseif ($name == 'last-view') { - $statistics = statistics_get($node->id()); - $replacements[$original] = \Drupal::service('date.formatter')->format($statistics['timestamp']); + $replacements[$original] = \Drupal::service('date.formatter')->format($stats_storage->fetchView($node->id())->getTimestamp()); } } if ($created_tokens = $token_service->findWithPrefix($tokens, 'last-view')) { - $statistics = statistics_get($node->id()); - $replacements += $token_service->generate('date', $created_tokens, ['date' => $statistics['timestamp']], $options, $bubbleable_metadata); + $replacements += $token_service->generate('date', $created_tokens, ['date' => $stats_storage->fetchView($node->id())->getTimestamp()], $options, $bubbleable_metadata); } } diff --git a/core/modules/statistics/tests/src/Functional/StatisticsLoggingTest.php b/core/modules/statistics/tests/src/Functional/StatisticsLoggingTest.php index 4421bc7c691..cfba14e017a 100644 --- a/core/modules/statistics/tests/src/Functional/StatisticsLoggingTest.php +++ b/core/modules/statistics/tests/src/Functional/StatisticsLoggingTest.php @@ -125,8 +125,8 @@ class StatisticsLoggingTest extends BrowserTestBase { global $base_root; $post = ['nid' => $this->node->id()]; $this->client->post($base_root . $stats_path, ['form_params' => $post]); - $node_counter = statistics_get($this->node->id()); - $this->assertIdentical($node_counter['totalcount'], 1); + $node_counter = \Drupal::service('statistics.storage.node')->fetchView($this->node->id()); + $this->assertIdentical(1, $node_counter->getTotalCount()); // Try fetching statistics for an invalid node ID and verify it returns // FALSE. @@ -136,7 +136,7 @@ class StatisticsLoggingTest extends BrowserTestBase { // This is a test specifically for the deprecated statistics_get() function // and so should remain unconverted until that function is removed. - $result = statistics_get($node_id); + $result = \Drupal::service('statistics.storage.node')->fetchView($node_id); $this->assertIdentical($result, FALSE); } diff --git a/core/modules/statistics/tests/src/Functional/StatisticsTokenReplaceTest.php b/core/modules/statistics/tests/src/Functional/StatisticsTokenReplaceTest.php index cdffd84a16f..7e99ab3c800 100644 --- a/core/modules/statistics/tests/src/Functional/StatisticsTokenReplaceTest.php +++ b/core/modules/statistics/tests/src/Functional/StatisticsTokenReplaceTest.php @@ -33,7 +33,8 @@ class StatisticsTokenReplaceTest extends StatisticsTestBase { $stats_path = $base_url . '/' . drupal_get_path('module', 'statistics') . '/statistics.php'; $client = \Drupal::httpClient(); $client->post($stats_path, ['headers' => $headers, 'body' => $post]); - $statistics = statistics_get($node->id()); + /** @var \Drupal\statistics\StatisticsViewsResult $statistics */ + $statistics = \Drupal::service('statistics.storage.node')->fetchView($node->id()); // Generate and test tokens. $tests = []; @@ -41,8 +42,8 @@ class StatisticsTokenReplaceTest extends StatisticsTestBase { $tests['[node:day-count]'] = 1; /** @var \Drupal\Core\Datetime\DateFormatterInterface $date_formatter */ $date_formatter = $this->container->get('date.formatter'); - $tests['[node:last-view]'] = $date_formatter->format($statistics['timestamp']); - $tests['[node:last-view:short]'] = $date_formatter->format($statistics['timestamp'], 'short'); + $tests['[node:last-view]'] = $date_formatter->format($statistics->getTimestamp()); + $tests['[node:last-view:short]'] = $date_formatter->format($statistics->getTimestamp(), 'short'); // Test to make sure that we generated something for each token. $this->assertFalse(in_array(0, array_map('strlen', $tests)), 'No empty tokens generated.'); diff --git a/core/modules/statistics/tests/src/Functional/Views/IntegrationTest.php b/core/modules/statistics/tests/src/Functional/Views/IntegrationTest.php index 56e18eefad4..16018206443 100644 --- a/core/modules/statistics/tests/src/Functional/Views/IntegrationTest.php +++ b/core/modules/statistics/tests/src/Functional/Views/IntegrationTest.php @@ -78,26 +78,20 @@ class IntegrationTest extends ViewTestBase { $client->post($stats_path, ['form_params' => ['nid' => $this->node->id()]]); $this->drupalGet('test_statistics_integration'); - $expected = statistics_get($this->node->id()); - // Convert the timestamp to year, to match the expected output of the date - // handler. - $expected['timestamp'] = date('Y', $expected['timestamp']); - - foreach ($expected as $field => $value) { - $xpath = "//div[contains(@class, views-field-$field)]/span[@class = 'field-content']"; - $this->assertFieldByXpath($xpath, $value, "The $field output matches the expected."); - } + /** @var \Drupal\statistics\StatisticsViewsResult $statistics */ + $statistics = \Drupal::service('statistics.storage.node')->fetchView($this->node->id()); + $this->assertSession()->pageTextContains('Total views: 1'); + $this->assertSession()->pageTextContains('Views today: 1'); + $this->assertSession()->pageTextContains('Most recent view: ' . date('Y', $statistics->getTimestamp())); $this->drupalLogout(); $this->drupalLogin($this->deniedUser); $this->drupalGet('test_statistics_integration'); $this->assertResponse(200); - foreach ($expected as $field => $value) { - $xpath = "//div[contains(@class, views-field-$field)]/span[@class = 'field-content']"; - $this->assertNoFieldByXpath($xpath, $value, "The $field output is not displayed."); - } - + $this->assertSession()->pageTextNotContains('Total views:'); + $this->assertSession()->pageTextNotContains('Views today:'); + $this->assertSession()->pageTextNotContains('Most recent view:'); } } diff --git a/core/modules/statistics/tests/src/Kernel/StatisticsDeprecationsTest.php b/core/modules/statistics/tests/src/Kernel/StatisticsDeprecationsTest.php new file mode 100644 index 00000000000..5a2416e9f9a --- /dev/null +++ b/core/modules/statistics/tests/src/Kernel/StatisticsDeprecationsTest.php @@ -0,0 +1,36 @@ +fetchView() instead. See https://www.drupal.org/node/2778245 + */ + public function testStatisticsGetDeprecation() { + $this->installSchema('statistics', 'node_counter'); + $this->container->get('statistics.storage.node')->recordView(1); + $expected_timestamp = $this->container->get('datetime.time')->getRequestTime(); + $this->assertSame([ + 'totalcount' => 1, + 'daycount' => 1, + 'timestamp' => $expected_timestamp, + ], statistics_get(1)); + } + +}