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