2020-05-10 05:36:42 +00:00
< ? php
namespace App\Http\Middleware ;
use App\Application ;
2020-10-21 00:29:50 +00:00
use Illuminate\Support\Facades\Log ;
2020-05-10 05:36:42 +00:00
use Carbon\Carbon ;
use Closure ;
use Illuminate\Support\Facades\Auth ;
use Illuminate\Support\Facades\View ;
class ApplicationEligibility
{
/**
* Handle an incoming request .
*
* @ param \Illuminate\Http\Request $request
* @ param \Closure $next
* @ return mixed
* @ throws \Exception
*/
public function handle ( $request , Closure $next )
{
$curtime = new Carbon ( now ());
2020-10-21 00:29:50 +00:00
if ( Auth :: check ())
{
2020-05-10 05:36:42 +00:00
$applications = Application :: where ( 'applicantUserID' , Auth :: user () -> id ) -> get ();
$eligible = true ;
$daysRemaining = 0 ;
2020-10-21 00:29:50 +00:00
if ( ! $applications -> isEmpty ())
{
foreach ( $applications as $application )
{
2020-05-10 05:36:42 +00:00
$appTime = Carbon :: parse ( $application -> created_at );
2020-10-21 00:29:50 +00:00
if ( $appTime -> isSameMonth ( $curtime ))
{
Log :: warning ( 'Notice: Application ID ' . $application -> id . ' was found to be in the same month as today\'s time, making the user ' . Auth :: user () -> name . ' ineligible for application' );
2020-05-10 05:36:42 +00:00
$eligible = false ;
}
}
$allowedTime = Carbon :: parse ( $applications -> last () -> created_at ) -> addMonth ();
$daysRemaining = $allowedTime -> diffInDays ( now ());
2020-10-21 00:29:50 +00:00
2020-05-10 05:36:42 +00:00
}
View :: share ( 'isEligibleForApplication' , $eligible );
View :: share ( 'eligibilityDaysRemaining' , $daysRemaining );
}
2020-10-21 00:29:50 +00:00
2020-05-10 05:36:42 +00:00
return $next ( $request );
}
}