PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.3-a.1
Jetpack – WP Security, Backup, Speed, & Growth v16.3-a.1
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 13.7.2 13.8.3 13.9.2 14.0.1 All 504 releases
jetpack / jetpack_vendor / automattic / jetpack-sync / src / modules / class-network-options.php

class-network-options.php in Jetpack – WP Security, Backup, Speed, & Growth 16.3-a.1, at jetpack_vendor/automattic/jetpack-sync/src/modules/class-network-options.php

262 lines 6.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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 }
262