Files
wordpress-theme-aksrt/src/AKSRT/Admin/ImportExportControllerPart2.php
T

87 lines
2.8 KiB
PHP

<?php
/**
* @package AKSRT
*/
namespace AKSRT\Admin;
defined('ABSPATH') || exit;
trait ImportExportControllerPart2 {
private function get_backup_schedule_settings(): array {
$provider = SchemaProvider::get_instance();
$settings = $provider->read_settings('tools', 'backup');
$frequency = sanitize_key((string) ($settings['backup_frequency'] ?? 'weekly'));
$allowed = ['daily', 'weekly', 'monthly'];
if (!in_array($frequency, $allowed, true)) {
$frequency = 'weekly';
}
return [
'enabled' => !empty($settings['backup_auto']),
'schedule' => $frequency === 'monthly' ? self::MONTHLY_SCHEDULE : $frequency,
];
}
private function build_settings_backup(string $type, string $label = ''): array {
$schema_provider = SchemaProvider::get_instance();
$domains = $schema_provider->get_domain_keys();
$payload = [
'version' => AKSRT_VERSION ?? '3.4.0',
'exported' => gmdate('Y-m-d H:i:s'),
'domains' => [],
'standalone'=> [],
];
foreach ($domains as $domain) {
$payload['domains'][$domain] = [
'option_key' => $schema_provider->get_option_key($domain),
'data' => $schema_provider->read_settings($domain),
];
}
foreach (\AKSRT\Settings\Settings::STANDALONE_OPTION_KEYS as $key) {
$value = get_option($key);
if ($value !== false) {
$payload['standalone'][$key] = $value;
}
}
$payload = \AKSRT\Settings\Settings::redact_sensitive_settings($payload);
return [
'id' => time(),
'type' => $type,
'label' => $label !== '' ? $label : $this->default_backup_label($type),
'created_at' => gmdate('Y-m-d H:i:s'),
'payload' => $payload,
];
}
private function trim_setting_backups(array $backups): array {
$retain = (int) (\AKSRT\Settings\Settings::get_value('backup_retain', 7));
$retain = max(3, min(20, $retain));
if (count($backups) <= $retain) {
return array_values($backups);
}
return array_values(array_slice($backups, 0, $retain));
}
private function default_backup_label(string $type): string {
$map = [
'manual' => __('手动备份', 'aksrt'),
'scheduled' => __('定期备份', 'aksrt'),
'reset_all' => __('重置全部前快照', 'aksrt'),
'reset_domain' => __('重置分区前快照', 'aksrt'),
'update_theme' => __('更新主题前快照', 'aksrt'),
];
return $map[$type] ?? __('设置快照', 'aksrt');
}
}