PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 13.3.3
Jetpack – WP Security, Backup, Speed, & Growth v13.3.3
12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 13.7.2 13.8.3 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 14.4.2 14.5.1 14.6.1 14.7.1 14.8.1 14.9.2 15.0.3 15.1.2 15.2.1 15.3.2 15.4.1 15.5.1 15.6.1 15.7.2 15.8.1 15.9.2 16.0.2 16.1.3 16.2-a.5 16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / modules / wordads / php / class-wordads-params.php
jetpack / modules / wordads / php Last commit date
networks 5 years ago class-wordads-admin.php 5 years ago class-wordads-api.php 4 years ago class-wordads-california-privacy.php 3 years ago class-wordads-ccpa-do-not-sell-link-widget.php 3 years ago class-wordads-consent-management-provider.php 2 years ago class-wordads-cron.php 5 years ago class-wordads-params.php 2 years ago class-wordads-sidebar-widget.php 2 years ago
class-wordads-params.php
315 lines
1 <?php
2 /**
3 * WordAds Param Class file.
4 *
5 * @package automattic/jetpack
6 */
7
8 use Automattic\Jetpack\Status;
9
10 /**
11 * Class WordAds_Params
12 *
13 * Sets parameters for WordAds.
14 */
15 class WordAds_Params {
16 /**
17 * WordAds options
18 *
19 * @var array
20 */
21 public $options;
22
23 /**
24 * Current URL
25 *
26 * @access public
27 * @var string
28 */
29 public $url;
30
31 /**
32 * Is this site served by CloudFlare?
33 *
34 * @access public
35 * @var bool
36 */
37 public $cloudflare;
38
39 /**
40 * Jetpack Blog ID
41 *
42 * @var mixed
43 */
44 public $blog_id;
45
46 /**
47 * Determine if the current User Agent is a mobile device
48 *
49 * @var bool
50 */
51 public $mobile_device;
52
53 /**
54 * WordAds targeting tags
55 *
56 * @var array
57 */
58 public $targeting_tags;
59
60 /**
61 * Type of page that is being loaded
62 *
63 * @var string
64 */
65 public $page_type;
66
67 /**
68 * Page type code for IPW config
69 *
70 * @var int
71 */
72 public $page_type_ipw;
73
74 /**
75 * Setup parameters for serving the ads
76 *
77 * @since 4.5.0
78 */
79 public function __construct() {
80 // WordAds setting => default.
81 $settings = array(
82 'wordads_approved' => false,
83 'wordads_active' => false,
84 'wordads_house' => true,
85 'wordads_unsafe' => false,
86 'enable_header_ad' => true,
87 'wordads_second_belowpost' => true,
88 'wordads_display_front_page' => true,
89 'wordads_display_post' => true,
90 'wordads_display_page' => true,
91 'wordads_display_archive' => true,
92 'wordads_custom_adstxt' => '',
93 'wordads_custom_adstxt_enabled' => false,
94 'wordads_ccpa_enabled' => false,
95 'wordads_ccpa_privacy_policy_url' => get_option( 'wp_page_for_privacy_policy' ) ? get_permalink( (int) get_option( 'wp_page_for_privacy_policy' ) ) : '',
96 'wordads_cmp_enabled' => false,
97 );
98
99 // Grab settings, or set as default if it doesn't exist.
100 $this->options = array();
101
102 foreach ( $settings as $setting => $default ) {
103 $option = get_option( $setting, null );
104
105 if ( $option === null ) {
106
107 // Handle retroactively setting wordads_custom_adstxt_enabled to true if custom ads.txt content is already entered.
108 if ( 'wordads_custom_adstxt_enabled' === $setting ) {
109 $default = get_option( 'wordads_custom_adstxt' ) !== '';
110 }
111
112 // Convert boolean options to string first to work around update_option not setting the option if the value is false.
113 // This sets the option to either '1' if true or '' if false.
114 update_option( $setting, (string) $default, true );
115
116 $option = $default;
117 }
118
119 $this->options[ $setting ] = is_bool( $default ) ? (bool) $option : $option;
120 }
121
122 $this->url = esc_url_raw( ( is_ssl() ? 'https' : 'http' ) . '://' . ( isset( $_SERVER['HTTP_HOST'] ) ? wp_unslash( $_SERVER['HTTP_HOST'] ) : 'localhost' ) . ( isset( $_SERVER['REQUEST_URI'] ) ? wp_unslash( $_SERVER['REQUEST_URI'] ) : '' ) );
123 if ( str_contains( $this->url, '?' ) && ! isset( $_GET['p'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
124 $this->url = substr( $this->url, 0, strpos( $this->url, '?' ) );
125 }
126
127 $this->cloudflare = self::is_cloudflare();
128 $this->blog_id = Jetpack::get_option( 'id', 0 );
129 $this->mobile_device = jetpack_is_mobile( 'any', true );
130 $this->targeting_tags = array(
131 'WordAds' => 1,
132 'BlogId' => ( new Status() )->is_offline_mode() ? 0 : Jetpack_Options::get_option( 'id' ),
133 'Domain' => esc_js( wp_parse_url( home_url(), PHP_URL_HOST ) ),
134 'PageURL' => esc_js( $this->url ),
135 'LangId' => str_contains( get_bloginfo( 'language' ), 'en' ) ? 1 : 0, // TODO something else?
136 'AdSafe' => 1, // TODO.
137 );
138 }
139
140 /**
141 * Is this a mobile device?
142 *
143 * @return boolean true if the user is browsing on a mobile device (iPad not included)
144 *
145 * @since 4.5.0
146 */
147 public function is_mobile() {
148 return ! empty( $this->mobile_device );
149 }
150
151 /**
152 * Is this site served by CloudFlare?
153 *
154 * @return boolean true if site is being served via CloudFlare
155 *
156 * @since 4.5.0
157 */
158 public static function is_cloudflare() {
159 if (
160 defined( 'WORDADS_CLOUDFLARE' )
161 || isset( $_SERVER['HTTP_CF_CONNECTING_IP'] )
162 || isset( $_SERVER['HTTP_CF_IPCOUNTRY'] )
163 || isset( $_SERVER['HTTP_CF_VISITOR'] )
164 ) {
165 return true;
166 }
167
168 return false;
169 }
170
171 /**
172 * Is this an iOS device?
173 *
174 * @return boolean true if user is browsing in iOS device
175 *
176 * @since 4.5.0
177 */
178 public function is_ios() {
179 return in_array( $this->get_device(), array( 'ipad', 'iphone', 'ipod' ), true );
180 }
181
182 /**
183 * Returns the user's device (see user-agent.php) or 'desktop'
184 *
185 * @return string user device
186 *
187 * @since 4.5.0
188 */
189 public function get_device() {
190 global $agent_info;
191
192 if ( ! empty( $this->mobile_device ) ) {
193 return $this->mobile_device;
194 }
195
196 if ( $agent_info->is_ipad() ) {
197 return 'ipad';
198 }
199
200 return 'desktop';
201 }
202
203 /**
204 * Get page type.
205 *
206 * @return string The type of page that is being loaded
207 *
208 * @since 4.5.0
209 */
210 public function get_page_type() {
211 if ( ! empty( $this->page_type ) ) {
212 return $this->page_type;
213 }
214
215 if ( self::is_static_home() ) {
216 $this->page_type = 'static_home';
217 } elseif ( is_home() ) {
218 $this->page_type = 'home';
219 } elseif ( is_page() ) {
220 $this->page_type = 'page';
221 } elseif ( is_single() ) {
222 $this->page_type = 'post';
223 } elseif ( is_search() ) {
224 $this->page_type = 'search';
225 } elseif ( is_category() ) {
226 $this->page_type = 'category';
227 } elseif ( is_archive() ) {
228 $this->page_type = 'archive';
229 } else {
230 $this->page_type = 'wtf';
231 }
232
233 return $this->page_type;
234 }
235
236 /**
237 * Get IPW code.
238 *
239 * @return int The page type code for ipw config
240 *
241 * @since 5.6.0
242 */
243 public function get_page_type_ipw() {
244 if ( ! empty( $this->page_type_ipw ) ) {
245 return $this->page_type_ipw;
246 }
247
248 $page_type_ipw = 6;
249 if ( self::is_static_home() || is_home() || is_front_page() ) {
250 $page_type_ipw = 0;
251 } elseif ( is_page() ) {
252 $page_type_ipw = 2;
253 } elseif ( is_singular() ) {
254 $page_type_ipw = 1;
255 } elseif ( is_search() ) {
256 $page_type_ipw = 4;
257 } elseif ( is_category() || is_tag() || is_archive() || is_author() ) {
258 $page_type_ipw = 3;
259 } elseif ( is_404() ) {
260 $page_type_ipw = 5;
261 }
262
263 $this->page_type_ipw = $page_type_ipw;
264 return $page_type_ipw;
265 }
266
267 /**
268 * Returns true if page is static home
269 *
270 * @return boolean true if page is static home
271 *
272 * @since 4.5.0
273 */
274 public static function is_static_home() {
275 return is_front_page() &&
276 'page' === get_option( 'show_on_front' ) &&
277 get_option( 'page_on_front' );
278 }
279
280 /**
281 * Logic for if we should show an ad
282 *
283 * @since 4.5.0
284 */
285 public function should_show() {
286 global $wp_query;
287 if ( ( is_front_page() || is_home() ) && ! $this->options['wordads_display_front_page'] ) {
288 return false;
289 }
290
291 if ( is_single() && ! $this->options['wordads_display_post'] ) {
292 return false;
293 }
294
295 if ( is_page() && ! $this->options['wordads_display_page'] ) {
296 return false;
297 }
298
299 if ( ( is_archive() || is_search() ) && ! $this->options['wordads_display_archive'] ) {
300 return false;
301 }
302
303 if ( is_single() || ( is_page() && ! is_home() ) ) {
304 return true;
305 }
306
307 // TODO this would be a good place for allowing the user to specify.
308 if ( ( is_home() || is_archive() || is_search() ) && 0 === $wp_query->current_post ) {
309 return true;
310 }
311
312 return false;
313 }
314 }
315