PluginProbe ʕ •ᴥ•ʔ
WP STAGING – WordPress Backup, Restore, Migration & Clone / 3.8.2
WP STAGING – WordPress Backup, Restore, Migration & Clone v3.8.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 2 years ago EventLogger.php 1 year ago Settings.php 2 years ago
DarkMode.php
157 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 /**
38 * @var string
39 */
40 private $defaultOsColorMode;
41
42 /**
43 * @var Notices
44 */
45 private $notices;
46
47 public function __construct()
48 {
49 $this->auth = WPStaging::make(Auth::class);
50 $this->sanitize = WPStaging::make(Sanitize::class);
51 $this->notices = WPStaging::make(Notices::class);
52 $this->getDefaultColorMode();
53 }
54
55 /**
56 * @return void
57 */
58 public function ajaxEnableDefaultColorMode()
59 {
60 if (!$this->auth->isAuthenticatedRequest('', 'manage_options')) {
61 wp_send_json_error();
62 }
63
64 $defaultColorMode = isset($_POST['mode']) ? $this->sanitize->sanitizeString($_POST['mode']) : '';
65
66 if (empty($defaultColorMode)) {
67 wp_send_json_error();
68 }
69
70 if ($this->defaultColorMode === $defaultColorMode) {
71 wp_send_json_success();
72 }
73
74 update_option(self::OPTION_DEFAULT_COLOR_MODE, $defaultColorMode);
75
76 wp_send_json_success();
77 }
78
79 /**
80 * @return void
81 */
82 public function ajaxSetDefaultOsMode()
83 {
84 if (!$this->auth->isAuthenticatedRequest('', 'manage_options')) {
85 wp_send_json_error();
86 }
87
88 $defaultOsColorMode = (isset($_POST['defaultOsColorMode'])) ? $this->sanitize->sanitizeString($_POST['defaultOsColorMode']) : '';
89
90 if (empty($defaultOsColorMode)) {
91 wp_send_json_error();
92 }
93
94 update_option(self::OPTION_DEFAULT_OS_COLOR_MODE, $defaultOsColorMode);
95 wp_send_json_success([
96 'defaultColorMode' => $this->defaultColorMode
97 ]);
98 }
99
100 /**
101 * @return void
102 */
103 public function mayBeShowDarkMode()
104 {
105 $isDarkModeEnabled = $this->isDarkModeEnabled();
106
107 if (!$isDarkModeEnabled) {
108 return;
109 }
110
111 add_filter('admin_body_class', function ($classes) {
112 return $classes . ' wpstg-dark';
113 });
114 }
115
116 /**
117 * @return bool
118 */
119 private function isDarkModeEnabled(): bool
120 {
121 $defaultColorMode = get_option(self::OPTION_DEFAULT_COLOR_MODE, '');
122 if (empty($defaultColorMode)) {
123 return false;
124 }
125
126 $defaultOsColorMode = get_option(self::OPTION_DEFAULT_OS_COLOR_MODE, '');
127
128 if ($defaultColorMode === 'system' && $defaultOsColorMode === 'light') {
129 return false;
130 }
131
132 if ($defaultColorMode === 'light') {
133 return false;
134 }
135
136 return true;
137 }
138
139 /**
140 * @return string
141 */
142 private function getDefaultColorMode()
143 {
144 $this->defaultColorMode = get_option(self::OPTION_DEFAULT_COLOR_MODE, '');
145 return $this->defaultColorMode;
146 }
147
148 /**
149 * @return string
150 */
151 private function getDefaultOsColorMode()
152 {
153 $this->defaultOsColorMode = get_option(self::OPTION_DEFAULT_OS_COLOR_MODE, '');
154 return $this->defaultOsColorMode;
155 }
156 }
157