PluginProbe
King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder / 51.1.49
King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder v51.1.49
51.1.83 51.1.82 51.1.81 51.1.79 51.1.78 51.1.77 51.1.76 51.1.74 51.1.75 51.1.65 51.1.64 51.1.63 trunk 51.1.14 51.1.2 51.1.35 51.1.36 51.1.37 51.1.38 51.1.39 51.1.44 51.1.45 51.1.46 51.1.47 51.1.49 All 37 releases
king-addons / includes / widgets / Woo_Checkout_Progress / Woo_Checkout_Progress.php

Woo_Checkout_Progress.php in King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder 51.1.49, at includes/widgets/Woo_Checkout_Progress/Woo_Checkout_Progress.php

240 lines 6.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Woo Checkout Progress widget.
4 *
5 * @package King_Addons
6 */
7
8 namespace King_Addons;
9
10 use Elementor\Controls_Manager;
11 use Elementor\Group_Control_Typography;
12
13 if (!defined('ABSPATH')) {
14 exit;
15 }
16
17 /**
18 * Displays checkout progress steps.
19 */
20 class Woo_Checkout_Progress extends Abstract_Checkout_Widget
21 {
22 /**
23 * Widget slug.
24 *
25 * @return string
26 */
27 public function get_name(): string
28 {
29 return 'woo_checkout_progress';
30 }
31
32 /**
33 * Widget title.
34 *
35 * @return string
36 */
37 public function get_title(): string
38 {
39 return esc_html__('Checkout Progress', 'king-addons');
40 }
41
42 /**
43 * Widget icon.
44 *
45 * @return string
46 */
47 public function get_icon(): string
48 {
49 return 'eicon-progress-tracker';
50 }
51
52 /**
53 * Categories.
54 *
55 * @return array<int, string>
56 */
57 public function get_categories(): array
58 {
59 return ['king-addons-woo-builder'];
60 }
61
62 /**
63 * Style dependencies.
64 *
65 * @return array<int, string>
66 */
67 public function get_style_depends(): array
68 {
69 return [KING_ADDONS_ASSETS_UNIQUE_KEY . '-woo-checkout-progress-style'];
70 }
71
72 /**
73 * Register controls.
74 *
75 * @return void
76 */
77 protected function register_controls(): void
78 {
79 $this->start_controls_section(
80 'section_content',
81 [
82 'label' => esc_html__('Content', 'king-addons'),
83 'tab' => Controls_Manager::TAB_CONTENT,
84 ]
85 );
86
87 $this->add_control(
88 'layout',
89 [
90 'label' => sprintf(__('Layout (Pro) %s', 'king-addons'), '<i class="eicon-pro-icon"></i>'),
91 'type' => Controls_Manager::SELECT,
92 'options' => [
93 'bar' => esc_html__('Bar', 'king-addons'),
94 'steps' => esc_html__('Steps (Pro)', 'king-addons'),
95 ],
96 'default' => 'bar',
97 ]
98 );
99
100 $this->end_controls_section();
101
102 $this->start_controls_section(
103 'section_style',
104 [
105 'label' => esc_html__('Style', 'king-addons'),
106 'tab' => Controls_Manager::TAB_STYLE,
107 ]
108 );
109
110 $this->add_group_control(
111 Group_Control_Typography::get_type(),
112 [
113 'name' => 'text_typography',
114 'selector' => '{{WRAPPER}} .ka-woo-checkout-progress',
115 ]
116 );
117
118 $this->add_control(
119 'color_base',
120 [
121 'label' => esc_html__('Base Color', 'king-addons'),
122 'type' => Controls_Manager::COLOR,
123 'selectors' => [
124 '{{WRAPPER}} .ka-woo-checkout-progress' => '--ka-checkout-progress-base: {{VALUE}};',
125 ],
126 ]
127 );
128
129 $this->add_control(
130 'color_active',
131 [
132 'label' => esc_html__('Active Color', 'king-addons'),
133 'type' => Controls_Manager::COLOR,
134 'selectors' => [
135 '{{WRAPPER}} .ka-woo-checkout-progress' => '--ka-checkout-progress-active: {{VALUE}};',
136 ],
137 ]
138 );
139
140 $this->add_control(
141 'color_complete',
142 [
143 'label' => sprintf(__('Completed Color (Pro) %s', 'king-addons'), '<i class="eicon-pro-icon"></i>'),
144 'type' => Controls_Manager::COLOR,
145 'selectors' => [
146 '{{WRAPPER}} .ka-woo-checkout-progress' => '--ka-checkout-progress-complete: {{VALUE}};',
147 ],
148 ]
149 );
150
151 $this->end_controls_section();
152 }
153
154 /**
155 * Render widget output.
156 *
157 * @return void
158 */
159 protected function render(): void
160 {
161 if (!function_exists('is_checkout') || (!is_checkout() && !is_cart()) ) {
162 $this->render_missing_checkout_notice();
163 return;
164 }
165
166 $settings = $this->get_settings_for_display();
167 $can_pro = king_addons_can_use_pro();
168
169 $layout = $settings['layout'] ?? 'bar';
170 if ('steps' === $layout && !$can_pro) {
171 $layout = 'bar';
172 }
173
174 $current = 'cart';
175 if (is_checkout() && !is_order_received_page()) {
176 $current = 'payment';
177 }
178 if (is_order_received_page()) {
179 $current = 'complete';
180 }
181
182 $steps = [
183 ['key' => 'cart', 'label' => esc_html__('Cart', 'king-addons')],
184 ['key' => 'details', 'label' => esc_html__('Details', 'king-addons')],
185 ['key' => 'payment', 'label' => esc_html__('Payment', 'king-addons')],
186 ['key' => 'complete', 'label' => esc_html__('Complete', 'king-addons')],
187 ];
188
189 echo '<div class="ka-woo-checkout-progress ka-woo-checkout-progress--' . esc_attr($layout) . '">';
190
191 if ('bar' === $layout) {
192 $percent = 0;
193 switch ($current) {
194 case 'cart':
195 $percent = 25;
196 break;
197 case 'details':
198 $percent = 50;
199 break;
200 case 'payment':
201 $percent = 75;
202 break;
203 case 'complete':
204 $percent = 100;
205 break;
206 }
207 echo '<div class="ka-woo-checkout-progress__bar"><span style="width:' . (int) $percent . '%"></span></div>';
208 echo '<div class="ka-woo-checkout-progress__labels">';
209 foreach ($steps as $step) {
210 echo '<span class="ka-woo-checkout-progress__label">' . esc_html($step['label']) . '</span>';
211 }
212 echo '</div>';
213 } else {
214 echo '<div class="ka-woo-checkout-progress__steps">';
215 foreach ($steps as $step) {
216 $status = 'upcoming';
217 if ($step['key'] === $current) {
218 $status = 'active';
219 } elseif (array_search($step['key'], array_column($steps, 'key'), true) <= array_search($current, array_column($steps, 'key'), true)) {
220 $status = 'complete';
221 }
222 echo '<div class="ka-woo-checkout-progress__step is-' . esc_attr($status) . '">';
223 echo '<span class="ka-woo-checkout-progress__dot"></span>';
224 echo '<span class="ka-woo-checkout-progress__text">' . esc_html($step['label']) . '</span>';
225 echo '</div>';
226 }
227 echo '</div>';
228 }
229
230 echo '</div>';
231 }
232 }
233
234
235
236
237
238
239
240