V6002.php
1.99 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
101
102
103
104
105
106
107
<?php
namespace ACP\Plugin\Update;
use AC\Plugin\Update;
use AC\Plugin\Version;
class V6002 extends Update {
public function __construct() {
parent::__construct( new Version( '6.0.2' ) );
}
public function apply_update() {
global $wpdb;
$sql = $wpdb->prepare( "
SELECT *
FROM $wpdb->usermeta
WHERE meta_key = %s
AND meta_value != ''
",
$wpdb->prefix . 'ac_preferences_export_columns'
);
$results = $wpdb->get_results( $sql );
if ( ! $results ) {
return;
}
foreach ( $results as $row ) {
$meta_value = unserialize( $row->meta_value, [ 'allowed_classes' => false ] );
$data = $meta_value
? $this->convert_to_new_format( $meta_value )
: [];
$wpdb->update(
$wpdb->usermeta,
[
'meta_value' => serialize( $data ),
],
[
'umeta_id' => $row->umeta_id,
]
);
}
}
private function convert_to_new_format( array $data ): array {
$new = [];
foreach ( $data as $list_id => $preference_column_names ) {
$new_columns = [];
$preference_column_names = array_filter( $preference_column_names, 'is_string' );
foreach ( $preference_column_names as $column_name ) {
$new_columns[] = [
'column_name' => $column_name,
'active' => true,
];
}
$inactive = array_diff( $this->get_stored_column_names( $list_id ), $preference_column_names );
foreach ( $inactive as $column_name ) {
$new_columns[] = [
'column_name' => $column_name,
'active' => false,
];
}
$new[ $list_id ] = $new_columns;
}
return $new;
}
private function get_stored_column_names( string $list_id ): array {
global $wpdb;
$sql = $wpdb->prepare( "
SELECT columns
FROM {$wpdb->prefix}admin_columns
WHERE list_id = %s
",
$list_id
);
$column_data = $wpdb->get_var( $sql );
if ( ! $column_data ) {
return [];
}
$columns = unserialize( $column_data, [ 'allowed_classes' => false ] );
if ( ! $columns ) {
return [];
}
return array_keys( $columns );
}
}