PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.0-beta
Jetpack – WP Security, Backup, Speed, & Growth v16.0-beta
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 2 weeks ago
wordads.php
191 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 if ( ! defined( 'ABSPATH' ) ) {
19 exit( 0 );
20 }
21
22 /**
23 * Jetpack's Ads Block class.
24 *
25 * @since 7.1.0
26 */
27 class WordAds {
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 /**
41 * Check if site is on WP.com Simple.
42 *
43 * @return bool
44 */
45 private static function is_wpcom() {
46 return ( new Host() )->is_wpcom_simple();
47 }
48
49 /**
50 * Check if the WordAds module is active.
51 *
52 * @return bool
53 */
54 private static function is_jetpack_module_active() {
55 return ( new Modules() )->is_active( 'wordads' );
56 }
57
58 /**
59 * Check if the site is approved for ads for WP.com Simple sites.
60 *
61 * @return bool
62 */
63 private static function is_available() {
64 if ( self::is_wpcom() ) {
65 return has_any_blog_stickers( array( 'wordads', 'wordads-approved', 'wordads-approved-misfits' ), get_current_blog_id() );
66 }
67
68 return Jetpack_Plan::supports( 'wordads' );
69 }
70
71 /**
72 * Register the WordAds block.
73 */
74 public static function register() {
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;
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 );
94 }
95
96 /**
97 * Set if the WordAds block is available.
98 */
99 public static function set_availability() {
100 $block_name = 'wordads';
101
102 if ( ! self::is_available() ) {
103 Jetpack_Gutenberg::set_extension_unavailable( $block_name, 'WordAds unavailable' );
104 return;
105 }
106 // Make the block available. Just in case it wasn't registered before.
107 Jetpack_Gutenberg::set_extension_available( $block_name );
108 }
109
110 /**
111 * Renders the WordAds block.
112 *
113 * @param array $attr Block attributes.
114 *
115 * @return string Block HTML.
116 */
117 public static function gutenblock_render( $attr ) {
118 global $wordads;
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
125 /** This filter is already documented in modules/wordads/class-wordads.php `insert_ad()` */
126 if (
127 empty( $wordads )
128 || empty( $wordads->params )
129 || is_feed()
130 || apply_filters( 'wordads_inpost_disable', false )
131 ) {
132 return '';
133 }
134
135 if ( ! empty( $attr['hideMobile'] ) && $wordads->params->is_mobile() ) {
136 return '';
137 }
138
139 if ( ! self::is_wpcom() && $wordads->option( 'wordads_house' ) ) {
140 return $wordads->get_ad( 'inline', 'house' );
141 }
142
143 // section_id is mostly deprecated at this point, but it helps us (devs) keep track of which ads end up where
144 // 6 is to keep track of gutenblock ads.
145 $section_id = $wordads->params->blog_id . '6';
146 $align = 'center';
147 if ( isset( $attr['align'] ) && in_array( $attr['align'], array( 'left', 'center', 'right' ), true ) ) {
148 $align = $attr['align'];
149 }
150 $align = 'align' . $align;
151
152 $ad_tag_ids = $wordads->get_ad_tags();
153 $format = 'mrec';
154 if ( isset( $attr['format'] ) && isset( $ad_tag_ids[ $attr['format'] ] ) ) {
155 $format = $attr['format'];
156 }
157
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 );
186 }
187 }
188
189 add_action( 'init', array( 'Automattic\\Jetpack\\Extensions\\WordAds', 'register' ) );
190 add_action( 'jetpack_register_gutenberg_extensions', array( 'Automattic\\Jetpack\\Extensions\\WordAds', 'set_availability' ) );
191