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