@extends('layouts.app') @php $course = $exam->course; $badge = $exam->badge; $theme = $course?->theme() ?? 't-azure'; $user = auth()->user(); $level = $exam->proctor_level ?: 'none'; $rules = collect(preg_split('/\R/', (string) $exam->instructions))->map(fn ($l) => trim(ltrim(trim($l), "•-* \t")))->filter()->values(); $domains = $exam->activeQuestions()->get(['domain'])->groupBy(fn ($q) => $q->domain ?: 'General')->map->count()->sortDesc(); $bank = $domains->sum(); $draw = min($exam->question_count, $bank); $review = ['none' => 'Not shown after the exam', 'after_pass' => 'Shown after you pass', 'after_submit' => 'Shown as soon as you submit'][$exam->show_review] ?? 'Shown as soon as you submit'; $attemptsLabel = $exam->max_attempts ? $exam->max_attempts.' attempts' : 'Unlimited attempts'; $policy = [ 'none' => ['Timed only', 'The attempt is timed and questions are randomised, but browser activity is not monitored.', []], 'standard' => ['Standard proctoring', 'Switching tabs, losing window focus, leaving full screen, copying, pasting and right-clicking are recorded on your attempt. The academy can review them and void an attempt if needed. The attempt is not auto-submitted.', ['tab_hidden']], 'strict' => ['Strict proctoring', 'The exam runs in full screen. Switching tabs, leaving full screen, copying, pasting or right-clicking counts as an integrity violation, and the attempt is submitted automatically after '.$exam->max_violations.' violations.', ['tab_hidden']], ][$level]; $faqs = [ ['How long is the '.$exam->title.'?', $exam->duration_minutes.' minutes, with '.$draw.' questions drawn from a bank of '.$bank.'. The timer runs on the server and continues if your connection drops.'], ['What is the pass mark?', 'You need '.$exam->pass_percent.'% or more. '.((float) $exam->negative_marking > 0 ? 'Wrong answers lose '.rtrim(rtrim(number_format((float) $exam->negative_marking * 100, 0), '0'), '.').'% of the question marks.' : 'There is no negative marking.')], ['Can I retake it?', ($exam->max_attempts ? 'You can sit it up to '.$exam->max_attempts.' times.' : 'The number of attempts is not limited.').($exam->cooldown_hours ? ' Wait '.$exam->cooldown_hours.' hours between attempts.' : ' You can retake straight away.').' Once you pass, no further attempts are needed.'], ['What do I get when I pass?', 'An instant score report, a QR-verified certificate'.($badge ? ' and the "'.$badge->name.'" digital badge' : '').', both verifiable online.'], ]; seo()->schema(array_filter(['@type' => 'Quiz', 'name' => $exam->title, 'description' => $exam->description ?: $exam->title, 'url' => route('exams.show', $exam->slug), 'timeRequired' => 'PT'.$exam->duration_minutes.'M', 'educationalLevel' => $course?->level, 'assesses' => $domains->keys()->take(12)->values()->all() ?: null, 'about' => $course ? ['@type' => 'Course', 'name' => $course->title, 'url' => route('courses.show', $course->slug)] : null, 'provider' => ['@type' => 'Organization', 'name' => setting('site_name', 'INFOTICS Academy'), 'url' => url('/')]], fn ($v) => $v !== null)) ->schema(['@type' => 'FAQPage', 'mainEntity' => collect($faqs)->map(fn ($f) => ['@type' => 'Question', 'name' => $f[0], 'acceptedAnswer' => ['@type' => 'Answer', 'text' => $f[1]]])->all()]); @endphp @section('content')
{{ $course?->vendor?->name ?? 'INFOTICS' }} · {{ $exam->code }}

{{ $exam->title }}

At a glance: a {{ $exam->duration_minutes }}-minute online assessment of {{ $draw }} questions{{ $course ? ' for the '.$course->title.' course' : '' }}. Pass with {{ $exam->pass_percent }}% or more to earn a verifiable certificate{{ $badge ? ' and a digital badge' : '' }}.

{{ $exam->duration_minutes }} minutes {{ $draw }} questions Pass mark {{ $exam->pass_percent }}% {{ $attemptsLabel }} {{ $policy[0] }}

About this exam

{{ $exam->description }}

This is an INFOTICS knowledge assessment that prepares you for the vendor exam{{ $course?->exam_code ? ' ('.$course->exam_code.')' : '' }}. It is not the official vendor exam.

Exam code
{{ $exam->code }}
Duration
{{ $exam->duration_minutes }} minutes
Questions
{{ $draw }} per attempt, drawn at random from a bank of {{ $bank }}
Pass mark
{{ $exam->pass_percent }}%
Attempts
{{ $attemptsLabel }}@if($exam->cooldown_hours) · {{ $exam->cooldown_hours }} h between attempts @endif
Eligibility
{{ $exam->requires_enrollment ? 'Learners enrolled in '.($course?->title ?? 'the related course') : 'Any registered learner' }}
Review
{{ $review }}
@if($exam->opens_at || $exam->closes_at)
Availability
{{ $exam->opens_at ? 'Opens '.$exam->opens_at->format('d M Y') : '' }}{{ $exam->opens_at && $exam->closes_at ? ' · ' : '' }}{{ $exam->closes_at ? 'Closes '.$exam->closes_at->format('d M Y') : '' }}
@endif @if($course)
Course
{{ $course->title }}
@endif

What to expect

  1. BeforeRead the rules and confirm. Use a laptop or desktop with a stable connection; the timer starts as soon as you begin.
  2. DuringAnswers save automatically. Flag questions and return to them. Some questions need more than one answer, so read each one carefully.
  3. AfterYour score and domain breakdown appear immediately. Question review: {{ strtolower($review) }}.
@if($rules->isNotEmpty())

Exam rules

    @foreach($rules as $r)
  • {{ $r }}
  • @endforeach
@endif

Integrity policy: {{ $policy[0] }}

{{ $policy[1] }}

@if($level !== 'none')

Recorded events are part of your attempt record and are visible to INFOTICS staff. See our privacy policy.

@endif
@if($domains->isNotEmpty())

What is covered

Questions are drawn across these domains in proportion to the bank.

@foreach($domains as $name => $cnt)@php $w = $bank ? round($cnt / $bank * 100) : 0; @endphp @endforeach
DomainQuestions in bankWeight
{{ $name }}{{ $cnt }}
{{ $w }}%
@endif

Exam questions

@foreach($faqs as $f)
{{ $f[0] }}
{{ $f[1] }}
@endforeach
@endsection