Issues (1724)

classes/class-lsx-customizer-woocommerce.php (27 issues)

1
<?php
2
if ( ! class_exists( 'LSX_Customizer_WooCommerce' ) ) {
3
4
	/**
5
	 * LSX Customizer WooCommerce Class
6
	 *
7
	 * @package   LSX Customizer
8
	 * @author    LightSpeed
9
	 * @license   GPL3
10
	 * @link
11
	 * @copyright 2016 LightSpeed
12
	 */
13
	class LSX_Customizer_WooCommerce extends LSX_Customizer {
14
15
		/**
16
		 * Constructor.
17
		 *
18
		 * @since 1.1.1
19
		 */
20
		public function __construct() {
21
			add_action( 'customize_register', array( $this, 'customize_register' ), 20 );
22
23
			add_filter( 'body_class', array( $this, 'body_class' ), 2999 );
24
25
			add_action( 'template_redirect', array( $this, 'thankyou_page' ), 2999 );
26
27
			if ( empty( get_theme_mod( 'lsx_two_step_checkout', false ) ) ) {
0 ignored issues
show
Expected 0 spaces after opening bracket; 1 found
Loading history...
Expected 0 spaces before closing bracket; 1 found
Loading history...
28
				add_action( 'lsx_entry_inside_top', array( $this, 'checkout_steps' ), 15 );
29
			}
30
31
			add_action( 'wp', array( $this, 'cart_extra_html' ), 2999 );
32
			add_action( 'wp', array( $this, 'checkout_extra_html' ), 2999 );
33
			add_action( 'lsx_wc_cart_menu_item_position', array( $this, 'cart_menu_item_position' ) );
34
			add_action( 'lsx_wc_cart_menu_item_class', array( $this, 'cart_menu_item_class' ) );
35
36
			add_filter( 'wp_nav_menu_items', array( $this, 'my_account_menu_item' ), 9, 2 );
37
			add_action( 'lsx_wc_my_account_menu_item_position', array( $this, 'my_account_menu_item_position' ) );
38
			add_action( 'lsx_wc_my_account_menu_item_class', array( $this, 'my_account_menu_item_class' ) );
39
40
			// Shop Layout Switcher.
41
			//add_action( 'wp_head', array( $this, 'show_layout_switcher' ), 1 );
42
			//add_filter( 'gridlist_toggle_button_output', array( $this, 'gridlist_toggle_button_output' ), 10, 3 );
43
		}
44
45
		/**
46
		 * Customizer Controls and Settings.
47
		 *
48
		 * @param WP_Customize_Manager $wp_customize Theme Customizer object.
49
		 * @since 1.1.1
50
		 */
51
		public function customize_register( $wp_customize ) {
52
			/**
53
			 * Checkout.
54
			 */
55
56
			$wp_customize->add_section( 'lsx-wc-checkout', array(
57
				'title'       => esc_html__( 'LSX Checkout', 'lsx-customizer' ),
58
				'description' => esc_html__( 'Change the WooCommerce checkout settings.', 'lsx-customizer' ),
59
				'panel'       => 'woocommerce',
60
				'priority'    => 3,
61
			) );
62
63
			$wp_customize->add_setting( 'lsx_checkout_steps', array(
64
				'default'           => true,
65
				'sanitize_callback' => array( $this, 'sanitize_checkbox' ),
66
			) );
67
68
			$wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'lsx_checkout_steps', array(
69
				'label'       => esc_html__( 'Steps', 'lsx-customizer' ),
70
				'description' => esc_html__( 'Enable the checkout steps header.', 'lsx-customizer' ),
71
				'section'     => 'lsx-wc-checkout',
72
				'settings'    => 'lsx_checkout_steps',
73
				'type'        => 'checkbox',
74
				'priority'    => 1,
75
			) ) );
76
77
			/**
78
			 * Checkout Layout
79
			 */
80
			$wp_customize->add_setting( 'lsx_wc_checkout_layout', array(
81
				'default' => 'default',
82
				'sanitize_callback' => array( $this, 'sanitize_select' ),
83
			) );
84
85
			$wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'lsx_wc_checkout_layout', array(
86
				'label'       => esc_html__( 'Layout', 'lsx-customizer' ),
87
				'description' => esc_html__( 'WooCommerce checkout layout.', 'lsx-customizer' ),
88
				'section'     => 'lsx-wc-checkout',
89
				'settings'    => 'lsx_wc_checkout_layout',
90
				'type'        => 'select',
91
				'priority'    => 2,
92
				'choices'     => array(
93
					'default' => esc_html__( 'Default', 'lsx-customizer' ),
94
					'stacked' => esc_html__( 'Stacked', 'lsx-customizer' ),
95
					'columns' => esc_html__( 'Columns', 'lsx-customizer' ),
96
				),
97
			) ) );
