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