Completed
Push — add/sync-health ( fae778...ec7404 )
by
unknown
49:17 queued 35:13
created

Health   A

Complexity

Total Complexity 15

Size/Duplication

Total Lines 129
Duplicated Lines 6.2 %

Coupling/Cohesion

Components 0
Dependencies 1

Importance

Changes 0
Metric Value
dl 8
loc 129
rs 10
c 0
b 0
f 0
wmc 15
lcom 0
cbo 1

3 Methods

Rating   Name   Duplication   Size   Complexity  
B get_status() 3 17 7
A update_status() 0 19 4
A is_status_defined() 5 9 4

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
 * 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
	 * Out of sync status code.
53
	 *
54
	 * @access public
55
	 *
56
	 * @var string
57
	 */
58
	const STATUS_OUT_OF_SYNC = 'out_of_sync';
59
60
	/**
61
	 * In sync status code.
62
	 *
63
	 * @access public
64
	 *
65
	 * @var string
66
	 */
67
	const STATUS_IN_SYNC = 'in_sync';
68
69
	/**
70
	 * Initializing status code.
71
	 *
72
	 * @access public
73
	 *
74
	 * @var string
75
	 */
76
	const STATUS_INITIALIZING = 'initializing';
77
78
	/**
79
	 * Get a human-readable Sync Health Status.
80
	 *
81
	 * @return string Sync Health Status
82
	 */
83
	public static function get_status() {
84
		$status = \Jetpack_Options::get_option( self::STATUS_OPTION );
85
86 View Code Duplication
		if ( false === $status || ! is_array( $status ) || empty( $status[ self::OPTION_STATUS_KEY ] ) ) {
87
			return self::STATUS_UNKNOWN;
88
		}
89
90
		switch ( $status[ self::OPTION_STATUS_KEY ] ) {
91
			case self::STATUS_OUT_OF_SYNC:
92
			case self::STATUS_IN_SYNC:
93
			case self::STATUS_INITIALIZING:
94
				return $status[ self::OPTION_STATUS_KEY ];
95
			default:
96
				return self::STATUS_UNKNOWN;
97
		}
98
99
	}
100
101
	/**
102
	 * Update Sync Health Status.
103
	 *
104
	 * @param string $status Sync Status.
105
	 */
106
	public static function update_status( $status ) {
107
		// Default Status Option.
108
		$new_status = array(
109
			self::OPTION_STATUS_KEY    => self::STATUS_UNKNOWN,
110
			self::OPTION_TIMESTAMP_KEY => microtime( true ),
111
		);
112
113
		switch ( $status ) {
114
115
			case self::STATUS_OUT_OF_SYNC:
116
			case self::STATUS_IN_SYNC:
117
			case self::STATUS_INITIALIZING:
118
				$new_status[ self::OPTION_STATUS_KEY ] = $status;
119
				break;
120
121
		}
122
123
		\Jetpack_Options::update_option( self::STATUS_OPTION, $new_status );
124
	}
125
126
	/**
127
	 * Check if Status has been previously set.
128
	 *
129
	 * @return bool is a Status defined
130
	 */
131
	public static function is_status_defined() {
132
		$status = \Jetpack_Options::get_option( self::STATUS_OPTION );
133
134 View Code Duplication
		if ( false === $status || ! is_array( $status ) || empty( $status[ self::OPTION_STATUS_KEY ] ) ) {
135
			return false;
136
		} else {
137
			return true;
138
		}
139
	}
140
141
}
142