diff --git a/core/modules/search/lib/Drupal/search/Tests/SearchRankingTest.php b/core/modules/search/lib/Drupal/search/Tests/SearchRankingTest.php index d9debc5..75e0628 100644 --- a/core/modules/search/lib/Drupal/search/Tests/SearchRankingTest.php +++ b/core/modules/search/lib/Drupal/search/Tests/SearchRankingTest.php @@ -72,7 +72,7 @@ class SearchRankingTest extends SearchTestBase { $this->drupalPost(NULL, $edit, t('Save')); // Enable counting of statistics. - variable_set('statistics_count_content_views', 1); + config('statistics.settings')->set('count_content_views', 1)->save(); // Then View one of the nodes a bunch of times. // Manually calling statistics.php, simulating ajax behavior. diff --git a/core/modules/statistics/config/statistics.settings.yml b/core/modules/statistics/config/statistics.settings.yml new file mode 100644 index 0000000..d790d5b --- /dev/null +++ b/core/modules/statistics/config/statistics.settings.yml @@ -0,0 +1,11 @@ +access_log: + enable: '0' + flush_timer: '259200' +count_content_views: '0' +block: + top_day: + num: '0' + top_all: + num: '0' + top_last: + num: '0' diff --git a/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsAdminTest.php b/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsAdminTest.php index 86b446a..15b144a 100644 --- a/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsAdminTest.php +++ b/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsAdminTest.php @@ -54,8 +54,9 @@ class StatisticsAdminTest extends WebTestBase { * Verifies that the statistics settings page works. */ function testStatisticsSettings() { - $this->assertFalse(variable_get('statistics_enable_access_log', 0), t('Access log is disabled by default.')); - $this->assertFalse(variable_get('statistics_count_content_views', 0), t('Count content view log is disabled by default.')); + $config = config('statistics.settings'); + $this->assertFalse($config->get('access_log.enable'), t('Access log is disabled by default.')); + $this->assertFalse($config->get('count_content_views'), t('Count content view log is disabled by default.')); $this->drupalGet('admin/reports/pages'); $this->assertRaw(t('No statistics available.'), t('Verifying text shown when no statistics is available.')); @@ -64,8 +65,9 @@ class StatisticsAdminTest extends WebTestBase { $edit['statistics_enable_access_log'] = 1; $edit['statistics_count_content_views'] = 1; $this->drupalPost('admin/config/system/statistics', $edit, t('Save configuration')); - $this->assertTrue(variable_get('statistics_enable_access_log'), t('Access log is enabled.')); - $this->assertTrue(variable_get('statistics_count_content_views'), t('Count content view log is enabled.')); + $config = config('statistics.settings'); + $this->assertTrue($config->get('access_log.enable'), t('Access log is enabled.')); + $this->assertTrue($config->get('count_content_views'), t('Count content view log is enabled.')); // Hit the node. $this->drupalGet('node/' . $this->test_node->nid); @@ -95,7 +97,7 @@ class StatisticsAdminTest extends WebTestBase { * Tests that when a node is deleted, the node counter is deleted too. */ function testDeleteNode() { - variable_set('statistics_count_content_views', 1); + config('statistics.settings')->set('count_content_views', 1)->save(); $this->drupalGet('node/' . $this->test_node->nid); // Manually calling statistics.php, simulating ajax behavior. @@ -127,7 +129,7 @@ class StatisticsAdminTest extends WebTestBase { * Tests that accesslog reflects when a user is deleted. */ function testDeleteUser() { - variable_set('statistics_enable_access_log', 1); + config('statistics.settings')->set('access_log.enable', 1)->save(); variable_set('user_cancel_method', 'user_cancel_delete'); $this->drupalLogout($this->privileged_user); @@ -158,10 +160,12 @@ class StatisticsAdminTest extends WebTestBase { * Tests that cron clears day counts and expired access logs. */ function testExpiredLogs() { - variable_set('statistics_enable_access_log', 1); - variable_set('statistics_count_content_views', 1); + config('statistics.settings') + ->set('access_log.enable', 1) + ->set('count_content_views', 1) + ->set('access_log.flush_timer', 1) + ->save(); variable_set('statistics_day_timestamp', 8640000); - variable_set('statistics_flush_accesslog_timer', 1); $this->drupalGet('node/' . $this->test_node->nid); // Manually calling statistics.php, simulating ajax behavior. @@ -178,8 +182,8 @@ class StatisticsAdminTest extends WebTestBase { $this->drupalGet('admin/reports/pages'); $this->assertText('node/' . $this->test_node->nid, t('Hit URL found.')); - // statistics_cron will subtract the statistics_flush_accesslog_timer - // variable from REQUEST_TIME in the delete query, so wait two secs here to + // statistics_cron will subtract the statistics.settings.accesslog.flush_timer + // config from REQUEST_TIME in the delete query, so wait two secs here to // make sure the access log will be flushed for the node just hit. sleep(2); $this->cronRun(); diff --git a/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsLoggingTest.php b/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsLoggingTest.php index d895564..9c9e542 100644 --- a/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsLoggingTest.php +++ b/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsLoggingTest.php @@ -44,8 +44,10 @@ class StatisticsLoggingTest extends WebTestBase { $config->save(); // Enable access logging. - variable_set('statistics_enable_access_log', 1); - variable_set('statistics_count_content_views', 1); + config('statistics.settings') + ->set('access_log.enable', 1) + ->set('count_content_views', 1) + ->save(); // Clear the logs. db_truncate('accesslog'); @@ -61,7 +63,6 @@ class StatisticsLoggingTest extends WebTestBase { 'title' => $this->node->label(), 'path' => $path, ); - // Verify logging of an uncached page. $this->drupalGet($path); // Manually calling statistics.php, simulating ajax behavior. diff --git a/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsTestBase.php b/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsTestBase.php index 1183155..d246e11 100644 --- a/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsTestBase.php +++ b/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsTestBase.php @@ -33,11 +33,10 @@ class StatisticsTestBase extends WebTestBase { 'administer users', )); $this->drupalLogin($this->blocking_user); - // Enable access logging. - variable_set('statistics_enable_access_log', 1); - variable_set('statistics_count_content_views', 1); - + config('statistics.settings')->set('access_log.enable', 1) + ->set('count_content_views', 1) + ->save(); // Insert dummy access by anonymous user into access log. db_insert('accesslog') ->fields(array( diff --git a/core/modules/statistics/statistics.admin.inc b/core/modules/statistics/statistics.admin.inc index d84e07b..1a1ea32 100644 --- a/core/modules/statistics/statistics.admin.inc +++ b/core/modules/statistics/statistics.admin.inc @@ -99,7 +99,7 @@ function statistics_top_pages() { $rows[] = array($page->hits, _statistics_format_item($page->title, $page->path), t('%time ms', array('%time' => round($page->average_time))), format_interval(round($page->total_time / 1000))); } - drupal_set_title(t('Top pages in the past %interval', array('%interval' => format_interval(variable_get('statistics_flush_accesslog_timer', 259200)))), PASS_THROUGH); + drupal_set_title(t('Top pages in the past %interval', array('%interval' => format_interval(config('statistics.settings')->get('access_log.flush_timer')))), PASS_THROUGH); $build['statistics_top_pages_table'] = array( '#theme' => 'table', '#header' => $header, @@ -161,7 +161,7 @@ function statistics_top_visitors() { $rows[] = array($account->hits, ($account->uid ? theme('username', array('account' => $account)) : $account->hostname), format_interval(round($account->total / 1000)), (user_access('block IP addresses') && !$account->uid) ? $ban_link : ''); } - drupal_set_title(t('Top visitors in the past %interval', array('%interval' => format_interval(variable_get('statistics_flush_accesslog_timer', 259200)))), PASS_THROUGH); + drupal_set_title(t('Top visitors in the past %interval', array('%interval' => format_interval(config('statistics.settings')->get('access_log.flush_timer')))), PASS_THROUGH); $build['statistics_top_visitors_table'] = array( '#theme' => 'table', '#header' => $header, @@ -183,7 +183,7 @@ function statistics_top_visitors() { * A render array containing the top referrers information. */ function statistics_top_referrers() { - drupal_set_title(t('Top referrers in the past %interval', array('%interval' => format_interval(variable_get('statistics_flush_accesslog_timer', 259200)))), PASS_THROUGH); + drupal_set_title(t('Top referrers in the past %interval', array('%interval' => format_interval(config('statistics.settings')->get('access_log.flush_timer')))), PASS_THROUGH); $header = array( array('data' => t('Hits'), 'field' => 'hits', 'sort' => 'desc'), @@ -282,9 +282,10 @@ function statistics_access_log($aid) { * Form constructor for the statistics administration form. * * @ingroup forms - * @see system_settings_form() + * @see statistics_settings_form_submit(). */ -function statistics_settings_form() { +function statistics_settings_form($form, $form_state) { + $config = config('statistics.settings'); // Access log settings. $form['access'] = array( '#type' => 'fieldset', @@ -293,13 +294,13 @@ function statistics_settings_form() { $form['access']['statistics_enable_access_log'] = array( '#type' => 'checkbox', '#title' => t('Enable access log'), - '#default_value' => variable_get('statistics_enable_access_log', 0), + '#default_value' => $config->get('access_log.enable'), '#description' => t('Log each page access. Required for referrer statistics.'), ); $form['access']['statistics_flush_accesslog_timer'] = array( '#type' => 'select', '#title' => t('Discard access logs older than'), - '#default_value' => variable_get('statistics_flush_accesslog_timer', 259200), + '#default_value' => $config->get('access_log.flush_timer'), '#options' => array(0 => t('Never')) + drupal_map_assoc(array(3600, 10800, 21600, 32400, 43200, 86400, 172800, 259200, 604800, 1209600, 2419200, 4838400, 9676800), 'format_interval'), '#description' => t('Older access log entries (including referrer statistics) will be automatically discarded. (Requires a correctly configured cron maintenance task.)', array('@cron' => url('admin/reports/status'))), ); @@ -312,9 +313,20 @@ function statistics_settings_form() { $form['content']['statistics_count_content_views'] = array( '#type' => 'checkbox', '#title' => t('Count content views'), - '#default_value' => variable_get('statistics_count_content_views', 0), + '#default_value' => $config->get('count_content_views'), '#description' => t('Increment a counter each time content is viewed.'), ); - return system_settings_form($form); + return system_config_form($form, $form_state); +} + +/** + * Form submission handler for statistics_settings_form(). + */ +function statistics_settings_form_submit($form, $form_state) { + config('statistics.settings') + ->set('access_log.enable', $form_state['values']['statistics_enable_access_log']) + ->set('access_log.flush_timer', $form_state['values']['statistics_flush_accesslog_timer']) + ->set('count_content_views', $form_state['values']['statistics_count_content_views']) + ->save(); } diff --git a/core/modules/statistics/statistics.install b/core/modules/statistics/statistics.install index 5ee20dc..8d44c25 100644 --- a/core/modules/statistics/statistics.install +++ b/core/modules/statistics/statistics.install @@ -2,24 +2,10 @@ /** * @file - * Install, update, and uninstall functions for the Statistics module. + * Install and update functions for the Statistics module. */ /** - * Implements hook_uninstall(). - */ -function statistics_uninstall() { - // Remove variables. - variable_del('statistics_count_content_views'); - variable_del('statistics_enable_access_log'); - variable_del('statistics_flush_accesslog_timer'); - variable_del('statistics_day_timestamp'); - variable_del('statistics_block_top_day_num'); - variable_del('statistics_block_top_all_num'); - variable_del('statistics_block_top_last_num'); -} - -/** * Implements hook_schema(). */ function statistics_schema() { @@ -134,3 +120,19 @@ function statistics_schema() { return $schema; } + +/** + * Moves statistics settings from variables to config. + * + * @ingroup config_upgrade + */ +function statistics_update_8000() { + update_variables_to_config('statistics.settings', array( + 'statistics_count_content_views' => 'count_content_views', + 'statistics_enable_access_log' => 'access_log.enable', + 'statistics_flush_accesslog_timer' => 'access_log.flush_timer', + 'statistics_block_top_day_num' => 'block.top_day.num', + 'statistics_block_top_all_num' => 'block.top_all.num', + 'statistics_block_top_last_num' => 'block.top_last.num', + )); +} diff --git a/core/modules/statistics/statistics.module b/core/modules/statistics/statistics.module index ef1bceb..c7ac8a3 100644 --- a/core/modules/statistics/statistics.module +++ b/core/modules/statistics/statistics.module @@ -58,7 +58,7 @@ function statistics_exit() { // in which case we need to bootstrap to the session phase anyway. drupal_bootstrap(DRUPAL_BOOTSTRAP_VARIABLES); - if (variable_get('statistics_enable_access_log', 0)) { + if (config('statistics.settings')->get('access_log.enable')) { drupal_bootstrap(DRUPAL_BOOTSTRAP_SESSION); // For anonymous users unicode.inc will not have been loaded. @@ -241,9 +241,10 @@ function statistics_cron() { } // Clean up expired access logs (if applicable). - if (variable_get('statistics_flush_accesslog_timer', 259200) > 0) { + $flush_timer = config('statistics.settings')->get('access_log.flush_timer'); + if ($flush_timer > 0) { db_delete('accesslog') - ->condition('timestamp', REQUEST_TIME - variable_get('statistics_flush_accesslog_timer', 259200), '<') + ->condition('timestamp', REQUEST_TIME - $flush_timer, '<') ->execute(); } } @@ -311,8 +312,8 @@ function statistics_get($nid) { */ function statistics_block_info() { $blocks = array(); - - if (variable_get('statistics_count_content_views', 0)) { + $statistics_count_content_views = config('statistics.settings')->get('count_content_views'); + if (!empty($statistics_count_content_views)) { $blocks['popular']['info'] = t('Popular content'); // Too dynamic to cache. $blocks['popular']['cache'] = DRUPAL_NO_CACHE; @@ -324,11 +325,12 @@ function statistics_block_info() { * Implements hook_block_configure(). */ function statistics_block_configure($delta = '') { + $config = config('statistics.settings'); // Popular content block settings $numbers = array('0' => t('Disabled')) + drupal_map_assoc(array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 20, 25, 30, 40)); - $form['statistics_block_top_day_num'] = array('#type' => 'select', '#title' => t("Number of day's top views to display"), '#default_value' => variable_get('statistics_block_top_day_num', 0), '#options' => $numbers, '#description' => t('How many content items to display in "day" list.')); - $form['statistics_block_top_all_num'] = array('#type' => 'select', '#title' => t('Number of all time views to display'), '#default_value' => variable_get('statistics_block_top_all_num', 0), '#options' => $numbers, '#description' => t('How many content items to display in "all time" list.')); - $form['statistics_block_top_last_num'] = array('#type' => 'select', '#title' => t('Number of most recent views to display'), '#default_value' => variable_get('statistics_block_top_last_num', 0), '#options' => $numbers, '#description' => t('How many content items to display in "recently viewed" list.')); + $form['statistics_block_top_day_num'] = array('#type' => 'select', '#title' => t("Number of day's top views to display"), '#default_value' => $config->get('block.top_day.num'), '#options' => $numbers, '#description' => t('How many content items to display in "day" list.')); + $form['statistics_block_top_all_num'] = array('#type' => 'select', '#title' => t('Number of all time views to display'), '#default_value' => $config->get('block.top_all.num'), '#options' => $numbers, '#description' => t('How many content items to display in "all time" list.')); + $form['statistics_block_top_last_num'] = array('#type' => 'select', '#title' => t('Number of most recent views to display'), '#default_value' => $config->get('block.top_last.num'), '#options' => $numbers, '#description' => t('How many content items to display in "recently viewed" list.')); return $form; } @@ -336,9 +338,11 @@ function statistics_block_configure($delta = '') { * Implements hook_block_save(). */ function statistics_block_save($delta = '', $edit = array()) { - variable_set('statistics_block_top_day_num', $edit['statistics_block_top_day_num']); - variable_set('statistics_block_top_all_num', $edit['statistics_block_top_all_num']); - variable_set('statistics_block_top_last_num', $edit['statistics_block_top_last_num']); + config('statistics.settings') + ->set('block.top_day.num', $edit['statistics_block_top_day_num']) + ->set('block.top_all.num', $edit['statistics_block_top_all_num']) + ->set('block.top_last.num', $edit['statistics_block_top_last_num']) + ->save(); } /** @@ -347,20 +351,20 @@ function statistics_block_save($delta = '', $edit = array()) { function statistics_block_view($delta = '') { if (user_access('access content')) { $content = array(); - - $daytop = variable_get('statistics_block_top_day_num', 0); + $config = config('statistics.settings'); + $daytop = $config->get('block.top_day.num'); if ($daytop && ($result = statistics_title_list('daycount', $daytop)) && ($node_title_list = node_title_list($result, t("Today's:")))) { $content['top_day'] = $node_title_list; $content['top_day']['#suffix'] = '
'; } - $alltimetop = variable_get('statistics_block_top_all_num', 0); + $alltimetop = $config->get('block.top_all.num'); if ($alltimetop && ($result = statistics_title_list('totalcount', $alltimetop)) && ($node_title_list = node_title_list($result, t('All time:')))) { $content['top_all'] = $node_title_list; $content['top_all']['#suffix'] = '
'; } - $lasttop = variable_get('statistics_block_top_last_num', 0); + $lasttop = $config->get('block.top_last.num'); if ($lasttop && ($result = statistics_title_list('timestamp', $lasttop)) && ($node_title_list = node_title_list($result, t('Last viewed:')))) { $content['top_last'] = $node_title_list; $content['top_last']['#suffix'] = '
'; @@ -423,7 +427,7 @@ function statistics_node_predelete(Node $node) { * Implements hook_ranking(). */ function statistics_ranking() { - if (variable_get('statistics_count_content_views', 0)) { + if (config('statistics.settings')->get('count_content_views')) { return array( 'views' => array( 'title' => t('Number of views'), diff --git a/core/modules/statistics/statistics.php b/core/modules/statistics/statistics.php index 040dc19..0b2fd3c 100644 --- a/core/modules/statistics/statistics.php +++ b/core/modules/statistics/statistics.php @@ -14,8 +14,10 @@ chdir('../../..'); define('DRUPAL_ROOT', getcwd()); include_once DRUPAL_ROOT . '/core/includes/bootstrap.inc'; +#include_once DRUPAL_ROOT . '/core/includes/common.inc'; drupal_bootstrap(DRUPAL_BOOTSTRAP_VARIABLES); -if (variable_get('statistics_count_content_views', 0)) { + +if (config('statistics.settings')->get('count_content_views')) { $nid = $_POST['nid']; if (is_numeric($nid)) { db_merge('node_counter')