PluginProbe ʕ •ᴥ•ʔ
Post Views Counter / 1.7.2
Post Views Counter v1.7.2
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 5 months ago class-columns.php 5 months ago class-counter.php 5 months ago class-crawler-detect.php 5 months ago class-cron.php 5 months ago class-dashboard.php 5 months ago class-frontend.php 5 months ago class-functions.php 5 months ago class-import.php 5 months ago class-integration-gutenberg.php 5 months ago class-integrations.php 5 months ago class-query.php 5 months ago class-settings-api.php 5 months ago class-settings-display.php 5 months ago class-settings-general.php 5 months ago class-settings-integrations.php 5 months ago class-settings-other.php 5 months ago class-settings-reports.php 5 months ago class-settings.php 5 months ago class-toolbar.php 5 months ago class-update.php 5 months ago class-widgets.php 5 months ago functions.php 5 months ago
class-update.php
275 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 // ensure integrations option exists
203 if ( ! get_option( 'post_views_counter_settings_integrations' ) ) {
204 add_option( 'post_views_counter_settings_integrations', $pvc->defaults['integrations'], null, false );
205 }
206 }
207
208 /**
209 * Database update for 1.2.4 and below.
210 *
211 * @global object $wpdb
212 *
213 * @return void
214 */
215 public function update_1() {
216 global $wpdb;
217
218 // get index
219 $old_index = $wpdb->query( "SHOW INDEX FROM `" . $wpdb->prefix . "post_views` WHERE Key_name = 'id_period'" );
220
221 // check whether index already exists
222 if ( $old_index > 0 ) {
223 // drop unwanted index which prevented saving views with identical weeks and months
224 $wpdb->query( "ALTER TABLE `" . $wpdb->prefix . "post_views` DROP INDEX id_period" );
225 }
226
227 // get index
228 $new_index = $wpdb->query( "SHOW INDEX FROM `" . $wpdb->prefix . "post_views` WHERE Key_name = 'id_type_period_count'" );
229
230 // check whether index already exists
231 if ( $new_index === 0 ) {
232 // create new index for better performance of sql queries
233 $wpdb->query( 'ALTER TABLE `' . $wpdb->prefix . 'post_views` ADD UNIQUE INDEX `id_type_period_count` (`id`, `type`, `period`, `count`) USING BTREE' );
234 }
235
236 Post_Views_Counter()->add_notice( __( 'Thank you! Datebase was successfully updated.', 'post-views-counter' ), 'updated', true );
237 }
238
239 /**
240 * Move menu position setting from "Other" to "Display" settings.
241 *
242 * @return void
243 */
244 private function migrate_menu_position_option() {
245 $pvc = Post_Views_Counter();
246
247 // prefer legacy value if present, otherwise fall back to current display option
248 $menu_position = isset( $pvc->options['other']['menu_position'] ) && in_array( $pvc->options['other']['menu_position'], [ 'top', 'sub' ], true )
249 ? $pvc->options['other']['menu_position']
250 : ( isset( $pvc->options['display']['menu_position'] ) && in_array( $pvc->options['display']['menu_position'], [ 'top', 'sub' ], true )
251 ? $pvc->options['display']['menu_position']
252 : 'top' );
253
254 $display_options = get_option( 'post_views_counter_settings_display', [] );
255
256 if ( ! isset( $display_options['menu_position'] ) || ! in_array( $display_options['menu_position'], [ 'top', 'sub' ], true ) ) {
257 $display_options['menu_position'] = $menu_position;
258 update_option( 'post_views_counter_settings_display', $display_options );
259 }
260
261 $other_options = get_option( 'post_views_counter_settings_other', [] );
262
263 if ( ! is_array( $other_options ) )
264 $other_options = [];
265
266 if ( ! isset( $other_options['menu_position'] ) || ! in_array( $other_options['menu_position'], [ 'top', 'sub' ], true ) ) {
267 $other_options['menu_position'] = $display_options['menu_position'];
268 update_option( 'post_views_counter_settings_other', $other_options );
269 }
270
271 $pvc->options['other']['menu_position'] = $other_options['menu_position'];
272 $pvc->options['display']['menu_position'] = $display_options['menu_position'];
273 }
274 }
275