PluginProbe
FluentCommunity – Ultra-Fast High-Performance Social Network, Community, LMS & Online Courses / 1.1.0
FluentCommunity – Ultra-Fast High-Performance Social Network, Community, LMS & Online Courses v1.1.0
2.10.0 2.10.01 2.9.1 2.9.0 2.8.1 2.8.0 2.7.7 2.7.5 2.7.0 2.6.01 2.6.0 2.5.0 2.4.01 trunk 1.0.90 1.0.91 1.0.92 1.0.93 1.0.94 1.0.95 1.0.96 1.0.97 1.0.98 1.0.99 1.1.0 All 77 releases
fluent-community / app / Http / Controllers / AdminController.php

AdminController.php in FluentCommunity – Ultra-Fast High-Performance Social Network, Community, LMS & Online Courses 1.1.0, at app/Http/Controllers/AdminController.php

458 lines 16.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace FluentCommunity\App\Http\Controllers;
4
5 use FluentCommunity\App\Functions\Utility;
6 use FluentCommunity\App\Services\AuthenticationService;
7 use FluentCommunity\App\Services\CustomSanitizer;
8 use FluentCommunity\App\Services\FeedsHelper;
9 use FluentCommunity\Modules\Auth\AuthHelper;
10 use FluentCommunity\App\Services\Helper;
11 use FluentCommunity\App\Services\OnboardingService;
12 use FluentCommunity\Framework\Http\Request\Request;
13 use FluentCommunity\Framework\Support\Arr;
14
15 class AdminController extends Controller
16 {
17 public function getGeneralSettings(Request $request)
18 {
19 $settings = Helper::generalSettings(false);
20
21 $userRoles = wp_roles()->roles;
22
23 $formatedRoles = [];
24 foreach ($userRoles as $role => $roleData) {
25 $formatedRoles[$role] = $roleData['name'];
26 }
27
28 unset($formatedRoles['administrator']);
29
30 return [
31 'settings' => $settings,
32 'user_roles' => $formatedRoles,
33 'users_can_register' => !!get_option('users_can_register'),
34 'user_registration_enable_url' => admin_url('options-general.php')
35 ];
36 }
37
38 public function saveGeneralSettings(Request $request)
39 {
40 $inputs = $request->get('settings', []);
41 $settings = Helper::generalSettings(false);
42 $inputs = Arr::only($inputs, array_keys($settings));
43
44 $settings['logo'] = Arr::get($inputs, 'logo', '');
45 $settings['white_logo'] = Arr::get($inputs, 'white_logo', '');
46 $settings['featured_image'] = Arr::get($inputs, 'featured_image', '');
47
48 if (!empty($settings['logo'])) {
49 $settings['logo'] = sanitize_url($settings['logo']);
50 }
51
52 if (!empty($settings['white_logo'])) {
53 $settings['white_logo'] = sanitize_url($settings['white_logo']);
54 }
55
56 if (!empty($settings['featured_image'])) {
57 $settings['featured_image'] = sanitize_url($settings['featured_image']);
58 }
59
60 if (!empty($settings['site_title'])) {
61 $settings['site_title'] = sanitize_text_field(Arr::get($inputs, 'site_title', ''));
62 }
63
64 $settings['disable_global_posts'] = sanitize_text_field(Arr::get($inputs, 'disable_global_posts', 'no'));
65 $settings['access'] = Arr::get($inputs, 'access', []);
66 $settings['auth_content'] = wp_kses_post(Arr::get($inputs, 'auth_content', ''));
67 $settings['auth_redirect'] = sanitize_url(Arr::get($inputs, 'auth_redirect', ''));
68 $settings['restricted_role_content'] = wp_kses_post(Arr::get($inputs, 'restricted_role_content', ''));
69 $settings['auth_url'] = sanitize_url(Arr::get($inputs, 'auth_url', ''));
70 $media = Helper::getMediaFromUrl($settings['logo']);
71 $whiteMedia = Helper::getMediaFromUrl($settings['white_logo']);
72 $featuredMedia = Helper::getMediaFromUrl($settings['featured_image']);
73 $settings['cutsom_auth_url'] = sanitize_url(Arr::get($inputs, 'cutsom_auth_url', ''));
74 $settings['auth_form_type'] = sanitize_text_field(Arr::get($inputs, 'auth_form_type', ''));
75
76 if ($media) {
77 $settings['logo'] = $media->public_url;
78 $media->update([
79 'is_active' => true,
80 'user_id' => get_current_user_id(),
81 'object_source' => 'general'
82 ]);
83 }
84
85 if ($whiteMedia) {
86 $settings['white_logo'] = $whiteMedia->public_url;
87 $whiteMedia->update([
88 'is_active' => true,
89 'user_id' => get_current_user_id(),
90 'object_source' => 'general'
91 ]);
92 }
93
94 if ($featuredMedia) {
95 $settings['featured_image'] = $featuredMedia->public_url;
96 $featuredMedia->update([
97 'is_active' => true,
98 'user_id' => get_current_user_id(),
99 'object_source' => 'general'
100 ]);
101 }
102
103 $slugChanged = false;
104 if ($settings['slug'] != $inputs['slug'] && !defined('FLUENT_COMMUNITY_PORTAL_SLUG')) {
105 $settings['slug'] = $inputs['slug'];
106 $slugChanged = true;
107 }
108
109 update_option('fluent_community_settings', $settings);
110
111 $redirectUrl = '';
112
113 if ($slugChanged) {
114 // flush rewrite rules
115 flush_rewrite_rules(true);
116 Helper::generalSettings(false);
117 $redirectUrl = Helper::baseUrl('admin/settings/general');
118 }
119
120 return [
121 'message' => __('Settings have been saved successfully.', 'fluent-community'),
122 'redirect_url' => $redirectUrl
123 ];
124 }
125
126 public function getEmailSettings(Request $request)
127 {
128 return [
129 'email_settings' => Utility::getEmailNotificationSettings()
130 ];
131 }
132
133 public function saveEmailSettings(Request $request)
134 {
135 $prevSettings = Utility::getEmailNotificationSettings();
136 $newSettings = $request->get('email_settings', []);
137
138 $newSettings = wp_parse_args($newSettings, $prevSettings);
139 $newSettings = CustomSanitizer::santizeEmailSettings($newSettings);
140
141 Utility::updateOption('global_email_settings', $newSettings);
142
143 /*
144 * We are unscheduling all digest schedules if the settings has been changed or disabled
145 */
146 $isScheduleChanged = ($newSettings['digest_mail_day'] != $prevSettings['digest_mail_day']) || ($newSettings['daily_digest_time'] != $prevSettings['daily_digest_time']);
147 if ($isScheduleChanged) {
148 if (as_next_scheduled_action('fluent_community_send_daily_digest_init')) {
149 as_unschedule_all_actions('fluent_community_send_daily_digest_init', [], 'fluent-community');
150 }
151 }
152
153 return [
154 'email_settings' => $newSettings,
155 'message' => __('Email notification settings have been updated', 'fluent-community')
156 ];
157 }
158
159 public function getStorageSettings(Request $request)
160 {
161 if (!defined('FLUENT_COMMUNITY_PRO')) {
162 $config = [
163 'driver' => 'local'
164 ];
165 } else {
166 $config = \FluentCommunityPro\App\Modules\CloudStorage\StorageHelper::getConfig('view');
167 }
168
169 return apply_filters('fluent_community/storage_settings_response', [
170 'config' => $config
171 ]);
172 }
173
174 public function updateStorageSettings(Request $request)
175 {
176 if (!defined('FLUENT_COMMUNITY_PRO')) {
177 return $this->sendError([
178 'message' => 'Sorry, you can not update this config. Please activate pro'
179 ]);
180 }
181
182 if (defined('FLUENT_COMMUNITY_CLOUD_STORAGE') && FLUENT_COMMUNITY_CLOUD_STORAGE) {
183 return $this->sendError([
184 'message' => 'You can not update the storage settings as it is defined in the config file'
185 ]);
186 }
187
188 $config = $request->get('config', []);
189
190 $driver = Arr::get($config, 'driver', 'local');
191
192 $validation = [
193 'driver' => 'required'
194 ];
195
196 if ($driver == 'cloudflare_r2') {
197 $validation = [
198 'driver' => 'required',
199 'access_key' => 'required',
200 'secret_key' => 'required',
201 'bucket' => 'required',
202 'public_url' => 'required|url',
203 'account_id' => 'required',
204 ];
205 } else if ($driver == 'amazon_s3') {
206 $validation = [
207 'driver' => 'required',
208 'access_key' => 'required',
209 'secret_key' => 'required',
210 'bucket' => 'required'
211 ];
212 }
213
214 $this->validate($config, $validation);
215
216 if ($driver === 'cloudflare_r2' || $driver === 'amazon_s3') {
217
218 $previousConfig = \FluentCommunityPro\App\Modules\CloudStorage\StorageHelper::getConfig();
219 if ($config['access_key'] == 'FCOM_ENCRYPTED_DATA_KEY') {
220 $config['access_key'] = Arr::get($previousConfig, 'access_key');
221 }
222
223 if ($config['secret_key'] == 'FCOM_ENCRYPTED_DATA_KEY') {
224 $config['secret_key'] = Arr::get($previousConfig, 'secret_key');
225 }
226
227 $driver = (new \FluentCommunityPro\App\Modules\CloudStorage\CloudStorageModule)->getConnectionDriver($config);
228
229 if (!$driver) {
230 return $this->sendError([
231 'message' => 'Could not connect to the remote storage service. Please check your credentials'
232 ]);
233 }
234
235 $test = $driver->testConnection();
236 if (!$test || is_wp_error($test)) {
237 return $this->sendError([
238 'message' => 'Could not connect to the remote storage service. Error: ' . is_wp_error($test) ? $test->get_error_message() : 'Unknow Error'
239 ]);
240 }
241 }
242
243 $config = Arr::only($config, [
244 'driver',
245 'access_key',
246 'secret_key',
247 'bucket',
248 'public_url',
249 'account_id',
250 'sub_folder',
251 's3_endpoint'
252 ]);
253
254 if ($config['driver'] == 'local') {
255 $config = [
256 'driver' => 'local'
257 ];
258
259 $featureConfig = Utility::getFeaturesConfig();
260 $featureConfig['cloud_storage'] = 'no';
261 Utility::updateOption('fluent_community_features', $featureConfig);
262 } else {
263 $featureConfig = Utility::getFeaturesConfig();
264 $featureConfig['cloud_storage'] = 'yes';
265 Utility::updateOption('fluent_community_features', $featureConfig);
266 }
267
268 $config = array_filter($config);
269 \FluentCommunityPro\App\Modules\CloudStorage\StorageHelper::updateConfig($config);
270
271 return [
272 'message' => __('Storage settings have been updated successfully', 'fluent-community')
273 ];
274 }
275
276 public function getWelcomeBannerSettings(Request $request)
277 {
278 return [
279 'settings' => Helper::getWelcomeBannerSettings()
280 ];
281 }
282
283 public function updateWelcomeBannerSettings(Request $request)
284 {
285 $settings = $request->get('settings', []);
286
287 $settings = CustomSanitizer::sanitizeWelcomeBannerSettings($settings);
288
289 if (Arr::get($settings, 'login.enabled') == 'yes') {
290 $settings['login']['description_rendered'] = FeedsHelper::mdToHtml(Arr::get($settings, 'login.description'));
291 }
292
293 if (Arr::get($settings, 'logout.enabled') == 'yes') {
294 $settings['logout']['description_rendered'] = FeedsHelper::mdToHtml(Arr::get($settings, 'logout.description'));
295 if (Arr::get($settings, 'logout.buttonLabel') && Arr::get($settings, 'logout.useCustomUrl') != 'yes') {
296 $settings['logout']['buttonLink'] = Helper::getAuthUrl();
297 }
298 }
299
300 Utility::updateOption('welcome_banner_settings', $settings);
301
302 Utility::setCache('welcome_banner_settings', $settings, WEEK_IN_SECONDS);
303
304 return [
305 'message' => __('Welcome banner settings have been updated successfully', 'fluent-community'),
306 'settings' => $settings
307 ];
308 }
309
310 public function getAuthSettings()
311 {
312 $settings = AuthenticationService::getAuthSettings();
313
314 $settings['login']['form']['fields'] = AuthHelper::getLoginFormFields();
315 $settings['signup']['form']['fields'] = AuthHelper::getFormFields();
316
317 return [
318 'settings' => $settings
319 ];
320 }
321
322 public function saveAuthSettings(Request $request)
323 {
324 $settings = $request->get('settings', []);
325
326 $formattedSettings = AuthenticationService::formatAuthSettings($settings);
327
328 Utility::updateOption('auth_settings', $formattedSettings);
329
330 Utility::setCache('auth_settings', $formattedSettings, WEEK_IN_SECONDS);
331
332 return [
333 'message' => __('Auth settings have been updated successfully', 'fluent-community'),
334 'settings' => $formattedSettings
335 ];
336 }
337
338 public function getOnBoardingSettings()
339 {
340 $settings = Helper::generalSettings();
341
342 $currentUser = get_user_by('ID', get_current_user_id());
343
344 $settings['has_fluentcrm'] = defined('FLUENTCRM') ? 'yes' : 'no';
345 $settings['has_fluentsmtp'] = defined('FLUENTMAIL_PLUGIN_FILE') ? 'yes' : 'no';
346 $settings['template'] = '';
347 $settings['install_fluentcrm'] = 'yes';
348 $settings['install_fluentsmtp'] = 'yes';
349 $settings['subscribe_to_newsletter'] = 'yes';
350 $settings['share_data'] = 'no';
351 $settings['user_full_name'] = $currentUser->first_name ? $currentUser->first_name . ' ' . $currentUser->last_name : $currentUser->display_name;
352 $settings['user_email_address'] = $currentUser->user_email;
353
354 return [
355 'settings' => $settings
356 ];
357 }
358
359
360 public function saveOnBoardingSettings(Request $request)
361 {
362 $inputs = $request->get('settings', []);
363 $settings = Helper::generalSettings();
364
365 if (Arr::get($inputs, 'site_title')) {
366 $settings['site_title'] = sanitize_text_field(Arr::get($inputs, 'site_title'));
367 }
368
369 $logo = Arr::get($inputs, 'logo');
370
371 if ($logo) {
372 $media = Helper::getMediaFromUrl($logo);
373 if ($media) {
374 $settings['logo'] = $media->public_url;
375 $media->update([
376 'is_active' => true,
377 'user_id' => get_current_user_id(),
378 'object_source' => 'onboarding'
379 ]);
380 }
381 }
382
383 if (Arr::get($inputs, 'slug') && empty($settings['is_slug_defined'])) {
384 $settings['slug'] = sanitize_title(Arr::get($inputs, 'slug'));
385 }
386 update_option('fluent_community_settings', $settings, 'yes');
387
388 // Email Subscription Settings
389 $subscriptionSettings = array_filter([
390 'user_id' => get_current_user_id(),
391 'subscribe_to_newsletter' => sanitize_text_field(Arr::get($inputs, 'subscribe_to_newsletter', 'no')),
392 'share_data' => sanitize_text_field(Arr::get($inputs, 'share_data', 'no')),
393 'user_full_name' => sanitize_text_field(Arr::get($inputs, 'user_full_name', '')),
394 'user_email_address' => sanitize_email(Arr::get($inputs, 'user_email_address', ''))
395 ]);
396
397 Utility::updateOption('onboarding_sub_settings', $subscriptionSettings);
398 OnboardingService::maybeCreateSpaceTemplates(Arr::get($inputs, 'template'));
399
400 $installableAddons = array_filter(array_keys([
401 'fluent-crm' => Arr::get($inputs, 'install_fluentcrm', 'no') == 'yes',
402 'fluent-smtp' => Arr::get($inputs, 'install_fluentsmtp', 'no') == 'yes',
403 ]));
404
405 // Install Plugins which are checked
406 OnboardingService::installAddons($installableAddons);
407
408 // Maybe Optin User to Newsletter
409 OnboardingService::maybeOptinUserToNewsletter($subscriptionSettings);
410
411 // flash the permalinks
412 flush_rewrite_rules(true);
413
414 return [
415 'message' => __('Onboarding settings have been updated.', 'fluent-community')
416 ];
417 }
418
419 public function changePortalSlug(Request $request)
420 {
421 $newSlug = sanitize_title($request->get('new_slug', ''));
422
423 if (!$newSlug) {
424 return $this->sendError([
425 'message' => __('Slug can not be empty', 'fluent-community')
426 ]);
427 }
428
429 if (defined('FLUENT_COMMUNITY_PORTAL_SLUG')) {
430 return $this->sendError([
431 'message' => __('You can not change the slug as it is defined in the config file', 'fluent-community')
432 ]);
433 }
434
435 $settings = Helper::generalSettings();
436
437 if ($settings['slug'] != $newSlug) {
438 $settings['slug'] = $newSlug;
439
440 update_option('fluent_community_settings', $settings);
441 flush_rewrite_rules(true);
442
443 $slug = $settings['slug'];
444 add_rewrite_rule('^' . $slug . '/?$', 'index.php?fcom_route=portal_home', 'top'); // For /hooks
445 add_rewrite_rule('^' . $slug . '/(.+)/?', 'index.php?fcom_route=$matches[1]', 'top');
446 // flush rewrite rules
447 flush_rewrite_rules(true);
448
449 delete_option('rewrite_rules');
450 }
451
452 return [
453 'message' => __('Slug has been changed successfully', 'fluent-community')
454 ];
455 }
456
457 }
458