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