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 / SpaceController.php

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

837 lines 25.8 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\Models\Space;
7 use FluentCommunity\App\Models\Feed;
8 use FluentCommunity\App\Models\BaseSpace;
9 use FluentCommunity\App\Models\SpaceGroup;
10 use FluentCommunity\App\Models\User;
11 use FluentCommunity\App\Services\CustomSanitizer;
12 use FluentCommunity\App\Services\FeedsHelper;
13 use FluentCommunity\App\Services\Helper;
14 use FluentCommunity\App\Services\LockscreenService;
15 use FluentCommunity\App\Services\ProfileHelper;
16 use FluentCommunity\Framework\Http\Request\Request;
17 use FluentCommunity\App\Models\Comment;
18 use FluentCommunity\App\Models\Reaction;
19 use FluentCommunity\App\Models\SpaceUserPivot;
20 use FluentCommunity\Framework\Support\Arr;
21
22 class SpaceController extends Controller
23 {
24 public function get()
25 {
26 $spaces = Space::orderBy('title', 'ASC')
27 ->whereHas('space_pivot', function ($q) {
28 $q->where('user_id', get_current_user_id());
29 })
30 ->get();
31
32 return [
33 'spaces' => $spaces
34 ];
35 }
36
37 public function create(Request $request)
38 {
39 $currentUser = $this->getUser(true);
40 $currentUser->verifyCommunityPermission('community_admin');
41
42 $data = $request->get('space', []);
43
44 if (empty($data['slug'])) {
45 $data['slug'] = sanitize_title($data['title'], '');
46 } else {
47 $data['slug'] = sanitize_title($data['slug'], '');
48 }
49
50 $data['title'] = sanitize_text_field($data['title']);
51 $data['privacy'] = sanitize_text_field($data['privacy']);
52
53 $this->validate($data, [
54 'title' => 'required',
55 'slug' => 'required|unique:fcom_spaces,slug',
56 'privacy' => 'required|in:public,private,secret',
57 'parent_id' => 'required|exists:fcom_spaces,id'
58 ], [
59 'parent_id.required' => __('Please select a menu group', 'fluent-community')
60 ]);
61
62 $spaceGroup = SpaceGroup::findOrFail($data['parent_id']);
63
64 $spaceData = apply_filters('fluent_community/space/create_data', [
65 'title' => sanitize_text_field($data['title']),
66 'slug' => $data['slug'],
67 'privacy' => $data['privacy'],
68 'description' => sanitize_textarea_field($data['description']),
69 'settings' => [
70 'restricted_post_only' => Arr::get($data, 'settings.restricted_post_only', 'no'),
71 'emoji' => CustomSanitizer::sanitizeEmoji(Arr::get($data, 'settings.emoji', '')),
72 'can_request_join' => Arr::get($data, 'settings.can_request_join', 'no'),
73 'custom_lock_screen' => Arr::get($data, 'settings.custom_lock_screen', 'no'),
74 'layout_style' => Arr::get($data, 'settings.layout_style', 'timeline'),
75 'show_sidebar' => Arr::get($data, 'settings.show_sidebar', 'yes'),
76 'shape_svg' => CustomSanitizer::sanitizeSvg(Arr::get($data, 'settings.shape_svg', '')),
77 'hide_members_count' => Arr::get($data, 'settings.hide_members_count', 'no') == 'yes' ? 'yes' : 'no',
78 ],
79 'parent_id' => $spaceGroup->id,
80 'serial' => BaseSpace::where('parent_id', $spaceGroup->id)->max('serial') + 1
81 ]);
82
83 $ogImage = Arr::get($data, 'settings.og_image', '');
84 $ogMedia = null;
85 if ($ogImage) {
86 $ogMedia = Helper::getMediaFromUrl($ogImage);
87 if ($ogMedia && !$ogMedia->is_active) {
88 $spaceData['settings']['og_image'] = $ogMedia->public_url;
89 }
90 }
91
92 $space = Space::create($spaceData);
93 if ($ogMedia && !$ogMedia->is_active) {
94 $ogMedia->update([
95 'is_active' => true,
96 'user_id' => get_current_user_id(),
97 'sub_object_id' => $space->id,
98 'object_source' => 'space_og_image'
99 ]);
100 }
101
102 $imageTypes = ['cover_photo', 'logo'];
103 $metaData = [];
104 foreach ($imageTypes as $type) {
105 if (!empty($data[$type])) {
106 $media = Helper::getMediaFromUrl($data[$type]);
107 if (!$media || $media->is_active) {
108 continue;
109 }
110 $metaData[$type] = $media->public_url;
111 $media->update([
112 'is_active' => true,
113 'user_id' => get_current_user_id(),
114 'sub_object_id' => $space->id,
115 'object_source' => 'space_' . $type
116 ]);
117 }
118 }
119
120 if ($metaData) {
121 $space->updateCustomData($metaData, false);
122 }
123
124 $space->members()->attach(get_current_user_id(), [
125 'role' => 'admin'
126 ]);
127
128 $currentUser->cacheAccessSpaces();
129 do_action('fluent_community/space/created', $space, $data);
130
131 return [
132 'message' => __('Space has been created successfully', 'fluent-community'),
133 'space' => $space
134 ];
135 }
136
137 public function discover(Request $request)
138 {
139
140 $currentUser = $this->getUser();
141
142 $spaces = Space::orderBy('title', 'ASC')
143 ->with(['space_pivot' => function ($q) {
144 $q->where('user_id', get_current_user_id());
145 }])
146 ->where(function ($q) {
147 $q->whereHas('space_pivot', function ($q) {
148 $q->where('user_id', get_current_user_id());
149 })
150 ->orWhereIn('privacy', ['public', 'private']);
151 })
152 ->get();
153
154 foreach ($spaces as $space) {
155 if (Arr::get($space->settings, 'hide_members_count') == 'yes' && (!$currentUser || !$space->verifyUserPermisson($currentUser, 'can_view_members', false))) {
156 $space->members_count = 0;
157 continue;
158 }
159
160 $space->members_count = $space->members()->wherePivot('status', 'active')->count();
161 }
162
163 return [
164 'spaces' => $spaces
165 ];
166 }
167
168 public function getBySlug(Request $request, $spaceSlug)
169 {
170 $user = $this->getUser();
171 $space = Space::where('slug', $spaceSlug)
172 ->firstOrFail();
173
174 $space->permissions = $space->getUserPermissions($user);
175 $space->description_rendered = FeedsHelper::mdToHtml($space->description);
176 $space->membership = $space->getMembership(get_current_user_id());
177 $space->topics = Utility::getTopicsBySpaceId($space->id);
178
179 if (!Helper::isSiteAdmin()) {
180 $space->lockscreen_config = LockscreenService::getLockscreenConfig($space, $space->membership);
181 }
182
183 if ($space->privacy == 'secret' && !$space->membership) {
184 return $this->sendError([
185 'message' => __('You are not allowed to view this space', 'fluent-community'),
186 'error_type' => 'restricted'
187 ]);
188 }
189
190 do_action_ref_array('fluent_community/space', [&$space]);
191
192 return [
193 'space' => $space
194 ];
195 }
196
197 public function patchBySlug(Request $request, $slug)
198 {
199 $space = Space::where('slug', $slug)
200 ->first();
201
202 if (!$space) {
203 return $this->sendError([
204 'message' => 'Space not found'
205 ]);
206 }
207
208 $space->verifyUserPermisson($this->getUser(), 'community_admin');
209
210 $data = $request->get('data', []);
211
212 if (!empty($data['title'])) {
213 $taken = Space::where('title', $data['title'])
214 ->where('id', '!=', $space->id)
215 ->first();
216 if ($taken) {
217 return $this->sendError([
218 'message' => 'Space title is already taken. Please use a different title'
219 ]);
220 }
221 }
222
223 $mediaTypes = ['cover_photo', 'logo'];
224 foreach ($mediaTypes as $type) {
225 if (!empty($data[$type])) {
226 $media = Helper::getMediaFromUrl($data[$type]);
227 if (!$media) {
228 unset($data[$type]);
229 continue;
230 }
231
232 if (!$media || $media->is_active) {
233 return $this->sendError([
234 'message' => 'Invalid media image. Please upload a new one.'
235 ]);
236 }
237
238 $data[$type] = $media->public_url;
239
240 $media->update([
241 'is_active' => true,
242 'user_id' => get_current_user_id(),
243 'sub_object_id' => $space->id,
244 'object_source' => 'space_' . $type
245 ]);
246 } else if (isset($data[$type])) {
247 $data[$type] = '';
248 }
249 }
250
251 $data = apply_filters('fluent_community/space/update_data', $data, $space);
252
253 $space->updateCustomData($data, true);
254
255 if (Arr::has($data, 'topic_ids')) {
256 $topicIds = (array)Arr::get($data, 'topic_ids', []);
257 $space->syncTopics($topicIds);
258 }
259
260 do_action('fluent_community/space/updated', $space, $data);
261
262 return [
263 'message' => __('Space has been updated', 'fluent-community')
264 ];
265 }
266
267 public function getMembers(Request $request, $slug)
268 {
269 $space = Space::where('slug', $slug)
270 ->firstOrFail();
271
272 $user = $this->getUser();
273
274 if (!$space->verifyUserPermisson($user, 'can_view_members', false)) {
275 return $this->sendError([
276 'message' => __('You are not allowed to view members of this space', 'fluent-community'),
277 'permission_failed' => true
278 ]);
279 }
280 $search = $request->getSafe('search', 'sanitize_text_field');
281
282 $pendingCount = 0;
283 if ($user && $user->can('can_add_member', $space)) {
284 $pendingCount = SpaceUserPivot::bySpace($space->id)
285 ->where('status', 'pending')
286 ->count();
287
288 if ($request->get('status') == 'pending') {
289 $pendingRequests = SpaceUserPivot::bySpace($space->id)
290 ->whereHas('xprofile', function ($q) use ($search) {
291 return $q->searchBy($search)
292 ->where('status', 'active');
293 })
294 ->with(['xprofile' => function ($q) {
295 $q->select(ProfileHelper::getXProfilePublicFields());
296 }])
297 ->where('status', 'pending')
298 ->paginate();
299
300 return [
301 'members' => $pendingRequests,
302 'pending_count' => $pendingCount
303 ];
304 }
305 }
306
307 $spaceMembers = SpaceUserPivot::bySpace($space->id)
308 ->whereHas('xprofile', function ($q) use ($search) {
309 return $q->searchBy($search)
310 ->where('status', 'active');
311 })
312 ->with(['xprofile' => function ($q) {
313 $q->select(ProfileHelper::getXProfilePublicFields());
314 }])
315 ->where('status', 'active')
316 ->paginate();
317
318 return [
319 'members' => $spaceMembers,
320 'pending_count' => $pendingCount
321 ];
322 }
323
324 public function join(Request $request, $slug)
325 {
326 $space = Space::where('slug', $slug)->first();
327
328 if (!$space) {
329 return $this->sendError([
330 'message' => 'Space not found'
331 ]);
332 }
333
334 $user = $this->getUser();
335
336 $membership = $space->getMembership(get_current_user_id());
337
338 if ($membership) {
339 return $this->sendError([
340 'message' => 'You are already a member of this space. Please reload this page'
341 ]);
342 }
343
344 $roles = $user->getCommunityRoles();
345
346 if (!$roles && $space->privacy == 'secret') {
347 return $this->sendError([
348 'message' => 'You are not allowed to join this space'
349 ]);
350 }
351
352 $status = 'active';
353 if (!$roles) {
354 if ($space->privacy != 'public') {
355 $status = apply_filters('fluent_community/space/join_status_for_private', 'pending', $space, $user);
356
357 if (!in_array($status, ['pending', 'active'])) {
358 $status = 'pending';
359 }
360 }
361 $role = 'member';
362 } else {
363 $role = $user->isCommunityAdmin() ? 'admin' : 'moderator';
364 }
365
366
367 $space->members()->attach(get_current_user_id(), [
368 'role' => $role,
369 'status' => $status
370 ]);
371
372 $space->membership = $space->getMembership(get_current_user_id());
373
374 if ($status == 'pending') {
375 do_action('fluent_community/space/join_requested', $space, $user->ID, 'self');
376 } else {
377 do_action('fluent_community/space/joined', $space, $user->ID, 'self');
378 }
379
380 $user->cacheAccessSpaces();
381
382 return [
383 'message' => ($status == 'active') ? __('You have joined this Space', 'fluent-community') : __('Your join request has been sent to the Space admin.', 'fluent-community'),
384 'membership' => $space->membership
385 ];
386 }
387
388 public function leave(Request $request, $slug)
389 {
390 $user = $this->getUser(true);
391 $space = Space::where('slug', $slug)->first();
392
393 if (!$space) {
394 return $this->sendError([
395 'message' => 'Space not found'
396 ]);
397 }
398
399 $membership = $space->getMembership($user->ID);
400
401 if (!$membership) {
402 return $this->sendError([
403 'message' => 'You are not a member of this community'
404 ]);
405 }
406
407 Helper::removeFromSpace($space, $user->ID, 'self');
408
409 return [
410 'message' => __('You have left this space', 'fluent-community')
411 ];
412 }
413
414 public function delete(Request $request, $slug)
415 {
416 $space = Space::where('slug', $slug)->first();
417
418 if (!$space) {
419 return $this->sendError([
420 'message' => 'Space not found'
421 ]);
422 }
423
424 if (!Helper::isSiteAdmin()) {
425 return $this->sendError([
426 'message' => 'You are not allowed to delete this community'
427 ]);
428 }
429
430 do_action('fluent_community/space/before_delete', $space);
431
432 Comment::whereHas('post', function ($q) use ($space) {
433 $q->where('space_id', $space->id);
434 })->delete();
435
436 Reaction::whereHas('feed', function ($q) use ($space) {
437 $q->where('space_id', $space->id);
438 })->delete();
439
440 Feed::where('space_id', $space->id)->delete();
441
442 SpaceUserPivot::where('space_id', $space->id)->delete();
443
444 $spaceId = $space->id;
445 $space->delete();
446
447 do_action('fluent_community/space/deleted', $spaceId);
448
449 return [
450 'message' => __('Space has been deleted successfully', 'fluent-community')
451 ];
452 }
453
454 public function addMember(Request $request, $slug)
455 {
456 $space = Space::where('slug', $slug)->first();
457
458 if (!$space) {
459 return $this->sendError([
460 'message' => 'Space not found'
461 ]);
462 }
463
464 $this->validate($request->all(), [
465 'user_id' => 'required|exists:users,ID'
466 ]);
467
468 $userId = $request->get('user_id');
469 $targetUser = User::findOrFail($userId);
470 $xprofile = $targetUser->syncXProfile();
471
472 if ($xprofile && $xprofile->status != 'active') {
473 return $this->sendError([
474 'message' => __('Selected user is not active', 'fluent-community')
475 ]);
476 }
477
478 $admin = User::find(get_current_user_id());
479 $admin->verifySpacePermission('can_add_member', $space);
480
481 $pivot = SpaceUserPivot::bySpace($space->id)
482 ->byUser($userId)
483 ->first();
484
485 $role = $request->get('role', 'member');
486
487 if ($pivot) {
488 if ($pivot->status == 'active') {
489 if ($role != $pivot->role) {
490 $pivot->role = $role;
491 $pivot->save();
492
493 do_action('fluent_community/space/member/role_updated', $space, $pivot);
494
495 return [
496 'message' => 'Member role updated'
497 ];
498 }
499
500 return $this->sendError([
501 'message' => 'Selected user is already a member of this community'
502 ]);
503 }
504
505 $pivot->status = 'active';
506 $pivot->save();
507 do_action('fluent_community/space/joined', $space, $userId, 'by_admin');
508
509 if ($role != 'member') {
510 do_action('fluent_community/space/member/role_updated', $space, $pivot);
511 }
512
513 return [
514 'message' => 'Member approved'
515 ];
516 }
517
518 $space->members()->attach($userId, [
519 'role' => $role,
520 'status' => 'active'
521 ]);
522
523 $targetUser->cacheAccessSpaces();
524
525 do_action('fluent_community/space/joined', $space, $userId, 'by_admin');
526
527 return [
528 'message' => 'User has been added to this community'
529 ];
530 }
531
532 public function removeMember(Request $request, $slug)
533 {
534 $space = Space::where('slug', $slug)->first();
535
536 if (!$space) {
537 return $this->sendError([
538 'message' => 'Space not found'
539 ]);
540 }
541
542 $userId = $request->get('user_id');
543
544 $admin = User::find(get_current_user_id());
545 $admin->verifySpacePermission('can_remove_member', $space);
546
547 $pivot = SpaceUserPivot::bySpace($space->id)
548 ->byUser($userId)
549 ->first();
550
551 if (!$pivot) {
552 return $this->sendError([
553 'message' => 'Selected user is not a member of this community'
554 ]);
555 }
556
557 $pivot->delete();
558
559 $targetUser = User::find($userId);
560
561 if ($targetUser) {
562 $targetUser->cacheAccessSpaces();
563 }
564
565 do_action('fluent_community/space/user_left', $space, $userId, 'by_admin');
566
567 return [
568 'message' => __('User has been removed from this community', 'fluent-community')
569 ];
570 }
571
572 public function getOtherUsers(Request $request)
573 {
574 $currentUser = $this->getUser(true);
575
576 $this->validate($request->all(), [
577 'space_id' => 'required|exists:fcom_spaces,id'
578 ]);
579
580 $isMod = $currentUser->isCommunityModerator() && current_user_can('list_users');
581
582 $spaceId = $request->get('space_id');
583
584 $selects = ['ID', 'display_name'];
585
586 if ($isMod) {
587 $selects[] = 'user_email';
588 }
589
590 $users = User::whereDoesntHave('spaces', function ($q) use ($spaceId) {
591 return $q->where('space_id', $spaceId);
592 })
593 ->select($selects)
594 ->searchBy($request->get('search'))
595 ->paginate();
596
597 return [
598 'users' => $users
599 ];
600 }
601
602 public function updateLinks(Request $request, $slug)
603 {
604 $space = Space::where('slug', $slug)->first();
605
606 if (!$space) {
607 return $this->sendError([
608 'message' => 'Space not found'
609 ]);
610 }
611
612 $space->verifyUserPermisson($this->getUser(), 'community_admin');
613
614 $links = $request->get('links', []);
615
616 $links = array_map(function ($link) {
617 return CustomSanitizer::santizeLinkItem($link);
618 }, $links);
619
620 $settings = $space->settings;
621 $settings['links'] = $links;
622 $space->settings = $settings;
623 $space->save();
624
625 return [
626 'message' => __('Links have been updated for the space', 'fluent-community'),
627 'links' => $links
628 ];
629 }
630
631 public function getSpaceGroups(Request $request)
632 {
633 $user = $this->getUser(true);
634 if (!$user->isCommunityModerator()) {
635 return $this->sendError([
636 'message' => 'You are not allowed to create space group'
637 ]);
638 }
639
640 $user = $this->getUser();
641
642 $groups = Helper::getAllCommunityGroups($user, false);
643
644 foreach ($groups as $group) {
645 foreach ($group->spaces as $space) {
646 $space->permalink = $space->getPermalink();
647 }
648 }
649
650 return [
651 'groups' => $groups
652 ];
653 }
654
655 public function createSpaceGroup(Request $request)
656 {
657 $user = $this->getUser(true);
658 if (!$user->isCommunityModerator()) {
659 return $this->sendError([
660 'message' => 'You are not allowed to create space group'
661 ]);
662 }
663
664 $data = $request->all();
665
666 $this->validate($data, [
667 'title' => 'required|unique:fcom_spaces,title',
668 'slug' => 'required|unique:fcom_spaces,slug'
669 ]);
670
671
672 $formattedData = [
673 'title' => sanitize_text_field($data['title']),
674 'slug' => sanitize_title($data['slug']),
675 'description' => sanitize_textarea_field($data['description']),
676 'status' => 'active',
677 'type' => 'space_group',
678 'settings' => [
679 'always_show_spaces' => Arr::get($data, 'settings.always_show_spaces', 'yes'),
680 ],
681 'serial' => SpaceGroup::max('serial') + 1
682 ];
683
684 $group = SpaceGroup::create($formattedData);
685
686 return [
687 'message' => __('Space group has been created successfully', 'fluent-community'),
688 'group' => $group
689 ];
690 }
691
692 public function updateSpaceGroup(Request $request, $groupId)
693 {
694 $user = $this->getUser();
695 if (!$user || !$user->isCommunityModerator()) {
696 return $this->sendError([
697 'message' => 'You are not allowed to create space group'
698 ]);
699 }
700
701 $group = SpaceGroup::findOrFail($groupId);
702 $data = $request->all();
703
704 $this->validate($data, [
705 'title' => 'required'
706 ]);
707
708 $taken = BaseSpace::where('title', $data['title'])
709 ->where('id', '!=', $group->id)
710 ->first();
711
712 if ($taken) {
713 return $this->sendError([
714 'message' => 'The title is already taken. Please use a different title'
715 ]);
716 }
717
718 $formattedData = [
719 'title' => sanitize_text_field($data['title']),
720 'description' => sanitize_textarea_field($data['description']),
721 'status' => 'active',
722 'type' => 'space_group',
723 'settings' => [
724 'always_show_spaces' => Arr::get($data, 'settings.always_show_spaces', 'yes'),
725 ]
726 ];
727
728 $group->fill($formattedData)->save();
729
730 return [
731 'message' => __('Space group has been created updated', 'fluent-community'),
732 'group' => $group
733 ];
734 }
735
736 public function deleteSpaceGroup(Request $request, $groupId)
737 {
738
739 $user = $this->getUser();
740 if (!$user || !$user->isCommunityModerator()) {
741 return $this->sendError([
742 'message' => 'You are not allowed to create space group'
743 ]);
744 }
745
746 $group = SpaceGroup::findOrFail($groupId);
747
748 if (!$group->spaces->isEmpty()) {
749 return $this->sendError([
750 'message' => 'You can not delete this group. It has spaces'
751 ]);
752 }
753
754 $group->delete();
755
756 return [
757 'message' => __('Space group has been deleted successfully', 'fluent-community')
758 ];
759 }
760
761 public function updateSpaceGroupIndexes(Request $request)
762 {
763 $indexes = $request->get('indexes', []);
764
765 foreach ($indexes as $groupId => $indexNumber) {
766 $group = SpaceGroup::findOrFail($groupId);
767 $group->update([
768 'serial' => $indexNumber + 1
769 ]);
770 }
771
772 return [
773 'message' => __('Space group indexes have been updated.', 'fluent-community')
774 ];
775
776 }
777
778 public function updateSpaceIndexes(Request $request)
779 {
780 $indexes = $request->get('indexes', []);
781
782 foreach ($indexes as $index => $spaceId) {
783 $space = BaseSpace::withoutGlobalScopes()->findOrFail($spaceId);
784 $space->update([
785 'serial' => $index + 1
786 ]);
787 }
788
789 return [
790 'message' => __('Space indexes have been updated.', 'fluent-community')
791 ];
792 }
793
794 public function moveSpace(Request $request)
795 {
796 $spaceId = $request->getSafe('space_id', 'intval');
797 $groupId = $request->getSafe('group_id', 'intval');
798
799 $space = BaseSpace::withoutGlobalScopes()->findOrFail($spaceId);
800 $group = SpaceGroup::findOrFail($groupId);
801
802 $space->update([
803 'parent_id' => $groupId
804 ]);
805
806 return [
807 'message' => __('Space has been moved successfully', 'fluent-community')
808 ];
809 }
810
811 public function getLockScreenSettings(Request $request, $spaceSlug)
812 {
813 $space = Space::where('slug', $spaceSlug)->firstOrFail();
814 $lockscreen = $space->getLockscreen();
815
816 return [
817 'lockscreen' => $lockscreen
818 ];
819 }
820
821 public function updateLockscreenSettings(Request $request, $spaceSlug)
822 {
823 $space = Space::where('slug', $spaceSlug)->firstOrFail();
824
825 $settingFields = $request->get('lockscreen', []);
826
827 $formattedFields = LockscreenService::formatLockscreenFields($settingFields);
828
829 $space->setLockscreen($formattedFields);
830
831 return [
832 'message' => 'Lockscreen settings have been updated successfully.',
833 'community' => $space
834 ];
835 }
836 }
837