PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / trunk
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments vtrunk
4.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 BlockCurrencyConversionSupportService.php 1 year ago BlockPatternsService.php 1 year ago BlockService.php 4 months ago BlockServiceProvider.php 4 months ago BlockStylesService.php 3 months ago BlockValidationService.php 2 years ago CartMenuIconMigrationService.php 1 year ago CartMigrationService.php 1 year ago FormModeSwitcherService.php 5 hours 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 ProductQuickViewService.php 9 months ago ProductReviewFormService.php 4 months ago ProductSelectedPriceMigrationService.php 1 year ago ProductVariantsMigrationService.php 1 year ago URLParamService.php 3 months ago
FormModeSwitcherService.php
243 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 // IIFE so top-level declarations don't collide with other classic scripts.
179 (function() {
180 const items = document.querySelectorAll('#wp-admin-bar-sc_change_checkout_mode a:not([href="#"])');
181 (items || []).forEach(item => {
182 item.addEventListener('click', function(e) {
183 if (!confirm('<?php echo esc_js( $message ); ?>')) {
184 e.preventDefault();
185 }
186 })
187 });
188 })();
189 </script>
190
191 <?php
192 }
193
194 /**
195 * Get checkout form post.
196 *
197 * @return object|null
198 */
199 public function getCheckoutFormPost() {
200 $post = get_post();
201
202 if ( ! $post ) {
203 return null;
204 }
205
206 // Check post has block surecart/checkout-form and then check the attributes.
207 $blocks = parse_blocks( $post->post_content );
208
209 if ( ! has_block( 'surecart/checkout-form', $post ) ) {
210 return null;
211 }
212
213 $checkout_form_block = wp_get_first_block( $blocks, 'surecart/checkout-form' );
214
215 // Get the form post id.
216 $checkout_form_post_id = $checkout_form_block['attrs']['id'] ?? null;
217
218 if ( ! $checkout_form_post_id ) {
219 return null;
220 }
221
222 return get_post( $checkout_form_post_id ) ?? null;
223 }
224
225 /**
226 * Get block from post.
227 *
228 * @param \WP_Post $checkout_form_post The checkout form post.
229 *
230 * @return array|null
231 */
232 public function getBlockFromPost( $checkout_form_post ) {
233 if ( ! $checkout_form_post ) {
234 return null;
235 }
236
237 $checkout_form_inner_block = parse_blocks( $checkout_form_post->post_content );
238
239 // Find the surecart/form block.
240 return wp_get_first_block( $checkout_form_inner_block, 'surecart/form' );
241 }
242 }
243