PluginProbe
FluentCommunity – Ultra-Fast High-Performance Social Network, Community, LMS & Online Courses / 2.4.01
FluentCommunity – Ultra-Fast High-Performance Social Network, Community, LMS & Online Courses v2.4.01
2.11.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 All 78 releases
fluent-community / app / Http / Controllers / MembersController.php

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

153 lines 5.4 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 == 'in_active') {
101 $statuses = ['pending', 'blocked'];
102 } else if($statuses == 'deactivated') {
103 $statuses = [''];
104 } else {
105 $statuses = ['active'];
106 }
107 $members = $members->whereIn('status', $statuses);
108 } else {
109 $members = $members->where('status', 'active');
110 }
111
112 do_action_ref_array('fluent_community/members_query_ref', [&$members, $request->all()]);
113
114 $members = $members->paginate();
115
116 return apply_filters('fluent_community/members_api_response', [
117 'members' => $members,
118 'execution_time' => microtime(true) - $start
119 ], $members, $request->all());
120 }
121
122 public function patchMember(Request $request, $userId)
123 {
124 $currentUser = $this->getUser(true);
125 $currentUser->verifyCommunityPermission('delete_any_feed');
126
127 $newStatus = $request->getSafe('status', 'sanitize_text_field');
128
129 $wpUser = User::findOrFail($userId);
130
131 if ($wpUser->isCommunityAdmin() && $newStatus != 'active') {
132 return $this->sendError([
133 'message' => __('Sorry, you cannot change the status of another admin. Remove the user from moderators', 'fluent-community')
134 ]);
135 }
136
137 $xProfile = XProfile::findOrFail($userId);
138
139 $newStatus = $request->getSafe('status', 'sanitize_text_field');
140 $validStatuses = ['active', 'pending', 'blocked'];
141
142 if (in_array($newStatus, $validStatuses)) {
143 $xProfile->status = $newStatus;
144 $xProfile->save();
145 }
146
147 return [
148 'message' => __('Member status has been updated', 'fluent-community'),
149 'member' => $xProfile
150 ];
151 }
152 }
153