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