PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 2.0.25
Advanced Ads – Ad Manager & AdSense v2.0.25
2.0.25 2.0.24 2.0.23 2.0.22 2.0.21 1.38.0 1.39.0 1.39.1 1.39.2 1.39.3 1.39.4 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.40.0 1.40.1 1.40.2 1.41.0 1.42.0 1.42.1 1.42.2 1.43.0 1.44.0 1.44.1 1.45.0 1.45.1 1.46.0 1.47.0 1.47.1 1.47.2 1.47.3 1.47.4 1.47.5 1.48.0 1.48.1 1.49.0 1.5.0 1.5.0.1 1.5.1 1.5.2 1.5.2.1 1.5.4 1.5.4.1 1.5.5 1.50.0 1.51.0 1.51.1 1.51.2 1.51.3 1.52.0 1.52.1 1.52.2 1.52.3 1.52.4 1.53.0 1.53.1 1.53.2 1.54.0 1.54.1 1.55.0 1.56.0 1.56.1 1.56.2 1.56.3 1.56.4 1.6 1.6.1 1.6.10 1.6.10.1 1.6.10.2 1.6.11 1.6.11.1 1.6.12 1.6.13 1.6.14 1.6.15 1.6.16 1.6.17 1.6.17.1 1.6.17.2 1.6.2 1.6.2.1 1.6.3 1.6.4 1.6.4.1 1.6.5 1.6.6 1.6.6.1 1.6.7 1.6.7.1 1.6.8 1.6.8.1 1.6.8.2 1.6.8.3 1.6.9 1.6.9.1 1.6.9.2 1.6.9.3 1.6.9.4 1.7 1.7.0.1 1.7.0.2 1.7.0.3 1.7.1 1.7.1.1 1.7.1.2 1.7.1.3 1.7.1.4 1.7.1.5 1.7.10 trunk 1.7.11 1.0.1 1.7.12 1.0.2 1.7.13 1.0.3 1.7.14 1.1.0 1.7.15 1.1.1 1.7.16 1.1.2 1.7.17 1.1.3 1.7.18 1.10 1.7.19 1.10.1 1.7.2 1.10.10 1.7.2.1 1.10.11 1.7.20 1.10.12 1.7.21 1.10.2 1.7.22 1.10.3 1.7.23 1.10.4 1.7.24 1.10.5 1.7.25 1.10.6 1.7.3 1.10.7 1.7.4 1.10.8 1.7.4.1 1.10.9 1.7.4.2 1.11 1.7.4.3 1.11.1 1.7.4.4 1.11.2 1.7.4.5 1.12 1.7.5 1.13 1.7.5.1 1.13.1 1.7.6 1.13.2 1.7.7 1.13.3 1.7.8 1.13.4 1.7.9 1.13.5 1.7.9.1 1.13.6 1.7.9.2 1.13.7 1.7.9.3 1.13.8 1.8 1.14 1.8.1 1.14.1 1.8.10 1.14.10 1.8.11 1.14.11 1.8.12 1.14.2 1.8.13 1.14.3 1.8.14 1.14.4 1.8.15 1.14.5 1.8.16 1.14.6 1.8.17 1.14.7 1.8.18 1.14.8 1.8.19 1.14.9 1.8.2 1.15 1.8.20 1.16 1.8.21 1.16.1 1.8.22 1.17 1.8.23 1.17.1 1.8.24 1.17.10 1.8.25 1.17.10-rc.1 1.8.26 1.17.11 1.8.27 1.17.12 1.8.28 1.17.12-rc.1 1.8.29 1.17.2 1.8.3 1.17.3 1.8.30 1.17.4 1.8.4 1.17.5 1.8.5 1.17.6 1.8.6 1.17.7 1.8.7 1.17.8 1.8.8 1.17.9 1.8.9 1.17.9-beta.1 1.9 1.18.0 2.0.0 1.19.0 2.0.1 1.19.1 2.0.10 1.2 2.0.11 1.2.1 2.0.12 1.2.2 2.0.13 1.2.3 2.0.14 1.2.4 2.0.15 1.2.5 2.0.16 1.2.6 2.0.17 1.2.7 2.0.18 1.20.0 2.0.19 1.20.0-rc.1 2.0.2 1.20.0-rc.2 2.0.20 1.20.1 2.0.3 1.20.2 2.0.4 1.20.3 2.0.5 1.21.0 2.0.6 1.21.1 2.0.7 1.22.0 2.0.8 1.22.1 2.0.9 1.22.2 1.23.0 1.23.1 1.23.2 1.24.0 1.24.1 1.24.2 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.29.0 1.29.1 1.3 1.3.1 1.3.10 1.3.11 1.3.12 1.3.13 1.3.14 1.3.15 1.3.16 1.3.17 1.3.18 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.30.0 1.30.1 1.30.2 1.30.2-rc.1 1.30.3 1.30.4 1.30.4-rc.1 1.30.5 1.31.0 1.31.1 1.32.0 1.32.0-rc.1 1.33.0 1.33.1 1.33.2 1.34.0 1.35.0 1.35.1 1.36.0 1.36.1 1.36.2 1.36.3 1.37.0 1.37.1 1.37.2
advanced-ads / includes / license / class-license-product-map.php
advanced-ads / includes / license Last commit date
class-license-exchange.php 2 days ago class-license-package-installer.php 2 days ago class-license-product-map.php 2 days ago class-license-shop-client.php 2 days ago class-license-site-activation.php 2 days ago class-license.php 2 days ago utils.php 2 days ago
class-license-product-map.php
101 lines
1 <?php
2 /**
3 * Map exchange/API product names to add-on ids used in legacy license storage.
4 *
5 * @package AdvancedAds
6 * @since 2.0.9
7 * @author Advanced Ads <info@wpadvancedads.com>
8 */
9
10 namespace AdvancedAds\License;
11
12 defined( 'ABSPATH' ) || exit;
13
14 /**
15 * Product name ↔ addon id helpers.
16 */
17 final class License_Product_Map {
18
19 /**
20 * Normalize a display name for comparison.
21 *
22 * @param string $name Raw name.
23 * @return string
24 */
25 public static function normalize_name( string $name ): string {
26 $name = strtolower( trim( $name ) );
27 return (string) preg_replace( '/\s+/', ' ', $name );
28 }
29
30 /**
31 * Remove site-tier suffix from a normalized product name (e.g. "advanced ads pro / 2 sites").
32 *
33 * @param string $normalized Output of normalize_name().
34 * @return string
35 */
36 public static function strip_tier_suffix( string $normalized ): string {
37 $stripped = preg_replace( '#\s*/\s*\d+\s*sites?.*$#i', '', $normalized );
38 $stripped = preg_replace( '#\s*\(\s*\d+\s*sites?\s*\).*$#i', '', (string) $stripped );
39
40 return trim( (string) $stripped );
41 }
42
43 /**
44 * Whether this product name represents an All Access–style bundle row.
45 *
46 * @param string $name From exchange payload `name`.
47 * @return bool
48 */
49 public static function is_all_access_bundle_name( string $name ): bool {
50 $normalized = self::normalize_name( $name );
51
52 return '' !== $normalized && str_starts_with( $normalized, 'all access' );
53 }
54
55 /**
56 * Resolve addon id (e.g. "tracking") from API product name using installed add-on metadata.
57 *
58 * @param string $product_name From exchange payload `name`.
59 * @param array<string, array> $addons Output shape from Data::get_addons().
60 * @return string|null Addon id or null if unknown / bundle row.
61 */
62 public static function addon_id_from_product_name( string $product_name, array $addons ): ?string {
63 if ( self::is_all_access_bundle_name( $product_name ) ) {
64 return null;
65 }
66
67 $target = self::normalize_name( $product_name );
68 if ( '' === $target ) {
69 return null;
70 }
71
72 $target = self::strip_tier_suffix( $target );
73 if ( '' === $target ) {
74 return null;
75 }
76
77 foreach ( $addons as $row ) {
78 if ( empty( $row['id'] ) || empty( $row['name'] ) ) {
79 continue;
80 }
81
82 $addon_name = self::normalize_name( (string) $row['name'] );
83
84 if ( $addon_name === $target ) {
85 return (string) $row['id'];
86 }
87
88 // API often sends "Advanced Ads Pro"; installed add-on label is "Pro".
89 if ( 'advanced ads ' . $addon_name === $target ) {
90 return (string) $row['id'];
91 }
92
93 if ( str_ends_with( $target, ' ' . $addon_name ) ) {
94 return (string) $row['id'];
95 }
96 }
97
98 return null;
99 }
100 }
101