Root Zanli
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
home
/
o5t6x7pgljbm
/
public_html
/
app
/
Http
/
Controllers
/
Api
/
Filename :
GroupController.php
back
Copy
<?php namespace App\Http\Controllers\Api; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use App\Models\Group; use App\Models\User; use App\Models\GroupMember; use Helpers; use Config; use Image; use DB; use Illuminate\Contracts\Validation\Rule; class GroupController extends Controller { public function create_group(Request $request) { $validated = $request->validate([ 'group_name' => 'required', 'group_img' => 'required', 'invitation_emails' => 'required', ]); $user = $request->user(); $request['owner_user_id'] = $user->user_id; if($request->hasFile('group_img')) { $file = $request->file('group_img'); $imageName = rand().time().'.'.$file->getClientOriginalExtension(); // Save thumbnail image $img = Image::make($file->getRealPath()); $img->resize(200, 200, function ($constraint) { $constraint->aspectRatio(); })->save(public_path('group_images/thumb/').$imageName); // Save original size image $file->move(public_path('group_images'), $imageName); $request['group_image'] = $imageName; } $group = Group::create($request->all()); foreach($request->invitation_emails as $invitation_email){ $memberUser = User::where('email', $invitation_email)->first(); GroupMember::insert([ 'group_id' => $group->group_id, 'member_user_id' => !empty($memberUser) ? $memberUser->user_id : NULL, 'email' => $invitation_email, ]); $data = array('email' => $invitation_email); /*$result = Mail::send([], $data, function ($message) use ($data) { $message->from(Config::get('constants.app.from-email'), Config::get('constants.app.from-email-name')); $message->to($data['email']) ->subject('Invitation from '.Config::get('constants.app.project-title')) ->setBody('<p>Hello,</p> <p>Please install our app and signup.</p> <p>Thank you.</p>', 'text/html'); });*/ } return Helpers::responseMessage(200, 'Group created successfully.'); } public function edit_group(Request $request) { $validated = $request->validate([ 'group_name' => 'required', 'group_id' => 'required', ]); $user = $request->user(); if($request->hasFile('group_img')) { $file = $request->file('group_img'); $imageName = rand().time().'.'.$file->getClientOriginalExtension(); // Save thumbnail image $img = Image::make($file->getRealPath()); $img->resize(200, 200, function ($constraint) { $constraint->aspectRatio(); })->save(public_path('group_images/thumb/').$imageName); // Save original size image $file->move(public_path('group_images'), $imageName); $editData['group_image'] = $imageName; } $editData['group_name'] = $request->group_name; $group = Group::where('group_id', $request->group_id)->update($editData); if(isset($request->invitation_emails)){ foreach($request->invitation_emails as $invitation_email){ $memberUser = User::where('email', $invitation_email)->first(); $groupMembers = [ 'group_id' => $request->group_id, 'member_user_id' => !empty($memberUser) ? $memberUser->user_id : NULL, 'email' => $invitation_email, ]; GroupMember::updateOrCreate($groupMembers, $groupMembers); $data = array('email' => $invitation_email); /*$result = Mail::send([], $data, function ($message) use ($data) { $message->from(Config::get('constants.app.from-email'), Config::get('constants.app.from-email-name')); $message->to($data['email']) ->subject('Invitation from '.Config::get('constants.app.project-title')) ->setBody('<p>Hello,</p> <p>Please install our app and signup.</p> <p>Thank you.</p>', 'text/html'); });*/ } } return Helpers::responseMessage(200, 'Group updated successfully.'); } public function remove_member(Request $request) { $validated = $request->validate([ 'member_user_id' => 'required', 'group_id' => 'required', ]); GroupMember::where('group_id', $request->group_id)->where('member_user_id', $request->member_user_id)->delete(); return Helpers::responseMessage(200, 'Group member removed successfully.'); } public function delete_group(Request $request) { $validated = $request->validate([ 'group_id' => 'required', ]); Group::find($request->group_id)->delete(); return Helpers::responseMessage(200, 'Group deleted successfully.'); } public function get_group_details(Request $request) { $validated = $request->validate([ 'group_id' => 'required', ]); $data = Group::select('*')->where('group_id', $request->group_id)->first(); $data['group_members'] = Group::find($request->group_id)->members; $resData['data'] = $data; return Helpers::successResponse($resData, 200, 'Group details fetched successfully.'); } public function get_member_details(Request $request) { $validated = $request->validate([ 'member_user_id' => 'required', ]); $user = $request->user(); $data = User::select('user_id', 'full_name', 'email', 'profile_pic') ->where('user_id', $request->member_user_id) ->first(); $data['scholarship_points'] = Helpers::getSPBalance($request->member_user_id); $query = Group::select('group_id', 'group_name', 'group_image') ->whereIn('group_id', function($query) use($request){ $query->select('group_id')->from('group_members')->where('member_user_id', $request->member_user_id)->whereNull('deleted_at'); }); $data['common_groups'] = $query->get(); $resData['data'] = $data; return Helpers::successResponse($resData, 200, 'Group member details fetched successfully.'); } public function get_active_group_members(Request $request){ $user = $request->user(); $data['members'] = GroupMember::select("users.user_id", "full_name", "group_members.email", DB::raw('CONCAT("'.Config::get('constants.app.api-profile-pic-thumb-url').'",profile_pic) as profile_pic')) ->leftJoin('users', 'users.user_id', 'group_members.member_user_id') ->where('group_id', $user->active_group_id) ->where('users.is_active', 1) ->where('invitation_accepted', 1) ->where('group_members.is_active', 1) ->get(); $resData['data'] = $data; return Helpers::successResponse($resData, 200, 'Group members fetched successfully.'); } public function switch_group(Request $request){ $validated = $request->validate([ 'group_id' => 'required', ]); $user = $request->user(); $user->active_group_id = $request->group_id; $user->save(); return Helpers::responseMessage(200, 'Group switched successfully.'); } public function get_pending_group_invitations(Request $request){ $validated = $request->validate([ 'limit' => 'numeric', ]); $page_limit = $request->has('limit') ? $request->get('limit') : 10; $user = $request->user(); $email = $user->email; if(!isset($email)) return Helpers::responseMessage(500, 'email is not present for the user'); $should_paginate = false; $populate_group_details = true; $group_ids = array(); $group_member_ids = array(); $invitations = $this->get_pending_group_invitations_for_user($user, $group_ids, $group_member_ids, $page_limit, $should_paginate, $populate_group_details); $data = ['invitations' => $invitations]; return Helpers::successResponse(['data' => $data], 200, 'invitations fetched successfully.'); } private function get_pending_group_invitations_for_user(User $user, $group_ids, $group_member_ids, $page_limit, $should_paginate=false, $populate_group_details = false){ $email = $user->email; $query_builder = GroupMember::select('*', DB::raw('CONCAT("'.Config::get('constants.app.api-group-image-url').'",group_image) as group_image'))->where('email', $email) ->leftJoin('groups', 'groups.group_id', 'group_members.group_id') ->whereNull('invitation_accepted') ->whereNull('group_members.deleted_at') ->where('group_members.is_active', true) ->orderBy('group_members.created_at', 'desc'); if(count($group_ids) > 0) $query_builder = $query_builder->whereIn('group_members.group_id', $group_ids); if(count($group_member_ids) > 0) $query_builder = $query_builder->whereIn('group_members.group_member_id', $group_member_ids); $invitations = array(); if($should_paginate) $invitations = $query_builder->paginate($page_limit); else $invitations = $query_builder->limit($page_limit)->get(); /*foreach($invitations AS $invitation){ if($populate_group_details) $invitation->group; }*/ return $invitations; } public function update_group_invitation(Request $request){ $validated = $request->validate([ 'group_id' => 'required|numeric', 'group_member_id'=>'required|numeric', 'action' => 'required', ]); $user = $request->user(); $should_paginate = false; $populate_group_details = false; $group_ids = array($request->group_id); $group_member_ids = array($request->group_member_id); $page_limit = 1; $invitations = $this->get_pending_group_invitations_for_user( $user, $group_ids, $group_member_ids, $page_limit, $should_paginate, $populate_group_details); $invitation = null; if(count($invitations) > 0){ $invitation = $invitations[0]; } else { return Helpers::responseMessage(404, 'no valid invitation found for user email: '.$user->email); } $result = false; switch($request->action){ case 'ACCEPT': $invitation->member_user_id = $user->user_id; $invitation->invitation_accepted = true; $result = $invitation->save(); break; case 'REJECT': $invitation->member_user_id = $user->user_id; $invitation->invitation_accepted = false; $result = $invitation->save(); break; default: return Helpers::responseMessage(400, 'invalid action value passed'); } if($result){ return Helpers::responseMessage(200, 'invitation updated successfully'); } else { return Helpers::responseMessage(500, 'invitation updation failed'); } } }