98
99
			$wp_customize->add_setting( 'lsx_wc_checkout_thankyou_page', array(
100
				'default' => '0',
101
				'sanitize_callback' => array( $this, 'sanitize_select' ),
102
			) );
103
104
			$choices = array(
105
				'0' => esc_html__( 'Default', 'lsx-customizer' ),
106
			);
107
108
			/**
109
			 * Distraction Free Checkout
110
			 */
111
			$wp_customize->add_setting( 'lsx_distraction_free_checkout', array(
0 ignored issues
show
The opening parenthesis of a multi-line function call should be the last content on the line.
Loading history...
For multi-line function calls, each argument should be on a separate line.

For a function calls that spawns multiple lines, the coding style suggests to split arguments to separate lines like this:

someFunctionCall(
    $firstArgument,
    $secondArgument,
    $thirdArgument
);
Loading history...
112
				'sanitize_callback' => array( $this, 'sanitize_checkbox' ),
113
			) );
0 ignored issues
show
For multi-line function calls, the closing parenthesis should be on a new line.

If a function call spawns multiple lines, the coding standard suggests to move the closing parenthesis to a new line:

someFunctionCall(
    $firstArgument,
    $secondArgument,
    $thirdArgument
); // Closing parenthesis on a new line.
Loading history...
114
115
			$wp_customize->add_control( new WP_Customize_Control(
0 ignored issues
show
The opening parenthesis of a multi-line function call should be the last content on the line.
Loading history...
116
				$wp_customize,
117
				'lsx_distraction_free_checkout',
118
				array(
119
					'label'       => esc_html__( 'Distraction Free Checkout', 'lsx-customizer' ),
120
					'description' => esc_html__( 'Removes all clutter from the checkout, allowing the customer to focus entirely on that procedure. Removes the stepped cart and checkout.', 'lsx-customizer' ),
121
					'section'     => 'lsx-wc-checkout',
122
					'settings'    => 'lsx_distraction_free_checkout',
123
					'type'        => 'checkbox',
124
					'priority'    => 3,
125
				)
126
			) );
0 ignored issues
show
For multi-line function calls, the closing parenthesis should be on a new line.

If a function call spawns multiple lines, the coding standard suggests to move the closing parenthesis to a new line:

someFunctionCall(
    $firstArgument,
    $secondArgument,
    $thirdArgument
); // Closing parenthesis on a new line.
Loading history...
127
128
			/**
129
			 * Two Step Checkout
130
			 */
131
			$wp_customize->add_setting( 'lsx_two_step_checkout', array(
0 ignored issues
show
The opening parenthesis of a multi-line function call should be the last content on the line.
Loading history...
For multi-line function calls, each argument should be on a separate line.

For a function calls that spawns multiple lines, the coding style suggests to split arguments to separate lines like this:

someFunctionCall(
    $firstArgument,
    $secondArgument,
    $thirdArgument
);
Loading history...
132
				'sanitize_callback' => array( $this, 'sanitize_checkbox' ),
133
			) );
0 ignored issues
show
For multi-line function calls, the closing parenthesis should be on a new line.

If a function call spawns multiple lines, the coding standard suggests to move the closing parenthesis to a new line:

someFunctionCall(
    $firstArgument,
    $secondArgument,
    $thirdArgument
); // Closing parenthesis on a new line.
Loading history...
134
135
			$wp_customize->add_control( new WP_Customize_Control(
0 ignored issues
show
The opening parenthesis of a multi-line function call should be the last content on the line.
Loading history...
136
				$wp_customize,
137
				'lsx_two_step_checkout',
138
				array(
139
					'label'       => esc_html__( 'Two Step Checkout', 'lsx-customizer' ),
140
					'description' => esc_html__( 'Separates the customer details collection form, and the order summary / payment details form in to two separate pages. Removes the stepped cart and checkout.', 'lsx-customizer' ),
141
					'section'     => 'lsx-wc-checkout',
142
					'settings'    => 'lsx_two_step_checkout',
143
					'type'        => 'checkbox',
144
					'priority'    => 4,
145
				)
146
			) );
0 ignored issues
show
For multi-line function calls, the closing parenthesis should be on a new line.

If a function call spawns multiple lines, the coding standard suggests to move the closing parenthesis to a new line:

someFunctionCall(
    $firstArgument,
    $secondArgument,
    $thirdArgument
); // Closing parenthesis on a new line.
Loading history...
147
148
			/**
149
			 * Thank you page options
150
			 */
151
			$pages = get_pages();
152
153
			foreach ( $pages as $key => $page ) {
154
				$choices[ $page->ID ] = $page->post_title;
155
			}
156
157
			$wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'lsx_wc_checkout_thankyou_page', array(
158
				'label'       => esc_html__( 'Thank You Page', 'lsx-customizer' ),
159
				'description' => esc_html__( 'WooCommerce checkout thank you page.', 'lsx-customizer' ),
160
				'section'     => 'lsx-wc-checkout',
161
				'settings'    => 'lsx_wc_checkout_thankyou_page',
162
				'type'        => 'select',
163
				'priority'    => 5,
164
				'choices'     => $choices,
165
			) ) );
