PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 14.2.2
Jetpack – WP Security, Backup, Speed, & Growth v14.2.2
12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 13.7.2 13.8.3 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 14.4.2 14.5.1 14.6.1 14.7.1 14.8.1 14.9.2 15.0.3 15.1.2 15.2.1 15.3.2 15.4.1 15.5.1 15.6.1 15.7.2 15.8.1 15.9.2 16.0.2 16.1.3 16.2-a.5 16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 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 2 years ago class-wordads-api.php 4 years ago class-wordads-array-utils.php 2 years ago class-wordads-california-privacy.php 3 years ago class-wordads-ccpa-do-not-sell-link-widget.php 3 years ago class-wordads-consent-management-provider.php 2 years ago class-wordads-cron.php 5 years ago class-wordads-params.php 1 year ago class-wordads-shortcode.php 1 year ago class-wordads-sidebar-widget.php 1 year ago class-wordads-smart.php 1 year ago
class-wordads-sidebar-widget.php
222 lines
1 <?php
2 /**
3 * Widget for adding ads to a sidebar.
4 *
5 * @package automattic/jetpack
6 */
7
8 /**
9 * Widget for inserting an ad into your sidebar
10 *
11 * @since 4.5.0
12 */
13 class WordAds_Sidebar_Widget extends WP_Widget {
14
15 /**
16 * Allowed tags.
17 *
18 * @var string[]
19 */
20 private static $allowed_tags = array( 'mrec', 'wideskyscraper', 'leaderboard' );
21
22 /**
23 * Mapping array of widget sizes with the WordAds_Smart formats.
24 *
25 * @var string[]
26 */
27 private static $sizes_x_smart_format = array(
28 '300x250' => 'sidebar_widget_mediumrectangle',
29 '728x90' => 'sidebar_widget_leaderboard',
30 '160x600' => 'sidebar_widget_wideskyscraper',
31 );
32
33 /**
34 * Number of widgets.
35 *
36 * @var int
37 */
38 private static $num_widgets = 0;
39
40 /**
41 * WordAds_Sidebar_Widget constructor.
42 */
43 public function __construct() {
44 parent::__construct(
45 'wordads_sidebar_widget',
46 /** This filter is documented in modules/widgets/facebook-likebox.php */
47 apply_filters( 'jetpack_widget_name', 'Ads' ),
48 array(
49 'description' => __( 'Insert an ad unit wherever you can place a widget.', 'jetpack' ),
50 'customize_selective_refresh' => true,
51 )
52 );
53
54 add_filter( 'widget_types_to_hide_from_legacy_widget_block', array( $this, 'hide_widget_in_block_editor' ) );
55 }
56
57 /**
58 * Remove the Ad widget from the Legacy Widget block
59 *
60 * @param array $widget_types List of widgets that are currently removed from the Legacy Widget block.
61 *
62 * @return array $widget_types New list of widgets that will be removed.
63 */
64 public function hide_widget_in_block_editor( $widget_types ) {
65 $widget_types[] = 'wordads_sidebar_widget';
66 return $widget_types;
67 }
68
69 /**
70 * The Widget outputter.
71 *
72 * @param array $args Widget args.
73 * @param array $instance The Widget instance.
74 *
75 * @return bool|void
76 */
77 public function widget( $args, $instance ) {
78 global $wordads;
79 if ( $wordads->should_bail() ) {
80 return false;
81 }
82
83 if ( ! isset( $instance['unit'] ) ) {
84 $instance['unit'] = 'mrec';
85 }
86
87 ++self::$num_widgets;
88 $width = WordAds::$ad_tag_ids[ $instance['unit'] ]['width'];
89 $height = WordAds::$ad_tag_ids[ $instance['unit'] ]['height'];
90 $unit_id = 1 === self::$num_widgets ? 3 : self::$num_widgets + 3; // 2nd belowpost is '4'
91 $section_id = 0 === $wordads->params->blog_id ?
92 WORDADS_API_TEST_ID :
93 $wordads->params->blog_id . $unit_id;
94
95 $smart_format = self::$sizes_x_smart_format[ "{$width}x{$height}" ];
96 // phpcs:disable WordPress.Security.NonceVerification.Recommended
97 $is_watl_enabled = isset( $_GET['wordads-logging'] ) && isset( $_GET[ $smart_format ] ) && 'true' === $_GET[ $smart_format ];
98
99 // Get the widget snippet.
100 $widget_snippet = $this->get_widget_snippet( $instance, $section_id, $height, $width );
101
102 // Render the IPW or house ad if WATL is disabled.
103 if ( ! $is_watl_enabled ) {
104 // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
105 echo $widget_snippet;
106 return;
107 }
108
109 // Remove linebreaks and sanitize.
110 $tag = esc_js( str_replace( array( "\n", "\t", "\r" ), '', $widget_snippet ) );
111
112 // Add the fallback to be processed by WATL.
113 $fallback_snippet = <<<HTML
114 <script type="text/javascript">
115 var sas_fallback = sas_fallback || [];
116 sas_fallback.push(
117 { tag: "$tag", type: '$smart_format' }
118 );
119 </script>
120 HTML;
121
122 // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
123 echo $fallback_snippet . $wordads::get_watl_ad_html_tag( $smart_format );
124 }
125
126 /**
127 * The widget snippet.
128 *
129 * @param array $instance The widget instance.
130 * @param string $section_id The section id.
131 * @param int $height The ad height.
132 * @param int $width The ad width.
133 *
134 * @return string
135 */
136 private function get_widget_snippet( $instance, $section_id, $height, $width ) {
137 global $wordads;
138
139 if ( $wordads->option( 'wordads_house', true ) ) {
140 $unit = 'mrec';
141 if ( 'leaderboard' === $instance['unit'] && ! $this->params->mobile_device ) {
142 $unit = 'leaderboard';
143 } elseif ( 'wideskyscraper' === $instance['unit'] ) {
144 $unit = 'widesky';
145 }
146
147 $snippet = $wordads->get_house_ad( $unit );
148 } else {
149 return $wordads->get_ad_snippet( $section_id, $height, $width, 'widget' );
150 }
151
152 $about = __( 'Advertisements', 'jetpack' );
153 $unit = esc_attr( $instance['unit'] );
154
155 return <<<HTML
156 <div class="wpcnt">
157 <div class="wpa">
158 <span class="wpa-about">$about</span>
159 <div class="u $unit">
160 $snippet
161 </div>
162 </div>
163 </div>
164 HTML;
165 }
166
167 /**
168 * The widget settings form.
169 *
170 * @param array $instance Widget instance.
171 *
172 * @return string|void
173 */
174 public function form( $instance ) {
175 // ad unit type.
176 if ( isset( $instance['unit'] ) ) {
177 $unit = $instance['unit'];
178 } else {
179 $unit = 'mrec';
180 }
181 ?>
182 <p>
183 <label for="<?php echo esc_attr( $this->get_field_id( 'unit' ) ); ?>"><?php esc_html_e( 'Tag Dimensions:', 'jetpack' ); ?></label>
184 <select class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'unit' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'unit' ) ); ?>">
185 <?php
186 foreach ( WordAds::$ad_tag_ids as $ad_unit => $properties ) {
187 if ( ! in_array( $ad_unit, self::$allowed_tags, true ) ) {
188 continue;
189 }
190
191 $splits = explode( '_', $properties['tag'] );
192 $unit_pretty = "{$splits[0]} {$splits[1]}";
193 $selected = selected( $ad_unit, $unit, false );
194 echo "<option value='", esc_attr( $ad_unit ), "' ", esc_attr( $selected ), '>', esc_html( $unit_pretty ), '</option>';
195 }
196 ?>
197 </select>
198 </p>
199 <?php
200 }
201
202 /**
203 * The Widget updater.
204 *
205 * @param array $new_instance The revised instance.
206 * @param array $old_instance Original instance.
207 *
208 * @return array
209 */
210 public function update( $new_instance, $old_instance ) {
211 $instance = $old_instance;
212
213 if ( in_array( $new_instance['unit'], self::$allowed_tags, true ) ) {
214 $instance['unit'] = $new_instance['unit'];
215 } else {
216 $instance['unit'] = 'mrec';
217 }
218
219 return $instance;
220 }
221 }
222