PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 1.14.1
Advanced Ads – Ad Manager & AdSense v1.14.1
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 6 years ago ad-ajax.php 6 years ago ad-debug.php 8 years ago ad-health-notices.php 6 years ago ad-model.php 8 years ago ad-select.php 9 years ago ad.php 6 years ago ad_ajax_callbacks.php 6 years ago ad_group.php 6 years ago ad_placements.php 7 years ago ad_type_abstract.php 8 years ago ad_type_content.php 6 years ago ad_type_dummy.php 6 years ago ad_type_group.php 8 years ago ad_type_image.php 6 years ago ad_type_plain.php 6 years ago checks.php 6 years ago compatibility.php 6 years ago display-conditions.php 6 years ago filesystem.php 8 years ago frontend_checks.php 6 years ago plugin.php 6 years ago upgrades.php 6 years ago utils.php 6 years ago visitor-conditions.php 6 years ago widget.php 6 years ago
plugin.php
724 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 // we can’t store options if WPML String Translations is enabled, or it would not translate the "Ad Label" option
431 if ( ! isset( $this->options ) || class_exists('WPML_ST_String') ) {
432 $this->options = get_option( ADVADS_SLUG, array() );
433 }
434
435 return $this->options;
436 }
437
438 /**
439 * update plugin options (not for settings page, but if automatic options are needed)
440 *
441 * @since 1.5.1
442 * @param array $options new options
443 */
444 public function update_options( array $options ) {
445 // do not allow to clear options
446 if ( $options === array() ) {
447 return;
448 }
449
450 $this->options = $options;
451 update_option( ADVADS_SLUG, $options );
452 }
453
454 /**
455 * return internal plugin options
456 * these are options set by the plugin
457 *
458 * @since 1.0.1
459 * @return array $options
460 * @todo parse default options
461 */
462 public function internal_options() {
463 if ( ! isset( $this->internal_options ) ) {
464 $defaults = array(
465 'version' => ADVADS_VERSION,
466 'installed' => time(), // when was this installed
467 );
468 $this->internal_options = get_option( ADVADS_SLUG . '-internal', array() );
469
470 // save defaults
471 if($this->internal_options === array()){
472 $this->internal_options = $defaults;
473 $this->update_internal_options($this->internal_options);
474
475 Advanced_Ads_Plugin::get_instance()->create_capabilities();
476 }
477
478 // for versions installed prior to 1.5.3 set installed date for now
479 if( ! isset( $this->internal_options['installed'] )){
480 $this->internal_options['installed'] = time();
481 $this->update_internal_options($this->internal_options);
482 }
483 }
484
485 return $this->internal_options;
486 }
487
488 /**
489 * update internal plugin options
490 *
491 * @since 1.5.1
492 * @param array $options new internal options
493 */
494 public function update_internal_options( array $options ) {
495 // do not allow to clear options
496 if ( $options === array() ) {
497 return;
498 }
499
500 $this->internal_options = $options;
501 update_option( ADVADS_SLUG . '-internal', $options );
502 }
503
504 /**
505 * get prefix used for frontend elements
506 *
507 * @since 1.6.8.2
508 */
509 public function get_frontend_prefix(){
510 if ( ! $this->frontend_prefix ) {
511 $options = $this->options();
512
513 if ( ! isset( $options['front-prefix'] ) ) {
514 if ( isset( $options['id-prefix'] ) ) {
515 // deprecated: keeps widgets working that previously received an id based on the front-prefix
516 $frontend_prefix = esc_attr( $options['id-prefix'] );
517 } else {
518 $host = parse_url( get_home_url(), PHP_URL_HOST );
519 $frontend_prefix = preg_match( '/[A-Za-z][A-Za-z0-9_]{4}/', $host, $result ) ? $result[0] . '-' : Advanced_Ads_Plugin::DEFAULT_FRONTEND_PREFIX;
520 }
521 } else {
522 $frontend_prefix = esc_attr( $options['front-prefix'] );
523 }
524 /**
525 * Applying the filter here makes sure that it is the same frontend prefix for all
526 * calls on this page impression
527 */
528 $this->frontend_prefix = apply_filters( 'advanced-ads-frontend-prefix', $frontend_prefix );
529 }
530 return $this->frontend_prefix;
531 }
532
533 /**
534 * get priority used for injection inside content
535 *
536 * @since 1.6.10.2
537 */
538 public function get_content_injection_priority(){
539 $options = $this->options();
540
541 return isset( $options['content-injection-priority'] ) ? intval( $options['content-injection-priority'] ) : 100;
542 }
543
544 /**
545 * returns the capability needed to perform an action
546 *
547 * @since 1.6.14
548 * @param str $capability a capability to check, can be internal to Advanced Ads
549 * @return str $capability a valid WordPress capability
550 */
551 public static function user_cap( $capability = 'manage_options' ){
552
553 global $advanced_ads_capabilities;
554
555 // admins can do everything
556 // is also a fallback if no option or more specific capability is given
557 if( current_user_can( 'manage_options' ) ){
558 return 'manage_options';
559 }
560
561 return apply_filters( 'advanced-ads-capability', $capability );
562
563 // check, if capability is mapped to an existing WP capability
564 /*if( isset( $advanced_ads_capabilities[ $capability ] ) ){
565 return apply_filters( 'advanced-ads-capability', $advanced_ads_capabilities[ $capability ], $capability );
566 } else {
567 // if not, use 'manage_posts' capability
568 return apply_filters( 'advanced-ads-capability', 'manage_options', $capability );
569 }*/
570
571 }
572
573 /**
574 * Create roles and capabilities
575 *
576 */
577 public function create_capabilities() {
578 if ( $role = get_role( 'administrator' ) ) {
579 $role->add_cap( 'advanced_ads_manage_options' );
580 $role->add_cap( 'advanced_ads_see_interface' );
581 $role->add_cap( 'advanced_ads_edit_ads' );
582 $role->add_cap( 'advanced_ads_manage_placements' );
583 $role->add_cap( 'advanced_ads_place_ads' );
584 }
585 }
586
587 /**
588 * Remove roles and capabilities
589 *
590 */
591 public function remove_capabilities() {
592 if ( $role = get_role( 'administrator' ) ) {
593 $role->remove_cap( 'advanced_ads_manage_options' );
594 $role->remove_cap( 'advanced_ads_see_interface' );
595 $role->remove_cap( 'advanced_ads_edit_ads' );
596 $role->remove_cap( 'advanced_ads_manage_placements' );
597 $role->remove_cap( 'advanced_ads_place_ads' );
598 }
599 }
600
601 /**
602 * Fired when the plugin is uninstalled.
603 */
604 public static function uninstall() {
605 $advads_options = Advanced_Ads::get_instance()->options();
606
607 if ( ! empty( $advads_options['uninstall-delete-data'] ) ) {
608 global $wpdb;
609 $main_blog_id = $wpdb->blogid;
610
611 Advanced_Ads::get_instance()->create_post_types();
612
613 if ( ! is_multisite() ) {
614 Advanced_Ads_Plugin::get_instance()->uninstall_single();
615 } else {
616 $blog_ids = $wpdb->get_col( "SELECT blog_id FROM {$wpdb->blogs}" );
617
618 foreach ( $blog_ids as $blog_id ) {
619 switch_to_blog( $blog_id );
620 Advanced_Ads_Plugin::get_instance()->uninstall_single();
621 }
622 switch_to_blog( $main_blog_id );
623 }
624
625 // Delete assets (main blog).
626 Advanced_Ads_Ad_Blocker_Admin::get_instance()->clear_assets();
627 delete_option( ADVADS_AB_SLUG );
628 }
629
630 }
631
632 /**
633 * Fired for each blog when the plugin is uninstalled.
634 *
635 */
636 protected function uninstall_single() {
637 global $wpdb;
638
639 // Ads.
640 $post_ids = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM {$wpdb->posts} WHERE post_type = %s", Advanced_Ads::POST_TYPE_SLUG ) );
641
642 if ( $post_ids ) {
643 $wpdb->delete(
644 $wpdb->posts,
645 array( 'post_type' => Advanced_Ads::POST_TYPE_SLUG ),
646 array( '%s' )
647 );
648
649 $wpdb->query( "DELETE FROM {$wpdb->postmeta} WHERE post_id IN( " . implode( ',', $post_ids ) . " )" );
650 }
651
652 // Groups.
653 $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 ) );
654
655 foreach ( $term_ids as $term_id ) {
656 wp_delete_term( $term_id, Advanced_Ads::AD_GROUP_TAXONOMY );
657 }
658
659 delete_option( 'advads-ad-groups' );
660 delete_option( Advanced_Ads::AD_GROUP_TAXONOMY . '_children' );
661 delete_option( 'advads-ad-weights' );
662
663 // Placements.
664 delete_option( 'advads-ads-placements' );
665
666 // User metadata.
667 delete_metadata( 'user', null, 'advanced-ads-hide-wizard', '', true );
668 delete_metadata( 'user', null, 'advanced-ads-subscribed', '', true );
669
670 // Post metadata.
671 delete_metadata( 'post', null, '_advads_ad_settings', '', true );
672
673 // Transients.
674 delete_transient( ADVADS_SLUG . '_add-on-updates-checked' );
675
676 delete_option( GADSENSE_OPT_NAME );
677 delete_option( ADVADS_SLUG );
678 delete_option( ADVADS_SLUG . '-internal' );
679 delete_option( ADVADS_SLUG . '-notices' );
680
681 // Widget.
682 $base_widget_id = Advanced_Ads_Widget::get_base_id();
683 delete_option( 'widget_' . $base_widget_id );
684
685 do_action( 'advanced-ads-uninstall' );
686
687 wp_cache_flush();
688 }
689
690 /**
691 * check if any add-on is activated
692 *
693 * @return bol true if there is any add-on activated
694 */
695 static function any_activated_add_on(){
696 return ( defined( 'AAP_VERSION' ) // Advanced Ads Pro
697 || defined( 'AASA_VERSION' ) // Selling Ads
698 || defined( 'AAT_VERSION' ) // Tracking
699 || defined( 'AASADS_VERSION' ) // Sticky Ads
700 || defined( 'AAR_VERSION' ) // Responsive Ads
701 || defined( 'AAPLDS_VERSION' ) // PopUp and Layer Ads
702 || defined( 'AAGT_SLUG' ) // Geo-Targeting
703 );
704 }
705
706 /**
707 * Get the correct support URL: wp.org for free users and website for those with any add-on installed
708 *
709 * @param str $utm add UTM parameter to the link leading to https://wpadvancedads.com, if given
710 */
711 static function support_url( $utm = '' ){
712
713 // return self::any_activated_add_on() ? ADVADS_URL . 'support/' .$utm : 'https://wordpress.org/support/plugin/advanced-ads#new-post';
714 // $utm = empty( $utm ) ? '#utm_source=advanced-ads&utm_medium=link&utm_campaign=disable-support' : $utm;
715 if( self::any_activated_add_on() ){
716 $url = ADVADS_URL . 'support/' .$utm . '-with-addons';
717 } else {
718 $url = ADVADS_URL . 'support/' .$utm . '-free-user';
719 }
720 return $url;
721 }
722
723 }
724