PluginProbe
FluentCommunity – Ultra-Fast High-Performance Social Network, Community, LMS & Online Courses / 2.5.0
FluentCommunity – Ultra-Fast High-Performance Social Network, Community, LMS & Online Courses v2.5.0
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 / Modules / Auth / Classes / InvitationController.php

InvitationController.php in FluentCommunity – Ultra-Fast High-Performance Social Network, Community, LMS & Online Courses 2.5.0, at Modules/Auth/Classes/InvitationController.php

212 lines 6.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace FluentCommunity\Modules\Auth\Classes;
4
5 use FluentCommunity\App\Http\Controllers\Controller;
6 use FluentCommunity\App\Models\BaseSpace;
7 use FluentCommunity\App\Models\Space;
8 use FluentCommunity\App\Models\SpaceUserPivot;
9 use FluentCommunity\App\Services\Helper;
10 use FluentCommunity\App\Services\ProfileHelper;
11 use FluentCommunity\Framework\Http\Request\Request;
12 use FluentCommunity\Framework\Support\Arr;
13
14 class InvitationController extends Controller
15 {
16 public function getInvitations(Request $request)
17 {
18 $user = $this->getUser(true);
19 $isMod = $user->isCommunityModerator();
20 $spaceId = intval($request->get('space_id'));
21
22 $space = Space::findOrFail($spaceId);
23 $space->verifyUserPermisson($user, 'community_moderator');
24
25 $status = $request->get('status', 'pending');
26 if ($status == 'all') {
27 $status = '';
28 }
29
30 $inviatations = Invitation::where('user_id', $user->ID)
31 ->when($status, function ($query) use ($status) {
32 $query->where('status', $status);
33 })
34 ->with(['xprofile' => function ($query) {
35 $query->select(ProfileHelper::getXProfilePublicFields());
36 }])
37 ->when(!$isMod, function ($query) use ($user) {
38 $query->where('user_id', $user->ID);
39 })
40 ->when($spaceId, function ($query) use ($spaceId) {
41 $query->where('post_id', $spaceId);
42 })
43 ->orderBy('id', 'desc')
44 ->paginate();
45
46 foreach ($inviatations as $inviatation) {
47 if ($inviatation->isValid()) {
48 $inviatation->access_url = $inviatation->getAccessUrl();
49 }
50 }
51
52 return [
53 'invitations' => $inviatations,
54 'is_mod' => $isMod
55 ];
56 }
57
58 public function delete(Request $request, $invitationId)
59 {
60 $invitationId = intval($invitationId);
61 $inivitation = Invitation::findOrFail($invitationId);
62 $user = $this->getUser(true);
63 $space = Space::findOrFail($inivitation->post_id);
64 $space->verifyUserPermisson($user, 'community_moderator');
65
66 $inivitation->delete();
67
68 return [
69 'message' => __('Invitation deleted successfully', 'fluent-community')
70 ];
71 }
72
73 public function store(Request $request)
74 {
75 $data = $request->all();
76 $this->validate($data, [
77 'email' => 'required|email',
78 'space_id' => 'required'
79 ]);
80
81 $spaceId = (int)Arr::get($data, 'space_id');
82 $user = $this->getUser(true);
83
84 $space = Space::findOrFail($spaceId);
85 $space->verifyUserPermisson($user, 'community_moderator');
86
87 $inviteeEmail = sanitize_email(Arr::get($data, 'email'));
88
89 $indivatationData = array_filter([
90 'email' => $inviteeEmail,
91 'user_id' => $user->ID,
92 'invitee_name' => sanitize_text_field(Arr::get($data, 'invitee_name')),
93 'space_id' => $space->id
94 ]);
95
96 $invitation = InvitationService::invite($indivatationData);
97 if (is_wp_error($invitation)) {
98 return $this->sendError([
99 'message' => $invitation->get_error_message()
100 ]);
101 }
102
103 // Now send the email for the invitation
104 InvitationService::sendInvitationEmail($invitation);
105
106 return [
107 'message' => __('Invitation has been sent successfully', 'fluent-community'),
108 'invitation' => $invitation
109 ];
110 }
111
112 public function createNewLink(Request $request)
113 {
114 $data = $request->all();
115 $this->validate($data, [
116 'title' => 'required',
117 'space_id' => 'required',
118 ]);
119
120 $spaceId = (int)Arr::get($data, 'space_id');
121 $space = Space::findOrFail($spaceId);
122 $user = $this->getUser(true);
123 $space->verifyUserPermisson($user, 'community_moderator');
124
125 $indivatationData = array_filter([
126 'email' => '',
127 'user_id' => $user->ID,
128 'space_id' => $space->id,
129 'title' => sanitize_text_field(Arr::get($data, 'title')),
130 'limit' => sanitize_text_field(Arr::get($data, 'limit', 0)),
131 'expire_date' => sanitize_text_field(Arr::get($data, 'expire_date', '')),
132 ]);
133
134 $invitation = apply_filters('fluent_community/create_invitation_link', null, $indivatationData);
135
136 if(!$invitation) {
137 return $this->sendError([
138 'message' => __('Something went wrong', 'fluent-community')
139 ]);
140 }
141
142 if (is_wp_error($invitation)) {
143 return $this->sendError([
144 'message' => $invitation->get_error_message()
145 ]);
146 }
147
148 $invitation->access_url = $invitation->getAccessUrl();
149
150 return [
151 'message' => __('Invitation link has been created', 'fluent-community'),
152 'invitation' => $invitation
153 ];
154 }
155
156 public function resend(Request $request, $invitationId)
157 {
158 $invitation = Invitation::findOrFail($invitationId);
159 $user = $this->getUser(true);
160 $space = Space::findOrFail($invitation->post_id);
161 $space->verifyUserPermisson($user, 'community_moderator');
162
163 if ($invitation->reactions_count > 5) {
164 return $this->sendError([
165 'message' => __('You cannot resend this invitation', 'fluent-community')
166 ]);
167 }
168
169 InvitationService::sendInvitationEmail($invitation);
170
171 return [
172 'message' => __('Invitation has been resent successfully', 'fluent-community')
173 ];
174 }
175
176 private function validateExistingWpUser($email, $spaceId = null)
177 {
178 $user = get_user_by('email', $email);
179
180 if ($user) {
181 if ($spaceId && !$this->userExistInSpace($spaceId, $user->ID)) {
182 return true;
183 }
184
185 wp_send_json([
186 'message' => __('You are already a member of this site', 'fluent-community')
187 ], 400);
188 }
189 }
190
191 private function isInviteMembers()
192 {
193 $settings = Helper::getOnboardingSettings();
194
195 return Arr::get($settings, 'is_onboarding_enabled', '') == 'yes';
196 }
197
198 private function isTodayInvitationLimitExceeded($userId)
199 {
200 $todayInvitationCount = Invitation::getTodayInvitationCount($userId);
201
202 return $todayInvitationCount > 10;
203 }
204
205 private function userExistInSpace($spaceId, $userId)
206 {
207 return SpaceUserPivot::where('space_id', $spaceId)
208 ->where('user_id', $userId)
209 ->exists();
210 }
211 }
212