%PDF- %PDF-
Direktori : /var/www/html/camillo/camillo-api-master/app/Http/Controllers/Api/v1/ |
Current File : //var/www/html/camillo/camillo-api-master/app/Http/Controllers/Api/v1/CommunicationsController.php |
<?php namespace App\Http\Controllers\Api\v1; use App\Enums\UsertypeEnum; use App\Http\Controllers\Controller; use App\Http\Requests\CommunicationRequest; use App\Http\Resources\CommunicationResource; use App\Http\Resources\CommunicationSentResource; use App\Http\Resources\MinorCollectionResource; use App\Http\Resources\MinorResource; use App\Models\Classroom; use App\Models\Communication; use App\Models\Minor; use App\Services\SmsService; use App\Traits\ApiUser; use App\User; use Illuminate\Http\Request; use Illuminate\Http\Response; use Illuminate\Support\Facades\Log; use Illuminate\Support\Str; use Symfony\Component\HttpKernel\Exception\HttpException; class CommunicationsController extends Controller { use ApiUser; public function index(Request $request) { /** @var User $user */ $user = $this->getLoggedUser(); $communications = $user->communicationsReceived()->where('classroom_id', $request->classroom_id)->get(); return response()->json(CommunicationResource::collection($communications), Response::HTTP_OK); } public function count(Request $request) { /** @var User $user */ $user = $this->getLoggedUser(); $communications = $user->communicationsReceived()->where('is_read', false)->where('classroom_id', $request->classroom_id)->get(); return response($communications->count(), Response::HTTP_OK); } public function messagesSent(Request $request) { /** @var User $user */ $user = $this->getLoggedUser(); $communications = $user->communicationsSent()->where('classroom_id', $request->classroom_id)->with('sender.individual', 'classroom.institute', 'minor', 'receiver.individual')->get()->groupBy(['uuid']); return response()->json(CommunicationSentResource::collection($communications->values()), Response::HTTP_OK); } public function store(CommunicationRequest $request) { $sender = $this->getLoggedUser(); /** @var \App\Models\Classroom $classroom */ $classroom = Classroom::findOrFail($request->classroom_id); $schoolyear = $classroom->schoolyear; $minors = $request->receivers; if (count($minors) === 0) { $minors = $classroom->minors()->wherePivot('active', true)->whereHas('individuals', function($i){ $i->where('is_admin', true); })->get(); } else { $minors = $classroom->minors()->whereIn('minor_id', $minors)->get(); } $communicationData = [ 'subject' => $request->subject, 'content' => $request->message, 'notify' => $request->notify, 'uuid' => (string) Str::orderedUuid() ]; foreach ($minors as $minor) { $individuals = $minor->individuals()->where('is_admin', true)->get(); foreach ($individuals as $individual) { $receivers = $individual->user()->whereHas('usertype', function ($u) { $u->where('role', UsertypeEnum::TUTOR); })->get(); foreach ($receivers as $receiver) { $communication = new Communication($communicationData); $communication->sender()->associate($sender); $communication->receiver()->associate($receiver); $communication->minor()->associate($minor); $communication->classroom()->associate($classroom); $communication->schoolyear()->associate($schoolyear); $communication->save(); if ($communication->notify) { $type = "communication_sent"; $url = env("WEBAPP_BASE_URL","https://app-staging.camillo.online"). "/minors/$minor->id/communications"; $sms = new SmsService($receiver->individual, $type, $url, $communication); $sms->send_invitation(); } } } } return response([], Response::HTTP_NO_CONTENT); } /** * @param Request $request * @param Minor $minor * @return \Illuminate\Http\JsonResponse */ public function show(Request $request, $id) { $user = $this->getLoggedUser(); $communication = Communication::findOrFail($id); if ($user->id !== $communication->receiver->id) { throw new HttpException(Response::HTTP_UNAUTHORIZED, __('user_not_allowed')); } return response()->json(new CommunicationResource($communication), Response::HTTP_OK); } /** * @param Request $request * @param Minor $minor * @return \Illuminate\Http\JsonResponse */ public function showSent(Request $request, $uuid) { $user = $this->getLoggedUser(); $communications = Communication::where('uuid', $uuid)->with('sender.individual', 'classroom.institute', 'minor', 'receiver.individual')->get(); if ($communications->count() > 0 && $user->id !== $communications->first()->sender_id) { throw new HttpException(Response::HTTP_UNAUTHORIZED, __('user_not_allowed')); } return response()->json(new CommunicationSentResource($communications->groupBy(['uuid'])->first()->values()), Response::HTTP_OK); } /** * @param Request $request * @param Minor $minor * @return \Illuminate\Http\JsonResponse */ public function update(Request $request, $id) { $user = $this->getLoggedUser(); $communication = Communication::findOrFail($id); if ($user->id !== $communication->receiver->id) { throw new HttpException(Response::HTTP_UNAUTHORIZED, __('user_not_allowed')); } $communication->update(['is_read' => true]); return response()->json(new CommunicationResource($communication->fresh()), Response::HTTP_OK); } public function receivers(Request $request, $classroomId) { $user = $this->getLoggedUser(); $classroom = Classroom::findOrFail($classroomId); $minors = $classroom->minors()->wherePivot('active', true)->whereHas('individuals', function($i){ $i->where('is_admin', true); $i->whereHas('user', function ($u) { $u->whereHas('usertype', function ($ut) { $ut->where('role', UsertypeEnum::TUTOR); }); }); })->get(); return response()->json((new MinorCollectionResource($minors, MinorResource::class))->setClassroom($classroom), Response::HTTP_OK); } public function destroy(Request $request, $id) { $user = $this->getLoggedUser(); $communication = Communication::findOrFail($id); if ($user->id !== $communication->receiver->id) { throw new HttpException(Response::HTTP_UNAUTHORIZED, __('user_not_allowed')); } $communication->delete(); return response([], 204); } }