PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 2.0.12
Advanced Ads – Ad Manager & AdSense v2.0.12
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 1 year ago display-conditions.php 10 months ago filesystem.php 2 years ago frontend_checks.php 1 year ago in-content-injector.php 1 year ago inline-css.php 1 year ago utils.php 1 year ago visitor-conditions.php 1 year ago
checks.php
398 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 $status = Advanced_Ads_Admin_Licenses::get_instance()->get_license_status( $_add_on['options_slug'] );
98
99 // check expiry date.
100 $expiry_date = Advanced_Ads_Admin_Licenses::get_instance()->get_license_expires( $_add_on['options_slug'] );
101
102 if ( $expiry_date && 'lifetime' !== $expiry_date && strtotime( $expiry_date ) < time() ) {
103 return true;
104 }
105
106 // don’t check if license is valid.
107 if ( 'valid' === $status ) {
108 continue;
109 }
110
111 // retrieve our license key from the DB.
112 $licenses = Advanced_Ads_Admin_Licenses::get_instance()->get_licenses();
113
114 $license_key = isset( $licenses[ $_add_on_key ] ) ? $licenses[ $_add_on_key ] : false;
115
116 if ( ! $license_key || 'valid' !== $status ) {
117 return true;
118 }
119 }
120
121 // remove notice, if one is given.
122 Advanced_Ads_Ad_Health_Notices::get_instance()->remove( 'license_invalid' );
123 return false;
124 }
125
126 /**
127 * Autoptimize plugin installed
128 * can change ad tags, especially inline css and scripts
129 *
130 * @link https://wordpress.org/plugins/autoptimize/
131 * @return bool true if Autoptimize is installed
132 */
133 public static function active_autoptimize() {
134
135 if ( defined( 'AUTOPTIMIZE_PLUGIN_VERSION' ) ) {
136 return true;
137 }
138
139 return false;
140 }
141
142 /**
143 * WP rocket plugin installed
144 *
145 * @return bool true if WP rocket is installed
146 */
147 public static function active_wp_rocket() {
148 if ( defined( 'WP_ROCKET_SLUG' ) ) {
149 return true;
150 }
151
152 return false;
153 }
154
155 /**
156 * Checks the settings of wp rocket to find out if combining of javascript files is enabled
157 *
158 * @return boolean true, when "Combine JavaScript files" is enabled
159 */
160 public static function is_wp_rocket_combine_js_enabled() {
161 if ( self::active_wp_rocket() ) {
162 $settings = get_option( 'wp_rocket_settings' );
163 if ( $settings ) {
164 if ( isset( $settings['minify_concatenate_js'] ) && $settings['minify_concatenate_js'] ) {
165 return true;
166 }
167 }
168 }
169 return false;
170 }
171
172 /**
173 * Any AMP plugin enabled
174 *
175 * @return bool true if AMP plugin is installed
176 */
177 public static function active_amp_plugin() {
178 // Accelerated Mobile Pages.
179 if ( function_exists( 'ampforwp_is_amp_endpoint' ) ) {
180 return true;
181 }
182
183 // AMP plugin.
184 if ( function_exists( 'is_amp_endpoint' ) ) {
185 return true;
186 }
187
188 // other plugins.
189 if ( function_exists( 'is_wp_amp' ) ) {
190 return true;
191 }
192
193 return false;
194 }
195
196 /**
197 * Checks if the preconditions are met to wrap an ad with <!--noptimize--> comments
198 *
199 * @return boolean
200 */
201 public static function requires_noptimize_wrapping() {
202 return self::active_autoptimize() || self::is_wp_rocket_combine_js_enabled();
203 }
204
205 /**
206 * Check for additional conflicting plugins
207 *
208 * @return array $plugins names of conflicting plugins
209 */
210 public static function conflicting_plugins() {
211 $conflicting_plugins = [];
212
213 if ( defined( 'Publicize_Base' ) ) { // JetPack Publicize module.
214 $conflicting_plugins[] = 'Jetpack – Publicize';
215 }
216 if ( defined( 'PF__PLUGIN_DIR' ) ) { // Facebook Instant Articles & Google AMP Pages by PageFrog.
217 $conflicting_plugins[] = 'Facebook Instant Articles & Google AMP Pages by PageFrog';
218 }
219 if ( defined( 'GT_VERSION' ) ) { // GT ShortCodes.
220 $conflicting_plugins[] = 'GT ShortCodes';
221 }
222 if ( class_exists( 'SimilarPosts', false ) ) { // Similar Posts, https://de.wordpress.org/plugins/similar-posts/.
223 $conflicting_plugins[] = 'Similar Posts';
224 }
225
226 return $conflicting_plugins;
227 }
228
229 /**
230 * Check if any of the global hide ads options is set
231 * ignore RSS feed setting, because it is standard
232 *
233 * @since 1.7.10
234 * @return bool
235 */
236 public static function ads_disabled() {
237 $options = Advanced_Ads::get_instance()->options();
238 if ( isset( $options['disabled-ads'] ) && is_array( $options['disabled-ads'] ) ) {
239 foreach ( $options['disabled-ads'] as $_key => $_value ) {
240 // don’t warn if "RSS Feed", "404", or "REST API" option are enabled, because they are normally not critical.
241 if ( ! empty( $_value ) && ! in_array( (string) $_key, [ 'feed', '404', 'rest-api' ], true ) ) {
242 return true;
243 }
244 }
245 }
246 return false;
247 }
248
249 /**
250 * Check for required php extensions
251 *
252 * @return array
253 */
254 public static function php_extensions() {
255
256 $missing_extensions = [];
257
258 if ( ! extension_loaded( 'dom' ) ) {
259 $missing_extensions[] = 'dom';
260 }
261
262 if ( ! extension_loaded( 'mbstring' ) ) {
263 $missing_extensions[] = 'mbstring';
264 }
265
266 return $missing_extensions;
267 }
268
269 /**
270 * Get the list of Advanced Ads constant defined by the user.
271 *
272 * @return array
273 */
274 public static function get_defined_constants() {
275 $constants = apply_filters(
276 'advanced-ads-constants',
277 [
278 'ADVADS_ADS_DISABLED',
279 'ADVADS_ALLOW_ADSENSE_ON_404',
280 'ADVADS_DISABLE_RESPONSIVE_IMAGES',
281 'ADVANCED_ADS_AD_DEBUG_FOR_ADMIN_ONLY',
282 'ADVANCED_ADS_DISABLE_ANALYTICS_ANONYMIZE_IP',
283 'ADVANCED_ADS_DISABLE_CHANGE',
284 'ADVANCED_ADS_DISABLE_CODE_HIGHLIGHTING',
285 'ADVANCED_ADS_DISABLE_SHORTCODE_BUTTON',
286 'ADVANCED_ADS_DISALLOW_PHP',
287 'ADVANCED_ADS_ENABLE_REVISIONS',
288 'ADVANCED_ADS_GEO_TEST_IP',
289 'ADVANCED_ADS_PRO_CUSTOM_POSITION_MOVE_INTO_HIDDEN',
290 'ADVANCED_ADS_PRO_PAGE_IMPR_EXDAYS',
291 'ADVANCED_ADS_PRO_REFERRER_EXDAYS',
292 'ADVANCED_ADS_RESPONSIVE_DISABLE_BROWSER_WIDTH',
293 'ADVANCED_ADS_SHOW_LICENSE_RESPONSE',
294 'ADVANCED_ADS_SUPPRESS_PLUGIN_ERROR_NOTICES',
295 'ADVANCED_ADS_TRACKING_DEBUG',
296 'ADVANCED_ADS_TRACKING_NO_HOURLY_LIMIT',
297 ]
298 );
299
300 $result = [];
301 foreach ( $constants as $constant ) {
302 if ( defined( $constant ) ) {
303 $result[] = $constant;
304 }
305 }
306 return $result;
307 }
308
309
310 /**
311 * WP Engine hosting detected
312 *
313 * @return bool true if site is hosted by WP Engine
314 */
315 public static function wp_engine_hosting() {
316 if ( defined( 'WPE_APIKEY' ) ) {
317 return true;
318 }
319
320 return false;
321 }
322
323 /**
324 * Notice for Adblocker module if assets have expired
325 */
326 public static function assets_expired() {
327 $plugin_options = Advanced_Ads::get_instance()->get_adblocker_options();
328 $adblocker_options = Advanced_Ads_Ad_Blocker::get_instance()->options();
329
330 return ! empty( $plugin_options['use-adblocker'] ) && empty( $adblocker_options['module_can_work'] );
331 }
332
333 /**
334 * Check for other ads.txt plugins
335 *
336 * @return array
337 */
338 public static function ads_txt_plugins() {
339
340 $ads_txt_plugins = [];
341
342 // Ads.txt Manager.
343 if ( function_exists( 'tenup_display_ads_txt' ) ) {
344 $ads_txt_plugins[] = 'Ads.txt Manager';
345 }
346
347 // todo:
348 // ads-txt-admin/unveil-media-ads-txt.php
349 // simple-ads-txt/bs_ads_txt.php
350 // ads-txt-manager/adstxtmanager.php
351 // monetizemore-ads-txt/wp-ads-txt.php
352 // authorized-sellers-manager/ads-txt-publisher.php.
353
354 return $ads_txt_plugins;
355 }
356
357 /**
358 * Check for activated plugins that manage header or footer code
359 *
360 * @return array
361 */
362 public static function header_footer_plugins() {
363
364 $plugins = [];
365
366 // Header Footer Code Manager.
367 if ( function_exists( 'hfcm_options_install' ) ) {
368 $plugins[] = 'Header Footer Code Manager';
369 }
370 // Head, Footer and Post Injections.
371 if ( function_exists( 'hefo_template_redirect' ) ) {
372 $plugins[] = 'Head, Footer and Post Injections';
373 }
374 // Insert Headers and Footers /insert-headers-and-footers/.
375 if ( class_exists( 'InsertHeadersAndFooters', false ) ) {
376 $plugins[] = 'Insert Headers and Footers';
377 }
378 // Header and Footer Scripts /header-and-footer-scripts/.
379 if ( class_exists( 'HeaderAndFooterScripts', false ) ) {
380 $plugins[] = 'Header and Footer Scripts';
381 }
382
383 return $plugins;
384 }
385
386 /**
387 * Check if monetize wizard has been completed or notice dismissed
388 *
389 * @return bool
390 */
391 public static function can_launch_wizard(): bool {
392 $wizard_done = get_option( Constants::OPTION_WIZARD_COMPLETED, false );
393 $notice_dismissed = get_user_meta( get_current_user_id(), Constants::USER_WIZARD_DISMISS, true );
394
395 return ! $wizard_done && ! $notice_dismissed;
396 }
397 }
398