PluginProbe ʕ •ᴥ•ʔ
Post Views Counter / 1.1.4
Post Views Counter v1.1.4
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 / settings.php
post-views-counter / includes Last commit date
columns.php 10 years ago counter.php 10 years ago cron.php 10 years ago frontend.php 10 years ago functions.php 10 years ago query.php 10 years ago settings.php 10 years ago update.php 10 years ago widgets.php 10 years ago
settings.php
721 lines
1 <?php
2 // exit if accessed directly
3 if ( ! defined( 'ABSPATH' ) )
4 exit;
5
6 /**
7 * Post_Views_Counter_Settings class.
8 */
9 class Post_Views_Counter_Settings {
10
11 private $tabs;
12 private $choices;
13 private $modes;
14 private $time_types;
15 private $groups;
16 private $user_roles;
17 private $positions;
18 private $display_styles;
19 public $post_types;
20
21 public function __construct() {
22 // actions
23 add_action( 'admin_init', array( $this, 'register_settings' ) );
24 add_action( 'admin_menu', array( $this, 'admin_menu_options' ) );
25 add_action( 'after_setup_theme', array( $this, 'load_defaults' ) );
26 add_action( 'wp_loaded', array( $this, 'load_post_types' ) );
27 }
28
29 /**
30 * Load default settings.
31 */
32 public function load_defaults() {
33
34 $this->modes = array(
35 'php' => __( 'PHP', 'post-views-counter' ),
36 'js' => __( 'JavaScript', 'post-views-counter' )
37 );
38
39 $this->time_types = array(
40 'minutes' => __( 'minutes', 'post-views-counter' ),
41 'hours' => __( 'hours', 'post-views-counter' ),
42 'days' => __( 'days', 'post-views-counter' ),
43 'weeks' => __( 'weeks', 'post-views-counter' ),
44 'months' => __( 'months', 'post-views-counter' ),
45 'years' => __( 'years', 'post-views-counter' )
46 );
47
48 $this->groups = array(
49 'robots' => __( 'robots', 'post-views-counter' ),
50 'users' => __( 'logged in users', 'post-views-counter' ),
51 'guests' => __( 'guests', 'post-views-counter' ),
52 'roles' => __( 'selected user roles', 'post-views-counter' )
53 );
54
55 $this->positions = array(
56 'before' => __( 'before the content', 'post-views-counter' ),
57 'after' => __( 'after the content', 'post-views-counter' ),
58 'manual' => __( 'manual', 'post-views-counter' )
59 );
60
61 $this->display_styles = array(
62 'icon' => __( 'icon', 'post-views-counter' ),
63 'text' => __( 'label', 'post-views-counter' )
64 );
65
66 $this->tabs = array(
67 'general' => array(
68 'name' => __( 'General', 'post-views-counter' ),
69 'key' => 'post_views_counter_settings_general',
70 'submit' => 'save_pvc_general',
71 'reset' => 'reset_pvc_general'
72 ),
73 'display' => array(
74 'name' => __( 'Display', 'post-views-counter' ),
75 'key' => 'post_views_counter_settings_display',
76 'submit' => 'save_pvc_display',
77 'reset' => 'reset_pvc_display'
78 )
79 );
80
81 $this->user_roles = $this->get_user_roles();
82 }
83
84 /**
85 * Get post types avaiable for counting.
86 */
87 public function load_post_types() {
88 $post_types = array();
89
90 // built in public post types
91 foreach ( get_post_types( array( '_builtin' => true, 'public' => true ), 'objects', 'and' ) as $key => $post_type ) {
92 if ( $key !== 'attachment' )
93 $post_types[$key] = $post_type->labels->name;
94 }
95
96 // public custom post types
97 foreach ( get_post_types( array( '_builtin' => false, 'public' => true ), 'objects', 'and' ) as $key => $post_type ) {
98 $post_types[$key] = $post_type->labels->name;
99 }
100
101 // sort post types alphabetically with their keys
102 asort( $post_types, SORT_STRING );
103
104 $this->post_types = $post_types;
105 }
106
107 /**
108 * Get all user roles.
109 */
110 public function get_user_roles() {
111 global $wp_roles;
112
113 $roles = array();
114
115 foreach ( apply_filters( 'editable_roles', $wp_roles->roles ) as $role => $details ) {
116 $roles[$role] = translate_user_role( $details['name'] );
117 }
118
119 asort( $roles, SORT_STRING );
120
121 return $roles;
122 }
123
124 /**
125 * Add options page.
126 */
127 public function admin_menu_options() {
128 add_options_page(
129 __( 'Post Views Counter', 'post-views-counter' ), __( 'Post Views Counter', 'post-views-counter' ), 'manage_options', 'post-views-counter', array( $this, 'options_page' )
130 );
131 }
132
133 /**
134 * Options page callback.
135 */
136 public function options_page() {
137 $tab_key = (isset( $_GET['tab'] ) ? $_GET['tab'] : 'general');
138
139 echo '
140 <div class="wrap">' . screen_icon() . '
141 <h2>' . __( 'Post Views Counter', 'post-views-counter' ) . '</h2>
142 <h2 class="nav-tab-wrapper">';
143
144 foreach ( $this->tabs as $key => $name ) {
145 echo '
146 <a class="nav-tab ' . ($tab_key == $key ? 'nav-tab-active' : '') . '" href="' . esc_url( admin_url( 'options-general.php?page=post-views-counter&tab=' . $key ) ) . '">' . $name['name'] . '</a>';
147 }
148
149 echo '
150 </h2>
151 <div class="post-views-counter-settings">
152 <div class="df-credits">
153 <h3 class="hndle">' . __( 'Post Views Counter', 'post-views-counter' ) . ' ' . Post_Views_Counter()->defaults['version'] . '</h3>
154 <div class="inside">
155 <h4 class="inner">' . __( 'Need support?', 'post-views-counter' ) . '</h4>
156 <p class="inner">' . __( 'If you are having problems with this plugin, please talk about them in the', 'post-views-counter' ) . ' <a href="http://www.dfactory.eu/support/?utm_source=post-views-counter-settings&utm_medium=link&utm_campaign=support" target="_blank" title="' . __( 'Support forum', 'post-views-counter' ) . '">' . __( 'Support forum', 'post-views-counter' ) . '</a></p>
157 <hr />
158 <h4 class="inner">' . __( 'Do you like this plugin?', 'post-views-counter' ) . '</h4>
159 <p class="inner"><a href="http://wordpress.org/support/view/plugin-reviews/post-views-counter" target="_blank" title="' . __( 'Rate it 5', 'post-views-counter' ) . '">' . __( 'Rate it 5', 'post-views-counter' ) . '</a> ' . __( 'on WordPress.org', 'post-views-counter' ) . '<br />' .
160 __( 'Blog about it & link to the', 'post-views-counter' ) . ' <a href="http://www.dfactory.eu/plugins/post-views-counter/?utm_source=post-views-counter-settings&utm_medium=link&utm_campaign=blog-about" target="_blank" title="' . __( 'plugin page', 'post-views-counter' ) . '">' . __( 'plugin page', 'post-views-counter' ) . '</a><br/>' .
161 __( 'Check out our other', 'post-views-counter' ) . ' <a href="http://www.dfactory.eu/plugins/?utm_source=post-views-counter-settings&utm_medium=link&utm_campaign=other-plugins" target="_blank" title="' . __( 'WordPress plugins', 'post-views-counter' ) . '">' . __( 'WordPress plugins', 'post-views-counter' ) . '</a>
162 </p>
163 <hr />
164 <p class="df-link inner">' . __( 'Created by', 'post-views-counter' ) . ' <a href="http://www.dfactory.eu/?utm_source=post-views-counter-settings&utm_medium=link&utm_campaign=created-by" target="_blank" title="dFactory - Quality plugins for WordPress"><img src="' . POST_VIEWS_COUNTER_URL . '/images/logo-dfactory.png' . '" title="dFactory - Quality plugins for WordPress" alt="dFactory - Quality plugins for WordPress" /></a></p>
165 </div>
166 </div>
167 <form action="options.php" method="post">';
168
169 wp_nonce_field( 'update-options' );
170 settings_fields( $this->tabs[$tab_key]['key'] );
171 do_settings_sections( $this->tabs[$tab_key]['key'] );
172
173 echo '
174 <p class="submit">';
175
176 submit_button( '', 'primary', $this->tabs[$tab_key]['submit'], false );
177
178 echo ' ';
179
180 submit_button( __( 'Reset to defaults', 'post-views-counter' ), 'secondary reset_pvc_settings', $this->tabs[$tab_key]['reset'], false );
181
182 echo '
183 </p>
184 </form>
185 </div>
186 <div class="clear"></div>
187 </div>';
188 }
189
190 /**
191 * Register settings callback.
192 */
193 public function register_settings() {
194 // general options
195 register_setting( 'post_views_counter_settings_general', 'post_views_counter_settings_general', array( $this, 'validate_settings' ) );
196 add_settings_section( 'post_views_counter_settings_general', __( 'General settings', 'post-views-counter' ), '', 'post_views_counter_settings_general' );
197 add_settings_field( 'pvc_post_types_count', __( 'Post Types Count', 'post-views-counter' ), array( $this, 'post_types_count' ), 'post_views_counter_settings_general', 'post_views_counter_settings_general' );
198 add_settings_field( 'pvc_counter_mode', __( 'Counter Mode', 'post-views-counter' ), array( $this, 'counter_mode' ), 'post_views_counter_settings_general', 'post_views_counter_settings_general' );
199 add_settings_field( 'pvc_post_views_column', __( 'Post Views Column', 'post-views-counter' ), array( $this, 'post_views_column' ), 'post_views_counter_settings_general', 'post_views_counter_settings_general' );
200 add_settings_field( 'pvc_restrict_edit_views', __( 'Restrict Edit', 'post-views-counter' ), array( $this, 'restrict_edit_views' ), 'post_views_counter_settings_general', 'post_views_counter_settings_general' );
201 add_settings_field( 'pvc_time_between_counts', __( 'Time Between Counts', 'post-views-counter' ), array( $this, 'time_between_counts' ), 'post_views_counter_settings_general', 'post_views_counter_settings_general' );
202 add_settings_field( 'pvc_reset_counts', __( 'Reset Data Interval', 'post-views-counter' ), array( $this, 'reset_counts' ), 'post_views_counter_settings_general', 'post_views_counter_settings_general' );
203 add_settings_field( 'pvc_flush_interval', __( 'Flush Object Cache Interval', 'post-views-counter' ), array( $this, 'flush_interval' ), 'post_views_counter_settings_general', 'post_views_counter_settings_general' );
204 add_settings_field( 'pvc_exclude', __( 'Exclude Visitors', 'post-views-counter' ), array( $this, 'exclude' ), 'post_views_counter_settings_general', 'post_views_counter_settings_general' );
205 add_settings_field( 'pvc_exclude_ips', __( 'Exclude IPs', 'post-views-counter' ), array( $this, 'exclude_ips' ), 'post_views_counter_settings_general', 'post_views_counter_settings_general' );
206 add_settings_field( 'pvc_wp_postviews', __( 'WP-PostViews', 'post-views-counter' ), array( $this, 'wp_postviews' ), 'post_views_counter_settings_general', 'post_views_counter_settings_general' );
207 add_settings_field( 'pvc_deactivation_delete', __( 'Deactivation', 'post-views-counter' ), array( $this, 'deactivation_delete' ), 'post_views_counter_settings_general', 'post_views_counter_settings_general' );
208
209 // display options
210 register_setting( 'post_views_counter_settings_display', 'post_views_counter_settings_display', array( $this, 'validate_settings' ) );
211 add_settings_section( 'post_views_counter_settings_display', __( 'Display settings', 'post-views-counter' ), '', 'post_views_counter_settings_display' );
212 add_settings_field( 'pvc_post_views_label', __( 'Post Views Label', 'post-views-counter' ), array( $this, 'post_views_label' ), 'post_views_counter_settings_display', 'post_views_counter_settings_display' );
213 add_settings_field( 'pvc_post_types_display', __( 'Post Types Display', 'post-views-counter' ), array( $this, 'post_types_display' ), 'post_views_counter_settings_display', 'post_views_counter_settings_display' );
214 add_settings_field( 'pvc_restrict_display', __( 'Restrict Display', 'post-views-counter' ), array( $this, 'restrict_display' ), 'post_views_counter_settings_display', 'post_views_counter_settings_display' );
215 add_settings_field( 'pvc_position', __( 'Position', 'post-views-counter' ), array( $this, 'position' ), 'post_views_counter_settings_display', 'post_views_counter_settings_display' );
216 add_settings_field( 'pvc_display_style', __( 'Display Style', 'post-views-counter' ), array( $this, 'display_style' ), 'post_views_counter_settings_display', 'post_views_counter_settings_display' );
217 add_settings_field( 'pvc_icon_class', __( 'Icon Class', 'post-views-counter' ), array( $this, 'icon_class' ), 'post_views_counter_settings_display', 'post_views_counter_settings_display' );
218 }
219
220 /**
221 * Post views label option.
222 */
223 public function post_views_label() {
224 echo '
225 <div id="pvc_post_views_label">
226 <fieldset>
227 <input type="text" class="large-text" name="post_views_counter_settings_display[label]" value="' . esc_attr( Post_Views_Counter()->options['display']['label'] ) . '" />
228 <p class="description">' . esc_html__( 'Enter the label for the post views counter field.', 'post-views-counter' ) . '</p>
229 </fieldset>
230 </div>';
231 }
232
233 /**
234 * Post types to count option.
235 */
236 public function post_types_count() {
237 echo '
238 <div id="pvc_post_types_count">';
239
240 foreach ( $this->post_types as $post_type => $post_type_name ) {
241 echo '
242 <label class="cb-checkbox"><input id="pvc_post_types_count-' . esc_attr( $post_type ) . '" type="checkbox" name="post_views_counter_settings_general[post_types_count][' . esc_attr( $post_type ) . ']" value="1" ' . checked( in_array( $post_type, Post_Views_Counter()->options['general']['post_types_count'], true ), true, false ) . ' />' . esc_html( $post_type_name ) . ' </label>';
243 }
244
245 echo '
246 <p class="description">' . esc_html__( 'Select post types for which post views will be counted.', 'post-views-counter' ) . '</p>
247 </div>';
248 }
249
250 /**
251 * Post types to display option.
252 */
253 public function post_types_display() {
254 echo '
255 <div id="pvc_post_types_display">';
256
257 foreach ( $this->post_types as $post_type => $post_type_name ) {
258 echo '
259 <label class="cb-checkbox"><input id="pvc_post_types_display-' . esc_attr( $post_type ) . '" type="checkbox" name="post_views_counter_settings_display[post_types_display][' . esc_attr( $post_type ) . ']" value="1" ' . checked( in_array( $post_type, Post_Views_Counter()->options['display']['post_types_display'], true ), true, false ) . ' />' . esc_html( $post_type_name ) . '</label>';
260 }
261
262 echo '
263 <p class="description">' . esc_html__( 'Select post types for which post views will be displayed.', 'post-views-counter' ) . '</p>
264 </div>';
265 }
266
267 /**
268 * Counter mode option.
269 */
270 public function counter_mode() {
271 echo '
272 <div id="pvc_counter_mode">';
273
274 foreach ( $this->modes as $key => $value ) {
275 $key = esc_attr( $key );
276
277 echo '
278 <label class="cb-radio"><input type="radio" name="post_views_counter_settings_general[counter_mode]" value="' . $key . '" ' . checked( $key, Post_Views_Counter()->options['general']['counter_mode'], false ) . ' />' . esc_html( $value ) . '</label>';
279 }
280
281 echo '
282 <p class="description">' . esc_html__( 'Select the method of collecting post views data. If you are using any of the caching plugins select Javascript.', 'post-views-counter' ) . '</p>
283 </div>';
284 }
285
286 /**
287 * Post views column option.
288 */
289 public function post_views_column() {
290 echo '
291 <div id="pvc_post_views_column">
292 <label class="cb-checkbox"><input id="pvc-post-views-column-enable" type="checkbox" name="post_views_counter_settings_general[post_views_column]" value="1" ' . checked( true, Post_Views_Counter()->options['general']['post_views_column'], false ) . ' />' . esc_html__( 'Enable to display post views count column for each of the selected post types.', 'post-views-counter' ) . '</label>
293 </div>';
294 }
295
296 /**
297 * Time between counts option.
298 */
299 public function time_between_counts() {
300 echo '
301 <div id="pvc_time_between_counts">
302 <input size="4" type="text" name="post_views_counter_settings_general[time_between_counts][number]" value="' . esc_attr( Post_Views_Counter()->options['general']['time_between_counts']['number'] ) . '" />
303 <select class="pvc-chosen-short" name="post_views_counter_settings_general[time_between_counts][type]">';
304
305 foreach ( $this->time_types as $type => $type_name ) {
306 echo '
307 <option value="' . esc_attr( $type ) . '" ' . selected( $type, Post_Views_Counter()->options['general']['time_between_counts']['type'], false ) . '>' . esc_html( $type_name ) . '</option>';
308 }
309
310 echo '
311 </select>
312 <p class="description">' . esc_html__( 'Enter the time between single user visit count.', 'post-views-counter' ) . '</p>
313 </div>';
314 }
315
316 /**
317 * Reset counts option.
318 */
319 public function reset_counts() {
320 echo '
321 <div id="pvc_reset_counts">
322 <input size="4" type="text" name="post_views_counter_settings_general[reset_counts][number]" value="' . esc_attr( Post_Views_Counter()->options['general']['reset_counts']['number'] ) . '" />
323 <select class="pvc-chosen-short" name="post_views_counter_settings_general[reset_counts][type]">';
324
325 foreach ( $this->time_types as $type => $type_name ) {
326 echo '
327 <option value="' . esc_attr( $type ) . '" ' . selected( $type, Post_Views_Counter()->options['general']['reset_counts']['type'], false ) . '>' . esc_html( $type_name ) . '</option>';
328 }
329
330 echo '
331 </select>
332 <p class="description">' . esc_html__( 'Delete single day post views data older than specified above. Enter 0 (number zero) if you want to preserve your data regardless of its age.', 'post-views-counter' ) . '</p>
333 </div>';
334 }
335
336 /**
337 * Flush interval option.
338 */
339 public function flush_interval() {
340 echo '
341 <div id="pvc_flush_interval">
342 <input size="4" type="text" name="post_views_counter_settings_general[flush_interval][number]" value="' . esc_attr( Post_Views_Counter()->options['general']['flush_interval']['number'] ) . '" />
343 <select class="pvc-chosen-short" name="post_views_counter_settings_general[flush_interval][type]">';
344
345 foreach ( $this->time_types as $type => $type_name ) {
346 echo '
347 <option value="' . esc_attr( $type ) . '" ' . selected( $type, Post_Views_Counter()->options['general']['flush_interval']['type'], false ) . '>' . esc_html( $type_name ) . '</option>';
348 }
349
350 echo '
351 </select>
352 <p class="description">' . __( 'How often to flush cached view counts from the object cache into the database. This feature is used only if a persistent object cache is detected and the interval is greater than 0 (number zero)). When used, view counts will be collected and stored in the object cache instead of the database and will then be asynchronously flushed to the database according to the specified interval.<br /><strong>Notice:</strong> Potential data loss may occur if the object cache is cleared/unavailable for the duration of the interval.', 'post-views-counter' ) . '</p>
353 </div>';
354 }
355
356 /**
357 * Exlude user groups option.
358 */
359 public function exclude() {
360 echo '
361 <div id="pvc_exclude">
362 <fieldset>';
363
364 foreach ( $this->groups as $type => $type_name ) {
365 echo '
366 <label class="cb-checkbox"><input id="pvc_exclude-' . $type . '" type="checkbox" name="post_views_counter_settings_general[exclude][groups][' . $type . ']" value="1" ' . checked( in_array( $type, Post_Views_Counter()->options['general']['exclude']['groups'], true ), true, false ) . ' />' . esc_html( $type_name ) . '</label>';
367 }
368
369 echo ' <p class="description">' . esc_html__( 'Use it to hide the post views counter from selected type of visitors.', 'post-views-counter' ) . '</p>
370 <div class="pvc_user_roles"' . (in_array( 'roles', Post_Views_Counter()->options['general']['exclude']['groups'], true ) ? '' : ' style="display: none;"') . '>';
371
372 foreach ( $this->user_roles as $role => $role_name ) {
373 echo ' <label class="cb-checkbox"><input type="checkbox" name="post_views_counter_settings_general[exclude][roles][' . $role . ']" value="1" ' . checked( in_array( $role, Post_Views_Counter()->options['general']['exclude']['roles'], true ), true, false ) . '>' . esc_html( $role_name ) . '</label>';
374 }
375
376 echo ' <p class="description">' . esc_html__( 'Use it to hide the post views counter from selected user roles.', 'post-views-counter' ) . '</p>
377 </div>
378 </fieldset>
379 </div>';
380 }
381
382 /**
383 * Exclude IPs option.
384 */
385 public function exclude_ips() {
386 // lovely php 5.2 limitations
387 $ips = Post_Views_Counter()->options['general']['exclude_ips'];
388
389 echo '
390 <div id="pvc_exclude_ips">';
391
392 if ( ! empty( $ips ) ) {
393 foreach ( $ips as $key => $ip ) {
394 echo '
395 <div class="ip-box">
396 <input type="text" name="post_views_counter_settings_general[exclude_ips][]" value="' . esc_attr( $ip ) . '" /> <a href="#" class="remove-exclude-ip" title="' . esc_attr__( 'Remove', 'post-views-counter' ) . '">' . esc_attr__( 'Remove', 'post-views-counter' ) . '</a>
397 </div>';
398 }
399 } else {
400 echo '
401 <div class="ip-box">
402 <input type="text" name="post_views_counter_settings_general[exclude_ips][]" value="" /> <a href="#" class="remove-exclude-ip" title="' . esc_attr__( 'Remove', 'post-views-counter' ) . '">' . esc_attr__( 'Remove', 'post-views-counter' ) . '</a>
403 </div>';
404 }
405
406 echo '
407 <p><input type="button" class="button button-secondary add-exclude-ip" value="' . esc_attr__( 'Add new', 'post-views-counter' ) . '" /> <input type="button" class="button button-secondary add-current-ip" value="' . esc_attr__( 'Add my current IP', 'post-views-counter' ) . '" data-rel="' . esc_attr( $_SERVER['REMOTE_ADDR'] ) . '" /></p>
408 <p class="description">' . esc_html__( 'Enter the IP addresses to be excluded from post views count.', 'post-views-counter' ) . '</p>
409 </div>';
410 }
411
412 /**
413 * WP-PostViews import option.
414 */
415 public function wp_postviews() {
416 echo '
417 <div id="pvc_wp_postviews">
418 <fieldset>
419 <input type="submit" class="button button-secondary" name="post_views_counter_import_wp_postviews" value="' . __( 'Import', 'post-views-counter' ) . '"/>
420 <p class="description">' . esc_html__( 'Import post views data from WP-PostViews plugin.', 'post-views-counter' ) . '</p>
421 <label class="cb-checkbox"><input id="pvc-wp-postviews" type="checkbox" name="post_views_counter_import_wp_postviews_override" value="1" />' . esc_html__( 'Override existing Post Views Counter data.', 'post-views-counter' ) . '</label>
422 </fieldset>
423 </div>';
424 }
425
426 /**
427 * Limit views edit to admins.
428 */
429 public function restrict_edit_views() {
430 echo '
431 <div id="pvc_restrict_edit_views">
432 <label class="cb-checkbox"><input type="checkbox" name="post_views_counter_settings_general[restrict_edit_views]" value="1" ' . checked( true, Post_Views_Counter()->options['general']['restrict_edit_views'], false ) . ' />' . esc_html__( 'Enable to restrict post views editing to admins only.', 'post-views-counter' ) . '</label>
433 </div>';
434 }
435
436 /**
437 * Plugin deactivation option.
438 */
439 public function deactivation_delete() {
440 echo '
441 <div id="pvc_deactivation_delete">
442 <label class="cb-checkbox"><input type="checkbox" name="post_views_counter_settings_general[deactivation_delete]" value="1" ' . checked( true, Post_Views_Counter()->options['general']['deactivation_delete'], false ) . ' />' . esc_html__( 'Enable to delete all plugin data on deactivation.', 'post-views-counter' ) . '</label>
443 </div>';
444 }
445
446 /**
447 * Counter position option.
448 */
449 public function position() {
450 echo '
451 <div id="pvc_position">
452 <select class="pvc-chosen-short" name="post_views_counter_settings_display[position]">';
453
454 foreach ( $this->positions as $position => $position_name ) {
455 echo '
456 <option value="' . esc_attr( $position ) . '" ' . selected( $position, Post_Views_Counter()->options['display']['position'], false ) . '>' . esc_html( $position_name ) . '</option>';
457 }
458
459 echo '
460 </select>
461 <p class="description">' . esc_html__( 'Select where would you like to display the post views counter. Use [post-views] shortcode for manual display.', 'post-views-counter' ) . '</p>
462 </div>';
463 }
464
465 /**
466 * Counter style option.
467 */
468 public function display_style() {
469 echo '
470 <div id="pvc_display_style">';
471
472 foreach ( $this->display_styles as $display => $style ) {
473 $display = esc_attr( $display );
474
475 echo '
476 <label class="cb-checkbox"><input type="checkbox" name="post_views_counter_settings_display[display_style][' . $display . ']" value="1" ' . checked( true, Post_Views_Counter()->options['display']['display_style'][$display], false ) . ' />' . esc_html( $style ) . '</label>';
477 }
478
479 echo '
480 <p class="description">' . esc_html__( 'Choose how to display the post views counter.', 'post-views-counter' ) . '</p>
481 </div>';
482 }
483
484 /**
485 * Counter icon class option.
486 */
487 public function icon_class() {
488 echo '
489 <div id="pvc_icon_class">
490 <input type="text" name="post_views_counter_settings_display[icon_class]" class="large-text" value="' . esc_attr( Post_Views_Counter()->options['display']['icon_class'] ) . '" />
491 <p class="description">' . sprintf( __( 'Enter the post views icon class. Any of the <a href="%s" target="_blank">Dashicons</a> classes are available.', 'post-views-counter' ), 'https://developer.wordpress.org/resource/dashicons/' ) . '</p>
492 </div>';
493 }
494
495 /**
496 * Restrict display option.
497 */
498 public function restrict_display() {
499 echo '
500 <div id="pvc_restrict_display">
501 <fieldset>';
502
503 foreach ( $this->groups as $type => $type_name ) {
504
505 if ( $type === 'robots' )
506 continue;
507
508 echo '
509 <label class="cb-checkbox"><input id="pvc_restrict_display-' . $type . '" type="checkbox" name="post_views_counter_settings_display[restrict_display][groups][' . esc_html( $type ) . ']" value="1" ' . checked( in_array( $type, Post_Views_Counter()->options['display']['restrict_display']['groups'], true ), true, false ) . ' />' . esc_html( $type_name ) . '</label>';
510 }
511
512 echo ' <p class="description">' . esc_html__( 'Use it to hide the post views counter from selected type of visitors.', 'post-views-counter' ) . '</p>
513 <div class="pvc_user_roles"' . (in_array( 'roles', Post_Views_Counter()->options['display']['restrict_display']['groups'], true ) ? '' : ' style="display: none;"') . '>';
514
515 foreach ( $this->user_roles as $role => $role_name ) {
516 echo ' <label class="cb-checkbox"><input type="checkbox" name="post_views_counter_settings_display[restrict_display][roles][' . $role . ']" value="1" ' . checked( in_array( $role, Post_Views_Counter()->options['display']['restrict_display']['roles'], true ), true, false ) . ' />' . esc_html( $role_name ) . '</label>';
517 }
518
519 echo ' <p class="description">' . esc_html__( 'Use it to hide the post views counter from selected user roles.', 'post-views-counter' ) . '</p>
520 </div>
521 </fieldset>
522 </div>';
523 }
524
525 /**
526 * Validate general settings.
527 */
528 public function validate_settings( $input ) {
529 if ( isset( $_POST['post_views_counter_import_wp_postviews'] ) ) {
530 global $wpdb;
531
532 $meta_key = esc_attr( apply_filters( 'pvc_import_meta_key', 'views' ) );
533
534 $views = $wpdb->get_results(
535 "SELECT post_id, meta_value FROM " . $wpdb->postmeta . " WHERE meta_key = '" . $meta_key . "'", ARRAY_A, 0
536 );
537
538 if ( ! empty( $views ) ) {
539 $input = Post_Views_Counter()->defaults['general'];
540 $input['wp_postviews_import'] = true;
541
542 $sql = '';
543
544 foreach ( $views as $view ) {
545 $sql[] = "(" . $view['post_id'] . ", 4, 'total', " . $view['meta_value'] . ")";
546 }
547
548 $wpdb->query( "INSERT INTO " . $wpdb->prefix . "post_views(id, type, period, count) VALUES " . implode( ',', $sql ) . " ON DUPLICATE KEY UPDATE count = " . (isset( $_POST['post_views_counter_import_wp_postviews_override'] ) ? '' : 'count + ') . "VALUES(count)" );
549
550 add_settings_error( 'wp_postviews_import', 'wp_postviews_import', __( 'Post views data imported succesfully.', 'post-views-counter' ), 'updated' );
551 } else {
552 add_settings_error( 'wp_postviews_import', 'wp_postviews_import', __( 'There was no post views data to import.', 'post-views-counter' ), 'updated' );
553 }
554 } elseif ( isset( $_POST['save_pvc_general'] ) ) {
555 // post types count
556 if ( isset( $input['post_types_count'] ) ) {
557 $post_types = array();
558
559 foreach ( $input['post_types_count'] as $post_type => $set ) {
560 if ( isset( $this->post_types[$post_type] ) )
561 $post_types[] = $post_type;
562 }
563
564 $input['post_types_count'] = array_unique( $post_types );
565 } else
566 $input['post_types_count'] = array();
567
568 // counter mode
569 $input['counter_mode'] = isset( $input['counter_mode'], $this->modes[$input['counter_mode']] ) ? $input['counter_mode'] : Post_Views_Counter()->defaults['general']['counter_mode'];
570
571 // post views column
572 $input['post_views_column'] = $input['post_views_column'];
573
574 // time between counts
575 $input['time_between_counts']['number'] = (int)( isset( $input['time_between_counts']['number'] ) ? $input['time_between_counts']['number'] : Post_Views_Counter()->defaults['general']['time_between_counts']['number'] );
576 $input['time_between_counts']['type'] = isset( $input['time_between_counts']['type'], $this->time_types[$input['time_between_counts']['type']] ) ? $input['time_between_counts']['type'] : Post_Views_Counter()->defaults['general']['time_between_counts']['type'];
577
578 // flush interval
579 $input['flush_interval']['number'] = (int) ( isset( $input['flush_interval']['number'] ) ? $input['flush_interval']['number'] : Post_Views_Counter()->defaults['general']['flush_interval']['number'] );
580 $input['flush_interval']['type'] = isset( $input['flush_interval']['type'], $this->time_types[$input['flush_interval']['type']] ) ? $input['flush_interval']['type'] : Post_Views_Counter()->defaults['general']['flush_interval']['type'];
581
582 // Since the settings are about to be saved and cache flush interval could've changed,
583 // we want to make sure that any changes done on the settings page are in effect immediately
584 // (instead of having to wait for the previous schedule to occur).
585 // We achieve that by making sure to clear any previous cache flush schedules and
586 // schedule the new one if the specified interval is > 0
587 Post_Views_Counter()->remove_cache_flush();
588
589 if ( $input['flush_interval']['number'] > 0 ) {
590 Post_Views_Counter()->schedule_cache_flush();
591 }
592
593 // reset counts
594 $input['reset_counts']['number'] = (int) ( isset( $input['reset_counts']['number'] ) ? $input['reset_counts']['number'] : Post_Views_Counter()->defaults['general']['reset_counts']['number'] );
595 $input['reset_counts']['type'] = isset( $input['reset_counts']['type'], $this->time_types[$input['reset_counts']['type']] ) ? $input['reset_counts']['type'] : Post_Views_Counter()->defaults['general']['reset_counts']['type'];
596
597 // run cron on next visit?
598 $input['cron_run'] = ($input['reset_counts']['number'] > 0 ? true : false);
599 $input['cron_update'] = ($input['cron_run'] && (Post_Views_Counter()->options['general']['reset_counts']['number'] !== $input['reset_counts']['number'] || Post_Views_Counter()->options['general']['reset_counts']['type'] !== $input['reset_counts']['type']) ? true : false);
600
601 // exclude
602 if ( isset( $input['exclude']['groups'] ) ) {
603 $groups = array();
604
605 foreach ( $input['exclude']['groups'] as $group => $set ) {
606 if ( isset( $this->groups[$group] ) )
607 $groups[] = $group;
608 }
609
610 $input['exclude']['groups'] = array_unique( $groups );
611
612 } else {
613 $input['exclude']['groups'] = array();
614 }
615
616 if ( in_array( 'roles', $input['exclude']['groups'], true ) && isset( $input['exclude']['roles'] ) ) {
617 $roles = array();
618
619 foreach ( $input['exclude']['roles'] as $role => $set ) {
620 if ( isset( $this->user_roles[$role] ) )
621 $roles[] = $role;
622 }
623
624 $input['exclude']['roles'] = array_unique( $roles );
625 } else
626 $input['exclude']['roles'] = array();
627
628 // exclude ips
629 if ( isset( $input['exclude_ips'] ) ) {
630
631 $ips = array();
632
633 foreach ( $input['exclude_ips'] as $ip ) {
634 if ( filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 ) )
635 $ips[] = $ip;
636 }
637
638 $input['exclude_ips'] = array_unique( $ips );
639 }
640
641 // restrict edit viewa
642 $input['restrict_edit_views'] = isset( $input['restrict_edit_views'] ) ? $input['restrict_edit_views'] : Post_Views_Counter()->defaults['general']['restrict_edit_views'];
643
644 // deactivation delete
645 $input['deactivation_delete'] = isset( $input['deactivation_delete'] );
646 } elseif ( isset( $_POST['save_pvc_display'] ) ) {
647
648 // post views label
649 $input['label'] = isset( $input['label'] ) ? $input['label'] : Post_Views_Counter()->defaults['general']['label'];
650
651 if ( function_exists( 'icl_register_string' ) )
652 icl_register_string( 'Post Views Counter', 'Post Views Label', $input['label'] );
653
654 // position
655 $input['position'] = isset( $input['position'], $this->positions[$input['position']] ) ? $input['position'] : Post_Views_Counter()->defaults['general']['position'];
656
657 // display style
658 $input['display_style']['icon'] = isset( $input['display_style']['icon'] );
659 $input['display_style']['text'] = isset( $input['display_style']['text'] );
660
661 // link to post
662 $input['link_to_post'] = isset( $input['link_to_post'] ) ? $input['link_to_post'] : Post_Views_Counter()->defaults['display']['link_to_post'];
663
664 // icon class
665 $input['icon_class'] = isset( $input['icon_class'] ) ? trim( $input['icon_class'] ) : Post_Views_Counter()->defaults['general']['icon_class'];
666
667 // post types display
668 if ( isset( $input['post_types_display'] ) ) {
669 $post_types = array();
670
671 foreach ( $input['post_types_display'] as $post_type => $set ) {
672 if ( isset( $this->post_types[$post_type] ) )
673 $post_types[] = $post_type;
674 }
675
676 $input['post_types_display'] = array_unique( $post_types );
677 } else
678 $input['post_types_display'] = array();
679
680 // restrict display
681 if ( isset( $input['restrict_display']['groups'] ) ) {
682 $groups = array();
683
684 foreach ( $input['restrict_display']['groups'] as $group => $set ) {
685 if ( $group === 'robots' )
686 continue;
687
688 if ( isset( $this->groups[$group] ) )
689 $groups[] = $group;
690 }
691
692 $input['restrict_display']['groups'] = array_unique( $groups );
693 } else
694 $input['restrict_display']['groups'] = array();
695
696 if ( in_array( 'roles', $input['restrict_display']['groups'], true ) && isset( $input['restrict_display']['roles'] ) ) {
697 $roles = array();
698
699 foreach ( $input['restrict_display']['roles'] as $role => $set ) {
700 if ( isset( $this->user_roles[$role] ) )
701 $roles[] = $role;
702 }
703
704 $input['restrict_display']['roles'] = array_unique( $roles );
705 } else
706 $input['restrict_display']['roles'] = array();
707 } elseif ( isset( $_POST['reset_pvc_general'] ) ) {
708 $input = Post_Views_Counter()->defaults['general'];
709
710 add_settings_error( 'reset_general_settings', 'settings_reset', __( 'General settings restored to defaults.', 'post-views-counter' ), 'updated' );
711 } elseif ( isset( $_POST['reset_pvc_display'] ) ) {
712 $input = Post_Views_Counter()->defaults['display'];
713
714 add_settings_error( 'reset_general_settings', 'settings_reset', __( 'Display settings restored to defaults.', 'post-views-counter' ), 'updated' );
715 }
716
717 return $input;
718 }
719
720 }
721