File "CheckSessionYear.php"

Full Path: /home/trinadezambia/public_html/admin_panel/app/Http/Middleware/CheckSessionYear.php
File size: 1.82 KB
MIME-type: text/x-php
Charset: utf-8

<?php

namespace App\Http\Middleware;

use App\Services\CachingService;
use App\Services\ResponseService;
use Closure;
use Illuminate\Http\Request;

class CheckSessionYear
{
    /**
     * Handle an incoming request.
     *
     * @param Request $request
     * @param Closure $next
     * @return mixed
     */
    public function handle(Request $request, Closure $next)
    {
        // Skip validation for session/semester switching and inherently multi-session routes (Promotion/Transfer)
        if (
            $request->is('session-year/set-session-year')
            || $request->is('set-semester')
            || $request->is('promote-student*')
            || $request->is('getPromoteData')
            || $request->is('transfer-student*')
        ) {
            return $next($request);
        }

        // Only trigger for state-changing requests
        if ($request->isMethod('POST') || $request->isMethod('PUT') || $request->isMethod('PATCH') || $request->isMethod('DELETE')) {

            // Check if the request contains a session_year_id
            if ($request->has('session_year_id') && !empty($request->session_year_id)) {
                $currentSessionYear = app(CachingService::class)->getSessionYear();

                // If the submitted session year ID does not match the system's active session year ID
                if ($request->session_year_id != $currentSessionYear->id) {
                    $message = 'Your active session has changed in another tab. Please refresh the page to continue.';

                    if ($request->ajax() || $request->wantsJson()) {
                        return ResponseService::errorResponse($message);
                    }

                    return ResponseService::errorRedirectResponse(null, $message);
                }
            }
        }

        return $next($request);
    }
}