PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 4.5.0
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v4.5.0
4.5.1 4.5.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 / WordPress / LineItemStateService.php
surecart / app / src / WordPress Last commit date
Admin 2 months ago Assets 2 weeks ago CLI 2 years ago Cache 2 weeks ago Pages 10 months ago PostTypes 2 months ago Posts 1 year ago Shortcodes 1 month ago Taxonomies 1 year ago Templates 1 year ago Users 2 months ago ActionsService.php 3 years ago CompatibilityService.php 4 months ago CurrencyService.php 4 months ago GoogleMapApiService.php 2 months ago HealthService.php 2 months ago LineItemStateService.php 2 years ago PluginActionLinksService.php 1 year ago PluginService.php 1 year ago PluginServiceProvider.php 1 year ago RecaptchaValidationService.php 2 years ago StateService.php 7 months ago ThemeService.php 4 months ago ThemeServiceProvider.php 7 months ago TranslationsServiceProvider.php 3 months ago UpgradeNoticeService.php 1 year ago
LineItemStateService.php
84 lines
1 <?php
2
3 namespace SureCart\WordPress;
4
5 /**
6 * LineItemStateService class
7 */
8 class LineItemStateService {
9 /**
10 * Keeps track of already parsed blocks.
11 *
12 * @var array
13 */
14 protected static $parsed_blocks = [];
15
16 /**
17 * Get existing line items from the checkout.
18 *
19 * @param string $store The store name.
20 * @param string $key The key to get.
21 */
22 public function get( $store = 'checkout', $key = 'initialLineItems' ) {
23 $initial = sc_initial_state();
24 return ! empty( $initial[ $store ][ $key ] ) ? $initial[ $store ][ $key ] : [];
25 }
26
27 /**
28 * Add line items to the checkout.
29 *
30 * @param array $line_items The line items to add.
31 * @param string $store The store name.
32 * @param string $key The key to get.
33 *
34 * @return array The new line items.
35 */
36 public function merge( $line_items = [], $store = 'checkout', $key = 'initialLineItems' ) {
37 $initial = sc_initial_state();
38 $initial_items = $initial[ $store ][ $key ] ?? [];
39
40 // filter out any line items that were already added.
41 $merged_line_items = array_filter(
42 $line_items,
43 function ( $line_item ) use ( $initial_items ) {
44 // if the line item does not exist, add it.
45 return ! $this->lineItemExists( $line_item, $initial_items );
46 }
47 );
48
49 return array_merge( $initial_items, $merged_line_items );
50 }
51
52 /**
53 * Does the line item exist?
54 *
55 * @param array $line_item The line item to check.
56 *
57 * @return boolean
58 */
59 public function lineItemExists( $line_item, $line_items ) {
60 return array_reduce(
61 $line_items,
62 function ( $carry, $existing_line_item ) use ( $line_item ) {
63 $existing_price_id = $existing_line_item['price_id'] ?? $existing_line_item['price'] ?? null;
64 $existing_variant_id = $existing_line_item['variant_id'] ?? $existing_line_item['variant'] ?? null;
65 $price_id = $line_item['price_id'] ?? $line_item['price'] ?? null;
66 $variant_id = $line_item['variant_id'] ?? $line_item['variant'] ?? null;
67
68 if ( (bool) $existing_variant_id && (bool) $variant_id && $existing_variant_id === $variant_id ) {
69 if ( $existing_price_id === $price_id ) {
70 return true;
71 }
72 }
73
74 if ( (bool) $existing_price_id && (bool) $price_id && $existing_price_id === $price_id ) {
75 return true;
76 }
77
78 return $carry;
79 },
80 false
81 );
82 }
83 }
84