Completed
Push — add/wordads-shortcode ( b5b352...d5d630 )
by
unknown
25:10 queued 12:01
created

WordAds   C

Complexity

Total Complexity 72

Size/Duplication

Total Lines 518
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Importance

Changes 0
Metric Value
dl 0
loc 518
rs 5.5667
c 0
b 0
f 0
wmc 72
lcom 1
cbo 3

18 Methods

Rating   Name   Duplication   Size   Complexity  
A option() 0 7 2
A __construct() 0 3 1
A init() 0 20 4
A is_infinite_scroll() 0 3 2
C insert_adcode() 0 48 7
A enqueue_scripts() 0 8 1
A insert_head_meta() 0 15 2
A insert_head_iponweb() 0 23 2
B insert_ad() 0 22 4
B insert_inline_ad() 0 24 4
A insert_header_ad() 0 17 3
B insert_header_ad_special() 0 35 6
C get_ad() 0 54 20
A get_ad_snippet() 0 23 2
B get_adblocker_ad() 0 27 6
A should_bail() 0 3 1
B get_house_ad() 0 27 4
A activate() 0 3 1

How to fix   Complexity   

Complex Class

Complex classes like WordAds often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes. You can also have a look at the cohesion graph to spot any un-connected, or weakly-connected components.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

While breaking up the class, it is a good idea to analyze how other classes use WordAds, and based on these observations, apply Extract Interface, too.

