PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 14.9.2
Jetpack – WP Security, Backup, Speed, & Growth v14.9.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 / extensions / blocks / wordads / wordads.php
jetpack / extensions / blocks / wordads Last commit date
wordads.php 1 year ago
wordads.php
188 lines
1 <?php //phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2 /**
3 * Ads Block.
4 *
5 * @since 7.1.0
6 *
7 * @package automattic/jetpack
8 */
9
10 namespace Automattic\Jetpack\Extensions;
11
12 use Automattic\Jetpack\Blocks;
13 use Automattic\Jetpack\Current_Plan as Jetpack_Plan;
14 use Automattic\Jetpack\Modules;
15 use Automattic\Jetpack\Status\Host;
16 use Jetpack_Gutenberg;
17
18 /**
19 * Jetpack's Ads Block class.
20 *
21 * @since 7.1.0
22 */
23 class WordAds {
24 /**
25 * Mapping array of gutenberg ad snippet with the WordAds_Smart formats.
26 *
27 * @var array
28 */
29 private static $gutenberg_ad_snippet_x_smart_format = array(
30 'gutenberg_300x250' => 'gutenberg_rectangle',
31 'gutenberg_728x90' => 'gutenberg_leaderboard',
32 'gutenberg_320x50' => 'gutenberg_mobile_leaderboard',
33 'gutenberg_160x600' => 'gutenberg_skyscraper',
34 );
35
36 /**
37 * Check if site is on WP.com Simple.
38 *
39 * @return bool
40 */
41 private static function is_wpcom() {
42 return ( new Host() )->is_wpcom_simple();
43 }
44
45 /**
46 * Check if the WordAds module is active.
47 *
48 * @return bool
49 */
50 private static function is_jetpack_module_active() {
51 return ( new Modules() )->is_active( 'wordads' );
52 }
53
54 /**
55 * Check if the site is approved for ads for WP.com Simple sites.
56 *
57 * @return bool
58 */
59 private static function is_available() {
60 if ( self::is_wpcom() ) {
61 return has_any_blog_stickers( array( 'wordads', 'wordads-approved', 'wordads-approved-misfits' ), get_current_blog_id() );
62 }
63
64 return Jetpack_Plan::supports( 'wordads' );
65 }
66
67 /**
68 * Register the WordAds block.
69 */
70 public static function register() {
71 /*
72 * The block is available even when the module is not active,
73 * so we can display a nudge to activate the module instead of the block.
74 * However, since non-admins cannot activate modules, we do not display the empty block for them.
75 */
76 if ( ! self::is_jetpack_module_active() && ! current_user_can( 'jetpack_activate_modules' ) ) {
77 return;
78 }
79
80 if ( ! self::is_available() ) {
81 return;
82 }
83
84 Blocks::jetpack_register_block(
85 __DIR__,
86 array(
87 'render_callback' => array( __CLASS__, 'gutenblock_render' ),
88 )
89 );
90 }
91
92 /**
93 * Set if the WordAds block is available.
94 */
95 public static function set_availability() {
96 $block_name = 'wordads';
97
98 if ( ! self::is_available() ) {
99 Jetpack_Gutenberg::set_extension_unavailable( $block_name, 'WordAds unavailable' );
100 return;
101 }
102 // Make the block available. Just in case it wasn't registered before.
103 Jetpack_Gutenberg::set_extension_available( $block_name );
104 }
105
106 /**
107 * Renders the WordAds block.
108 *
109 * @param array $attr Block attributes.
110 *
111 * @return string Block HTML.
112 */
113 public static function gutenblock_render( $attr ) {
114 global $wordads;
115
116 /** If the WordAds module is not active, don't render the block. */
117 if ( ! self::is_jetpack_module_active() ) {
118 return '';
119 }
120
121 /** This filter is already documented in modules/wordads/class-wordads.php `insert_ad()` */
122 if (
123 empty( $wordads )
124 || empty( $wordads->params )
125 || is_feed()
126 || apply_filters( 'wordads_inpost_disable', false )
127 ) {
128 return '';
129 }
130
131 if ( ! empty( $attr['hideMobile'] ) && $wordads->params->is_mobile() ) {
132 return '';
133 }
134
135 if ( ! self::is_wpcom() && $wordads->option( 'wordads_house' ) ) {
136 return $wordads->get_ad( 'inline', 'house' );
137 }
138
139 // section_id is mostly deprecated at this point, but it helps us (devs) keep track of which ads end up where
140 // 6 is to keep track of gutenblock ads.
141 $section_id = $wordads->params->blog_id . '6';
142 $align = 'center';
143 if ( isset( $attr['align'] ) && in_array( $attr['align'], array( 'left', 'center', 'right' ), true ) ) {
144 $align = $attr['align'];
145 }
146 $align = 'align' . $align;
147
148 $ad_tag_ids = $wordads->get_ad_tags();
149 $format = 'mrec';
150 if ( isset( $attr['format'] ) && isset( $ad_tag_ids[ $attr['format'] ] ) ) {
151 $format = $attr['format'];
152 }
153
154 $height = $ad_tag_ids[ $format ]['height'];
155 $width = $ad_tag_ids[ $format ]['width'];
156 $location = 'gutenberg';
157 $snippet = $wordads->get_ad_snippet( $section_id, $height, $width, $location, $wordads->get_solo_unit_css() );
158
159 $key = "{$location}_{$width}x{$height}";
160 $smart_format = self::$gutenberg_ad_snippet_x_smart_format[ $key ] ?? null;
161 // phpcs:disable WordPress.Security.NonceVerification.Recommended
162 $is_watl_enabled = $smart_format && ( isset( $_GET[ $smart_format ] ) && 'true' === $_GET[ $smart_format ] );
163 $ad_div = $wordads->get_ad_div( 'inline', $snippet, array( $align ) );
164 // Render IPW div if WATL is not enabled.
165 if ( ! $is_watl_enabled ) {
166 return $ad_div;
167 }
168
169 // Remove linebreaks and sanitize.
170 $snippet = esc_js( str_replace( array( "\n", "\t", "\r" ), '', $ad_div ) );
171
172 // phpcs:disable WordPress.Security.EscapeOutput.OutputNotEscaped
173 $fallback_snippet = <<<HTML
174 <script>
175 var sas_fallback = sas_fallback || [];
176 sas_fallback.push(
177 { tag: "$snippet", type: '$smart_format' }
178 );
179 </script>
180 HTML;
181
182 return $fallback_snippet . $wordads->get_watl_ad_html_tag( $smart_format );
183 }
184 }
185
186 add_action( 'init', array( 'Automattic\\Jetpack\\Extensions\\WordAds', 'register' ) );
187 add_action( 'jetpack_register_gutenberg_extensions', array( 'Automattic\\Jetpack\\Extensions\\WordAds', 'set_availability' ) );
188