166
167
			$wp_customize->add_setting( 'lsx_wc_checkout_extra_html', array(
168
				'default'           => '',
169
				'sanitize_callback' => 'wp_kses_post',
170
			) );
171
172
			$wp_customize->add_control( new LSX_Customizer_Wysiwyg_Control( $wp_customize, 'lsx_wc_checkout_extra_html', array(
173
				'label'       => esc_html__( 'Extra HTML', 'lsx-customizer' ),
174
				'description' => esc_html__( 'Extra HTML to display at checkout page (bottom/right).', 'lsx-customizer' ),
175
				'section'     => 'lsx-wc-checkout',
176
				'settings'    => 'lsx_wc_checkout_extra_html',
177
				'priority'    => 6,
178
				'type'        => 'wysiwyg',
179
			) ) );
180
181
			/**
182
			 * Cart.
183
			 */
184
185
			$wp_customize->add_setting( 'lsx_wc_cart_menu_item_style', array(
186
				'default' => 'extended',
187
				'sanitize_callback' => array( $this, 'sanitize_select' ),
188
			) );
189
190
			$wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'lsx_wc_cart_menu_item_style', array(
191
				'label'       => esc_html__( 'Menu Item Style', 'lsx-customizer' ),
192
				'description' => esc_html__( 'WooCommerce menu item cart style.', 'lsx-customizer' ),
193
				'section'     => 'lsx-wc-cart',
194
				'settings'    => 'lsx_wc_cart_menu_item_style',
195
				'type'        => 'select',
196
				'priority'    => 2,
197
				'choices'     => array(
198
					'simple'   => esc_html__( 'Simple', 'lsx-customizer' ),
199
					'extended' => esc_html__( 'Extended', 'lsx-customizer' ),
200
				),
201
			) ) );
202
203
			$wp_customize->add_setting( 'lsx_wc_cart_menu_item_position', array(
204
				'default' => 'main-menu-in',
205
				'sanitize_callback' => array( $this, 'sanitize_select' ),
206
			) );
207
208
			$wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'lsx_wc_cart_menu_item_position', array(
209
				'label'       => esc_html__( 'Menu Item Position', 'lsx-customizer' ),
210
				'description' => esc_html__( 'WooCommerce menu item cart position.', 'lsx-customizer' ),
211
				'section'     => 'lsx-wc-cart',
212
				'settings'    => 'lsx_wc_cart_menu_item_position',
213
				'type'        => 'select',
214
				'priority'    => 3,
215
				'choices'     => array(
216
					'main-menu-in'   => esc_html__( 'Main Menu (as last item)', 'lsx-customizer' ),
217
					'main-menu-out'  => esc_html__( 'Main Menu (as last item, right aligned)', 'lsx-customizer' ),
218
					'top-menu-left'  => esc_html__( 'Top Menu (left)', 'lsx-customizer' ),
219
					'top-menu-right' => esc_html__( 'Top Menu (right)', 'lsx-customizer' ),
220
				),
221
			) ) );
222
223
			$wp_customize->add_setting( 'lsx_wc_cart_extra_html', array(
224
				'default'           => '',
225
				'sanitize_callback' => 'wp_kses_post',
226
			) );
227
228
			$wp_customize->add_control( new LSX_Customizer_Wysiwyg_Control( $wp_customize, 'lsx_wc_cart_extra_html', array(
229
				'label'       => esc_html__( 'Extra HTML', 'lsx-customizer' ),
230
				'description' => esc_html__( 'Extra HTML to display at cart page (bottom/left).', 'lsx-customizer' ),
231
				'section'     => 'lsx-wc-cart',
232
				'settings'    => 'lsx_wc_cart_extra_html',
233
				'priority'    => 4,
234
				'type'        => 'wysiwyg',
235
			) ) );
236
237
			/**
238
			 * My Account.
239
			 */
240
241
			$wp_customize->add_section( 'lsx-wc-my-account', array(
242
				'title'       => esc_html__( 'LSX My Account', 'lsx-customizer' ),
243
				'description' => esc_html__( 'Change the WooCommerce My Account settings.', 'lsx-customizer' ),
244
				'panel'       => 'woocommerce',
245
				'priority'    => 4,
246
			) );
247
248
			$wp_customize->add_setting( 'lsx_wc_my_account_menu_item', array(
249
				'default'           => false,
250
				'sanitize_callback' => array( $this, 'sanitize_checkbox' ),
251
			) );
