mirror of
https://github.com/MarijnDoeve/TijdVoorDeTest.git
synced 2026-07-05 07:00:14 +02:00
Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 86e7d07078 | |||
| c68e865a78 | |||
| ce799b62ae | |||
| 4f02e63265 | |||
| 826c8b2517 | |||
| 40d1e4076f | |||
| 8c28025e7c | |||
| 3775cb2f5c | |||
| 40a436c829 | |||
| 194143602b |
+13
@@ -68,6 +68,19 @@ Icon
|
||||
# Thumbnails
|
||||
._*
|
||||
|
||||
# IDEs
|
||||
/.idea/
|
||||
/.vscode/
|
||||
|
||||
# Junie
|
||||
!/.junie/
|
||||
/.junie/memory/
|
||||
/.junie/plans/
|
||||
|
||||
# Windows
|
||||
Thumbs.db
|
||||
Desktop.ini
|
||||
|
||||
# Files that might appear in the root of a volume
|
||||
.DocumentRevisions-V100
|
||||
.fseventsd
|
||||
|
||||
Generated
-6
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="SqlDialectMappings">
|
||||
<file url="PROJECT" dialect="PostgreSQL" />
|
||||
</component>
|
||||
</project>
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
AGENTS.md
|
||||
@@ -61,6 +61,19 @@ The project uses `just` as the primary task runner. Always prefer `just` command
|
||||
- CSS/Sass is in `assets/styles/`.
|
||||
- Assets are compiled on-the-fly or mapped; do not look for a `node_modules` folder.
|
||||
|
||||
## Key Components
|
||||
### Controllers
|
||||
- **Backoffice**: Located in `src/Controller/Backoffice`, handles season and quiz management.
|
||||
- **Quiz**: `src/Controller/QuizController` handles the candidate-facing side of quizzes.
|
||||
- **Elimination**: `src/Controller/EliminationController` handles elimination screens.
|
||||
|
||||
### Services
|
||||
- **QuizSpreadsheetService**: Handles importing quizzes from XLSX files.
|
||||
|
||||
### Base Classes & Enums
|
||||
- **AbstractController**: Base class for all controllers, containing common regexes and flash helpers.
|
||||
- **FlashType Enum**: Used for consistent flash messaging (`FlashType::Success`, `FlashType::Danger`, etc.).
|
||||
|
||||
## Key Files
|
||||
- `composer.json`: Dependency management.
|
||||
- `importmap.php`: JavaScript module mapping.
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"controllers": {
|
||||
"@symfony/ux-turbo": {
|
||||
"turbo-core": {
|
||||
"enabled": true,
|
||||
"enabled": false,
|
||||
"fetch": "eager"
|
||||
},
|
||||
"mercure-turbo-stream": {
|
||||
|
||||
Generated
+273
-219
File diff suppressed because it is too large
Load Diff
@@ -8,6 +8,7 @@ use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\HttpKernel\Attribute\AsController;
|
||||
use Symfony\Component\Routing\Attribute\Route;
|
||||
use Symfony\Component\Security\Core\Exception\AuthenticationException;
|
||||
use Symfony\Component\Security\Core\User\UserInterface;
|
||||
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
|
||||
use Symfony\Contracts\Translation\TranslatorInterface;
|
||||
use Tvdt\Enum\FlashType;
|
||||
@@ -20,6 +21,10 @@ final class LoginController extends AbstractController
|
||||
#[Route(path: '/login', name: 'tvdt_login_login')]
|
||||
public function login(): Response
|
||||
{
|
||||
if ($this->getUser() instanceof UserInterface) {
|
||||
return $this->redirectToRoute('tvdt_backoffice_index');
|
||||
}
|
||||
|
||||
// get the login error if there is one
|
||||
$error = $this->authenticationUtils->getLastAuthenticationError();
|
||||
// last username entered by the user
|
||||
|
||||
@@ -15,6 +15,7 @@ use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
|
||||
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
|
||||
use Symfony\Component\Routing\Attribute\Route;
|
||||
use Symfony\Component\Security\Core\User\UserInterface;
|
||||
use Symfony\Contracts\Translation\TranslatorInterface;
|
||||
use SymfonyCasts\Bundle\VerifyEmail\Exception\VerifyEmailExceptionInterface;
|
||||
use Tvdt\Entity\User;
|
||||
@@ -30,6 +31,10 @@ final class RegistrationController extends AbstractController
|
||||
public function register(
|
||||
Request $request,
|
||||
): Response {
|
||||
if ($this->getUser() instanceof UserInterface) {
|
||||
return $this->redirectToRoute('tvdt_backoffice_index');
|
||||
}
|
||||
|
||||
$user = new User();
|
||||
$form = $this->createForm(RegistrationFormType::class, $user);
|
||||
$form->handleRequest($request);
|
||||
|
||||
@@ -95,6 +95,7 @@ class QuizSpreadsheetService
|
||||
$arrCounter = 1;
|
||||
|
||||
while (true) {
|
||||
try {
|
||||
if (null === $questionArr[$arrCounter]) {
|
||||
if (1 === $answerCounter) {
|
||||
$errors[] = \sprintf('Question %d has no answers', $answerCounter);
|
||||
@@ -102,6 +103,9 @@ class QuizSpreadsheetService
|
||||
|
||||
break;
|
||||
}
|
||||
} catch (\ErrorException) {
|
||||
break;
|
||||
}
|
||||
|
||||
$answer = new Answer((string) $questionArr[$arrCounter++], (bool) $questionArr[$arrCounter++]);
|
||||
$answer->ordering = $answerCounter++;
|
||||
@@ -130,6 +134,6 @@ class QuizSpreadsheetService
|
||||
|
||||
private function isSpreadsheetFile(File $file): bool
|
||||
{
|
||||
return 'xlsx' === $file->getExtension();
|
||||
return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' === $file->getMimeType();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user