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