252
253
			$wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'lsx_wc_my_account_menu_item', array(
254
				'label'       => esc_html__( 'Menu Item', 'lsx-customizer' ),
255
				'description' => esc_html__( 'Enable the My Account menu item.', 'lsx-customizer' ),
256
				'section'     => 'lsx-wc-my-account',
257
				'settings'    => 'lsx_wc_my_account_menu_item',
258
				'type'        => 'checkbox',
259
				'priority'    => 1,
260
			) ) );
261
262
			$wp_customize->add_setting( 'lsx_wc_my_account_menu_item_style', array(
263
				'default' => 'extended',
264
				'sanitize_callback' => array( $this, 'sanitize_select' ),
265
			) );
266
267
			$wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'lsx_wc_my_account_menu_item_style', array(
268
				'label'       => esc_html__( 'Menu Item Style', 'lsx-customizer' ),
269
				'description' => esc_html__( 'WooCommerce menu item My Account style.', 'lsx-customizer' ),
270
				'section'     => 'lsx-wc-my-account',
271
				'settings'    => 'lsx_wc_my_account_menu_item_style',
272
				'type'        => 'select',
273
				'priority'    => 2,
274
				'choices'     => array(
275
					'simple'   => esc_html__( 'Simple', 'lsx-customizer' ),
276
					'extended' => esc_html__( 'Extended', 'lsx-customizer' ),
277
				),
278
			) ) );
279
280
			$wp_customize->add_setting( 'lsx_wc_my_account_menu_item_position', array(
281
				'default' => 'main-menu-in',
282
				'sanitize_callback' => array( $this, 'sanitize_select' ),
283
			) );
284
285
			$wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'lsx_wc_my_account_menu_item_position', array(
286
				'label'       => esc_html__( 'Menu Item Position', 'lsx-customizer' ),
287
				'description' => esc_html__( 'WooCommerce menu item My Account position.', 'lsx-customizer' ),
288
				'section'     => 'lsx-wc-my-account',
289
				'settings'    => 'lsx_wc_my_account_menu_item_position',
290
				'type'        => 'select',
291
				'priority'    => 3,
292
				'choices'     => array(
293
					'main-menu-in'   => esc_html__( 'Main Menu (as last item)', 'lsx-customizer' ),
294
					'main-menu-out'  => esc_html__( 'Main Menu (as last item, right aligned)', 'lsx-customizer' ),
295
					'top-menu-left'  => esc_html__( 'Top Menu (left)', 'lsx-customizer' ),
296
					'top-menu-right' => esc_html__( 'Top Menu (right)', 'lsx-customizer' ),
297
				),
298
			) ) );
299
		}
300
301
		/**
302
		 * Add and remove WC body_class() classes.
303
		 *
304
		 * @since 1.1.1
305
		 */
306
		public function body_class( $classes ) {
307
			$distraction_free = get_theme_mod( 'lsx_distraction_free_checkout', false );
0 ignored issues
show
Equals sign not aligned with surrounding assignments; expected 2 spaces but found 1 space

This check looks for multiple assignments in successive lines of code. It will report an issue if the operators are not in a straight line.

To visualize

$a = "a";
$ab = "ab";
$abc = "abc";

will produce issues in the first and second line, while this second example

$a   = "a";
$ab  = "ab";
$abc = "abc";

will produce no issues.

Loading history...
308
			$two_step_checkout = get_theme_mod( 'lsx_two_step_checkout', false );
309
			if ( is_checkout() ) {
310
				$layout = get_theme_mod( 'lsx_wc_checkout_layout', 'default' );
311
312
				if ( 'default' === $layout ) {
0 ignored issues
show
Expected 0 spaces after opening bracket; 1 found
Loading history...
Expected 0 spaces before closing bracket; 1 found
Loading history...
313
					$classes[] = 'lsx-wc-checkout-layout-default';
314
				} elseif ( 'stacked' === $layout ) {
0 ignored issues
show
Expected 0 spaces after opening bracket; 1 found
Loading history...
Expected 0 spaces before closing bracket; 1 found
Loading history...
315
					$classes[] = 'lsx-wc-checkout-layout-stacked';
316
				} elseif ( 'columns' === $layout ) {
317
					$classes[] = 'lsx-wc-checkout-layout-two-column-addreses';
318
				}
319
				if ( ! empty( $distraction_free ) ) {
0 ignored issues
show
Expected 0 spaces after opening bracket; 1 found
Loading history...
Expected 0 spaces before closing bracket; 1 found
Loading history...
320
					$classes[] = 'lsx-wc-checkout-distraction-free';
321
				}
0 ignored issues
show
No blank line found after control structure
Loading history...
322
				if ( ! empty( $two_step_checkout ) ) {
0 ignored issues
show
Expected 0 spaces after opening bracket; 1 found
Loading history...
Expected 0 spaces before closing bracket; 1 found
Loading history...
323
					$classes[] = 'lsx-wc-checkout-two-steps';
324
				}
325
			}
326
327
			return $classes;
328
		}
