PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 2.23.0
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v2.23.0
4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.11.1 1.11.2 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.9.0 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 2.0.0 2.0.1 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.13.0 2.14.0 2.14.1 2.15.0 2.15.1 2.16.0 2.16.1 2.16.2 2.16.3 2.17.0 2.17.1 2.17.2 2.18.0 2.19.0 2.19.2 2.19.3 2.19.4 2.2.0 2.2.1 2.20.0 2.20.1 2.20.2 2.20.3 2.20.4 2.20.5 2.20.6 2.21.0 2.22.0 2.22.1 2.23.0 2.24.0 2.25.0 2.25.1 2.25.2 2.26.0 2.27.0 2.27.1 2.28.0 2.29.0 2.29.1 2.29.2 2.29.3 2.29.4 2.3.0 2.3.1 2.30.0 2.31.0 2.31.1 2.31.2 2.31.3 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.40.0 2.40.1 2.5.0 2.5.1 2.5.2 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.8.2 2.8.3 2.8.4 2.9.0 3.0.0 3.0.0-RC1 3.0.0-RC2 3.0.0-beta1 3.0.0-beta2 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.10.0 3.10.1 3.11.0 3.12.0 3.13.0 3.13.1 3.13.2 3.13.3 3.13.4 3.14.0 3.15.0 3.15.1 3.15.2 3.15.3 3.15.4 3.15.5 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.16.6 3.16.7 3.16.8 3.17.0 3.17.1 3.17.2 3.17.3 3.17.4 3.17.5 3.17.6 3.18.0 3.19.0 3.19.1 3.19.2 3.2.0 3.2.1 3.2.2 3.20.0 3.20.1 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 trunk 4.1.0 0.2.19.1 4.1.1 1.0.0 4.2.0 1.0.1 1.0.2
surecart / app / src / BlockLibrary / FormModeSwitcherService.php
surecart / app / src / BlockLibrary Last commit date
BlockPatternsService.php 3 years ago BlockService.php 3 years ago BlockServiceProvider.php 2 years ago BlockValidationService.php 2 years ago FormModeSwitcherService.php 2 years ago
FormModeSwitcherService.php
230 lines
1 <?php
2
3 declare(strict_types=1);
4
5 namespace SureCart\BlockLibrary;
6
7 /**
8 * Provide general block-related functionality.
9 */
10 class FormModeSwitcherService {
11 /**
12 * Whether the ui has been rendered.
13 *
14 * @var bool
15 */
16 protected $rendered = false;
17
18 /**
19 * The mode.
20 *
21 * @var string
22 */
23 protected $mode = 'live';
24
25 /**
26 * Bootstrap the service.
27 *
28 * @return void
29 */
30 public function bootstrap(): void {
31 // add the admin bar menu.
32 add_action( 'admin_bar_menu', [ $this, 'addAdminBarMenu' ], 99 );
33 // add the script to confirm changing the cart.
34 add_action( 'wp_after_admin_bar_render', [ $this, 'confirmScript' ] );
35 }
36
37 /**
38 * Get the menu title.
39 *
40 * @return string
41 */
42 public function getMenuTitle() {
43 ob_start(); ?>
44
45 <span style="color: #fff;">
46 <?php echo esc_html__( 'Checkout Form', 'surecart' ); ?>
47 </span>
48 <span style="color: <?php echo 'live' === $this->mode ? 'var(--sc-color-success-900, #21382a)' : 'var(--sc-color-warning-900, #4d3d11)'; ?>; display: inline-block; background-color: <?php echo 'live' === $this->mode ? 'var(--sc-color-success-400, #49de80)' : 'var(--sc-color-warning-400, #fbbf24)'; ?>; font-size: 10px; line-height: 1; border-radius: 999px; padding: 3px 6px; margin: 0 5px; text-transform: uppercase; font-weight: bold; vertical-align: text-bottom;">
49 <?php echo 'live' === $this->mode ? esc_html__( 'Live Mode', 'surecart' ) : esc_html__( 'Test Mode', 'surecart' ); ?>
50 </span>
51
52 <?php
53 return ob_get_clean();
54 }
55
56 /**
57 * Get the menu item.
58 *
59 * @param string $mode The mode.
60 *
61 * @return string
62 */
63 public function getMenuItem( $mode = 'live' ) {
64 ob_start();
65 ?>
66 <span style="display: flex; justify-content: space-between;">
67 <span>
68 <span style="color: <?php echo 'live' === $mode ? 'var(--sc-color-success-400, #21382a)' : 'var(--sc-color-warning-400, #4d3d11)'; ?>; font-weight: bold; font-size: 16px; line-height: 1;"> </span>
69 <span style="color: <?php echo 'live' === $mode ? 'var(--sc-color-success-100, #49de80)' : 'var(--sc-color-warning-100, #fbbf24)'; ?>;">
70 <?php echo 'live' === $mode ? esc_html__( 'Live Mode', 'surecart' ) : esc_html__( 'Test Mode', 'surecart' ); ?>
71 </span>
72 </span>
73 <span>
74 <?php echo $this->mode === $mode ? '' : ''; ?>
75 </span>
76 </span>
77 <?php
78 return ob_get_clean();
79 }
80
81 /**
82 * Add admin bar menu.
83 *
84 * @param \WP_Admin_Bar $wp_admin_bar The admin bar.
85 *
86 * @return void
87 */
88 public function addAdminBarMenu( $wp_admin_bar ): void {
89 // We don't want to show this in admin area.
90 if ( is_admin() ) {
91 return;
92 }
93
94 // The form post.
95 $form_post = \SureCart::post()->getFormPostFromBlock( get_post() );
96 if ( empty( $form_post->post_content ) ) {
97 return;
98 }
99
100 // Get the checkout form block.
101 $checkout_form_block = wp_get_first_block( parse_blocks( $form_post->post_content ), 'surecart/form' );
102 if ( empty( $checkout_form_block ) ) {
103 return;
104 }
105
106 // get the mode from the block.
107 $this->mode = $checkout_form_block['attrs']['mode'] ?? 'live';
108
109 // build the url to change the mode.
110 $url = add_query_arg(
111 [
112 'sc_checkout_change_mode' => $form_post->ID,
113 'sc_checkout_post' => get_the_ID(),
114 'nonce' => wp_create_nonce( 'update_checkout_mode' ),
115 ],
116 get_home_url( null, 'surecart/change-checkout-mode' )
117 );
118
119 // add the top level menu item.
120 $wp_admin_bar->add_menu(
121 [
122 'id' => 'sc_change_checkout_mode',
123 'title' => $this->getMenuTitle(),
124 ]
125 );
126
127 // add the live mode menu item.
128 $wp_admin_bar->add_menu(
129 [
130 'parent' => 'sc_change_checkout_mode',
131 'id' => 'sc_live_mode',
132 'title' => $this->getMenuItem( 'live' ),
133 'href' => 'live' === $this->mode ? '#' : $url,
134 ]
135 );
136
137 // add the test mode menu item.
138 $wp_admin_bar->add_menu(
139 [
140 'parent' => 'sc_change_checkout_mode',
141 'id' => 'sc_test_mode',
142 'title' => $this->getMenuItem( 'test' ),
143 'href' => 'test' === $this->mode ? '#' : $url,
144 ],
145 );
146
147 // Mark as rendered.
148 $this->rendered = true;
149 }
150
151 /**
152 * Confirm script.
153 *
154 * @return void
155 */
156 public function confirmScript() {
157 if ( ! $this->rendered ) {
158 return;
159 }
160
161 $mode = 'test' === $this->mode ? esc_html__( 'live mode', 'surecart' ) : esc_html__( 'test mode', 'surecart' );
162
163 // translators: %s: live mode or test mode.
164 $message = sprintf( esc_html__( "Are you sure you want to change this form to %1\$s? \n\nThis will change the form to %2\$s for EVERYONE, and %3\$s cart contents will be used - your cart contents may not transfer.", 'surecart' ), $mode, $mode, $mode );
165 ?>
166
167 <script>
168 const items = document.querySelectorAll('#wp-admin-bar-sc_change_checkout_mode a:not([href="#"])');
169 (items || []).forEach(item => {
170 item.addEventListener('click', function(e) {
171 if (!confirm('<?php echo esc_js( $message ); ?>')) {
172 e.preventDefault();
173 }
174 })
175 });
176 </script>
177
178 <?php
179 }
180
181 /**
182 * Get checkout form post.
183 *
184 * @return object|null
185 */
186 public function getCheckoutFormPost() {
187 $post = get_post();
188
189 if ( ! $post ) {
190 return null;
191 }
192
193 // Check post has block surecart/checkout-form and then check the attributes.
194 $blocks = parse_blocks( $post->post_content );
195
196 if ( ! has_block( 'surecart/checkout-form', $post ) ) {
197 return null;
198 }
199
200 $checkout_form_block = wp_get_first_block( $blocks, 'surecart/checkout-form' );
201
202 // Get the form post id.
203 $checkout_form_post_id = $checkout_form_block['attrs']['id'] ?? null;
204
205 if ( ! $checkout_form_post_id ) {
206 return null;
207 }
208
209 return get_post( $checkout_form_post_id ) ?? null;
210 }
211
212 /**
213 * Get block from post.
214 *
215 * @param \WP_Post $checkout_form_post The checkout form post.
216 *
217 * @return array|null
218 */
219 public function getBlockFromPost( $checkout_form_post ) {
220 if ( ! $checkout_form_post ) {
221 return null;
222 }
223
224 $checkout_form_inner_block = parse_blocks( $checkout_form_post->post_content );
225
226 // Find the surecart/form block.
227 return wp_get_first_block( $checkout_form_inner_block, 'surecart/form' );
228 }
229 }
230