PluginProbe ʕ •ᴥ•ʔ
Post Views Counter / 1.7.10
Post Views Counter v1.7.10
1.7.13 1.7.12 1.7.11 trunk 1.0.0 1.0.1 1.0.10 1.0.11 1.0.12 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.1.0 1.1.1 1.1.2 1.1.3 1.1.4 1.2.0 1.2.1 1.2.10 1.2.11 1.2.12 1.2.13 1.2.14 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 1.3 1.3.1 1.3.10 1.3.11 1.3.12 1.3.13 1.3.2 1.3.2.1 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.4 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.7.0 1.7.1 1.7.10 1.7.2 1.7.3 1.7.4 1.7.5 1.7.6 1.7.7 1.7.8 1.7.9
post-views-counter / includes / class-update.php
post-views-counter / includes Last commit date
class-admin.php 2 months ago class-columns-modal.php 2 months ago class-columns.php 2 months ago class-counter.php 2 months ago class-crawler-detect.php 2 months ago class-cron.php 2 months ago class-dashboard.php 2 months ago class-frontend.php 2 months ago class-functions.php 2 months ago class-import.php 2 months ago class-integration-gutenberg.php 2 months ago class-integrations.php 2 months ago class-query.php 2 months ago class-settings-api.php 2 months ago class-settings-display.php 2 months ago class-settings-general.php 2 months ago class-settings-integrations.php 2 months ago class-settings-other.php 2 months ago class-settings-reports.php 2 months ago class-settings.php 2 months ago class-toolbar.php 2 months ago class-traffic-signals.php 2 months ago class-update.php 2 months ago class-widgets.php 2 months ago functions.php 2 months ago
class-update.php
293 lines
1 <?php
2 // exit if accessed directly
3 if ( ! defined( 'ABSPATH' ) )
4 exit;
5
6 /**
7 * Post_Views_Counter_Update class.
8 *
9 * @class Post_Views_Counter_Update
10 */
11 class Post_Views_Counter_Update {
12
13 /**
14 * Class constructor.
15 *
16 * @return void
17 */
18 public function __construct() {
19 // actions
20 add_action( 'admin_init', [ $this, 'check_update' ] );
21 }
22
23 /**
24 * Check whether update is required.
25 *
26 * @return void
27 */
28 public function check_update() {
29 if ( ! current_user_can( 'manage_options' ) )
30 return;
31
32 // get main instance
33 $pvc = Post_Views_Counter();
34
35 // get current database version
36 $current_db_version = get_option( 'post_views_counter_version', '1.0.0' );
37
38 // update 1.2.4+
39 if ( version_compare( $current_db_version, '1.2.4', '<=' ) ) {
40 // get general options
41 $general = $pvc->options['general'];
42
43 if ( $general['reset_counts']['number'] > 0 ) {
44 // unsupported data reset in minutes/hours
45 if ( in_array( $general['reset_counts']['type'], [ 'minutes', 'hours' ], true ) ) {
46 // set type to date
47 $general['reset_counts']['type'] = 'days';
48
49 // new number of days
50 if ( $general['reset_counts']['type'] === 'minutes' )
51 $general['reset_counts']['number'] = $general['reset_counts']['number'] * MINUTE_IN_SECONDS;
52 else
53 $general['reset_counts']['number'] = $general['reset_counts']['number'] * HOUR_IN_SECONDS;
54
55 // how many days?
56 $general['reset_counts']['number'] = (int) round( ceil( $general['reset_counts']['number'] / DAY_IN_SECONDS ) );
57
58 // force cron to update
59 $general['cron_run'] = true;
60 $general['cron_update'] = true;
61
62 // update settings
63 update_option( 'post_views_counter_settings_general', $general );
64
65 // update general options
66 $pvc->options['general'] = $general;
67 }
68
69 // update cron job for all users
70 $pvc->cron->check_cron();
71 }
72 }
73
74 // update 1.3.13+
75 if ( version_compare( $current_db_version, '1.3.13', '<=' ) ) {
76 // get general options
77 $general = $pvc->options['general'];
78
79 // disable strict counts
80 $general['strict_counts'] = false;
81
82 // get default other options
83 $other_options = $pvc->defaults['other'];
84
85 // set current options
86 $other_options['deactivation_delete'] = isset( $general['deactivation_delete'] ) ? (bool) $general['deactivation_delete'] : false;
87
88 // add other options
89 add_option( 'post_views_counter_settings_other', $other_options, null, false );
90
91 // update other options
92 $pvc->options['other'] = $other_options;
93
94 // remove old setting
95 unset( $general['deactivation_delete'] );
96
97 // flush cache enabled?
98 if ( $general['flush_interval']['number'] > 0 ) {
99 if ( $pvc->counter->using_object_cache( true ) ) {
100 // flush data from cache
101 $pvc->counter->flush_cache_to_db();
102 }
103
104 // unschedule cron event
105 wp_clear_scheduled_hook( 'pvc_flush_cached_counts' );
106
107 // disable cache
108 $general['flush_interval'] = [
109 'number' => 0,
110 'type' => 'minutes'
111 ];
112 }
113
114 // update general options
115 $pvc->options['general'] = $general;
116
117 // update general options
118 update_option( 'post_views_counter_settings_general', $general );
119 }
120
121 // update 1.5.2+
122 if ( version_compare( $current_db_version, '1.5.2', '<=' ) ) {
123 // get options
124 $general = $pvc->options['general'];
125 $display = $pvc->options['display'];
126
127 // copy values
128 $display['post_views_column'] = $general['post_views_column'];
129 $display['restrict_edit_views'] = $general['restrict_edit_views'];
130
131 // remove old values
132 unset( $general['post_views_column'] );
133 unset( $general['restrict_edit_views'] );
134
135 // update settings
136 update_option( 'post_views_counter_settings_general', $general );
137 update_option( 'post_views_counter_settings_display', $display );
138
139 // update options
140 $pvc->options['general'] = $general;
141 $pvc->options['display'] = $display;
142 }
143
144 // update 1.6.0+ - migrate import settings to provider format
145 if ( version_compare( $current_db_version, '1.6.0', '<' ) ) {
146 // get other options
147 $other = $pvc->options['other'];
148
149 // check if migration is needed
150 if ( ! isset( $other['import_provider_settings'] ) && isset( $other['import_meta_key'] ) ) {
151 $old_meta_key = $other['import_meta_key'];
152
153 // create new provider settings structure
154 $other['import_provider_settings'] = [
155 'provider' => 'custom_meta_key',
156 'strategy' => 'merge',
157 'custom_meta_key' => [
158 'meta_key' => $old_meta_key
159 ]
160 ];
161
162 // update settings
163 update_option( 'post_views_counter_settings_other', $other );
164
165 // update options
166 $pvc->options['other'] = $other;
167 }
168 }
169
170 // update 1.7.10+ - normalize legacy count interval values to canonical hours
171 if ( version_compare( $current_db_version, '1.7.10', '<' ) ) {
172 $general = get_option( 'post_views_counter_settings_general', [] );
173
174 if ( ! is_array( $general ) )
175 $general = [];
176
177 $normalized_time_between_counts = $pvc->normalize_time_between_counts( isset( $general['time_between_counts'] ) ? $general['time_between_counts'] : null, $pvc->defaults['general']['time_between_counts'] );
178
179 if ( ! isset( $general['time_between_counts'] ) || $general['time_between_counts'] !== $normalized_time_between_counts ) {
180 $general['time_between_counts'] = $normalized_time_between_counts;
181
182 update_option( 'post_views_counter_settings_general', $general );
183 }
184
185 $pvc->options['general']['time_between_counts'] = $normalized_time_between_counts;
186 }
187
188 // move menu position setting to display tab
189 $this->migrate_menu_position_option();
190
191 if ( isset( $_POST['post_view_counter_update'], $_POST['post_view_counter_number'] ) ) {
192 if ( $_POST['post_view_counter_number'] === 'update_1' ) {
193 $this->update_1();
194
195 // update plugin version
196 update_option( 'post_views_counter_version', $pvc->defaults['version'], false );
197 }
198 }
199
200 // get current database version
201 $current_db_version = get_option( 'post_views_counter_version', '1.0.0' );
202
203 // new version?
204 if ( version_compare( $current_db_version, $pvc->defaults['version'], '<' ) ) {
205 // is update 1 required?
206 if ( version_compare( $current_db_version, '1.2.4', '<=' ) ) {
207 $update_1_html = '
208 <form action="" method="post">
209 <input type="hidden" name="post_view_counter_number" value="update_1"/>
210 <p>' . __( '<strong>Post Views Counter</strong> - this version requires a database update. Make sure to back up your database first.', 'post-views-counter' ) . '</p>
211 <p><input type="submit" class="button button-primary" name="post_view_counter_update" value="' . __( 'Run the Update', 'post-views-counter' ) . '"/></p>
212 </form>';
213
214 $pvc->add_notice( $update_1_html, 'notice notice-info', false );
215 } else
216 // update plugin version
217 update_option( 'post_views_counter_version', $pvc->defaults['version'], false );
218 }
219
220 // ensure integrations option exists
221 if ( ! get_option( 'post_views_counter_settings_integrations' ) ) {
222 add_option( 'post_views_counter_settings_integrations', $pvc->defaults['integrations'], null, false );
223 }
224 }
225
226 /**
227 * Database update for 1.2.4 and below.
228 *
229 * @global object $wpdb
230 *
231 * @return void
232 */
233 public function update_1() {
234 global $wpdb;
235
236 // get index
237 $old_index = $wpdb->query( "SHOW INDEX FROM `" . $wpdb->prefix . "post_views` WHERE Key_name = 'id_period'" );
238
239 // check whether index already exists
240 if ( $old_index > 0 ) {
241 // drop unwanted index which prevented saving views with identical weeks and months
242 $wpdb->query( "ALTER TABLE `" . $wpdb->prefix . "post_views` DROP INDEX id_period" );
243 }
244
245 // get index
246 $new_index = $wpdb->query( "SHOW INDEX FROM `" . $wpdb->prefix . "post_views` WHERE Key_name = 'id_type_period_count'" );
247
248 // check whether index already exists
249 if ( $new_index === 0 ) {
250 // create new index for better performance of sql queries
251 $wpdb->query( 'ALTER TABLE `' . $wpdb->prefix . 'post_views` ADD UNIQUE INDEX `id_type_period_count` (`id`, `type`, `period`, `count`) USING BTREE' );
252 }
253
254 Post_Views_Counter()->add_notice( __( 'Thank you! Datebase was successfully updated.', 'post-views-counter' ), 'updated', true );
255 }
256
257 /**
258 * Move menu position setting from "Other" to "Display" settings.
259 *
260 * @return void
261 */
262 private function migrate_menu_position_option() {
263 $pvc = Post_Views_Counter();
264
265 // prefer legacy value if present, otherwise fall back to current display option
266 $menu_position = isset( $pvc->options['other']['menu_position'] ) && in_array( $pvc->options['other']['menu_position'], [ 'top', 'sub' ], true )
267 ? $pvc->options['other']['menu_position']
268 : ( isset( $pvc->options['display']['menu_position'] ) && in_array( $pvc->options['display']['menu_position'], [ 'top', 'sub' ], true )
269 ? $pvc->options['display']['menu_position']
270 : 'top' );
271
272 $display_options = get_option( 'post_views_counter_settings_display', [] );
273
274 if ( ! isset( $display_options['menu_position'] ) || ! in_array( $display_options['menu_position'], [ 'top', 'sub' ], true ) ) {
275 $display_options['menu_position'] = $menu_position;
276 update_option( 'post_views_counter_settings_display', $display_options );
277 }
278
279 $other_options = get_option( 'post_views_counter_settings_other', [] );
280
281 if ( ! is_array( $other_options ) )
282 $other_options = [];
283
284 if ( ! isset( $other_options['menu_position'] ) || ! in_array( $other_options['menu_position'], [ 'top', 'sub' ], true ) ) {
285 $other_options['menu_position'] = $display_options['menu_position'];
286 update_option( 'post_views_counter_settings_other', $other_options );
287 }
288
289 $pvc->options['other']['menu_position'] = $other_options['menu_position'];
290 $pvc->options['display']['menu_position'] = $display_options['menu_position'];
291 }
292 }
293