329
330
		/**
331
		 * WC thank you page.
332
		 *
333
		 * @since 1.1.1
334
		 */
335
		public function thankyou_page() {
336
			global $wp;
337
338
			if ( is_checkout() && ! empty( $wp->query_vars['order-received'] ) ) {
339
				$thankyou_page = get_theme_mod( 'lsx_wc_checkout_thankyou_page', '0' );
340
341
				if ( ! empty( $thankyou_page ) && ! is_page( $thankyou_page ) ) {
342
					$order_id  = apply_filters( 'woocommerce_thankyou_order_id', absint( $wp->query_vars['order-received'] ) );
343
					$order_key = apply_filters( 'woocommerce_thankyou_order_key', empty( $_GET['key'] ) ? '' : wc_clean( $_GET['key'] ) );
344
345
					if ( $order_id > 0 ) {
346
						wp_safe_redirect( get_permalink( $thankyou_page ) . '?order-received=' . $order_id . '&key=' . $order_key, 302 );
347
						exit;
348
					}
349
				}
350
			}
351
		}
352
353
		/**
354
		 * Display WC checkout steps.
355
		 *
356
		 * @since 1.1.1
357
		 */
358
		public function checkout_steps() {
359
			$cart_url = function_exists( 'wc_get_cart_url' ) ? wc_get_cart_url() : WC()->cart->get_cart_url();
0 ignored issues
show
The function WC was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

359
			$cart_url = function_exists( 'wc_get_cart_url' ) ? wc_get_cart_url() : /** @scrutinizer ignore-call */ WC()->cart->get_cart_url();
Loading history...
360
			if ( ( is_checkout() || is_cart() ) && ! empty( get_theme_mod( 'lsx_checkout_steps', '1' ) ) ) :
0 ignored issues
show
Expected 0 spaces after opening bracket; 1 found
Loading history...
Expected 0 spaces before closing bracket; 1 found
Loading history...
361
				global $wp;
362
				?>
363
				<div class="lsx-wc-checkout-steps">
364
					<ul class="lsx-wc-checkout-steps-items">
365
366
						<?php if ( is_cart() ) : ?>
367
368
							<li class="lsx-wc-checkout-steps-item lsx-wc-checkout-steps-item-done">
369
								<a href="<?php echo esc_url( get_permalink( wc_get_page_id( 'shop' ) ) ); ?>" class="lsx-wc-checkout-steps-link">
0 ignored issues
show
The function wc_get_page_id was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

369
								<a href="<?php echo esc_url( get_permalink( /** @scrutinizer ignore-call */ wc_get_page_id( 'shop' ) ) ); ?>" class="lsx-wc-checkout-steps-link">
Loading history...
It seems like get_permalink(wc_get_page_id('shop')) can also be of type false; however, parameter $url of esc_url() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

369
								<a href="<?php echo esc_url( /** @scrutinizer ignore-type */ get_permalink( wc_get_page_id( 'shop' ) ) ); ?>" class="lsx-wc-checkout-steps-link">
Loading history...
370
									<i class="fa fa-check-circle" aria-hidden="true"></i>
371
									<span><span><?php esc_html_e( 'Shop', 'lsx-customizer' ); ?></span></span>
372
								</a>
373
374
								<i class="fa fa-angle-right" aria-hidden="true"></i>
375
							</li>
376
377
							<li class="lsx-wc-checkout-steps-item lsx-wc-checkout-steps-item-current lsx-wc-checkout-steps-item-cart">
378
								<i class="lsx-wc-checkout-steps-counter" aria-hidden="true"><?php esc_html_e( '2', 'lsx-customizer' ); ?></i>
379
								<span><span><?php esc_html_e( 'My Cart', 'lsx-customizer' ); ?></span></span>
380
								<i class="fa fa-angle-right" aria-hidden="true"></i>
381
							</li>
382
383
							<li class="lsx-wc-checkout-steps-item lsx-wc-checkout-steps-item-disabled lsx-wc-checkout-steps-item-payment">
384
								<i class="lsx-wc-checkout-steps-counter" aria-hidden="true"><?php esc_html_e( '3', 'lsx-customizer' ); ?></i>
385
								<span><span><?php esc_html_e( 'Billing details', 'lsx-customizer' ); ?></span></span>
386
								<i class="fa fa-angle-right" aria-hidden="true"></i>
387
							</li>
388
389
							<li class="lsx-wc-checkout-steps-item lsx-wc-checkout-steps-item-disabled lsx-wc-checkout-steps-item-thankyou">
390
								<i class="lsx-wc-checkout-steps-counter" aria-hidden="true"><?php esc_html_e( '4', 'lsx-customizer' ); ?></i>
391
								<span><span><?php esc_html_e( 'Payment', 'lsx-customizer' ); ?></span></span>
392
							</li>
393
394
						<?php elseif ( is_checkout() && empty( $wp->query_vars['order-received'] ) ) : ?>
395
396
							<li class="lsx-wc-checkout-steps-item lsx-wc-checkout-steps-item-done">
397
								<a href="<?php echo esc_url( get_permalink( wc_get_page_id( 'shop' ) ) ); ?>" class="lsx-wc-checkout-steps-link">
398
									<i class="fa fa-check-circle" aria-hidden="true"></i>
399
									<span><span><?php esc_html_e( 'Shop', 'lsx-customizer' ); ?></span></span>
400
								</a>
401
402
								<i class="fa fa-angle-right" aria-hidden="true"></i>
403
							</li>
404
405
							<li class="lsx-wc-checkout-steps-item lsx-wc-checkout-steps-item-done lsx-wc-checkout-steps-item-cart">
406
								<a href="<?php echo esc_url( $cart_url ); ?>" class="lsx-wc-checkout-steps-link">
407
									<i class="fa fa-check-circle" aria-hidden="true"></i>
408
									<span><span><?php esc_html_e( 'My Cart', 'lsx-customizer' ); ?></span></span>
409
								</a>
410
411
								<i class="fa fa-angle-right" aria-hidden="true"></i>
412
							</li>
413
414
							<li class="lsx-wc-checkout-steps-item lsx-wc-checkout-steps-item-current lsx-wc-checkout-steps-item-payment">
415
								<i class="lsx-wc-checkout-steps-counter" aria-hidden="true"><?php esc_html_e( '3', 'lsx-customizer' ); ?></i>
416
								<span><span><?php esc_html_e( 'Billing details', 'lsx-customizer' ); ?></span></span>
417
								<i class="fa fa-angle-right" aria-hidden="true"></i>
418
							</li>
419
420
							<li class="lsx-wc-checkout-steps-item lsx-wc-checkout-steps-item-disabled lsx-wc-checkout-steps-item-thankyou">
421
								<i class="lsx-wc-checkout-steps-counter" aria-hidden="true"><?php esc_html_e( '4', 'lsx-customizer' ); ?></i>
422
								<span><span><?php esc_html_e( 'Payment', 'lsx-customizer' ); ?></span></span>
423
							</li>
424
425
						<?php elseif ( is_checkout() ) : ?>
426
427
							<li class="lsx-wc-checkout-steps-item lsx-wc-checkout-steps-item-done">
428
								<i class="fa fa-check-circle" aria-hidden="true"></i>
429
								<span><span><?php esc_html_e( 'Shop', 'lsx-customizer' ); ?></span></span>
430
								<i class="fa fa-angle-right" aria-hidden="true"></i>
431
							</li>
432
433
							<li class="lsx-wc-checkout-steps-item lsx-wc-checkout-steps-item-done lsx-wc-checkout-steps-item-cart">
434
								<i class="fa fa-check-circle" aria-hidden="true"></i>
435
								<span><span><?php esc_html_e( 'My Cart', 'lsx-customizer' ); ?></span></span>
436
								<i class="fa fa-angle-right" aria-hidden="true"></i>
437
							</li>
438
439
							<li class="lsx-wc-checkout-steps-item lsx-wc-checkout-steps-item-done lsx-wc-checkout-steps-item-payment">
440
								<i class="fa fa-check-circle" aria-hidden="true"></i>
441
								<span><span><?php esc_html_e( 'Billing details', 'lsx-customizer' ); ?></span></span>
442
								<i class="fa fa-angle-right" aria-hidden="true"></i>
443
							</li>
444
445
							<li class="lsx-wc-checkout-steps-item lsx-wc-checkout-steps-item-current lsx-wc-checkout-steps-item-thankyou">
446
								<i class="lsx-wc-checkout-steps-counter" aria-hidden="true"><?php esc_html_e( '4', 'lsx-customizer' ); ?></i>
447
								<span><span><?php esc_html_e( 'Payment', 'lsx-customizer' ); ?></span></span>
448
							</li>
449
450
						<?php endif; ?>
451
452
					</ul>
453
				</div>
454
				<?php
455
			endif;
456
		}
