From 74f71c50f702148c5c6331ccd3bff92fecc6ba7b Mon Sep 17 00:00:00 2001 From: phl0 Date: Thu, 23 May 2024 11:42:22 +0200 Subject: [PATCH] Merge into signle migraiton script --- application/config/migration.php | 2 +- ...ota_renames.php => 201_pota_migration.php} | 720 ++++++++++++++++- .../migrations/202_pota_migrations.php | 724 ------------------ 3 files changed, 714 insertions(+), 732 deletions(-) rename application/migrations/{201_pota_renames.php => 201_pota_migration.php} (54%) delete mode 100644 application/migrations/202_pota_migrations.php diff --git a/application/config/migration.php b/application/config/migration.php index 7b31a5cbc..f73a6e6c0 100644 --- a/application/config/migration.php +++ b/application/config/migration.php @@ -22,7 +22,7 @@ $config['migration_enabled'] = TRUE; | */ -$config['migration_version'] = 202; +$config['migration_version'] = 201; /* |-------------------------------------------------------------------------- diff --git a/application/migrations/201_pota_renames.php b/application/migrations/201_pota_migration.php similarity index 54% rename from application/migrations/201_pota_renames.php rename to application/migrations/201_pota_migration.php index cf4f4f7ef..a19640646 100644 --- a/application/migrations/201_pota_renames.php +++ b/application/migrations/201_pota_migration.php @@ -6,7 +6,7 @@ defined('BASEPATH') or exit('No direct script access allowed'); // of parks // See https://docs.pota.app/docs/changes.html -class Migration_pota_renames extends CI_Migration { +class Migration_pota_migration extends CI_Migration { var $k_map = array( 'K-0053' => 'AS-0001', @@ -607,9 +607,666 @@ class Migration_pota_renames extends CI_Migration { 'LA-2524' => 'BV-0001', ); + var $park_migration_map = array( + // First process all entities whose previous prefix is also an ISO reference for a new/other entity + // Ensures that those entities are not renamed twice + 'CP' => 'BO', + 'FO' => 'PF', + 'CN' => 'MA', + 'BY' => 'CN', + 'CA' => 'CL', + 'VE' => 'CA', + 'CV' => 'UY', + 'D4' => 'CV', + 'CU' => 'PT', + 'CO' => 'CU', + 'HK' => 'CO', + 'VR' => 'HK', + 'HR' => 'HN', + '9A' => 'HR', + 'FK' => 'NC', + 'VP8' => 'FK', + 'TF' => 'IS', + 'FT5Z' => 'TF', + 'FT5' => 'TF', + 'FT' => 'TF', + 'GI' => 'GB', + 'ZB' => 'GI', + 'GD' => 'IM', + 'J3' => 'GD', + 'GW' => 'GB', + 'HK0' => 'CO', + 'J5' => 'GW', + 'LA' => 'NO', + 'XW' => 'LA', + 'OM' => 'SK', + 'A4' => 'OM', + 'PA' => 'NL', + 'HP' => 'PA', + 'PY' => 'BR', + 'PY0S' => 'BR', + 'PY0F' => 'BR', + 'PY0T' => 'BR', + 'ZP' => 'PY', + 'UA0' => 'RU', + 'R1F' => 'RU', + 'UA2' => 'RU', + 'SM' => 'SE', + 'T7' => 'SM', + 'ST0' => 'SS', + 'ST' => 'SD', + 'S9' => 'ST', + 'ZA' => 'AL', + 'ZR' => 'ZA', + 'ZS8' => 'ZA', + 'ES' => 'EE', + 'EA' => 'ES', + 'TJ' => 'CM', + 'EY' => 'TJ', + 'TZ' => 'ML', + '5H3' => 'TZ', + 'GM' => 'GB', + 'C5' => 'GM', + 'TL' => 'CF', + '4W' => 'TL', + 'TG' => 'GT', + '5V' => 'TG', + 'TK' => 'FR', + 'ZK3' => 'TK', + 'TT' => 'TD', + '9Y' => 'TT', + 'TN' => 'CG', + '3V8' => 'TN', + 'TR' => 'GA', + 'TA' => 'TR', + 'UM' => 'KG', + 'KH1' => 'UM', + 'VU4' => 'IN', + 'VU7' => 'IN', + 'VU' => 'IN', + 'YJ8' => 'VU', + + // Changes on 2024-02-20 + '4O' => 'ME', + // Changes on 2024-02-22 + //'ES' => 'EE', + 'S0' => 'EH', + '9J2' => 'ZM', + '7O' => 'YE', + // Changes on 2024-02-24 + //'TF' => 'IS', + 'Z2' => 'ZW', + '8R' => 'GY', + 'V2' => 'AG', + 'UI' => 'UZ', + 'HV' => 'VA', + // Changes on 2024-02-25 + '3DA' => 'SZ', + '9N' => 'NP', + '3B8' => 'MU', + //'ZA' => 'AL', + '4J' => 'AZ', + '3C' => 'GQ', + 'E3' => 'ER', + 'HH' => 'HT', + 'YN' => 'NI', + '3X' => 'GN', + 'C2' => 'NR', + '8Q6' => 'MV', + 'H44' => 'SB', + '5U' => 'NE', + 'E6' => 'NU', + 'EZ' => 'TM', + '5X' => 'UG', + 'A9' => 'BH', + 'S2' => 'BD', + 'A5' => 'BT', + '4S7' => 'LK', + 'EP' => 'IR', + 'P5' => 'KP', + '9K2' => 'KW', + 'OD5' => 'LB', + 'JT' => 'MN', + 'AP' => 'PK', + 'A7' => 'QA', + 'HZ' => 'SA', + 'S79' => 'SC', + 'J2' => 'DJ', + '7X' => 'DZ', + 'D2' => 'AO', + '9U5' => 'BI', + //'' => 'CM', + 'D6' => 'KM', + //'' => 'CG', + '5Z4' => 'KE', + '7P8' => 'LS', + 'EL' => 'LR', + //'5A' => '', + '5R' => 'MG', + '7Q7' => 'MW', + //'' => 'ML', + '5T' => 'MR', + //'CN' => 'MA', + '5N' => 'NG', + '9X5' => 'RW', + '6W' => 'SN', + '9L1' => 'SL', + //'OM' => 'SK', + 'ZC6' => 'PS', + 'PJ7' => 'SX', + //'5H3' => '', + //'' => 'BQ', + //'' => 'CD', + //'3V8' => '', + //'S9' => '', + //'EY' => '', + // Changes on 2024-02-26 + 'EK' => 'AM', + 'OX' => 'GL', + 'OY' => 'FO', + 'P4' => 'AW', + 'V4' => 'KN', + 'HC' => 'EC', + 'V5' => 'NA', + //'CP' => 'BO', + 'PZ' => 'SR', + //'VP8' => 'FK', + 'YA' => 'AF', + 'VP2E' => 'AI', + 'T8' => 'PW', + 'T31' => 'KI', + '4L' => 'GE', + 'VP5' => 'TC', + 'J7' => 'DM', + 'VP2M' => 'MS', + 'J8' => 'VC', + 'UL' => 'KZ', + //'UM' => 'KG', + 'XX9' => 'MO', + 'P29' => 'PG', + 'UO' => 'MD', + 'C3' => 'AD', + 'T5' => 'SO', + '9H' => 'MT', + 'T2' => 'TV', + 'XZ2' => 'MM', + 'XU' => 'KH', + 'YI' => 'IQ', + 'V85' => 'BN', + 'YK' => 'SY', + 'A6' => 'AE', + //'TL' => 'CF', + //'TT' => 'TD', + 'TY' => 'BJ', + //'TR' => 'GA', + 'TU' => 'CI', + //'' => 'SD', + 'SU' => 'EG', + 'XT' => 'BF', + //'T33' => '', + //'ST0' => 'SS', + //'Z6' => '', + 'CE9' => 'AQ', + 'GJ' => 'JE', + 'GU' => 'GG', + // Changes on 2024-02-28 + 'OU' => 'DK', + //'' => 'PM', + // Changes on 2024-02-29 + 'HI' => 'DO', + //'' => 'PM', + // Changes on 2024-03-01 + '9M' => 'MY', + '9V' => 'SG', + 'HL' => 'KR', + 'HS' => 'TH', + '5B' => 'CY', + //'' => 'CL', + //'' => 'TW', + 'OE' => 'AT', + 'HB' => 'CH', + 'LX' => 'LU', + //'HR' => 'HN', + '8P' => 'BB', + 'DU' => 'PH', + '6Y' => 'JM', + 'A2' => 'BW', + 'C9' => 'MZ', + //'CV' => 'UY', + //'9Y' => '', + 'C6' => 'BS', + 'J6' => 'LC', + 'A3' => 'TO', + 'HA' => 'HU', + 'HB0' => 'LI', + //'4U1UN' => '', + '4X' => 'IL', + 'JY' => 'JO', + //'A4' => '', + '9G1' => 'GH', + 'OK' => 'CZ', + //'4W' => '', + //'GD' => 'IM', + // Changes on 2024-03-03 + //'PA' => 'NL', + 'DA' => 'DE', + 'CT' => 'PT', + 'JA' => 'JP', + //'' => 'NO', + //'' => 'IN', + //'' => 'SE', + //'' => 'WF', + //'' => 'VI', + //'' => 'TK', + //'' => 'SJ', + //'' => 'RE', + //'' => 'PR', + //'' => 'PN', + //'' => 'NF', + //'' => 'NC', + //'' => 'MP', + //'' => 'MF', + //'' => 'IO', + //'' => 'HM', + //'' => 'GS', + //'' => 'GP', + //'' => 'GF', + //'' => 'CX', + //'' => 'CK', + //'' => 'CC', + //'' => 'BL', + //'' => 'AX', + //'' => 'AS', + //'EA' => '', + //'YV' => '', + //'EV' => '', + //'SM' => '', + //'XW' => '', + //'YJ8' => '', + //'KP' => '', + // Changes on 2024-03-04 + 'VP9' => 'BM', + // CHanges on 2024-03-14 + 'OA' => 'PE', + 'OH' => 'FI', + //'TG' => 'GT', + //'T7' => '', + //'TA' => '', + // Changes on 2024-03-15 + 'F' => 'FR', + 'XE' => 'MX', + //'ZR' => '', + //'CN' => '', + //'' => 'MQ', + // Changes on 2024-03-18 + 'I' => 'IT', + 'ZL' => 'NZ', + 'SP' => 'PL', + 'V3' => 'BZ', + 'ZF' => 'KY', + //'YS' => '', + 'YO' => 'RO', + 'PJ2' => 'CW', + + // Changes not mentioned separately?! + 'K' => 'US', + 'G' => 'GB', + //'C5' => 'GM', + //'D4' => 'CV', + 'EI' => 'IE', + //'GI' => 'GB', + //'GM' => 'GB', + //'GW' => 'GB', + //'HP' => 'PA', + //'J5' => 'GW', + 'LZ' => 'BG', + 'ON' => 'BE', + //'PJ2' => 'CW', + //'PY' => 'BR', + 'S5' => 'SI', + 'SV' => 'GR', + //'T3' => 'GD', + //'T7' => 'SM', + //'TA' => 'TR', + 'TB' => 'GT', + 'TI' => 'CR', + 'VK' => 'AU', + 'XV2' => 'VN', + 'YB' => 'ID', + 'YS' => 'SV', + 'YT' => 'RS', + 'ZL' => 'NZ', + //'ZP' => 'PY', + //'ZR' => 'ZA', + //'5H3' => 'TZ', + //'3V8' => 'TN', + '3B7' => 'MU', + '3B9' => 'MU', + '3C0' => 'GQ', + '3D2' => 'FJ', + //'3D2' => 'FJ', + //'3D2' => 'FJ', + '3Y' => 'AQ', + '5A' => 'LY', + '9M2' => 'MY', + '9Q' => 'CD', + 'BV' => 'TW', + 'BV9P' => 'TW', + 'BS7H' => 'CN', + 'CE0X' => 'CL', + 'CE0Y' => 'CL', + 'CE0Z' => 'CL', + 'CT3' => 'PT', + 'CY0' => 'CA', + 'CY9' => 'CA', + 'E5' => 'CK', + 'EV' => 'BY', + 'H40' => 'SB', + 'HC8' => 'EC', + 'IS0' => 'IT', + 'JD' => 'JP', + 'JW' => 'SJ', + 'JX' => 'SJ', + 'KC4' => 'US', + 'KH6' => 'US', + 'KH8' => 'AS', + 'KH8' => 'AS', + 'KL7' => 'US', + 'KP5' => 'PR', + 'N5' => 'CK', + 'OH0' => 'AX', + 'OJ0' => 'FI', + 'PJ4' => 'BQ', + 'PJ5' => 'BQ', + 'SV' => 'GR', + 'SV5' => 'GR', + 'SV9' => 'GR', + 'T30' => 'KI', + 'T32' => 'KI', + 'T33' => 'KI', + 'TI9' => 'CR', + 'V7' => 'MH', + 'VK0H' => 'HM', + 'VK0M' => 'AU', + 'VK9C' => 'CC', + 'VK9L' => 'AU', + 'VK9M' => 'AU', + 'VK9N' => 'NF', + 'VK9W' => 'AU', + 'VK9X' => 'CX', + 'VP0G' => 'GS', + 'VP0S' => 'GS', + 'VP2V' => 'VG', + 'VP6' => 'PN', + 'VP8H' => 'GB', + 'VP8O' => 'GB', + 'VQ9' => 'IO', + 'XF4' => 'MX', + 'YV' => 'VE', + 'YV0' => 'VE', + 'ZC4' => 'GB', + 'ZD7' => 'SH', + 'ZD8' => 'SH', + 'ZD9' => 'SH', + 'ZL7' => 'NZ', + 'ZL8' => 'NZ', + 'ZL9' => 'NZ', + + ); + + var $tld2dxcc = array( + 'AD' => '203', + 'AE' => '391', + 'AF' => '3', + 'AG' => '94', + 'AI' => '12', + 'AL' => '7', + 'AM' => '14', + 'AO' => '401', + 'AQ' => '13', + 'AR' => '100', + 'AS' => '9, 515', + 'AT' => '206', + 'AU' => '147, 150, 153, 171', + 'AW' => '91', + 'AX' => '5', + 'AZ' => '18', + 'BA' => '501', + 'BB' => '62', + 'BD' => '305', + 'BE' => '209', + 'BF' => '480', + 'BG' => '212', + 'BH' => '304', + 'BI' => '404', + 'BJ' => '416', + 'BL' => '516', + 'BM' => '64', + 'BN' => '345', + 'BO' => '104', + 'BQ' => '519, 520', + 'BR' => '56, 108, 253, 273', + 'BS' => '60', + 'BT' => '306', + 'BV' => '24', + 'BW' => '402', + 'BY' => '27', + 'BZ' => '66', + 'CA' => '1, 211', + 'CC' => '37, 38', + 'CD' => '414', + 'CF' => '408', + 'CG' => '412', + 'CH' => '287', + 'CI' => '428', + 'CK' => '191, 234', + 'CL' => '47, 112, 125, 217', + 'CM' => '406', + 'CN' => '318, 506', + 'CO' => '116, 161, 216', + 'CR' => '308', + 'CU' => '70, 105', + 'CV' => '409', + 'CW' => '517', + 'CX' => '35', + 'CY' => '215', + 'CZ' => '503', + 'DE' => '230', + 'DJ' => '382', + 'DK' => '221', + 'DM' => '95', + 'DO' => '72', + 'DZ' => '400', + 'EC' => '71, 120', + 'EE' => '52', + 'EG' => '478', + 'EH' => '302', + 'ER' => '51', + 'ES' => '21, 29, 32, 281', + 'ET' => '53', + 'FI' => '167, 224', + 'FJ' => '176, 460, 489', + 'FK' => '141', + 'FM' => '173', + 'FO' => '222', + 'FR' => '36, 213, 214, 227', + 'GA' => '420', + 'GB' => '223, 238, 241, 265, 279, 283, 294', + 'GD' => '77', + 'GE' => '75', + 'GF' => '63', + 'GG' => '106', + 'GH' => '424', + 'GI' => '233', + 'GL' => '237', + 'GM' => '422', + 'GN' => '107', + 'GP' => '79', + 'GQ' => '49, 195', + 'GR' => '40, 45, 180, 236', + 'GS' => '235, 240, 303', + 'GT' => '76', + 'GU' => '103', + 'GW' => '109', + 'GY' => '129', + 'HK' => '321', + 'HM' => '111', + 'HN' => '80', + 'HR' => '497', + 'HT' => '78', + 'HU' => '239', + 'ID' => '327', + 'IE' => '245', + 'IL' => '336', + 'IM' => '114', + 'IN' => '11, 142, 324', + 'IQ' => '333', + 'IR' => '330', + 'IS' => '242', + 'IT' => '225, 248', + 'JE' => '122', + 'JM' => '82', + 'JO' => '342', + 'JP' => '177, 192, 339', + 'KE' => '430', + 'KG' => '135', + 'KH' => '312', + 'KI' => '31, 48, 301, 490', + 'KM' => '411', + 'KN' => '249', + 'KP' => '344', + 'KR' => '137', + 'KW' => '348', + 'KY' => '69', + 'KZ' => '130', + 'LA' => '143', + 'LB' => '354', + 'LC' => '97', + 'LI' => '251', + 'LK' => '315', + 'LR' => '434', + 'LS' => '432', + 'LT' => '146', + 'LU' => '254', + 'LV' => '145', + 'LY' => '436', + 'MA' => '446', + 'MC' => '260', + 'MD' => '179', + 'ME' => '514', + 'MG' => '438', + 'MH' => '168', + 'MK' => '502', + 'ML' => '442', + 'MM' => '309', + 'MN' => '363', + 'MO' => '152', + 'MP' => '166', + 'MQ' => '84', + 'MR' => '444', + 'MS' => '96', + 'MT' => '246, 257', + 'MU' => '4, 33, 165, 207', + 'MV' => '159', + 'MW' => '440', + 'MX' => '50, 204', + 'MY' => '46, 299', + 'MZ' => '181', + 'NA' => '464', + 'NC' => '162, 512', + 'NE' => '187', + 'NF' => '189', + 'NG' => '450', + 'NI' => '86', + 'NL' => '263', + 'NO' => '199, 266', + 'NP' => '369', + 'NR' => '157', + 'NU' => '188', + 'NZ' => '16, 34, 133, 170', + 'OM' => '370', + 'PA' => '88', + 'PE' => '136', + 'PF' => '175, 508, 509', + 'PG' => '163', + 'PH' => '375', + 'PK' => '372', + 'PL' => '269', + 'PM' => '277', + 'PN' => '172, 513', + 'PR' => '43, 202', + 'PS' => '510', + 'PT' => '149, 256, 272', + 'PW' => '22', + 'PY' => '132', + 'QA' => '376', + 'RE' => '453', + 'RO' => '275', + 'RS' => '296', + 'RU' => '15, 54, 61, 89, 126', + 'RW' => '454', + 'SA' => '378', + 'SB' => '185, 507', + 'SC' => '379', + 'SD' => '466', + 'SE' => '284', + 'SG' => '381', + 'SH' => '205, 250, 274', + 'SI' => '499', + 'SJ' => '118, 259', + 'SK' => '504', + 'SL' => '458', + 'SM' => '278', + 'SN' => '456', + 'SO' => '232', + 'SR' => '140', + 'SS' => '521', + 'ST' => '219', + 'SV' => '74', + 'SX' => '518', + 'SY' => '384', + 'SZ' => '468', + 'TD' => '410', + 'TF' => '10, 41, 99, 124, 131, 276', + 'TG' => '483', + 'TH' => '387', + 'TJ' => '262', + 'TK' => '270', + 'TL' => '511', + 'TM' => '280', + 'TN' => '474', + 'TO' => '160', + 'TR' => '390', + 'TT' => '90', + 'TV' => '282', + 'TW' => '386, 505', + 'TZ' => '470', + 'UA' => '288', + 'UG' => '286', + 'UM' => '20, 123, 134, 174, 182, 197, 297', + 'US' => '6, 110, 138, 252, 291', + 'UY' => '144', + 'UZ' => '292', + 'VA' => '295', + 'VC' => '98', + 'VE' => '17, 148', + 'VG' => '65', + 'VI' => '285', + 'VN' => '293', + 'VU' => '158', + 'WF' => '298', + 'WS' => '190', + 'XK' => '522', + 'YE' => '492', + 'YT' => '169', + 'ZA' => '201, 462', + 'ZM' => '482', + 'ZW' => '452', + ); + public function up() { $prefixes = array( 'K', 'GI', 'GM', 'GW', 'LA' ); - $this->add_ix('TMP_HRD_IDX_COL_POTA','`COL_POTA_REF`,`COL_DXCC`'); + $this->add_ix_rename('TMP_HRD_IDX_COL_POTA','`COL_POTA_REF`,`COL_DXCC`'); // QSO table foreach ($prefixes as $prefix) { $this->db->select("COUNT(COL_PRIMARY_KEY) AS count"); @@ -618,7 +1275,7 @@ class Migration_pota_renames extends CI_Migration { $row = $query->row(); if ($row->count > 0) { foreach ($this->{strtolower($prefix).'_map'} AS $key => $value) { - $this->update_db($key, $value); + $this->update_db_rename_qsos($key, $value); } } } @@ -630,26 +1287,53 @@ class Migration_pota_renames extends CI_Migration { $row = $query->row(); if ($row->count > 0) { foreach ($this->{strtolower($prefix).'_map'} AS $key => $value) { - $this->update_db_profiles($key, $value); + $this->update_db_rename_locations($key, $value); } } } + + // QSO table + $this->db->select('COUNT(COL_PRIMARY_KEY) AS count'); + $this->db->where('COL_POTA_REF !=', ""); + $query = $this->db->get($this->config->item('table_name')); + $row = $query->row(); + if ($row->count > 0) { + foreach ($this->park_migration_map as $key => $value) { + $this->update_db_migrate_qsos($key, $value); + } + } else { + log_message('info', 'No POTA references found. Migrations skipped.'); + } + + // Station profiles + $this->db->select('COUNT(station_id) AS count'); + $this->db->where('station_pota !=', ""); + $query = $this->db->get('station_profile'); + $row = $query->row(); + if ($row->count > 0) { + foreach ($this->park_migration_map as $key => $value) { + $this->update_db_migrate_locations($key, $value); + } + } else { + log_message('info', 'No POTA references found. Migrations skipped.'); + } + $this->rm_ix_migration('TMP_HRD_IDX_COL_POTA'); } public function down() { } - function update_db($from, $to) { + function update_db_rename_qsos($from, $to) { $this->db->where('COL_POTA_REF', $from); $this->db->update($this->config->item('table_name'), array('COL_POTA_REF' => $to)); } - function update_db_profiles($from, $to) { + function update_db_rename_locations($from, $to) { $this->db->where('station_pota', $from); $this->db->update('station_profile', array('station_pota' => $to)); } - private function add_ix($index,$cols) { + private function add_ix_rename($index,$cols) { $ix_exist = $this->db->query("SHOW INDEX FROM ".$this->config->item('table_name')." WHERE Key_name = '".$index."'")->num_rows(); if ($ix_exist == 0) { $sql = "ALTER TABLE ".$this->config->item('table_name')." ADD INDEX `".$index."` (".$cols.");"; @@ -657,4 +1341,26 @@ class Migration_pota_renames extends CI_Migration { } } + function update_db_migrate_qsos($from, $to) { + $sql= "UPDATE ".$this->config->item('table_name')." FORCE INDEX (`TMP_HRD_IDX_COL_POTA`) SET COL_POTA_REF = REPLACE(COL_POTA_REF, '".$from."-', '".$to."-') WHERE COL_POTA_REF like '".$from."-%'"; + if (array_key_exists($to, $this->tld2dxcc)) { + $sql .= "AND COL_DXCC IN (".$this->tld2dxcc[$to].")"; + } + $sql .= ";"; + $this->db->query($sql); + } + + function update_db_migrate_locations($from, $to) { + $sql= "UPDATE station_profile SET station_pota = REPLACE(station_pota, '".$from."-', '".$to."-') WHERE SUBSTRING(station_pota,1,".(strlen($from)+1).") = '".$from."-';"; + $sql .= ";"; + $this->db->query($sql); + } + + private function rm_ix_migration($index) { + $ix_exist = $this->db->query("SHOW INDEX FROM ".$this->config->item('table_name')." WHERE Key_name = '".$index."'")->num_rows(); + if ($ix_exist >= 1) { + $sql = "ALTER TABLE ".$this->config->item('table_name')." DROP INDEX `".$index."`;"; + $this->db->query($sql); + } + } } diff --git a/application/migrations/202_pota_migrations.php b/application/migrations/202_pota_migrations.php deleted file mode 100644 index 6737c7d6d..000000000 --- a/application/migrations/202_pota_migrations.php +++ /dev/null @@ -1,724 +0,0 @@ - 'BO', - 'FO' => 'PF', - 'CN' => 'MA', - 'BY' => 'CN', - 'CA' => 'CL', - 'VE' => 'CA', - 'CV' => 'UY', - 'D4' => 'CV', - 'CU' => 'PT', - 'CO' => 'CU', - 'HK' => 'CO', - 'VR' => 'HK', - 'HR' => 'HN', - '9A' => 'HR', - 'FK' => 'NC', - 'VP8' => 'FK', - 'TF' => 'IS', - 'FT5Z' => 'TF', - 'FT5' => 'TF', - 'FT' => 'TF', - 'GI' => 'GB', - 'ZB' => 'GI', - 'GD' => 'IM', - 'J3' => 'GD', - 'GW' => 'GB', - 'HK0' => 'CO', - 'J5' => 'GW', - 'LA' => 'NO', - 'XW' => 'LA', - 'OM' => 'SK', - 'A4' => 'OM', - 'PA' => 'NL', - 'HP' => 'PA', - 'PY' => 'BR', - 'PY0S' => 'BR', - 'PY0F' => 'BR', - 'PY0T' => 'BR', - 'ZP' => 'PY', - 'UA0' => 'RU', - 'R1F' => 'RU', - 'UA2' => 'RU', - 'SM' => 'SE', - 'T7' => 'SM', - 'ST0' => 'SS', - 'ST' => 'SD', - 'S9' => 'ST', - 'ZA' => 'AL', - 'ZR' => 'ZA', - 'ZS8' => 'ZA', - 'ES' => 'EE', - 'EA' => 'ES', - 'TJ' => 'CM', - 'EY' => 'TJ', - 'TZ' => 'ML', - '5H3' => 'TZ', - 'GM' => 'GB', - 'C5' => 'GM', - 'TL' => 'CF', - '4W' => 'TL', - 'TG' => 'GT', - '5V' => 'TG', - 'TK' => 'FR', - 'ZK3' => 'TK', - 'TT' => 'TD', - '9Y' => 'TT', - 'TN' => 'CG', - '3V8' => 'TN', - 'TR' => 'GA', - 'TA' => 'TR', - 'UM' => 'KG', - 'KH1' => 'UM', - 'VU4' => 'IN', - 'VU7' => 'IN', - 'VU' => 'IN', - 'YJ8' => 'VU', - - // Changes on 2024-02-20 - '4O' => 'ME', - // Changes on 2024-02-22 - //'ES' => 'EE', - 'S0' => 'EH', - '9J2' => 'ZM', - '7O' => 'YE', - // Changes on 2024-02-24 - //'TF' => 'IS', - 'Z2' => 'ZW', - '8R' => 'GY', - 'V2' => 'AG', - 'UI' => 'UZ', - 'HV' => 'VA', - // Changes on 2024-02-25 - '3DA' => 'SZ', - '9N' => 'NP', - '3B8' => 'MU', - //'ZA' => 'AL', - '4J' => 'AZ', - '3C' => 'GQ', - 'E3' => 'ER', - 'HH' => 'HT', - 'YN' => 'NI', - '3X' => 'GN', - 'C2' => 'NR', - '8Q6' => 'MV', - 'H44' => 'SB', - '5U' => 'NE', - 'E6' => 'NU', - 'EZ' => 'TM', - '5X' => 'UG', - 'A9' => 'BH', - 'S2' => 'BD', - 'A5' => 'BT', - '4S7' => 'LK', - 'EP' => 'IR', - 'P5' => 'KP', - '9K2' => 'KW', - 'OD5' => 'LB', - 'JT' => 'MN', - 'AP' => 'PK', - 'A7' => 'QA', - 'HZ' => 'SA', - 'S79' => 'SC', - 'J2' => 'DJ', - '7X' => 'DZ', - 'D2' => 'AO', - '9U5' => 'BI', - //'' => 'CM', - 'D6' => 'KM', - //'' => 'CG', - '5Z4' => 'KE', - '7P8' => 'LS', - 'EL' => 'LR', - //'5A' => '', - '5R' => 'MG', - '7Q7' => 'MW', - //'' => 'ML', - '5T' => 'MR', - //'CN' => 'MA', - '5N' => 'NG', - '9X5' => 'RW', - '6W' => 'SN', - '9L1' => 'SL', - //'OM' => 'SK', - 'ZC6' => 'PS', - 'PJ7' => 'SX', - //'5H3' => '', - //'' => 'BQ', - //'' => 'CD', - //'3V8' => '', - //'S9' => '', - //'EY' => '', - // Changes on 2024-02-26 - 'EK' => 'AM', - 'OX' => 'GL', - 'OY' => 'FO', - 'P4' => 'AW', - 'V4' => 'KN', - 'HC' => 'EC', - 'V5' => 'NA', - //'CP' => 'BO', - 'PZ' => 'SR', - //'VP8' => 'FK', - 'YA' => 'AF', - 'VP2E' => 'AI', - 'T8' => 'PW', - 'T31' => 'KI', - '4L' => 'GE', - 'VP5' => 'TC', - 'J7' => 'DM', - 'VP2M' => 'MS', - 'J8' => 'VC', - 'UL' => 'KZ', - //'UM' => 'KG', - 'XX9' => 'MO', - 'P29' => 'PG', - 'UO' => 'MD', - 'C3' => 'AD', - 'T5' => 'SO', - '9H' => 'MT', - 'T2' => 'TV', - 'XZ2' => 'MM', - 'XU' => 'KH', - 'YI' => 'IQ', - 'V85' => 'BN', - 'YK' => 'SY', - 'A6' => 'AE', - //'TL' => 'CF', - //'TT' => 'TD', - 'TY' => 'BJ', - //'TR' => 'GA', - 'TU' => 'CI', - //'' => 'SD', - 'SU' => 'EG', - 'XT' => 'BF', - //'T33' => '', - //'ST0' => 'SS', - //'Z6' => '', - 'CE9' => 'AQ', - 'GJ' => 'JE', - 'GU' => 'GG', - // Changes on 2024-02-28 - 'OU' => 'DK', - //'' => 'PM', - // Changes on 2024-02-29 - 'HI' => 'DO', - //'' => 'PM', - // Changes on 2024-03-01 - '9M' => 'MY', - '9V' => 'SG', - 'HL' => 'KR', - 'HS' => 'TH', - '5B' => 'CY', - //'' => 'CL', - //'' => 'TW', - 'OE' => 'AT', - 'HB' => 'CH', - 'LX' => 'LU', - //'HR' => 'HN', - '8P' => 'BB', - 'DU' => 'PH', - '6Y' => 'JM', - 'A2' => 'BW', - 'C9' => 'MZ', - //'CV' => 'UY', - //'9Y' => '', - 'C6' => 'BS', - 'J6' => 'LC', - 'A3' => 'TO', - 'HA' => 'HU', - 'HB0' => 'LI', - //'4U1UN' => '', - '4X' => 'IL', - 'JY' => 'JO', - //'A4' => '', - '9G1' => 'GH', - 'OK' => 'CZ', - //'4W' => '', - //'GD' => 'IM', - // Changes on 2024-03-03 - //'PA' => 'NL', - 'DA' => 'DE', - 'CT' => 'PT', - 'JA' => 'JP', - //'' => 'NO', - //'' => 'IN', - //'' => 'SE', - //'' => 'WF', - //'' => 'VI', - //'' => 'TK', - //'' => 'SJ', - //'' => 'RE', - //'' => 'PR', - //'' => 'PN', - //'' => 'NF', - //'' => 'NC', - //'' => 'MP', - //'' => 'MF', - //'' => 'IO', - //'' => 'HM', - //'' => 'GS', - //'' => 'GP', - //'' => 'GF', - //'' => 'CX', - //'' => 'CK', - //'' => 'CC', - //'' => 'BL', - //'' => 'AX', - //'' => 'AS', - //'EA' => '', - //'YV' => '', - //'EV' => '', - //'SM' => '', - //'XW' => '', - //'YJ8' => '', - //'KP' => '', - // Changes on 2024-03-04 - 'VP9' => 'BM', - // CHanges on 2024-03-14 - 'OA' => 'PE', - 'OH' => 'FI', - //'TG' => 'GT', - //'T7' => '', - //'TA' => '', - // Changes on 2024-03-15 - 'F' => 'FR', - 'XE' => 'MX', - //'ZR' => '', - //'CN' => '', - //'' => 'MQ', - // Changes on 2024-03-18 - 'I' => 'IT', - 'ZL' => 'NZ', - 'SP' => 'PL', - 'V3' => 'BZ', - 'ZF' => 'KY', - //'YS' => '', - 'YO' => 'RO', - 'PJ2' => 'CW', - - // Changes not mentioned separately?! - 'K' => 'US', - 'G' => 'GB', - //'C5' => 'GM', - //'D4' => 'CV', - 'EI' => 'IE', - //'GI' => 'GB', - //'GM' => 'GB', - //'GW' => 'GB', - //'HP' => 'PA', - //'J5' => 'GW', - 'LZ' => 'BG', - 'ON' => 'BE', - //'PJ2' => 'CW', - //'PY' => 'BR', - 'S5' => 'SI', - 'SV' => 'GR', - //'T3' => 'GD', - //'T7' => 'SM', - //'TA' => 'TR', - 'TB' => 'GT', - 'TI' => 'CR', - 'VK' => 'AU', - 'XV2' => 'VN', - 'YB' => 'ID', - 'YS' => 'SV', - 'YT' => 'RS', - 'ZL' => 'NZ', - //'ZP' => 'PY', - //'ZR' => 'ZA', - //'5H3' => 'TZ', - //'3V8' => 'TN', - '3B7' => 'MU', - '3B9' => 'MU', - '3C0' => 'GQ', - '3D2' => 'FJ', - //'3D2' => 'FJ', - //'3D2' => 'FJ', - '3Y' => 'AQ', - '5A' => 'LY', - '9M2' => 'MY', - '9Q' => 'CD', - 'BV' => 'TW', - 'BV9P' => 'TW', - 'BS7H' => 'CN', - 'CE0X' => 'CL', - 'CE0Y' => 'CL', - 'CE0Z' => 'CL', - 'CT3' => 'PT', - 'CY0' => 'CA', - 'CY9' => 'CA', - 'E5' => 'CK', - 'EV' => 'BY', - 'H40' => 'SB', - 'HC8' => 'EC', - 'IS0' => 'IT', - 'JD' => 'JP', - 'JW' => 'SJ', - 'JX' => 'SJ', - 'KC4' => 'US', - 'KH6' => 'US', - 'KH8' => 'AS', - 'KH8' => 'AS', - 'KL7' => 'US', - 'KP5' => 'PR', - 'N5' => 'CK', - 'OH0' => 'AX', - 'OJ0' => 'FI', - 'PJ4' => 'BQ', - 'PJ5' => 'BQ', - 'SV' => 'GR', - 'SV5' => 'GR', - 'SV9' => 'GR', - 'T30' => 'KI', - 'T32' => 'KI', - 'T33' => 'KI', - 'TI9' => 'CR', - 'V7' => 'MH', - 'VK0H' => 'HM', - 'VK0M' => 'AU', - 'VK9C' => 'CC', - 'VK9L' => 'AU', - 'VK9M' => 'AU', - 'VK9N' => 'NF', - 'VK9W' => 'AU', - 'VK9X' => 'CX', - 'VP0G' => 'GS', - 'VP0S' => 'GS', - 'VP2V' => 'VG', - 'VP6' => 'PN', - 'VP8H' => 'GB', - 'VP8O' => 'GB', - 'VQ9' => 'IO', - 'XF4' => 'MX', - 'YV' => 'VE', - 'YV0' => 'VE', - 'ZC4' => 'GB', - 'ZD7' => 'SH', - 'ZD8' => 'SH', - 'ZD9' => 'SH', - 'ZL7' => 'NZ', - 'ZL8' => 'NZ', - 'ZL9' => 'NZ', - - ); - - var $tld2dxcc = array( - 'AD' => '203', - 'AE' => '391', - 'AF' => '3', - 'AG' => '94', - 'AI' => '12', - 'AL' => '7', - 'AM' => '14', - 'AO' => '401', - 'AQ' => '13', - 'AR' => '100', - 'AS' => '9, 515', - 'AT' => '206', - 'AU' => '147, 150, 153, 171', - 'AW' => '91', - 'AX' => '5', - 'AZ' => '18', - 'BA' => '501', - 'BB' => '62', - 'BD' => '305', - 'BE' => '209', - 'BF' => '480', - 'BG' => '212', - 'BH' => '304', - 'BI' => '404', - 'BJ' => '416', - 'BL' => '516', - 'BM' => '64', - 'BN' => '345', - 'BO' => '104', - 'BQ' => '519, 520', - 'BR' => '56, 108, 253, 273', - 'BS' => '60', - 'BT' => '306', - 'BV' => '24', - 'BW' => '402', - 'BY' => '27', - 'BZ' => '66', - 'CA' => '1, 211', - 'CC' => '37, 38', - 'CD' => '414', - 'CF' => '408', - 'CG' => '412', - 'CH' => '287', - 'CI' => '428', - 'CK' => '191, 234', - 'CL' => '47, 112, 125, 217', - 'CM' => '406', - 'CN' => '318, 506', - 'CO' => '116, 161, 216', - 'CR' => '308', - 'CU' => '70, 105', - 'CV' => '409', - 'CW' => '517', - 'CX' => '35', - 'CY' => '215', - 'CZ' => '503', - 'DE' => '230', - 'DJ' => '382', - 'DK' => '221', - 'DM' => '95', - 'DO' => '72', - 'DZ' => '400', - 'EC' => '71, 120', - 'EE' => '52', - 'EG' => '478', - 'EH' => '302', - 'ER' => '51', - 'ES' => '21, 29, 32, 281', - 'ET' => '53', - 'FI' => '167, 224', - 'FJ' => '176, 460, 489', - 'FK' => '141', - 'FM' => '173', - 'FO' => '222', - 'FR' => '36, 213, 214, 227', - 'GA' => '420', - 'GB' => '223, 238, 241, 265, 279, 283, 294', - 'GD' => '77', - 'GE' => '75', - 'GF' => '63', - 'GG' => '106', - 'GH' => '424', - 'GI' => '233', - 'GL' => '237', - 'GM' => '422', - 'GN' => '107', - 'GP' => '79', - 'GQ' => '49, 195', - 'GR' => '40, 45, 180, 236', - 'GS' => '235, 240, 303', - 'GT' => '76', - 'GU' => '103', - 'GW' => '109', - 'GY' => '129', - 'HK' => '321', - 'HM' => '111', - 'HN' => '80', - 'HR' => '497', - 'HT' => '78', - 'HU' => '239', - 'ID' => '327', - 'IE' => '245', - 'IL' => '336', - 'IM' => '114', - 'IN' => '11, 142, 324', - 'IQ' => '333', - 'IR' => '330', - 'IS' => '242', - 'IT' => '225, 248', - 'JE' => '122', - 'JM' => '82', - 'JO' => '342', - 'JP' => '177, 192, 339', - 'KE' => '430', - 'KG' => '135', - 'KH' => '312', - 'KI' => '31, 48, 301, 490', - 'KM' => '411', - 'KN' => '249', - 'KP' => '344', - 'KR' => '137', - 'KW' => '348', - 'KY' => '69', - 'KZ' => '130', - 'LA' => '143', - 'LB' => '354', - 'LC' => '97', - 'LI' => '251', - 'LK' => '315', - 'LR' => '434', - 'LS' => '432', - 'LT' => '146', - 'LU' => '254', - 'LV' => '145', - 'LY' => '436', - 'MA' => '446', - 'MC' => '260', - 'MD' => '179', - 'ME' => '514', - 'MG' => '438', - 'MH' => '168', - 'MK' => '502', - 'ML' => '442', - 'MM' => '309', - 'MN' => '363', - 'MO' => '152', - 'MP' => '166', - 'MQ' => '84', - 'MR' => '444', - 'MS' => '96', - 'MT' => '246, 257', - 'MU' => '4, 33, 165, 207', - 'MV' => '159', - 'MW' => '440', - 'MX' => '50, 204', - 'MY' => '46, 299', - 'MZ' => '181', - 'NA' => '464', - 'NC' => '162, 512', - 'NE' => '187', - 'NF' => '189', - 'NG' => '450', - 'NI' => '86', - 'NL' => '263', - 'NO' => '199, 266', - 'NP' => '369', - 'NR' => '157', - 'NU' => '188', - 'NZ' => '16, 34, 133, 170', - 'OM' => '370', - 'PA' => '88', - 'PE' => '136', - 'PF' => '175, 508, 509', - 'PG' => '163', - 'PH' => '375', - 'PK' => '372', - 'PL' => '269', - 'PM' => '277', - 'PN' => '172, 513', - 'PR' => '43, 202', - 'PS' => '510', - 'PT' => '149, 256, 272', - 'PW' => '22', - 'PY' => '132', - 'QA' => '376', - 'RE' => '453', - 'RO' => '275', - 'RS' => '296', - 'RU' => '15, 54, 61, 89, 126', - 'RW' => '454', - 'SA' => '378', - 'SB' => '185, 507', - 'SC' => '379', - 'SD' => '466', - 'SE' => '284', - 'SG' => '381', - 'SH' => '205, 250, 274', - 'SI' => '499', - 'SJ' => '118, 259', - 'SK' => '504', - 'SL' => '458', - 'SM' => '278', - 'SN' => '456', - 'SO' => '232', - 'SR' => '140', - 'SS' => '521', - 'ST' => '219', - 'SV' => '74', - 'SX' => '518', - 'SY' => '384', - 'SZ' => '468', - 'TD' => '410', - 'TF' => '10, 41, 99, 124, 131, 276', - 'TG' => '483', - 'TH' => '387', - 'TJ' => '262', - 'TK' => '270', - 'TL' => '511', - 'TM' => '280', - 'TN' => '474', - 'TO' => '160', - 'TR' => '390', - 'TT' => '90', - 'TV' => '282', - 'TW' => '386, 505', - 'TZ' => '470', - 'UA' => '288', - 'UG' => '286', - 'UM' => '20, 123, 134, 174, 182, 197, 297', - 'US' => '6, 110, 138, 252, 291', - 'UY' => '144', - 'UZ' => '292', - 'VA' => '295', - 'VC' => '98', - 'VE' => '17, 148', - 'VG' => '65', - 'VI' => '285', - 'VN' => '293', - 'VU' => '158', - 'WF' => '298', - 'WS' => '190', - 'XK' => '522', - 'YE' => '492', - 'YT' => '169', - 'ZA' => '201, 462', - 'ZM' => '482', - 'ZW' => '452', - ); - - public function up() { - // QSO table - $this->db->select('COUNT(COL_PRIMARY_KEY) AS count'); - $this->db->where('COL_POTA_REF !=', ""); - $query = $this->db->get($this->config->item('table_name')); - $row = $query->row(); - if ($row->count > 0) { - foreach ($this->map as $key => $value) { - $this->update_db($key, $value); - } - } else { - log_message('info', 'No POTA references found. Migrations skipped.'); - } - - // Station profiles - $this->db->select('COUNT(station_id) AS count'); - $this->db->where('station_pota !=', ""); - $query = $this->db->get('station_profile'); - $row = $query->row(); - if ($row->count > 0) { - foreach ($this->map as $key => $value) { - $this->update_db_profiles($key, $value); - } - } else { - log_message('info', 'No POTA references found. Migrations skipped.'); - } - $this->rm_ix('TMP_HRD_IDX_COL_POTA'); - } - - public function down() { - } - - function update_db($from, $to) { - $sql= "UPDATE ".$this->config->item('table_name')." FORCE INDEX (`TMP_HRD_IDX_COL_POTA`) SET COL_POTA_REF = REPLACE(COL_POTA_REF, '".$from."-', '".$to."-') WHERE COL_POTA_REF like '".$from."-%'"; - if (array_key_exists($to, $this->tld2dxcc)) { - $sql .= "AND COL_DXCC IN (".$this->tld2dxcc[$to].")"; - } - $sql .= ";"; - $this->db->query($sql); - } - - function update_db_profiles($from, $to) { - $sql= "UPDATE station_profile SET station_pota = REPLACE(station_pota, '".$from."-', '".$to."-') WHERE SUBSTRING(station_pota,1,".(strlen($from)+1).") = '".$from."-';"; - $sql .= ";"; - $this->db->query($sql); - } - - private function rm_ix($index) { - $ix_exist = $this->db->query("SHOW INDEX FROM ".$this->config->item('table_name')." WHERE Key_name = '".$index."'")->num_rows(); - if ($ix_exist >= 1) { - $sql = "ALTER TABLE ".$this->config->item('table_name')." DROP INDEX `".$index."`;"; - $this->db->query($sql); - } - } - -}