PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 1.8.10
Advanced Ads – Ad Manager & AdSense v1.8.10
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
646 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 shortcode attributes.
341 *
342 * @param array $atts array with strings
343 * @return array
344 */
345 private function prepare_shortcode_atts( $atts ) {
346 $result = array();
347
348 /**
349 * Prepare attributes by converting strings to multi-dimensional array
350 * Example: [ 'output__margin__top' => 1 ] => ['output']['margin']['top'] = 1
351 */
352 if ( ! defined( 'ADVANCED_ADS_DISABLE_CHANGE' ) || ! ADVANCED_ADS_DISABLE_CHANGE ) {
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, 'ad_args' => false ) );
371 }
372
373 // Ad type: 'content' and a shortcode inside.
374 if ( isset( $atts['ad_args'] ) ) {
375 $result = array_merge( $result, json_decode( urldecode( $atts['ad_args'] ) ,true) );
376
377 }
378
379 return $result;
380 }
381
382 /**
383 * return plugin options
384 * these are the options updated by the user
385 *
386 * @since 1.0.1
387 * @return array $options
388 * @todo parse default options
389 */
390 public function options() {
391 if ( ! isset( $this->options ) ) {
392 $this->options = get_option( ADVADS_SLUG, array() );
393 }
394
395 return $this->options;
396 }
397
398 /**
399 * update plugin options (not for settings page, but if automatic options are needed)
400 *
401 * @since 1.5.1
402 * @param array $options new options
403 */
404 public function update_options( array $options ) {
405 // do not allow to clear options
406 if ( $options === array() ) {
407 return;
408 }
409
410 $this->options = $options;
411 update_option( ADVADS_SLUG, $options );
412 }
413
414 /**
415 * return internal plugin options
416 * these are options set by the plugin
417 *
418 * @since 1.0.1
419 * @return array $options
420 * @todo parse default options
421 */
422 public function internal_options() {
423 if ( ! isset( $this->internal_options ) ) {
424 $defaults = array(
425 'version' => ADVADS_VERSION,
426 'installed' => time(), // when was this installed
427 );
428 $this->internal_options = get_option( ADVADS_SLUG . '-internal', array() );
429
430 // save defaults
431 if($this->internal_options === array()){
432 $this->internal_options = $defaults;
433 $this->update_internal_options($this->internal_options);
434
435 Advanced_Ads_Plugin::get_instance()->create_capabilities();
436 }
437
438 // for versions installed prior to 1.5.3 set installed date for now
439 if( ! isset( $this->internal_options['installed'] )){
440 $this->internal_options['installed'] = time();
441 $this->update_internal_options($this->internal_options);
442 }
443 }
444
445 return $this->internal_options;
446 }
447
448 /**
449 * update internal plugin options
450 *
451 * @since 1.5.1
452 * @param array $options new internal options
453 */
454 public function update_internal_options( array $options ) {
455 // do not allow to clear options
456 if ( $options === array() ) {
457 return;
458 }
459
460 $this->internal_options = $options;
461 update_option( ADVADS_SLUG . '-internal', $options );
462 }
463
464 /**
465 * get prefix used for frontend elements
466 *
467 * @since 1.6.8.2
468 */
469 public function get_frontend_prefix(){
470 if ( ! $this->frontend_prefix ) {
471 $options = $this->options();
472
473 if ( ! isset( $options['front-prefix'] ) ) {
474 if ( isset( $options['id-prefix'] ) ) {
475 // deprecated: keeps widgets working that previously received an id based on the front-prefix
476 $this->frontend_prefix = esc_attr( $options['id-prefix'] );
477 } else {
478 $host = parse_url( get_home_url(), PHP_URL_HOST );
479 $this->frontend_prefix = preg_match( '/[A-Za-z][A-Za-z0-9_]{4}/', $host, $result ) ? $result[0] . '-' : Advanced_Ads_Plugin::DEFAULT_FRONTEND_PREFIX;
480 }
481 } else {
482 $this->frontend_prefix = $options['front-prefix'];
483 }
484 }
485 return $this->frontend_prefix;
486 }
487
488 /**
489 * get priority used for injection inside content
490 *
491 * @since 1.6.10.2
492 */
493 public function get_content_injection_priority(){
494 $options = $this->options();
495
496 return isset( $options['content-injection-priority'] ) ? intval( $options['content-injection-priority'] ) : 100;
497 }
498
499 /**
500 * returns the capability needed to perform an action
501 *
502 * @since 1.6.14
503 * @param str $capability a capability to check, can be internal to Advanced Ads
504 * @return str $capability a valid WordPress capability
505 */
506 public static function user_cap( $capability = 'manage_options' ){
507
508 global $advanced_ads_capabilities;
509
510 // admins can do everything
511 // is also a fallback if no option or more specific capability is given
512 if( current_user_can( 'manage_options' ) ){
513 return 'manage_options';
514 }
515
516 return apply_filters( 'advanced-ads-capability', $capability );
517
518 // check, if capability is mapped to an existing WP capability
519 /*if( isset( $advanced_ads_capabilities[ $capability ] ) ){
520 return apply_filters( 'advanced-ads-capability', $advanced_ads_capabilities[ $capability ], $capability );
521 } else {
522 // if not, use 'manage_posts' capability
523 return apply_filters( 'advanced-ads-capability', 'manage_options', $capability );
524 }*/
525
526 }
527
528 /**
529 * Create roles and capabilities
530 *
531 */
532 public function create_capabilities() {
533 if ( $role = get_role( 'administrator' ) ) {
534 $role->add_cap( 'advanced_ads_manage_options' );
535 $role->add_cap( 'advanced_ads_see_interface' );
536 $role->add_cap( 'advanced_ads_edit_ads' );
537 $role->add_cap( 'advanced_ads_manage_placements' );
538 $role->add_cap( 'advanced_ads_place_ads' );
539 }
540 }
541
542 /**
543 * Remove roles and capabilities
544 *
545 */
546 public function remove_capabilities() {
547 if ( $role = get_role( 'administrator' ) ) {
548 $role->remove_cap( 'advanced_ads_manage_options' );
549 $role->remove_cap( 'advanced_ads_see_interface' );
550 $role->remove_cap( 'advanced_ads_edit_ads' );
551 $role->remove_cap( 'advanced_ads_manage_placements' );
552 $role->remove_cap( 'advanced_ads_place_ads' );
553 }
554 }
555
556 /**
557 * Fired when the plugin is uninstalled.
558 */
559 public static function uninstall() {
560 $advads_options = Advanced_Ads::get_instance()->options();
561
562 if ( ! empty( $advads_options['uninstall-delete-data'] ) ) {
563 global $wpdb;
564 $main_blog_id = $wpdb->blogid;
565
566 Advanced_Ads::get_instance()->create_post_types();
567
568 if ( ! is_multisite() ) {
569 Advanced_Ads_Plugin::get_instance()->uninstall_single();
570 } else {
571 $blog_ids = $wpdb->get_col( "SELECT blog_id FROM {$wpdb->blogs}" );
572
573 foreach ( $blog_ids as $blog_id ) {
574 switch_to_blog( $blog_id );
575 Advanced_Ads_Plugin::get_instance()->uninstall_single();
576 }
577 switch_to_blog( $main_blog_id );
578 }
579
580 // Delete assets (main blog).
581 Advanced_Ads_Ad_Blocker_Admin::get_instance()->clear_assets();
582 delete_option( ADVADS_AB_SLUG );
583 }
584
585 }
586
587 /**
588 * Fired for each blog when the plugin is uninstalled.
589 *
590 */
591 protected function uninstall_single() {
592 global $wpdb;
593
594 // Ads.
595 $post_ids = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM {$wpdb->posts} WHERE post_type = %s", Advanced_Ads::POST_TYPE_SLUG ) );
596
597 if ( $post_ids ) {
598 $wpdb->delete(
599 $wpdb->posts,
600 array( 'post_type' => Advanced_Ads::POST_TYPE_SLUG ),
601 array( '%s' )
602 );
603
604 $wpdb->query( "DELETE FROM {$wpdb->postmeta} WHERE post_id IN( " . implode( ',', $post_ids ) . " )" );
605 }
606
607 // Groups.
608 $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 ) );
609
610 foreach ( $term_ids as $term_id ) {
611 wp_delete_term( $term_id, Advanced_Ads::AD_GROUP_TAXONOMY );
612 }
613
614 delete_option( 'advads-ad-groups' );
615 delete_option( Advanced_Ads::AD_GROUP_TAXONOMY . '_children' );
616 delete_option( 'advads-ad-weights' );
617
618 // Placements.
619 delete_option( 'advads-ads-placements' );
620
621 // User metadata.
622 delete_metadata( 'user', null, 'advanced-ads-hide-wizard', '', true );
623 delete_metadata( 'user', null, 'advanced-ads-subscribed', '', true );
624
625 // Post metadata.
626 delete_metadata( 'post', null, '_advads_ad_settings', '', true );
627
628 // Transients.
629 delete_transient( ADVADS_SLUG . '_add-on-updates-checked' );
630
631 delete_option( GADSENSE_OPT_NAME );
632 delete_option( ADVADS_SLUG );
633 delete_option( ADVADS_SLUG . '-internal' );
634 delete_option( ADVADS_SLUG . '-notices' );
635
636 // Widget.
637 $base_widget_id = Advanced_Ads_Widget::get_base_id();
638 delete_option( 'widget_' . $base_widget_id );
639
640 do_action( 'advanced-ads-uninstall' );
641
642 wp_cache_flush();
643 }
644
645 }
646