PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.3-a.1
Jetpack – WP Security, Backup, Speed, & Growth v16.3-a.1
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 13.9.2 14.0.1 All 504 releases
← All changes | extensions/blocks/wordads/wordads.php +77 -19 12.0.3 → 16.3-a.1 View file →
@@ -9,11 +9,17 @@
9 9
10 10 namespace Automattic\Jetpack\Extensions;
11 11
12 12 use Automattic\Jetpack\Blocks;
13 -use Jetpack;
13 +use Automattic\Jetpack\Current_Plan as Jetpack_Plan;
14 +use Automattic\Jetpack\Modules;
15 +use Automattic\Jetpack\Status\Host;
14 16 use Jetpack_Gutenberg;
15 17
18 +if ( ! defined( 'ABSPATH' ) ) {
19 + exit( 0 );
20 +}
21 +
16 22 /**
17 23 * Jetpack's Ads Block class.
18 24 *
19 25 * @since 7.1.0
@@ -18,10 +24,19 @@
18 24 *
19 25 * @since 7.1.0
20 26 */
21 27 class WordAds {
22 - const FEATURE_NAME = 'wordads';
23 - const BLOCK_NAME = 'jetpack/' . self::FEATURE_NAME;
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 + );
24 39
25 40 /**
26 41 * Check if site is on WP.com Simple.
27 42 *
@@ -27,10 +42,11 @@
27 42 *
28 43 * @return bool
29 44 */
30 45 private static function is_wpcom() {
31 - return defined( 'IS_WPCOM' ) && IS_WPCOM;
46 + return ( new Host() )->is_wpcom_simple();
32 47 }
48 +
33 49 /**
34 50 * Check if the WordAds module is active.
35 51 *
36 52 * @return bool
@@ -35,9 +51,9 @@
35 51 *
36 52 * @return bool
37 53 */
38 54 private static function is_jetpack_module_active() {
39 - return method_exists( 'Jetpack', 'is_module_active' ) && Jetpack::is_module_active( 'wordads' );
55 + return ( new Modules() )->is_active( 'wordads' );
40 56 }
41 57
42 58 /**
43 59 * Check if the site is approved for ads for WP.com Simple sites.
@@ -48,9 +64,9 @@
48 64 if ( self::is_wpcom() ) {
49 65 return has_any_blog_stickers( array( 'wordads', 'wordads-approved', 'wordads-approved-misfits' ), get_current_blog_id() );
50 66 }
51 67
52 - return self::is_jetpack_module_active();
68 + return Jetpack_Plan::supports( 'wordads' );
53 69 }
54 70
55 71 /**
56 72 * Register the WordAds block.
@@ -55,16 +71,27 @@
55 71 /**
56 72 * Register the WordAds block.
57 73 */
58 74 public static function register() {
59 - if ( self::is_available() ) {
60 - Blocks::jetpack_register_block(
61 - self::BLOCK_NAME,
62 - array(
63 - 'render_callback' => array( __CLASS__, 'gutenblock_render' ),
64 - )
65 - );
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;
66 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 + );
67 94 }
68 95
69 96 /**
70 97 * Set if the WordAds block is available.
@@ -69,14 +96,16 @@
69 96 /**
70 97 * Set if the WordAds block is available.
71 98 */
72 99 public static function set_availability() {
100 + $block_name = 'wordads';
101 +
73 102 if ( ! self::is_available() ) {
74 - Jetpack_Gutenberg::set_extension_unavailable( self::BLOCK_NAME, 'WordAds unavailable' );
103 + Jetpack_Gutenberg::set_extension_unavailable( $block_name, 'WordAds unavailable' );
75 104 return;
76 105 }
77 106 // Make the block available. Just in case it wasn't registered before.
78 - Jetpack_Gutenberg::set_extension_available( self::BLOCK_NAME );
107 + Jetpack_Gutenberg::set_extension_available( $block_name );
79 108 }
80 109
81 110 /**
82 111 * Renders the WordAds block.
@@ -87,8 +116,13 @@
87 116 */
88 117 public static function gutenblock_render( $attr ) {
89 118 global $wordads;
90 119
120 + /** If the WordAds module is not active, don't render the block. */
121 + if ( ! self::is_jetpack_module_active() ) {
122 + return '';
123 + }
124 +
91 125 /** This filter is already documented in modules/wordads/class-wordads.php `insert_ad()` */
92 126 if (
93 127 empty( $wordads )
94 128 || empty( $wordads->params )
@@ -120,12 +154,36 @@
120 154 if ( isset( $attr['format'] ) && isset( $ad_tag_ids[ $attr['format'] ] ) ) {
121 155 $format = $attr['format'];
122 156 }
123 157
124 - $height = $ad_tag_ids[ $format ]['height'];
125 - $width = $ad_tag_ids[ $format ]['width'];
126 - $snippet = $wordads->get_ad_snippet( $section_id, $height, $width, 'gutenberg', $wordads->get_solo_unit_css() );
127 - 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 );
128 186 }
129 187 }
130 188
131 189 add_action( 'init', array( 'Automattic\\Jetpack\\Extensions\\WordAds', 'register' ) );