Add grade/Klasse system: assign class levels to users, questions, and quizzes

- users.grade: set per child in admin (Klasse 1–10)
- quizzes.grade, questions.grade: optional target class (null = all)
- Children only see content matching their grade or without grade set
- Admin views show grade badge in user list, quiz list, questions list
- Quiz create/edit and user create/edit have Klasse dropdown
This commit is contained in:
root
2026-05-06 07:19:17 +00:00
parent c66f126e99
commit 44f281514b
13 changed files with 85 additions and 9 deletions
@@ -22,6 +22,15 @@
<input name="password" type="password" required class="w-full border border-slate-300 rounded-lg px-3 py-2 text-sm focus:ring-2 focus:ring-violet-500 focus:border-transparent outline-none">
@error('password')<p class="text-red-500 text-xs mt-1">{{ $message }}</p>@enderror
</div>
<div>
<label class="block text-sm font-medium text-slate-700 mb-1">Klasse</label>
<select name="grade" class="w-full border border-slate-300 rounded-lg px-3 py-2 text-sm focus:ring-2 focus:ring-violet-500 outline-none">
<option value=""> Keine Klasse </option>
@for($g=1;$g<=10;$g++)
<option value="{{ $g }}" {{ old('grade','')==$g?'selected':'' }}>Klasse {{ $g }}</option>
@endfor
</select>
</div>
<button type="submit" class="w-full bg-violet-600 hover:bg-violet-700 text-white py-2 rounded-lg font-medium text-sm">Konto erstellen</button>
</form>
</div>
@@ -23,6 +23,15 @@
<label class="block text-sm font-medium text-slate-700 mb-1">🪙 Münzen</label>
<input name="points" type="number" min="0" value="{{ old('points',$user->points) }}" required class="w-full border border-slate-300 rounded-lg px-3 py-2 text-sm focus:ring-2 focus:ring-violet-500 outline-none">
</div>
<div>
<label class="block text-sm font-medium text-slate-700 mb-1">Klasse</label>
<select name="grade" class="w-full border border-slate-300 rounded-lg px-3 py-2 text-sm focus:ring-2 focus:ring-violet-500 outline-none">
<option value=""> Keine Klasse </option>
@for($g=1;$g<=10;$g++)
<option value="{{ $g }}" {{ old('grade',$user->grade)==$g?'selected':'' }}>Klasse {{ $g }}</option>
@endfor
</select>
</div>
<button type="submit" class="w-full bg-violet-600 hover:bg-violet-700 text-white py-2 rounded-lg font-medium text-sm">Speichern</button>
</form>
</div>
+3 -1
View File
@@ -11,6 +11,7 @@
<tr>
<th class="text-left px-4 py-3 font-medium text-slate-600">Name</th>
<th class="text-left px-4 py-3 font-medium text-slate-600">E-Mail</th>
<th class="text-center px-4 py-3 font-medium text-slate-600">Klasse</th>
<th class="text-right px-4 py-3 font-medium text-slate-600">🪙 Münzen</th>
<th class="text-right px-4 py-3 font-medium text-slate-600">Antworten</th>
<th class="px-4 py-3"></th>
@@ -21,7 +22,8 @@
<tr class="hover:bg-slate-50">
<td class="px-4 py-3 font-medium text-slate-800">{{ $u->name }}</td>
<td class="px-4 py-3 text-slate-500">{{ $u->email }}</td>
<td class="px-4 py-3 text-right font-bold text-amber-600">{{ $u->points }}</td>
<td class="px-4 py-3 text-center text-sm text-slate-500">{{ $u->grade ? "Klasse ".$u->grade : "" }}</td>
<td class="px-4 py-3 text-right font-bold text-amber-600">{{ $u->points }}</td>
<td class="px-4 py-3 text-right text-slate-500">{{ $u->attempts_count }}</td>
<td class="px-4 py-3 text-right whitespace-nowrap">
<a href="{{ route('admin.users.edit',$u) }}" class="text-violet-600 hover:underline mr-3">Bearbeiten</a>