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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
<?php /** * WPSEO plugin file. * * @package WPSEO\Internal */
/** * This class handles storing the current options for future reference. * * This should only be used during an upgrade routine. */ class WPSEO_Upgrade_History {
/** * Option to use to store/retrieve data from. * * @var string */ protected $option_name = 'wpseo_upgrade_history';
/** * WPSEO_Upgrade_History constructor. * * @param null|string $option_name Optional. Custom option to use to store/retrieve history from. */ public function __construct( $option_name = null ) { if ( $option_name !== null ) { $this->option_name = $option_name; } }
/** * Retrieves the content of the history items currently stored. * * @return array The contents of the history option. */ public function get() { $data = get_option( $this->get_option_name(), array() ); if ( ! is_array( $data ) ) { return array(); }
return $data; }
/** * Adds a new history entry in the storage. * * @param string $old_version The version we are upgrading from. * @param string $new_version The version we are upgrading to. * @param array $option_names The options that need to be stored. */ public function add( $old_version, $new_version, array $option_names ) { $option_data = array(); if ( array() !== $option_names ) { $option_data = $this->get_options_data( $option_names ); }
// Retrieve current history. $data = $this->get();
// Add new entry. $data[ time() ] = array( 'options' => $option_data, 'old_version' => $old_version, 'new_version' => $new_version, );
// Store the data. $this->set( $data ); }
/** * Retrieves the data for the specified option names from the database. * * @param array $option_names The option names to retrieve. * * @return array */ protected function get_options_data( array $option_names ) { /** @var WPDB $wpdb */ $wpdb = $this->get_wpdb();
$sql = $wpdb->prepare( ' SELECT option_value, option_name FROM ' . $wpdb->options . ' WHERE option_name IN ( ' . implode( ',', array_fill( 0, count( $option_names ), '%s' ) ) . ' ) ', $option_names );
$results = $wpdb->get_results( $sql, ARRAY_A );
$data = array(); foreach ( $results as $result ) { $data[ $result['option_name'] ] = maybe_unserialize( $result['option_value'] ); }
return $data; }
/** * Stores the new history state. * * @param array $data The data to store. * * @return void */ protected function set( array $data ) { // This should not be autoloaded! update_option( $this->get_option_name(), $data, false ); }
/** * Retrieves the WPDB object. * * @return wpdb The WPDB object to use. */ protected function get_wpdb() { global $wpdb;
return $wpdb; }
/** * Retrieves the option name to store the history in. * * @return string The option name to store the history in. */ protected function get_option_name() { return $this->option_name; } }
|