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
← All changes | extensions/blocks/wordads/wordads.php +67 -15 13.8.3 → 16.3-a.7 View file →
@@ -10,11 +10,16 @@
10 10 namespace Automattic\Jetpack\Extensions;
11 11
12 12 use Automattic\Jetpack\Blocks;
13 13 use Automattic\Jetpack\Current_Plan as Jetpack_Plan;
14 -use Jetpack;
14 +use Automattic\Jetpack\Modules;
15 +use Automattic\Jetpack\Status\Host;
15 16 use Jetpack_Gutenberg;
16 17
18 +if ( ! defined( 'ABSPATH' ) ) {
19 + exit( 0 );
20 +}
21 +
17 22 /**
18 23 * Jetpack's Ads Block class.
19 24 *
20 25 * @since 7.1.0
@@ -20,14 +25,26 @@
20 25 * @since 7.1.0
21 26 */
22 27 class WordAds {
23 28 /**
29 + * Mapping array of gutenberg ad snippet with the WordAds_Smart formats.
30 + *
31 + * @var array
32 + */
33 + private static $gutenberg_ad_snippet_x_smart_format = array(
34 + 'gutenberg_300x250' => 'gutenberg_rectangle',
35 + 'gutenberg_728x90' => 'gutenberg_leaderboard',
36 + 'gutenberg_320x50' => 'gutenberg_mobile_leaderboard',
37 + 'gutenberg_160x600' => 'gutenberg_skyscraper',
38 + );
39 +
40 + /**
24 41 * Check if site is on WP.com Simple.
25 42 *
26 43 * @return bool
27 44 */
28 45 private static function is_wpcom() {
29 - return defined( 'IS_WPCOM' ) && IS_WPCOM;
46 + return ( new Host() )->is_wpcom_simple();
30 47 }
31 48
32 49 /**
33 50 * Check if the WordAds module is active.
@@ -34,9 +51,9 @@
34 51 *
35 52 * @return bool
36 53 */
37 54 private static function is_jetpack_module_active() {
38 - return method_exists( 'Jetpack', 'is_module_active' ) && Jetpack::is_module_active( 'wordads' );
55 + return ( new Modules() )->is_active( 'wordads' );
39 56 }
40 57
41 58 /**
42 59 * Check if the site is approved for ads for WP.com Simple sites.
@@ -54,16 +71,27 @@
54 71 /**
55 72 * Register the WordAds block.
56 73 */
57 74 public static function register() {
58 - if ( self::is_available() ) {
59 - Blocks::jetpack_register_block(
60 - __DIR__,
61 - array(
62 - 'render_callback' => array( __CLASS__, 'gutenblock_render' ),
63 - )
64 - );
75 + /*
76 + * The block is available even when the module is not active,
77 + * so we can display a nudge to activate the module instead of the block.
78 + * However, since non-admins cannot activate modules, we do not display the empty block for them.
79 + */
80 + if ( ! self::is_jetpack_module_active() && ! current_user_can( 'jetpack_activate_modules' ) ) {
81 + return;
65 82 }
83 +
84 + if ( ! self::is_available() ) {
85 + return;
86 + }
87 +
88 + Blocks::jetpack_register_block(
89 + __DIR__,
90 + array(
91 + 'render_callback' => array( __CLASS__, 'gutenblock_render' ),
92 + )
93 + );
66 94 }
67 95
68 96 /**
69 97 * Set if the WordAds block is available.
@@ -68,9 +96,9 @@
68 96 /**
69 97 * Set if the WordAds block is available.
70 98 */
71 99 public static function set_availability() {
72 - $block_name = Blocks::get_block_name( __DIR__ );
100 + $block_name = 'wordads';
73 101
74 102 if ( ! self::is_available() ) {
75 103 Jetpack_Gutenberg::set_extension_unavailable( $block_name, 'WordAds unavailable' );
76 104 return;
@@ -126,12 +154,36 @@
126 154 if ( isset( $attr['format'] ) && isset( $ad_tag_ids[ $attr['format'] ] ) ) {
127 155 $format = $attr['format'];
128 156 }
129 157
130 - $height = $ad_tag_ids[ $format ]['height'];
131 - $width = $ad_tag_ids[ $format ]['width'];
132 - $snippet = $wordads->get_ad_snippet( $section_id, $height, $width, 'gutenberg', $wordads->get_solo_unit_css() );
133 - return $wordads->get_ad_div( 'inline', $snippet, array( $align ) );
158 + $height = $ad_tag_ids[ $format ]['height'];
159 + $width = $ad_tag_ids[ $format ]['width'];
160 + $location = 'gutenberg';
161 + $snippet = $wordads->get_ad_snippet( $section_id, $height, $width, $location, $wordads->get_solo_unit_css() );
162 +
163 + $key = "{$location}_{$width}x{$height}";
164 + $smart_format = self::$gutenberg_ad_snippet_x_smart_format[ $key ] ?? null;
165 + // phpcs:disable WordPress.Security.NonceVerification.Recommended
166 + $is_watl_enabled = $smart_format && ( isset( $_GET[ $smart_format ] ) && 'true' === $_GET[ $smart_format ] );
167 + $ad_div = $wordads->get_ad_div( 'inline', $snippet, array( $align ) );
168 + // Render IPW div if WATL is not enabled.
169 + if ( ! $is_watl_enabled ) {
170 + return $ad_div;
171 + }
172 +
173 + // Remove linebreaks and sanitize.
174 + $snippet = esc_js( str_replace( array( "\n", "\t", "\r" ), '', $ad_div ) );
175 +
176 + $fallback_snippet = <<<HTML
177 + <script>
178 + var sas_fallback = sas_fallback || [];
179 + sas_fallback.push(
180 + { tag: "$snippet", type: '$smart_format' }
181 + );
182 + </script>
183 +HTML;
184 +
185 + return $fallback_snippet . $wordads->get_watl_ad_html_tag( $smart_format );
134 186 }
135 187 }
136 188
137 189 add_action( 'init', array( 'Automattic\\Jetpack\\Extensions\\WordAds', 'register' ) );