Skip to content

Commit

Permalink
Quiz start logic
Browse files Browse the repository at this point in the history
  • Loading branch information
muni2explore committed Jul 25, 2023
1 parent 509df00 commit 7f0d18f
Show file tree
Hide file tree
Showing 12 changed files with 441 additions and 9 deletions.
1 change: 1 addition & 0 deletions .gitignore
Expand Up @@ -2,6 +2,7 @@
/node_modules
/public/build
/public/hot
/public/vendor
/public/storage
/storage/*.key
/vendor
Expand Down
1 change: 1 addition & 0 deletions app/Console/Kernel.php
Expand Up @@ -13,6 +13,7 @@ class Kernel extends ConsoleKernel
protected function schedule(Schedule $schedule): void
{
// $schedule->command('inspire')->hourly();
$schedule->command('telescope:prune')->daily();
}

/**
Expand Down
34 changes: 29 additions & 5 deletions app/Http/Controllers/QuizController.php
Expand Up @@ -104,27 +104,51 @@ public function store(StoreQuizRequest $request)
/**
* Display the specified resource.
*/
public function start($category_id, $quiz_id)
public function start($category_id, $quiz_id, $quiz_result_id = null)
{
$quiz = Quiz::findOrFail($quiz_id);
$questions = Question::getQuestions($quiz_id);
$user = auth()->user();
$guest_role = !$user->hasRole([TEACHER, SUPER_ADMIN, STUDENT]);


if (!empty($quiz_result_id)) {
$quizResult = QuizResult::with('quiz')->where('user_id', $user->id)
->where('id', $quiz_result_id)
->whereNull('answers')
->first();

## Guest
if (!$user->hasRole([TEACHER, SUPER_ADMIN, STUDENT])) {
$questions = json_decode($quizResult->questions);
return view('quizzes.start', compact('questions', 'quizResult', 'quiz'));
}

$force = request()->has('force');
$quizResults = QuizResult::with('quiz')->where('user_id', $user->id)
->where('quiz_id', $quiz_id)
->whereNull('answers')
->get();

if (
($quizResults->count() && $guest_role) ||
($quizResults->count() && !$force)
) {
return view('quizzes.incomplete-quiz', compact('quizResults', 'category_id', 'quiz_id', 'guest_role', 'force'));
}

// guest not allowed to attempt more than one pre test
if ($guest_role) {
$count = QuizResult::where('user_id', $user->id)
->where('quiz_id', $quiz_id)
->whereNotNull('answers')
->count();


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


$questions = Question::getQuestions($quiz_id);
$quizResult = QuizResult::create([
'user_id' => $user->id,
'quiz_id' => $quiz_id,
Expand Down
11 changes: 11 additions & 0 deletions app/Models/QuizResult.php
Expand Up @@ -12,4 +12,15 @@ class QuizResult extends Model
protected $table = 'quiz_results';

protected $fillable = ['user_id', 'quiz_id', 'questions'];


public function user()
{
return $this->belongsTo(User::class, 'user_id');
}

public function quiz()
{
return $this->belongsTo(Quiz::class, 'quiz_id');
}
}
5 changes: 4 additions & 1 deletion app/Providers/AppServiceProvider.php
Expand Up @@ -11,7 +11,10 @@ class AppServiceProvider extends ServiceProvider
*/
public function register(): void
{
//
if ($this->app->environment('local')) {
$this->app->register(\Laravel\Telescope\TelescopeServiceProvider::class);
$this->app->register(TelescopeServiceProvider::class);
}
}

/**
Expand Down
65 changes: 65 additions & 0 deletions app/Providers/TelescopeServiceProvider.php
@@ -0,0 +1,65 @@
<?php

namespace App\Providers;

use Illuminate\Support\Facades\Gate;
use Laravel\Telescope\IncomingEntry;
use Laravel\Telescope\Telescope;
use Laravel\Telescope\TelescopeApplicationServiceProvider;

class TelescopeServiceProvider extends TelescopeApplicationServiceProvider
{
/**
* Register any application services.
*/
public function register(): void
{
// Telescope::night();

$this->hideSensitiveRequestDetails();

Telescope::filter(function (IncomingEntry $entry) {
if ($this->app->environment('local')) {
return true;
}

return $entry->isReportableException() ||
$entry->isFailedRequest() ||
$entry->isFailedJob() ||
$entry->isScheduledTask() ||
$entry->hasMonitoredTag();
});
}

/**
* Prevent sensitive request details from being logged by Telescope.
*/
protected function hideSensitiveRequestDetails(): void
{
if ($this->app->environment('local')) {
return;
}

Telescope::hideRequestParameters(['_token']);

Telescope::hideRequestHeaders([
'cookie',
'x-csrf-token',
'x-xsrf-token',
]);
}

/**
* Register the Telescope gate.
*
* This gate determines who can access Telescope in non-local environments.
*/
protected function gate(): void
{
Gate::define('viewTelescope', function ($user) {
return in_array($user->email, [
//
]);
});
}
}
5 changes: 4 additions & 1 deletion composer.json
Expand Up @@ -18,6 +18,7 @@
"fakerphp/faker": "^1.9.1",
"laravel/pint": "^1.0",
"laravel/sail": "^1.18",
"laravel/telescope": "^4.15",
"mockery/mockery": "^1.4.4",
"nunomaduro/collision": "^7.0",
"phpunit/phpunit": "^10.1",
Expand Down Expand Up @@ -52,7 +53,9 @@
},
"extra": {
"laravel": {
"dont-discover": []
"dont-discover": [
"laravel/telescope"
]
}
},
"config": {
Expand Down
73 changes: 72 additions & 1 deletion composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 7f0d18f

Please sign in to comment.