PluginProbe ʕ •ᴥ•ʔ
Superb Addons: Blocks, Patterns, Pre-built Pages, Sliders, Popups, Free Forms, Animations & More / 3.7.0
Superb Addons: Blocks, Patterns, Pre-built Pages, Sliders, Popups, Free Forms, Animations & More v3.7.0
4.0.6 4.0.5 4.0.4 4.0.3 4.0.2 4.0.1 4.0.0 trunk 1.0.0 2.0.0 2.0.1 2.0.2 2.0.3 3.0 3.0.1 3.0.2 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.2 3.1.3 3.2.0 3.2.1 3.2.2 3.2.4 3.2.5 3.2.7 3.2.8 3.2.9 3.3.0 3.3.1 3.3.2 3.4.0 3.4.1 3.4.2 3.4.5 3.4.6 3.5.0 3.5.1 3.5.2 3.5.3 3.5.4 3.5.6 3.5.7 3.5.8 3.5.9 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1
superb-blocks / src / admin / controllers / class-settings-controller.php
superb-blocks / src / admin / controllers Last commit date
wizard 5 months ago class-dashboard-controller.php 5 months ago class-newsletter-signup-controller.php 5 months ago class-notice-controller.php 5 months ago class-settings-controller.php 5 months ago class-troubleshooting-controller.php 5 months ago
class-settings-controller.php
218 lines
1 <?php
2
3 namespace SuperbAddons\Admin\Controllers;
4
5 defined('ABSPATH') || exit();
6
7 use SuperbAddons\Config\Capabilities;
8 use SuperbAddons\Data\Controllers\CacheController;
9 use SuperbAddons\Data\Controllers\KeyController;
10 use SuperbAddons\Data\Controllers\OptionController;
11 use SuperbAddons\Data\Controllers\RestController;
12 use SuperbAddons\Data\Controllers\SettingsOptionKey;
13 use Exception;
14 use SuperbAddons\Admin\Controllers\Wizard\WizardRestorationPointController;
15 use SuperbAddons\Data\Controllers\CompatibilitySettingsOptionKey;
16 use SuperbAddons\Data\Controllers\LogController;
17 use SuperbAddons\Data\Utils\KeyException;
18 use SuperbAddons\Data\Utils\SettingsException;
19 use SuperbAddons\Gutenberg\Controllers\GutenbergEnhancementsController;
20
21 class SettingsController
22 {
23 const SETTINGS_ROUTE = '/settings';
24
25 public function __construct()
26 {
27 RestController::AddRoute(self::SETTINGS_ROUTE, array(
28 'methods' => 'POST',
29 'permission_callback' => array($this, 'SettingsCallbackPermissionCheck'),
30 'callback' => array($this, 'SettingsRouteCallback'),
31 ));
32 }
33
34 public function SettingsCallbackPermissionCheck()
35 {
36 // Restrict endpoint to only users who have the proper capability.
37 if (!current_user_can(Capabilities::ADMIN)) {
38 return new WP_Error('rest_forbidden', esc_html__('Unauthorized. Please check user permissions.', "superb-blocks"), array('status' => 401));
39 }
40
41 return true;
42 }
43
44 public function SettingsRouteCallback($request)
45 {
46 if (!isset($request['action'])) {
47 return new \WP_Error('bad_request_plugin', 'Bad Plugin Request', array('status' => 400));
48 }
49 switch ($request['action']) {
50 case 'submit_feedback':
51 return $this->SubmitFeedbackCallback($request);
52 case 'addkey':
53 return $this->RegisterKeyCallback($request);
54 case 'removekey':
55 return $this->RemoveKeyCallback();
56 case SettingsOptionKey::LOGS_ENABLED:
57 case SettingsOptionKey::LOG_SHARE_ENABLED:
58 case 'clear_cache':
59 case 'clear_logs':
60 case 'view_logs':
61 case 'clear_restoration_points':
62 return $this->SaveSettingsCallback($request['action']);
63 case GutenbergEnhancementsController::HIGHLIGHTS_KEY:
64 case GutenbergEnhancementsController::HIGHLIGHTS_QUICKOPTIONS_KEY:
65 case GutenbergEnhancementsController::HIGHLIGHTS_QUICKOPTIONS_BOTTOM_KEY:
66 case GutenbergEnhancementsController::HIDERS_KEY:
67 case GutenbergEnhancementsController::ANIMATIONS_KEY:
68 return GutenbergEnhancementsController::OptionsSaveCallback($request);
69 case CompatibilitySettingsOptionKey::SPECTRA_BLOCK_SPACING:
70 return $this->SaveCompatibilitySettingsCallback($request['action']);
71 default:
72 return new \WP_Error('bad_request_plugin', 'Bad Plugin Request', array('status' => 400));
73 }
74 }
75
76 private function SubmitFeedbackCallback($request)
77 {
78 try {
79 if (!isset($request['spbaddons_reason']) || empty($request['spbaddons_reason'])) throw new SettingsException(__('Unable to send feedback. No feedback provided.', "superb-blocks"));
80
81 if ($request['spbaddons_reason'] === 'other' && isset($request['spbaddons_other'])) {
82 $message = sanitize_text_field(wp_unslash($request['spbaddons_other']));
83 } else {
84 $message = sanitize_text_field(wp_unslash($request['spbaddons_reason']));
85 }
86 LogController::SendFeedback($message);
87
88 return rest_ensure_response(['success' => true]);
89 } catch (SettingsException $s_ex) {
90 return rest_ensure_response(['success' => false, "text" => esc_html($s_ex->getMessage())]);
91 } catch (Exception $ex) {
92 LogController::HandleException($ex);
93 return new \WP_Error('internal_error_plugin', 'Internal Plugin Error', array('status' => 500));
94 }
95 }
96
97 private function RegisterKeyCallback($request)
98 {
99 try {
100 KeyController::RegisterKey($request['key'], true);
101 return rest_ensure_response(['success' => true]);
102 } catch (KeyException $k_ex) {
103 return rest_ensure_response(['success' => false, "text" => esc_html($k_ex->getMessage())]);
104 } catch (Exception $ex) {
105 LogController::HandleException($ex);
106 return new \WP_Error('internal_error_plugin', 'Internal Plugin Error', array('status' => 500));
107 }
108 }
109
110 private function RemoveKeyCallback()
111 {
112 try {
113 $removed = KeyController::RemoveKey();
114 return rest_ensure_response(['success' => $removed]);
115 } catch (KeyException $k_ex) {
116 return rest_ensure_response(['success' => false, "text" => esc_html($k_ex->getMessage())]);
117 } catch (Exception $ex) {
118 LogController::HandleException($ex);
119 return new \WP_Error('internal_error_plugin', 'Internal Plugin Error', array('status' => 500));
120 }
121 }
122
123 public static function GetSettings()
124 {
125 return OptionController::GetSettings();
126 }
127
128 public static function GetCompatibilitySettings()
129 {
130 return OptionController::GetCompatibilitySettings();
131 }
132
133 private function SaveSettingsCallback($action)
134 {
135 try {
136 $option_controller = new OptionController();
137 $current_settings = OptionController::GetSettings();
138
139 switch ($action) {
140 case SettingsOptionKey::LOGS_ENABLED:
141 $current_settings[SettingsOptionKey::LOGS_ENABLED] = !$current_settings[SettingsOptionKey::LOGS_ENABLED];
142 $option_controller->SaveSettings($current_settings);
143 break;
144 case SettingsOptionKey::LOG_SHARE_ENABLED:
145 $current_settings[SettingsOptionKey::LOG_SHARE_ENABLED] = !$current_settings[SettingsOptionKey::LOG_SHARE_ENABLED];
146 $saved = $option_controller->SaveSettings($current_settings);
147 if ($saved) {
148 $current_settings[SettingsOptionKey::LOG_SHARE_ENABLED] ? LogController::MaybeSubscribeCron() : LogController::MaybeUnsubscribeCron();
149 }
150 break;
151 case 'clear_cache':
152 $cleared = CacheController::ClearCacheAll();
153 if (!$cleared) throw new SettingsException(__('Cache could not be cleared.', "superb-blocks"));
154 break;
155 case 'clear_logs':
156 $cleared = LogController::ClearLogs();
157 if (!$cleared) throw new SettingsException(__('Logs could not be cleared.', "superb-blocks"));
158 break;
159 case 'view_logs':
160 return rest_ensure_response(['success' => true, 'content' => LogController::GetLogs()]);
161 case 'clear_restoration_points':
162 $cleared = WizardRestorationPointController::FullRestorationCleanup();
163 if (!$cleared) throw new SettingsException(__('Restoration points could not be cleared.', "superb-blocks"));
164 break;
165 }
166
167 return rest_ensure_response(['success' => true]);
168 } catch (SettingsException $s_ex) {
169 return rest_ensure_response(['success' => false, "text" => esc_html($s_ex->getMessage())]);
170 } catch (Exception $ex) {
171 LogController::HandleException($ex);
172 return new \WP_Error('internal_error_plugin', 'Internal Plugin Error', array('status' => 500));
173 }
174 }
175
176 private function SaveCompatibilitySettingsCallback($action)
177 {
178 try {
179 $option_controller = new OptionController();
180 $current_settings = OptionController::GetCompatibilitySettings();
181
182 switch ($action) {
183 case CompatibilitySettingsOptionKey::SPECTRA_BLOCK_SPACING:
184 $current_settings[CompatibilitySettingsOptionKey::SPECTRA_BLOCK_SPACING] = !$current_settings[CompatibilitySettingsOptionKey::SPECTRA_BLOCK_SPACING];
185 $option_controller->SaveCompatibilitySettings($current_settings);
186 break;
187 }
188
189 return rest_ensure_response(['success' => true]);
190 } catch (SettingsException $s_ex) {
191 return rest_ensure_response(['success' => false, "text" => esc_html($s_ex->getMessage())]);
192 } catch (Exception $ex) {
193 LogController::HandleException($ex);
194 return new \WP_Error('internal_error_plugin', 'Internal Plugin Error', array('status' => 500));
195 }
196 }
197
198 public static function GetRelevantCompatibilitySettings()
199 {
200 $relevant_settings = array();
201 // Check if Spectra is active
202 if (class_exists('UAGB_Loader')) {
203 $relevant_settings[CompatibilitySettingsOptionKey::SPECTRA_BLOCK_SPACING] = true;
204 }
205
206 return $relevant_settings;
207 }
208
209 public static function IsCompatibilitySettingRelevantAndEnabled($compatibility_setting)
210 {
211 $relevant_settings = self::GetRelevantCompatibilitySettings();
212 if (!isset($relevant_settings[$compatibility_setting])) return false;
213
214 $compatibility_settings = self::GetCompatibilitySettings();
215 return $compatibility_settings[$compatibility_setting];
216 }
217 }
218