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