PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.3-a.7
Jetpack – WP Security, Backup, Speed, & Growth v16.3-a.7
16.3-a.5 16.3-a.7 16.3-a.3 16.3-a.1 16.2 16.2-beta 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 All 506 releases
jetpack / modules / wordads / php / class-wordads-sidebar-widget.php

class-wordads-sidebar-widget.php in Jetpack – WP Security, Backup, Speed, & Growth 16.3-a.7, at modules/wordads/php/class-wordads-sidebar-widget.php

226 lines 5.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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