PluginProbe ʕ •ᴥ•ʔ
Weight Based Shipping Table Rate for WooCommerce – Flexible Shipping / 6.12.1
Weight Based Shipping Table Rate for WooCommerce – Flexible Shipping v6.12.1
6.12.1 6.12.0 6.11.0 6.10.0 6.9.1 6.9.0 6.8.1 6.8.0 6.7.4 6.7.3 6.7.2 6.7.0 4.21.7 4.22.0 4.22.1 4.23.0 4.23.1 4.23.2 4.23.3 4.24.0 4.24.1 4.24.10 4.24.11 4.24.12 4.24.13 4.24.14 4.24.15 4.24.16 4.24.17 4.24.18 4.24.19 4.24.2 4.24.4 4.24.6 4.24.7 4.24.8 4.24.9 4.25.0 4.25.1 4.25.2 4.25.4 4.25.5 4.25.6 4.25.7 4.25.8 4.3.0 4.3.1 4.4.0 4.4.1 4.5.0 4.5.1 4.6.0 4.6.1 4.7.0 4.7.1 4.7.2 4.8.0 4.8.1 4.8.3 4.8.4 4.8.5 4.9.0 5.0.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 5.0.8 5.0.9 5.1.0 5.1.1 5.1.2 5.1.3 5.2.0 5.3.0 5.3.1 5.3.3 5.3.4 5.3.5 6.0.0 6.1.0 6.1.1 6.1.2 6.2.0 6.2.1 6.2.2 6.2.3 6.2.4 6.3.0 trunk 6.4.0 1.4 6.4.1 1.4.1 6.4.2 1.5 6.4.3 1.6 6.4.5 1.6.1 6.5.0 1.6.2 6.5.1 1.7 6.5.2 1.8 6.5.3 1.9 6.5.4 1.9.1 6.5.5 1.9.10 6.5.6 1.9.11 6.5.7 1.9.12 6.5.8 1.9.2 6.6.0 1.9.3 6.6.1 1.9.4 6.6.2 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0 2.0.1 2.1 2.1.1 2.1.10 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 3.0.6 3.0.7 3.1 3.1.1 3.1.10 3.1.11 3.1.12 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 3.10.0 3.11.0 3.11.1 3.11.2 3.11.3 3.11.4 3.12.0 3.13.0 3.14.0 3.14.1 3.14.2 3.14.3 3.14.4 3.15.0 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.2.0 3.3.1 3.3.10 3.3.11 3.3.12 3.3.13 3.3.14 3.3.2 3.3.3 3.3.4 3.3.5 3.3.6 3.3.7 3.3.8 3.3.9 3.4.0 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.7.0 3.8.0 3.9.0 3.9.1 3.9.10 3.9.11 3.9.12 3.9.13 3.9.15 3.9.16 3.9.17 3.9.18 3.9.19 3.9.2 3.9.20 3.9.21 3.9.3 3.9.4 3.9.5 3.9.6 3.9.7 3.9.9 4.0.0 4.0.1 4.0.10 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.0.7 4.0.8 4.0.9 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.10.0 4.10.1 4.11.0 4.11.1 4.11.2 4.11.3 4.11.4 4.11.5 4.11.6 4.11.7 4.11.8 4.11.9 4.12.0 4.13.0 4.13.1 4.13.2 4.13.3 4.14.0 4.14.1 4.14.2 4.15.0 4.16.0 4.16.1 4.16.2 4.17.0 4.18.0 4.18.1 4.18.2 4.18.3 4.18.4 4.18.5 4.18.6 4.19.0 4.19.1 4.2.0 4.20.0 4.20.1 4.20.2 4.20.3 4.21.0 4.21.1 4.21.2 4.21.3 4.21.4 4.21.5
flexible-shipping / src / WPDesk / FS / Info / DashboardTrackingData.php
flexible-shipping / src / WPDesk / FS / Info Last commit date
Metabox 1 week ago views 1 week ago Dashboard.php 1 week ago DashboardTracker.php 1 week ago DashboardTrackingData.php 1 week ago DashboardTrackingReceiver.php 1 week ago FSIE.php 1 week ago FSPro.php 1 week ago FSWalkthrough.php 1 week ago FSWalkthroughPL.php 1 week ago Metabox.php 1 week ago Video.php 1 week ago WooCommerceABC.php 1 week ago WooCommerceABCPL.php 1 week ago
DashboardTrackingData.php
133 lines
1 <?php
2 /**
3 * Dashboard tracking data.
4 *
5 * @package WPDesk\FS\Info
6 */
7
8 declare( strict_types=1 );
9
10 namespace WPDesk\FS\Info;
11
12 /**
13 * Stores normalized dashboard counters.
14 */
15 final class DashboardTrackingData {
16
17 const OPTION_NAME = 'flexible_shipping_dashboard_tracking';
18
19 /**
20 * @return array<string, array<string, mixed>>
21 */
22 public function get_data(): array {
23 $data = get_option( self::OPTION_NAME, [] );
24
25 return [
26 Dashboard::VARIANT_FREE => $this->normalize_variant( is_array( $data ) ? ( $data[ Dashboard::VARIANT_FREE ] ?? [] ) : [], false ),
27 Dashboard::VARIANT_PRO => $this->normalize_variant( is_array( $data ) ? ( $data[ Dashboard::VARIANT_PRO ] ?? [] ) : [], true ),
28 ];
29 }
30
31 /**
32 * @param array<string, int> $increments Counter increments.
33 * @param bool $is_pro_active Is Flexible Shipping PRO active.
34 */
35 public function increase( array $increments, bool $is_pro_active ): void {
36 $data = $this->get_data();
37 $variant = $is_pro_active ? Dashboard::VARIANT_PRO : Dashboard::VARIANT_FREE;
38
39 foreach ( $increments as $path => $increment ) {
40 if ( ! in_array( $path, $this->allowed_paths( $is_pro_active ), true ) || $increment < 0 ) {
41 continue;
42 }
43
44 if ( 0 === strpos( $path, 'onboarding.' ) ) {
45 $key = substr( $path, strlen( 'onboarding.' ) );
46 $data[ $variant ]['onboarding'][ $key ] += $increment;
47 } else {
48 $data[ $variant ][ $path ] += $increment;
49 }
50 }
51
52 update_option( self::OPTION_NAME, $data, false );
53 }
54
55 /**
56 * @param mixed $stored Stored variant data.
57 * @param bool $is_pro Is PRO variant.
58 *
59 * @return array<string, mixed>
60 */
61 private function normalize_variant( $stored, bool $is_pro ): array {
62 $normalized = $this->defaults( $is_pro );
63 $stored = is_array( $stored ) ? $stored : [];
64 $stored_onboarding = is_array( $stored['onboarding'] ?? null ) ? $stored['onboarding'] : [];
65
66 foreach ( $normalized as $key => $default ) {
67 if ( 'onboarding' === $key ) {
68 foreach ( $default as $onboarding_key => $value ) {
69 $normalized['onboarding'][ $onboarding_key ] = max( 0, (int) ( $stored_onboarding[ $onboarding_key ] ?? 0 ) );
70 }
71 } else {
72 $normalized[ $key ] = max( 0, (int) ( $stored[ $key ] ?? 0 ) );
73 }
74 }
75
76 return $normalized;
77 }
78
79 /**
80 * @return array<string, mixed>
81 */
82 private function defaults( bool $is_pro ): array {
83 $onboarding = [
84 'step_1_reached_count' => 0,
85 'step_2_reached_count' => 0,
86 'step_3_reached_count' => 0,
87 'step_4_reached_count' => 0,
88 'step_5_reached_count' => 0,
89 'completed_count' => 0,
90 'restart_count' => 0,
91 ];
92
93 if ( $is_pro ) {
94 $onboarding['step_6_reached_count'] = 0;
95 $onboarding['activate_license_click_count'] = 0;
96 $onboarding['check_extensions_click_count'] = 0;
97 } else {
98 $onboarding['add_zone_click_count'] = 0;
99 $onboarding['add_method_click_count'] = 0;
100 $onboarding['open_cart_click_count'] = 0;
101 }
102
103 return [
104 'views_count' => 0,
105 'visible_time_seconds' => 0,
106 'navigation_click_count' => 0,
107 'reached_end_count' => 0,
108 'create_method_click_count' => 0,
109 'extensions_click_count' => 0,
110 'onboarding' => $onboarding,
111 ];
112 }
113
114 /**
115 * @return string[]
116 */
117 private function allowed_paths( bool $is_pro ): array {
118 $paths = [];
119
120 foreach ( $this->defaults( $is_pro ) as $key => $value ) {
121 if ( is_array( $value ) ) {
122 foreach ( array_keys( $value ) as $onboarding_key ) {
123 $paths[] = 'onboarding.' . $onboarding_key;
124 }
125 } else {
126 $paths[] = $key;
127 }
128 }
129
130 return $paths;
131 }
132 }
133