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