Completed
Push — add/actions-upload-artifact ( 865b9f...2a6d8f )
by
unknown
13:39 queued 06:58
created

Health::update_status()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
nc 4
nop 1
dl 0
loc 17
rs 9.7
c 0
b 0
f 0
1
<?php
2
/**
3
 * Health class.
4
 *
5
 * @package automattic/jetpack-sync
6
 */
7
8
namespace Automattic\Jetpack\Sync;
9
10
/**
11
 * Health class.
12
 */
13
class Health {
14
15
	/**
16
	 * Prefix of the blog lock transient.
17
	 *
18
	 * @access public
19
	 *
20
	 * @var string
21
	 */
22
	const STATUS_OPTION = 'sync_health_status';
23
24
	/**
25
	 * Status key in option array.
26
	 *
27
	 * @access public
28
	 *
29
	 * @var string
30
	 */
31
	const OPTION_STATUS_KEY = 'status';
32
33
	/**
34
	 * Timestamp key in option array.
35
	 *
36
	 * @access public
37
	 *
38
	 * @var string
39
	 */
40
	const OPTION_TIMESTAMP_KEY = 'timestamp';
41
42
	/**
43
	 * Unknown status code.
44
	 *
45
	 * @access public
46
	 *
47
	 * @var string
48
	 */
49
	const STATUS_UNKNOWN = 'unknown';
50
51
	/**
52
	 * Disabled status code.
53
	 *
54
	 * @access public
55
	 *
56
	 * @var string
57
	 */
58
	const STATUS_DISABLED = 'disabled';
59
60
	/**
61
	 * Out of sync status code.
62
	 *
63
	 * @access public
64
	 *
65
	 * @var string
66
	 */
67
	const STATUS_OUT_OF_SYNC = 'out_of_sync';
68
69
	/**
70
	 * In sync status code.
71
	 *
72
	 * @access public
73
	 *
74
	 * @var string
75
	 */
76
	const STATUS_IN_SYNC = 'in_sync';
77
78
	/**
79
	 * If sync is active, Health-related hooks will be initialized after plugins are loaded.
80
	 */
81
	public static function init() {
82
		add_action( 'jetpack_full_sync_end', array( __ClASS__, 'full_sync_end_update_status' ), 10, 2 );
83
	}
84
85
	/**
86
	 * Gets health status code.
87
	 *
88
	 * @return string Sync Health Status
89
	 */
90
	public static function get_status() {
91
		$status = \Jetpack_Options::get_option( self::STATUS_OPTION );
92
93 View Code Duplication
		if ( false === $status || ! is_array( $status ) || empty( $status[ self::OPTION_STATUS_KEY ] ) ) {
94
			return self::STATUS_UNKNOWN;
95
		}
96
97
		switch ( $status[ self::OPTION_STATUS_KEY ] ) {
98
			case self::STATUS_DISABLED:
99
			case self::STATUS_OUT_OF_SYNC:
100
			case self::STATUS_IN_SYNC:
101
				return $status[ self::OPTION_STATUS_KEY ];
102
			default:
103
				return self::STATUS_UNKNOWN;
104
		}
105
106
	}
107
108
	/**
109
	 * When the Jetpack plugin is upgraded, set status to disabled if sync is not enabled,
110
	 * or to unknown, if the status has never been set before.
111
	 */
112
	public static function on_jetpack_upgraded() {
113
		if ( ! Settings::is_sync_enabled() ) {
114
			self::update_status( self::STATUS_DISABLED );
115
			return;
116
		}
117
		if ( false === self::is_status_defined() ) {
118
			self::update_status( self::STATUS_UNKNOWN );
119
		}
120
	}
121
122
	/**
123
	 * When the Jetpack plugin is activated, set status to disabled if sync is not enabled,
124
	 * or to unknown.
125
	 */
126
	public static function on_jetpack_activated() {
127
		if ( ! Settings::is_sync_enabled() ) {
128
			self::update_status( self::STATUS_DISABLED );
129
			return;
130
		}
131
		self::update_status( self::STATUS_UNKNOWN );
132
	}
133
134
	/**
135
	 * Updates sync health status with either a valid status, or an unknown status.
136
	 *
137
	 * @param string $status Sync Status.
138
	 */
139
	public static function update_status( $status ) {
140
		// Default Status Option.
141
		$new_status = array(
142
			self::OPTION_STATUS_KEY    => self::STATUS_UNKNOWN,
143
			self::OPTION_TIMESTAMP_KEY => microtime( true ),
144
		);
145
146
		switch ( $status ) {
147
			case self::STATUS_DISABLED:
148
			case self::STATUS_OUT_OF_SYNC:
149
			case self::STATUS_IN_SYNC:
150
				$new_status[ self::OPTION_STATUS_KEY ] = $status;
151
				break;
152
		}
153
154
		\Jetpack_Options::update_option( self::STATUS_OPTION, $new_status );
155
	}
156
157
	/**
158
	 * Check if Status has been previously set.
159
	 *
160
	 * @return bool is a Status defined
161
	 */
162
	public static function is_status_defined() {
163
		$status = \Jetpack_Options::get_option( self::STATUS_OPTION );
164
165 View Code Duplication
		if ( false === $status || ! is_array( $status ) || empty( $status[ self::OPTION_STATUS_KEY ] ) ) {
166
			return false;
167
		} else {
168
			return true;
169
		}
170
	}
171
172
	/**
173
	 * Update Sync Status if Full Sync ended of Posts
174
	 *
175
	 * @param string $checksum The checksum that's currently being processed.
176
	 * @param array  $range The ranges of object types being processed.
177
	 */
178
	public static function full_sync_end_update_status( $checksum, $range ) {
179
		if ( isset( $range['posts'] ) ) {
180
			self::update_status( self::STATUS_IN_SYNC );
181
		}
182
	}
183
184
}
185