Paillasse/portail/app/Http/Controllers/InscriptionController.php

64 lines
2.5 KiB
PHP
Raw Permalink Normal View History

<?php
namespace App\Http\Controllers;
use App\Models\Classe;
use App\Models\Etablissement;
use App\Models\User;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
class InscriptionController extends Controller
{
public function store(Request $request): RedirectResponse
{
$donnees = $request->validate([
'prenom' => ['required', 'string', 'max:100'],
'nom' => ['required', 'string', 'max:100'],
'email' => ['required', 'email', 'unique:users,email'],
'password' => ['required', 'string', 'min:8', 'confirmed'],
'etablissement_nom_liste' => ['required', 'string'],
'etablissement_nom' => ['required_if:etablissement_nom_liste,autre', 'nullable', 'string', 'max:150'],
'etablissement_ville' => ['required_if:etablissement_nom_liste,autre', 'nullable', 'string', 'max:100'],
'etablissement_uai' => ['nullable', 'string', 'max:20'],
'formation' => ['nullable', 'string', 'max:100'],
'classe' => ['required', 'string', 'max:100'],
]);
[$prof, $classe] = DB::transaction(function () use ($donnees) {
$etablissement = $donnees['etablissement_nom_liste'] === 'autre'
? Etablissement::firstOrCreate(
['nom' => $donnees['etablissement_nom']],
['ville' => $donnees['etablissement_ville'], 'uai' => $donnees['etablissement_uai'] ?? null],
)
: Etablissement::firstOrCreate(['nom' => $donnees['etablissement_nom_liste']]);
$prof = User::create([
'name' => trim($donnees['prenom'].' '.$donnees['nom']),
'email' => $donnees['email'],
'password' => Hash::make($donnees['password']),
'etablissement_id' => $etablissement->id,
]);
$classe = Classe::create([
'etablissement_id' => $etablissement->id,
'user_id' => $prof->id,
'nom' => $donnees['classe'],
'formation' => $donnees['formation'] ?? null,
]);
return [$prof, $classe];
});
Auth::guard('web')->login($prof);
$request->session()->regenerate();
$request->session()->put('jeton_session_web', $prof->demarreNouvelleSession());
return redirect()->route('mes-classes.show', $classe)
->with('classe_creee', true);
}
}