PluginProbe ʕ •ᴥ•ʔ
WP STAGING – WordPress Backup, Restore, Migration & Clone / 4.9.2
WP STAGING – WordPress Backup, Restore, Migration & Clone v4.9.2
4.9.2 4.9.1 4.9.0 4.8.1 trunk 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.10.0 3.2.0 3.3.1 3.3.2 3.3.3 3.4.1 3.4.3 3.5.0 3.6.0 3.7.1 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.8.6 3.8.7 3.9.0 3.9.1 3.9.2 3.9.3 3.9.4 4.0.0 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.0 4.7.0 4.7.1 4.7.2 4.7.3 4.8.0
wp-staging / Framework / Settings / DarkMode.php
wp-staging / Framework / Settings Last commit date
DarkMode.php 7 months ago Settings.php 2 months ago SettingsTable.php 2 months ago
DarkMode.php
137 lines
1 <?php
2
3 namespace WPStaging\Framework\Settings;
4
5 use WPStaging\Core\WPStaging;
6 use WPStaging\Framework\Notices\Notices;
7 use WPStaging\Framework\Security\Auth;
8 use WPStaging\Framework\Utils\Sanitize;
9
10 class DarkMode
11 {
12 /**
13 * @var string
14 */
15 const OPTION_DEFAULT_COLOR_MODE = 'wpstg_default_color_mode';
16
17 /**
18 * @var string
19 */
20 const OPTION_DEFAULT_OS_COLOR_MODE = 'wpstg_default_os_color_mode';
21
22 /**
23 * @var Sanitize
24 */
25 private $sanitize;
26
27 /**
28 * @var Auth
29 */
30 private $auth;
31
32 /**
33 * @var string
34 */
35 private $defaultColorMode;
36
37 public function __construct()
38 {
39 $this->auth = WPStaging::make(Auth::class);
40 $this->sanitize = WPStaging::make(Sanitize::class);
41 $this->getDefaultColorMode();
42 }
43
44 /**
45 * @return void
46 */
47 public function ajaxEnableDefaultColorMode()
48 {
49 if (!$this->auth->isAuthenticatedRequest('', 'manage_options')) {
50 wp_send_json_error();
51 }
52
53 $defaultColorMode = isset($_POST['mode']) ? $this->sanitize->sanitizeString($_POST['mode']) : '';
54
55 if (empty($defaultColorMode)) {
56 wp_send_json_error();
57 }
58
59 if ($this->defaultColorMode === $defaultColorMode) {
60 wp_send_json_success();
61 }
62
63 update_option(self::OPTION_DEFAULT_COLOR_MODE, $defaultColorMode);
64
65 wp_send_json_success();
66 }
67
68 /**
69 * @return void
70 */
71 public function ajaxSetDefaultOsMode()
72 {
73 if (!$this->auth->isAuthenticatedRequest('', 'manage_options')) {
74 wp_send_json_error();
75 }
76
77 $defaultOsColorMode = (isset($_POST['defaultOsColorMode'])) ? $this->sanitize->sanitizeString($_POST['defaultOsColorMode']) : '';
78
79 if (empty($defaultOsColorMode)) {
80 wp_send_json_error();
81 }
82
83 update_option(self::OPTION_DEFAULT_OS_COLOR_MODE, $defaultOsColorMode);
84 wp_send_json_success([
85 'defaultColorMode' => $this->defaultColorMode,
86 ]);
87 }
88
89 /**
90 * @return void
91 */
92 public function mayBeShowDarkMode()
93 {
94 $isDarkModeEnabled = $this->isDarkModeEnabled();
95
96 if (!$isDarkModeEnabled) {
97 return;
98 }
99
100 add_filter('admin_body_class', function ($classes) {
101 return $classes . ' wpstg-dark';
102 });
103 }
104
105 /**
106 * @return bool
107 */
108 private function isDarkModeEnabled(): bool
109 {
110 $defaultColorMode = get_option(self::OPTION_DEFAULT_COLOR_MODE, '');
111 if (empty($defaultColorMode)) {
112 return false;
113 }
114
115 $defaultOsColorMode = get_option(self::OPTION_DEFAULT_OS_COLOR_MODE, '');
116
117 if ($defaultColorMode === 'system' && $defaultOsColorMode === 'light') {
118 return false;
119 }
120
121 if ($defaultColorMode === 'light') {
122 return false;
123 }
124
125 return true;
126 }
127
128 /**
129 * @return string
130 */
131 private function getDefaultColorMode()
132 {
133 $this->defaultColorMode = get_option(self::OPTION_DEFAULT_COLOR_MODE, '');
134 return $this->defaultColorMode;
135 }
136 }
137