%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/html/camillo/camillo-api-master/app/Traits/
Upload File :
Create Path :
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;
    }


}


Zerion Mini Shell 1.0