<?php namespace App\Http\Middleware; use App\Models\SystemSetting; use Closure; use Illuminate\Http\Request; use Symfony\Component\HttpFoundation\Response; use Illuminate\Support\Facades\Auth; use App\Services\CachingService; class WizardSettings { protected $cache; public function __construct(CachingService $cache) { $this->cache = $cache; } /** * Handle an incoming request. * * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next */ public function handle(Request $request, Closure $next): Response { try { // Only check wizard settings for super admin if (!Auth::check() || !Auth::user()->hasRole('Super Admin')) { return $next($request); } //cache clear for wizard_checkMark $this->cache->removeSystemCache(config('constants.CACHE.SYSTEM.SETTINGS')); $systemSettings = $this->cache->getSystemSettings(); $checkSettingList = [ 'wizard_checkMark', 'system_settings_wizard_checkMark', 'notification_settings_wizard_checkMark', 'email_settings_wizard_checkMark', 'verify_email_wizard_checkMark', 'email_template_settings_wizard_checkMark', 'payment_settings_wizard_checkMark', 'third_party_api_settings_wizard_checkMark', 'server_config_db_checkMark', 'server_config_queue_checkMark' ]; $allowedRoutes = [ 'wizard-settings*', 'server-config*', 'system-settings*', 'guidances*', 'language*', 'system-update*', 'web-settings*', 'faqs*', 'notification-setting.update', 'auth.logout', 'server-config*', 'auth.2fa.code', 'system-settings.email.verify' ]; // Check if current route is allowed $currentRoute = $request->route()->getName(); $isAllowedRoute = false; foreach ($allowedRoutes as $route) { if (fnmatch($route, $currentRoute)) { $isAllowedRoute = true; break; } } // Check if any wizard setting is incomplete $incompleteWizard = false; foreach ($checkSettingList as $setting) { if (isset($systemSettings[$setting]) && $systemSettings[$setting] == 0) { $incompleteWizard = true; break; } } // Only redirect if wizard incomplete and route not allowed if ($incompleteWizard && !$isAllowedRoute) { return redirect()->route('wizard-settings.index'); } // Wizard complete – check server configuration if (!$incompleteWizard && !$isAllowedRoute) { $serverConfigDone = isset($systemSettings['server_config_wizard_checkMark']) && $systemSettings['server_config_wizard_checkMark'] == 1; if (!$serverConfigDone && fnmatch('server-config*', $currentRoute) === false) { return redirect()->route('server-config.index'); } } return $next($request); } catch (\Exception $e) { return $next($request); } } }