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