PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 1.8.21
Advanced Ads – Ad Manager & AdSense v1.8.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 / 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 8 years ago checks.php 8 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
672 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 echo apply_filters( 'advanced-ads-attribution', '<!-- managing ads with Advanced Ads -->' );
168 ?><!--noptimize--><script>
169 <?php if ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) {
170 readfile( ADVADS_BASE_PATH . 'public/assets/js/ready.js' );
171 } else { ?>
172 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)}}();
173 <?php
174 }
175 ?></script><!--/noptimize-->
176 <?php
177 }
178
179 public function widget_init() {
180 register_widget( 'Advanced_Ads_Widget' );
181 }
182
183 /**
184 * Fired when a new site is activated with a WPMU environment.
185 *
186 * @since 1.0.0
187 * @param int $blog_id ID of the new blog.
188 */
189 public function activate_new_site($blog_id) {
190
191 if ( 1 !== did_action( 'wpmu_new_blog' ) ) {
192 return;
193 }
194
195 switch_to_blog( $blog_id );
196 $this->single_activate();
197 restore_current_blog();
198 }
199
200 /**
201 * Fired for each blog when the plugin is activated.
202 *
203 * @since 1.0.0
204 */
205 protected function single_activate() {
206 // $this->post_types_rewrite_flush();
207 // -TODO inform modules
208 $this->create_capabilities();
209 }
210
211 /**
212 * Fired for each blog when the plugin is deactivated.
213 *
214 * @since 1.0.0
215 */
216 protected function single_deactivate() {
217 // -TODO inform modules
218 $this->remove_capabilities();
219 }
220
221 /**
222 * Load the plugin text domain for translation.
223 *
224 * @since 1.0.0
225 */
226 public function load_plugin_textdomain() {
227 // $locale = apply_filters('advanced-ads-plugin-locale', get_locale(), $domain);
228 load_plugin_textdomain( ADVADS_SLUG, false, ADVADS_BASE_DIR . '/languages' );
229 }
230
231 /**
232 * Fired when the plugin is activated.
233 *
234 * @since 1.0.0
235 * @param boolean $network_wide True if WPMU superadmin uses
236 * "Network Activate" action, false if
237 * WPMU is disabled or plugin is
238 * activated on an individual blog.
239 */
240 public function activate($network_wide) {
241 if ( function_exists( 'is_multisite' ) && is_multisite() ) {
242
243 if ( $network_wide ) {
244 // Get all blog ids
245 global $wpdb;
246 $blog_ids = $wpdb->get_col( "SELECT blog_id FROM {$wpdb->blogs}" );
247 $original_blog_id = $wpdb->blogid;
248
249 foreach ( $blog_ids as $blog_id ) {
250 switch_to_blog( $blog_id );
251 $this->single_activate();
252 }
253
254 switch_to_blog( $original_blog_id );
255 } else {
256 $this->single_activate();
257 }
258 } else {
259 $this->single_activate();
260 }
261 }
262
263 /**
264 * Fired when the plugin is deactivated.
265 *
266 * @since 1.0.0
267 * @param boolean $network_wide
268 *
269 * True if WPMU superadmin uses
270 * "Network Deactivate" action, false if
271 * WPMU is disabled or plugin is
272 * deactivated on an individual blog.
273 */
274 public function deactivate($network_wide) {
275 if ( function_exists( 'is_multisite' ) && is_multisite() ) {
276
277 if ( $network_wide ) {
278 // Get all blog ids
279 global $wpdb;
280 $blog_ids = $wpdb->get_col( "SELECT blog_id FROM {$wpdb->blogs}" );
281 $original_blog_id = $wpdb->blogid;
282
283 foreach ( $blog_ids as $blog_id ) {
284 switch_to_blog( $blog_id );
285 $this->single_deactivate();
286 }
287
288 switch_to_blog( $original_blog_id );
289 } else {
290 $this->single_deactivate();
291 }
292 } else {
293 $this->single_deactivate();
294 }
295 }
296
297 /**
298 * flush rewrites on plugin activation so permalinks for them work from the beginning on
299 *
300 * @since 1.0.0
301 * @link http://codex.wordpress.org/Function_Reference/register_post_type#Flushing_Rewrite_on_Activation
302 */
303 /*public function post_types_rewrite_flush(){
304 // load custom post type
305 Advanced_Ads::get_instance()->create_post_types();
306 // flush rewrite rules
307 flush_rewrite_rules();
308 }*/
309
310 /**
311 * remove WP tag edit page for the ad group taxonomy
312 * needed, because we can’t remove it with `show_ui` without also removing the meta box
313 *
314 * @since 1.0.0
315 */
316 public function remove_taxonomy_menu_item() {
317 remove_submenu_page( 'edit.php?post_type=advanced_ads', 'edit-tags.php?taxonomy=advanced_ads_groups&amp;post_type=advanced_ads' );
318 }
319
320 /**
321 * shortcode to include ad in frontend
322 *
323 * @since 1.0.0
324 * @param arr $atts
325 */
326 public function shortcode_display_ad($atts){
327 $atts = is_array( $atts ) ? $atts : array();
328 $id = isset($atts['id']) ? (int) $atts['id'] : 0;
329 $atts = $this->prepare_shortcode_atts( $atts );
330
331 // use the public available function here
332 return get_ad( $id, $atts );
333 }
334
335 /**
336 * shortcode to include ad from an ad group in frontend
337 *
338 * @since 1.0.0
339 * @param arr $atts
340 */
341 public function shortcode_display_ad_group($atts){
342 $atts = is_array( $atts ) ? $atts : array();
343 $id = isset($atts['id']) ? (int) $atts['id'] : 0;
344 $atts = $this->prepare_shortcode_atts( $atts );
345
346 // use the public available function here
347 return get_ad_group( $id, $atts );
348 }
349
350 /**
351 * shortcode to display content of an ad placement in frontend
352 *
353 * @since 1.1.0
354 * @param arr $atts
355 */
356 public function shortcode_display_ad_placement($atts){
357 $atts = is_array( $atts ) ? $atts : array();
358 $id = isset($atts['id']) ? (string) $atts['id'] : '';
359 $atts = $this->prepare_shortcode_atts( $atts );
360
361 // use the public available function here
362 return get_ad_placement( $id, $atts );
363 }
364
365 /**
366 * Prepare shortcode attributes.
367 *
368 * @param array $atts array with strings
369 * @return array
370 */
371 private function prepare_shortcode_atts( $atts ) {
372 $result = array();
373
374 /**
375 * Prepare attributes by converting strings to multi-dimensional array
376 * Example: [ 'output__margin__top' => 1 ] => ['output']['margin']['top'] = 1
377 */
378 if ( ! defined( 'ADVANCED_ADS_DISABLE_CHANGE' ) || ! ADVANCED_ADS_DISABLE_CHANGE ) {
379 foreach ( $atts as $attr => $data ) {
380 $levels = explode( '__', $attr );
381 $last = array_pop( $levels );
382
383 $cur_lvl = &$result;
384
385 foreach ( $levels as $lvl ) {
386 if ( ! isset( $cur_lvl[ $lvl ] ) ) {
387 $cur_lvl[ $lvl ] = array();
388 }
389
390 $cur_lvl = &$cur_lvl[ $lvl ];
391 }
392
393 $cur_lvl[ $last ] = $data;
394 }
395
396 $result = array_diff_key( $result, array( 'id' => false, 'blog_id' => false, 'ad_args' => false ) );
397 }
398
399 // Ad type: 'content' and a shortcode inside.
400 if ( isset( $atts['ad_args'] ) ) {
401 $result = array_merge( $result, json_decode( urldecode( $atts['ad_args'] ) ,true) );
402
403 }
404
405 return $result;
406 }
407
408 /**
409 * return plugin options
410 * these are the options updated by the user
411 *
412 * @since 1.0.1
413 * @return array $options
414 * @todo parse default options
415 */
416 public function options() {
417 if ( ! isset( $this->options ) ) {
418 $this->options = get_option( ADVADS_SLUG, array() );
419 }
420
421 return $this->options;
422 }
423
424 /**
425 * update plugin options (not for settings page, but if automatic options are needed)
426 *
427 * @since 1.5.1
428 * @param array $options new options
429 */
430 public function update_options( array $options ) {
431 // do not allow to clear options
432 if ( $options === array() ) {
433 return;
434 }
435
436 $this->options = $options;
437 update_option( ADVADS_SLUG, $options );
438 }
439
440 /**
441 * return internal plugin options
442 * these are options set by the plugin
443 *
444 * @since 1.0.1
445 * @return array $options
446 * @todo parse default options
447 */
448 public function internal_options() {
449 if ( ! isset( $this->internal_options ) ) {
450 $defaults = array(
451 'version' => ADVADS_VERSION,
452 'installed' => time(), // when was this installed
453 );
454 $this->internal_options = get_option( ADVADS_SLUG . '-internal', array() );
455
456 // save defaults
457 if($this->internal_options === array()){
458 $this->internal_options = $defaults;
459 $this->update_internal_options($this->internal_options);
460
461 Advanced_Ads_Plugin::get_instance()->create_capabilities();
462 }
463
464 // for versions installed prior to 1.5.3 set installed date for now
465 if( ! isset( $this->internal_options['installed'] )){
466 $this->internal_options['installed'] = time();
467 $this->update_internal_options($this->internal_options);
468 }
469 }
470
471 return $this->internal_options;
472 }
473
474 /**
475 * update internal plugin options
476 *
477 * @since 1.5.1
478 * @param array $options new internal options
479 */
480 public function update_internal_options( array $options ) {
481 // do not allow to clear options
482 if ( $options === array() ) {
483 return;
484 }
485
486 $this->internal_options = $options;
487 update_option( ADVADS_SLUG . '-internal', $options );
488 }
489
490 /**
491 * get prefix used for frontend elements
492 *
493 * @since 1.6.8.2
494 */
495 public function get_frontend_prefix(){
496 if ( ! $this->frontend_prefix ) {
497 $options = $this->options();
498
499 if ( ! isset( $options['front-prefix'] ) ) {
500 if ( isset( $options['id-prefix'] ) ) {
501 // deprecated: keeps widgets working that previously received an id based on the front-prefix
502 $this->frontend_prefix = esc_attr( $options['id-prefix'] );
503 } else {
504 $host = parse_url( get_home_url(), PHP_URL_HOST );
505 $this->frontend_prefix = preg_match( '/[A-Za-z][A-Za-z0-9_]{4}/', $host, $result ) ? $result[0] . '-' : Advanced_Ads_Plugin::DEFAULT_FRONTEND_PREFIX;
506 }
507 } else {
508 $this->frontend_prefix = $options['front-prefix'];
509 }
510 }
511 return $this->frontend_prefix;
512 }
513
514 /**
515 * get priority used for injection inside content
516 *
517 * @since 1.6.10.2
518 */
519 public function get_content_injection_priority(){
520 $options = $this->options();
521
522 return isset( $options['content-injection-priority'] ) ? intval( $options['content-injection-priority'] ) : 100;
523 }
524
525 /**
526 * returns the capability needed to perform an action
527 *
528 * @since 1.6.14
529 * @param str $capability a capability to check, can be internal to Advanced Ads
530 * @return str $capability a valid WordPress capability
531 */
532 public static function user_cap( $capability = 'manage_options' ){
533
534 global $advanced_ads_capabilities;
535
536 // admins can do everything
537 // is also a fallback if no option or more specific capability is given
538 if( current_user_can( 'manage_options' ) ){
539 return 'manage_options';
540 }
541
542 return apply_filters( 'advanced-ads-capability', $capability );
543
544 // check, if capability is mapped to an existing WP capability
545 /*if( isset( $advanced_ads_capabilities[ $capability ] ) ){
546 return apply_filters( 'advanced-ads-capability', $advanced_ads_capabilities[ $capability ], $capability );
547 } else {
548 // if not, use 'manage_posts' capability
549 return apply_filters( 'advanced-ads-capability', 'manage_options', $capability );
550 }*/
551
552 }
553
554 /**
555 * Create roles and capabilities
556 *
557 */
558 public function create_capabilities() {
559 if ( $role = get_role( 'administrator' ) ) {
560 $role->add_cap( 'advanced_ads_manage_options' );
561 $role->add_cap( 'advanced_ads_see_interface' );
562 $role->add_cap( 'advanced_ads_edit_ads' );
563 $role->add_cap( 'advanced_ads_manage_placements' );
564 $role->add_cap( 'advanced_ads_place_ads' );
565 }
566 }
567
568 /**
569 * Remove roles and capabilities
570 *
571 */
572 public function remove_capabilities() {
573 if ( $role = get_role( 'administrator' ) ) {
574 $role->remove_cap( 'advanced_ads_manage_options' );
575 $role->remove_cap( 'advanced_ads_see_interface' );
576 $role->remove_cap( 'advanced_ads_edit_ads' );
577 $role->remove_cap( 'advanced_ads_manage_placements' );
578 $role->remove_cap( 'advanced_ads_place_ads' );
579 }
580 }
581
582 /**
583 * Fired when the plugin is uninstalled.
584 */
585 public static function uninstall() {
586 $advads_options = Advanced_Ads::get_instance()->options();
587
588 if ( ! empty( $advads_options['uninstall-delete-data'] ) ) {
589 global $wpdb;
590 $main_blog_id = $wpdb->blogid;
591
592 Advanced_Ads::get_instance()->create_post_types();
593
594 if ( ! is_multisite() ) {
595 Advanced_Ads_Plugin::get_instance()->uninstall_single();
596 } else {
597 $blog_ids = $wpdb->get_col( "SELECT blog_id FROM {$wpdb->blogs}" );
598
599 foreach ( $blog_ids as $blog_id ) {
600 switch_to_blog( $blog_id );
601 Advanced_Ads_Plugin::get_instance()->uninstall_single();
602 }
603 switch_to_blog( $main_blog_id );
604 }
605
606 // Delete assets (main blog).
607 Advanced_Ads_Ad_Blocker_Admin::get_instance()->clear_assets();
608 delete_option( ADVADS_AB_SLUG );
609 }
610
611 }
612
613 /**
614 * Fired for each blog when the plugin is uninstalled.
615 *
616 */
617 protected function uninstall_single() {
618 global $wpdb;
619
620 // Ads.
621 $post_ids = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM {$wpdb->posts} WHERE post_type = %s", Advanced_Ads::POST_TYPE_SLUG ) );
622
623 if ( $post_ids ) {
624 $wpdb->delete(
625 $wpdb->posts,
626 array( 'post_type' => Advanced_Ads::POST_TYPE_SLUG ),
627 array( '%s' )
628 );
629
630 $wpdb->query( "DELETE FROM {$wpdb->postmeta} WHERE post_id IN( " . implode( ',', $post_ids ) . " )" );
631 }
632
633 // Groups.
634 $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 ) );
635
636 foreach ( $term_ids as $term_id ) {
637 wp_delete_term( $term_id, Advanced_Ads::AD_GROUP_TAXONOMY );
638 }
639
640 delete_option( 'advads-ad-groups' );
641 delete_option( Advanced_Ads::AD_GROUP_TAXONOMY . '_children' );
642 delete_option( 'advads-ad-weights' );
643
644 // Placements.
645 delete_option( 'advads-ads-placements' );
646
647 // User metadata.
648 delete_metadata( 'user', null, 'advanced-ads-hide-wizard', '', true );
649 delete_metadata( 'user', null, 'advanced-ads-subscribed', '', true );
650
651 // Post metadata.
652 delete_metadata( 'post', null, '_advads_ad_settings', '', true );
653
654 // Transients.
655 delete_transient( ADVADS_SLUG . '_add-on-updates-checked' );
656
657 delete_option( GADSENSE_OPT_NAME );
658 delete_option( ADVADS_SLUG );
659 delete_option( ADVADS_SLUG . '-internal' );
660 delete_option( ADVADS_SLUG . '-notices' );
661
662 // Widget.
663 $base_widget_id = Advanced_Ads_Widget::get_base_id();
664 delete_option( 'widget_' . $base_widget_id );
665
666 do_action( 'advanced-ads-uninstall' );
667
668 wp_cache_flush();
669 }
670
671 }
672