PluginProbe ʕ •ᴥ•ʔ
Catch Scroll Progress Bar / trunk
Catch Scroll Progress Bar vtrunk
trunk 1.0.0 1.1 1.2 1.3 1.4 1.5 1.6 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 2.0 2.1 2.2
catch-scroll-progress-bar / admin / class-catch-scroll-progress-bar-admin.php
catch-scroll-progress-bar / admin Last commit date
css 6 years ago images 7 years ago js 4 years ago partials 1 month ago class-catch-scroll-progress-bar-admin.php 1 month ago index.php 7 years ago
class-catch-scroll-progress-bar-admin.php
253 lines
1 <?php
2
3 // Exit if accessed directly
4 if (! defined('ABSPATH')) exit;
5
6 /**
7 * The admin-specific functionality of the plugin.
8 *
9 * @link www.catchplugins.com
10 * @since 1.0.0
11 *
12 * @package Catch_Scroll_Progress_Bar
13 * @subpackage Catch_Scroll_Progress_Bar/admin
14 */
15
16
17 class Catch_Scroll_Progress_Bar_Admin
18 {
19
20 /**
21 * The ID of this plugin.
22 *
23 * @since 1.0.0
24 * @access private
25 * @var string $plugin_name The ID of this plugin.
26 */
27 private $plugin_name;
28
29 /**
30 * The version of this plugin.
31 *
32 * @since 1.0.0
33 * @access private
34 * @var string $version The current version of this plugin.
35 */
36 private $version;
37
38 /**
39 * Initialize the class and set its properties.
40 *
41 * @since 1.0.0
42 * @param string $plugin_name The name of this plugin.
43 * @param string $version The version of this plugin.
44 */
45 public function __construct($plugin_name, $version)
46 {
47
48 $this->plugin_name = $plugin_name;
49 $this->version = $version;
50 }
51
52 /**
53 * Register the stylesheets for the admin area.
54 *
55 * @since 1.0.0
56 */
57 public function enqueue_styles()
58 {
59
60 /**
61 * This function is provided for demonstration purposes only.
62 *
63 * An instance of this class should be passed to the run() function
64 * defined in Catch_Progress_Bar_Loader as all of the hooks are defined
65 * in that particular class.
66 *
67 * The Catch_Progress_Bar_Loader will then create the relationship
68 * between the defined hooks and the functions defined in this
69 * class.
70 */
71
72
73
74 $current_page = isset( $_GET['page'] ) ? sanitize_key( wp_unslash( $_GET['page'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
75 if ( 'catch-scroll-progress-bar' === $current_page ) {
76 wp_enqueue_style($this->plugin_name . '-display-dashboard', plugin_dir_url(__FILE__) . 'css/catch-scroll-progress-bar-admin.css', array(), $this->version, 'all');
77 }
78 }
79 /**
80 * Register the JavaScript for the admin area.
81 *
82 * @since 1.0.0
83 */
84 public function enqueue_scripts()
85 {
86
87 /**
88 * This function is provided for demonstration purposes only.
89 *
90 * An instance of this class should be passed to the run() function
91 * defined in Catch_Progress_Bar_Loader as all of the hooks are defined
92 * in that particular class.
93 *
94 * The Catch_Progress_Bar_Loader will then create the relationship
95 * between the defined hooks and the functions defined in this
96 * class.
97 */
98
99 $current_page = isset( $_GET['page'] ) ? sanitize_key( wp_unslash( $_GET['page'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
100 if ( 'catch-scroll-progress-bar' === $current_page ) {
101 wp_enqueue_script('matchHeight', plugin_dir_url(__FILE__) . 'js/jquery-matchHeight.min.js', array('jquery'), $this->version, true);
102 wp_enqueue_script($this->plugin_name, plugin_dir_url(__FILE__) . 'js/catch-scroll-progress-bar-admin.js', array('jquery', 'matchHeight', 'jquery-ui-tooltip'), $this->version, true);
103 wp_enqueue_script('catch-scroll-progress-bar-color-picker', plugin_dir_url(__FILE__) . 'js/wp-color-picker.js', array('wp-color-picker', 'jquery'), $this->version, true);
104 }
105 }
106
107 public function add_plugin_settings_menu()
108 {
109 add_menu_page(
110 esc_html__('Catch Scroll Progress Bar ', 'catch-scroll-progress-bar'), // $page_title.
111 esc_html__('Catch Scroll Progress Bar ', 'catch-scroll-progress-bar'), // $menu_title.
112 'manage_options', // $capability.
113 'catch-scroll-progress-bar', // $menu_slug.
114 array($this, 'settings_page'), // $callback_function.
115 'dashicons-editor-alignleft', // $icon_url.
116 '99.01564' // $position.
117 );
118 add_submenu_page(
119 'catch-scroll-progress-bar', // $parent_slug.
120 esc_html__('Catch Scroll Progress Bar', 'catch-scroll-progress-bar'), // $page_title.
121 esc_html__('Settings', 'catch-scroll-progress-bar'), // $menu_title.
122 'manage_options', // $capability.
123 'catch-scroll-progress-bar', // $menu_slug.
124 array($this, 'settings_page') // $callback_function.
125 );
126 }
127
128 /**
129 * Catch Scroll Progress Bar: action_links
130 * Catch Scroll Progress Bar Settings Link function callback
131 *
132 * @param array $links Link url.
133 *
134 * @param array $file File name.
135 */
136 public function action_links($links, $file)
137 {
138 if ($file === $this->plugin_name . '/' . $this->plugin_name . '.php') {
139 $settings_link = '<a href="' . esc_url(admin_url('admin.php?page=catch-scroll-progress-bar')) . '">' . esc_html__('Settings', 'catch-scroll-progress-bar') . '</a>';
140
141 array_unshift($links, $settings_link);
142 }
143 return $links;
144 }
145
146
147 public function settings_page()
148 {
149 if (! current_user_can('manage_options')) {
150 wp_die(esc_html__('You do not have sufficient permissions to access this page.', 'catch-scroll-progress-bar'));
151 }
152 require plugin_dir_path(__FILE__) . 'partials/catch-scroll-progress-bar-admin-display.php';
153 }
154 public function register_settings()
155 {
156 register_setting(
157 'catch-scroll-progress-bar-group',
158 'catch_progress_bar_options',
159 array($this, 'sanitize_callback')
160 );
161 }
162
163 public function sanitize_callback($input)
164 {
165 if (isset($input['reset']) && $input['reset']) {
166 // Reset requested — restore all defaults.
167 return catch_progress_bar_default_options();
168 }
169
170 // The Settings API verifies its own nonce before calling this callback,
171 // so no additional nonce check is needed here.
172 if (null === $input) {
173 return $input;
174 }
175
176 $input['reset'] = (isset($input['reset']) && '1' == $input['reset']) ? '1' : '0';
177 $input['home'] = (isset($input['home']) && '1' == $input['home']) ? 1 : 0;
178 $input['blog'] = (isset($input['blog']) && '1' == $input['blog']) ? 1 : 0;
179 $input['archive'] = (isset($input['archive']) && '1' == $input['archive']) ? 1 : 0;
180 $input['single'] = (isset($input['single']) && '1' == $input['single']) ? 1 : 0;
181
182 $post_types = get_post_types(array('public' => true), 'objects');
183 foreach ($post_types as $type => $obj) {
184 $input['field_posttypes'][$type] = (isset($input['field_posttypes'][$type]) && '1' == $input['field_posttypes'][$type]) ? 1 : 0;
185 }
186
187 // Validate progress_bar_position against the allowed set.
188 if ( isset( $input['progress_bar_position'] ) ) {
189 $allowed_positions = array( 'top', 'bottom' );
190 $input['progress_bar_position'] = in_array( $input['progress_bar_position'], $allowed_positions, true )
191 ? $input['progress_bar_position']
192 : 'top';
193 }
194
195 // Use absint() for integer fields, not sanitize_text_field().
196 if (isset($input['radius'])) {
197 $input['radius'] = absint($input['radius']);
198 }
199 if (isset($input['bar_height'])) {
200 $input['bar_height'] = absint($input['bar_height']);
201 }
202 if (isset($input['background_opacity'])) {
203 $input['background_opacity'] = floatval($input['background_opacity']);
204 }
205 if (isset($input['foreground_opacity'])) {
206 $input['foreground_opacity'] = floatval($input['foreground_opacity']);
207 }
208 if (isset($input['background_color']) && $input['background_color']) {
209 $input['background_color'] = sanitize_hex_color($input['background_color']);
210 }
211 if (isset($input['foreground_color']) && $input['foreground_color']) {
212 $input['foreground_color'] = sanitize_hex_color($input['foreground_color']);
213 }
214
215 return $input;
216 }
217
218 function add_plugin_meta_links($meta_fields, $file)
219 {
220 if (CATCH_SCROLL_PROGRESS_BAR_BASENAME == $file) {
221
222 $allowed_tags = array(
223 'a' => array( 'href' => array(), 'target' => array(), 'title' => array() ),
224 'i' => array( 'class' => array() ),
225 'svg' => array( 'xmlns' => array(), 'width' => array(), 'height' => array(), 'viewbox' => array(), 'fill' => array(), 'stroke' => array(), 'stroke-width' => array(), 'stroke-linecap' => array(), 'stroke-linejoin' => array(), 'class' => array() ),
226 'polygon' => array( 'points' => array() ),
227 );
228
229 $star_svg = "<svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg>";
230
231 $meta_fields[] = wp_kses(
232 "<a href='https://catchplugins.com/support-forum/forum/catch-scroll-progress-bar/' target='_blank'>Support Forum</a>",
233 $allowed_tags
234 );
235 $meta_fields[] = wp_kses(
236 "<a href='https://wordpress.org/support/plugin/catch-scroll-progress-bar/reviews#new-post' target='_blank' title='Rate'><i class='ct-rate-stars'>" . str_repeat($star_svg, 5) . "</i></a>",
237 $allowed_tags
238 );
239
240 $stars_color = '#ffb900';
241 wp_add_inline_style(
242 $this->plugin_name . '-display-dashboard',
243 '.ct-rate-stars{display:inline-block;color:' . esc_attr($stars_color) . ';position:relative;top:3px;}'
244 . '.ct-rate-stars svg{fill:' . esc_attr($stars_color) . ';}'
245 . '.ct-rate-stars svg:hover{fill:' . esc_attr($stars_color) . ';}'
246 . '.ct-rate-stars svg:hover ~ svg{fill:none;}'
247 );
248 }
249
250 return $meta_fields;
251 }
252 }
253