PluginProbe
King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder / 51.1.78
King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder v51.1.78
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_Steps / Woo_Checkout_Steps.php

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

263 lines 8.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Woo Checkout Steps widget (multi-step).
4 *
5 * @package King_Addons
6 */
7
8 namespace King_Addons;
9
10 use Elementor\Controls_Manager;
11 use Elementor\Widget_Base;
12 use King_Addons\Woo_Builder\Context as Woo_Context;
13
14 if (!defined('ABSPATH')) {
15 exit;
16 }
17
18 /**
19 * Placeholder multi-step checkout (Free shows notice, Pro overrides).
20 */
21 class Woo_Checkout_Steps extends Widget_Base
22 {
23 /**
24 * Register Pro-only controls (placeholder).
25 *
26 * Pro overrides this method to add premium controls without using parent::register_controls().
27 *
28 * @return void
29 */
30 public function register_pro_controls(): void
31 {
32 // Intentionally empty in Free.
33 }
34
35 /**
36 * Widget slug.
37 *
38 * @return string
39 */
40 public function get_name(): string
41 {
42 return 'woo_checkout_steps';
43 }
44
45 /**
46 * Widget title.
47 *
48 * @return string
49 */
50 public function get_title(): string
51 {
52 return esc_html__('Checkout Steps (Multi-step)', 'king-addons');
53 }
54
55 /**
56 * Widget icon.
57 *
58 * @return string
59 */
60 public function get_icon(): string
61 {
62 return 'eicon-editor-list-ol';
63 }
64
65 /**
66 * Widget categories.
67 *
68 * @return array<int,string>
69 */
70 public function get_categories(): array
71 {
72 return ['king-addons-woo-builder'];
73 }
74
75 /**
76 * Styles.
77 *
78 * @return array<int, string>
79 */
80 public function get_style_depends(): array
81 {
82 return [KING_ADDONS_ASSETS_UNIQUE_KEY . '-woo-checkout-steps-style'];
83 }
84
85 /**
86 * Scripts.
87 *
88 * @return array<int, string>
89 */
90 public function get_script_depends(): array
91 {
92 return [KING_ADDONS_ASSETS_UNIQUE_KEY . '-woo-checkout-steps-script'];
93 }
94
95 /**
96 * Register controls.
97 *
98 * @return void
99 */
100 public function get_custom_help_url()
101 {
102 return 'mailto:bug@kingaddons.com?subject=Bug Report - King Addons&body=Please describe the issue';
103 }
104
105 protected function register_controls(): void
106 {
107 $this->start_controls_section(
108 'section_content',
109 [
110 'label' => esc_html__('Content', 'king-addons'),
111 'tab' => Controls_Manager::TAB_CONTENT,
112 ]
113 );
114
115 $this->add_control(
116 'steps',
117 [
118 'label' => esc_html__('Steps', 'king-addons'),
119 'type' => Controls_Manager::REPEATER,
120 'fields' => [
121 [
122 'name' => 'label',
123 'label' => esc_html__('Label', 'king-addons'),
124 'type' => Controls_Manager::TEXT,
125 'default' => esc_html__('Step', 'king-addons'),
126 ],
127 [
128 'name' => 'target',
129 'label' => sprintf(__('Target selector (Pro) %s', 'king-addons'), '<i class="eicon-pro-icon"></i>'),
130 'type' => Controls_Manager::TEXT,
131 'placeholder' => '#customer_details',
132 ],
133 ],
134 'default' => [
135 ['label' => esc_html__('Billing', 'king-addons')],
136 ['label' => esc_html__('Shipping', 'king-addons')],
137 ['label' => esc_html__('Payment', 'king-addons')],
138 ['label' => esc_html__('Review', 'king-addons')],
139 ],
140 ]
141 );
142
143 $this->add_control(
144 'scroll_to_section',
145 [
146 'label' => sprintf(__('Scroll to section (Pro) %s', 'king-addons'), '<i class="eicon-pro-icon"></i>'),
147 'type' => Controls_Manager::SWITCHER,
148 'return_value' => 'yes',
149 ]
150 );
151
152 $this->add_control(
153 'show_nav',
154 [
155 'label' => sprintf(__('Show Next/Previous (Pro) %s', 'king-addons'), '<i class="eicon-pro-icon"></i>'),
156 'type' => Controls_Manager::SWITCHER,
157 'return_value' => 'yes',
158 ]
159 );
160
161 $this->add_control(
162 'auto_scroll',
163 [
164 'label' => esc_html__('Scroll on step change (Pro)', 'king-addons'),
165 'type' => Controls_Manager::SWITCHER,
166 'return_value' => 'yes',
167 ]
168 );
169
170 $this->add_control(
171 'prev_text',
172 [
173 'label' => esc_html__('Previous text', 'king-addons'),
174 'type' => Controls_Manager::TEXT,
175 'default' => esc_html__('Previous', 'king-addons'),
176 'condition' => [
177 'show_nav' => 'yes',
178 ],
179 ]
180 );
181
182 $this->add_control(
183 'next_text',
184 [
185 'label' => esc_html__('Next text', 'king-addons'),
186 'type' => Controls_Manager::TEXT,
187 'default' => esc_html__('Next', 'king-addons'),
188 'condition' => [
189 'show_nav' => 'yes',
190 ],
191 ]
192 );
193
194 $this->end_controls_section();
195
196 // Allow Pro to add additional controls without using parent::register_controls().
197 $this->register_pro_controls();
198 }
199
200 /**
201 * Render widget output (free shows upgrade notice).
202 *
203 * @return void
204 */
205 protected function render(): void
206 {
207 if (!Woo_Context::maybe_render_context_notice('checkout')) {
208 return;
209 }
210
211 $in_builder = class_exists('King_Addons\\Woo_Builder\\Context') && Woo_Context::is_editing_template_type('checkout');
212 if (!function_exists('is_checkout') || (!is_checkout() && !$in_builder) || (function_exists('is_order_received_page') && is_order_received_page())) {
213 return;
214 }
215
216 if (!king_addons_can_use_pro()) {
217 if (Woo_Context::is_editor()) {
218 echo '<div class="king-addons-woo-builder-notice">';
219 echo esc_html__('Multi-step checkout is available in Pro.', 'king-addons');
220 echo '</div>';
221 }
222 return;
223 }
224
225 $settings = $this->get_settings_for_display();
226 $steps = $settings['steps'] ?? [];
227 if (empty($steps)) {
228 return;
229 }
230
231 $scroll = (!empty($settings['scroll_to_section']) && 'yes' === $settings['scroll_to_section']) ? 'yes' : 'no';
232 $auto_scroll = (!empty($settings['auto_scroll']) && 'yes' === $settings['auto_scroll']) ? 'yes' : 'no';
233 $show_nav = (!empty($settings['show_nav']) && 'yes' === $settings['show_nav']);
234 $prev_text = $settings['prev_text'] ?? esc_html__('Previous', 'king-addons');
235 $next_text = $settings['next_text'] ?? esc_html__('Next', 'king-addons');
236
237 echo '<div class="ka-woo-checkout-steps-wrapper" data-enable-nav="' . ($show_nav ? 'true' : 'false') . '" data-auto-scroll="' . esc_attr($auto_scroll) . '">';
238 echo '<ol class="ka-woo-checkout-steps ka-woo-checkout-steps--pro" role="list" data-scroll-top="' . esc_attr($scroll) . '" data-prev-text="' . esc_attr($prev_text) . '" data-next-text="' . esc_attr($next_text) . '">';
239 foreach ($steps as $index => $step) {
240 $label = $step['label'] ?? '';
241 $target = $step['target'] ?? '';
242 echo '<li class="ka-woo-checkout-step" data-step="' . esc_attr((string) ($index + 1)) . '" data-target="' . esc_attr($target) . '">';
243 echo '<span class="ka-woo-checkout-step__number">' . esc_html((string) ($index + 1)) . '</span>';
244 echo '<span class="ka-woo-checkout-step__label">' . esc_html($label) . '</span>';
245 echo '</li>';
246 }
247 echo '</ol>';
248 if ($show_nav) {
249 echo '<div class="ka-woo-checkout-steps__nav">';
250 echo '<button type="button" class="button ka-woo-checkout-steps__prev" data-nav="prev">' . esc_html($prev_text) . '</button>';
251 echo '<button type="button" class="button button-primary ka-woo-checkout-steps__next" data-nav="next">' . esc_html($next_text) . '</button>';
252 echo '</div>';
253 }
254 echo '</div>';
255 }
256 }
257
258
259
260
261
262
263