PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.8.4
Independent Analytics – WordPress Analytics Plugin v2.8.4
2.15.0 2.14.10 trunk 1.1 1.10 1.10.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.17.1 1.17.2 1.17.3 1.17.4 1.18 1.18.1 1.19.0 1.19.1 1.2 1.20.0 1.21.0 1.22.0 1.22.1 1.23.0 1.23.1 1.24.0 1.24.1 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.28.1 1.28.2 1.28.3 1.29.0 1.3 1.30.0 1.30.1 1.4 1.5 1.6 1.7 1.8 1.9 2.0.0 2.0.1 2.1.4 2.1.5 2.1.6 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.10 2.11.2 2.11.3 2.11.4 2.11.5 2.11.6 2.11.7 2.11.8 2.11.9 2.12.0 2.12.1 2.12.2 2.13.1 2.13.2 2.13.5 2.13.6 2.14.0 2.14.1 2.14.2 2.14.4 2.14.6 2.14.7 2.14.8 2.14.9 2.2.0 2.2.1 2.3.1 2.3.2 2.4.2 2.4.3 2.5.0 2.5.1 2.6.0 2.6.1 2.6.2 2.6.3 2.6.4 2.7.0 2.7.1 2.7.2 2.7.3 2.8.2 2.8.3 2.8.4 2.8.5 2.8.6 2.8.7 2.8.8 2.8.9 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7
independent-analytics / IAWP / Data_Pruning / Pruner.php
independent-analytics / IAWP / Data_Pruning Last commit date
Pruner.php 1 year ago Pruning_Scheduler.php 1 year ago
Pruner.php
85 lines
1 <?php
2
3 namespace IAWP\Data_Pruning;
4
5 use IAWP\Illuminate_Builder;
6 use IAWP\Query;
7 /** @internal */
8 class Pruner
9 {
10 private $cutoff_date;
11 private function __construct()
12 {
13 $this->cutoff_date = (new \IAWP\Data_Pruning\Pruning_Scheduler())->get_pruning_cutoff_as_datetime();
14 }
15 private function run()
16 {
17 if (\is_null($this->cutoff_date)) {
18 return;
19 }
20 $db = Illuminate_Builder::get_connection();
21 $db->transaction(function () {
22 $sessions_table = Query::get_table_name(Query::SESSIONS);
23 Illuminate_Builder::get_builder()->from($sessions_table)->where('created_at', '<', $this->cutoff_date->format('Y-m-d\\TH:i:s'))->delete();
24 // Delete orphaned views
25 $views_table = Query::get_table_name(Query::VIEWS);
26 $this->delete_session_orphans($views_table, 'session_id');
27 // Delete orphaned form submissions
28 $form_submissions_table = Query::get_table_name(Query::FORM_SUBMISSIONS);
29 $this->delete_session_orphans($form_submissions_table, 'session_id');
30 // Delete orphaned WooCommerce orders
31 $orders_table = Query::get_table_name(Query::ORDERS);
32 $this->delete_view_orphans($orders_table, 'view_id', 'id');
33 // Delete orphaned visitors
34 $visitors_table = Query::get_table_name(Query::VISITORS);
35 $this->delete_session_orphans($visitors_table, 'visitor_id');
36 // Delete orphaned resources
37 $resources_table = Query::get_table_name(Query::RESOURCES);
38 $this->delete_view_orphans($resources_table, 'id', 'resource_id');
39 // Delete orphaned referrers
40 $referrers_table = Query::get_table_name(Query::REFERRERS);
41 $this->delete_session_orphans($referrers_table, 'id', 'referrer_id');
42 // Delete orphaned forms
43 $forms_table = Query::get_table_name(Query::FORMS);
44 Illuminate_Builder::get_builder()->from($forms_table, 'orphans')->leftJoin("{$form_submissions_table} AS form_submissions", "orphans.form_id", '=', "form_submissions.form_id")->whereNull('form_submissions.form_id')->delete();
45 // Delete orphaned device browsers
46 $device_browsers_table = Query::get_table_name(Query::DEVICE_BROWSERS);
47 $this->delete_session_orphans($device_browsers_table, 'device_browser_id');
48 // Delete orphaned device oss
49 $device_oss_table = Query::get_table_name(Query::DEVICE_OSS);
50 $this->delete_session_orphans($device_oss_table, 'device_os_id');
51 // Delete orphaned device types
52 $device_types_table = Query::get_table_name(Query::DEVICE_TYPES);
53 $this->delete_session_orphans($device_types_table, 'device_type_id');
54 // Don't touch cities or countries for now
55 // This would be a very different custom query as cities reference countries
56 // Delete orphaned campaigns
57 $campaigns_table = Query::get_table_name(Query::CAMPAIGNS);
58 $this->delete_session_orphans($campaigns_table, 'campaign_id');
59 });
60 }
61 private function delete_session_orphans(string $table, string $column, ?string $sessions_column = null) : int
62 {
63 $sessions_table = Query::get_table_name(Query::SESSIONS);
64 $sessions_column = $sessions_column ?? $column;
65 return Illuminate_Builder::get_builder()->from($table, 'orphans')->leftJoin("{$sessions_table} AS sessions", "orphans.{$column}", '=', "sessions.{$sessions_column}")->whereNull('sessions.session_id')->delete();
66 }
67 private function delete_view_orphans(string $table, string $column, ?string $views_column = null) : int
68 {
69 $views_table = Query::get_table_name(Query::VIEWS);
70 $views_column = $views_column ?? $column;
71 return Illuminate_Builder::get_builder()->from($table, 'orphans')->leftJoin("{$views_table} AS views", "orphans.{$column}", '=', "views.{$views_column}")->whereNull('views.id')->delete();
72 }
73 public static function register_hook()
74 {
75 \add_action('iawp_prune', function () {
76 self::prune();
77 });
78 }
79 public static function prune()
80 {
81 $pruner = new self();
82 $pruner->run();
83 }
84 }
85