PluginProbe ʕ •ᴥ•ʔ
Superb Addons: Blocks, Patterns, Pre-built Pages, Sliders, Popups, Free Forms, Animations & More / 3.1.2
Superb Addons: Blocks, Patterns, Pre-built Pages, Sliders, Popups, Free Forms, Animations & More v3.1.2
4.0.8 4.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-notice-controller.php 2 years ago class-settings-controller.php 2 years ago class-troubleshooting-controller.php 2 years ago
class-settings-controller.php
224 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.', "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();
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.', "superb-blocks"));
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 if (!current_user_can('install_plugins')) throw new KeyException(__('Unfortunately, you do not have permission to install plugins on this WordPress site.', "superb-blocks"), true);
118
119 $installed = PluginInstaller::Install('elementor');
120 if (!$installed) {
121 return rest_ensure_response(['success' => false, "text" => esc_html__('An error occured. Elementor could not be installed.', "superb-blocks")]);
122 }
123
124 return rest_ensure_response(['success' => true]);
125 } catch (KeyException $k_ex) {
126 return rest_ensure_response(['success' => false, "text" => esc_html($k_ex->getMessage())]);
127 } catch (Exception $ex) {
128 LogController::HandleException($ex);
129 return new \WP_Error('internal_error_plugin', 'Internal Plugin Error', array('status' => 500));
130 }
131 }
132
133 public static function GetSettings()
134 {
135 return OptionController::GetSettings();
136 }
137
138 public static function GetCompatibilitySettings()
139 {
140 return OptionController::GetCompatibilitySettings();
141 }
142
143 private function SaveSettingsCallback($action)
144 {
145 try {
146 $option_controller = new OptionController();
147 $current_settings = OptionController::GetSettings();
148
149 switch ($action) {
150 case SettingsOptionKey::LOGS_ENABLED:
151 $current_settings[SettingsOptionKey::LOGS_ENABLED] = !$current_settings[SettingsOptionKey::LOGS_ENABLED];
152 $option_controller->SaveSettings($current_settings);
153 break;
154 case SettingsOptionKey::LOG_SHARE_ENABLED:
155 $current_settings[SettingsOptionKey::LOG_SHARE_ENABLED] = !$current_settings[SettingsOptionKey::LOG_SHARE_ENABLED];
156 $saved = $option_controller->SaveSettings($current_settings);
157 if ($saved) {
158 $current_settings[SettingsOptionKey::LOG_SHARE_ENABLED] ? LogController::MaybeSubscribeCron() : LogController::MaybeUnsubscribeCron();
159 }
160 break;
161 case 'clear_cache':
162 $cleared = CacheController::ClearCacheAll();
163 if (!$cleared) throw new SettingsException(__('Cache could not be cleared.', "superb-blocks"));
164 break;
165 case 'clear_logs':
166 $cleared = LogController::ClearLogs();
167 if (!$cleared) throw new SettingsException(__('Logs could not be cleared.', "superb-blocks"));
168 break;
169 case 'view_logs':
170 return rest_ensure_response(['success' => true, 'content' => LogController::GetLogs()]);
171 }
172
173 return rest_ensure_response(['success' => true]);
174 } catch (SettingsException $s_ex) {
175 return rest_ensure_response(['success' => false, "text" => esc_html($s_ex->getMessage())]);
176 } catch (Exception $ex) {
177 LogController::HandleException($ex);
178 return new \WP_Error('internal_error_plugin', 'Internal Plugin Error', array('status' => 500));
179 }
180 }
181
182 private function SaveCompatibilitySettingsCallback($action)
183 {
184 try {
185 $option_controller = new OptionController();
186 $current_settings = OptionController::GetCompatibilitySettings();
187
188 switch ($action) {
189 case CompatibilitySettingsOptionKey::SPECTRA_BLOCK_SPACING:
190 $current_settings[CompatibilitySettingsOptionKey::SPECTRA_BLOCK_SPACING] = !$current_settings[CompatibilitySettingsOptionKey::SPECTRA_BLOCK_SPACING];
191 $option_controller->SaveCompatibilitySettings($current_settings);
192 break;
193 }
194
195 return rest_ensure_response(['success' => true]);
196 } catch (SettingsException $s_ex) {
197 return rest_ensure_response(['success' => false, "text" => esc_html($s_ex->getMessage())]);
198 } catch (Exception $ex) {
199 LogController::HandleException($ex);
200 return new \WP_Error('internal_error_plugin', 'Internal Plugin Error', array('status' => 500));
201 }
202 }
203
204 public static function GetRelevantCompatibilitySettings()
205 {
206 $relevant_settings = array();
207 // Check if Spectra is active
208 if (class_exists('UAGB_Loader')) {
209 $relevant_settings[CompatibilitySettingsOptionKey::SPECTRA_BLOCK_SPACING] = true;
210 }
211
212 return $relevant_settings;
213 }
214
215 public static function IsCompatibilitySettingRelevantAndEnabled($compatibility_setting)
216 {
217 $relevant_settings = self::GetRelevantCompatibilitySettings();
218 if (!isset($relevant_settings[$compatibility_setting])) return false;
219
220 $compatibility_settings = self::GetCompatibilitySettings();
221 return $compatibility_settings[$compatibility_setting];
222 }
223 }
224