PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.0-beta
Jetpack – WP Security, Backup, Speed, & Growth v16.0-beta
16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / modules / wordads / php / class-wordads-sidebar-widget.php
jetpack / modules / wordads / php Last commit date
networks 5 years ago class-wordads-admin.php 7 months ago class-wordads-api.php 7 months ago class-wordads-array-utils.php 7 months ago class-wordads-california-privacy.php 6 months ago class-wordads-ccpa-do-not-sell-link-widget.php 7 months ago class-wordads-consent-management-provider.php 6 months ago class-wordads-cron.php 7 months ago class-wordads-formats.php 7 months ago class-wordads-params.php 7 months ago class-wordads-shortcode.php 7 months ago class-wordads-sidebar-widget.php 7 months ago class-wordads-smart.php 2 weeks ago
class-wordads-sidebar-widget.php
226 lines
1 <?php
2 /**
3 * Widget for adding ads to a sidebar.
4 *
5 * @package automattic/jetpack
6 */
7
8 if ( ! defined( 'ABSPATH' ) ) {
9 exit( 0 );
10 }
11
12 /**
13 * Widget for inserting an ad into your sidebar
14 *
15 * @since 4.5.0
16 */
17 class WordAds_Sidebar_Widget extends WP_Widget {
18
19 /**
20 * Allowed tags.
21 *
22 * @var string[]
23 */
24 private static $allowed_tags = array( 'mrec', 'wideskyscraper', 'leaderboard' );
25
26 /**
27 * Mapping array of widget sizes with the WordAds_Smart formats.
28 *
29 * @var string[]
30 */
31 private static $sizes_x_smart_format = array(
32 '300x250' => 'sidebar_widget_mediumrectangle',
33 '728x90' => 'sidebar_widget_leaderboard',
34 '160x600' => 'sidebar_widget_wideskyscraper',
35 );
36
37 /**
38 * Number of widgets.
39 *
40 * @var int
41 */
42 private static $num_widgets = 0;
43
44 /**
45 * WordAds_Sidebar_Widget constructor.
46 */
47 public function __construct() {
48 parent::__construct(
49 'wordads_sidebar_widget',
50 /** This filter is documented in modules/widgets/facebook-likebox.php */
51 apply_filters( 'jetpack_widget_name', 'Ads' ),
52 array(
53 'description' => __( 'Insert an ad unit wherever you can place a widget.', 'jetpack' ),
54 'customize_selective_refresh' => true,
55 )
56 );
57
58 add_filter( 'widget_types_to_hide_from_legacy_widget_block', array( $this, 'hide_widget_in_block_editor' ) );
59 }
60
61 /**
62 * Remove the Ad widget from the Legacy Widget block
63 *
64 * @param array $widget_types List of widgets that are currently removed from the Legacy Widget block.
65 *
66 * @return array $widget_types New list of widgets that will be removed.
67 */
68 public function hide_widget_in_block_editor( $widget_types ) {
69 $widget_types[] = 'wordads_sidebar_widget';
70 return $widget_types;
71 }
72
73 /**
74 * The Widget outputter.
75 *
76 * @param array $args Widget args.
77 * @param array $instance The Widget instance.
78 *
79 * @return bool|void
80 */
81 public function widget( $args, $instance ) {
82 global $wordads;
83 if ( $wordads->should_bail() ) {
84 return false;
85 }
86
87 if ( ! isset( $instance['unit'] ) ) {
88 $instance['unit'] = 'mrec';
89 }
90
91 ++self::$num_widgets;
92 $width = WordAds::$ad_tag_ids[ $instance['unit'] ]['width'];
93 $height = WordAds::$ad_tag_ids[ $instance['unit'] ]['height'];
94 $unit_id = 1 === self::$num_widgets ? 3 : self::$num_widgets + 3; // 2nd belowpost is '4'
95 $section_id = 0 === $wordads->params->blog_id ?
96 WORDADS_API_TEST_ID :
97 $wordads->params->blog_id . $unit_id;
98
99 $smart_format = self::$sizes_x_smart_format[ "{$width}x{$height}" ];
100 // phpcs:disable WordPress.Security.NonceVerification.Recommended
101 $is_watl_enabled = isset( $_GET['wordads-logging'] ) && isset( $_GET[ $smart_format ] ) && 'true' === $_GET[ $smart_format ];
102
103 // Get the widget snippet.
104 $widget_snippet = $this->get_widget_snippet( $instance, $section_id, $height, $width );
105
106 // Render the IPW or house ad if WATL is disabled.
107 if ( ! $is_watl_enabled ) {
108 // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
109 echo $widget_snippet;
110 return;
111 }
112
113 // Remove linebreaks and sanitize.
114 $tag = esc_js( str_replace( array( "\n", "\t", "\r" ), '', $widget_snippet ) );
115
116 // Add the fallback to be processed by WATL.
117 $fallback_snippet = <<<HTML
118 <script type="text/javascript">
119 var sas_fallback = sas_fallback || [];
120 sas_fallback.push(
121 { tag: "$tag", type: '$smart_format' }
122 );
123 </script>
124 HTML;
125
126 // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
127 echo $fallback_snippet . $wordads::get_watl_ad_html_tag( $smart_format );
128 }
129
130 /**
131 * The widget snippet.
132 *
133 * @param array $instance The widget instance.
134 * @param string $section_id The section id.
135 * @param int $height The ad height.
136 * @param int $width The ad width.
137 *
138 * @return string
139 */
140 private function get_widget_snippet( $instance, $section_id, $height, $width ) {
141 global $wordads;
142
143 if ( $wordads->option( 'wordads_house', true ) ) {
144 $unit = 'mrec';
145 if ( 'leaderboard' === $instance['unit'] && ! $this->params->mobile_device ) {
146 $unit = 'leaderboard';
147 } elseif ( 'wideskyscraper' === $instance['unit'] ) {
148 $unit = 'widesky';
149 }
150
151 $snippet = $wordads->get_house_ad( $unit );
152 } else {
153 return $wordads->get_ad_snippet( $section_id, $height, $width, 'widget' );
154 }
155
156 $about = __( 'Advertisements', 'jetpack' );
157 $unit = esc_attr( $instance['unit'] );
158
159 return <<<HTML
160 <div class="wpcnt">
161 <div class="wpa">
162 <span class="wpa-about">$about</span>
163 <div class="u $unit">
164 $snippet
165 </div>
166 </div>
167 </div>
168 HTML;
169 }
170
171 /**
172 * The widget settings form.
173 *
174 * @param array $instance Widget instance.
175 *
176 * @return string|void
177 */
178 public function form( $instance ) {
179 // ad unit type.
180 if ( isset( $instance['unit'] ) ) {
181 $unit = $instance['unit'];
182 } else {
183 $unit = 'mrec';
184 }
185 ?>
186 <p>
187 <label for="<?php echo esc_attr( $this->get_field_id( 'unit' ) ); ?>"><?php esc_html_e( 'Tag Dimensions:', 'jetpack' ); ?></label>
188 <select class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'unit' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'unit' ) ); ?>">
189 <?php
190 foreach ( WordAds::$ad_tag_ids as $ad_unit => $properties ) {
191 if ( ! in_array( $ad_unit, self::$allowed_tags, true ) ) {
192 continue;
193 }
194
195 $splits = explode( '_', $properties['tag'] );
196 $unit_pretty = "{$splits[0]} {$splits[1]}";
197 $selected = selected( $ad_unit, $unit, false );
198 echo "<option value='", esc_attr( $ad_unit ), "' ", esc_attr( $selected ), '>', esc_html( $unit_pretty ), '</option>';
199 }
200 ?>
201 </select>
202 </p>
203 <?php
204 }
205
206 /**
207 * The Widget updater.
208 *
209 * @param array $new_instance The revised instance.
210 * @param array $old_instance Original instance.
211 *
212 * @return array
213 */
214 public function update( $new_instance, $old_instance ) {
215 $instance = $old_instance;
216
217 if ( in_array( $new_instance['unit'], self::$allowed_tags, true ) ) {
218 $instance['unit'] = $new_instance['unit'];
219 } else {
220 $instance['unit'] = 'mrec';
221 }
222
223 return $instance;
224 }
225 }
226