PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 2.0.24
Advanced Ads – Ad Manager & AdSense v2.0.24
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 / modules / pef / class-module.php
advanced-ads / modules / pef Last commit date
assets 1 year ago views 1 year ago class-module.php 1 year ago main.php 1 year ago
class-module.php
207 lines
1 <?php
2 /**
3 * PEF module
4 *
5 * @package AdvancedAds
6 * @author Advanced Ads <info@wpadvancedads.com>
7 */
8
9 namespace AdvancedAds\Modules\ProductExperimentationFramework;
10
11 /**
12 * Module main class
13 */
14 class Module {
15 /**
16 * User meta key where the dismiss flag is stored.
17 *
18 * @var string
19 */
20 const USER_META = 'advanced_ads_pef_dismiss';
21
22 /**
23 * Sum of all weights
24 *
25 * @var int
26 */
27 private $weight_sum = 0;
28
29 /**
30 * ID => weight association
31 *
32 * @var int[]
33 */
34 private $weights = [];
35
36 /**
37 * Whether the PEF can be displayed based on user meta
38 *
39 * @var bool
40 */
41 private $can_display = true;
42
43 /**
44 * Return the singleton. Create it if needed
45 *
46 * @return Module
47 */
48 public static function get_instance(): Module {
49 static $instance;
50
51 if ( null === $instance ) {
52 $instance = new self();
53 }
54
55 return $instance;
56 }
57
58 /**
59 * Singleton design
60 */
61 private function __construct() {
62 add_action( 'admin_init', [ $this, 'admin_init' ] );
63 }
64
65 /**
66 * Initialization
67 *
68 * @return void
69 */
70 public function admin_init(): void {
71 $meta = get_user_meta( get_current_user_id(), self::USER_META, true );
72 if ( $meta && $this->get_minor_version( ADVADS_VERSION ) === $this->get_minor_version( $meta ) ) {
73 $this->can_display = false;
74
75 return;
76 }
77
78 $this->collect_weights();
79 add_action( 'wp_ajax_advanced_ads_pef', [ $this, 'dismiss' ] );
80 }
81
82 /**
83 * Ajax action to hie PEF for the current user until next plugin update
84 *
85 * @return void
86 */
87 public function dismiss(): void {
88 if ( ! check_ajax_referer( 'advanced_ads_pef' ) ) {
89 wp_send_json_error( 'Unauthorized', 401 );
90 }
91
92 update_user_meta( get_current_user_id(), self::USER_META, ADVADS_VERSION );
93 wp_send_json_success( 'OK', 200 );
94 }
95
96 /**
97 * Get a random feature based on weights and a random number
98 *
99 * @return array
100 */
101 public function get_winner_feature(): array {
102 $random_weight = wp_rand( 1, $this->weight_sum );
103 $current_weight = 0;
104 foreach ( $this->get_features() as $id => $feature ) {
105 $current_weight += $this->weights[ $id ];
106 if ( $random_weight <= $current_weight ) {
107 return array_merge(
108 [
109 'id' => $id,
110 'weight' => $this->weights[ $id ],
111 ],
112 $this->get_features()[ $id ]
113 );
114 }
115 }
116 }
117
118 /**
119 * Render PEF
120 *
121 * @param string $screen the screen on which PEF is displayed, used in the utm_campaign parameter.
122 *
123 * @return void
124 */
125 public function render( $screen ): void { // phpcs:ignore
126 // Early bail!!
127 if ( ! $this->can_display ) {
128 return;
129 }
130 $winner = $this->get_winner_feature();
131
132 require_once DIR . '/views/template.php';
133 }
134
135 /**
136 * Get minor part of a version
137 *
138 * @param string $version version to get the minor part from.
139 *
140 * @return string
141 */
142 public function get_minor_version( $version ): string {
143 return explode( '.', $version )[1] ?? '0';
144 }
145
146 /**
147 * Build the link for the winner feature with all its utm parameters
148 *
149 * @param array $winner the winner feature.
150 * @param string $screen the screen on which it was displayed.
151 *
152 * @return string
153 */
154 public function build_link( $winner, $screen ): string {
155 $utm_source = 'advanced-ads';
156 $utm_medium = 'link';
157 $utm_campaign = sprintf( '%s-aa-labs', $screen );
158 $utm_term = sprintf(
159 'b%s-w%d-%d',
160 str_replace( '.', '-', ADVADS_VERSION ),
161 $winner['weight'],
162 $this->weight_sum
163 );
164 $utm_content = $winner['id'];
165
166 return sprintf(
167 'https://wpadvancedads.com/advanced-ads-labs/?utm_source=%s&utm_medium=%s&utm_campaign=%s&utm_term=%s&utm_content=%s',
168 $utm_source,
169 $utm_medium,
170 $utm_campaign,
171 $utm_term,
172 $utm_content
173 );
174 }
175
176 /**
177 * Set the features/banners
178 *
179 * @return array
180 */
181 public function get_features(): array {
182 return [
183 'labs-amazon-integration' => [
184 'subheading' => __( 'FROM THE ADVANCED ADS LABS:', 'advanced-ads' ),
185 'heading' => __( 'The Amazon Integration', 'advanced-ads' ),
186 'weight' => 1,
187 'text' => __( 'Our latest product concept puts Amazon affiliate marketing at your fingertips—right within Advanced Ads. It offers features like direct product import via Amazon API, multiple product display formats, and efficient ad tracking. We aim to create a one-stop solution for featuring Amazon products on your site without resorting to expensive third-party plugins.', 'advanced-ads' ),
188 'cta' => __( 'Are you interested in this product concept?', 'advanced-ads' ),
189 'cta_button' => __( 'Yes, I want to know more!', 'advanced-ads' ),
190 ],
191 ];
192 }
193
194 /**
195 * Collect feature ID with their weight as recorded in the class constant. Also calculate the weight sum
196 */
197 private function collect_weights() {
198 if ( 0 !== $this->weight_sum ) {
199 return;
200 }
201 foreach ( $this->get_features() as $id => $feature ) {
202 $this->weights[ $id ] = (int) $feature['weight'];
203 $this->weight_sum += $this->weights[ $id ];
204 }
205 }
206 }
207