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