457
458
		/**
459
		 * Display extra HTML on checkout.
460
		 *
461
		 * @since 1.1.1
462
		 */
463
		public function checkout_extra_html() {
464
			if ( is_checkout() ) {
465
				$checkout_extra_html = get_theme_mod( 'lsx_wc_checkout_extra_html', '' );
466
467
				if ( ! empty( $checkout_extra_html ) ) {
468
					add_action( 'woocommerce_review_order_after_payment', array( $this, 'checkout_extra_html_echo' ), 9 );
469
				}
470
			}
471
		}
472
473
		/**
474
		 * Display extra HTML on checkout.
475
		 *
476
		 * @since 1.1.1
477
		 */
478
		public function checkout_extra_html_echo() {
479
			if ( is_checkout() ) {
480
				$checkout_extra_html = get_theme_mod( 'lsx_wc_checkout_extra_html', '' );
481
482
				if ( ! empty( $checkout_extra_html ) ) {
483
					?>
484
					<div class="lsx-wc-checkout-extra-html">
485
						<?php echo wp_kses_post( $checkout_extra_html ); ?>
486
					</div>
487
				<?php
488
				}
489
			}
490
		}
491
492
		/**
493
		 * Display extra HTML on cart.
494
		 *
495
		 * @since 1.1.1
496
		 */
