%PDF- %PDF-
Direktori : /var/www/html/camillo/camillo-api-master/app/Traits/ |
Current File : /var/www/html/camillo/camillo-api-master/app/Traits/EventEmitterTrait.php |
<?php namespace App\Traits; use App\Models\Classroom; use App\Models\Event; use App\Models\EventType; use App\Models\Institute; use App\Models\Minor; use App\Models\Notice; use App\Models\Schoolyear; use App\Scopes\InstituteScope; use App\Scopes\SchoolyearScope; use App\User; use Carbon\Carbon; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\HttpException; trait EventEmitterTrait { /** * @param $event_type_name * @param Minor $minor * @param Classroom $classroom * @param null $date * * @return bool */ public function registerEvent($event_type_name, Minor $minor, $classroom = null, $date = null){ $user = auth('api')->user(); if(!$user){ throw new HttpException(Response::HTTP_UNAUTHORIZED, __('user_not_found')); } if (empty($classroom)) { $classroom = $minor->getExpectedClassroom(); } $event_type = EventType::where('event_type', $event_type_name)->first(); $status_events = [ "presence_confirmed", "danger_status", "max_danger_status", "expected_absence_signaled" ]; if (in_array($event_type_name, $status_events)){ //checks weather the event needs to be registered or just update a timestamp. //$this->logOrUpdate($event_type, $minor, $classroom); $today = $date ? Carbon::parse($date)->format('Ymd') : date("Ymd"); $latest_minor_status_event = Event::where('minor_id', $minor->id) ->where('classroom_id', $classroom->id) ->where('date_as_int', (int)$today) ->whereHas('eventType', function($query) use ($status_events){ $query->whereIn('event_type', $status_events); })->orderBy('date', 'desc') ->first(); if($latest_minor_status_event && $latest_minor_status_event->event_type_id == $event_type->id){ $latest_minor_status_event->touch(); return true; } } $event = new Event([ "date" => $date ? Carbon::parse($date)->format('Y-m-d H:i:s') : date("Y-m-d H:i:s"), "date_as_int" => $date ? (int)Carbon::parse($date)->format('Ymd') : (int)date("Ymd"), "description" => __($event_type->event_type) ]); $event->user()->associate($user); $event->minor()->associate($minor); $event->classroom()->associate($classroom); $event->schoolyear()->associate($classroom->schoolyear); $event->institute()->associate($classroom->institute); $event->eventType()->associate($event_type); if(!$event->save()){ throw new HttpException(Response::HTTP_UNAUTHORIZED, __('unable_to_register_event')); } return true; } /** * @param $event_type_name * @param Minor $minor * @param Classroom $classroom * @param User $user * @return null */ public function registerEventNoAuth($event_type_name, Minor $minor, Classroom $classroom, User $user){ if (empty($classroom)) { $classroom = $minor->getExpectedClassroom(); } $event_type = EventType::where('event_type', $event_type_name)->first(); $status_events = [ "presence_confirmed", "danger_status", "max_danger_status" ]; if (in_array($event_type_name, $status_events)){ //checks weather the event needs to be registered or just update a timestamp. //$this->logOrUpdate($event_type, $minor, $classroom); $today = date("Ymd"); $latest_minor_status_event = Event::where('minor_id', $minor->id) ->where('classroom_id', $classroom->id) ->where('date_as_int', (int)$today) ->whereHas('eventType', function($query) use ($status_events){ $query->whereIn('event_type', $status_events); })->orderBy('date', 'desc') ->first(); if($latest_minor_status_event && $latest_minor_status_event->event_type_id == $event_type->id){ $latest_minor_status_event->touch(); return true; } } $event = new Event([ "date" => date("Y-m-d H:i:s"), "date_as_int" => (int)date("Ymd"), "description" => __($event_type->event_type) ]); $schoolyear_id = $classroom->schoolyear_id; $institute_id = $classroom->institute_id; $event_schoolyear = Schoolyear::withoutGlobalScopes([SchoolyearScope::class])->find($schoolyear_id); $event_institute = Institute::withoutGlobalScopes([InstituteScope::class])->find($institute_id); $event->user()->associate($user); $event->minor()->associate($minor); $event->classroom()->associate($classroom); $event->schoolyear()->associate($event_schoolyear); $event->institute()->associate($event_institute); $event->eventType()->associate($event_type); if(!$event->save()){ return response()->json($event->getErrors(), Response::HTTP_INTERNAL_SERVER_ERROR); } } /** * @param Notice $notice * @param $event_type_name * @return bool * @internal param $user_id * @internal param $schoolyear_id */ public function registerXcallyEvent(Notice $notice, $event_type_name) { $event_type = EventType::where('event_type', $event_type_name)->first(); $event = new Event([ "date" => date("Y-m-d H:i:s"), "date_as_int" => (int)date("Ymd"), "description" => __($event_type->event_type), "user_id" => $notice->user_id, "minor_id" => $notice->minor_id, "classroom_id" => $notice->classroom_id, "schoolyear_id" => $notice->schoolyear_id, "institute_id" => $notice->institute_id, "event_type_id" => $event_type->id ]); $event->saveOrFail(); return true; } }