PluginProbe
Independent Analytics – WordPress Analytics Plugin / 1.29.0
Independent Analytics – WordPress Analytics Plugin v1.29.0
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 All 120 releases
independent-analytics / IAWP / Migrations / Migration_1_8.php
Migration_1_8.php
53 lines 4.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace IAWP_SCOPED\IAWP\Migrations;
4
5 use IAWP_SCOPED\IAWP\Known_Referrers;
6 use IAWP_SCOPED\IAWP\Query;
7 use IAWP_SCOPED\IAWP\Utils\URL;
8 class Migration_1_8 extends Migration
9 {
10 /**
11 * @var string
12 */
13 protected $database_version = '1.8';
14 /**
15 * @return void
16 */
17 protected function handle() : void
18 {
19 global $wpdb;
20 $charset_collate = $wpdb->get_charset_collate();
21 $views_table = Query::get_table_name(Query::VIEWS);
22 $resources_table = Query::get_table_name(Query::RESOURCES);
23 $referrer_groups_table = Query::get_table_name(Query::REFERRER_GROUPS);
24 $referrers_table = Query::get_table_name(Query::REFERRERS);
25 $known_referrers = Known_Referrers::referrers();
26 // Create the groups table
27 $wpdb->query("DROP TABLE IF EXISTS {$referrer_groups_table}");
28 $wpdb->query("CREATE TABLE {$referrer_groups_table} (\n referrer_group_id bigint(20) UNSIGNED AUTO_INCREMENT,\n name varchar(2048) NOT NULL,\n domain varchar(2048) NOT NULL,\n domain_to_match varchar(2048) NOT NULL,\n type ENUM ('Search', 'Social') NOT NULL,\n PRIMARY KEY (referrer_group_id)\n ) {$charset_collate}");
29 // Insert predefined groups
30 foreach ($known_referrers as $group) {
31 foreach ($group['domains'] as $domain) {
32 $wpdb->insert($referrer_groups_table, ['name' => $group['name'], 'domain' => $group['domains'][0], 'domain_to_match' => $domain, 'type' => $group['type']]);
33 }
34 }
35 $wpdb->query("\n ALTER TABLE {$referrers_table} CHANGE COLUMN url domain varchar(2048) NOT NULL;\n ");
36 $rows = $wpdb->get_results("SELECT * FROM {$referrers_table}");
37 foreach ($rows as $row) {
38 $potential_url = new URL($row->domain);
39 if ($potential_url->is_valid_url()) {
40 $wpdb->query($wpdb->prepare("UPDATE {$referrers_table} SET domain = %s WHERE id = %d", $potential_url->get_domain(), $row->id));
41 }
42 }
43 // add a new page field to view table
44 $wpdb->query("\n ALTER TABLE {$views_table} ADD COLUMN page bigint(20) UNSIGNED NOT NULL DEFAULT 1;\n ");
45 // move the page number to the view and set the resource_id to first of similar resources
46 $wpdb->query("\n UPDATE {$views_table} AS views\n INNER JOIN {$resources_table} AS resources ON views.resource_id = resources.id\n INNER JOIN\n (\n SELECT MIN({$resources_table}.id) as resource_id,\n resource,\n singular_id,\n author_id,\n date_archive,\n search_query,\n post_type,\n term_id,\n not_found_url\n FROM {$views_table}\n INNER JOIN {$resources_table}\n ON {$resources_table}.id = {$views_table}.resource_id\n GROUP BY resource, singular_id, author_id, date_archive, search_query, post_type, term_id, not_found_url\n ) AS matcher ON resources.resource = matcher.resource\n AND (resources.singular_id = matcher.singular_id OR resources.singular_id IS NULL OR matcher.singular_id IS NULL)\n AND (resources.author_id = matcher.author_id OR resources.author_id IS NULL OR matcher.author_id IS NULL)\n AND (resources.date_archive = matcher.date_archive OR resources.date_archive IS NULL OR matcher.date_archive IS NULL)\n AND (resources.search_query = matcher.search_query OR resources.search_query IS NULL OR matcher.search_query IS NULL)\n AND (resources.post_type = matcher.post_type OR resources.post_type IS NULL OR matcher.post_type IS NULL)\n AND (resources.term_id = matcher.term_id OR resources.term_id IS NULL OR matcher.term_id IS NULL)\n AND (resources.not_found_url = matcher.not_found_url OR resources.not_found_url IS NULL OR matcher.not_found_url IS NULL)\n AND resources.id != matcher.resource_id\n SET views.resource_id = matcher.resource_id, views.page = resources.page\n ");
47 // delete the extra duplicate resources (or don't?)
48 $wpdb->query("\n DELETE resources FROM {$resources_table} AS resources \n LEFT JOIN {$views_table} AS views ON resources.id = views.resource_id\n WHERE views.id IS NULL\n ");
49 // remove the page column from resources
50 $wpdb->query("\n ALTER TABLE {$resources_table} DROP COLUMN page;\n ");
51 }
52 }
53