feat: suppression d'une migration et amélioration des formulaires + messages d'erreur (révision design + placeholders ajoutés)
This commit is contained in:
@@ -1,35 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace DoctrineMigrations;
|
|
||||||
|
|
||||||
use Doctrine\DBAL\Schema\Schema;
|
|
||||||
use Doctrine\Migrations\AbstractMigration;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Auto-generated Migration: Please modify to your needs!
|
|
||||||
*/
|
|
||||||
final class Version20260331084216 extends AbstractMigration
|
|
||||||
{
|
|
||||||
public function getDescription(): string
|
|
||||||
{
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
|
|
||||||
public function up(Schema $schema): void
|
|
||||||
{
|
|
||||||
// this up() migration is auto-generated, please modify it to your needs
|
|
||||||
$this->addSql('CREATE TABLE "user" (id UUID NOT NULL, email VARCHAR(180) NOT NULL, roles JSON NOT NULL, password VARCHAR(255) NOT NULL, email_quota VARCHAR(255) NOT NULL, alternate_email VARCHAR(255) NOT NULL, identifiant_kaz VARCHAR(255) NOT NULL, quota VARCHAR(255) NOT NULL, has_nextcloud_access BOOLEAN NOT NULL, nextcloud_quota VARCHAR(255) NOT NULL, has_mobilizon BOOLEAN NOT NULL, has_agora_access BOOLEAN NOT NULL, last_name VARCHAR(255) NOT NULL, first_name VARCHAR(255) NOT NULL, image VARCHAR(255) DEFAULT NULL, telephone VARCHAR(20) DEFAULT NULL, PRIMARY KEY (id))');
|
|
||||||
$this->addSql('CREATE UNIQUE INDEX UNIQ_8D93D649E7927C74 ON "user" (email)');
|
|
||||||
$this->addSql('CREATE TABLE messenger_messages (id BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL, body TEXT NOT NULL, headers TEXT NOT NULL, queue_name VARCHAR(190) NOT NULL, created_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, available_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, delivered_at TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, PRIMARY KEY (id))');
|
|
||||||
$this->addSql('CREATE INDEX IDX_75EA56E0FB7336F0E3BD61CE16BA31DBBF396750 ON messenger_messages (queue_name, available_at, delivered_at, id)');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function down(Schema $schema): void
|
|
||||||
{
|
|
||||||
// this down() migration is auto-generated, please modify it to your needs
|
|
||||||
$this->addSql('DROP TABLE "user"');
|
|
||||||
$this->addSql('DROP TABLE messenger_messages');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -71,24 +71,6 @@ class AppFixtures extends Fixture
|
|||||||
|
|
||||||
$manager->persist($admin);
|
$manager->persist($admin);
|
||||||
|
|
||||||
// Création d'un compte de test fixe présent dans le LDAP
|
|
||||||
$melvin = new User();
|
|
||||||
$melvin->setEmail('melvin.leveque@kazkouil.fr');
|
|
||||||
$melvin->setRoles(['ROLE_USER', 'ROLE_ADMIN', 'ROLE_ORGANISATION']);
|
|
||||||
$melvin->setPassword($this->hasher->hashPassword($melvin, 'password'));
|
|
||||||
$melvin->setFirstName('');
|
|
||||||
$melvin->setLastName('');
|
|
||||||
$melvin->setAlternateEmail('');
|
|
||||||
$melvin->setIdentifiantKaz('MELVIN-KAZ-001');
|
|
||||||
$melvin->setQuota('5G');
|
|
||||||
$melvin->setEmailQuota('1G');
|
|
||||||
$melvin->setNextcloudQuota('10G');
|
|
||||||
$melvin->setHasNextcloudAccess(true);
|
|
||||||
$melvin->setHasMobilizon(true);
|
|
||||||
$melvin->setHasAgoraAccess(true);
|
|
||||||
|
|
||||||
$manager->persist($melvin);
|
|
||||||
|
|
||||||
// Création d'un compte de test fixe présent dans le LDAP pour ma présentation
|
// Création d'un compte de test fixe présent dans le LDAP pour ma présentation
|
||||||
$toto = new User();
|
$toto = new User();
|
||||||
$toto->setEmail('toto@kazkouil.fr');
|
$toto->setEmail('toto@kazkouil.fr');
|
||||||
|
|||||||
@@ -20,19 +20,19 @@
|
|||||||
TODO : Gérer les données avec Pahéko, mise en service en cours par un des développeurs de l'association. Cela sera vu à posteriori du stage #}
|
TODO : Gérer les données avec Pahéko, mise en service en cours par un des développeurs de l'association. Cela sera vu à posteriori du stage #}
|
||||||
<div class="bg-bouton/10 border border-bouton/30 rounded-lg p-5">
|
<div class="bg-bouton/10 border border-bouton/30 rounded-lg p-5">
|
||||||
<h3 class="font-semibold text-title mb-3 flex items-center gap-2">
|
<h3 class="font-semibold text-title mb-3 flex items-center gap-2">
|
||||||
Votre abonnement actuellement :
|
Ton abonnement actuellement :
|
||||||
</h3>
|
</h3>
|
||||||
|
|
||||||
<ul class="space-y-2 text-sm text-text">
|
<ul class="space-y-2 text-sm text-text">
|
||||||
<li class="flex flex-col sm:flex-row sm:items-center gap-1 sm:gap-2">
|
<li class="flex flex-col sm:flex-row sm:items-center gap-1 sm:gap-2">
|
||||||
<span class="font-semibold text-gris-fonce">Formule souscrite :</span>
|
<span class="font-semibold text-gris-fonce">Formule souscrite :</span>
|
||||||
{# TODO API : Remplacer par la vraie variable #}
|
{# TODO API : Remplacer par la vraie variable quand connexion Pahéko OK #}
|
||||||
<span class="italic opacity-70">Ajouter la vraie valeur</span>
|
<span class="italic opacity-70">Ici s'affichera la donnée récupérée grâce à l'API</span>
|
||||||
</li>
|
</li>
|
||||||
<li class="flex flex-col sm:flex-row sm:items-center gap-1 sm:gap-2">
|
<li class="flex flex-col sm:flex-row sm:items-center gap-1 sm:gap-2">
|
||||||
<span class="font-semibold text-gris-fonce">Date de validité :</span>
|
<span class="font-semibold text-gris-fonce">Date de validité :</span>
|
||||||
{# TODO API : Remplacer par la vraie variable #}
|
{# TODO API : Remplacer par la vraie variable quand connexion Pahéko OK #}
|
||||||
<span class="italic opacity-70">Ajouter la vraie valeur</span>
|
<span class="italic opacity-70">Ici s'affichera la donnée récupérée grâce à l'API</span>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -6,19 +6,22 @@
|
|||||||
<div class="min-h-screen bg-bg-primaire flex items-center justify-center p-4 font-sora">
|
<div class="min-h-screen bg-bg-primaire flex items-center justify-center p-4 font-sora">
|
||||||
<div class="max-w-md w-full bg-white rounded-2xl shadow-xl p-8 border-t-4 border-bouton">
|
<div class="max-w-md w-full bg-white rounded-2xl shadow-xl p-8 border-t-4 border-bouton">
|
||||||
|
|
||||||
<h1 class="font-caveat text-4xl text-text mb-6 text-center">
|
<h1 class="font-caveat text-4xl text-text mb-12 text-center">
|
||||||
Sécurité du compte
|
Modifier le mot de passe de mon espace kaznaute
|
||||||
</h1>
|
</h1>
|
||||||
|
|
||||||
{{ form_start(form) }}
|
{{ form_start(form) }}
|
||||||
<div class="space-y-4">
|
<div class="space-y-6">
|
||||||
{# Champ Ancien Mot de Passe #}
|
{# Champ Ancien Mot de Passe #}
|
||||||
<div class="space-y-1">
|
<div class="space-y-1">
|
||||||
{{ form_label(form.oldPassword, 'Mot de passe actuel', {
|
{{ form_label(form.oldPassword, 'Mon mot de passe actuel', {
|
||||||
'label_attr': {'class': 'block text-sm font-semibold text-text'}
|
'label_attr': {'class': 'block text-sm font-semibold text-text'}
|
||||||
}) }}
|
}) }}
|
||||||
{{ form_widget(form.oldPassword, {
|
{{ form_widget(form.oldPassword, {
|
||||||
'attr': {'class': 'w-full px-4 py-3 border border-gris-clair rounded-lg focus:outline-none focus:border-bouton focus:ring-1 focus:ring-bouton placeholder-gris-moyen transition-shadow'}
|
'attr': {
|
||||||
|
'class': 'w-full px-4 py-3 border border-gris-clair rounded-lg focus:outline-none focus:border-bouton focus:ring-1 focus:ring-bouton placeholder-gris-moyen transition-shadow',
|
||||||
|
'placeholder':'Saisissez votre ancien mot de passe'
|
||||||
|
}
|
||||||
}) }}
|
}) }}
|
||||||
|
|
||||||
{# Affichage message pour les erreurs de saisie de l'ancien mot de passe #}
|
{# Affichage message pour les erreurs de saisie de l'ancien mot de passe #}
|
||||||
@@ -28,43 +31,44 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{# Champs Nouveau Mot de Passe #}
|
{# Champs Nouveau Mot de Passe #}
|
||||||
<div class="space-y-4 pt-2">
|
<div class="space-y-6">
|
||||||
{# Affichage de l'erreur si les deux champs ne correspondent pas #}
|
{# Affichage d'un message d'erreur si les deux champs ne correspondent pas #}
|
||||||
<div class="text-red-500 text-xs italic">
|
<div class="text-red-500 text-xs italic">
|
||||||
{{ form_errors(form.newPassword) }}
|
{{ form_errors(form.newPassword) }}
|
||||||
</div>
|
</div>
|
||||||
<div class="space-y-1">
|
|
||||||
{{ form_label(form.newPassword.first, 'Nouveau mot de passe', {
|
<div class="flex flex-col gap-1.5">
|
||||||
|
{{ form_label(form.newPassword.first, 'Mon nouveau mot de passe', {
|
||||||
'label_attr': {'class': 'block text-sm font-semibold text-text'}
|
'label_attr': {'class': 'block text-sm font-semibold text-text'}
|
||||||
}) }}
|
}) }}
|
||||||
{{ form_widget(form.newPassword.first, {
|
{{ form_widget(form.newPassword.first, {
|
||||||
'attr': {'class': 'w-full px-4 py-3 border border-gris-clair rounded-lg focus:outline-none focus:border-bouton focus:ring-1 focus:ring-bouton transition-shadow'}
|
'attr': {
|
||||||
|
'class': 'w-full px-4 py-3 border border-gris-clair rounded-lg focus:outline-none focus:border-bouton focus:ring-1 focus:ring-bouton placeholder-gris-moyen transition-all',
|
||||||
|
'placeholder':'Saisissez un nouveau mot de passe'
|
||||||
|
}
|
||||||
}) }}
|
}) }}
|
||||||
|
<div class="text-red-500 text-xs italic">
|
||||||
{# Affichage de l'erreur de longueur (min 8 caractères) #}
|
|
||||||
<div class="text-red-500 text-xs mt-1 italic">
|
|
||||||
{{ form_errors(form.newPassword.first) }}
|
{{ form_errors(form.newPassword.first) }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="space-y-1">
|
<div class="flex flex-col gap-1.5">
|
||||||
{{ form_label(form.newPassword.second, 'Confirmer le nouveau mot de passe', {
|
{{ form_label(form.newPassword.second, 'Confirmer mon nouveau mot de passe', {
|
||||||
'label_attr': {'class': 'block text-sm font-semibold text-text'}
|
'label_attr': {'class': 'block text-sm font-semibold text-text'}
|
||||||
}) }}
|
}) }}
|
||||||
{{ form_widget(form.newPassword.second, {
|
{{ form_widget(form.newPassword.second, {
|
||||||
'attr': {'class': 'w-full px-4 py-3 border border-gris-clair rounded-lg focus:outline-none focus:border-bouton focus:ring-1 focus:ring-bouton transition-shadow'}
|
'attr': {
|
||||||
|
'class': 'w-full px-4 py-3 border border-gris-clair rounded-lg focus:outline-none focus:border-bouton focus:ring-1 focus:ring-bouton placeholder-gris-moyen transition-all',
|
||||||
|
'placeholder': 'Confirmez votre saisie'
|
||||||
|
}
|
||||||
}) }}
|
}) }}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="text-red-500 text-xs mt-1">
|
|
||||||
{{ form_errors(form.newPassword) }}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{# Bouton de validation #}
|
{# Bouton de validation #}
|
||||||
<div class="md:col-span-3 w-full flex justify-center pt-8 pb-4">
|
<div class="flex justify-center pt-12">
|
||||||
<button type="submit"
|
<button type="submit"
|
||||||
class="px-8 py-2.5 bg-bouton hover:bg-bouton-hover text-text text-sm font-bold rounded-lg shadow transition-colors">
|
class="w-full sm:w-auto px-8 py-3 bg-bouton hover:bg-bouton-hover text-text text-sm font-bold rounded-lg shadow transition-all active:scale-95">
|
||||||
Mettre à jour mon mot de passe
|
Mettre à jour mon mot de passe
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
2
translations/security.fr.yaml
Normal file
2
translations/security.fr.yaml
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
# translations/security.fr.yaml
|
||||||
|
"Invalid credentials.": "Identifiants invalides. Veuillez vérifier votre email ou votre mot de passe."
|
||||||
Reference in New Issue
Block a user