PluginProbe ʕ •ᴥ•ʔ
Post Views Counter / 1.6.0
Post Views Counter v1.6.0
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 6 months ago class-columns.php 6 months ago class-counter.php 6 months ago class-crawler-detect.php 6 months ago class-cron.php 6 months ago class-dashboard.php 6 months ago class-frontend.php 6 months ago class-functions.php 6 months ago class-import.php 6 months ago class-query.php 6 months ago class-settings-api.php 6 months ago class-settings.php 6 months ago class-toolbar.php 6 months ago class-update.php 6 months ago class-widgets.php 6 months ago functions.php 6 months ago
class-update.php
270 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 // move menu position setting to display tab
171 $this->migrate_menu_position_option();
172
173 if ( isset( $_POST['post_view_counter_update'], $_POST['post_view_counter_number'] ) ) {
174 if ( $_POST['post_view_counter_number'] === 'update_1' ) {
175 $this->update_1();
176
177 // update plugin version
178 update_option( 'post_views_counter_version', $pvc->defaults['version'], false );
179 }
180 }
181
182 // get current database version
183 $current_db_version = get_option( 'post_views_counter_version', '1.0.0' );
184
185 // new version?
186 if ( version_compare( $current_db_version, $pvc->defaults['version'], '<' ) ) {
187 // is update 1 required?
188 if ( version_compare( $current_db_version, '1.2.4', '<=' ) ) {
189 $update_1_html = '
190 <form action="" method="post">
191 <input type="hidden" name="post_view_counter_number" value="update_1"/>
192 <p>' . __( '<strong>Post Views Counter</strong> - this version requires a database update. Make sure to back up your database first.', 'post-views-counter' ) . '</p>
193 <p><input type="submit" class="button button-primary" name="post_view_counter_update" value="' . __( 'Run the Update', 'post-views-counter' ) . '"/></p>
194 </form>';
195
196 $pvc->add_notice( $update_1_html, 'notice notice-info', false );
197 } else
198 // update plugin version
199 update_option( 'post_views_counter_version', $pvc->defaults['version'], false );
200 }
201 }
202
203 /**
204 * Database update for 1.2.4 and below.
205 *
206 * @global object $wpdb
207 *
208 * @return void
209 */
210 public function update_1() {
211 global $wpdb;
212
213 // get index
214 $old_index = $wpdb->query( "SHOW INDEX FROM `" . $wpdb->prefix . "post_views` WHERE Key_name = 'id_period'" );
215
216 // check whether index already exists
217 if ( $old_index > 0 ) {
218 // drop unwanted index which prevented saving views with identical weeks and months
219 $wpdb->query( "ALTER TABLE `" . $wpdb->prefix . "post_views` DROP INDEX id_period" );
220 }
221
222 // get index
223 $new_index = $wpdb->query( "SHOW INDEX FROM `" . $wpdb->prefix . "post_views` WHERE Key_name = 'id_type_period_count'" );
224
225 // check whether index already exists
226 if ( $new_index === 0 ) {
227 // create new index for better performance of sql queries
228 $wpdb->query( 'ALTER TABLE `' . $wpdb->prefix . 'post_views` ADD UNIQUE INDEX `id_type_period_count` (`id`, `type`, `period`, `count`) USING BTREE' );
229 }
230
231 Post_Views_Counter()->add_notice( __( 'Thank you! Datebase was successfully updated.', 'post-views-counter' ), 'updated', true );
232 }
233
234 /**
235 * Move menu position setting from "Other" to "Display" settings.
236 *
237 * @return void
238 */
239 private function migrate_menu_position_option() {
240 $pvc = Post_Views_Counter();
241
242 // prefer legacy value if present, otherwise fall back to current display option
243 $menu_position = isset( $pvc->options['other']['menu_position'] ) && in_array( $pvc->options['other']['menu_position'], [ 'top', 'sub' ], true )
244 ? $pvc->options['other']['menu_position']
245 : ( isset( $pvc->options['display']['menu_position'] ) && in_array( $pvc->options['display']['menu_position'], [ 'top', 'sub' ], true )
246 ? $pvc->options['display']['menu_position']
247 : 'top' );
248
249 $display_options = get_option( 'post_views_counter_settings_display', [] );
250
251 if ( ! isset( $display_options['menu_position'] ) || ! in_array( $display_options['menu_position'], [ 'top', 'sub' ], true ) ) {
252 $display_options['menu_position'] = $menu_position;
253 update_option( 'post_views_counter_settings_display', $display_options );
254 }
255
256 $other_options = get_option( 'post_views_counter_settings_other', [] );
257
258 if ( ! is_array( $other_options ) )
259 $other_options = [];
260
261 if ( ! isset( $other_options['menu_position'] ) || ! in_array( $other_options['menu_position'], [ 'top', 'sub' ], true ) ) {
262 $other_options['menu_position'] = $display_options['menu_position'];
263 update_option( 'post_views_counter_settings_other', $other_options );
264 }
265
266 $pvc->options['other']['menu_position'] = $other_options['menu_position'];
267 $pvc->options['display']['menu_position'] = $display_options['menu_position'];
268 }
269 }
270