PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.3-beta
Jetpack – WP Security, Backup, Speed, & Growth v16.3-beta
16.3 16.3-beta 16.3-a.5 16.3-a.7 16.3-a.3 16.3-a.1 16.2 16.2-beta 12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 All 508 releases
← All changes | jetpack_vendor/automattic/jetpack-sync/src/modules/class-network-options.php +261 -0 16.2-beta → 16.3-beta View file →
@@ -1,0 +1,261 @@
1 +<?php
2 +/**
3 + * Network Options sync module.
4 + *
5 + * @package automattic/jetpack-sync
6 + */
7 +
8 +namespace Automattic\Jetpack\Sync\Modules;
9 +
10 +use Automattic\Jetpack\Sync\Defaults;
11 +
12 +if ( ! defined( 'ABSPATH' ) ) {
13 + exit( 0 );
14 +}
15 +
16 +/**
17 + * Class to handle sync for network options.
18 + */
19 +class Network_Options extends Module {
20 + /**
21 + * Whitelist for network options we want to sync.
22 + *
23 + * @access private
24 + *
25 + * @var array
26 + */
27 + private $network_options_whitelist;
28 +
29 + /**
30 + * Sync module name.
31 + *
32 + * @access public
33 + *
34 + * @return string
35 + */
36 + public function name() {
37 + return 'network_options';
38 + }
39 +
40 + /**
41 + * Initialize network options action listeners.
42 + *
43 + * @access public
44 + *
45 + * @param callable $callable Action handler callable.
46 + */
47 + public function init_listeners( $callable ) {
48 + // Multi site network options.
49 + add_action( 'add_site_option', $callable, 10, 2 );
50 + add_action( 'update_site_option', $callable, 10, 3 );
51 + add_action( 'delete_site_option', $callable, 10, 1 );
52 +
53 + $whitelist_network_option_handler = array( $this, 'whitelist_network_options' );
54 + add_filter( 'jetpack_sync_before_enqueue_delete_site_option', $whitelist_network_option_handler );
55 + add_filter( 'jetpack_sync_before_enqueue_add_site_option', $whitelist_network_option_handler );
56 + add_filter( 'jetpack_sync_before_enqueue_update_site_option', $whitelist_network_option_handler );
57 + }
58 +
59 + /**
60 + * Initialize network options action listeners for full sync.
61 + *
62 + * @access public
63 + *
64 + * @param callable $callable Action handler callable.
65 + */
66 + public function init_full_sync_listeners( $callable ) {
67 + add_action( 'jetpack_full_sync_network_options', $callable );
68 + }
69 +
70 + /**
71 + * Initialize the module in the sender.
72 + *
73 + * @access public
74 + */
75 + public function init_before_send() {
76 + // Full sync.
77 + add_filter(
78 + 'jetpack_sync_before_send_jetpack_full_sync_network_options',
79 + array(
80 + $this,
81 + 'expand_network_options',
82 + )
83 + );
84 + }
85 +
86 + /**
87 + * Set module defaults.
88 + * Define the network options whitelist based on the default one.
89 + *
90 + * @access public
91 + */
92 + public function set_defaults() {
93 + $this->network_options_whitelist = Defaults::$default_network_options_whitelist;
94 + }
95 +
96 + /**
97 + * Enqueue the network options actions for full sync.
98 + *
99 + * @access public
100 + *
101 + * @param array $config Full sync configuration for this sync module.
102 + * @param int $max_items_to_enqueue Maximum number of items to enqueue.
103 + * @param boolean $state True if full sync has finished enqueueing this module, false otherwise.
104 + * @return array Number of actions enqueued, and next module state.
105 + */
106 + public function enqueue_full_sync_actions( $config, $max_items_to_enqueue, $state ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
107 + /**
108 + * Tells the client to sync all options to the server
109 + *
110 + * @since 1.6.3
111 + * @since-jetpack 4.2.0
112 + *
113 + * @param boolean Whether to expand options (should always be true)
114 + */
115 + do_action( 'jetpack_full_sync_network_options', true );
116 +
117 + // The number of actions enqueued, and next module state (true == done).
118 + return array( 1, true );
119 + }
120 +
121 + /**
122 + * Send the network options actions for full sync.
123 + *
124 + * @access public
125 + *
126 + * @param array $config Full sync configuration for this sync module.
127 + * @param array $status This module Full Sync status.
128 + * @param int $send_until The timestamp until the current request can send.
129 + * @param int $started The timestamp when the full sync started.
130 + *
131 + * @return array This module Full Sync status.
132 + */
133 + public function send_full_sync_actions( $config, $status, $send_until, $started ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
134 + // we call this instead of do_action when sending immediately.
135 + $result = $this->send_action( 'jetpack_full_sync_network_options', array( true ) );
136 +
137 + if ( is_wp_error( $result ) ) {
138 + $status['error'] = true;
139 + return $status;
140 + }
141 + $status['finished'] = true;
142 + $status['sent'] = $status['total'];
143 + return $status;
144 + }
145 +
146 + /**
147 + * Retrieve an estimated number of actions that will be enqueued.
148 + *
149 + * @access public
150 + *
151 + * @param array $config Full sync configuration for this sync module.
152 + * @return int Number of items yet to be enqueued.
153 + */
154 + public function estimate_full_sync_actions( $config ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
155 + return 1;
156 + }
157 +
158 + /**
159 + * Retrieve the actions that will be sent for this module during a full sync.
160 + *
161 + * @access public
162 + *
163 + * @return array Full sync actions of this module.
164 + */
165 + public function get_full_sync_actions() {
166 + return array( 'jetpack_full_sync_network_options' );
167 + }
168 +
169 + /**
170 + * Retrieve all network options as per the current network options whitelist.
171 + *
172 + * @access public
173 + *
174 + * @return array All network options.
175 + */
176 + public function get_all_network_options() {
177 + $options = array();
178 + foreach ( $this->network_options_whitelist as $option ) {
179 + $options[ $option ] = get_site_option( $option );
180 + }
181 +
182 + return $options;
183 + }
184 +
185 + /**
186 + * Set the network options whitelist.
187 + *
188 + * @access public
189 + *
190 + * @param array $options The new network options whitelist.
191 + */
192 + public function set_network_options_whitelist( $options ) {
193 + $this->network_options_whitelist = $options;
194 + }
195 +
196 + /**
197 + * Get the network options whitelist.
198 + *
199 + * @access public
200 + *
201 + * @return array The network options whitelist.
202 + */
203 + public function get_network_options_whitelist() {
204 + return $this->network_options_whitelist;
205 + }
206 +
207 + /**
208 + * Reject non-whitelisted network options.
209 + *
210 + * @access public
211 + *
212 + * @param array $args The hook parameters.
213 + * @return array|false $args The hook parameters, false if not a whitelisted network option.
214 + */
215 + public function whitelist_network_options( $args ) {
216 + if ( ! $this->is_whitelisted_network_option( $args[0] ) ) {
217 + return false;
218 + }
219 +
220 + return $args;
221 + }
222 +
223 + /**
224 + * Whether the option is a whitelisted network option.
225 + *
226 + * @access public
227 + *
228 + * @param string $option Option name.
229 + * @return boolean True if this is a whitelisted network option.
230 + */
231 + public function is_whitelisted_network_option( $option ) {
232 + return in_array( $option, $this->network_options_whitelist, true );
233 + }
234 +
235 + /**
236 + * Expand the network options within a hook before they are serialized and sent to the server.
237 + *
238 + * @access public
239 + *
240 + * @param array $args The hook parameters.
241 + * @return array $args The hook parameters.
242 + */
243 + public function expand_network_options( $args ) {
244 + if ( $args[0] ) {
245 + return $this->get_all_network_options();
246 + }
247 +
248 + return $args;
249 + }
250 +
251 + /**
252 + * Return Total number of objects.
253 + *
254 + * @param array $config Full Sync config.
255 + *
256 + * @return int total
257 + */
258 + public function total( $config ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
259 + return count( (array) $this->network_options_whitelist );
260 + }
261 +}