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 / Modules / Auth / Classes / InvitationController.php

InvitationController.php in FluentCommunity – Ultra-Fast High-Performance Social Network, Community, LMS & Online Courses 2.7.7, 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\Space;
7 use FluentCommunity\App\Models\SpaceUserPivot;
8 use FluentCommunity\App\Services\Helper;
9 use FluentCommunity\App\Services\ProfileHelper;
10 use FluentCommunity\Framework\Http\Request\Request;
11 use FluentCommunity\Framework\Support\Arr;
12
13 class InvitationController extends Controller
14 {
15 public function getInvitations(Request $request)
16 {
17 $user = $this->getUser(true);
18 $isMod = $user->isCommunityModerator();
19 $spaceId = intval($request->get('space_id'));
20
21 $space = Space::findOrFail($spaceId);
22 $space->verifyUserPermisson($user, 'community_moderator');
23
24 $status = $request->get('status', 'pending');
25 if ($status == 'all') {
26 $status = '';
27 }
28
29 $inviatations = Invitation::where('user_id', $user->ID)
30 ->when($status, function ($query) use ($status) {
31 $query->where('status', $status);
32 })
33 ->with(['xprofile' => function ($query) {
34 $query->select(ProfileHelper::getXProfilePublicFields());
35 }])
36 ->when(!$isMod, function ($query) use ($user) {
37 $query->where('user_id', $user->ID);
38 })
39 ->when($spaceId, function ($query) use ($spaceId) {
40 $query->where('post_id', $spaceId);
41 })
42 ->orderBy('id', 'desc')
43 ->paginate();
44
45 foreach ($inviatations as $inviatation) {
46 if ($inviatation->isValid()) {
47 $inviatation->access_url = $inviatation->getAccessUrl();
48 }
49 }
50
51 return [
52 'invitations' => $inviatations,
53 'is_mod' => $isMod
54 ];
55 }
56
57 public function delete(Request $request, $invitationId)
58 {
59 $invitationId = intval($invitationId);
60 $inivitation = Invitation::findOrFail($invitationId);
61 $user = $this->getUser(true);
62 $space = Space::findOrFail($inivitation->post_id);
63 $space->verifyUserPermisson($user, 'community_moderator');
64
65 $inivitation->delete();
66
67 return [
68 'message' => __('Invitation deleted successfully', 'fluent-community')
69 ];
70 }
71
72 public function store(Request $request)
73 {
74 $data = $request->all();
75 $this->validate($data, [
76 'email' => 'required|email',
77 'space_id' => 'required'
78 ]);
79
80 $spaceId = (int)Arr::get($data, 'space_id');
81 $user = $this->getUser(true);
82
83 $space = Space::findOrFail($spaceId);
84 $space->verifyUserPermisson($user, 'community_moderator');
85
86 $inviteeEmail = sanitize_email(Arr::get($data, 'email'));
87
88 $indivatationData = array_filter([
89 'email' => $inviteeEmail,
90 'user_id' => $user->ID,
91 'invitee_name' => sanitize_text_field(Arr::get($data, 'invitee_name')),
92 'space_id' => $space->id
93 ]);
94
95 $invitation = InvitationService::invite($indivatationData);
96 if (is_wp_error($invitation)) {
97 return $this->sendError([
98 'message' => $invitation->get_error_message()
99 ]);
100 }
101
102 // Now send the email for the invitation
103 InvitationService::sendInvitationEmail($invitation);
104
105 return [
106 'message' => __('Invitation has been sent successfully', 'fluent-community'),
107 'invitation' => $invitation
108 ];
109 }
110
111 public function createNewLink(Request $request)
112 {
113 $data = $request->all();
114 $this->validate($data, [
115 'title' => 'required',
116 'space_id' => 'required',
117 ]);
118
119 $spaceId = (int)Arr::get($data, 'space_id');
120 $space = Space::findOrFail($spaceId);
121 $user = $this->getUser(true);
122 $space->verifyUserPermisson($user, 'community_moderator');
123
124 $indivatationData = array_filter([
125 'email' => '',
126 'user_id' => $user->ID,
127 'space_id' => $space->id,
128 'title' => sanitize_text_field(Arr::get($data, 'title')),
129 'limit' => sanitize_text_field(Arr::get($data, 'limit', 0)),
130 'expire_date' => sanitize_text_field(Arr::get($data, 'expire_date', '')),
131 ]);
132
133 $invitation = apply_filters('fluent_community/create_invitation_link', null, $indivatationData);
134
135 if(!$invitation) {
136 return $this->sendError([
137 'message' => __('Something went wrong', 'fluent-community')
138 ]);
139 }
140
141 if (is_wp_error($invitation)) {
142 return $this->sendError([
143 'message' => $invitation->get_error_message()
144 ]);
145 }
146
147 $invitation->access_url = $invitation->getAccessUrl();
148
149 return [
150 'message' => __('Invitation link has been created', 'fluent-community'),
151 'invitation' => $invitation
152 ];
153 }
154
155 public function resend(Request $request, $invitationId)
156 {
157 $invitation = Invitation::findOrFail($invitationId);
158 /** @var Invitation $invitation */
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