V6300.php
2.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
<?php
declare(strict_types=1);
namespace ACP\Plugin\Update;
use AC\ListScreenRepository\Storage;
use AC\Plugin\Update;
use AC\Plugin\Version;
final class V6300 extends Update
{
private $storage;
public function __construct(Storage $storage)
{
parent::__construct(new Version('6.3'));
$this->storage = $storage;
}
public function apply_update(): void
{
global $wpdb;
$table = $wpdb->prefix . 'ac_segments';
$queries[] = "
UPDATE $table
SET `user_id` = 0
WHERE `global` = 1
";
$queries[] = "
ALTER TABLE $table
ADD `key` char(13)
";
foreach ($queries as $query) {
$wpdb->query($query);
}
$sql = "
SELECT *
FROM $table
WHERE `key` IS NULL
";
$mapping = [];
foreach ($wpdb->get_results($sql) as $row) {
$key = uniqid();
$wpdb->update(
$table,
[
'key' => $key,
],
[
'id' => $row->id,
]
);
$mapping[$row->id] = $key;
usleep(1);
}
// When all keys are filled, make unique
$sql = "
ALTER TABLE $table
ADD UNIQUE (`key`)
";
$wpdb->query($sql);
// Update all list screens to reflect keys now instead of a local primary key
foreach ($this->storage->get_repositories() as $repository) {
if ( ! $repository->is_writable()) {
continue;
}
foreach ($repository->find_all() as $list_screen) {
$preferences = $list_screen->get_preferences();
if ( ! isset($preferences['filter_segment'], $mapping[$preferences['filter_segment']])) {
continue;
}
$preferences['filter_segment'] = $mapping[$preferences['filter_segment']];
$list_screen->set_preferences($preferences);
$repository->save($list_screen);
}
}
}
}