497
		public function cart_extra_html() {
498
			if ( is_cart() ) {
499
				$cart_extra_html = get_theme_mod( 'lsx_wc_cart_extra_html', '' );
500
501
				if ( ! empty( $cart_extra_html ) ) {
502
					remove_action( 'woocommerce_cart_collaterals', 'woocommerce_cross_sell_display' );
503
					add_action( 'woocommerce_cart_collaterals', array( $this, 'cart_extra_html_echo' ), 9 );
504
				}
505
			}
506
		}
507
508
		/**
509
		 * Display extra HTML on cart.
510
		 *
511
		 * @since 1.1.1
512
		 */
513
		public function cart_extra_html_echo() {
514
			if ( is_cart() ) {
515
				$cart_extra_html = get_theme_mod( 'lsx_wc_cart_extra_html', '' );
516
517
				if ( ! empty( $cart_extra_html ) ) {
518
                ?>
519
					<div class="lsx-wc-cart-extra-html">
520
						<?php echo wp_kses_post( $cart_extra_html ); ?>
521
					</div>
522
				<?php
523
                }
524
			}
525
		}
526
527
		/**
528
		 * The place (menu) to display the cart menu item position.
529
		 *
530
		 * @since 1.1.1
531
		 */
532
		public function cart_menu_item_position( $menu_position ) {
533
			$position = get_theme_mod( 'lsx_wc_cart_menu_item_position', '' );
534
535
			if ( ! empty( $position ) ) {
536
				switch ( $position ) {
537
					case 'main-menu-in':
538
					case 'main-menu-out':
539
						$menu_position = 'primary';
540
						break;
541
542
					case 'top-menu-right':
543
						$menu_position = 'top-menu';
544
						break;
545
546
					case 'top-menu-left':
547
						$menu_position = 'top-menu-left';
548
						break;
549
				}
550
			}
551
552
			return $menu_position;
553
		}
554
555
		/**
556
		 * The place (menu) to display the cart menu item position.
557
		 *
558
		 * @since 1.1.1
559
		 */
560
		public function cart_menu_item_class( $item_class ) {
561
			$position = get_theme_mod( 'lsx_wc_cart_menu_item_position', '' );
562
563
			if ( 'main-menu-out' === $position ) {
564
				$item_class .= ' lsx-wc-cart-menu-item-right-aligned';
565
			}
566
567
			$style = get_theme_mod( 'lsx_wc_cart_menu_item_style', '' );
568
569
			if ( 'simple' === $style ) {
570
				$item_class .= ' lsx-wc-cart-menu-item-simple';
571
			}
572
573
			return $item_class;
574
		}
575
576
		/**
577
		 * Adds WC My Account to the header.
578
		 *
579
		 * @since 1.1.1
580
		 */
581
		public function my_account_menu_item( $items, $args ) {
582
			$my_account_menu_item_position = apply_filters( 'lsx_wc_my_account_menu_item_position', 'primary' );
583
584
			if ( $my_account_menu_item_position === $args->theme_location || ( 'primary_logged_out' === $args->theme_location && 'primary' === $my_account_menu_item_position ) ) {
585
				$customizer_option  = get_theme_mod( 'lsx_wc_my_account_menu_item', false );
586
587
				if ( ! empty( $customizer_option ) ) {
588
					if ( is_account_page() ) {
589
						$class = 'current-menu-item';
590
					} else {
591
						$class = '';
592
					}
593
594
					$item_class = 'menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children dropdown lsx-wc-my-account-menu-item ' . $class;
595
					$item_class = apply_filters( 'lsx_wc_my_account_menu_item_class', $item_class );
596
597
					$endpoints = WC()->query->get_query_vars();
598
599
					if ( is_user_logged_in() ) {
600
						$item  = '<li class="' . $item_class . '">';
601
						$item .= '<a title="' . esc_attr__( 'View your account', 'lsx-customizer' ) . '" href="' . esc_url( get_permalink( wc_get_page_id( 'myaccount' ) ) ) . '" data-toggle="dropdown" class="dropdown-toggle" aria-haspopup="true"><span>' . esc_attr__( 'My Account', 'lsx-customizer' ) . '</span></a>';
602
						$item .= '<ul role="menu" class=" dropdown-menu lsx-wc-my-account-sub-menu">';
603
							foreach ( wc_get_account_menu_items() as $endpoint => $label ) {
604
								$slug = $endpoint;
605
								if ( isset( $endpoints[ $endpoint ] ) && '' !== $endpoints[ $endpoint ] ) {
606
									$slug = $endpoints[ $endpoint ];
607
								}
608
								if ( 'dashboard' === $slug ) {
609
									$slug = '';
610
								}
611
								$item .= '<li class="menu-item"><a title="" href="' . esc_url( get_permalink( wc_get_page_id( 'myaccount' ) ) . $slug ) . '">' . $label . '</a></li>';
612
							}
613
						$item .= '</ul></li>';
614
615
					} else {
616
						$item = '<li class="' . $item_class . '">' .
617
									'<a title="' . esc_attr__( 'View your account', 'lsx-customizer' ) . '" href="' . esc_url( get_permalink( wc_get_page_id( 'myaccount' ) ) ) . '"><span>' . esc_attr__( 'Login', 'lsx-customizer' ) . '</span></a>' .
618
								'</li>';
619
					}
620
621
					$item = apply_filters( 'lsx_wc_my_account_menu_item', $item );
622
623
					if ( 'top-menu' === $args->theme_location ) {
624
						$items = $item . $items;
625
					} else {
626
						$items = $items . $item;
627
					}
628
				}
629
			}
630
631
			return $items;
632
		}
