Completed
Push — add/e2e-mailchimp-block-test ( e217db...6066d0 )
by Yaroslav
98:30 queued 85:55
created

Jetpack_Monitor   A

Complexity

Total Complexity 17

Size/Duplication

Total Lines 131
Duplicated Lines 28.24 %

Coupling/Cohesion

Components 2
Dependencies 3

Importance

Changes 0
Metric Value
dl 37
loc 131
rs 10
c 0
b 0
f 0
wmc 17
lcom 2
cbo 3

9 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A activate_module() 0 5 2
A jetpack_modules_loaded() 0 3 1
A is_active() 11 11 2
A update_option_receive_jetpack_monitor_notification() 0 16 2
A user_receives_notifications() 0 16 3
A activate_monitor() 13 13 2
A deactivate_monitor() 13 13 2
A monitor_get_last_downtime() 0 20 2

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
<?php
2
/**
3
 * Module Name: Monitor
4
 * Module Description: Jetpack’s downtime monitoring will continuously watch your site, and alert you the moment that downtime is detected.
5
 * Sort Order: 28
6
 * Recommendation Order: 10
7
 * First Introduced: 2.6
8
 * Requires Connection: Yes
9
 * Auto Activate: No
10
 * Module Tags: Recommended
11
 * Feature: Security
12
 * Additional Search Queries: monitor, uptime, downtime, monitoring, maintenance, maintenance mode, offline, site is down, site down, down, repair, error
13
 */
14
15
class Jetpack_Monitor {
16
17
	public $module = 'monitor';
18
19
	function __construct() {
20
		add_action( 'jetpack_modules_loaded', array( $this, 'jetpack_modules_loaded' ) );
21
		add_action( 'jetpack_activate_module_monitor', array( $this, 'activate_module' ) );
22
	}
23
24
	public function activate_module() {
25
		if ( Jetpack::is_user_connected() ) {
26
			self::update_option_receive_jetpack_monitor_notification( true );
27
		}
28
	}
29
30
	public function jetpack_modules_loaded() {
31
		Jetpack::enable_module_configurable( $this->module );
32
	}
33
34 View Code Duplication
	public function is_active() {
35
		Jetpack::load_xml_rpc_client();
36
		$xml = new Jetpack_IXR_Client( array(
37
			'user_id' => get_current_user_id()
38
		) );
39
		$xml->query( 'jetpack.monitor.isActive' );
40
		if ( $xml->isError() ) {
41
			wp_die( sprintf( '%s: %s', $xml->getErrorCode(), $xml->getErrorMessage() ) );
42
		}
43
		return $xml->getResponse();
44
	}
45
46
	public function update_option_receive_jetpack_monitor_notification( $value ) {
47
		Jetpack::load_xml_rpc_client();
48
		$xml = new Jetpack_IXR_Client( array(
49
			'user_id' => get_current_user_id()
50
		) );
51
		$xml->query( 'jetpack.monitor.setNotifications', (bool) $value );
52
53
		if ( $xml->isError() ) {
54
			wp_die( sprintf( '%s: %s', $xml->getErrorCode(), $xml->getErrorMessage() ) );
55
		}
56
57
		// To be used only in Jetpack_Core_Json_Api_Endpoints::get_remote_value.
58
		update_option( 'monitor_receive_notifications', (bool) $value );
59
60
		return true;
61
	}
62
63
	/**
64
	 * Checks the status of notifications for current Jetpack site user.
65
	 *
66
	 * @since 2.8
67
	 * @since 4.1.0 New parameter $die_on_error.
68
	 *
69
	 * @param bool $die_on_error Whether to issue a wp_die when an error occurs or return a WP_Error object.
70
	 *
71
	 * @return boolean|WP_Error
72
	 */
73
	static function user_receives_notifications( $die_on_error = true ) {
74
		Jetpack::load_xml_rpc_client();
75
		$xml = new Jetpack_IXR_Client( array(
76
			'user_id' => get_current_user_id()
77
		) );
78
		$xml->query( 'jetpack.monitor.isUserInNotifications' );
79
80
		if ( $xml->isError() ) {
81
			if ( $die_on_error ) {
82
				wp_die( sprintf( '%s: %s', $xml->getErrorCode(), $xml->getErrorMessage() ) );
83
			} else {
84
				return new WP_Error( $xml->getErrorCode(), $xml->getErrorMessage(), array( 'status' => 400 ) );
0 ignored issues
show
Unused Code introduced by
The call to WP_Error::__construct() has too many arguments starting with $xml->getErrorCode().

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
85
			}
86
		}
87
		return $xml->getResponse();
88
	}
89
90 View Code Duplication
	public function activate_monitor() {
91
		Jetpack::load_xml_rpc_client();
92
		$xml = new Jetpack_IXR_Client( array(
93
			'user_id' => get_current_user_id()
94
		) );
95
96
		$xml->query( 'jetpack.monitor.activate' );
97
98
		if ( $xml->isError() ) {
99
			wp_die( sprintf( '%s: %s', $xml->getErrorCode(), $xml->getErrorMessage() ) );
100
		}
101
		return true;
102
	}
103
104 View Code Duplication
	public function deactivate_monitor() {
105
		Jetpack::load_xml_rpc_client();
106
		$xml = new Jetpack_IXR_Client( array(
107
			'user_id' => get_current_user_id()
108
		) );
109
110
		$xml->query( 'jetpack.monitor.deactivate' );
111
112
		if ( $xml->isError() ) {
113
			wp_die( sprintf( '%s: %s', $xml->getErrorCode(), $xml->getErrorMessage() ) );
114
		}
115
		return true;
116
	}
117
118
	/*
119
	 * Returns date of the last downtime.
120
	 *
121
	 * @since 4.0.0
122
	 * @return date in YYYY-MM-DD HH:mm:ss format
123
	 */
124
	public function monitor_get_last_downtime() {
125
//		if ( $last_down = get_transient( 'monitor_last_downtime' ) ) {
126
//			return $last_down;
127
//		}
128
129
		Jetpack::load_xml_rpc_client();
130
		$xml = new Jetpack_IXR_Client( array(
131
			'user_id' => get_current_user_id()
132
		) );
133
134
		$xml->query( 'jetpack.monitor.getLastDowntime' );
135
136
		if ( $xml->isError() ) {
137
			return new WP_Error( 'monitor-downtime', $xml->getErrorMessage() );
0 ignored issues
show
Unused Code introduced by
The call to WP_Error::__construct() has too many arguments starting with 'monitor-downtime'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
138
		}
139
140
		set_transient( 'monitor_last_downtime', $xml->getResponse(), 10 * MINUTE_IN_SECONDS );
141
142
		return $xml->getResponse();
143
	}
144
145
}
146
147
new Jetpack_Monitor;
148