PluginProbe ʕ •ᴥ•ʔ
Superb Addons: Blocks, Patterns, Pre-built Pages, Sliders, Popups, Free Forms, Animations & More / 3.0.7
Superb Addons: Blocks, Patterns, Pre-built Pages, Sliders, Popups, Free Forms, Animations & More v3.0.7
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
class-dashboard-controller.php 2 years ago class-settings-controller.php 2 years ago class-troubleshooting-controller.php 2 years ago
class-settings-controller.php
222 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\Data\Controllers\CompatibilitySettingsOptionKey;
15 use SuperbAddons\Data\Controllers\LogController;
16 use SuperbAddons\Data\Utils\KeyException;
17 use SuperbAddons\Data\Utils\PluginInstaller;
18 use SuperbAddons\Data\Utils\SettingsException;
19
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.', 'superbaddons'), 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();
52 case 'addkey':
53 return $this->RegisterKeyCallback($request);
54 case 'removekey':
55 return $this->RemoveKeyCallback();
56 case 'getelementor':
57 return $this->InstallElementorCallback();
58 case SettingsOptionKey::LOGS_ENABLED:
59 case SettingsOptionKey::LOG_SHARE_ENABLED:
60 case 'clear_cache':
61 case 'clear_logs':
62 case 'view_logs':
63 return $this->SaveSettingsCallback($request['action']);
64 case CompatibilitySettingsOptionKey::SPECTRA_BLOCK_SPACING:
65 return $this->SaveCompatibilitySettingsCallback($request['action']);
66 default:
67 return new \WP_Error('bad_request_plugin', 'Bad Plugin Request', array('status' => 400));
68 }
69 }
70
71 private function SubmitFeedbackCallback()
72 {
73 try {
74 if (!isset($_POST['spbaddons_reason']) || empty($_POST['spbaddons_reason'])) throw new SettingsException(__('Unable to send feedback. No feedback provided.', 'superbaddons'));
75
76 $message = $_POST['spbaddons_reason'] === 'other' ? $_POST['spbaddons_other'] : $_POST['spbaddons_reason'];
77 LogController::SendFeedback($message);
78
79 return rest_ensure_response(['success' => true]);
80 } catch (SettingsException $s_ex) {
81 return rest_ensure_response(['success' => false, "text" => esc_html($s_ex->getMessage())]);
82 } catch (Exception $ex) {
83 LogController::HandleException($ex);
84 return new \WP_Error('internal_error_plugin', 'Internal Plugin Error', array('status' => 500));
85 }
86 }
87
88 private function RegisterKeyCallback($request)
89 {
90 try {
91 KeyController::RegisterKey($request['key'], true);
92 return rest_ensure_response(['success' => true]);
93 } catch (KeyException $k_ex) {
94 return rest_ensure_response(['success' => false, "text" => esc_html($k_ex->getMessage())]);
95 } catch (Exception $ex) {
96 LogController::HandleException($ex);
97 return new \WP_Error('internal_error_plugin', 'Internal Plugin Error', array('status' => 500));
98 }
99 }
100
101 private function RemoveKeyCallback()
102 {
103 try {
104 $removed = KeyController::RemoveKey();
105 return rest_ensure_response(['success' => $removed]);
106 } catch (KeyException $k_ex) {
107 return rest_ensure_response(['success' => false, "text" => esc_html($k_ex->getMessage())]);
108 } catch (Exception $ex) {
109 LogController::HandleException($ex);
110 return new \WP_Error('internal_error_plugin', 'Internal Plugin Error', array('status' => 500));
111 }
112 }
113
114 private function InstallElementorCallback()
115 {
116 try {
117 $installed = PluginInstaller::Install('elementor');
118 if (!$installed) {
119 return rest_ensure_response(['success' => false, "text" => esc_html__('An error occured. Elementor could not be installed.', 'superbaddons')]);
120 }
121
122 return rest_ensure_response(['success' => true]);
123 } catch (KeyException $k_ex) {
124 return rest_ensure_response(['success' => false, "text" => esc_html($k_ex->getMessage())]);
125 } catch (Exception $ex) {
126 LogController::HandleException($ex);
127 return new \WP_Error('internal_error_plugin', 'Internal Plugin Error', array('status' => 500));
128 }
129 }
130
131 public static function GetSettings()
132 {
133 return OptionController::GetSettings();
134 }
135
136 public static function GetCompatibilitySettings()
137 {
138 return OptionController::GetCompatibilitySettings();
139 }
140
141 private function SaveSettingsCallback($action)
142 {
143 try {
144 $option_controller = new OptionController();
145 $current_settings = OptionController::GetSettings();
146
147 switch ($action) {
148 case SettingsOptionKey::LOGS_ENABLED:
149 $current_settings[SettingsOptionKey::LOGS_ENABLED] = !$current_settings[SettingsOptionKey::LOGS_ENABLED];
150 $option_controller->SaveSettings($current_settings);
151 break;
152 case SettingsOptionKey::LOG_SHARE_ENABLED:
153 $current_settings[SettingsOptionKey::LOG_SHARE_ENABLED] = !$current_settings[SettingsOptionKey::LOG_SHARE_ENABLED];
154 $saved = $option_controller->SaveSettings($current_settings);
155 if ($saved) {
156 $current_settings[SettingsOptionKey::LOG_SHARE_ENABLED] ? LogController::MaybeSubscribeCron() : LogController::MaybeUnsubscribeCron();
157 }
158 break;
159 case 'clear_cache':
160 $cleared = CacheController::ClearCacheAll();
161 if (!$cleared) throw new SettingsException(__('Cache could not be cleared.', 'superbaddons'));
162 break;
163 case 'clear_logs':
164 $cleared = LogController::ClearLogs();
165 if (!$cleared) throw new SettingsException(__('Logs could not be cleared.', 'superbaddons'));
166 break;
167 case 'view_logs':
168 return rest_ensure_response(['success' => true, 'content' => LogController::GetLogs()]);
169 }
170
171 return rest_ensure_response(['success' => true]);
172 } catch (SettingsException $s_ex) {
173 return rest_ensure_response(['success' => false, "text" => esc_html($s_ex->getMessage())]);
174 } catch (Exception $ex) {
175 LogController::HandleException($ex);
176 return new \WP_Error('internal_error_plugin', 'Internal Plugin Error', array('status' => 500));
177 }
178 }
179
180 private function SaveCompatibilitySettingsCallback($action)
181 {
182 try {
183 $option_controller = new OptionController();
184 $current_settings = OptionController::GetCompatibilitySettings();
185
186 switch ($action) {
187 case CompatibilitySettingsOptionKey::SPECTRA_BLOCK_SPACING:
188 $current_settings[CompatibilitySettingsOptionKey::SPECTRA_BLOCK_SPACING] = !$current_settings[CompatibilitySettingsOptionKey::SPECTRA_BLOCK_SPACING];
189 $option_controller->SaveCompatibilitySettings($current_settings);
190 break;
191 }
192
193 return rest_ensure_response(['success' => true]);
194 } catch (SettingsException $s_ex) {
195 return rest_ensure_response(['success' => false, "text" => esc_html($s_ex->getMessage())]);
196 } catch (Exception $ex) {
197 LogController::HandleException($ex);
198 return new \WP_Error('internal_error_plugin', 'Internal Plugin Error', array('status' => 500));
199 }
200 }
201
202 public static function GetRelevantCompatibilitySettings()
203 {
204 $relevant_settings = array();
205 // Check if Spectra is active
206 if (class_exists('UAGB_Loader')) {
207 $relevant_settings[CompatibilitySettingsOptionKey::SPECTRA_BLOCK_SPACING] = true;
208 }
209
210 return $relevant_settings;
211 }
212
213 public static function IsCompatibilitySettingRelevantAndEnabled($compatibility_setting)
214 {
215 $relevant_settings = self::GetRelevantCompatibilitySettings();
216 if (!isset($relevant_settings[$compatibility_setting])) return false;
217
218 $compatibility_settings = self::GetCompatibilitySettings();
219 return $compatibility_settings[$compatibility_setting];
220 }
221 }
222