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