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