PluginProbe
WP-Stateless – Google Cloud Storage / trunk
WP-Stateless – Google Cloud Storage vtrunk
4.4.3 2.1.7 2.1.8 2.1.9 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.2.7 2.3.0 2.3.1 2.3.2 3.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.2.0 3.2.1 3.2.2 All 62 releases
wp-stateless / lib / classes / status / class-info-stateless.php

class-info-stateless.php in WP-Stateless – Google Cloud Storage trunk, at lib/classes/status/class-info-stateless.php

430 lines 12.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * System Info (Stateless section) class
4 *
5 * @since 4.0.3
6 */
7
8 namespace wpCloud\StatelessMedia\Status;
9
10 use wpCloud\StatelessMedia\Singleton;
11 use wpCloud\StatelessMedia\Helper;
12
13 class StatelessInfo {
14 use Singleton;
15
16 /**
17 * Stateless settings
18 *
19 * @var array|null
20 */
21 private $settings = null;
22
23 protected function __construct() {
24 $this->_init_hooks();
25 }
26
27 private function _init_hooks() {
28 add_filter('wp_stateless_status_info_values_stateless', [$this, 'get_settings_values'], 10);
29 add_filter('wp_stateless_status_info_values_stateless', [$this, 'get_settings_constants'], 20);
30 add_filter('wp_stateless_status_info_values_stateless', [$this, 'get_media_stats'], 30);
31 add_filter('wp_stateless_status_info_values_stateless', [$this, 'get_migrations'], 40);
32 add_filter('wp_stateless_status_info_values_stateless', [$this, 'prepare_values'], 99);
33
34 add_filter('wp_stateless_status_info_stateless_value', [$this, 'format_value'], 10, 3);
35
36 add_filter('wp_stateless_status_info_stateless_value_mode', [$this, 'get_mode'], 10);
37 add_filter('wp_stateless_status_info_stateless_value_body_rewrite', [$this, 'get_body_rewrite'], 10);
38 add_filter('wp_stateless_status_info_stateless_value_bucket', [$this, 'get_is_set'], 10);
39 add_filter('wp_stateless_status_info_stateless_value_bucket_accessible', [$this, 'get_yes_no_value'], 10);
40 add_filter('wp_stateless_status_info_stateless_value_key_json', [$this, 'get_is_set'], 10);
41 add_filter('wp_stateless_status_info_stateless_value_cache_control', [$this, 'get_cache_control'], 10);
42 add_filter('wp_stateless_status_info_stateless_value_delete_remote', [$this, 'get_enabled_value'], 10);
43 add_filter('wp_stateless_status_info_stateless_value_root_dir', [$this, 'get_root_dir'], 10);
44 add_filter('wp_stateless_status_info_stateless_value_custom_domain', [$this, 'get_is_set'], 10);
45 add_filter('wp_stateless_status_info_stateless_value_hashify_file_name', [$this, 'get_enabled_value'], 10);
46 add_filter('wp_stateless_status_info_stateless_value_dynamic_image_support', [$this, 'get_enabled_value'], 10);
47 add_filter('wp_stateless_status_info_stateless_value_use_postmeta', [$this, 'get_enabled_value'], 10);
48 add_filter('wp_stateless_status_info_stateless_value_WP_STATELESS_LEGACY_URL_TO_POSTID', [$this, 'get_yes_no_value'], 10);
49 add_filter('wp_stateless_status_info_stateless_value_WP_STATELESS_SKIP_ACL_SET', [$this, 'get_yes_no_value'], 10);
50 }
51
52 /**
53 * Get settings
54 *
55 * @return array
56 */
57 private function _get_setings() {
58 if ( empty($this->settings) ) {
59 $this->settings = ud_get_stateless_media()->get('sm');
60 }
61
62 return $this->settings;
63 }
64
65 /**
66 * Format mode setting
67 *
68 * @param string $value
69 * @return string
70 */
71 public function get_mode($value) {
72 switch ($value) {
73 case '':
74 $value = __('Don\'t override', ud_get_stateless_media()->domain);
75 break;
76 case 'disabled':
77 $value = __('Disabled', ud_get_stateless_media()->domain);
78 break;
79 case 'backup':
80 $value = __('Backup', ud_get_stateless_media()->domain);
81 break;
82 case 'cdn':
83 $value = __('CDN', ud_get_stateless_media()->domain);
84 break;
85 case 'ephemeral':
86 $value = __('Ephemeral', ud_get_stateless_media()->domain);
87 break;
88 case 'stateless':
89 $value = __('Stateless', ud_get_stateless_media()->domain);
90 break;
91 }
92
93 return $value;
94 }
95
96 /**
97 * Get body_rewrite setting
98 *
99 * @param string $value
100 * @return string
101 */
102 public function get_body_rewrite($value) {
103 switch ($value) {
104 case '':
105 $value = __('Don\'t override', ud_get_stateless_media()->domain);
106 break;
107 case 'false':
108 $value = __('Disabled', ud_get_stateless_media()->domain);
109 break;
110 case 'enable_editor':
111 $value = __('Enable Editor', ud_get_stateless_media()->domain);
112 break;
113 case 'enable_meta':
114 $value = __('Enable Meta', ud_get_stateless_media()->domain);
115 break;
116 case 'true':
117 $value = __('Enable Editor & Meta', ud_get_stateless_media()->domain);
118 break;
119 }
120
121 return $value;
122 }
123
124 /**
125 * Format Cache Control setting
126 *
127 * @param bool $value
128 * @return string
129 */
130 public function get_cache_control($value) {
131 if ( empty($value) ) {
132 $value = sprintf( __('Default: %s', ud_get_stateless_media()->domain), ud_get_stateless_media()->get_default_cache_control() );
133 }
134
135 return $value;
136 }
137
138 /**
139 * Format Folder setting
140 *
141 * @param bool $value
142 * @return string
143 */
144 public function get_root_dir($value) {
145 if ( empty($value) && is_network_admin() ) {
146 $value = __('Don\'t override', ud_get_stateless_media()->domain);
147 }
148
149 return $value;
150 }
151
152 /**
153 * Format the value if it is set or not
154 *
155 * @param bool $value
156 * @return string
157 */
158 public function get_is_set($value) {
159 return (bool) $value ? __('Set', ud_get_stateless_media()->domain) : __('Not set', ud_get_stateless_media()->domain);
160 }
161
162 /**
163 * Get boolean value (Yes/No)
164 *
165 * @param bool $value
166 * @return string
167 */
168 public function get_yes_no_value($value) {
169 return (bool) $value ? __('Yes', ud_get_stateless_media()->domain) : __('No', ud_get_stateless_media()->domain);
170 }
171
172 /**
173 * Get boolean value (Enable/Disabled)
174 *
175 * @param bool $value
176 * @return string
177 */
178 public function get_enabled_value($value) {
179 switch ($value) {
180 case '':
181 $value = __('Don\'t override', ud_get_stateless_media()->domain);
182 break;
183 case 'true':
184 $value = __('Enable', ud_get_stateless_media()->domain);
185 break;
186 case 'false':
187 $value = __('Disable', ud_get_stateless_media()->domain);
188 break;
189 }
190
191 return $value;
192 }
193
194 /**
195 * Format stateless settings value
196 *
197 * @param string $value
198 * @param string $key
199 * @param array $sm
200 *
201 * @return string
202 */
203 public function format_value($value, $key, $sm) {
204 $value = apply_filters("wp_stateless_status_info_stateless_value_$key", $value, $sm);
205
206 $readonly = array_keys( $sm['readonly'] ?? [] );
207
208 if ( in_array($key, $readonly)) {
209 $type = $sm['readonly'][$key] ?? '';
210
211 $suffix = '';
212 $hint = $sm['strings'][$type] ?? '';
213
214 switch ($type) {
215 case 'network':
216 $suffix = __('Network', ud_get_stateless_media()->domain);
217 break;
218 case 'constant':
219 $suffix = __('Constant', ud_get_stateless_media()->domain);
220 break;
221 case 'environment':
222 $suffix = __('Environment', ud_get_stateless_media()->domain);
223 break;
224 }
225
226 if ( !empty($suffix) ) {
227 $value = sprintf(
228 '<div class="stateless-info-table-extended-value">'.
229 '<span>%s</span> '.
230 '<span title="%s"><em>(</em>%s%s<em>)</em></span>'.
231 '</div',
232 $value,
233 $hint,
234 '<span class="dashicons dashicons-editor-help"></span>',
235 $suffix,
236 );
237 }
238 }
239
240 return $value;
241 }
242
243 /**
244 * Get WP-Stateless settings
245 *
246 * @param array $values
247 * @return array
248 */
249 public function get_settings_values($values) {
250 $sm = $this->_get_setings();
251
252 $rows = [
253 'version' => [
254 'label' => __('Version', ud_get_stateless_media()->domain),
255 'value' => ud_get_stateless_media()::$version,
256 ],
257 'db_version' => [
258 'label' => __('Database Version', ud_get_stateless_media()->domain),
259 'value' => get_option( ud_stateless_db()::DB_VERSION_KEY, '' ),
260 ],
261 'mode' => [
262 'label' => __('Mode', ud_get_stateless_media()->domain),
263 'value' => $sm['mode'],
264 ],
265 'body_rewrite' => [
266 'label' => __('File URL Replacement', ud_get_stateless_media()->domain),
267 'value' => $sm['body_rewrite'],
268 ],
269 'body_rewrite_types' => [
270 'label' => __('Supported File Types', ud_get_stateless_media()->domain),
271 'value' => $sm['body_rewrite_types'],
272 ],
273 'bucket' => [
274 'label' => __('Bucket', ud_get_stateless_media()->domain),
275 'value' => !empty($sm['bucket']),
276 ],
277 'bucket_accessible' => [
278 'label' => __('Bucket Accessible', ud_get_stateless_media()->domain),
279 'value' => get_transient('sm::is_connected_to_gs'),
280 ],
281 'key_json' => [
282 'label' => __('Service Account JSON', ud_get_stateless_media()->domain),
283 'value' => !empty($sm['key_json']),
284 ],
285 'cache_control' => [
286 'label' => __('Cache-Control', ud_get_stateless_media()->domain),
287 'value' => $sm['cache_control'],
288 ],
289 'delete_remote' => [
290 'label' => __('Delete GCS File', ud_get_stateless_media()->domain),
291 'value' => $sm['delete_remote'],
292 ],
293 'root_dir' => [
294 'label' => __('Folder', ud_get_stateless_media()->domain),
295 'value' => $sm['root_dir'],
296 ],
297 'custom_domain' => [
298 'label' => __('Domain', ud_get_stateless_media()->domain),
299 'value' => !empty($sm['custom_domain']),
300 ],
301 'hashify_file_name' => [
302 'label' => __('Cache-Busting', ud_get_stateless_media()->domain),
303 'value' => $sm['hashify_file_name'],
304 ],
305 'dynamic_image_support' => [
306 'label' => __('Dynamic Image Support', ud_get_stateless_media()->domain),
307 'value' => $sm['dynamic_image_support'],
308 ],
309 'use_api_siteurl' => [
310 'label' => __('Use Site URL for REST API Requests', ud_get_stateless_media()->domain),
311 'value' => $sm['use_api_siteurl'],
312 ],
313 'api_status' => [
314 'label' => __('REST API Status', ud_get_stateless_media()->domain),
315 'value' => '%api_status%',
316 ],
317 'ajax_status' => [
318 'label' => __('AJAX Status', ud_get_stateless_media()->domain),
319 'value' => '%ajax_status%',
320 ],
321 'use_postmeta' => [
322 'label' => __('Use Post Meta', ud_get_stateless_media()->domain),
323 'value' => $sm['use_postmeta'],
324 ],
325 ];
326
327 return $values + $rows;
328 }
329
330 /**
331 * Get constants settings, not available on Settings page
332 *
333 * @param array $values
334 * @return array
335 */
336 public function get_settings_constants($values) {
337 $sm = $this->_get_setings();
338
339 $constants = [
340 'WP_STATELESS_MEDIA_UPLOAD_CHUNK_SIZE' => __('Upload Chunk Size', ud_get_stateless_media()->domain),
341 'WP_STATELESS_SYNC_MAX_BATCH_SIZE' => __('Sync Max Batch Size', ud_get_stateless_media()->domain),
342 'WP_STATELESS_LEGACY_URL_TO_POSTID' => __('Change the Bucket Folder (root_dir) after uploading the image', ud_get_stateless_media()->domain),
343 'WP_STATELESS_SKIP_ACL_SET' => __('Skip setting file-level ACl when <strong>uniform bucket-level access</strong> is enabled', ud_get_stateless_media()->domain),
344 ];
345
346 $rows = [];
347
348 foreach ($constants as $key => $label) {
349 if ( !defined($key) ) {
350 continue;
351 }
352
353 // Mark all constants as readonly 'constant'
354 $this->settings['readonly'][$key] = 'constant';
355
356 $rows[$key] = [
357 'label' => $label,
358 'value' => constant($key),
359 ];
360 }
361
362 return $values + $rows;
363 }
364
365 /**
366 * Get media stats
367 *
368 * @param array $values
369 * @return array
370 */
371 public function get_media_stats($values) {
372 if (is_network_admin()) {
373 return $values;
374 }
375
376 $rows = [
377 'files' => [
378 'label' => __('Total Files', ud_get_stateless_media()->domain),
379 'value' => ud_stateless_db()->get_total_files(),
380 ],
381 'file_sizes' => [
382 'label' => __('Total File Sizes', ud_get_stateless_media()->domain),
383 'value' => ud_stateless_db()->get_total_file_sizes(),
384 ],
385 'compatibility_files' => [
386 'label' => __('Compatibility Files', ud_get_stateless_media()->domain),
387 'value' => ud_stateless_db()->get_total_non_media_files(),
388 ],
389 ];
390
391 return $values + $rows;
392 }
393
394 public function prepare_values($values) {
395 $sm = $this->_get_setings();
396
397 foreach ($values as $key => $value) {
398 $values[$key]['value'] = apply_filters('wp_stateless_status_info_stateless_value', $value['value'], $key, $sm);
399 }
400
401 return $values;
402 }
403
404 public function get_migrations($values) {
405 if (is_network_admin()) {
406 return $values;
407 }
408
409 $state = apply_filters("wp_stateless_batch_state", [], ['force_migrations' => true]);
410
411 if ( !is_array($state) || !isset( $state['migrations'] ) ) {
412 return $value;
413 }
414
415 $migrations = [];
416
417 foreach ($state['migrations'] as $key => $migration) {
418 $migrations[] = sprintf( '%s: %s', $key, $migration['status_text'] );
419 }
420
421 $rows = [
422 'migrations' => [
423 'label' => __('Data Optimization', ud_get_stateless_media()->domain),
424 'value' => implode(', ', $migrations),
425 ],
426 ];
427
428 return $values + $rows;
429 }
430 }