PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 1.9
Independent Analytics – WordPress Analytics Plugin v1.9
2.15.5 2.15.4 2.15.3 2.15.2 2.15.1 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 / inc / migrations / versions / migration_1_8.php
independent-analytics / inc / migrations / versions Last commit date
migration_1_0.php 4 years ago migration_1_6.php 4 years ago migration_1_8.php 4 years ago migration_1_9.php 4 years ago
migration_1_8.php
114 lines
1 <?php
2
3 namespace IAWP;
4
5 class Migration_1_8 extends Migration
6 {
7 /**
8 * @var string
9 */
10 protected $database_version = '1.8';
11
12 /**
13 * @return void
14 */
15 protected function handle(): void
16 {
17 global $wpdb;
18
19 $charset_collate = $wpdb->get_charset_collate();
20
21 $views_table = DB::views_table();
22 $resources_table = DB::resources_table();
23 $referrer_groups_table = DB::referrer_groups_table();
24 $referrers_table = DB::referrers_table();
25
26 $known_referrers = Known_Referrers::referrers();
27
28 // Create the groups table
29 $wpdb->query("DROP TABLE IF EXISTS $referrer_groups_table");
30 $wpdb->query("CREATE TABLE $referrer_groups_table (
31 referrer_group_id bigint(20) UNSIGNED AUTO_INCREMENT,
32 name varchar(2048) NOT NULL,
33 domain varchar(2048) NOT NULL,
34 domain_to_match varchar(2048) NOT NULL,
35 type ENUM ('Search', 'Social') NOT NULL,
36 PRIMARY KEY (referrer_group_id)
37 ) $charset_collate");
38
39 // Insert predefined groups
40 foreach ($known_referrers as $group) {
41 foreach ($group['domains'] as $domain) {
42 $wpdb->insert($referrer_groups_table, ['name' => $group['name'], 'domain' => $group['domains'][0], 'domain_to_match' => $domain, 'type' => $group['type']]);
43 }
44 }
45
46 $wpdb->query("
47 ALTER TABLE $referrers_table CHANGE COLUMN url domain varchar(2048) NOT NULL;
48 ");
49 $rows = $wpdb->get_results("SELECT * FROM $referrers_table");
50
51 foreach ($rows as $row) {
52 $potential_url = new URL($row->domain);
53
54 if ($potential_url->is_valid_url()) {
55 $wpdb->query(
56 $wpdb->prepare(
57 "UPDATE $referrers_table SET domain = %s WHERE id = %d",
58 $potential_url->get_domain(),
59 $row->id
60 )
61 );
62 }
63 }
64
65 // add a new page field to view table
66 $wpdb->query("
67 ALTER TABLE $views_table ADD COLUMN page bigint(20) UNSIGNED NOT NULL DEFAULT 1;
68 ");
69
70 // move the page number to the view and set the resource_id to first of similar resources
71 $wpdb->query("
72 UPDATE $views_table AS views
73 INNER JOIN $resources_table AS resources ON views.resource_id = resources.id
74 INNER JOIN
75 (
76 SELECT MIN($resources_table.id) as resource_id,
77 resource,
78 singular_id,
79 author_id,
80 date_archive,
81 search_query,
82 post_type,
83 term_id,
84 not_found_url
85 FROM $views_table
86 INNER JOIN $resources_table
87 ON $resources_table.id = $views_table.resource_id
88 GROUP BY resource, singular_id, author_id, date_archive, search_query, post_type, term_id, not_found_url
89 ) AS matcher ON resources.resource = matcher.resource
90 AND (resources.singular_id = matcher.singular_id OR resources.singular_id IS NULL OR matcher.singular_id IS NULL)
91 AND (resources.author_id = matcher.author_id OR resources.author_id IS NULL OR matcher.author_id IS NULL)
92 AND (resources.date_archive = matcher.date_archive OR resources.date_archive IS NULL OR matcher.date_archive IS NULL)
93 AND (resources.search_query = matcher.search_query OR resources.search_query IS NULL OR matcher.search_query IS NULL)
94 AND (resources.post_type = matcher.post_type OR resources.post_type IS NULL OR matcher.post_type IS NULL)
95 AND (resources.term_id = matcher.term_id OR resources.term_id IS NULL OR matcher.term_id IS NULL)
96 AND (resources.not_found_url = matcher.not_found_url OR resources.not_found_url IS NULL OR matcher.not_found_url IS NULL)
97 AND resources.id != matcher.resource_id
98 SET views.resource_id = matcher.resource_id, views.page = resources.page
99 ");
100
101 // delete the extra duplicate resources (or don't?)
102 $wpdb->query("
103 DELETE resources FROM $resources_table AS resources
104 LEFT JOIN $views_table AS views ON resources.id = views.resource_id
105 WHERE views.id IS NULL
106 ");
107
108 // remove the page column from resources
109 $wpdb->query("
110 ALTER TABLE $resources_table DROP COLUMN page;
111 ");
112 }
113 }
114