PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 1.17.10
Advanced Ads – Ad Manager & AdSense v1.17.10
2.0.23 2.0.22 2.0.21 1.38.0 1.39.0 1.39.1 1.39.2 1.39.3 1.39.4 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.40.0 1.40.1 1.40.2 1.41.0 1.42.0 1.42.1 1.42.2 1.43.0 1.44.0 1.44.1 1.45.0 1.45.1 1.46.0 1.47.0 1.47.1 1.47.2 1.47.3 1.47.4 1.47.5 1.48.0 1.48.1 1.49.0 1.5.0 1.5.0.1 1.5.1 1.5.2 1.5.2.1 1.5.4 1.5.4.1 1.5.5 1.50.0 1.51.0 1.51.1 1.51.2 1.51.3 1.52.0 1.52.1 1.52.2 1.52.3 1.52.4 1.53.0 1.53.1 1.53.2 1.54.0 1.54.1 1.55.0 1.56.0 1.56.1 1.56.2 1.56.3 1.56.4 1.6 1.6.1 1.6.10 1.6.10.1 1.6.10.2 1.6.11 1.6.11.1 1.6.12 1.6.13 1.6.14 1.6.15 1.6.16 1.6.17 1.6.17.1 1.6.17.2 1.6.2 1.6.2.1 1.6.3 1.6.4 1.6.4.1 1.6.5 1.6.6 1.6.6.1 1.6.7 1.6.7.1 1.6.8 1.6.8.1 1.6.8.2 1.6.8.3 1.6.9 1.6.9.1 1.6.9.2 1.6.9.3 1.6.9.4 1.7 1.7.0.1 1.7.0.2 1.7.0.3 1.7.1 1.7.1.1 1.7.1.2 1.7.1.3 1.7.1.4 1.7.1.5 1.7.10 trunk 1.7.11 1.0.1 1.7.12 1.0.2 1.7.13 1.0.3 1.7.14 1.1.0 1.7.15 1.1.1 1.7.16 1.1.2 1.7.17 1.1.3 1.7.18 1.10 1.7.19 1.10.1 1.7.2 1.10.10 1.7.2.1 1.10.11 1.7.20 1.10.12 1.7.21 1.10.2 1.7.22 1.10.3 1.7.23 1.10.4 1.7.24 1.10.5 1.7.25 1.10.6 1.7.3 1.10.7 1.7.4 1.10.8 1.7.4.1 1.10.9 1.7.4.2 1.11 1.7.4.3 1.11.1 1.7.4.4 1.11.2 1.7.4.5 1.12 1.7.5 1.13 1.7.5.1 1.13.1 1.7.6 1.13.2 1.7.7 1.13.3 1.7.8 1.13.4 1.7.9 1.13.5 1.7.9.1 1.13.6 1.7.9.2 1.13.7 1.7.9.3 1.13.8 1.8 1.14 1.8.1 1.14.1 1.8.10 1.14.10 1.8.11 1.14.11 1.8.12 1.14.2 1.8.13 1.14.3 1.8.14 1.14.4 1.8.15 1.14.5 1.8.16 1.14.6 1.8.17 1.14.7 1.8.18 1.14.8 1.8.19 1.14.9 1.8.2 1.15 1.8.20 1.16 1.8.21 1.16.1 1.8.22 1.17 1.8.23 1.17.1 1.8.24 1.17.10 1.8.25 1.17.10-rc.1 1.8.26 1.17.11 1.8.27 1.17.12 1.8.28 1.17.12-rc.1 1.8.29 1.17.2 1.8.3 1.17.3 1.8.30 1.17.4 1.8.4 1.17.5 1.8.5 1.17.6 1.8.6 1.17.7 1.8.7 1.17.8 1.8.8 1.17.9 1.8.9 1.17.9-beta.1 1.9 1.18.0 2.0.0 1.19.0 2.0.1 1.19.1 2.0.10 1.2 2.0.11 1.2.1 2.0.12 1.2.2 2.0.13 1.2.3 2.0.14 1.2.4 2.0.15 1.2.5 2.0.16 1.2.6 2.0.17 1.2.7 2.0.18 1.20.0 2.0.19 1.20.0-rc.1 2.0.2 1.20.0-rc.2 2.0.20 1.20.1 2.0.3 1.20.2 2.0.4 1.20.3 2.0.5 1.21.0 2.0.6 1.21.1 2.0.7 1.22.0 2.0.8 1.22.1 2.0.9 1.22.2 1.23.0 1.23.1 1.23.2 1.24.0 1.24.1 1.24.2 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.29.0 1.29.1 1.3 1.3.1 1.3.10 1.3.11 1.3.12 1.3.13 1.3.14 1.3.15 1.3.16 1.3.17 1.3.18 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.30.0 1.30.1 1.30.2 1.30.2-rc.1 1.30.3 1.30.4 1.30.4-rc.1 1.30.5 1.31.0 1.31.1 1.32.0 1.32.0-rc.1 1.33.0 1.33.1 1.33.2 1.34.0 1.35.0 1.35.1 1.36.0 1.36.1 1.36.2 1.36.3 1.37.0 1.37.1 1.37.2
advanced-ads / classes / widget.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 6 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 6 years ago ad_type_content.php 6 years ago ad_type_dummy.php 6 years ago ad_type_group.php 6 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-notices.php 6 years ago frontend_checks.php 6 years ago plugin.php 6 years ago upgrades.php 7 years ago utils.php 6 years ago visitor-conditions.php 6 years ago widget.php 6 years ago
widget.php
295 lines
1 <?php
2 /**
3 * Advanced Ads Widget
4 *
5 * @package Advanced_Ads_Widget
6 * @author Thomas Maier <support@wpadvancedads.com>
7 * @license GPL-2.0+
8 * @link https://wpadvancedads.com
9 * @copyright 2014 Thomas Maier, Advanced Ads GmbH
10 */
11
12 /**
13 * Ad widget
14 */
15 class Advanced_Ads_Widget extends WP_Widget {
16
17 /**
18 * Advanced_Ads_Widget constructor.
19 */
20 public function __construct() {
21 $prefix = Advanced_Ads_Plugin::get_instance()->get_frontend_prefix();
22 $classname = $prefix . 'widget';
23
24 $widget_ops = array(
25 'classname' => $classname,
26 'description' => __( 'Display Ads and Ad Groups.', 'advanced-ads' ),
27 );
28 $control_ops = array();
29 $base_id = self::get_base_id();
30
31 parent::__construct( $base_id, 'Advanced Ads', $widget_ops, $control_ops );
32
33 add_filter( 'q2w3-fixed-widgets', array( $this, 'q2w3_replace_frontend_id' ) );
34 }
35
36 /**
37 * Echoes the widget content.
38 *
39 * @param array $args Display arguments including 'before_title', 'after_title', 'before_widget', and 'after_widget'.
40 * @param array $instance The settings for the particular instance of the widget.
41 */
42 public function widget( $args, $instance ) {
43 /** This filter is documented in wp-includes/default-widgets.php */
44 $title = apply_filters( 'widget_title', empty( $instance['title'] ) ? '' : $instance['title'], $instance, $this->id_base );
45
46 $item_id = empty( $instance['item_id'] ) ? '' : $instance['item_id'];
47
48 $output = self::output( $item_id );
49 if ( ! $output ) {
50 return;
51 }
52
53 $before_widget = isset( $args['before_widget'] ) ? $args['before_widget'] : '';
54 $after_widget = isset( $args['after_widget'] ) ? $args['after_widget'] : '';
55
56 $before_widget = $this->maybe_replace_frontend_id( $before_widget, $instance );
57
58 //phpcs:disable
59 echo $before_widget;
60 if ( ! empty( $title ) ) {
61 echo $args['before_title'] . $title . $args['after_title'];
62 }
63 echo $output;
64 echo $after_widget;
65 //phpcs:enable
66 }
67
68 /**
69 * Updates a particular instance of a widget.
70 *
71 * This function should check that `$new_instance` is set correctly. The newly-calculated
72 * value of `$instance` should be returned. If false is returned, the instance won't be
73 * saved/updated.
74 *
75 * @param array $new_instance New settings for this instance as input by the user via WP_Widget::form().
76 * @param array $old_instance Old settings for this instance.
77 * @return array Settings to save or bool false to cancel saving.
78 */
79 public function update( $new_instance, $old_instance ) {
80 $instance = $old_instance;
81 $instance['title'] = $new_instance['title'];
82 $instance['item_id'] = $new_instance['item_id'];
83
84 // Allow to remove/replace id for new widgets and if it was allowed earlier.
85 if ( array() === $old_instance || ! empty( $old_instance['remove-widget-id'] ) ) {
86 $instance['remove-widget-id'] = true;
87 }
88 return $instance;
89 }
90
91 /**
92 * Outputs the settings update form.
93 *
94 * @param array $instance Current settings.
95 */
96 public function form( $instance ) {
97 $instance = wp_parse_args(
98 (array) $instance,
99 array(
100 'title' => '',
101 'item_id' => '',
102 )
103 );
104 $title = strip_tags( $instance['title'] );
105 $elementid = $instance['item_id'];
106
107 ?><p><label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php esc_html_e( 'Title:', 'advanced-ads' ); ?></label>
108 <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" /></p>
109 <?php
110 $items = array_merge( self::items_for_select(), self::widget_placements_for_select() );
111 ?>
112 <select id="<?php echo esc_attr( $this->get_field_id( 'item_id' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'item_id' ) ); ?>">
113 <option value=""><?php esc_html_e( '--empty--', 'advanced-ads' ); ?></option>
114 <?php if ( isset( $items['placements'] ) ) : ?>
115 <optgroup label="<?php esc_html_e( 'Placements', 'advanced-ads' ); ?>">
116 <?php foreach ( $items['placements'] as $_item_id => $_item_title ) : ?>
117 <option value="<?php echo esc_attr( $_item_id ); ?>" <?php selected( $_item_id, $elementid ); ?>><?php echo esc_attr( $_item_title ); ?></option>
118 <?php endforeach; ?>
119 </optgroup>
120 <?php endif; ?>
121 <?php if ( isset( $items['groups'] ) ) : ?>
122 <optgroup label="<?php esc_html_e( 'Ad Groups', 'advanced-ads' ); ?>">
123 <?php foreach ( $items['groups'] as $_item_id => $_item_title ) : ?>
124 <option value="<?php echo esc_attr( $_item_id ); ?>" <?php selected( $_item_id, $elementid ); ?>><?php echo esc_html( $_item_title ); ?></option>
125 <?php endforeach; ?>
126 </optgroup>
127 <?php endif; ?>
128 <?php if ( isset( $items['ads'] ) ) : ?>
129 <optgroup label="<?php esc_html_e( 'Ads', 'advanced-ads' ); ?>">
130 <?php foreach ( $items['ads'] as $_item_id => $_item_title ) : ?>
131 <option value="<?php echo esc_attr( $_item_id ); ?>" <?php selected( $_item_id, $elementid ); ?>><?php echo esc_html( $_item_title ); ?></option>
132 <?php endforeach; ?>
133 </optgroup>
134 <?php endif; ?>
135 </select>
136 <?php
137 }
138
139 /**
140 * Get items for widget select field
141 *
142 * @return array $select items for select field.
143 */
144 public static function items_for_select() {
145 $select = array();
146 $model = Advanced_Ads::get_instance()->get_model();
147
148 // load all ads.
149 $ads = $model->get_ads(
150 array(
151 'orderby' => 'title',
152 'order' => 'ASC',
153 )
154 );
155 foreach ( $ads as $_ad ) {
156 $select['ads'][ 'ad_' . $_ad->ID ] = $_ad->post_title;
157 }
158
159 // load all ad groups.
160 $groups = $model->get_ad_groups();
161 foreach ( $groups as $_group ) {
162 $select['groups'][ 'group_' . $_group->term_id ] = $_group->name;
163 }
164
165 return $select;
166 }
167
168 /**
169 * Get widget placements for select field
170 *
171 * @return array $items for select field.
172 */
173 public static function widget_placements_for_select() {
174 $select = array();
175 $placements = Advanced_Ads::get_ad_placements_array();
176
177 if ( is_array( $placements ) ) {
178 ksort( $placements );
179 }
180
181 foreach ( $placements as $_placement_slug => $_placement ) {
182 if ( isset( $_placement['type'] ) && 'sidebar_widget' === $_placement['type'] ) {
183 $select['placements'][ 'placement_' . $_placement_slug ] = $_placement['name'];
184 }
185 }
186
187 return $select;
188 }
189
190 /**
191 * Return content of an in a widget
192 *
193 * @param string $id slug of the display.
194 * @return bool|string
195 */
196 public static function output( $id = '' ) {
197 // get placement data for the slug.
198 if ( empty( $id ) ) {
199 return; }
200
201 $item = explode( '_', $id, 2 );
202
203 if ( isset( $item[1] ) ) {
204 $item_id = $item[1];
205 } elseif ( empty( $item_id ) ) {
206 return;
207 }
208
209 // return either ad or group content.
210 if ( 'ad' === $item[0] ) {
211 return get_ad( absint( $item_id ) );
212 } elseif ( 'group' === $item[0] ) {
213 return get_ad_group( absint( $item_id ) );
214 } elseif ( 'placement' === $item[0] ) {
215 return get_ad_placement( $item_id );
216 }
217 }
218
219 /**
220 * Get the base id of the widget
221 *
222 * @return string
223 */
224 public static function get_base_id() {
225 $options = Advanced_Ads_Plugin::get_instance()->options();
226
227 // deprecated to keep previously changed prefixed working.
228 $prefix2 = ( isset( $options['id-prefix'] ) && '' !== $options['id-prefix'] ) ? $options['id-prefix'] : 'advads_ad_';
229 return $prefix2 . 'widget';
230 }
231
232 /**
233 * Get frontend widget id.
234 *
235 * @param int $number Unique ID number of the current widget instance.
236 * @return string
237 */
238 private function get_frontend_id( $number ) {
239 $prefix = Advanced_Ads_Plugin::get_instance()->get_frontend_prefix();
240 return $prefix . 'widget-' . $number;
241 }
242
243 /**
244 * Make it harder for ad blockers to block the widget.
245 * removes the pre-defined widget ID (e.g., advads_ad_widget-20) and replaces it with one that uses the individual frontend prefix
246 *
247 * @param string $before_widget content before the widget.
248 * @param array $instance Settings for the current widget instance.
249 * @return string $before_widget
250 */
251 private function maybe_replace_frontend_id( $before_widget, $instance ) {
252 if ( ! empty( $instance['remove-widget-id'] )
253 || defined( 'JNEWS_THEME_ID' ) // the JNews theme overrides the widget ID and resets it, so we target this specifically.
254 ) {
255 $pattern = '#\sid=("|\')[^"\']+["\']#';
256 if ( ( defined( 'ADVANCED_ADS_SHOW_WIDGET_ID' ) && ADVANCED_ADS_SHOW_WIDGET_ID )
257 || ! empty( $instance['q2w3_fixed_widget'] )
258 ) {
259 // Replace id.
260 $number = ! empty( $this->number ) ? $this->number : '';
261 $before_widget = preg_replace( $pattern, ' id=$01' . $this->get_frontend_id( $number ) . '$01', $before_widget );
262 } else {
263 // Remove id.
264 $before_widget = preg_replace( $pattern, '', $before_widget );
265 }
266 }
267 return $before_widget;
268 }
269
270 /**
271 * Provide the 'Q2W3 Fixed Widget' plugin with the new frontend widget id.
272 *
273 * @param array $sidebars_widgets existing sidebar widgets.
274 * @return array $sidebars_widgets
275 */
276 public function q2w3_replace_frontend_id( $sidebars_widgets ) {
277 foreach ( $sidebars_widgets as $sidebar => $widgets ) {
278 foreach ( $widgets as $k => $widget ) {
279 $pos = strrpos( $widget, '-' );
280 $option_name = substr( $widget, 0, $pos );
281 $number = substr( $widget, $pos + 1 );
282
283 if ( self::get_base_id() === $option_name ) {
284 $widget_options = get_option( 'widget_' . $option_name );
285 if ( ! empty( $widget_options[ $number ]['remove-widget-id'] ) ) {
286 $sidebars_widgets[ $sidebar ][ $k ] = $this->get_frontend_id( $number );
287 }
288 }
289 }
290 }
291 return $sidebars_widgets;
292 }
293
294 }
295