PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 2.0.26
Advanced Ads – Ad Manager & AdSense v2.0.26
2.0.26 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-product-map.php 4 weeks ago class-license-shop-client.php 4 weeks ago class-license-site-activation.php 4 weeks ago class-license-utils.php 4 weeks ago class-license.php 4 weeks ago
class-license-product-map.php
149 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 use AdvancedAds\Utilities\Addons;
13
14 defined( 'ABSPATH' ) || exit;
15
16 /**
17 * Product name ↔ addon id helpers.
18 */
19 final class License_Product_Map {
20
21 /**
22 * Add-on manifest for license name resolution (always includes missing add-ons).
23 *
24 * @return array<string, array{id: string, name: string, options_slug: string, path: string}>
25 */
26 public static function addon_manifest(): array {
27 $slug_base = defined( 'ADVADS_SLUG' ) ? ADVADS_SLUG : 'advanced-ads';
28 $names = [
29 'pro' => 'Pro',
30 'responsive' => 'AMP Ads',
31 'gam' => 'Google Ad Manager Integration',
32 'layer' => 'PopUp and Layer Ads',
33 'selling' => 'Selling Ads',
34 'sticky' => 'Sticky Ads',
35 'tracking' => 'Tracking',
36 ];
37 $out = [];
38
39 foreach ( Addons::plugin_files() as $addon_id => $file ) {
40 $slug = $slug_base . '-' . $addon_id;
41 $display_name = $names[ $addon_id ] ?? $addon_id;
42 $normalized = self::normalize_name( $display_name );
43 $out[ $slug ] = [
44 'id' => $addon_id,
45 'name' => $display_name,
46 'options_slug' => $slug,
47 'path' => $file,
48 'aliases' => array_values(
49 array_unique(
50 array_filter(
51 [
52 $normalized,
53 '' !== $normalized ? 'advanced ads ' . $normalized : '',
54 ]
55 )
56 )
57 ),
58 ];
59 }
60
61 return $out;
62 }
63
64 /**
65 * Normalize a display name for comparison.
66 *
67 * @param string $name Raw name.
68 * @return string
69 */
70 public static function normalize_name( string $name ): string {
71 $name = strtolower( trim( $name ) );
72 return (string) preg_replace( '/\s+/', ' ', $name );
73 }
74
75 /**
76 * Remove site-tier suffix from a normalized product name (e.g. "advanced ads pro / 2 sites").
77 *
78 * @param string $normalized Output of normalize_name().
79 * @return string
80 */
81 public static function strip_tier_suffix( string $normalized ): string {
82 $stripped = preg_replace( '#\s*/\s*\d+\s*sites?.*$#i', '', $normalized );
83 $stripped = preg_replace( '#\s*\(\s*\d+\s*sites?\s*\).*$#i', '', (string) $stripped );
84
85 return trim( (string) $stripped );
86 }
87
88 /**
89 * Whether this product name represents an All Access–style bundle row.
90 *
91 * @param string $name From exchange payload `name`.
92 * @return bool
93 */
94 public static function is_all_access_bundle_name( string $name ): bool {
95 $normalized = self::normalize_name( $name );
96
97 return '' !== $normalized && str_starts_with( $normalized, 'all access' );
98 }
99
100 /**
101 * Resolve addon id (e.g. "tracking") from API product name using installed add-on metadata.
102 *
103 * @param string $product_name From exchange payload `name`.
104 * @param array<string, array{id: string, name: string, options_slug: string, path: string, aliases?: list<string>}>|null $addons Manifest rows; defaults to addon_manifest().
105 * @return string|null Addon id or null if unknown / bundle row.
106 */
107 public static function addon_id_from_product_name( string $product_name, ?array $addons = null ): ?string {
108 if ( self::is_all_access_bundle_name( $product_name ) ) {
109 return null;
110 }
111
112 $target = self::normalize_name( $product_name );
113 if ( '' === $target ) {
114 return null;
115 }
116
117 $target = self::strip_tier_suffix( $target );
118 if ( '' === $target ) {
119 return null;
120 }
121
122 $addons = $addons ?? self::addon_manifest();
123
124 foreach ( $addons as $row ) {
125 if ( empty( $row['id'] ) || empty( $row['name'] ) ) {
126 continue;
127 }
128
129 $addon_name = self::normalize_name( (string) $row['name'] );
130 $aliases = isset( $row['aliases'] ) && is_array( $row['aliases'] )
131 ? $row['aliases']
132 : array_values(
133 array_filter(
134 [
135 $addon_name,
136 '' !== $addon_name ? 'advanced ads ' . $addon_name : '',
137 ]
138 )
139 );
140
141 if ( in_array( $target, $aliases, true ) || ( '' !== $addon_name && str_ends_with( $target, ' ' . $addon_name ) ) ) {
142 return (string) $row['id'];
143 }
144 }
145
146 return null;
147 }
148 }
149