1 | <?php |
||
2 | /** |
||
3 | * LSX Currency Admin Class |
||
4 | * |
||
5 | * @package LSX Currencies |
||
6 | * @author LightSpeed |
||
7 | * @license GPL3 |
||
8 | * @link |
||
9 | * @copyright 2019 LightSpeed |
||
10 | */ |
||
11 | |||
12 | namespace lsx\currencies\classes; |
||
13 | |||
14 | /** |
||
15 | * Administration Class |
||
16 | */ |
||
17 | class Admin { |
||
18 | |||
19 | /** |
||
20 | * Holds instance of the class |
||
21 | * |
||
22 | * @var object \lsx\currencies\classes\Admin() |
||
23 | */ |
||
24 | private static $instance; |
||
25 | |||
26 | /** |
||
27 | * Constructor |
||
28 | */ |
||
29 | public function __construct() { |
||
30 | add_action( 'admin_enqueue_scripts', array( $this, 'assets' ) ); |
||
31 | add_action( 'init', array( $this, 'create_settings_page' ), 100 ); |
||
32 | add_filter( 'lsx_framework_settings_tabs', array( $this, 'register_tabs' ), 100, 1 ); |
||
33 | add_filter( 'lsx_to_tour_custom_fields', array( $this, 'fields' ), 80, 1 ); |
||
34 | add_action( 'customize_register', array( $this, 'customize_register' ), 20 ); |
||
35 | } |
||
36 | |||
37 | /** |
||
38 | * Return an instance of this class. |
||
39 | * |
||
40 | * @return object |
||
41 | */ |
||
42 | public static function init() { |
||
43 | // If the single instance hasn't been set, set it now. |
||
44 | if ( ! isset( self::$instance ) ) { |
||
45 | self::$instance = new self(); |
||
46 | } |
||
47 | return self::$instance; |
||
48 | } |
||
49 | |||
50 | /** |
||
51 | * Enques the assets |
||
52 | */ |
||
53 | public function assets() { |
||
54 | //wp_enqueue_script( 'lsx-currencies-admin', LSX_CURRENCIES_URL . 'assets/js/lsx-currencies-admin.min.js', array( 'jquery' ), LSX_CURRENCIES_VER, true ); |
||
55 | wp_enqueue_style( 'lsx-currencies-admin', LSX_CURRENCIES_URL . 'assets/css/lsx-currencies-admin.css', array(), LSX_CURRENCIES_VER ); |
||
56 | } |
||
57 | |||
58 | /** |
||
59 | * Returns the array of settings to the UIX Class |
||
60 | */ |
||
61 | public function create_settings_page() { |
||
62 | if ( is_admin() ) { |
||
63 | if ( ! class_exists( '\lsx\ui\uix' ) && ! function_exists( 'tour_operator' ) ) { |
||
64 | include_once LSX_CURRENCIES_PATH . 'vendor/uix/uix.php'; |
||
65 | $pages = $this->settings_page_array(); |
||
66 | $uix = \lsx\ui\uix::get_instance( 'lsx' ); |
||
67 | $uix->register_pages( $pages ); |
||
68 | } |
||
69 | add_action( 'lsx_to_framework_dashboard_tab_content', array( $this, 'general_settings' ), 11, 1 ); |
||
70 | add_action( 'lsx_to_framework_api_tab_content', array( $this, 'api_settings' ), 11, 1 ); |
||
71 | |||
72 | add_action( 'lsx_framework_display_tab_content', array( $this, 'general_settings' ), 11, 1 ); |
||
73 | add_action( 'lsx_framework_api_tab_content', array( $this, 'api_settings' ), 11, 1 ); |
||
74 | } |
||
75 | } |
||
76 | |||
77 | /** |
||
78 | * Returns the array of settings to the UIX Class |
||
79 | */ |
||
80 | public function settings_page_array() { |
||
81 | $tabs = apply_filters( 'lsx_framework_settings_tabs', array() ); |
||
82 | |||
83 | return array( |
||
84 | 'settings' => array( |
||
85 | 'page_title' => esc_html__( 'Theme Options', 'lsx-currencies' ), |
||
86 | 'menu_title' => esc_html__( 'Theme Options', 'lsx-currencies' ), |
||
87 | 'capability' => 'manage_options', |
||
88 | 'icon' => 'dashicons-book-alt', |
||
89 | 'parent' => 'themes.php', |
||
90 | 'save_button' => esc_html__( 'Save Changes', 'lsx-currencies' ), |
||
91 | 'tabs' => $tabs, |
||
92 | ), |
||
93 | ); |
||
94 | } |
||
95 | |||
96 | /** |
||
97 | * Register tabs |
||
98 | */ |
||
99 | public function register_tabs( $tabs ) { |
||
100 | $default = true; |
||
101 | |||
102 | if ( false !== $tabs && is_array( $tabs ) && count( $tabs ) > 0 ) { |
||
103 | $default = false; |
||
104 | } |
||
105 | |||
106 | if ( ! function_exists( 'tour_operator' ) ) { |
||
107 | /*if ( ! array_key_exists( 'general', $tabs ) ) { |
||
108 | $tabs['general'] = array( |
||
109 | 'page_title' => '', |
||
110 | 'page_description' => '', |
||
111 | 'menu_title' => esc_html__( 'General', 'lsx-currencies' ), |
||
112 | 'template' => LSX_CURRENCIES_PATH . 'includes/settings/general.php', |
||
113 | 'default' => $default, |
||
114 | ); |
||
115 | |||
116 | $default = false; |
||
117 | }*/ |
||
118 | |||
119 | if ( ! array_key_exists( 'display', $tabs ) ) { |
||
120 | $tabs['display'] = array( |
||
121 | 'page_title' => '', |
||
122 | 'page_description' => '', |
||
123 | 'menu_title' => esc_html__( 'Display', 'lsx-currencies' ), |
||
124 | 'template' => LSX_CURRENCIES_PATH . 'includes/settings/display.php', |
||
125 | 'default' => $default, |
||
126 | ); |
||
127 | |||
128 | $default = false; |
||
129 | } |
||
130 | |||
131 | if ( ! array_key_exists( 'api', $tabs ) ) { |
||
132 | $tabs['api'] = array( |
||
133 | 'page_title' => '', |
||
134 | 'page_description' => '', |
||
135 | 'menu_title' => esc_html__( 'API', 'lsx-currencies' ), |
||
136 | 'template' => LSX_CURRENCIES_PATH . 'includes/settings/api.php', |
||
137 | 'default' => $default, |
||
138 | ); |
||
139 | |||
140 | $default = false; |
||
141 | } |
||
142 | } |
||
143 | |||
144 | return $tabs; |
||
145 | } |
||
146 | |||
147 | /** |
||
148 | * Outputs the dashboard tabs settings |
||
149 | * |
||
150 | * @param $tab string |
||
151 | * @return null |
||
152 | */ |
||
153 | public function general_settings( $tab = 'general' ) { |
||
154 | if ( 'currency_switcher' === $tab ) { |
||
155 | $this->base_currency_field(); |
||
156 | $this->additional_currencies_field(); |
||
157 | $this->remove_decimals_field(); |
||
158 | if ( function_exists( 'tour_operator' ) ) { |
||
159 | $this->enable_multiple_prices_field(); |
||
160 | $this->enable_convert_to_single_currency_field(); |
||
161 | } |
||
162 | } |
||
163 | } |
||
164 | |||
165 | /** |
||
166 | * Outputs the dashboard tabs settings |
||
167 | * |
||
168 | * @param $tab string |
||
169 | * @return null |
||
170 | */ |
||
171 | public function api_settings( $tab = 'general' ) { |
||
172 | if ( 'settings' === $tab ) { |
||
173 | $this->currency_api_heading(); |
||
174 | $this->api_key_field(); |
||
175 | } |
||
176 | } |
||
177 | |||
178 | /** |
||
179 | * Outputs the base currency drop down |
||
180 | */ |
||
181 | public function base_currency_field() { |
||
182 | ?> |
||
183 | <tr data-trigger="additional_currencies" class="lsx-select-trigger form-field-wrap"> |
||
184 | <th scope="row"> |
||
185 | <label for="currency"> |
||
186 | <?php |
||
187 | esc_html_e( 'Base Currency', 'lsx-currencies' ); |
||
188 | ?> |
||
189 | </label> |
||
190 | </th> |
||
191 | <td> |
||
192 | <?php |
||
193 | if ( ! function_exists( 'WC' ) ) { |
||
194 | ?> |
||
195 | <select value="{{currency}}" name="currency"> |
||
196 | <?php |
||
197 | foreach ( lsx_currencies()->available_currencies as $currency_id => $currency_label ) { |
||
198 | $selected = ''; |
||
199 | |||
200 | if ( lsx_currencies()->base_currency === $currency_id ) { |
||
201 | $selected = 'selected="selected"'; |
||
202 | } |
||
203 | $allowed_html = array( |
||
204 | 'option' => array( |
||
205 | 'value' => array(), |
||
206 | 'selected' => array(), |
||
207 | ), |
||
208 | ); |
||
209 | echo wp_kses( '<option value="' . $currency_id . '" ' . $selected . '>' . $currency_label . '</option>', $allowed_html ); |
||
210 | } |
||
211 | ?> |
||
212 | </select> |
||
213 | <?php |
||
214 | } else { |
||
215 | $currency_label = ''; |
||
216 | if ( isset( lsx_currencies()->available_currencies[ lsx_currencies()->base_currency ] ) ) { |
||
217 | $currency_label = lsx_currencies()->available_currencies[ lsx_currencies()->base_currency ]; |
||
218 | } |
||
219 | ?> |
||
220 | <p><?php echo wp_kses_post( lsx_currencies()->get_currency_flag( lsx_currencies()->base_currency ) ); ?> <?php echo esc_attr( $currency_label ); ?></p> |
||
221 | <p><small><?php esc_html_e( 'When WooCommerce is active, that currency is used as the base currency.', 'lsx-currencies' ); ?></small></p> |
||
222 | <?php |
||
223 | } |
||
224 | ?> |
||
225 | </td> |
||
226 | </tr> |
||
227 | <?php |
||
228 | } |
||
229 | |||
230 | /** |
||
231 | * Outputs the additional currencies checkboxes |
||
232 | */ |
||
233 | public function additional_currencies_field() { |
||
234 | ?> |
||
235 | <tr data-trigger="currency" class="lsx-checkbox-action form-field-wrap"> |
||
236 | <th scope="row"> |
||
237 | <label for="modules"> |
||
238 | <?php |
||
239 | esc_html_e( 'Additional Currencies', 'lsx-currencies' ); |
||
240 | ?> |
||
241 | </label> |
||
242 | </th> |
||
243 | <td> |
||
244 | <ul> |
||
245 | <?php |
||
246 | foreach ( lsx_currencies()->available_currencies as $slug => $label ) { |
||
247 | $checked = ''; |
||
248 | $hidden = $checked; |
||
249 | if ( array_key_exists( $slug, lsx_currencies()->additional_currencies ) || lsx_currencies()->base_currency === $slug ) { |
||
250 | $checked = 'checked="checked"'; |
||
251 | } |
||
252 | |||
253 | if ( lsx_currencies()->base_currency === $slug ) { |
||
254 | $hidden = 'style="display:none;" class="hidden"'; |
||
255 | } |
||
256 | ?> |
||
257 | <li <?php echo wp_kses_post( $hidden ); ?>> |
||
258 | <input type="checkbox" <?php echo esc_attr( $checked ); ?> data-name="additional_currencies" data-value="<?php echo esc_attr( $slug ); ?>" name="additional_currencies[<?php echo esc_attr( $slug ); ?>]" /> <label for="additional_currencies"><?php echo wp_kses_post( lsx_currencies()->get_currency_flag( $slug ) . $label ); ?></label> |
||
259 | </li> |
||
260 | <?php |
||
261 | } |
||
262 | ?> |
||
263 | </ul> |
||
264 | </td> |
||
265 | </tr> |
||
266 | <?php |
||
267 | } |
||
268 | |||
269 | /** |
||
270 | * Outputs the multiple prices checkbox |
||
271 | */ |
||
272 | public function remove_decimals_field() { |
||
273 | ?> |
||
274 | <tr class="form-field"> |
||
275 | <th scope="row"> |
||
276 | <label for="remove_decimals"><?php esc_html_e( 'Remove Decimals', 'lsx-currencies' ); ?></label> |
||
277 | </th> |
||
278 | <td> |
||
279 | <input type="checkbox" {{#if remove_decimals}} checked="checked" {{/if}} name="remove_decimals" /> |
||
280 | <small><?php esc_html_e( 'Round down the amount to the nearest full value.', 'lsx-currencies' ); ?></small> |
||
281 | </td> |
||
282 | </tr> |
||
283 | <?php |
||
284 | } |
||
285 | |||
286 | /** |
||
287 | * Outputs the multiple prices checkbox |
||
288 | */ |
||
289 | public function enable_multiple_prices_field() { |
||
290 | ?> |
||
291 | <tr class="form-field"> |
||
292 | <th scope="row"> |
||
293 | <label for="multi_price"><?php esc_html_e( 'Enable Multiple Prices', 'lsx-currencies' ); ?></label> |
||
294 | </th> |
||
295 | <td> |
||
296 | <input type="checkbox" {{#if multi_price}} checked="checked" {{/if}} name="multi_price" /> |
||
297 | <small><?php esc_html_e( 'Allowing you to add specific prices per active currency.', 'lsx-currencies' ); ?></small> |
||
298 | </td> |
||
299 | </tr> |
||
300 | <?php |
||
301 | } |
||
302 | |||
303 | /** |
||
304 | * Outputs the multiple prices checkbox |
||
305 | */ |
||
306 | public function enable_convert_to_single_currency_field() { |
||
307 | ?> |
||
308 | <tr class="form-field"> |
||
309 | <th scope="row"> |
||
310 | <label for="convert_to_single_currency"><?php esc_html_e( 'Enable Convert to Single Currency', 'lsx-currencies' ); ?></label> |
||
311 | </th> |
||
312 | <td> |
||
313 | <input type="checkbox" {{#if convert_to_single_currency}} checked="checked" {{/if}} name="convert_to_single_currency" /> |
||
314 | <small><?php esc_html_e( 'This will convert all prices added to the base currency, the currency switcher will not work.', 'lsx-currencies' ); ?></small> |
||
315 | </td> |
||
316 | </tr> |
||
317 | <?php |
||
318 | } |
||
319 | |||
320 | /** |
||
321 | * Outputs the currency heading |
||
322 | */ |
||
323 | public function currency_api_heading() { |
||
324 | ?> |
||
325 | <tr class="form-field banner-wrap"> |
||
326 | <th class="table_heading" style="padding-bottom:0px;" scope="row" colspan="2"> |
||
327 | <h4 style="margin-bottom:0px;"><?php esc_html_e( 'Openexchange API', 'lsx-currencies' ); ?></h4> |
||
328 | </th> |
||
329 | </tr> |
||
330 | <?php |
||
331 | } |
||
332 | |||
333 | /** |
||
334 | * Outputs the api key text field |
||
335 | */ |
||
336 | public function api_key_field() { |
||
337 | ?> |
||
338 | <tr class="form-field"> |
||
339 | <th scope="row"> |
||
340 | <i class="dashicons-before dashicons-admin-network"></i><label for="openexchange_api"> <?php esc_html_e( 'Key', 'to-maps' ); ?></label> |
||
341 | </th> |
||
342 | <td> |
||
343 | <input type="text" {{#if openexchange_api}} value="{{openexchange_api}}" {{/if}} name="openexchange_api" /> |
||
344 | <br /><small><?php esc_html_e( 'Get your API key here', 'lsx-currencies' ); ?> - <a target="_blank" rel="noopener noreferrer" href="https://openexchangerates.org/signup/free">openexchangerates.org</a></small> |
||
345 | </td> |
||
346 | </tr> |
||
347 | <?php |
||
348 | } |
||
349 | |||
350 | /** |
||
351 | * adds in our multiple prices field |
||
0 ignored issues
–
show
Coding Style
introduced
by
![]() |
|||
352 | */ |
||
353 | public function fields( $meta_boxes ) { |
||
354 | if ( true === lsx_currencies()->multi_prices && ! empty( lsx_currencies()->additional_currencies ) ) { |
||
355 | $currency_options = array(); |
||
356 | |||
357 | foreach ( lsx_currencies()->additional_currencies as $key => $values ) { |
||
358 | if ( lsx_currencies()->base_currency === $key ) { |
||
359 | continue; |
||
360 | } |
||
361 | |||
362 | $currency_options[ $key ] = lsx_currencies()->available_currencies[ $key ]; |
||
363 | } |
||
364 | |||
365 | $new_boxes = array(); |
||
366 | $injected = false; |
||
367 | if ( ! empty( $meta_boxes ) ) { |
||
368 | foreach ( $meta_boxes as $meta_box ) { |
||
369 | if ( 'price' === $meta_box['id'] ) { |
||
370 | $new_boxes[] = array( |
||
371 | 'id' => 'price', |
||
372 | 'name' => 'Base Price (' . lsx_currencies()->base_currency . ')', |
||
373 | 'type' => 'text', |
||
374 | ); |
||
375 | $new_boxes[] = array( |
||
376 | 'id' => 'additional_prices', |
||
377 | 'name' => '', |
||
378 | 'single_name' => 'Price', |
||
379 | 'type' => 'group', |
||
380 | 'repeatable' => true, |
||
381 | 'sortable' => true, |
||
382 | 'fields' => array( |
||
383 | array( |
||
384 | 'id' => 'amount', |
||
385 | 'name' => 'Amount', |
||
386 | 'type' => 'text', |
||
387 | ), |
||
388 | array( |
||
389 | 'id' => 'currency', |
||
390 | 'name' => 'Currency', |
||
391 | 'type' => 'select', |
||
392 | 'options' => $currency_options, |
||
393 | ), |
||
394 | ), |
||
395 | ); |
||
396 | $injected = true; |
||
397 | continue; |
||
398 | } |
||
399 | $new_boxes[] = $meta_box; |
||
400 | } |
||
401 | } |
||
402 | if ( true === $injected ) { |
||
403 | $meta_boxes = $new_boxes; |
||
404 | } |
||
405 | } |
||
406 | return $meta_boxes; |
||
407 | } |
||
408 | |||
409 | /** |
||
410 | * Customizer Controls and Settings. |
||
411 | * |
||
412 | * @since 1.1.1 |
||
413 | */ |
||
414 | public function customize_register( $wp_customize ) { |
||
415 | /** |
||
416 | * Panel. |
||
417 | */ |
||
418 | $wp_customize->add_panel( 'lsx_currencies', array( |
||
419 | 'priority' => 62, |
||
0 ignored issues
–
show
|
|||
420 | 'capability' => 'edit_theme_options', |
||
0 ignored issues
–
show
|
|||
421 | 'theme_supports' => '', |
||
0 ignored issues
–
show
|
|||
422 | 'title' => esc_html__( 'Currencies', 'lsx-currencies' ), |
||
0 ignored issues
–
show
|
|||
423 | 'description' => esc_html__( 'LSX Currencies extension settings.', 'lsx-currencies' ), |
||
0 ignored issues
–
show
|
|||
424 | ) ); |
||
425 | |||
426 | /** |
||
427 | * Section. |
||
428 | */ |
||
429 | |||
430 | $wp_customize->add_section( 'lsx_currencies_display', array( |
||
0 ignored issues
–
show
|
|||
431 | 'title' => esc_html__( 'Display', 'lsx-currencies' ), |
||
432 | 'description' => esc_html__( 'LSX Currencies extension display settings.', 'lsx-currencies' ), |
||
433 | 'panel' => 'lsx_currencies', |
||
434 | 'priority' => 1, |
||
435 | ) ); |
||
436 | |||
437 | /** |
||
438 | * Fields. |
||
439 | */ |
||
440 | |||
441 | $wp_customize->add_setting( 'lsx_currencies_currency_menu_position', array( |
||
442 | 'default' => '', |
||
443 | 'sanitize_callback' => array( '\lsx\currencies\classes\Currencies', 'sanitize_select' ), |
||
444 | ) ); |
||
445 | |||
446 | $choices = array( |
||
447 | '' => esc_html__( 'None', 'lsx-currencies' ), |
||
448 | ); |
||
449 | |||
450 | $menus = get_registered_nav_menus(); |
||
451 | |||
452 | if ( is_array( $menus ) && ! empty( $menus ) ) { |
||
453 | $choices = array_merge( $choices, $menus ); |
||
454 | } |
||
455 | |||
456 | $wp_customize->add_control( new \WP_Customize_Control( $wp_customize, 'lsx_currencies_currency_menu_position', array( |
||
457 | 'label' => esc_html__( 'Display in Menu', 'lsx-currencies' ), |
||
458 | 'description' => esc_html__( 'Select the menu to display the currency menu switcher.', 'lsx-currencies' ), |
||
459 | 'section' => 'lsx_currencies_display', |
||
460 | 'settings' => 'lsx_currencies_currency_menu_position', |
||
461 | 'type' => 'select', |
||
462 | 'priority' => 1, |
||
463 | 'choices' => $choices, |
||
464 | ) ) ); |
||
465 | |||
466 | $wp_customize->add_setting( 'lsx_currencies_display_flags', array( |
||
467 | 'default' => false, |
||
468 | 'sanitize_callback' => array( '\lsx\currencies\classes\Currencies', 'sanitize_checkbox' ), |
||
469 | ) ); |
||
470 | |||
471 | $wp_customize->add_control( new \WP_Customize_Control( $wp_customize, 'lsx_currencies_display_flags', array( |
||
472 | 'label' => esc_html__( 'Display Flags', 'lsx-currencies' ), |
||
473 | 'description' => esc_html__( 'Displays a small flag in front of the name.', 'lsx-currencies' ), |
||
474 | 'section' => 'lsx_currencies_display', |
||
475 | 'settings' => 'lsx_currencies_display_flags', |
||
476 | 'type' => 'checkbox', |
||
477 | 'priority' => 2, |
||
478 | ) ) ); |
||
479 | |||
480 | $wp_customize->add_setting( 'lsx_currencies_flag_position', array( |
||
481 | 'default' => 'left', |
||
482 | 'sanitize_callback' => array( '\lsx\currencies\classes\Currencies', 'sanitize_select' ), |
||
483 | ) ); |
||
484 | |||
485 | $wp_customize->add_control( new \WP_Customize_Control( $wp_customize, 'lsx_currencies_flag_position', array( |
||
486 | 'label' => esc_html__( 'Flag Position', 'lsx-currencies' ), |
||
487 | 'description' => esc_html__( 'This moves the flag to the right (after the symbol).', 'lsx-currencies' ), |
||
488 | 'section' => 'lsx_currencies_display', |
||
489 | 'settings' => 'lsx_currencies_flag_position', |
||
490 | 'type' => 'select', |
||
491 | 'priority' => 3, |
||
492 | 'choices' => array( |
||
493 | 'left' => esc_html__( 'Left', 'lsx-currencies' ), |
||
494 | 'right' => esc_html__( 'Right', 'lsx-currencies' ), |
||
495 | ), |
||
496 | ) ) ); |
||
497 | |||
498 | $wp_customize->add_setting( 'lsx_currencies_currency_switcher_position', array( |
||
499 | 'default' => 'right', |
||
500 | 'sanitize_callback' => array( '\lsx\currencies\classes\Currencies', 'sanitize_select' ), |
||
501 | ) ); |
||
502 | |||
503 | $wp_customize->add_control( new \WP_Customize_Control( $wp_customize, 'lsx_currencies_currency_switcher_position', array( |
||
504 | 'label' => esc_html__( 'Symbol Position', 'lsx-currencies' ), |
||
505 | 'description' => esc_html__( 'This moves the symbol for the switcher to the left (before the flag).', 'lsx-currencies' ), |
||
506 | 'section' => 'lsx_currencies_display', |
||
507 | 'settings' => 'lsx_currencies_currency_switcher_position', |
||
508 | 'type' => 'select', |
||
509 | 'priority' => 4, |
||
510 | 'choices' => array( |
||
511 | 'left' => esc_html__( 'Left', 'lsx-currencies' ), |
||
512 | 'right' => esc_html__( 'Right', 'lsx-currencies' ), |
||
513 | ), |
||
514 | ) ) ); |
||
515 | } |
||
516 | } |
||
517 |