PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 2.13.0
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v2.13.0
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 2 years ago CartServiceProvider.php 3 years ago
CartService.php
276 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', [ $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 \SureCart::assets()->enqueueComponents();
25 }
26 );
27
28 $form = $this->getForm();
29 if ( empty( $form->ID ) ) {
30 return;
31 }
32 $state = sc_initial_state();
33
34 if ( empty( $state['checkout']['formId'] ) ) {
35 sc_initial_state(
36 array_filter(
37 [
38 'checkout' => [
39 'formId' => $form->ID,
40 'mode' => Form::getMode( $form->ID ),
41 ],
42 ]
43 )
44 );
45 }
46 add_action( 'wp_footer', [ $this, 'renderCartComponent' ] );
47 }
48 }
49
50 /**
51 * Get the icon name saved in the settings
52 *
53 * @return string
54 */
55 public function getIconNameFromSettings() {
56 return get_option( 'surecart_cart_icon', 'shopping-bag' );
57 }
58
59 /**
60 * Get the icon.
61 *
62 * @param 'menu'|'floating' $type Menu type.
63 *
64 * @return string
65 */
66 public function getIcon( $type ) {
67 $icon = '<sc-icon name="' . $this->getIconNameFromSettings() . '"></sc-icon>';
68
69 /**
70 * Allow filtering of the cart menu icon.
71 *
72 * @param string $icon The icon.
73 * @param string $mode The icon position.
74 */
75 return apply_filters( 'sc_cart_menu_icon', $icon, $type );
76 }
77
78
79 /**
80 * Get selected ids.
81 *
82 * @return array|false
83 */
84 public function getSelectedIds() {
85 return get_option( 'surecart_cart_menu_selected_ids', false );
86 }
87
88 /**
89 * Get icon type.
90 *
91 * @return array|false
92 */
93 public function getIconType() {
94 return get_option( 'surecart_cart_icon_type', 'floating_icon' );
95 }
96
97 /**
98 * Check if cart menu is always shown.
99 *
100 * @return boolean
101 */
102 public function isAlwaysShown() {
103 return (bool) get_option( 'surecart_cart_menu_always_shown', true );
104 }
105
106 /**
107 * Is the cart enabled?
108 */
109 public function isCartEnabled() {
110 return ! (bool) get_option( 'sc_slide_out_cart_disabled', false );
111 }
112
113 /**
114 * Get cart menu alignment.
115 *
116 * @return 'left'|'right
117 */
118 public function getAlignment() {
119 return (string) get_option( 'surecart_cart_menu_alignment', 'right' );
120 }
121
122 /**
123 * Get mode.
124 *
125 * @return string
126 */
127 public function getMode() {
128 $form = $this->getForm();
129 return Form::getMode( $form->ID );
130 }
131
132 /**
133 * Add cart to menu.
134 *
135 * @param array $items Menu items.
136 * @param object $args Menu args.
137 *
138 * @return array
139 */
140 public function addCartMenu( $items, $args ) {
141 $id = is_int( $args->menu ) ? $args->menu : ( $args->menu->term_id ?? false );
142
143 // if there is no id, or the menu icon is not enabled, or the cart is disabled, return.
144 if ( ! $id || ! $this->isMenuIconEnabled( $id ) || ! $this->isCartEnabled() ) {
145 return $items;
146 }
147
148 $cart_menu_alignment = $this->getAlignment();
149
150 $menu = $this->menuItemTemplate();
151
152 // left or right.
153 $items = 'right' === $cart_menu_alignment ? $items . $menu : $menu . $items;
154
155 return $items;
156 }
157
158 public function menuItemTemplate() {
159 $form = $this->getForm();
160 $mode = $this->getMode();
161
162 ob_start(); ?>
163 <li class='menu-item'>
164 <a href="<?php echo esc_attr( \SureCart::pages()->url( 'checkout' ) ); ?>" class="menu-link" tabindex="-1">
165 <sc-cart-button
166 cart-menu-always-shown='<?php echo esc_attr( $this->isAlwaysShown() ? 'true' : 'false' ); ?>'
167 form-id='<?php echo esc_attr( $form->ID ); ?>'
168 mode='<?php echo esc_attr( $mode ); ?>'>
169 <?php echo wp_kses_post( $this->getIcon( 'menu' ) ); ?>
170 </sc-cart-button>
171 </a>
172 </li>
173 <?php
174 return ob_get_clean();
175 }
176
177 /**
178 * Get the cart template.
179 *
180 * @return string
181 */
182 public function cartTemplate() {
183 $form = $this->getForm();
184
185 if ( empty( $form->ID ) ) {
186 return '';
187 }
188
189 $cart = \SureCart::cartPost()->get();
190
191 if ( empty( $cart->post_content ) ) {
192 return '';
193 }
194
195 // get cart block.
196 $blocks = parse_blocks( $cart->post_content );
197 if ( ! empty( $blocks[0] ) ) {
198 $attributes = $blocks[0]['attrs'];
199 }
200
201 ob_start();
202 ?>
203
204 <sc-cart
205 id="sc-cart"
206 header="<?php esc_attr_e( 'Cart', 'surecart' ); ?>"
207 checkout-link="<?php echo esc_attr( \SureCart::pages()->url( 'checkout' ) ); ?>"
208 style="font-size: 16px; --sc-z-index-drawer: 999999; --sc-drawer-size: <?php echo esc_attr( $attributes['width'] ?? '500px' ); ?>"
209 >
210 <?php echo wp_kses_post( do_blocks( $cart->post_content ) ); ?>
211 </sc-cart>
212
213 <?php if ( $this->isFloatingIconEnabled() ) : ?>
214 <sc-cart-icon style="font-size: 16px">
215 <?php echo wp_kses_post( $this->getIcon( 'floating' ) ); ?>
216 </sc-cart-icon>
217 <?php endif; ?>
218
219 <?php
220 return trim( preg_replace( '/\s+/', ' ', ob_get_clean() ) );
221 }
222
223 /**
224 * Render the cart components.
225 *
226 * @return void
227 */
228 public function renderCartComponent() {
229 $form = $this->getForm();
230 if ( empty( $form->ID ) ) {
231 return;
232 }
233 $template = $this->cartTemplate();
234 ?>
235
236 <sc-cart-loader
237 template='<?php echo esc_attr( $template ); ?>'>
238 </sc-cart-loader>
239 <?php
240 }
241
242 /**
243 * Get the form
244 *
245 * @return \WP_Post The default form post.
246 */
247 public function getForm() {
248 return \SureCart::forms()->getDefault();
249 }
250
251 /**
252 * Check if floating cart icon is enabled
253 *
254 * @return string
255 */
256 public function isFloatingIconEnabled() {
257 $cart_icon_type = (string) get_option( 'surecart_cart_icon_type', 'floating_icon' );
258 return in_array( $cart_icon_type, [ 'floating_icon', 'both' ] );
259 }
260
261 /**
262 * Check if menu cart icon is enabled
263 *
264 * @param integer $term_id Term ID.
265 * @return bool
266 */
267 public function isMenuIconEnabled( $term_id ) {
268 $cart_menu_ids = (array) $this->getSelectedIds();
269 $cart_icon_type = (string) $this->getIconType();
270 if ( ! in_array( $cart_icon_type, [ 'menu_icon', 'both' ] ) ) {
271 return;
272 }
273 return in_array( $term_id, $cart_menu_ids );
274 }
275 }
276