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

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

211 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 $user = $this->getUser(true);
159 $space = Space::findOrFail($invitation->post_id);
160 $space->verifyUserPermisson($user, 'community_moderator');
161
162 if ($invitation->reactions_count > 5) {
163 return $this->sendError([
164 'message' => __('You cannot resend this invitation', 'fluent-community')
165 ]);
166 }
167
168 InvitationService::sendInvitationEmail($invitation);
169
170 return [
171 'message' => __('Invitation has been resent successfully', 'fluent-community')
172 ];
173 }
174
175 private function validateExistingWpUser($email, $spaceId = null)
176 {
177 $user = get_user_by('email', $email);
178
179 if ($user) {
180 if ($spaceId && !$this->userExistInSpace($spaceId, $user->ID)) {
181 return true;
182 }
183
184 wp_send_json([
185 'message' => __('You are already a member of this site', 'fluent-community')
186 ], 400);
187 }
188 }
189
190 private function isInviteMembers()
191 {
192 $settings = Helper::getOnboardingSettings();
193
194 return Arr::get($settings, 'is_onboarding_enabled', '') == 'yes';
195 }
196
197 private function isTodayInvitationLimitExceeded($userId)
198 {
199 $todayInvitationCount = Invitation::getTodayInvitationCount($userId);
200
201 return $todayInvitationCount > 10;
202 }
203
204 private function userExistInSpace($spaceId, $userId)
205 {
206 return SpaceUserPivot::where('space_id', $spaceId)
207 ->where('user_id', $userId)
208 ->exists();
209 }
210 }
211