PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 2.0.21
Advanced Ads – Ad Manager & AdSense v2.0.21
2.0.23 2.0.22 2.0.21 1.38.0 1.39.0 1.39.1 1.39.2 1.39.3 1.39.4 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.40.0 1.40.1 1.40.2 1.41.0 1.42.0 1.42.1 1.42.2 1.43.0 1.44.0 1.44.1 1.45.0 1.45.1 1.46.0 1.47.0 1.47.1 1.47.2 1.47.3 1.47.4 1.47.5 1.48.0 1.48.1 1.49.0 1.5.0 1.5.0.1 1.5.1 1.5.2 1.5.2.1 1.5.4 1.5.4.1 1.5.5 1.50.0 1.51.0 1.51.1 1.51.2 1.51.3 1.52.0 1.52.1 1.52.2 1.52.3 1.52.4 1.53.0 1.53.1 1.53.2 1.54.0 1.54.1 1.55.0 1.56.0 1.56.1 1.56.2 1.56.3 1.56.4 1.6 1.6.1 1.6.10 1.6.10.1 1.6.10.2 1.6.11 1.6.11.1 1.6.12 1.6.13 1.6.14 1.6.15 1.6.16 1.6.17 1.6.17.1 1.6.17.2 1.6.2 1.6.2.1 1.6.3 1.6.4 1.6.4.1 1.6.5 1.6.6 1.6.6.1 1.6.7 1.6.7.1 1.6.8 1.6.8.1 1.6.8.2 1.6.8.3 1.6.9 1.6.9.1 1.6.9.2 1.6.9.3 1.6.9.4 1.7 1.7.0.1 1.7.0.2 1.7.0.3 1.7.1 1.7.1.1 1.7.1.2 1.7.1.3 1.7.1.4 1.7.1.5 1.7.10 trunk 1.7.11 1.0.1 1.7.12 1.0.2 1.7.13 1.0.3 1.7.14 1.1.0 1.7.15 1.1.1 1.7.16 1.1.2 1.7.17 1.1.3 1.7.18 1.10 1.7.19 1.10.1 1.7.2 1.10.10 1.7.2.1 1.10.11 1.7.20 1.10.12 1.7.21 1.10.2 1.7.22 1.10.3 1.7.23 1.10.4 1.7.24 1.10.5 1.7.25 1.10.6 1.7.3 1.10.7 1.7.4 1.10.8 1.7.4.1 1.10.9 1.7.4.2 1.11 1.7.4.3 1.11.1 1.7.4.4 1.11.2 1.7.4.5 1.12 1.7.5 1.13 1.7.5.1 1.13.1 1.7.6 1.13.2 1.7.7 1.13.3 1.7.8 1.13.4 1.7.9 1.13.5 1.7.9.1 1.13.6 1.7.9.2 1.13.7 1.7.9.3 1.13.8 1.8 1.14 1.8.1 1.14.1 1.8.10 1.14.10 1.8.11 1.14.11 1.8.12 1.14.2 1.8.13 1.14.3 1.8.14 1.14.4 1.8.15 1.14.5 1.8.16 1.14.6 1.8.17 1.14.7 1.8.18 1.14.8 1.8.19 1.14.9 1.8.2 1.15 1.8.20 1.16 1.8.21 1.16.1 1.8.22 1.17 1.8.23 1.17.1 1.8.24 1.17.10 1.8.25 1.17.10-rc.1 1.8.26 1.17.11 1.8.27 1.17.12 1.8.28 1.17.12-rc.1 1.8.29 1.17.2 1.8.3 1.17.3 1.8.30 1.17.4 1.8.4 1.17.5 1.8.5 1.17.6 1.8.6 1.17.7 1.8.7 1.17.8 1.8.8 1.17.9 1.8.9 1.17.9-beta.1 1.9 1.18.0 2.0.0 1.19.0 2.0.1 1.19.1 2.0.10 1.2 2.0.11 1.2.1 2.0.12 1.2.2 2.0.13 1.2.3 2.0.14 1.2.4 2.0.15 1.2.5 2.0.16 1.2.6 2.0.17 1.2.7 2.0.18 1.20.0 2.0.19 1.20.0-rc.1 2.0.2 1.20.0-rc.2 2.0.20 1.20.1 2.0.3 1.20.2 2.0.4 1.20.3 2.0.5 1.21.0 2.0.6 1.21.1 2.0.7 1.22.0 2.0.8 1.22.1 2.0.9 1.22.2 1.23.0 1.23.1 1.23.2 1.24.0 1.24.1 1.24.2 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.29.0 1.29.1 1.3 1.3.1 1.3.10 1.3.11 1.3.12 1.3.13 1.3.14 1.3.15 1.3.16 1.3.17 1.3.18 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.30.0 1.30.1 1.30.2 1.30.2-rc.1 1.30.3 1.30.4 1.30.4-rc.1 1.30.5 1.31.0 1.31.1 1.32.0 1.32.0-rc.1 1.33.0 1.33.1 1.33.2 1.34.0 1.35.0 1.35.1 1.36.0 1.36.1 1.36.2 1.36.3 1.37.0 1.37.1 1.37.2
advanced-ads / classes / checks.php
advanced-ads / classes Last commit date
ad-health-notices.php 1 year ago checks.php 3 months ago display-conditions.php 10 months ago filesystem.php 2 years ago frontend_checks.php 1 year ago inline-css.php 1 year ago utils.php 1 year ago visitor-conditions.php 1 year ago
checks.php
402 lines
1 <?php // phpcs:ignoreFile
2
3 use AdvancedAds\Constants;
4 use AdvancedAds\Utilities\Conditional;
5 use AdvancedAds\Utilities\Data;
6
7 /**
8 * Checks for various things
9 *
10 * @since 1.6.9
11 */
12 class Advanced_Ads_Checks {
13
14 /**
15 * Minimum required PHP version of Advanced Ads
16 */
17 const MINIMUM_PHP_VERSION = '5.6.20';
18
19 /**
20 * A Quiz plugin is active
21 *
22 * @return bool true if any quiz plugin is active.
23 */
24 public static function active_quiz_plugins() {
25 return defined( 'AYS_QUIZ_VERSION' )
26 || defined( 'FORMINATOR_PLUGIN_BASENAME' )
27 || defined( 'QSM_PLUGIN_PATH' )
28 || class_exists( 'GFForms', false );
29 }
30
31 /**
32 * Show the list of potential issues
33 */
34 public static function show_issues() {
35 include_once ADVADS_ABSPATH . '/admin/views/checks.php';
36 }
37
38 /**
39 * PHP version minimum
40 *
41 * @return bool true if uses the minimum PHP version or higher
42 */
43 public static function php_version_minimum() {
44
45 if ( version_compare( phpversion(), self::MINIMUM_PHP_VERSION, '>=' ) ) {
46 return true;
47 }
48
49 return false;
50 }
51
52 /**
53 * Caching used
54 *
55 * @deprecated 1.48.0
56 *
57 * @return bool true if active
58 */
59 public static function cache() {
60 _deprecated_function( __METHOD__, '1.48.0', '\AdvancedAds\Utilities\Conditional::has_cache_plugins()' );
61 return Conditional::has_cache_plugins();
62 }
63
64 /**
65 * WordPress update available
66 *
67 * @return bool true if WordPress update available
68 */
69 public static function wp_update_available() {
70
71 $update_data = wp_get_update_data();
72 $count = absint( $update_data['counts']['wordpress'] );
73
74 if ( $count ) {
75 return true;
76 }
77
78 return false;
79 }
80
81 /**
82 * Check if license keys are missing or invalid or expired
83 *
84 * @since 1.6.6
85 * @update 1.8.21 also check for expired licenses
86 * @return true if there are missing licenses
87 */
88 public static function licenses_invalid() {
89 $add_ons = Data::get_addons();
90
91 if ( [] === $add_ons ) {
92 Advanced_Ads_Ad_Health_Notices::get_instance()->remove( 'license_invalid' );
93 return false;
94 }
95
96 foreach ( $add_ons as $_add_on_key => $_add_on ) {
97 if ( 'slider-ads' === $_add_on['id'] ) {
98 continue;
99 }
100
101 $status = Advanced_Ads_Admin_Licenses::get_instance()->get_license_status( $_add_on['options_slug'] );
102
103 // check expiry date.
104 $expiry_date = Advanced_Ads_Admin_Licenses::get_instance()->get_license_expires( $_add_on['options_slug'] );
105
106 if ( $expiry_date && 'lifetime' !== $expiry_date && strtotime( $expiry_date ) < time() ) {
107 return true;
108 }
109
110 // don’t check if license is valid.
111 if ( 'valid' === $status ) {
112 continue;
113 }
114
115 // retrieve our license key from the DB.
116 $licenses = Advanced_Ads_Admin_Licenses::get_instance()->get_licenses();
117
118 $license_key = isset( $licenses[ $_add_on_key ] ) ? $licenses[ $_add_on_key ] : false;
119
120 if ( ! $license_key || 'valid' !== $status ) {
121 return true;
122 }
123 }
124
125 // remove notice, if one is given.
126 Advanced_Ads_Ad_Health_Notices::get_instance()->remove( 'license_invalid' );
127 return false;
128 }
129
130 /**
131 * Autoptimize plugin installed
132 * can change ad tags, especially inline css and scripts
133 *
134 * @link https://wordpress.org/plugins/autoptimize/
135 * @return bool true if Autoptimize is installed
136 */
137 public static function active_autoptimize() {
138
139 if ( defined( 'AUTOPTIMIZE_PLUGIN_VERSION' ) ) {
140 return true;
141 }
142
143 return false;
144 }
145
146 /**
147 * WP rocket plugin installed
148 *
149 * @return bool true if WP rocket is installed
150 */
151 public static function active_wp_rocket() {
152 if ( defined( 'WP_ROCKET_SLUG' ) ) {
153 return true;
154 }
155
156 return false;
157 }
158
159 /**
160 * Checks the settings of wp rocket to find out if combining of javascript files is enabled
161 *
162 * @return boolean true, when "Combine JavaScript files" is enabled
163 */
164 public static function is_wp_rocket_combine_js_enabled() {
165 if ( self::active_wp_rocket() ) {
166 $settings = get_option( 'wp_rocket_settings' );
167 if ( $settings ) {
168 if ( isset( $settings['minify_concatenate_js'] ) && $settings['minify_concatenate_js'] ) {
169 return true;
170 }
171 }
172 }
173 return false;
174 }
175
176 /**
177 * Any AMP plugin enabled
178 *
179 * @return bool true if AMP plugin is installed
180 */
181 public static function active_amp_plugin() {
182 // Accelerated Mobile Pages.
183 if ( function_exists( 'ampforwp_is_amp_endpoint' ) ) {
184 return true;
185 }
186
187 // AMP plugin.
188 if ( function_exists( 'is_amp_endpoint' ) ) {
189 return true;
190 }
191
192 // other plugins.
193 if ( function_exists( 'is_wp_amp' ) ) {
194 return true;
195 }
196
197 return false;
198 }
199
200 /**
201 * Checks if the preconditions are met to wrap an ad with <!--noptimize--> comments
202 *
203 * @return boolean
204 */
205 public static function requires_noptimize_wrapping() {
206 return self::active_autoptimize() || self::is_wp_rocket_combine_js_enabled();
207 }
208
209 /**
210 * Check for additional conflicting plugins
211 *
212 * @return array $plugins names of conflicting plugins
213 */
214 public static function conflicting_plugins() {
215 $conflicting_plugins = [];
216
217 if ( defined( 'Publicize_Base' ) ) { // JetPack Publicize module.
218 $conflicting_plugins[] = 'Jetpack – Publicize';
219 }
220 if ( defined( 'PF__PLUGIN_DIR' ) ) { // Facebook Instant Articles & Google AMP Pages by PageFrog.
221 $conflicting_plugins[] = 'Facebook Instant Articles & Google AMP Pages by PageFrog';
222 }
223 if ( defined( 'GT_VERSION' ) ) { // GT ShortCodes.
224 $conflicting_plugins[] = 'GT ShortCodes';
225 }
226 if ( class_exists( 'SimilarPosts', false ) ) { // Similar Posts, https://de.wordpress.org/plugins/similar-posts/.
227 $conflicting_plugins[] = 'Similar Posts';
228 }
229
230 return $conflicting_plugins;
231 }
232
233 /**
234 * Check if any of the global hide ads options is set
235 * ignore RSS feed setting, because it is standard
236 *
237 * @since 1.7.10
238 * @return bool
239 */
240 public static function ads_disabled() {
241 $options = Advanced_Ads::get_instance()->options();
242 if ( isset( $options['disabled-ads'] ) && is_array( $options['disabled-ads'] ) ) {
243 foreach ( $options['disabled-ads'] as $_key => $_value ) {
244 // don’t warn if "RSS Feed", "404", or "REST API" option are enabled, because they are normally not critical.
245 if ( ! empty( $_value ) && ! in_array( (string) $_key, [ 'feed', '404', 'rest-api' ], true ) ) {
246 return true;
247 }
248 }
249 }
250 return false;
251 }
252
253 /**
254 * Check for required php extensions
255 *
256 * @return array
257 */
258 public static function php_extensions() {
259
260 $missing_extensions = [];
261
262 if ( ! extension_loaded( 'dom' ) ) {
263 $missing_extensions[] = 'dom';
264 }
265
266 if ( ! extension_loaded( 'mbstring' ) ) {
267 $missing_extensions[] = 'mbstring';
268 }
269
270 return $missing_extensions;
271 }
272
273 /**
274 * Get the list of Advanced Ads constant defined by the user.
275 *
276 * @return array
277 */
278 public static function get_defined_constants() {
279 $constants = apply_filters(
280 'advanced-ads-constants',
281 [
282 'ADVADS_ADS_DISABLED',
283 'ADVADS_ALLOW_ADSENSE_ON_404',
284 'ADVADS_DISABLE_RESPONSIVE_IMAGES',
285 'ADVANCED_ADS_AD_DEBUG_FOR_ADMIN_ONLY',
286 'ADVANCED_ADS_DISABLE_ANALYTICS_ANONYMIZE_IP',
287 'ADVANCED_ADS_DISABLE_CHANGE',
288 'ADVANCED_ADS_DISABLE_CODE_HIGHLIGHTING',
289 'ADVANCED_ADS_DISABLE_SHORTCODE_BUTTON',
290 'ADVANCED_ADS_DISALLOW_PHP',
291 'ADVANCED_ADS_ENABLE_REVISIONS',
292 'ADVANCED_ADS_GEO_TEST_IP',
293 'ADVANCED_ADS_PRO_CUSTOM_POSITION_MOVE_INTO_HIDDEN',
294 'ADVANCED_ADS_PRO_PAGE_IMPR_EXDAYS',
295 'ADVANCED_ADS_PRO_REFERRER_EXDAYS',
296 'ADVANCED_ADS_RESPONSIVE_DISABLE_BROWSER_WIDTH',
297 'ADVANCED_ADS_SHOW_LICENSE_RESPONSE',
298 'ADVANCED_ADS_SUPPRESS_PLUGIN_ERROR_NOTICES',
299 'ADVANCED_ADS_TRACKING_DEBUG',
300 'ADVANCED_ADS_TRACKING_NO_HOURLY_LIMIT',
301 ]
302 );
303
304 $result = [];
305 foreach ( $constants as $constant ) {
306 if ( defined( $constant ) ) {
307 $result[] = $constant;
308 }
309 }
310 return $result;
311 }
312
313
314 /**
315 * WP Engine hosting detected
316 *
317 * @return bool true if site is hosted by WP Engine
318 */
319 public static function wp_engine_hosting() {
320 if ( defined( 'WPE_APIKEY' ) ) {
321 return true;
322 }
323
324 return false;
325 }
326
327 /**
328 * Notice for Adblocker module if assets have expired
329 */
330 public static function assets_expired() {
331 $plugin_options = Advanced_Ads::get_instance()->get_adblocker_options();
332 $adblocker_options = Advanced_Ads_Ad_Blocker::get_instance()->options();
333
334 return ! empty( $plugin_options['use-adblocker'] ) && empty( $adblocker_options['module_can_work'] );
335 }
336
337 /**
338 * Check for other ads.txt plugins
339 *
340 * @return array
341 */
342 public static function ads_txt_plugins() {
343
344 $ads_txt_plugins = [];
345
346 // Ads.txt Manager.
347 if ( function_exists( 'tenup_display_ads_txt' ) ) {
348 $ads_txt_plugins[] = 'Ads.txt Manager';
349 }
350
351 // todo:
352 // ads-txt-admin/unveil-media-ads-txt.php
353 // simple-ads-txt/bs_ads_txt.php
354 // ads-txt-manager/adstxtmanager.php
355 // monetizemore-ads-txt/wp-ads-txt.php
356 // authorized-sellers-manager/ads-txt-publisher.php.
357
358 return $ads_txt_plugins;
359 }
360
361 /**
362 * Check for activated plugins that manage header or footer code
363 *
364 * @return array
365 */
366 public static function header_footer_plugins() {
367
368 $plugins = [];
369
370 // Header Footer Code Manager.
371 if ( function_exists( 'hfcm_options_install' ) ) {
372 $plugins[] = 'Header Footer Code Manager';
373 }
374 // Head, Footer and Post Injections.
375 if ( function_exists( 'hefo_template_redirect' ) ) {
376 $plugins[] = 'Head, Footer and Post Injections';
377 }
378 // Insert Headers and Footers /insert-headers-and-footers/.
379 if ( class_exists( 'InsertHeadersAndFooters', false ) ) {
380 $plugins[] = 'Insert Headers and Footers';
381 }
382 // Header and Footer Scripts /header-and-footer-scripts/.
383 if ( class_exists( 'HeaderAndFooterScripts', false ) ) {
384 $plugins[] = 'Header and Footer Scripts';
385 }
386
387 return $plugins;
388 }
389
390 /**
391 * Check if monetize wizard has been completed or notice dismissed
392 *
393 * @return bool
394 */
395 public static function can_launch_wizard(): bool {
396 $wizard_done = get_option( Constants::OPTION_WIZARD_COMPLETED, false );
397 $notice_dismissed = get_user_meta( get_current_user_id(), Constants::USER_WIZARD_DISMISS, true );
398
399 return ! $wizard_done && ! $notice_dismissed;
400 }
401 }
402