633
634
		/**
635
		 * The place (menu) to display the My Account menu item position.
636
		 *
637
		 * @since 1.1.1
638
		 */
639
		public function my_account_menu_item_position( $menu_position ) {
640
			$position = get_theme_mod( 'lsx_wc_my_account_menu_item_position', '' );
641
642
			if ( ! empty( $position ) ) {
643
				switch ( $position ) {
644
					case 'main-menu-in':
645
					case 'main-menu-out':
646
						$menu_position = 'primary';
647
						break;
648
649
					case 'top-menu-right':
650
						$menu_position = 'top-menu';
651
						break;
652
653
					case 'top-menu-left':
654
						$menu_position = 'top-menu-left';
655
						break;
656
				}
657
			}
658
659
			return $menu_position;
660
		}
661
662
		/**
663
		 * The place (menu) to display the My Account menu item position.
664
		 *
665
		 * @since 1.1.1
666
		 */
667
		public function my_account_menu_item_class( $item_class ) {
668
			$position = get_theme_mod( 'lsx_wc_my_account_menu_item_position', '' );
669
670
			if ( 'main-menu-out' === $position ) {
671
				$item_class .= ' lsx-wc-my-account-menu-item-right-aligned';
672
			}
673
674
			if ( ! is_user_logged_in() ) {
675
				$item_class .= ' lsx-wc-my-account-login';
676
			}
677
678
			$style = get_theme_mod( 'lsx_wc_my_account_menu_item_style', '' );
679
680
			if ( 'simple' === $style ) {
681
				$item_class .= ' lsx-wc-my-account-menu-item-simple';
682
			}
683
684
			return $item_class;
685
		}
686
		/**
687
		 * Display the woocommerce archive swticher.
688
		 */
689
		public function show_layout_switcher() {
690
			$body_classes = get_body_class();
691
			if ( in_array( 'post-type-archive-product', $body_classes ) ) {
692
				global $WC_List_Grid;
693
				if ( null !== $WC_List_Grid ) {
694
					remove_action( 'woocommerce_before_shop_loop', array( $WC_List_Grid, 'gridlist_toggle_button' ), 30 );
695
					add_action( 'lsx_banner_inner_bottom', array( $this, 'shop_gridlist_toggle_button' ), 90 );
696
					add_action( 'lsx_global_header_inner_bottom', array( $this, 'shop_gridlist_toggle_button' ), 90 );
697
					wp_deregister_style( 'grid-list-button' );
698
				}
699
			}
700
		}
701
		/**
702
		 * Display the woocommerce archive swticher.
703
		 */
704
		public function shop_gridlist_toggle_button() {
705
			global $WC_List_Grid;
706
			?>
707
			<div class="lsx-layout-switcher">
708
				<span class="lsx-layout-switcher-label"><?php esc_html_e( 'Select view:', 'lsx-blog-customizer' ); ?></span>
709
				<?php $WC_List_Grid->gridlist_toggle_button(); ?>
710
			</div>
711
			<?php
712
		}
713
		public function gridlist_toggle_button_output( $output, $grid_view, $list_view ) {
714
			$output = sprintf( '<div class="gridlist-toggle lsx-layout-switcher-options"><a href="#" class="lsx-layout-switcher-option" id="grid" title="%1$s"><span class="fa fa fa-th"></span></a><a href="#" class="lsx-layout-switcher-option" id="list" title="%2$s"><span class="fa fa-bars"></span></a></div>', $grid_view, $list_view );
715
			return $output;
716
		}
717
	}
718
719
	new LSX_Customizer_WooCommerce();
720
721
}
722