PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 3.0.3
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v3.0.3
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 / Cart / CartService.php
surecart / app / src / Cart Last commit date
CartService.php 1 year ago CartServiceProvider.php 3 years ago
CartService.php
272 lines
1 <?php
2
3 namespace SureCart\Cart;
4
5 use SureCart\Models\Form;
6
7 /**
8 * The cart service.
9 */
10 class CartService {
11 /**
12 * Bootstrap the cart.
13 *
14 * @return void
15 */
16 public function bootstrap() {
17 add_filter( 'wp_nav_menu_items', array( $this, 'addCartMenu' ), 10, 2 );
18
19 // only load scripts if cart is enabled.
20 if ( $this->isCartEnabled() ) {
21 add_action(
22 'wp_enqueue_scripts',
23 function () {
24 // Enqueue the cart drawer script modules.
25 wp_enqueue_script_module( '@surecart/cart' );
26 wp_enqueue_script_module( '@surecart/checkout' );
27 }
28 );
29
30 add_action( 'wp_footer', [ $this, 'renderCartComponent' ] );
31 }
32 }
33
34 /**
35 * Get the icon name saved in the settings
36 *
37 * @return string
38 */
39 public function getIconNameFromSettings() {
40 return get_option( 'surecart_cart_icon', 'shopping-bag' );
41 }
42
43 /**
44 * Get the icon.
45 *
46 * @param 'menu'|'floating' $type Menu type.
47 *
48 * @return string
49 */
50 public function getIcon( $type ) {
51 $icon = $this->getIconNameFromSettings();
52
53 /**
54 * Allow filtering of the cart menu icon.
55 *
56 * @param string $icon The icon.
57 * @param string $mode The icon position.
58 */
59 return apply_filters( 'sc_cart_menu_icon', $icon, $type );
60 }
61
62
63 /**
64 * Get selected ids.
65 *
66 * @return array|false
67 */
68 public function getSelectedIds() {
69 return get_option( 'surecart_cart_menu_selected_ids', false );
70 }
71
72 /**
73 * Get icon type.
74 *
75 * @return array|false
76 */
77 public function getIconType() {
78 return get_option( 'surecart_cart_icon_type', 'floating_icon' );
79 }
80
81 /**
82 * Check if cart menu is always shown.
83 *
84 * @return boolean
85 */
86 public function isAlwaysShown() {
87 return (bool) get_option( 'surecart_cart_menu_always_shown', true );
88 }
89
90 /**
91 * Is the cart enabled?
92 */
93 public function isCartEnabled() {
94 return ! (bool) get_option( 'sc_slide_out_cart_disabled', false );
95 }
96
97 /**
98 * Get cart menu alignment.
99 *
100 * @return 'left'|'right
101 */
102 public function getAlignment() {
103 return (string) get_option( 'surecart_cart_menu_alignment', 'right' );
104 }
105
106 /**
107 * Get mode.
108 *
109 * @return string
110 */
111 public function getMode() {
112 $form = $this->getForm();
113 if ( empty( $form->ID ) ) {
114 return '';
115 }
116
117 return Form::getMode( $form->ID );
118 }
119
120 /**
121 * Add cart to menu.
122 *
123 * @param array $items Menu items.
124 * @param object $args Menu args.
125 *
126 * @return array
127 */
128 public function addCartMenu( $items, $args ) {
129 $menu = wp_get_nav_menu_object( $args->menu );
130 $id = $menu ? $menu->term_id : false;
131
132 // if there is no id, or the menu icon is not enabled, or the cart is disabled, return.
133 if ( ! $id || ! $this->isMenuIconEnabled( $id ) || ! $this->isCartEnabled() ) {
134 return $items;
135 }
136
137 $cart_menu_alignment = $this->getAlignment();
138
139 $menu = $this->menuItemTemplate();
140
141 // left or right.
142 $items = 'right' === $cart_menu_alignment ? $items . $menu : $menu . $items;
143
144 return $items;
145 }
146
147 public function menuItemTemplate() {
148 $cart_menu_icon_attributes = [
149 'cart_menu_always_shown' => $this->isAlwaysShown(),
150 'cart_icon' => $this->getIcon( 'menu' ) ?? 'shopping-bag',
151 ];
152 $cart_menu_icon_block_content = '<!-- wp:surecart/cart-menu-icon-button ' . wp_json_encode( $cart_menu_icon_attributes ) . ' /-->';
153
154 ob_start(); ?>
155 <li class='menu-item'>
156 <?php echo do_blocks( $cart_menu_icon_block_content ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
157 </li>
158 <?php
159 return ob_get_clean();
160 }
161
162 /**
163 * Get the cart template.
164 *
165 * @return string
166 */
167 public function cartTemplate() {
168 $form = $this->getForm();
169 if ( empty( $form->ID ) ) {
170 return '';
171 }
172
173 // get cart block.
174 $template = get_block_template( 'surecart/surecart//cart', 'wp_template_part' );
175 if ( ! $template || empty( $template->content ) ) {
176 return;
177 }
178
179 $cart_icon_block_content = '<!-- wp:surecart/cart-icon /-->';
180
181 ob_start();
182 ?>
183
184 <!-- Render the cart. -->
185 <?php echo do_blocks( $template->content ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
186
187 <!-- Render floating cart icon -->
188 <?php if ( $this->isFloatingIconEnabled() ) : ?>
189 <?php echo do_blocks( $cart_icon_block_content ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
190 <?php endif; ?>
191
192 <?php
193 return trim( preg_replace( '/\s+/', ' ', ob_get_clean() ) );
194 }
195
196 /**
197 * Render the cart components.
198 *
199 * @return void
200 */
201 public function renderCartComponent() {
202 $form = $this->getForm();
203 if ( empty( $form->ID ) ) {
204 return;
205 }
206
207 echo $this->cartTemplate();
208 }
209
210 /**
211 * Get the form post.
212 *
213 * @return \WP_Post The default form post.
214 */
215 public function getForm() {
216 return \SureCart::forms()->getDefault();
217 }
218
219 /**
220 * Check if floating cart icon is enabled
221 *
222 * @return string
223 */
224 public function isFloatingIconEnabled() {
225 // If we have a checkout form block or shortcode, don't render the cart.
226 $object = get_queried_object();
227
228 if ( is_a( $object, \WP_Post::class ) ) {
229 $block = wp_get_first_block( parse_blocks( $object->post_content ), 'surecart/checkout-form' ) || has_shortcode( $object->post_content, 'sc_form' );
230 if ( ! empty( $block ) ) {
231 return false;
232 }
233 }
234
235 $cart_icon_type = (string) get_option( 'surecart_cart_icon_type', 'floating_icon' );
236 return in_array( $cart_icon_type, array( 'floating_icon', 'both' ) );
237 }
238
239 /**
240 * Check if menu cart icon is enabled
241 *
242 * @param integer $term_id Term ID.
243 * @return bool
244 */
245 public function isMenuIconEnabled( $term_id ) {
246 $cart_menu_ids = (array) $this->getSelectedIds();
247 $cart_icon_type = (string) $this->getIconType();
248 if ( ! in_array( $cart_icon_type, array( 'menu_icon', 'both' ) ) ) {
249 return;
250 }
251 return in_array( $term_id, $cart_menu_ids );
252 }
253
254 /**
255 * Remove deprecated cart content.
256 *
257 * @param string $content Cart content.
258 *
259 * @return string
260 */
261 public static function removeDeprecatedCartContent( $content ) {
262 $review_cart_present = strpos( $content, 'wp:surecart/slide-out-cart-header {"text":"Review Your Cart"' );
263 $my_cart_present = strpos( $content, '<sc-cart-header><span>My Cart</span></sc-cart-header>' );
264
265 if ( false !== $review_cart_present && false !== $my_cart_present ) {
266 $content = str_replace( '<sc-cart-header><span>My Cart</span></sc-cart-header>', '<sc-cart-header><span>Review Your Cart</span></sc-cart-header>', $content );
267 }
268
269 return $content;
270 }
271 }
272