PluginProbe
FluentCommunity – Ultra-Fast High-Performance Social Network, Community, LMS & Online Courses / 2.7.7
FluentCommunity – Ultra-Fast High-Performance Social Network, Community, LMS & Online Courses v2.7.7
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 / MembersController.php

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

155 lines 5.5 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\BaseSpace;
7 use FluentCommunity\App\Models\User;
8 use FluentCommunity\App\Models\XProfile;
9 use FluentCommunity\App\Services\Helper;
10 use FluentCommunity\App\Services\ProfileHelper;
11 use FluentCommunity\Framework\Http\Request\Request;
12
13 class MembersController extends Controller
14 {
15 public function getMembers(Request $request)
16 {
17 $start = microtime(true);
18 $mention = $request->getSafe('mention', 'sanitize_text_field');
19 if($mention && !get_current_user_id()) {
20 return $this->sendError([
21 'message' => __('You must be logged in to mention someone', 'fluent-community'),
22 ]);
23 }
24
25 $canAccess = Utility::canViewMembersPage();
26 $isMod = Helper::isModerator();
27
28 $members = XProfile::select(ProfileHelper::getXProfilePublicFields())
29 ->whereHas('user');
30
31 if($mention) {
32 $spaceSlug = $request->getSafe('space', 'sanitize_text_field');
33 $space = null;
34 if ($spaceSlug) {
35 $space = BaseSpace::where('slug', $spaceSlug)->first();
36 if (!$space || !Helper::isUserInSpace(get_current_user_id(), $space->id)) {
37 return $this->sendError([
38 'message' => __('Please join the space first to view the members', 'fluent-community'),
39 'permission_failed' => true
40 ]);
41 }
42 }
43
44 if (!$space) {
45 $spaceId = $request->getSafe('space_id', 'intval');
46 if ($spaceId) {
47 $space = BaseSpace::withoutGlobalScopes()->find($spaceId);
48 if (!$space || !Helper::isUserInSpace(get_current_user_id(), $space->id)) {
49 return $this->sendError([
50 'message' => __('Space not found', 'fluent-community'),
51 'permission_failed' => true
52 ]);
53 }
54 }
55 }
56
57 if ($space) {
58 $members = $members->whereHas('spaces', function ($query) use ($space) {
59 $query->withoutGlobalScopes()->where('space_id', $space->id);
60 });
61 }
62
63 $members = $members->where('status', 'active')
64 ->where('user_id', '!=', get_current_user_id())
65 ->mentionBy($mention)
66 ->limit(10)
67 ->get();
68
69 $data = [
70 'members' => [
71 'data' => $members
72 ],
73 'execution_time' => microtime(true) - $start
74 ];
75 return apply_filters('fluent_community/mention_members_api_response', $data, $request->all());
76 }
77
78 if(!$canAccess) {
79 return $this->sendError([
80 'message' => __('You do not have permission to view members', 'fluent-community'),
81 'permission_failed' => true
82 ]);
83 }
84
85 $sortBy = $request->getSafe('sort_by', 'sanitize_text_field', 'last_activity');
86
87 $validSortFields = ['last_activity', 'display_name', 'created_at'];
88
89 $sortColumn = in_array($sortBy, $validSortFields, true) ? $sortBy : 'last_activity';
90
91 $sortDirection = ($sortColumn === 'last_activity') ? 'DESC' : 'ASC';
92
93 $members = $members->orderBy($sortColumn, $sortDirection);
94
95 $members = $members
96 ->searchBy($request->getSafe('search', 'sanitize_text_field'));
97
98 if($isMod) {
99 $statuses = $request->getSafe('status', 'sanitize_text_field', 'active');
100 if ($statuses == 'pending') {
101 $statuses = ['pending'];
102 } else if ($statuses == 'blocked') {
103 $statuses = ['blocked'];
104 } else if($statuses == 'deactivated') {
105 $statuses = [''];
106 } else {
107 $statuses = ['active'];
108 }
109 $members = $members->whereIn('status', $statuses);
110 } else {
111 $members = $members->where('status', 'active');
112 }
113
114 do_action_ref_array('fluent_community/members_query_ref', [&$members, $request->all()]);
115
116 $members = $members->paginate();
117
118 return apply_filters('fluent_community/members_api_response', [
119 'members' => $members,
120 'execution_time' => microtime(true) - $start
121 ], $members, $request->all());
122 }
123
124 public function patchMember(Request $request, $userId)
125 {
126 $currentUser = $this->getUser(true);
127 $currentUser->verifyCommunityPermission('delete_any_feed');
128
129 $newStatus = $request->getSafe('status', 'sanitize_text_field');
130
131 $wpUser = User::findOrFail($userId);
132
133 if ($wpUser->isCommunityAdmin() && $newStatus != 'active') {
134 return $this->sendError([
135 'message' => __('Sorry, you cannot change the status of another admin. Remove the user from moderators', 'fluent-community')
136 ]);
137 }
138
139 $xProfile = XProfile::findOrFail($userId);
140
141 $newStatus = $request->getSafe('status', 'sanitize_text_field');
142 $validStatuses = ['active', 'pending', 'blocked'];
143
144 if (in_array($newStatus, $validStatuses)) {
145 $xProfile->status = $newStatus;
146 $xProfile->save();
147 }
148
149 return [
150 'message' => __('Member status has been updated', 'fluent-community'),
151 'member' => $xProfile
152 ];
153 }
154 }
155