PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 13.7.2
Jetpack – WP Security, Backup, Speed, & Growth v13.7.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 / modules / wordads / php / class-wordads-smart.php
jetpack / modules / wordads / php Last commit date
networks 5 years ago class-wordads-admin.php 2 years ago class-wordads-api.php 4 years ago class-wordads-array-utils.php 2 years ago class-wordads-california-privacy.php 3 years ago class-wordads-ccpa-do-not-sell-link-widget.php 3 years ago class-wordads-consent-management-provider.php 2 years ago class-wordads-cron.php 5 years ago class-wordads-params.php 2 years ago class-wordads-sidebar-widget.php 2 years ago class-wordads-smart.php 2 years ago
class-wordads-smart.php
263 lines
1 <?php
2 /**
3 * An implementation for ads served through Equativ Smart Ad Server.
4 *
5 * @package automattic/jetpack
6 */
7
8 use Automattic\Jetpack\Assets;
9
10 // phpcs:disable WordPress.WP.EnqueuedResources.NonEnqueuedScript
11
12 require_once WORDADS_ROOT . '/php/class-wordads-array-utils.php';
13
14 /**
15 * Contains all the implementation details for Smart ads
16 */
17 class WordAds_Smart {
18
19 /**
20 * The single instance of the class.
21 *
22 * @var WordAds_Smart
23 */
24 protected static $instance = null;
25
26 /**
27 * Is this an AMP request?
28 *
29 * @var bool
30 */
31 private $is_amp;
32
33 /**
34 * Current blog theme from get_stylesheet().
35 *
36 * @var string
37 */
38 private $theme;
39
40 /**
41 * Has Smart asset been enqueued?
42 *
43 * @var bool True if Smart asset has been enqueued.
44 */
45 private $is_asset_enqueued = false;
46
47 /**
48 * Toggle for inline ads.
49 *
50 * @var bool True if inline ads are enabled.
51 */
52 private $is_inline_enabled;
53
54 /**
55 * Private constructor.
56 */
57 private function __construct() {
58 }
59
60 /**
61 * Main Class Instance.
62 *
63 * Ensures only one instance of WordAds_Smart is loaded or can be loaded.
64 *
65 * @return WordAds_Smart
66 */
67 public static function instance() {
68 if ( self::$instance === null ) {
69 self::$instance = new self();
70 }
71 return self::$instance;
72 }
73
74 /**
75 * Initialize the ads.
76 *
77 * @param WordAds_Params $params Object containing WordAds settings.
78 *
79 * @return void
80 */
81 public function init( WordAds_Params $params ) {
82 $this->is_amp = function_exists( 'amp_is_request' ) && amp_is_request();
83 $this->theme = get_stylesheet();
84 $this->is_inline_enabled = is_singular( 'post' ) && $params->options['wordads_inline_enabled'];
85
86 // Allow override.
87 // phpcs:disable WordPress.Security.NonceVerification.Recommended
88 if ( isset( $_GET['inline'] ) && 'true' === $_GET['inline'] ) {
89 $this->is_inline_enabled = true;
90 }
91 if ( $this->is_inline_enabled ) {
92 // Insert ads.
93 $this->insert_ads();
94 }
95 }
96
97 /**
98 * Enqueue any front-end CSS and JS.
99 *
100 * @return void
101 */
102 public function enqueue_assets() {
103
104 if ( $this->is_asset_enqueued ) {
105 return;
106 }
107
108 add_action( 'wp_head', array( $this, 'insert_config' ) );
109
110 Assets::register_script(
111 'adflow_script_loader',
112 '_inc/build/wordads/js/adflow-loader.min.js',
113 JETPACK__PLUGIN_FILE,
114 array(
115 'nonmin_path' => 'modules/wordads/js/adflow-loader.js',
116 'dependencies' => array(),
117 'enqueue' => true,
118 'version' => JETPACK__VERSION,
119 )
120 );
121
122 wp_enqueue_script(
123 'adflow_config',
124 esc_url( $this->get_config_url() ),
125 array( 'adflow_script_loader' ),
126 JETPACK__VERSION,
127 false
128 );
129
130 $this->is_asset_enqueued = true;
131 }
132
133 /**
134 * Inserts ad tags on the page.
135 *
136 * @return void
137 */
138 private function insert_ads() {
139 if ( $this->is_amp ) {
140 return;
141 }
142
143 // Don't run on not found pages.
144 if ( is_404() ) {
145 return;
146 }
147
148 // Enqueue JS assets.
149 $this->enqueue_assets();
150
151 $is_static_front_page = is_front_page() && 'page' === get_option( 'show_on_front' );
152
153 if ( ! ( $is_static_front_page || is_home() ) ) {
154 if ( $this->is_inline_enabled ) {
155 add_filter(
156 'the_content',
157 array( $this, 'insert_inline_marker' ),
158 10
159 );
160 }
161 }
162 }
163
164 /**
165 * Inserts JS configuration used by watl.js.
166 *
167 * @return void
168 */
169 public function insert_config() {
170 global $post;
171
172 $config = array(
173 'blog_id' => $this->get_blog_id(),
174 'post_id' => ( $post instanceof WP_Post ) && is_singular( 'post' ) ? $post->ID : null,
175 'theme' => $this->theme,
176 'target' => $this->target_keywords(),
177 '_' => array(
178 'title' => __( 'Advertisement', 'jetpack' ),
179 'privacy_settings' => __( 'Privacy Settings', 'jetpack' ),
180 ),
181 'inline' => array(
182 'enabled' => $this->is_inline_enabled,
183 ),
184 );
185
186 // Do conversion.
187 $js_config = WordAds_Array_Utils::array_to_js_object( $config );
188
189 // Output script.
190 wp_print_inline_script_tag( "var wa_smart = $js_config; wa_smart.cmd = [];" );
191 }
192
193 /**
194 * Gets the URL to a JSONP endpoint with configuration data.
195 *
196 * @return string The URL.
197 */
198 private function get_config_url(): string {
199 return sprintf(
200 'https://public-api.wordpress.com/wpcom/v2/sites/%1$d/adflow/conf/?_jsonp=a8c_adflow_callback',
201 $this->get_blog_id()
202 );
203 }
204
205 /**
206 * Places marker at the end of the content so inline can identify the post content container.
207 *
208 * @param string|null $content The post content.
209 * @return string|null The post content with the marker appended.
210 */
211 public function insert_inline_marker( $content ) {
212 if ( $content === null ) {
213 return $content;
214 }
215 $inline_ad_marker = '<span id="wordads-inline-marker" style="display: none;"></span>';
216
217 // Append the ad to the post content.
218 return $content . $inline_ad_marker;
219 }
220
221 /**
222 * Gets a formatted list of target keywords.
223 *
224 * @return string Formatted list of target keywords.
225 */
226 private function target_keywords(): string {
227 $target_keywords = array_merge(
228 $this->get_blog_keywords(),
229 $this->get_language_keywords()
230 // TODO: Include categorization.
231 );
232
233 return implode( ';', $target_keywords );
234 }
235
236 /**
237 * Gets a formatted list of blog keywords.
238 *
239 * @return array The list of blog keywords.
240 */
241 private function get_blog_keywords(): array {
242 return array( 'wp_blog_id=' . $this->get_blog_id() );
243 }
244
245 /**
246 * Gets the site language formatted as a keyword.
247 *
248 * @return array The language as a keyword.
249 */
250 private function get_language_keywords(): array {
251 return array( 'language=' . explode( '-', get_locale() )[0] );
252 }
253
254 /**
255 * Gets the blog's ID.
256 *
257 * @return int The blog's ID.
258 */
259 private function get_blog_id(): int {
260 return Jetpack::get_option( 'id', 0 );
261 }
262 }
263