diff --git a/src/Form/SettingsForm.php b/src/Form/SettingsForm.php index c65e894562b66d5914299653cecde8c8710479dd..87e2e78bf12ce52f5600570df99fbdad6a163f49 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 86c4f3f060fb9b0d49efae2ac73fc92925a32799..153f4913c84c7541a7c887f2137d632439ddfaa2 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(); }