Code Duplication    Length = 75-75 lines in 2 locations

projects/packages/connection-ui/src/class-initial-state.php 1 location

@@ 18-92 (lines=75) @@
15
/**
16
 * The React initial state.
17
 */
18
class Initial_State {
19
20
	/**
21
	 * The connection manager object.
22
	 *
23
	 * @var Manager
24
	 */
25
	private $manager;
26
27
	/**
28
	 * The constructor.
29
	 */
30
	public function __construct() {
31
		$this->manager = new Manager();
32
	}
33
34
	/**
35
	 * Get the initial state data.
36
	 *
37
	 * @return array
38
	 */
39
	private function get_data() {
40
		return array(
41
			'connectionStatus' => REST_Connector::connection_status( false ),
42
			'API'              => array(
43
				'WP_API_root'       => esc_url_raw( rest_url() ),
44
				'WP_API_nonce'      => wp_create_nonce( 'wp_rest' ),
45
				'registrationNonce' => wp_create_nonce( 'jetpack-registration-nonce' ),
46
			),
47
			'connectionData'   => array(
48
				'doNotUseConnectionIframe' => ! $this->can_use_connection_iframe(),
49
				'authorizationUrl'         => ( $this->manager->is_connected() && ! $this->manager->is_user_connected() )
50
					? $this->manager->get_authorization_url( null, admin_url( 'tools.php?page=wpcom-connection-manager' ) )
51
					: null,
52
			),
53
		);
54
	}
55
56
	/**
57
	 * Whether we can the connection iframe.
58
	 *
59
	 * @return bool
60
	 */
61
	private function can_use_connection_iframe() {
62
		global $is_safari;
63
64
		/**
65
		 * Filters whether the connection manager should use the iframe authorization
66
		 * flow instead of the regular redirect-based flow.
67
		 *
68
		 * @since 8.3.0
69
		 *
70
		 * @param Boolean $is_iframe_flow_used should the iframe flow be used, defaults to false.
71
		 */
72
		$iframe_flow = apply_filters( 'jetpack_use_iframe_authorization_flow', false );
73
74
		if ( ! $iframe_flow ) {
75
			return false;
76
		}
77
78
		return ! $is_safari && ! User_Agent_Info::is_opera_desktop() && ! Constants::is_true( 'JETPACK_SHOULD_NOT_USE_CONNECTION_IFRAME' );
79
	}
80
81
	/**
82
	 * Render the initial state into a JavaScript variable.
83
	 *
84
	 * @return string
85
	 */
86
	public function render() {
87
		add_action( 'jetpack_use_iframe_authorization_flow', '__return_true' );
88
89
		return 'var CUI_INITIAL_STATE=JSON.parse(decodeURIComponent("' . rawurlencode( wp_json_encode( $this->get_data() ) ) . '"));';
90
	}
91
92
}
93

projects/plugins/backup/src/php/class-initial-state.php 1 location

@@ 16-90 (lines=75) @@
13
/**
14
 * The React initial state.
15
 */
16
class Initial_State {
17
18
	/**
19
	 * The connection manager object.
20
	 *
21
	 * @var Manager
22
	 */
23
	private $manager;
24
25
	/**
26
	 * The constructor.
27
	 */
28
	public function __construct() {
29
		$this->manager = new Manager();
30
	}
31
32
	/**
33
	 * Get the initial state data.
34
	 *
35
	 * @return array
36
	 */
37
	private function get_data() {
38
		return array(
39
			'connectionStatus' => REST_Connector::connection_status( false ),
40
			'API'              => array(
41
				'WP_API_root'       => esc_url_raw( rest_url() ),
42
				'WP_API_nonce'      => wp_create_nonce( 'wp_rest' ),
43
				'registrationNonce' => wp_create_nonce( 'jetpack-registration-nonce' ),
44
			),
45
			'connectionData'   => array(
46
				'doNotUseConnectionIframe' => ! $this->can_use_connection_iframe(),
47
				'authorizationUrl'         => ( $this->manager->is_connected() && ! $this->manager->is_user_connected() )
48
					? $this->manager->get_authorization_url( null, admin_url( 'admin.php?page=jetpack-backup' ) )
49
					: null,
50
			),
51
		);
52
	}
53
54
	/**
55
	 * Whether we can the connection iframe.
56
	 *
57
	 * @return bool
58
	 */
59
	private function can_use_connection_iframe() {
60
		global $is_safari;
61
62
		/**
63
		 * Filters whether the connection manager should use the iframe authorization
64
		 * flow instead of the regular redirect-based flow.
65
		 *
66
		 * @since 8.3.0
67
		 *
68
		 * @param Boolean $is_iframe_flow_used should the iframe flow be used, defaults to false.
69
		 */
70
		$iframe_flow = apply_filters( 'jetpack_use_iframe_authorization_flow', false );
71
72
		if ( ! $iframe_flow ) {
73
			return false;
74
		}
75
76
		return ! $is_safari && ! User_Agent_Info::is_opera_desktop() && ! Constants::is_true( 'JETPACK_SHOULD_NOT_USE_CONNECTION_IFRAME' );
77
	}
78
79
	/**
80
	 * Render the initial state into a JavaScript variable.
81
	 *
82
	 * @return string
83
	 */
84
	public function render() {
85
		add_action( 'jetpack_use_iframe_authorization_flow', '__return_true' );
86
87
		return 'var JPBACKUP_INITIAL_STATE=JSON.parse(decodeURIComponent("' . rawurlencode( wp_json_encode( $this->get_data() ) ) . '"));';
88
	}
89
90
}
91