Issues (575)

classes/class-admin.php (2 issues)

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 );
0 ignored issues
show
Unused Code Comprehensibility introduced by
50% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
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 ) ) {
0 ignored issues
show
Unused Code Comprehensibility introduced by
54% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
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
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,
420
			'capability'        => 'edit_theme_options',
421
			'theme_supports'    => '',
422
			'title'             => esc_html__( 'Currencies', 'lsx-currencies' ),
423
			'description'       => esc_html__( 'LSX Currencies extension settings.', 'lsx-currencies' ),
424
		) );
425
426
		/**
427
		 * Section.
428
		 */
429
430
		$wp_customize->add_section( 'lsx_currencies_display', array(
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