Creates_Reports.php
1 year ago
Migration.php
1 year ago
Migration_10.php
2 years ago
Migration_11.php
2 years ago
Migration_12.php
1 year ago
Migration_13.php
2 years ago
Migration_14.php
2 years ago
Migration_15.php
2 years ago
Migration_16.php
2 years ago
Migration_17.php
1 year ago
Migration_18.php
2 years ago
Migration_19.php
2 years ago
Migration_1_0.php
2 years ago
Migration_1_6.php
2 years ago
Migration_1_8.php
2 years ago
Migration_1_9.php
2 years ago
Migration_2.php
2 years ago
Migration_20.php
2 years ago
Migration_21.php
2 years ago
Migration_22.php
2 years ago
Migration_23.php
1 year ago
Migration_24.php
2 years ago
Migration_25.php
2 years ago
Migration_26.php
2 years ago
Migration_27.php
2 years ago
Migration_28.php
2 years ago
Migration_29.php
2 years ago
Migration_3.php
2 years ago
Migration_30.php
2 years ago
Migration_31.php
2 years ago
Migration_32.php
2 years ago
Migration_33.php
2 years ago
Migration_34.php
1 year ago
Migration_35.php
1 year ago
Migration_36.php
1 year ago
Migration_37.php
1 year ago
Migration_38.php
1 year ago
Migration_39.php
1 year ago
Migration_4.php
2 years ago
Migration_40.php
1 year ago
Migration_41.php
1 year ago
Migration_42.php
1 year ago
Migration_43.php
1 year ago
Migration_5.php
2 years ago
Migration_6.php
2 years ago
Migration_7.php
1 year ago
Migration_8.php
2 years ago
Migration_9.php
2 years ago
Migration_Job.php
1 year ago
Migrations.php
1 year ago
Step_Migration.php
1 year ago
Migration_1_8.php
54 lines
| 1 | <?php |
| 2 | |
| 3 | namespace IAWP\Migrations; |
| 4 | |
| 5 | use IAWP\Known_Referrers; |
| 6 | use IAWP\Query; |
| 7 | use IAWP\Utils\URL; |
| 8 | /** @internal */ |
| 9 | class Migration_1_8 extends \IAWP\Migrations\Migration |
| 10 | { |
| 11 | /** |
| 12 | * @var string |
| 13 | */ |
| 14 | protected $database_version = '1.8'; |
| 15 | /** |
| 16 | * @return void |
| 17 | */ |
| 18 | protected function migrate() : void |
| 19 | { |
| 20 | global $wpdb; |
| 21 | $charset_collate = $wpdb->get_charset_collate(); |
| 22 | $views_table = Query::get_table_name(Query::VIEWS); |
| 23 | $resources_table = Query::get_table_name(Query::RESOURCES); |
| 24 | $referrer_groups_table = Query::get_table_name(Query::REFERRER_GROUPS); |
| 25 | $referrers_table = Query::get_table_name(Query::REFERRERS); |
| 26 | $known_referrers = Known_Referrers::referrers(); |
| 27 | // Create the groups table |
| 28 | $wpdb->query("DROP TABLE IF EXISTS {$referrer_groups_table}"); |
| 29 | $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}"); |
| 30 | // Insert predefined groups |
| 31 | foreach ($known_referrers as $group) { |
| 32 | foreach ($group['domains'] as $domain) { |
| 33 | $wpdb->insert($referrer_groups_table, ['name' => $group['name'], 'domain' => $group['domains'][0], 'domain_to_match' => $domain, 'type' => $group['type']]); |
| 34 | } |
| 35 | } |
| 36 | $wpdb->query("\n ALTER TABLE {$referrers_table} CHANGE COLUMN url domain varchar(2048) NOT NULL;\n "); |
| 37 | $rows = $wpdb->get_results("SELECT * FROM {$referrers_table}"); |
| 38 | foreach ($rows as $row) { |
| 39 | $potential_url = new URL($row->domain); |
| 40 | if ($potential_url->is_valid_url()) { |
| 41 | $wpdb->query($wpdb->prepare("UPDATE {$referrers_table} SET domain = %s WHERE id = %d", $potential_url->get_domain(), $row->id)); |
| 42 | } |
| 43 | } |
| 44 | // add a new page field to view table |
| 45 | $wpdb->query("\n ALTER TABLE {$views_table} ADD COLUMN page bigint(20) UNSIGNED NOT NULL DEFAULT 1;\n "); |
| 46 | // move the page number to the view and set the resource_id to first of similar resources |
| 47 | $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 "); |
| 48 | // delete the extra duplicate resources (or don't?) |
| 49 | $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 "); |
| 50 | // remove the page column from resources |
| 51 | $wpdb->query("\n ALTER TABLE {$resources_table} DROP COLUMN page;\n "); |
| 52 | } |
| 53 | } |
| 54 |