PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.0-beta
Jetpack – WP Security, Backup, Speed, & Growth v16.0-beta
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 7 months ago class-wordads-api.php 7 months ago class-wordads-array-utils.php 7 months ago class-wordads-california-privacy.php 6 months ago class-wordads-ccpa-do-not-sell-link-widget.php 7 months ago class-wordads-consent-management-provider.php 6 months ago class-wordads-cron.php 7 months ago class-wordads-formats.php 7 months ago class-wordads-params.php 7 months ago class-wordads-shortcode.php 7 months ago class-wordads-sidebar-widget.php 7 months ago class-wordads-smart.php 2 weeks ago
class-wordads-params.php
330 lines
1 <?php
2 /**
3 * WordAds Param Class file.
4 *
5 * @package automattic/jetpack
6 */
7
8 use Automattic\Jetpack\Status;
9
10 if ( ! defined( 'ABSPATH' ) ) {
11 exit( 0 );
12 }
13
14 /**
15 * Class WordAds_Params
16 *
17 * Sets parameters for WordAds.
18 */
19 class WordAds_Params {
20 /**
21 * WordAds options
22 *
23 * @var array
24 */
25 public $options;
26
27 /**
28 * Current URL
29 *
30 * @access public
31 * @var string
32 */
33 public $url;
34
35 /**
36 * Is this site served by CloudFlare?
37 *
38 * @access public
39 * @var bool
40 */
41 public $cloudflare;
42
43 /**
44 * Jetpack Blog ID
45 *
46 * @var mixed
47 */
48 public $blog_id;
49
50 /**
51 * Determine if the current User Agent is a mobile device
52 *
53 * @var bool
54 */
55 public $mobile_device;
56
57 /**
58 * WordAds targeting tags
59 *
60 * @var array
61 */
62 public $targeting_tags;
63
64 /**
65 * Type of page that is being loaded
66 *
67 * @var string
68 */
69 public $page_type;
70
71 /**
72 * Page type code for IPW config
73 *
74 * @var int
75 */
76 public $page_type_ipw;
77
78 /**
79 * Is this an AMP request?
80 *
81 * @var bool
82 */
83 public $is_amp;
84
85 /**
86 * Setup parameters for serving the ads
87 *
88 * @since 4.5.0
89 */
90 public function __construct() {
91 // WordAds setting => default.
92 $settings = array(
93 'wordads_approved' => false,
94 'wordads_active' => false,
95 'wordads_house' => true,
96 'wordads_unsafe' => false,
97 'enable_header_ad' => true,
98 'wordads_second_belowpost' => true,
99 'wordads_inline_enabled' => true,
100 'wordads_bottom_sticky_enabled' => false,
101 'wordads_sidebar_sticky_right_enabled' => false,
102 'wordads_display_front_page' => true,
103 'wordads_display_post' => true,
104 'wordads_display_page' => true,
105 'wordads_display_archive' => true,
106 'wordads_custom_adstxt' => '',
107 'wordads_custom_adstxt_enabled' => false,
108 'wordads_ccpa_enabled' => false,
109 'wordads_ccpa_privacy_policy_url' => get_option( 'wp_page_for_privacy_policy' ) ? get_permalink( (int) get_option( 'wp_page_for_privacy_policy' ) ) : '',
110 'wordads_cmp_enabled' => false,
111 );
112
113 // Grab settings, or set as default if it doesn't exist.
114 $this->options = array();
115
116 foreach ( $settings as $setting => $default ) {
117 $option = get_option( $setting, null );
118
119 if ( $option === null ) {
120
121 // Handle retroactively setting wordads_custom_adstxt_enabled to true if custom ads.txt content is already entered.
122 if ( 'wordads_custom_adstxt_enabled' === $setting ) {
123 $default = get_option( 'wordads_custom_adstxt' ) !== '';
124 }
125
126 // Convert boolean options to string first to work around update_option not setting the option if the value is false.
127 // This sets the option to either '1' if true or '' if false.
128 update_option( $setting, (string) $default, true );
129
130 $option = $default;
131 }
132
133 $this->options[ $setting ] = is_bool( $default ) ? (bool) $option : $option;
134 }
135
136 $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'] ) : '' ) );
137 if ( str_contains( $this->url, '?' ) && ! isset( $_GET['p'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
138 $this->url = substr( $this->url, 0, strpos( $this->url, '?' ) );
139 }
140
141 $this->cloudflare = self::is_cloudflare();
142 $this->blog_id = Jetpack::get_option( 'id', 0 );
143 $this->mobile_device = jetpack_is_mobile( 'any', true );
144 $this->targeting_tags = array(
145 'WordAds' => 1,
146 'BlogId' => ( new Status() )->is_offline_mode() ? 0 : Jetpack_Options::get_option( 'id' ),
147 'Domain' => esc_js( wp_parse_url( home_url(), PHP_URL_HOST ) ),
148 'PageURL' => esc_js( $this->url ),
149 'LangId' => str_contains( get_bloginfo( 'language' ), 'en' ) ? 1 : 0, // TODO something else?
150 'AdSafe' => 1, // TODO.
151 );
152 $this->is_amp = function_exists( 'amp_is_request' ) && amp_is_request();
153 }
154
155 /**
156 * Is this a mobile device?
157 *
158 * @return boolean true if the user is browsing on a mobile device (iPad not included)
159 *
160 * @since 4.5.0
161 */
162 public function is_mobile() {
163 return ! empty( $this->mobile_device );
164 }
165
166 /**
167 * Is this site served by CloudFlare?
168 *
169 * @return boolean true if site is being served via CloudFlare
170 *
171 * @since 4.5.0
172 */
173 public static function is_cloudflare() {
174 if (
175 defined( 'WORDADS_CLOUDFLARE' )
176 || isset( $_SERVER['HTTP_CF_CONNECTING_IP'] )
177 || isset( $_SERVER['HTTP_CF_IPCOUNTRY'] )
178 || isset( $_SERVER['HTTP_CF_VISITOR'] )
179 ) {
180 return true;
181 }
182
183 return false;
184 }
185
186 /**
187 * Is this an iOS device?
188 *
189 * @return boolean true if user is browsing in iOS device
190 *
191 * @since 4.5.0
192 */
193 public function is_ios() {
194 return in_array( $this->get_device(), array( 'ipad', 'iphone', 'ipod' ), true );
195 }
196
197 /**
198 * Returns the user's device (see user-agent.php) or 'desktop'
199 *
200 * @return string user device
201 *
202 * @since 4.5.0
203 */
204 public function get_device() {
205 global $agent_info;
206
207 if ( ! empty( $this->mobile_device ) ) {
208 return $this->mobile_device;
209 }
210
211 if ( $agent_info->is_ipad() ) {
212 return 'ipad';
213 }
214
215 return 'desktop';
216 }
217
218 /**
219 * Get page type.
220 *
221 * @return string The type of page that is being loaded
222 *
223 * @since 4.5.0
224 */
225 public function get_page_type() {
226 if ( ! empty( $this->page_type ) ) {
227 return $this->page_type;
228 }
229
230 if ( self::is_static_home() ) {
231 $this->page_type = 'static_home';
232 } elseif ( is_home() ) {
233 $this->page_type = 'home';
234 } elseif ( is_page() ) {
235 $this->page_type = 'page';
236 } elseif ( is_single() ) {
237 $this->page_type = 'post';
238 } elseif ( is_search() ) {
239 $this->page_type = 'search';
240 } elseif ( is_category() ) {
241 $this->page_type = 'category';
242 } elseif ( is_archive() ) {
243 $this->page_type = 'archive';
244 } else {
245 $this->page_type = 'wtf';
246 }
247
248 return $this->page_type;
249 }
250
251 /**
252 * Get IPW code.
253 *
254 * @return int The page type code for ipw config
255 *
256 * @since 5.6.0
257 */
258 public function get_page_type_ipw() {
259 if ( ! empty( $this->page_type_ipw ) ) {
260 return $this->page_type_ipw;
261 }
262
263 $page_type_ipw = 6;
264 if ( self::is_static_home() || is_home() || is_front_page() ) {
265 $page_type_ipw = 0;
266 } elseif ( is_page() ) {
267 $page_type_ipw = 2;
268 } elseif ( is_singular() ) {
269 $page_type_ipw = 1;
270 } elseif ( is_search() ) {
271 $page_type_ipw = 4;
272 } elseif ( is_category() || is_tag() || is_archive() || is_author() ) {
273 $page_type_ipw = 3;
274 } elseif ( is_404() ) {
275 $page_type_ipw = 5;
276 }
277
278 $this->page_type_ipw = $page_type_ipw;
279 return $page_type_ipw;
280 }
281
282 /**
283 * Returns true if page is static home
284 *
285 * @return boolean true if page is static home
286 *
287 * @since 4.5.0
288 */
289 public static function is_static_home() {
290 return is_front_page() &&
291 'page' === get_option( 'show_on_front' ) &&
292 get_option( 'page_on_front' );
293 }
294
295 /**
296 * Logic for if we should show an ad
297 *
298 * @since 4.5.0
299 */
300 public function should_show() {
301 global $wp_query;
302 if ( ( is_front_page() || is_home() ) && ! $this->options['wordads_display_front_page'] ) {
303 return false;
304 }
305
306 if ( is_single() && ! $this->options['wordads_display_post'] ) {
307 return false;
308 }
309
310 if ( is_page() && ! $this->options['wordads_display_page'] ) {
311 return false;
312 }
313
314 if ( ( is_archive() || is_search() ) && ! $this->options['wordads_display_archive'] ) {
315 return false;
316 }
317
318 if ( is_single() || ( is_page() && ! is_home() ) ) {
319 return true;
320 }
321
322 // TODO this would be a good place for allowing the user to specify.
323 if ( ( is_home() || is_archive() || is_search() ) && 0 === $wp_query->current_post ) {
324 return true;
325 }
326
327 return false;
328 }
329 }
330