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