PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 1.8.19
Advanced Ads – Ad Manager & AdSense v1.8.19
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 / plugin.php
advanced-ads / classes Last commit date
EDD_SL_Plugin_Updater.php 8 years ago ad-ajax.php 9 years ago ad-debug.php 8 years ago ad-model.php 9 years ago ad-select.php 9 years ago ad.php 8 years ago ad_ajax_callbacks.php 8 years ago ad_group.php 8 years ago ad_placements.php 8 years ago ad_type_abstract.php 11 years ago ad_type_content.php 8 years ago ad_type_dummy.php 8 years ago ad_type_group.php 8 years ago ad_type_image.php 8 years ago ad_type_plain.php 9 years ago checks.php 9 years ago display-conditions.php 8 years ago filesystem.php 8 years ago frontend_checks.php 8 years ago plugin.php 8 years ago upgrades.php 9 years ago utils.php 9 years ago visitor-conditions.php 8 years ago widget.php 8 years ago
plugin.php
671 lines
1 <?php
2
3 /**
4 * Wordpress integration and definitions:
5 *
6 * - posttypes
7 * - taxonomy
8 * - textdomain
9 *
10 * @since 1.5.0
11 */
12 class Advanced_Ads_Plugin {
13 /**
14 *
15 * @var Advanced_Ads_Plugin
16 */
17 protected static $instance;
18
19 /**
20 *
21 * @var Advanced_Ads_Model
22 */
23 protected $model;
24
25 /**
26 * plugin options
27 *
28 * @since 1.0.1
29 * @var array (if loaded)
30 */
31 protected $options;
32
33 /**
34 * interal plugin options – set by the plugin
35 *
36 * @since 1.4.5
37 * @var array (if loaded)
38 */
39 protected $internal_options;
40
41 /**
42 * default prefix of selectors (id, class) in the frontend
43 * can be changed by options
44 *
45 * @var Advanced_Ads_Plugin
46 */
47 const DEFAULT_FRONTEND_PREFIX = 'advads-';
48
49 /**
50 *
51 * @var frontend prefix for classes and IDs
52 */
53 private $frontend_prefix;
54
55
56 private function __construct() {
57 register_activation_hook( ADVADS_BASE, array( $this, 'activate' ) );
58 register_deactivation_hook( ADVADS_BASE, array( $this, 'deactivate' ) );
59 register_uninstall_hook( ADVADS_BASE, array( 'Advanced_Ads_Plugin', 'uninstall' ) );
60
61 add_action( 'plugins_loaded', array( $this, 'wp_plugins_loaded' ), 10 );
62 }
63
64 /**
65 *
66 * @return Advanced_Ads_Plugin
67 */
68 public static function get_instance() {
69 // If the single instance hasn't been set, set it now.
70 if ( null === self::$instance ) {
71 self::$instance = new self;
72 }
73
74 return self::$instance;
75 }
76
77 /**
78 *
79 * @param Advanced_Ads_Model $model
80 */
81 public function set_model(Advanced_Ads_Model $model) {
82 $this->model = $model;
83 }
84
85 public function wp_plugins_loaded() {
86 // Load plugin text domain
87 $this->load_plugin_textdomain();
88
89 $internal_options = $this->internal_options();
90
91 /**
92 * run upgrades, if this is a new version or version does not exist
93 */
94 if ( ! defined( 'DOING_AJAX' ) && ( ! isset( $internal_options['version'] ) || version_compare( $internal_options['version'], ADVADS_VERSION, '<' ) ) ) {
95 new Advanced_Ads_Upgrades();
96 }
97
98 // activate plugin when new blog is added on multisites // -TODO this is admin-only
99 add_action( 'wpmu_new_blog', array( $this, 'activate_new_site' ) );
100
101 // Load public-facing style sheet and JavaScript.
102 add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_styles' ) );
103 add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
104 add_action( 'wp_head', array( $this, 'print_head_scripts' ), 7 );
105
106 // add short codes
107 add_shortcode( 'the_ad', array( $this, 'shortcode_display_ad' ) );
108 add_shortcode( 'the_ad_group', array( $this, 'shortcode_display_ad_group' ) );
109 add_shortcode( 'the_ad_placement', array( $this, 'shortcode_display_ad_placement' ) );
110
111 // remove default ad group menu item // -TODO only for admin
112 add_action( 'admin_menu', array( $this, 'remove_taxonomy_menu_item' ) );
113 // load widgets
114 add_action( 'widgets_init', array( $this, 'widget_init' ) );
115
116 // load display conditions
117 Advanced_Ads_Display_Conditions::get_instance();
118 new Advanced_Ads_Frontend_Checks;
119 }
120
121 /**
122 * Register and enqueue public-facing style sheet.
123 *
124 * @since 1.0.0
125 */
126 public function enqueue_styles() {
127 // wp_enqueue_style( $this->get_plugin_slug() . '-plugin-styles', plugins_url('assets/css/public.css', __FILE__), array(), ADVADS_VERSION);
128 }
129
130 /**
131 * Return the plugin slug.
132 *
133 * @since 1.0.0
134 * @return Plugin slug variable.
135 */
136 public function get_plugin_slug() {
137 return ADVADS_SLUG;
138 }
139
140 /**
141 * Register and enqueues public-facing JavaScript files.
142 *
143 * @since 1.0.0
144 */
145 public function enqueue_scripts() {
146 // wp_enqueue_script( $this->get_plugin_slug() . '-plugin-script', plugins_url('assets/js/public.js', __FILE__), array('jquery'), ADVADS_VERSION);
147 $options = $this->options();
148 $activated_js = apply_filters( 'advanced-ads-activate-advanced-js', isset( $options['advanced-js'] ) );
149 if ( $activated_js ){
150 wp_enqueue_script( $this->get_plugin_slug() . '-advanced-js', ADVADS_BASE_URL . 'public/assets/js/advanced.js', array( 'jquery' ), ADVADS_VERSION );
151 }
152 }
153
154 /**
155 * Print public-facing JavaScript in the HTML head.
156 *
157 * @since untagged
158 */
159 public function print_head_scripts() {
160 /**
161 * Usage example in add-ons:
162 * ( window.advanced_ads_ready || jQuery( document ).ready ).call( null, function() {
163 * // Called when DOM is ready.
164 * } );
165 */
166 ?>
167 <!--noptimize--><script>
168 <?php if ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) {
169 readfile( ADVADS_BASE_PATH . 'public/assets/js/ready.js' );
170 } else { ?>
171 advanced_ads_ready=function(){var fns=[],listener,doc=typeof document==="object"&&document,hack=doc&&doc.documentElement.doScroll,domContentLoaded="DOMContentLoaded",loaded=doc&&(hack?/^loaded|^c/:/^loaded|^i|^c/).test(doc.readyState);if(!loaded&&doc){listener=function(){doc.removeEventListener(domContentLoaded,listener);window.removeEventListener("load",listener);loaded=1;while(listener=fns.shift())listener()};doc.addEventListener(domContentLoaded,listener);window.addEventListener("load",listener)}return function(fn){loaded?setTimeout(fn,0):fns.push(fn)}}();
172 <?php
173 }
174 ?></script><!--/noptimize-->
175 <?php
176 }
177
178 public function widget_init() {
179 register_widget( 'Advanced_Ads_Widget' );
180 }
181
182 /**
183 * Fired when a new site is activated with a WPMU environment.
184 *
185 * @since 1.0.0
186 * @param int $blog_id ID of the new blog.
187 */
188 public function activate_new_site($blog_id) {
189
190 if ( 1 !== did_action( 'wpmu_new_blog' ) ) {
191 return;
192 }
193
194 switch_to_blog( $blog_id );
195 $this->single_activate();
196 restore_current_blog();
197 }
198
199 /**
200 * Fired for each blog when the plugin is activated.
201 *
202 * @since 1.0.0
203 */
204 protected function single_activate() {
205 // $this->post_types_rewrite_flush();
206 // -TODO inform modules
207 $this->create_capabilities();
208 }
209
210 /**
211 * Fired for each blog when the plugin is deactivated.
212 *
213 * @since 1.0.0
214 */
215 protected function single_deactivate() {
216 // -TODO inform modules
217 $this->remove_capabilities();
218 }
219
220 /**
221 * Load the plugin text domain for translation.
222 *
223 * @since 1.0.0
224 */
225 public function load_plugin_textdomain() {
226 // $locale = apply_filters('advanced-ads-plugin-locale', get_locale(), $domain);
227 load_plugin_textdomain( ADVADS_SLUG, false, ADVADS_BASE_DIR . '/languages' );
228 }
229
230 /**
231 * Fired when the plugin is activated.
232 *
233 * @since 1.0.0
234 * @param boolean $network_wide True if WPMU superadmin uses
235 * "Network Activate" action, false if
236 * WPMU is disabled or plugin is
237 * activated on an individual blog.
238 */
239 public function activate($network_wide) {
240 if ( function_exists( 'is_multisite' ) && is_multisite() ) {
241
242 if ( $network_wide ) {
243 // Get all blog ids
244 global $wpdb;
245 $blog_ids = $wpdb->get_col( "SELECT blog_id FROM {$wpdb->blogs}" );
246 $original_blog_id = $wpdb->blogid;
247
248 foreach ( $blog_ids as $blog_id ) {
249 switch_to_blog( $blog_id );
250 $this->single_activate();
251 }
252
253 switch_to_blog( $original_blog_id );
254 } else {
255 $this->single_activate();
256 }
257 } else {
258 $this->single_activate();
259 }
260 }
261
262 /**
263 * Fired when the plugin is deactivated.
264 *
265 * @since 1.0.0
266 * @param boolean $network_wide
267 *
268 * True if WPMU superadmin uses
269 * "Network Deactivate" action, false if
270 * WPMU is disabled or plugin is
271 * deactivated on an individual blog.
272 */
273 public function deactivate($network_wide) {
274 if ( function_exists( 'is_multisite' ) && is_multisite() ) {
275
276 if ( $network_wide ) {
277 // Get all blog ids
278 global $wpdb;
279 $blog_ids = $wpdb->get_col( "SELECT blog_id FROM {$wpdb->blogs}" );
280 $original_blog_id = $wpdb->blogid;
281
282 foreach ( $blog_ids as $blog_id ) {
283 switch_to_blog( $blog_id );
284 $this->single_deactivate();
285 }
286
287 switch_to_blog( $original_blog_id );
288 } else {
289 $this->single_deactivate();
290 }
291 } else {
292 $this->single_deactivate();
293 }
294 }
295
296 /**
297 * flush rewrites on plugin activation so permalinks for them work from the beginning on
298 *
299 * @since 1.0.0
300 * @link http://codex.wordpress.org/Function_Reference/register_post_type#Flushing_Rewrite_on_Activation
301 */
302 /*public function post_types_rewrite_flush(){
303 // load custom post type
304 Advanced_Ads::get_instance()->create_post_types();
305 // flush rewrite rules
306 flush_rewrite_rules();
307 }*/
308
309 /**
310 * remove WP tag edit page for the ad group taxonomy
311 * needed, because we can’t remove it with `show_ui` without also removing the meta box
312 *
313 * @since 1.0.0
314 */
315 public function remove_taxonomy_menu_item() {
316 remove_submenu_page( 'edit.php?post_type=advanced_ads', 'edit-tags.php?taxonomy=advanced_ads_groups&amp;post_type=advanced_ads' );
317 }
318
319 /**
320 * shortcode to include ad in frontend
321 *
322 * @since 1.0.0
323 * @param arr $atts
324 */
325 public function shortcode_display_ad($atts){
326 $atts = is_array( $atts ) ? $atts : array();
327 $id = isset($atts['id']) ? (int) $atts['id'] : 0;
328 $atts = $this->prepare_shortcode_atts( $atts );
329
330 // use the public available function here
331 return get_ad( $id, $atts );
332 }
333
334 /**
335 * shortcode to include ad from an ad group in frontend
336 *
337 * @since 1.0.0
338 * @param arr $atts
339 */
340 public function shortcode_display_ad_group($atts){
341 $atts = is_array( $atts ) ? $atts : array();
342 $id = isset($atts['id']) ? (int) $atts['id'] : 0;
343 $atts = $this->prepare_shortcode_atts( $atts );
344
345 // use the public available function here
346 return get_ad_group( $id, $atts );
347 }
348
349 /**
350 * shortcode to display content of an ad placement in frontend
351 *
352 * @since 1.1.0
353 * @param arr $atts
354 */
355 public function shortcode_display_ad_placement($atts){
356 $atts = is_array( $atts ) ? $atts : array();
357 $id = isset($atts['id']) ? (string) $atts['id'] : '';
358 $atts = $this->prepare_shortcode_atts( $atts );
359
360 // use the public available function here
361 return get_ad_placement( $id, $atts );
362 }
363
364 /**
365 * Prepare shortcode attributes.
366 *
367 * @param array $atts array with strings
368 * @return array
369 */
370 private function prepare_shortcode_atts( $atts ) {
371 $result = array();
372
373 /**
374 * Prepare attributes by converting strings to multi-dimensional array
375 * Example: [ 'output__margin__top' => 1 ] => ['output']['margin']['top'] = 1
376 */
377 if ( ! defined( 'ADVANCED_ADS_DISABLE_CHANGE' ) || ! ADVANCED_ADS_DISABLE_CHANGE ) {
378 foreach ( $atts as $attr => $data ) {
379 $levels = explode( '__', $attr );
380 $last = array_pop( $levels );
381
382 $cur_lvl = &$result;
383
384 foreach ( $levels as $lvl ) {
385 if ( ! isset( $cur_lvl[ $lvl ] ) ) {
386 $cur_lvl[ $lvl ] = array();
387 }
388
389 $cur_lvl = &$cur_lvl[ $lvl ];
390 }
391
392 $cur_lvl[ $last ] = $data;
393 }
394
395 $result = array_diff_key( $result, array( 'id' => false, 'blog_id' => false, 'ad_args' => false ) );
396 }
397
398 // Ad type: 'content' and a shortcode inside.
399 if ( isset( $atts['ad_args'] ) ) {
400 $result = array_merge( $result, json_decode( urldecode( $atts['ad_args'] ) ,true) );
401
402 }
403
404 return $result;
405 }
406
407 /**
408 * return plugin options
409 * these are the options updated by the user
410 *
411 * @since 1.0.1
412 * @return array $options
413 * @todo parse default options
414 */
415 public function options() {
416 if ( ! isset( $this->options ) ) {
417 $this->options = get_option( ADVADS_SLUG, array() );
418 }
419
420 return $this->options;
421 }
422
423 /**
424 * update plugin options (not for settings page, but if automatic options are needed)
425 *
426 * @since 1.5.1
427 * @param array $options new options
428 */
429 public function update_options( array $options ) {
430 // do not allow to clear options
431 if ( $options === array() ) {
432 return;
433 }
434
435 $this->options = $options;
436 update_option( ADVADS_SLUG, $options );
437 }
438
439 /**
440 * return internal plugin options
441 * these are options set by the plugin
442 *
443 * @since 1.0.1
444 * @return array $options
445 * @todo parse default options
446 */
447 public function internal_options() {
448 if ( ! isset( $this->internal_options ) ) {
449 $defaults = array(
450 'version' => ADVADS_VERSION,
451 'installed' => time(), // when was this installed
452 );
453 $this->internal_options = get_option( ADVADS_SLUG . '-internal', array() );
454
455 // save defaults
456 if($this->internal_options === array()){
457 $this->internal_options = $defaults;
458 $this->update_internal_options($this->internal_options);
459
460 Advanced_Ads_Plugin::get_instance()->create_capabilities();
461 }
462
463 // for versions installed prior to 1.5.3 set installed date for now
464 if( ! isset( $this->internal_options['installed'] )){
465 $this->internal_options['installed'] = time();
466 $this->update_internal_options($this->internal_options);
467 }
468 }
469
470 return $this->internal_options;
471 }
472
473 /**
474 * update internal plugin options
475 *
476 * @since 1.5.1
477 * @param array $options new internal options
478 */
479 public function update_internal_options( array $options ) {
480 // do not allow to clear options
481 if ( $options === array() ) {
482 return;
483 }
484
485 $this->internal_options = $options;
486 update_option( ADVADS_SLUG . '-internal', $options );
487 }
488
489 /**
490 * get prefix used for frontend elements
491 *
492 * @since 1.6.8.2
493 */
494 public function get_frontend_prefix(){
495 if ( ! $this->frontend_prefix ) {
496 $options = $this->options();
497
498 if ( ! isset( $options['front-prefix'] ) ) {
499 if ( isset( $options['id-prefix'] ) ) {
500 // deprecated: keeps widgets working that previously received an id based on the front-prefix
501 $this->frontend_prefix = esc_attr( $options['id-prefix'] );
502 } else {
503 $host = parse_url( get_home_url(), PHP_URL_HOST );
504 $this->frontend_prefix = preg_match( '/[A-Za-z][A-Za-z0-9_]{4}/', $host, $result ) ? $result[0] . '-' : Advanced_Ads_Plugin::DEFAULT_FRONTEND_PREFIX;
505 }
506 } else {
507 $this->frontend_prefix = $options['front-prefix'];
508 }
509 }
510 return $this->frontend_prefix;
511 }
512
513 /**
514 * get priority used for injection inside content
515 *
516 * @since 1.6.10.2
517 */
518 public function get_content_injection_priority(){
519 $options = $this->options();
520
521 return isset( $options['content-injection-priority'] ) ? intval( $options['content-injection-priority'] ) : 100;
522 }
523
524 /**
525 * returns the capability needed to perform an action
526 *
527 * @since 1.6.14
528 * @param str $capability a capability to check, can be internal to Advanced Ads
529 * @return str $capability a valid WordPress capability
530 */
531 public static function user_cap( $capability = 'manage_options' ){
532
533 global $advanced_ads_capabilities;
534
535 // admins can do everything
536 // is also a fallback if no option or more specific capability is given
537 if( current_user_can( 'manage_options' ) ){
538 return 'manage_options';
539 }
540
541 return apply_filters( 'advanced-ads-capability', $capability );
542
543 // check, if capability is mapped to an existing WP capability
544 /*if( isset( $advanced_ads_capabilities[ $capability ] ) ){
545 return apply_filters( 'advanced-ads-capability', $advanced_ads_capabilities[ $capability ], $capability );
546 } else {
547 // if not, use 'manage_posts' capability
548 return apply_filters( 'advanced-ads-capability', 'manage_options', $capability );
549 }*/
550
551 }
552
553 /**
554 * Create roles and capabilities
555 *
556 */
557 public function create_capabilities() {
558 if ( $role = get_role( 'administrator' ) ) {
559 $role->add_cap( 'advanced_ads_manage_options' );
560 $role->add_cap( 'advanced_ads_see_interface' );
561 $role->add_cap( 'advanced_ads_edit_ads' );
562 $role->add_cap( 'advanced_ads_manage_placements' );
563 $role->add_cap( 'advanced_ads_place_ads' );
564 }
565 }
566
567 /**
568 * Remove roles and capabilities
569 *
570 */
571 public function remove_capabilities() {
572 if ( $role = get_role( 'administrator' ) ) {
573 $role->remove_cap( 'advanced_ads_manage_options' );
574 $role->remove_cap( 'advanced_ads_see_interface' );
575 $role->remove_cap( 'advanced_ads_edit_ads' );
576 $role->remove_cap( 'advanced_ads_manage_placements' );
577 $role->remove_cap( 'advanced_ads_place_ads' );
578 }
579 }
580
581 /**
582 * Fired when the plugin is uninstalled.
583 */
584 public static function uninstall() {
585 $advads_options = Advanced_Ads::get_instance()->options();
586
587 if ( ! empty( $advads_options['uninstall-delete-data'] ) ) {
588 global $wpdb;
589 $main_blog_id = $wpdb->blogid;
590
591 Advanced_Ads::get_instance()->create_post_types();
592
593 if ( ! is_multisite() ) {
594 Advanced_Ads_Plugin::get_instance()->uninstall_single();
595 } else {
596 $blog_ids = $wpdb->get_col( "SELECT blog_id FROM {$wpdb->blogs}" );
597
598 foreach ( $blog_ids as $blog_id ) {
599 switch_to_blog( $blog_id );
600 Advanced_Ads_Plugin::get_instance()->uninstall_single();
601 }
602 switch_to_blog( $main_blog_id );
603 }
604
605 // Delete assets (main blog).
606 Advanced_Ads_Ad_Blocker_Admin::get_instance()->clear_assets();
607 delete_option( ADVADS_AB_SLUG );
608 }
609
610 }
611
612 /**
613 * Fired for each blog when the plugin is uninstalled.
614 *
615 */
616 protected function uninstall_single() {
617 global $wpdb;
618
619 // Ads.
620 $post_ids = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM {$wpdb->posts} WHERE post_type = %s", Advanced_Ads::POST_TYPE_SLUG ) );
621
622 if ( $post_ids ) {
623 $wpdb->delete(
624 $wpdb->posts,
625 array( 'post_type' => Advanced_Ads::POST_TYPE_SLUG ),
626 array( '%s' )
627 );
628
629 $wpdb->query( "DELETE FROM {$wpdb->postmeta} WHERE post_id IN( " . implode( ',', $post_ids ) . " )" );
630 }
631
632 // Groups.
633 $term_ids = $wpdb->get_col( $wpdb->prepare( "SELECT t.term_id FROM {$wpdb->terms} AS t INNER JOIN {$wpdb->term_taxonomy} AS tt ON t.term_id = tt.term_id WHERE tt.taxonomy = %s", Advanced_Ads::AD_GROUP_TAXONOMY ) );
634
635 foreach ( $term_ids as $term_id ) {
636 wp_delete_term( $term_id, Advanced_Ads::AD_GROUP_TAXONOMY );
637 }
638
639 delete_option( 'advads-ad-groups' );
640 delete_option( Advanced_Ads::AD_GROUP_TAXONOMY . '_children' );
641 delete_option( 'advads-ad-weights' );
642
643 // Placements.
644 delete_option( 'advads-ads-placements' );
645
646 // User metadata.
647 delete_metadata( 'user', null, 'advanced-ads-hide-wizard', '', true );
648 delete_metadata( 'user', null, 'advanced-ads-subscribed', '', true );
649
650 // Post metadata.
651 delete_metadata( 'post', null, '_advads_ad_settings', '', true );
652
653 // Transients.
654 delete_transient( ADVADS_SLUG . '_add-on-updates-checked' );
655
656 delete_option( GADSENSE_OPT_NAME );
657 delete_option( ADVADS_SLUG );
658 delete_option( ADVADS_SLUG . '-internal' );
659 delete_option( ADVADS_SLUG . '-notices' );
660
661 // Widget.
662 $base_widget_id = Advanced_Ads_Widget::get_base_id();
663 delete_option( 'widget_' . $base_widget_id );
664
665 do_action( 'advanced-ads-uninstall' );
666
667 wp_cache_flush();
668 }
669
670 }
671