From 68e28c8c1bd53e50de779e3797e09587a34bcd5d Mon Sep 17 00:00:00 2001 From: Steven Ayers <5614-bluegeek9@users.noreply.drupalcode.org> Date: Sat, 8 Mar 2025 17:58:02 +0000 Subject: [PATCH] Issue #3454500 by bluegeek9: track visits and visitors --- src/Form/SettingsForm.php | 2 ++ visitors.module | 22 ++++++++++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/Form/SettingsForm.php b/src/Form/SettingsForm.php index c65e8945..87e2e78b 100644 --- a/src/Form/SettingsForm.php +++ b/src/Form/SettingsForm.php @@ -246,6 +246,7 @@ class SettingsForm extends ConfigFormBase { 4838400 => $this->t('1 month 3 weeks'), 9676800 => $this->t('3 months 3 weeks'), 31536000 => $this->t('1 year'), + 34214400 => $this->t('13 months'), ], '#description' => $this->t('Older visitors log entries (including referrer statistics) will be automatically discarded. (Requires a correctly configured <a href="@cron">cron maintenance task</a>.)', @@ -273,6 +274,7 @@ class SettingsForm extends ConfigFormBase { 4838400 => $this->t('1 month 3 weeks'), 9676800 => $this->t('3 months 3 weeks'), 31536000 => $this->t('1 year'), + 34214400 => $this->t('13 months'), ], '#description' => $this->t('Control how long or if visits by bots are logged.'), diff --git a/visitors.module b/visitors.module index 86c4f3f0..153f4913 100644 --- a/visitors.module +++ b/visitors.module @@ -22,13 +22,17 @@ use Drupal\Core\Render\BubbleableMetadata; function visitors_cron(): void { try { $settings = \Drupal::config('visitors.settings'); + $connection = \Drupal::database(); $flush_log_timer = $settings->get('flush_log_timer') ?? 0; if ($flush_log_timer > 0) { $delete_since = (string) time() - $flush_log_timer; // Clean up expired access logs. - \Drupal::database()->delete('visitors') - ->condition('visitors_date_time', $delete_since, '<') + $connection->delete('visitors_view') + ->condition('created', $delete_since, '<') + ->execute(); + $connection->delete('visitors_visit') + ->condition('exit_time', $delete_since, '<') ->execute(); } @@ -39,10 +43,20 @@ function visitors_cron(): void { if ($bot_retention_log == 1) { $delete_since = '0'; } + // Clean up expired access logs. - \Drupal::database()->delete('visitors') + $subquery = $connection->select('visitors_visit', 'visit') + ->fields('visit', ['id']) + ->condition('visit.bot', 1) + ->condition('entry_time', $delete_since, '<'); + $connection->delete('visitors_view') + ->condition('visit_id', $subquery, 'IN') + ->condition('created', $delete_since, '<') + ->execute(); + + $connection->delete('visitors_visit') ->condition('bot', 1) - ->condition('visitors_date_time', $delete_since, '<') + ->condition('exit_time', $delete_since, '<') ->execute(); } -- GitLab