Skip to content

Commit 7f0d18f

Browse files
committed
Quiz start logic
1 parent 509df00 commit 7f0d18f

File tree

12 files changed

+441
-9
lines changed

12 files changed

+441
-9
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
/node_modules
33
/public/build
44
/public/hot
5+
/public/vendor
56
/public/storage
67
/storage/*.key
78
/vendor

app/Console/Kernel.php

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ class Kernel extends ConsoleKernel
1313
protected function schedule(Schedule $schedule): void
1414
{
1515
// $schedule->command('inspire')->hourly();
16+
$schedule->command('telescope:prune')->daily();
1617
}
1718

1819
/**

app/Http/Controllers/QuizController.php

+29-5
Original file line numberDiff line numberDiff line change
@@ -104,27 +104,51 @@ public function store(StoreQuizRequest $request)
104104
/**
105105
* Display the specified resource.
106106
*/
107-
public function start($category_id, $quiz_id)
107+
public function start($category_id, $quiz_id, $quiz_result_id = null)
108108
{
109109
$quiz = Quiz::findOrFail($quiz_id);
110-
$questions = Question::getQuestions($quiz_id);
111110
$user = auth()->user();
111+
$guest_role = !$user->hasRole([TEACHER, SUPER_ADMIN, STUDENT]);
112+
113+
114+
if (!empty($quiz_result_id)) {
115+
$quizResult = QuizResult::with('quiz')->where('user_id', $user->id)
116+
->where('id', $quiz_result_id)
117+
->whereNull('answers')
118+
->first();
112119

113-
## Guest
114-
if (!$user->hasRole([TEACHER, SUPER_ADMIN, STUDENT])) {
120+
$questions = json_decode($quizResult->questions);
121+
return view('quizzes.start', compact('questions', 'quizResult', 'quiz'));
122+
}
123+
124+
$force = request()->has('force');
125+
$quizResults = QuizResult::with('quiz')->where('user_id', $user->id)
126+
->where('quiz_id', $quiz_id)
127+
->whereNull('answers')
128+
->get();
129+
130+
if (
131+
($quizResults->count() && $guest_role) ||
132+
($quizResults->count() && !$force)
133+
) {
134+
return view('quizzes.incomplete-quiz', compact('quizResults', 'category_id', 'quiz_id', 'guest_role', 'force'));
135+
}
136+
137+
// guest not allowed to attempt more than one pre test
138+
if ($guest_role) {
115139
$count = QuizResult::where('user_id', $user->id)
116140
->where('quiz_id', $quiz_id)
117141
->whereNotNull('answers')
118142
->count();
119143

120-
121144
if ($count) {
122145
return redirect()->route('dashboard')
123146
->with('error', __('To access additional tests, kindly upgrade your subscription as you have already used your complimentary tests..'));
124147
}
125148
}
126149

127150

151+
$questions = Question::getQuestions($quiz_id);
128152
$quizResult = QuizResult::create([
129153
'user_id' => $user->id,
130154
'quiz_id' => $quiz_id,

app/Models/QuizResult.php

+11
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,15 @@ class QuizResult extends Model
1212
protected $table = 'quiz_results';
1313

1414
protected $fillable = ['user_id', 'quiz_id', 'questions'];
15+
16+
17+
public function user()
18+
{
19+
return $this->belongsTo(User::class, 'user_id');
20+
}
21+
22+
public function quiz()
23+
{
24+
return $this->belongsTo(Quiz::class, 'quiz_id');
25+
}
1526
}

app/Providers/AppServiceProvider.php

+4-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@ class AppServiceProvider extends ServiceProvider
1111
*/
1212
public function register(): void
1313
{
14-
//
14+
if ($this->app->environment('local')) {
15+
$this->app->register(\Laravel\Telescope\TelescopeServiceProvider::class);
16+
$this->app->register(TelescopeServiceProvider::class);
17+
}
1518
}
1619

1720
/**
+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
<?php
2+
3+
namespace App\Providers;
4+
5+
use Illuminate\Support\Facades\Gate;
6+
use Laravel\Telescope\IncomingEntry;
7+
use Laravel\Telescope\Telescope;
8+
use Laravel\Telescope\TelescopeApplicationServiceProvider;
9+
10+
class TelescopeServiceProvider extends TelescopeApplicationServiceProvider
11+
{
12+
/**
13+
* Register any application services.
14+
*/
15+
public function register(): void
16+
{
17+
// Telescope::night();
18+
19+
$this->hideSensitiveRequestDetails();
20+
21+
Telescope::filter(function (IncomingEntry $entry) {
22+
if ($this->app->environment('local')) {
23+
return true;
24+
}
25+
26+
return $entry->isReportableException() ||
27+
$entry->isFailedRequest() ||
28+
$entry->isFailedJob() ||
29+
$entry->isScheduledTask() ||
30+
$entry->hasMonitoredTag();
31+
});
32+
}
33+
34+
/**
35+
* Prevent sensitive request details from being logged by Telescope.
36+
*/
37+
protected function hideSensitiveRequestDetails(): void
38+
{
39+
if ($this->app->environment('local')) {
40+
return;
41+
}
42+
43+
Telescope::hideRequestParameters(['_token']);
44+
45+
Telescope::hideRequestHeaders([
46+
'cookie',
47+
'x-csrf-token',
48+
'x-xsrf-token',
49+
]);
50+
}
51+
52+
/**
53+
* Register the Telescope gate.
54+
*
55+
* This gate determines who can access Telescope in non-local environments.
56+
*/
57+
protected function gate(): void
58+
{
59+
Gate::define('viewTelescope', function ($user) {
60+
return in_array($user->email, [
61+
//
62+
]);
63+
});
64+
}
65+
}

composer.json

+4-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
"fakerphp/faker": "^1.9.1",
1919
"laravel/pint": "^1.0",
2020
"laravel/sail": "^1.18",
21+
"laravel/telescope": "^4.15",
2122
"mockery/mockery": "^1.4.4",
2223
"nunomaduro/collision": "^7.0",
2324
"phpunit/phpunit": "^10.1",
@@ -52,7 +53,9 @@
5253
},
5354
"extra": {
5455
"laravel": {
55-
"dont-discover": []
56+
"dont-discover": [
57+
"laravel/telescope"
58+
]
5659
}
5760
},
5861
"config": {

composer.lock

+72-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)