PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 1.7.9.1
Advanced Ads – Ad Manager & AdSense v1.7.9.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 9 years ago ad-ajax.php 9 years ago ad-model.php 9 years ago ad-select.php 9 years ago ad.php 9 years ago ad_ajax_callbacks.php 9 years ago ad_group.php 9 years ago ad_placements.php 9 years ago ad_type_abstract.php 11 years ago ad_type_content.php 10 years ago ad_type_group.php 10 years ago ad_type_image.php 10 years ago ad_type_plain.php 10 years ago checks.php 9 years ago display-conditions.php 9 years ago frontend_checks.php 9 years ago plugin.php 9 years ago upgrades.php 10 years ago visitor-conditions.php 10 years ago widget.php 9 years ago
plugin.php
602 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 }
183
184 /**
185 * Fired for each blog when the plugin is deactivated.
186 *
187 * @since 1.0.0
188 */
189 protected function single_deactivate() {
190 // -TODO inform modules
191 }
192
193 /**
194 * Load the plugin text domain for translation.
195 *
196 * @since 1.0.0
197 */
198 public function load_plugin_textdomain() {
199 // $locale = apply_filters('advanced-ads-plugin-locale', get_locale(), $domain);
200 load_plugin_textdomain( ADVADS_SLUG, false, ADVADS_BASE_DIR . '/languages' );
201 }
202
203 /**
204 * Fired when the plugin is activated.
205 *
206 * @since 1.0.0
207 * @param boolean $network_wide True if WPMU superadmin uses
208 * "Network Activate" action, false if
209 * WPMU is disabled or plugin is
210 * activated on an individual blog.
211 */
212 public function activate($network_wide) {
213 $this->create_capabilities();
214
215 return;
216 // was never used nor missed, but could come in handy one day
217
218 if ( function_exists( 'is_multisite' ) && is_multisite() ) {
219
220 if ( $network_wide ) {
221
222 // Get all blog ids
223 $blog_ids = $this->model->get_blog_ids();
224
225 foreach ( $blog_ids as $blog_id ) {
226
227 switch_to_blog( $blog_id );
228 $this->single_activate();
229 }
230
231 restore_current_blog();
232 } else {
233 $this->single_activate();
234 }
235 } else {
236 $this->single_activate();
237 }
238 }
239
240 /**
241 * Fired when the plugin is deactivated.
242 *
243 * @since 1.0.0
244 * @param boolean $network_wide
245 *
246 * True if WPMU superadmin uses
247 * "Network Deactivate" action, false if
248 * WPMU is disabled or plugin is
249 * deactivated on an individual blog.
250 */
251 public function deactivate($network_wide) {
252 $this->remove_capabilities();
253
254 return;
255
256 if ( function_exists( 'is_multisite' ) && is_multisite() ) {
257
258 if ( $network_wide ) {
259
260 // Get all blog ids
261 $blog_ids = $this->model->get_blog_ids();
262
263 foreach ( $blog_ids as $blog_id ) {
264
265 switch_to_blog( $blog_id );
266 $this->single_deactivate();
267 }
268
269 restore_current_blog();
270 } else {
271 $this->single_deactivate();
272 }
273 } else {
274 $this->single_deactivate();
275 }
276 }
277
278 /**
279 * flush rewrites on plugin activation so permalinks for them work from the beginning on
280 *
281 * @since 1.0.0
282 * @link http://codex.wordpress.org/Function_Reference/register_post_type#Flushing_Rewrite_on_Activation
283 */
284 /*public function post_types_rewrite_flush(){
285 // load custom post type
286 Advanced_Ads::get_instance()->create_post_types();
287 // flush rewrite rules
288 flush_rewrite_rules();
289 }*/
290
291 /**
292 * remove WP tag edit page for the ad group taxonomy
293 * needed, because we can’t remove it with `show_ui` without also removing the meta box
294 *
295 * @since 1.0.0
296 */
297 public function remove_taxonomy_menu_item() {
298 remove_submenu_page( 'edit.php?post_type=advanced_ads', 'edit-tags.php?taxonomy=advanced_ads_groups&amp;post_type=advanced_ads' );
299 }
300
301 /**
302 * shortcode to include ad in frontend
303 *
304 * @since 1.0.0
305 * @param arr $atts
306 */
307 public function shortcode_display_ad($atts){
308 $id = isset($atts['id']) ? (int) $atts['id'] : 0;
309
310 // use the public available function here
311 return get_ad( $id );
312 }
313
314 /**
315 * shortcode to include ad from an ad group in frontend
316 *
317 * @since 1.0.0
318 * @param arr $atts
319 */
320 public function shortcode_display_ad_group($atts){
321 $id = isset($atts['id']) ? (int) $atts['id'] : 0;
322
323 // use the public available function here
324 return get_ad_group( $id );
325 }
326
327 /**
328 * shortcode to display content of an ad placement in frontend
329 *
330 * @since 1.1.0
331 * @param arr $atts
332 */
333 public function shortcode_display_ad_placement($atts){
334 $id = isset($atts['id']) ? (string) $atts['id'] : '';
335
336 // use the public available function here
337 return get_ad_placement( $id );
338 }
339
340 /**
341 * return plugin options
342 * these are the options updated by the user
343 *
344 * @since 1.0.1
345 * @return array $options
346 * @todo parse default options
347 */
348 public function options() {
349 if ( ! isset( $this->options ) ) {
350 $this->options = get_option( ADVADS_SLUG, array() );
351 }
352
353 return $this->options;
354 }
355
356 /**
357 * update plugin options (not for settings page, but if automatic options are needed)
358 *
359 * @since 1.5.1
360 * @param array $options new options
361 */
362 public function update_options( array $options ) {
363 // do not allow to clear options
364 if ( $options === array() ) {
365 return;
366 }
367
368 $this->options = $options;
369 update_option( ADVADS_SLUG, $options );
370 }
371
372 /**
373 * return internal plugin options
374 * these are options set by the plugin
375 *
376 * @since 1.0.1
377 * @return array $options
378 * @todo parse default options
379 */
380 public function internal_options() {
381 if ( ! isset( $this->internal_options ) ) {
382 $defaults = array(
383 'version' => ADVADS_VERSION,
384 'installed' => time(), // when was this installed
385 );
386 $this->internal_options = get_option( ADVADS_SLUG . '-internal', array() );
387
388 // save defaults
389 if($this->internal_options === array()){
390 $this->internal_options = $defaults;
391 $this->update_internal_options($this->internal_options);
392 }
393
394 // for versions installed prior to 1.5.3 set installed date for now
395 if( ! isset( $this->internal_options['installed'] )){
396 $this->internal_options['installed'] = time();
397 $this->update_internal_options($this->internal_options);
398 }
399 }
400
401 return $this->internal_options;
402 }
403
404 /**
405 * update internal plugin options
406 *
407 * @since 1.5.1
408 * @param array $options new internal options
409 */
410 public function update_internal_options( array $options ) {
411 // do not allow to clear options
412 if ( $options === array() ) {
413 return;
414 }
415
416 $this->internal_options = $options;
417 update_option( ADVADS_SLUG . '-internal', $options );
418 }
419
420 /**
421 * get prefix used for frontend elements
422 *
423 * @since 1.6.8.2
424 */
425 public function get_frontend_prefix(){
426 if ( ! $this->frontend_prefix ) {
427 $options = $this->options();
428
429 if ( ! isset( $options['front-prefix'] ) ) {
430 if ( isset( $options['id-prefix'] ) ) {
431 // deprecated: keeps widgets working that previously received an id based on the front-prefix
432 $this->frontend_prefix = esc_attr( $options['id-prefix'] );
433 } else {
434 $host = parse_url( get_home_url(), PHP_URL_HOST );
435 $this->frontend_prefix = preg_match( '/[A-Za-z][A-Za-z0-9_]{4}/', $host, $result ) ? $result[0] . '-' : Advanced_Ads_Plugin::DEFAULT_FRONTEND_PREFIX;
436 }
437 } else {
438 $this->frontend_prefix = $options['front-prefix'];
439 }
440 }
441 return $this->frontend_prefix;
442 }
443
444 /**
445 * get priority used for injection inside content
446 *
447 * @since 1.6.10.2
448 */
449 public function get_content_injection_priority(){
450 $options = $this->options();
451
452 return isset( $options['content-injection-priority'] ) ? intval( $options['content-injection-priority'] ) : 100;
453 }
454
455 /**
456 * returns the capability needed to perform an action
457 *
458 * @since 1.6.14
459 * @param str $capability a capability to check, can be internal to Advanced Ads
460 * @return str $capability a valid WordPress capability
461 */
462 public static function user_cap( $capability = 'manage_options' ){
463
464 global $advanced_ads_capabilities;
465
466 // admins can do everything
467 // is also a fallback if no option or more specific capability is given
468 if( current_user_can( 'manage_options' ) ){
469 return 'manage_options';
470 }
471
472 return apply_filters( 'advanced-ads-capability', $capability );
473
474 // check, if capability is mapped to an existing WP capability
475 /*if( isset( $advanced_ads_capabilities[ $capability ] ) ){
476 return apply_filters( 'advanced-ads-capability', $advanced_ads_capabilities[ $capability ], $capability );
477 } else {
478 // if not, use 'manage_posts' capability
479 return apply_filters( 'advanced-ads-capability', 'manage_options', $capability );
480 }*/
481
482 }
483
484 /**
485 * Create roles and capabilities
486 *
487 */
488 public function create_capabilities() {
489 if ( $role = get_role( 'administrator' ) ) {
490 $role->add_cap( 'advanced_ads_manage_options' );
491 $role->add_cap( 'advanced_ads_see_interface' );
492 $role->add_cap( 'advanced_ads_edit_ads' );
493 $role->add_cap( 'advanced_ads_manage_placements' );
494 $role->add_cap( 'advanced_ads_place_ads' );
495 }
496 }
497
498 /**
499 * Remove roles and capabilities
500 *
501 */
502 public function remove_capabilities() {
503 if ( $role = get_role( 'administrator' ) ) {
504 $role->remove_cap( 'advanced_ads_manage_options' );
505 $role->remove_cap( 'advanced_ads_see_interface' );
506 $role->remove_cap( 'advanced_ads_edit_ads' );
507 $role->remove_cap( 'advanced_ads_manage_placements' );
508 $role->remove_cap( 'advanced_ads_place_ads' );
509 }
510 }
511
512 /**
513 * Fired when the plugin is uninstalled.
514 */
515 public static function uninstall() {
516 $advads_options = Advanced_Ads::get_instance()->options();
517
518 if ( ! empty( $advads_options['uninstall-delete-data'] ) ) {
519 global $wpdb;
520 $main_blog_id = $wpdb->blogid;
521
522 Advanced_Ads::get_instance()->create_post_types();
523
524 if ( ! is_multisite() ) {
525 Advanced_Ads_Plugin::get_instance()->uninstall_single();
526 } else {
527 $blog_ids = $wpdb->get_col( "SELECT blog_id FROM {$wpdb->blogs}" );
528
529 foreach ( $blog_ids as $blog_id ) {
530 switch_to_blog( $blog_id );
531 Advanced_Ads_Plugin::get_instance()->uninstall_single();
532 }
533 switch_to_blog( $main_blog_id );
534 }
535
536 // Delete assets (main blog).
537 Advanced_Ads_Ad_Blocker_Admin::get_instance()->clear_assets();
538 delete_option( ADVADS_AB_SLUG );
539 }
540
541 }
542
543 /**
544 * Fired for each blog when the plugin is uninstalled.
545 *
546 */
547 protected function uninstall_single() {
548 global $wpdb;
549
550 // Ads.
551 $post_ids = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM {$wpdb->posts} WHERE post_type = %s", Advanced_Ads::POST_TYPE_SLUG ) );
552
553 if ( $post_ids ) {
554 $wpdb->delete(
555 $wpdb->posts,
556 array( 'post_type' => Advanced_Ads::POST_TYPE_SLUG ),
557 array( '%s' )
558 );
559
560 $wpdb->query( "DELETE FROM {$wpdb->postmeta} WHERE post_id IN( " . implode( ',', $post_ids ) . " )" );
561 }
562
563 // Groups.
564 $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 ) );
565
566 foreach ( $term_ids as $term_id ) {
567 wp_delete_term( $term_id, Advanced_Ads::AD_GROUP_TAXONOMY );
568 }
569
570 delete_option( 'advads-ad-groups' );
571 delete_option( Advanced_Ads::AD_GROUP_TAXONOMY . '_children' );
572 delete_option( 'advads-ad-weights' );
573
574 // Placements.
575 delete_option( 'advads-ads-placements' );
576
577 // User metadata.
578 delete_metadata( 'user', null, 'advanced-ads-hide-wizard', '', true );
579 delete_metadata( 'user', null, 'advanced-ads-subscribed', '', true );
580
581 // Post metadata.
582 delete_metadata( 'post', null, '_advads_ad_settings', '', true );
583
584 // Transients.
585 delete_transient( ADVADS_SLUG . '_add-on-updates-checked' );
586
587 delete_option( GADSENSE_OPT_NAME );
588 delete_option( ADVADS_SLUG );
589 delete_option( ADVADS_SLUG . '-internal' );
590 delete_option( ADVADS_SLUG . '-notices' );
591
592 // Widget.
593 $base_widget_id = Advanced_Ads_Widget::get_base_id();
594 delete_option( 'widget_' . $base_widget_id );
595
596 do_action( 'advanced-ads-uninstall' );
597
598 wp_cache_flush();
599 }
600
601 }
602