PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 3.4.2
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v3.4.2
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
BlockAnchorSupportService.php 1 year ago BlockPatternsService.php 1 year ago BlockService.php 1 year ago BlockServiceProvider.php 1 year ago BlockStylesService.php 1 year ago BlockValidationService.php 2 years ago CartMenuIconMigrationService.php 1 year ago CartMigrationService.php 1 year ago FormModeSwitcherService.php 1 year ago ProductCollectionBadgesMigrationService.php 1 year ago ProductListFilterTagsMigrationService.php 1 year ago ProductListMigrationService.php 1 year ago ProductListService.php 1 year ago ProductPageBlocksMigrationService.php 1 year ago ProductPriceChoicesMigrationService.php 1 year ago ProductSelectedPriceMigrationService.php 1 year ago ProductVariantsMigrationService.php 1 year ago URLParamService.php 1 year ago
FormModeSwitcherService.php
240 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 // Don't render if its for a checkout persisted in the url.
95 if ( ! empty( $_GET['checkout_id'] ) ) {
96 return;
97 }
98
99 // The post must have a checkout form block.
100 if( ! has_block( 'surecart/checkout-form', get_post() ) ) {
101 return;
102 }
103
104 // The form post.
105 $form_post = \SureCart::post()->getFormPost( get_post() );
106 if ( empty( $form_post->post_content ) ) {
107 return;
108 }
109
110 // Get the checkout form block.
111 $checkout_form_block = wp_get_first_block( parse_blocks( $form_post->post_content ), 'surecart/form' );
112 if ( empty( $checkout_form_block ) ) {
113 return;
114 }
115
116 // get the mode from the block.
117 $this->mode = $checkout_form_block['attrs']['mode'] ?? 'live';
118
119 // build the url to change the mode.
120 $url = add_query_arg(
121 [
122 'sc_checkout_change_mode' => $form_post->ID,
123 'sc_checkout_post' => get_the_ID(),
124 'nonce' => wp_create_nonce( 'update_checkout_mode' ),
125 ],
126 get_home_url( null, 'surecart/change-checkout-mode' )
127 );
128
129 // add the top level menu item.
130 $wp_admin_bar->add_menu(
131 [
132 'id' => 'sc_change_checkout_mode',
133 'title' => $this->getMenuTitle(),
134 ]
135 );
136
137 // add the live mode menu item.
138 $wp_admin_bar->add_menu(
139 [
140 'parent' => 'sc_change_checkout_mode',
141 'id' => 'sc_live_mode',
142 'title' => $this->getMenuItem( 'live' ),
143 'href' => 'live' === $this->mode ? '#' : $url,
144 ]
145 );
146
147 // add the test mode menu item.
148 $wp_admin_bar->add_menu(
149 [
150 'parent' => 'sc_change_checkout_mode',
151 'id' => 'sc_test_mode',
152 'title' => $this->getMenuItem( 'test' ),
153 'href' => 'test' === $this->mode ? '#' : $url,
154 ],
155 );
156
157 // Mark as rendered.
158 $this->rendered = true;
159 }
160
161 /**
162 * Confirm script.
163 *
164 * @return void
165 */
166 public function confirmScript() {
167 if ( ! $this->rendered ) {
168 return;
169 }
170
171 $mode = 'test' === $this->mode ? esc_html__( 'live mode', 'surecart' ) : esc_html__( 'test mode', 'surecart' );
172
173 // translators: %s: live mode or test mode.
174 $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 );
175 ?>
176
177 <script>
178 const items = document.querySelectorAll('#wp-admin-bar-sc_change_checkout_mode a:not([href="#"])');
179 (items || []).forEach(item => {
180 item.addEventListener('click', function(e) {
181 if (!confirm('<?php echo esc_js( $message ); ?>')) {
182 e.preventDefault();
183 }
184 })
185 });
186 </script>
187
188 <?php
189 }
190
191 /**
192 * Get checkout form post.
193 *
194 * @return object|null
195 */
196 public function getCheckoutFormPost() {
197 $post = get_post();
198
199 if ( ! $post ) {
200 return null;
201 }
202
203 // Check post has block surecart/checkout-form and then check the attributes.
204 $blocks = parse_blocks( $post->post_content );
205
206 if ( ! has_block( 'surecart/checkout-form', $post ) ) {
207 return null;
208 }
209
210 $checkout_form_block = wp_get_first_block( $blocks, 'surecart/checkout-form' );
211
212 // Get the form post id.
213 $checkout_form_post_id = $checkout_form_block['attrs']['id'] ?? null;
214
215 if ( ! $checkout_form_post_id ) {
216 return null;
217 }
218
219 return get_post( $checkout_form_post_id ) ?? null;
220 }
221
222 /**
223 * Get block from post.
224 *
225 * @param \WP_Post $checkout_form_post The checkout form post.
226 *
227 * @return array|null
228 */
229 public function getBlockFromPost( $checkout_form_post ) {
230 if ( ! $checkout_form_post ) {
231 return null;
232 }
233
234 $checkout_form_inner_block = parse_blocks( $checkout_form_post->post_content );
235
236 // Find the surecart/form block.
237 return wp_get_first_block( $checkout_form_inner_block, 'surecart/form' );
238 }
239 }
240