Completed
Push — add/sync-health ( ba0b46...06adb5 )
by
unknown
54:33 queued 45:51
created

Health::set_initial_status()   A

Complexity

Conditions 3
Paths 4

Size

Total Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
nc 4
nop 0
dl 0
loc 9
rs 9.9666
c 0
b 0
f 0
1
<?php
2
/**
3
 * Status class.
4
 *
5
 * @package automattic/jetpack-sync
6
 */
7
8
namespace Automattic\Jetpack\Sync;
9
10
/**
11
 * Status 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
	 * Initializing status code.
80
	 *
81
	 * @access public
82
	 *
83
	 * @var string
84
	 */
85
	const STATUS_INITIALIZING = 'initializing';
86
87
	/**
88
	 * Gets health status code.
89
	 *
90
	 * @return string Sync Health Status
91
	 */
92
	public static function get_status() {
93
		$status = \Jetpack_Options::get_option( self::STATUS_OPTION );
94
95 View Code Duplication
		if ( false === $status || ! is_array( $status ) || empty( $status[ self::OPTION_STATUS_KEY ] ) ) {
96
			return self::STATUS_UNKNOWN;
97
		}
98
99
		switch ( $status[ self::OPTION_STATUS_KEY ] ) {
100
			case self::STATUS_DISABLED:
101
			case self::STATUS_OUT_OF_SYNC:
102
			case self::STATUS_IN_SYNC:
103
			case self::STATUS_INITIALIZING:
104
				return $status[ self::OPTION_STATUS_KEY ];
105
			default:
106
				return self::STATUS_UNKNOWN;
107
		}
108
109
	}
110
111
	/**
112
	 * Sets sync health status to either STATUS_INITIALIZING or, if sync is disabled,
113
	 * to STATUS_DISABLED. This method is hooked to Jetpack's plugin activation and
114
	 * upgrade actions.
115
	 */
116
	public static function set_initial_status() {
117
		if ( false === self::is_status_defined() ) {
118
			self::update_status( self::STATUS_INITIALIZING );
119
		}
120
121
		if ( ! Settings::is_sync_enabled() ) {
122
			self::update_status( self::STATUS_DISABLED );
123
		}
124
	}
125
126
	/**
127
	 * Updates sync health status with either a valid status, or an unknown status.
128
	 *
129
	 * @param string $status Sync Status.
130
	 */
131
	public static function update_status( $status ) {
132
		// Default Status Option.
133
		$new_status = array(
134
			self::OPTION_STATUS_KEY    => self::STATUS_UNKNOWN,
135
			self::OPTION_TIMESTAMP_KEY => microtime( true ),
136
		);
137
138
		switch ( $status ) {
139
			case self::STATUS_DISABLED:
140
			case self::STATUS_OUT_OF_SYNC:
141
			case self::STATUS_IN_SYNC:
142
			case self::STATUS_INITIALIZING:
143
				$new_status[ self::OPTION_STATUS_KEY ] = $status;
144
				break;
145
		}
146
147
		\Jetpack_Options::update_option( self::STATUS_OPTION, $new_status );
148
	}
149
150
	/**
151
	 * Check if Status has been previously set.
152
	 *
153
	 * @return bool is a Status defined
154
	 */
155
	public static function is_status_defined() {
156
		$status = \Jetpack_Options::get_option( self::STATUS_OPTION );
157
158 View Code Duplication
		if ( false === $status || ! is_array( $status ) || empty( $status[ self::OPTION_STATUS_KEY ] ) ) {
159
			return false;
160
		} else {
161
			return true;
162
		}
163
	}
164
165
}
166