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