1
<?php
2
3
define( 'WORDADS_ROOT', dirname( __FILE__ ) );
4
define( 'WORDADS_BASENAME', plugin_basename( __FILE__ ) );
5
define( 'WORDADS_FILE_PATH', WORDADS_ROOT . '/' . basename( __FILE__ ) );
6
define( 'WORDADS_URL', plugins_url( '/', __FILE__ ) );
7
define( 'WORDADS_API_TEST_ID', '26942' );
8
define( 'WORDADS_API_TEST_ID2', '114160' );
9
10
require_once( WORDADS_ROOT . '/php/widgets.php' );
11
require_once( WORDADS_ROOT . '/php/api.php' );
12
require_once( WORDADS_ROOT . '/php/cron.php' );
13
14
class WordAds {
15
16
	public $params = null;
17
18
	/**
19
	 * The different supported ad types.
20
	 * v0.1 - mrec only for now
21
	 * @var array
22
	 */
23
	public static $ad_tag_ids = array(
24
		'mrec' => array(
25
			'tag'       => '300x250_mediumrectangle',
26
			'height'    => '250',
27
			'width'     => '300',
28
		),
29
		'lrec' => array(
30
			'tag'       => '336x280_largerectangle',
31
			'height'    => '280',
32
			'width'     => '336',
33
		),
34
		'leaderboard' => array(
35
			'tag'       => '728x90_leaderboard',
36
			'height'    => '90',
37
			'width'     => '728',
38
		),
39
		'wideskyscraper' => array(
40
			'tag'       => '160x600_wideskyscraper',
41
			'height'    => '600',
42
			'width'     => '160',
43
		),
44
	);
45
46
	public $section_id_suffix = '3';
47
48
	/**
49
	 * Convenience function for grabbing options from params->options
50
	 * @param  string $option the option to grab
51
	 * @param  mixed  $default (optional)
52
	 * @return option or $default if not set
53
	 *
54
	 * @since 4.5.0
55
	 */
56
	function option( $option, $default = false ) {
57
		if ( ! isset( $this->params->options[ $option ] ) ) {
58
			return $default;
59
		}
60
61
		return $this->params->options[ $option ];
62
	}
63
64
	/**
65
	 * Instantiate the plugin
66
	 *
67
	 * @since 4.5.0
68
	 */
69
	function __construct() {
70
		add_action( 'init', array( $this, 'init' ) );
71
	}
72
73
	/**
74
	 * Code to run on WordPress 'init' hook
75
	 *
76
	 * @since 4.5.0
77
	 */
78
	function init() {
79
		// bail on infinite scroll
80
		if ( self::is_infinite_scroll() ) {
81
			return;
82
		}
83
84
		require_once( WORDADS_ROOT . '/php/params.php' );
85
		$this->params = new WordAds_Params();
86
87
		if ( is_admin() ) {
88
			require_once( WORDADS_ROOT . '/php/admin.php' );
89
			return;
90
		}
91
92
		if ( $this->should_bail() ) {
93
			return;
94
		}
95
96
		$this->insert_adcode();
97
	}
98
99
	/**
100
	 * Check for Jetpack's The_Neverending_Home_Page and use got_infinity
101
	 * @return boolean true if load came from infinite scroll
102
	 *
103
	 * @since 4.5.0
104
	 */
105
	public static function is_infinite_scroll() {
106
		return class_exists( 'The_Neverending_Home_Page' ) && The_Neverending_Home_Page::got_infinity();
107
	}
108
109
	/**
110
	 * Add the actions/filters to insert the ads. Checks for mobile or desktop.
111
	 *
112
	 * @since 4.5.0
113
	 */
114
	private function insert_adcode() {
115
		add_action( 'wp_head', array( $this, 'insert_head_meta' ), 20 );
116
		add_action( 'wp_head', array( $this, 'insert_head_iponweb' ), 30 );
117
		add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
118
119
		/**
120
		 * Filters enabling ads in `the_content` filter
121
		 *
122
		 * @see https://jetpack.com/support/ads/
123
		 *
124
		 * @module wordads
125
		 *
126
		 * @since 5.8.0
127
		 *
128
		 * @param bool True to disable ads in `the_content`
129
		 */
130
		if ( ! apply_filters( 'wordads_content_disable', false ) ) {
131
			add_filter( 'the_content', array( $this, 'insert_ad' ) );
132
		}
133
134
		/**
135
		 * Filters enabling ads in `the_excerpt` filter
136
		 *
137
		 * @see https://jetpack.com/support/ads/
138
		 *
139
		 * @module wordads
140
		 *
141
		 * @since 5.8.0
142
		 *
143
		 * @param bool True to disable ads in `the_excerpt`
144
		 */
145
		if ( ! apply_filters( 'wordads_excerpt_disable', false ) ) {
146
			add_filter( 'the_excerpt', array( $this, 'insert_ad' ) );
147
		}
148
149
		if ( $this->option( 'enable_header_ad', true ) ) {
150
			switch ( get_stylesheet() ) {
151
				case 'twentyseventeen':
152
				case 'twentyfifteen':
153
				case 'twentyfourteen':
154
					add_action( 'wp_footer', array( $this, 'insert_header_ad_special' ) );
155
					break;
156
				default:
157
					add_action( 'wp_head', array( $this, 'insert_header_ad' ), 100 );
158
					break;
159
			}
160
		}
161
	}
162
163
	/**
164
	 * Register desktop scripts and styles
165
	 *
166
	 * @since 4.5.0
167
	 */
168
	function enqueue_scripts() {
169
		wp_enqueue_style(
170
			'wordads',
171
			WORDADS_URL . 'css/style.css',
172
			array(),
173
			'2015-12-18'
174
		);
175
	}
176
177
	/**
178
	 * IPONWEB metadata used by the various scripts
179
	 * @return [type] [description]
0 ignored issues
show
Documentation introduced by
The doc-type [type] could not be parsed: Unknown type name "" at position 0. [(view supported doc-types)

This check marks PHPDoc comments that could not be parsed by our parser. To see which comment annotations we can parse, please refer to our documentation on supported doc-types.

Loading history...
180
	 */
181
	function insert_head_meta() {
182
		$themename = esc_js( get_stylesheet() );
183
		$pagetype = intval( $this->params->get_page_type_ipw() );
184
		$data_tags = ( $this->params->cloudflare ) ? ' data-cfasync="false"' : '';
185
		$site_id = $this->params->blog_id;
186
		echo <<<HTML
187
		<script$data_tags type="text/javascript">
188
			var __ATA_PP = { pt: $pagetype, ht: 2, tn: '$themename', amp: false, siteid: $site_id };
189
			var __ATA = __ATA || {};
190
			__ATA.cmd = __ATA.cmd || [];
191
			__ATA.criteo = __ATA.criteo || {};
192
			__ATA.criteo.cmd = __ATA.criteo.cmd || [];
193
		</script>
194
HTML;
195
	}
196
197
	/**
198
	 * IPONWEB scripts in <head>
199
	 *
200
	 * @since 4.5.0
201
	 */
202
	function insert_head_iponweb() {
203
		$data_tags = ( $this->params->cloudflare ) ? ' data-cfasync="false"' : '';
204
		echo <<<HTML
205
		<link rel='dns-prefetch' href='//s.pubmine.com' />
206
		<link rel='dns-prefetch' href='//x.bidswitch.net' />
207
		<link rel='dns-prefetch' href='//static.criteo.net' />
208
		<link rel='dns-prefetch' href='//ib.adnxs.com' />
209
		<link rel='dns-prefetch' href='//aax.amazon-adsystem.com' />
210
		<link rel='dns-prefetch' href='//bidder.criteo.com' />
211
		<link rel='dns-prefetch' href='//cas.criteo.com' />
212
		<link rel='dns-prefetch' href='//gum.criteo.com' />
213
		<link rel='dns-prefetch' href='//ads.pubmatic.com' />
214
		<link rel='dns-prefetch' href='//gads.pubmatic.com' />
215
		<link rel='dns-prefetch' href='//tpc.googlesyndication.com' />
216
		<link rel='dns-prefetch' href='//ad.doubleclick.net' />
217
		<link rel='dns-prefetch' href='//googleads.g.doubleclick.net' />
218
		<link rel='dns-prefetch' href='//www.googletagservices.com' />
219
		<link rel='dns-prefetch' href='//cdn.switchadhub.com' />
220
		<link rel='dns-prefetch' href='//delivery.g.switchadhub.com' />
221
		<link rel='dns-prefetch' href='//delivery.swid.switchadhub.com' />
222
		<script$data_tags async type="text/javascript" src="//s.pubmine.com/head.js"></script>
223
HTML;
224
	}
225
226
	/**
227
	 * Insert the ad onto the page
228
	 *
229
	 * @since 4.5.0
230
	 */
231
	function insert_ad( $content ) {
232
		// Ad JS won't work in XML feeds.
233
		if ( is_feed() ) {
234
			return $content;
235
		}
236
		/**
237
		 * Allow third-party tools to disable the display of in post ads.
238
		 *
239
		 * @module wordads
240
		 *
241
		 * @since 4.5.0
242
		 *
243
		 * @param bool true Should the in post unit be disabled. Default to false.
244
		 */
245
		$disable = apply_filters( 'wordads_inpost_disable', false );
246
		if ( $disable ) {
247
			return $content;
248
		}
249
250
		$ad_type = $this->option( 'wordads_house' ) ? 'house' : 'iponweb';
251
		return $content . $this->get_ad( 'belowpost', $ad_type );
252
	}
253
254
	/**
255
	 * Insert an inline ad into a post content
256
	 * Used for rendering the `wordad` shortcode.
257
	 *
258
	 * @since 6.1.0
259
	 */
260
	function insert_inline_ad( $content ) {
261
		// Ad JS won't work in XML feeds.
262
		if ( is_feed() ) {
263
			return $content;
264
		}
265
		/**
266
		 * Allow third-party tools to disable the display of in post ads.
267
		 *
268
		 * @module wordads
269
		 *
270
		 * @since 4.5.0
271
		 *
272
		 * @param bool true Should the in post unit be disabled. Default to false.
273
		 */
274
		$disable = apply_filters( 'wordads_inpost_disable', false );
275
		if ( $disable ) {
276
			return $content;
277
		}
278
279
		$ad_type = $this->option( 'wordads_house' ) ? 'house' : 'iponweb';
280
		$this->section_id_suffix .= $this->section_id_suffix;
281
		$content .= $this->get_ad( 'inline', $ad_type );
282
		return $content;
283
	}
284
285
	/**
286
	 * Inserts ad into header
287
	 *
288
	 * @since 4.5.0
289
	 */
290
	function insert_header_ad() {
291
		/**
292
		 * Allow third-party tools to disable the display of header ads.
293
		 *
294
		 * @module wordads
295
		 *
296
		 * @since 4.5.0
297
		 *
298
		 * @param bool true Should the header unit be disabled. Default to false.
299
		 */
300
		if ( apply_filters( 'wordads_header_disable', false ) ) {
301
			return;
302
		}
303
304
		$ad_type = $this->option( 'wordads_house' ) ? 'house' : 'iponweb';
305
		echo $this->get_ad( 'top', $ad_type );
306
	}
307
308
	/**
309
	 * Special cases for inserting header unit via jQuery
310
	 *
311
	 * @since 4.5.0
312
	 */
313
	function insert_header_ad_special() {
314
		/**
315
		 * Allow third-party tools to disable the display of header ads.
316
		 *
317
		 * @module wordads
318
		 *
319
		 * @since 4.5.0
320
		 *
321
		 * @param bool true Should the header unit be disabled. Default to false.
322
		 */
323
		if ( apply_filters( 'wordads_header_disable', false ) ) {
324
			return;
325
		}
326
327
		$selector = '#content';
328
		switch ( get_stylesheet() ) {
329
			case 'twentyseventeen':
330
				$selector = '#content';
331
				break;
332
			case 'twentyfifteen':
333
				$selector = '#main';
334
				break;
335
			case 'twentyfourteen':
336
				$selector = 'article:first';
337
				break;
338
		}
339
340
		$ad_type = $this->option( 'wordads_house' ) ? 'house' : 'iponweb';
341
		echo $this->get_ad( 'top', $ad_type );
342
		echo <<<HTML
343
		<script type="text/javascript">
344
			jQuery('.wpcnt-header').insertBefore('$selector');
345
		</script>
346
HTML;
347
	}
348
349
	/**
350
	 * Get the ad for the spot and type.
351
	 * @param  string $spot top, side, inline, or belowpost
352
	 * @param  string $type iponweb or adsense
353
	 */
354
	function get_ad( $spot, $type = 'iponweb' ) {
355
		$snippet = '';
356
		$blocker_unit = 'mrec';
0 ignored issues
show
Unused Code introduced by
$blocker_unit is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
357
		if ( 'iponweb' == $type ) {
358
			$section_id = WORDADS_API_TEST_ID;
0 ignored issues
show
Unused Code introduced by
$section_id is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
359
			$width = 300;
0 ignored issues
show
Unused Code introduced by
$width is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
360
			$height = 250;
0 ignored issues
show
Unused Code introduced by
$height is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
361
			$second_belowpost = '';
0 ignored issues
show
Unused Code introduced by
$second_belowpost is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
362
			$snippet = '';
363
			if ( 'top' == $spot ) {
364
				// mrec for mobile, leaderboard for desktop
365
				$section_id = 0 === $this->params->blog_id ? WORDADS_API_TEST_ID : $this->params->blog_id . '2';
366
				$width = $this->params->mobile_device ? 300 : 728;
367
				$height = $this->params->mobile_device ? 250 : 90;
368
				$blocker_unit = $this->params->mobile_device ? 'top_mrec' : 'top';
369
				$snippet = $this->get_ad_snippet( $section_id, $height, $width, $blocker_unit );
370
			} else if ( 'belowpost' == $spot ) {
371
				$section_id = 0 === $this->params->blog_id ? WORDADS_API_TEST_ID : $this->params->blog_id . '1';
372
				$width = 300;
373
				$height = 250;
374
375
				$snippet = $this->get_ad_snippet( $section_id, $height, $width, 'mrec', 'float:left;margin-right:5px;margin-top:0px;' );
376
				if ( $this->option( 'wordads_second_belowpost', true ) ) {
377
					$section_id2 = 0 === $this->params->blog_id ? WORDADS_API_TEST_ID2 : $this->params->blog_id . '4';
378
					$snippet .= $this->get_ad_snippet( $section_id2, $height, $width, 'mrec2', 'float:left;margin-top:0px;' );
379
				}
380
			} else if ( 'inline' === $spot ) {
381
				$section_id = 0 === $this->params->blog_id ? WORDADS_API_TEST_ID : $this->params->blog_id . $this->section_id_suffix;
382
				$width = 300;
383
				$height = 250;
384
385
				$snippet = $this->get_ad_snippet( $section_id, $height, $width, 'mrec', 'float:left;margin-right:5px;margin-top:0px;' );
386
			}
387
		} else if ( 'house' == $type ) {
388
			$leaderboard = 'top' == $spot && ! $this->params->mobile_device;
389
			$snippet = $this->get_house_ad( $leaderboard ? 'leaderboard' : 'mrec' );
390
			if ( 'belowpost' == $spot && $this->option( 'wordads_second_belowpost', true ) ) {
391
				$snippet .= $this->get_house_ad( $leaderboard ? 'leaderboard' : 'mrec' );
392
			}
393
		}
394
395
		$header = 'top' == $spot ? 'wpcnt-header' : '';
396
		$about = __( 'Advertisements', 'jetpack' );
397
		return <<<HTML
398
		<div class="wpcnt $header">
399
			<div class="wpa">
400
				<span class="wpa-about">$about</span>
401
				<div class="u $spot">
402
					$snippet
403
				</div>
404
			</div>
405
		</div>
406
HTML;
407
	}
408
409
410
	/**
411
	 * Returns the snippet to be inserted into the ad unit
412
	 * @param  int $section_id
413
	 * @param  int $height
414
	 * @param  int $width
415
	 * @param  string $css
416
	 * @return string
417
	 *
418
	 * @since 5.7
419
	 */
420
	function get_ad_snippet( $section_id, $height, $width, $adblock_unit = 'mrec', $css = '' ) {
421
		$this->ads[] = array( 'id' => $section_id, 'width' => $width, 'height' => $height );
0 ignored issues
show
Bug introduced by
The property ads does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
422
		$data_tags = $this->params->cloudflare ? ' data-cfasync="false"' : '';
423
		$adblock_ad = $this->get_adblocker_ad( $adblock_unit );
424
425
		return <<<HTML
426
		<div style="padding-bottom:15px;width:{$width}px;height:{$height}px;$css">
427
			<div id="atatags-{$section_id}">
428
				<script$data_tags type="text/javascript">
429
				__ATA.cmd.push(function() {
430
					__ATA.initSlot('atatags-{$section_id}',  {
431
						collapseEmpty: 'before',
432
						sectionId: '{$section_id}',
433
						width: {$width},
434
						height: {$height}
435
					});
436
				});
437
				</script>
438
				$adblock_ad
439
			</div>
440
		</div>
441
HTML;
442
	}
443
444
	/**
445
	 * Get Criteo Acceptable Ad unit
446
	 * @param  string $unit mrec, mrec2, widesky, top, top_mrec
447
	 *
448
	 * @since 5.3
449
	 */
450
	public function get_adblocker_ad( $unit = 'mrec' ) {
451
		$data_tags = $this->params->cloudflare ? ' data-cfasync="false"' : '';
452
		$criteo_id = mt_rand();
453
		$height = 250;
454
		$width = 300;
455
		$zone_id = 388248;
456
		if ( 'mrec2' == $unit ) { // 2nd belowpost
457
			$zone_id = 837497;
458
		} else if ( 'widesky' == $unit ) { // sidebar
459
			$zone_id = 563902;
460
			$width = 160;
461
			$height= 600;
462
		} else if ( 'top' == $unit ) { // top leaderboard
463
			$zone_id = 563903;
464
			$width = 728;
465
			$height = 90;
466
		} else if ( 'top_mrec' == $unit ) { // top mrec
467
			$zone_id = 563903;
468
		}
469
470
		return <<<HTML
471
		<div id="crt-$criteo_id" style="width:{$width}px;height:{$height}px;display:none !important;"></div>
472
		<script$data_tags type="text/javascript">
473
		(function(){var c=function(){var a=document.getElementById("crt-{$criteo_id}");window.Criteo?(a.parentNode.style.setProperty("display","inline-block","important"),a.style.setProperty("display","block","important"),window.Criteo.DisplayAcceptableAdIfAdblocked({zoneid:{$zone_id},containerid:"crt-{$criteo_id}",collapseContainerIfNotAdblocked:!0,callifnotadblocked:function(){a.style.setProperty("display","none","important");a.style.setProperty("visbility","hidden","important")}})):(a.style.setProperty("display","none","important"),a.style.setProperty("visibility","hidden","important"))};if(window.Criteo)c();else{if(!__ATA.criteo.script){var b=document.createElement("script");b.src="//static.criteo.net/js/ld/publishertag.js";b.onload=function(){for(var a=0;a<__ATA.criteo.cmd.length;a++){var b=__ATA.criteo.cmd[a];"function"===typeof b&&b()}};(document.head||document.getElementsByTagName("head")[0]).appendChild(b);__ATA.criteo.script=b}__ATA.criteo.cmd.push(c)}})();
474
		</script>
475
HTML;
476
	}
477
478
	/**
479
	 * Check the reasons to bail before we attempt to insert ads.
480
	 * @return true if we should bail (don't insert ads)
481
	 *
482
	 * @since 4.5.0
483
	 */
484
	public function should_bail() {
485
		return ! $this->option( 'wordads_approved' );
486
	}
487
488
	/**
489
	 * Returns markup for HTML5 house ad base on unit
490
	 * @param  string $unit mrec, widesky, or leaderboard
491
	 * @return string       markup for HTML5 house ad
492
	 *
493
	 * @since 4.7.0
494
	 */
495
	public function get_house_ad( $unit = 'mrec' ) {
496
		if ( ! in_array( $unit, array( 'mrec', 'widesky', 'leaderboard' ) ) ) {
497
			$unit = 'mrec';
498
		}
499
500
		$width  = 300;
501
		$height = 250;
502
		if ( 'widesky' == $unit ) {
503
			$width  = 160;
504
			$height = 600;
505
		} else if ( 'leaderboard' == $unit ) {
506
			$width  = 728;
507
			$height = 90;
508
		}
509
510
		return <<<HTML
511
		<iframe
512
			src="https://s0.wp.com/wp-content/blog-plugins/wordads/house/html5/$unit/index.html"
513
			width="$width"
514
			height="$height"
515
			frameborder="0"
516
			scrolling="no"
517
			marginheight="0"
518
			marginwidth="0">
519
		</iframe>
520
HTML;
521
	}
522
523
	/**
524
	 * Activation hook actions
525
	 *
526
	 * @since 4.5.0
527
	 */
528
	public static function activate() {
529
		WordAds_API::update_wordads_status_from_api();
530
	}
531
}
532
533
add_action( 'jetpack_activate_module_wordads', array( 'WordAds', 'activate' ) );
534
add_action( 'jetpack_activate_module_wordads', array( 'WordAds_Cron', 'activate' ) );
535
add_action( 'jetpack_deactivate_module_wordads', array( 'WordAds_Cron', 'deactivate' ) );
536
537
global $wordads;
538
$wordads = new WordAds();
539