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