PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 2.0.5
Advanced Ads – Ad Manager & AdSense v2.0.5
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 / modules / pef / class-module.php
advanced-ads / modules / pef Last commit date
assets 2 years ago views 1 year ago class-module.php 1 year ago main.php 1 year ago
class-module.php
214 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 ( $this->get_minor_version( ADVADS_VERSION ) === $this->get_minor_version( $meta ) ) {
73 $this->can_display = false;
74 return;
75 }
76
77 $this->collect_weights();
78 add_action( 'wp_ajax_advanced_ads_pef', [ $this, 'dismiss' ] );
79 }
80
81 /**
82 * Ajax action to hie PEF for the current user until next plugin update
83 *
84 * @return void
85 */
86 public function dismiss(): void {
87 if ( ! check_ajax_referer( 'advanced_ads_pef' ) ) {
88 wp_send_json_error( 'Unauthorized', 401 );
89 }
90
91 update_user_meta( get_current_user_id(), self::USER_META, ADVADS_VERSION );
92 wp_send_json_success( 'OK', 200 );
93 }
94
95 /**
96 * Get a random feature based on weights and a random number
97 *
98 * @return array
99 */
100 public function get_winner_feature(): array {
101 $random_weight = wp_rand( 1, $this->weight_sum );
102 $current_weight = 0;
103 foreach ( $this->get_features() as $id => $feature ) {
104 $current_weight += $this->weights[ $id ];
105 if ( $random_weight <= $current_weight ) {
106 return array_merge(
107 [
108 'id' => $id,
109 'weight' => $this->weights[ $id ],
110 ],
111 $this->get_features()[ $id ]
112 );
113 }
114 }
115 }
116
117 /**
118 * Render PEF
119 *
120 * @param string $screen the screen on which PEF is displayed, used in the utm_campaign parameter.
121 *
122 * @return void
123 */
124 public function render( $screen ): void { // phpcs:ignore
125 // Early bail!!
126 if ( ! $this->can_display ) {
127 return;
128 }
129 $winner = $this->get_winner_feature();
130
131 require_once DIR . '/views/template.php';
132 }
133
134 /**
135 * Get minor part of a version
136 *
137 * @param string $version version to get the minor part from.
138 *
139 * @return string
140 */
141 public function get_minor_version( $version ): string {
142 return explode( '.', $version )[1] ?? '0';
143 }
144
145 /**
146 * Build the link for the winner feature with all its utm parameters
147 *
148 * @param array $winner the winner feature.
149 * @param string $screen the screen on which it was displayed.
150 *
151 * @return string
152 */
153 public function build_link( $winner, $screen ): string {
154 $utm_source = 'advanced-ads';
155 $utm_medium = 'link';
156 $utm_campaign = sprintf( '%s-aa-labs', $screen );
157 $utm_term = sprintf(
158 'b%s-w%d-%d',
159 str_replace( '.', '-', ADVADS_VERSION ),
160 $winner['weight'],
161 $this->weight_sum
162 );
163 $utm_content = $winner['id'];
164
165 return sprintf(
166 'https://wpadvancedads.com/advanced-ads-labs/?utm_source=%s&utm_medium=%s&utm_campaign=%s&utm_term=%s&utm_content=%s',
167 $utm_source,
168 $utm_medium,
169 $utm_campaign,
170 $utm_term,
171 $utm_content
172 );
173 }
174
175 /**
176 * Set the features/banners
177 *
178 * @return array
179 */
180 public function get_features(): array {
181 return [
182 'labs-campaign-manager-ay' => [
183 'subheading' => __( 'FROM THE ADVANCED ADS LABS:', 'advanced-ads' ),
184 'heading' => __( 'The Campaign Manager', 'advanced-ads' ),
185 'weight' => 1,
186 'text' => __( 'Advanced Ads’ upcoming new product, the Campaign Manager, will shake up how you sell ad space to clients directly. It bundles a decade of users’ requests and ideas into one standalone product. The core feature set includes a brilliant advertisement schedule screen, grouping ads and reports by client, brushed-up email notifications for timed ads, and more.<br><br>Our team is in the early stages of development, and we would like to see if this product resonates with you.', 'advanced-ads' ),
187 'cta' => __( 'Are you interested in this product concept?', 'advanced-ads' ),
188 'cta_button' => __( 'Yes, I want to know more!', 'advanced-ads' ),
189 ],
190 'labs-campaign-manager-be' => [
191 'subheading' => __( 'FROM THE ADVANCED ADS LABS:', 'advanced-ads' ),
192 'heading' => __( 'The Campaign Manager', 'advanced-ads' ),
193 'weight' => 1,
194 'text' => __( 'Advanced Ads’ upcoming new product, the Campaign Manager, will shake up how you sell ad space to clients directly. It bundles a decade of users’ requests and ideas into one standalone product. The core feature set includes a brilliant advertisement schedule screen, grouping ads and reports by client, brushed-up email notifications for timed ads, and more.<br><br>Our team is in the early stages of development, and we would like to see if this product resonates with you.', 'advanced-ads' ),
195 'cta' => __( 'Are you interested in this product concept?', 'advanced-ads' ),
196 'cta_button' => __( 'Yes, I want to know more!', 'advanced-ads' ),
197 ],
198 ];
199 }
200
201 /**
202 * Collect feature ID with their weight as recorded in the class constant. Also calculate the weight sum
203 */
204 private function collect_weights() {
205 if ( 0 !== $this->weight_sum ) {
206 return;
207 }
208 foreach ( $this->get_features() as $id => $feature ) {
209 $this->weights[ $id ] = (int) $feature['weight'];
210 $this->weight_sum += $this->weights[ $id ];
211 }
212 }
213 }
214