Completed
Push — fix/gulp-env ( ec4107...cf0b47 )
by
unknown
133:51 queued 124:05
created

Jetpack_Sync_Module_Constants::get_all_constants()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
nc 1
nop 0
dl 0
loc 6
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
class Jetpack_Sync_Module_Constants extends Jetpack_Sync_Module {
4
	const CONSTANTS_CHECKSUM_OPTION_NAME = 'jetpack_constants_sync_checksum';
5
	const CONSTANTS_AWAIT_TRANSIENT_NAME = 'jetpack_sync_constants_await';
6
7
	public function name() {
8
		return 'constants';
9
	}
10
11
	private $constants_whitelist;
12
13
	public function set_defaults() {
14
		$this->constants_whitelist       = Jetpack_Sync_Defaults::$default_constants_whitelist;
0 ignored issues
show
Bug introduced by
The property default_constants_whitelist cannot be accessed from this context as it is declared private in class Jetpack_Sync_Defaults.

This check looks for access to properties that are not accessible from the current context.

If you need to make a property accessible to another context you can either raise its visibility level or provide an accessible getter in the defining class.

Loading history...
Coding Style introduced by
Equals sign not aligned correctly; expected 1 space but found 7 spaces

This check looks for improperly formatted assignments.

Every assignment must have exactly one space before and one space after the equals operator.

To illustrate:

$a = "a";
$ab = "ab";
$abc = "abc";

will have no issues, while

$a   = "a";
$ab  = "ab";
$abc = "abc";

will report issues in lines 1 and 2.

Loading history...
15
	}
16
17
	public function init_listeners( $callable ) {
18
		add_action( 'jetpack_sync_constant', $callable, 10, 2 );
19
20
		// full sync
21
		add_action( 'jetpack_full_sync_constants', $callable );
22
	}
23
24
	public function init_before_send() {
25
		add_action( 'jetpack_sync_before_send', array( $this, 'maybe_sync_constants' ) );
26
27
		// full sync
28
		add_filter( 'jetpack_sync_before_send_jetpack_full_sync_constants', array( $this, 'expand_constants' ) );
29
	}
30
31
	public function reset_data() {
32
		delete_option( self::CONSTANTS_CHECKSUM_OPTION_NAME );
33
		delete_transient( self::CONSTANTS_AWAIT_TRANSIENT_NAME );
34
	}
35
36
	function set_constants_whitelist( $constants ) {
37
		$this->constants_whitelist = $constants;
38
	}
39
40
	function get_constants_whitelist() {
41
		return $this->constants_whitelist;
42
	}
43
44
	function force_sync_constants() {
45
		delete_option( self::CONSTANTS_CHECKSUM_OPTION_NAME );
46
		delete_transient( self::CONSTANTS_AWAIT_TRANSIENT_NAME );
47
		$this->maybe_sync_constants();
48
	}
49
50
	function enqueue_full_sync_actions() {
51
		/**
52
		 * Tells the client to sync all constants to the server
53
		 *
54
		 * @since 4.2.0
55
		 *
56
		 * @param boolean Whether to expand constants (should always be true)
57
		 */
58
		do_action( 'jetpack_full_sync_constants', true );
59
		return 1;
60
	}
61
62
	function get_full_sync_actions() {
63
		return array( 'jetpack_full_sync_constants' );
64
	}
65
66 View Code Duplication
	function maybe_sync_constants() {
67
		if ( get_transient( self::CONSTANTS_AWAIT_TRANSIENT_NAME ) ) {
68
			return;
69
		}
70
71
		$constants = $this->get_all_constants();
72
		if ( empty( $constants ) ) {
73
			return;
74
		}
75
76
		set_transient( self::CONSTANTS_AWAIT_TRANSIENT_NAME, microtime( true ), Jetpack_Sync_Defaults::$default_sync_constants_wait_time );
0 ignored issues
show
Bug introduced by
The property default_sync_constants_wait_time cannot be accessed from this context as it is declared private in class Jetpack_Sync_Defaults.

This check looks for access to properties that are not accessible from the current context.

If you need to make a property accessible to another context you can either raise its visibility level or provide an accessible getter in the defining class.

Loading history...
77
		$constants_checksums = (array) get_option( self::CONSTANTS_CHECKSUM_OPTION_NAME, array() );
78
79
		foreach ( $constants as $name => $value ) {
80
			$checksum = $this->get_check_sum( $value );
81
			// explicitly not using Identical comparison as get_option returns a string
82
			if ( ! $this->still_valid_checksum( $constants_checksums, $name, $checksum )  && ! is_null( $value ) ) {
83
				/**
84
				 * Tells the client to sync a constant to the server
85
				 *
86
				 * @since 4.2.0
87
				 *
88
				 * @param string The name of the constant
89
				 * @param mixed The value of the constant
90
				 */
91
				do_action( 'jetpack_sync_constant', $name, $value );
92
				$constants_checksums[ $name ] = $checksum;
93
			} else {
94
				$constants_checksums[ $name ] = $checksum;
95
			}
96
		}
97
		update_option( self::CONSTANTS_CHECKSUM_OPTION_NAME, $constants_checksums );
98
	}
99
100
	// public so that we don't have to store an option for each constant
101
	function get_all_constants() {
102
		return array_combine(
103
			$this->constants_whitelist,
104
			array_map( array( $this, 'get_constant' ), $this->constants_whitelist )
105
		);
106
	}
107
108
	private function get_constant( $constant ) {
109
		return ( defined( $constant ) ) ?
110
			constant( $constant )
111
			: null;
112
	}
113
114
	public function expand_constants( $args ) {
115
		if ( $args[0] ) {
116
			return $this->get_all_constants();
117
		}
118
		return $args;
119
	}
120
}
121