From 5f144ba4d2aa6c7adca25d604b35655d42edb94f Mon Sep 17 00:00:00 2001 From: Serreau Jovann Date: Wed, 1 Apr 2026 19:30:53 +0200 Subject: [PATCH] fix: resolve SonarQube accessibility and test issues across templates - Add for/id attributes to all form labels for accessibility compliance - Add tags to PDF templates (rgpd_access, rgpd_no_data, rgpd_deletion, contrat_revendeur) - Add role="presentation" to email layout tables - Remove deprecated cellpadding/cellspacing attributes from all templates - Fix PHPUnit notices by replacing createMock with createStub where no expectations are set Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --- templates/admin/clients/create.html.twig | 52 ++++++------- templates/admin/membres.html.twig | 4 +- templates/admin/profil/index.html.twig | 28 +++---- templates/admin/revendeurs/create.html.twig | 36 ++++----- templates/admin/revendeurs/edit.html.twig | 28 +++---- templates/admin/stats/index.html.twig | 10 +-- templates/admin/status/index.html.twig | 24 +++--- templates/admin/status/manage.html.twig | 24 +++--- templates/email/base.html.twig | 4 +- templates/emails/membre_created.html.twig | 4 +- templates/emails/revendeur_created.html.twig | 8 +- .../emails/rgpd_attestation_signed.html.twig | 2 +- templates/pdf/contrat_revendeur.html.twig | 5 +- templates/pdf/rgpd_access.html.twig | 5 +- templates/pdf/rgpd_deletion.html.twig | 5 +- templates/pdf/rgpd_no_data.html.twig | 5 +- tests/Security/KeycloakAuthenticatorTest.php | 76 +++++++++++-------- tests/Security/LoginSuccessHandlerTest.php | 28 +++---- tests/Twig/ViteAssetExtensionTest.php | 32 ++++---- 19 files changed, 198 insertions(+), 182 deletions(-) diff --git a/templates/admin/clients/create.html.twig b/templates/admin/clients/create.html.twig index 72e6e48..fbb0833 100644 --- a/templates/admin/clients/create.html.twig +++ b/templates/admin/clients/create.html.twig @@ -23,30 +23,30 @@ <h2 class="text-sm font-black uppercase tracking-widest mb-4">Identite</h2> <div class="grid grid-cols-1 md:grid-cols-3 gap-4"> <div> - <label class="block text-xs font-black uppercase tracking-widest mb-2">Prenom *</label> - <input type="text" name="firstName" required placeholder="Prenom" + <label for="firstName" class="block text-xs font-black uppercase tracking-widest mb-2">Prenom *</label> + <input type="text" id="firstName" name="firstName" required placeholder="Prenom" class="w-full px-4 py-3 border-2 border-gray-900 bg-white text-sm font-bold focus:outline-none focus:border-indigo-600 focus:shadow-[4px_4px_0px_rgba(79,70,229,0.3)]"> </div> <div> - <label class="block text-xs font-black uppercase tracking-widest mb-2">Nom *</label> - <input type="text" name="lastName" required placeholder="Nom" + <label for="lastName" class="block text-xs font-black uppercase tracking-widest mb-2">Nom *</label> + <input type="text" id="lastName" name="lastName" required placeholder="Nom" class="w-full px-4 py-3 border-2 border-gray-900 bg-white text-sm font-bold focus:outline-none focus:border-indigo-600 focus:shadow-[4px_4px_0px_rgba(79,70,229,0.3)]"> </div> <div> - <label class="block text-xs font-black uppercase tracking-widest mb-2">Email *</label> - <input type="email" name="email" required placeholder="email@exemple.fr" + <label for="email" class="block text-xs font-black uppercase tracking-widest mb-2">Email *</label> + <input type="email" id="email" name="email" required placeholder="email@exemple.fr" class="w-full px-4 py-3 border-2 border-gray-900 bg-white text-sm font-bold focus:outline-none focus:border-indigo-600 focus:shadow-[4px_4px_0px_rgba(79,70,229,0.3)]"> </div> </div> <div class="grid grid-cols-1 md:grid-cols-2 gap-4 mt-4"> <div> - <label class="block text-xs font-black uppercase tracking-widest mb-2">Telephone</label> - <input type="tel" name="phone" placeholder="06 12 34 56 78" + <label for="phone" class="block text-xs font-black uppercase tracking-widest mb-2">Telephone</label> + <input type="tel" id="phone" name="phone" placeholder="06 12 34 56 78" class="w-full px-4 py-3 border-2 border-gray-900 bg-white text-sm font-bold focus:outline-none focus:border-indigo-600 focus:shadow-[4px_4px_0px_rgba(79,70,229,0.3)]"> </div> <div> - <label class="block text-xs font-black uppercase tracking-widest mb-2">Type</label> - <select name="typeCompany" class="w-full px-4 py-3 border-2 border-gray-900 bg-white text-sm font-bold"> + <label for="typeCompany" class="block text-xs font-black uppercase tracking-widest mb-2">Type</label> + <select id="typeCompany" name="typeCompany" class="w-full px-4 py-3 border-2 border-gray-900 bg-white text-sm font-bold"> <option value="">— Selectionner —</option> <option value="particulier">Particulier</option> <option value="association">Association</option> @@ -65,23 +65,23 @@ <h2 class="text-sm font-black uppercase tracking-widest mb-4">Entreprise</h2> <div class="grid grid-cols-1 md:grid-cols-2 gap-4"> <div> - <label class="block text-xs font-black uppercase tracking-widest mb-2">Raison sociale</label> - <input type="text" name="raisonSociale" placeholder="Nom de l'entreprise" + <label for="raisonSociale" class="block text-xs font-black uppercase tracking-widest mb-2">Raison sociale</label> + <input type="text" id="raisonSociale" name="raisonSociale" placeholder="Nom de l'entreprise" class="w-full px-4 py-3 border-2 border-gray-900 bg-white text-sm font-bold focus:outline-none focus:border-indigo-600 focus:shadow-[4px_4px_0px_rgba(79,70,229,0.3)]"> </div> <div> - <label class="block text-xs font-black uppercase tracking-widest mb-2">SIRET</label> - <input type="text" name="siret" maxlength="14" placeholder="12345678901234" + <label for="siret" class="block text-xs font-black uppercase tracking-widest mb-2">SIRET</label> + <input type="text" id="siret" name="siret" maxlength="14" placeholder="12345678901234" class="w-full px-4 py-3 border-2 border-gray-900 bg-white text-sm font-bold focus:outline-none focus:border-indigo-600 focus:shadow-[4px_4px_0px_rgba(79,70,229,0.3)]"> </div> <div> - <label class="block text-xs font-black uppercase tracking-widest mb-2">RCS</label> - <input type="text" name="rcs" placeholder="RCS Paris 123 456 789" + <label for="rcs" class="block text-xs font-black uppercase tracking-widest mb-2">RCS</label> + <input type="text" id="rcs" name="rcs" placeholder="RCS Paris 123 456 789" class="w-full px-4 py-3 border-2 border-gray-900 bg-white text-sm font-bold focus:outline-none focus:border-indigo-600 focus:shadow-[4px_4px_0px_rgba(79,70,229,0.3)]"> </div> <div> - <label class="block text-xs font-black uppercase tracking-widest mb-2">N° TVA</label> - <input type="text" name="numTva" placeholder="FR12345678901" + <label for="numTva" class="block text-xs font-black uppercase tracking-widest mb-2">N° TVA</label> + <input type="text" id="numTva" name="numTva" placeholder="FR12345678901" class="w-full px-4 py-3 border-2 border-gray-900 bg-white text-sm font-bold focus:outline-none focus:border-indigo-600 focus:shadow-[4px_4px_0px_rgba(79,70,229,0.3)]"> </div> </div> @@ -91,24 +91,24 @@ <h2 class="text-sm font-black uppercase tracking-widest mb-4">Adresse</h2> <div class="flex flex-col gap-4"> <div> - <label class="block text-xs font-black uppercase tracking-widest mb-2">Adresse</label> - <input type="text" name="address" placeholder="Numero et rue" + <label for="address" class="block text-xs font-black uppercase tracking-widest mb-2">Adresse</label> + <input type="text" id="address" name="address" placeholder="Numero et rue" class="w-full px-4 py-3 border-2 border-gray-900 bg-white text-sm font-bold focus:outline-none focus:border-indigo-600 focus:shadow-[4px_4px_0px_rgba(79,70,229,0.3)]"> </div> <div> - <label class="block text-xs font-black uppercase tracking-widest mb-2">Complement d'adresse</label> - <input type="text" name="address2" placeholder="Batiment, etage, etc." + <label for="address2" class="block text-xs font-black uppercase tracking-widest mb-2">Complement d'adresse</label> + <input type="text" id="address2" name="address2" placeholder="Batiment, etage, etc." class="w-full px-4 py-3 border-2 border-gray-900 bg-white text-sm font-bold focus:outline-none focus:border-indigo-600 focus:shadow-[4px_4px_0px_rgba(79,70,229,0.3)]"> </div> <div class="grid grid-cols-1 md:grid-cols-2 gap-4"> <div> - <label class="block text-xs font-black uppercase tracking-widest mb-2">Code postal</label> - <input type="text" name="zipCode" maxlength="10" placeholder="02800" + <label for="zipCode" class="block text-xs font-black uppercase tracking-widest mb-2">Code postal</label> + <input type="text" id="zipCode" name="zipCode" maxlength="10" placeholder="02800" class="w-full px-4 py-3 border-2 border-gray-900 bg-white text-sm font-bold focus:outline-none focus:border-indigo-600 focus:shadow-[4px_4px_0px_rgba(79,70,229,0.3)]"> </div> <div> - <label class="block text-xs font-black uppercase tracking-widest mb-2">Ville</label> - <input type="text" name="city" placeholder="Beautor" + <label for="city" class="block text-xs font-black uppercase tracking-widest mb-2">Ville</label> + <input type="text" id="city" name="city" placeholder="Beautor" class="w-full px-4 py-3 border-2 border-gray-900 bg-white text-sm font-bold focus:outline-none focus:border-indigo-600 focus:shadow-[4px_4px_0px_rgba(79,70,229,0.3)]"> </div> </div> diff --git a/templates/admin/membres.html.twig b/templates/admin/membres.html.twig index cc51520..3642508 100644 --- a/templates/admin/membres.html.twig +++ b/templates/admin/membres.html.twig @@ -41,10 +41,10 @@ placeholder="email@exemple.fr"> </div> <div> - <label class="block text-xs font-black uppercase tracking-widest mb-2">Groupes d'acces</label> + <label for="groups-member" class="block text-xs font-black uppercase tracking-widest mb-2">Groupes d'acces</label> <div class="grid grid-cols-2 md:grid-cols-4 gap-3"> <label class="flex items-center gap-2 px-3 py-2 border-2 border-indigo-200 hover:border-indigo-600 cursor-pointer transition-colors bg-indigo-50"> - <input type="checkbox" name="groups[]" value="gp_member" class="accent-indigo-600" checked> + <input type="checkbox" id="groups-member" name="groups[]" value="gp_member" class="accent-indigo-600" checked> <span class="text-xs font-bold text-indigo-800">Membre</span> </label> <label class="flex items-center gap-2 px-3 py-2 border-2 border-red-200 hover:border-red-600 cursor-pointer transition-colors bg-red-50"> diff --git a/templates/admin/profil/index.html.twig b/templates/admin/profil/index.html.twig index 4f3b8f5..51d2b86 100644 --- a/templates/admin/profil/index.html.twig +++ b/templates/admin/profil/index.html.twig @@ -91,8 +91,8 @@ <div class="flex flex-col gap-3"> <form method="post" action="{{ path('app_admin_profil_avatar') }}" enctype="multipart/form-data" class="flex items-end gap-3"> <div> - <label class="block text-[9px] font-black uppercase tracking-widest text-gray-400 mb-1">Image (JPG, PNG, WebP — max 2Mo)</label> - <input type="file" name="avatar" accept="image/jpeg,image/png,image/webp" required + <label for="avatar" class="block text-[9px] font-black uppercase tracking-widest text-gray-400 mb-1">Image (JPG, PNG, WebP — max 2Mo)</label> + <input type="file" id="avatar" name="avatar" accept="image/jpeg,image/png,image/webp" required class="text-xs file:mr-3 file:py-2 file:px-4 file:border-2 file:border-gray-900 file:bg-[#fabf04] file:text-gray-900 file:font-black file:uppercase file:text-[10px] file:tracking-widest file:cursor-pointer"> </div> <button type="submit" class="px-4 py-2 border-2 border-gray-900 bg-[#fabf04] font-black uppercase text-[10px] tracking-widest hover:bg-yellow-500 transition-all"> @@ -119,19 +119,19 @@ <form method="post" action="{{ path('app_admin_profil_update') }}" class="flex flex-col gap-4"> <div class="grid grid-cols-1 md:grid-cols-2 gap-4"> <div> - <label class="block text-xs font-black uppercase tracking-widest mb-2">Prenom</label> - <input type="text" name="firstName" value="{{ app.user.firstName }}" required + <label for="firstName" class="block text-xs font-black uppercase tracking-widest mb-2">Prenom</label> + <input type="text" id="firstName" name="firstName" value="{{ app.user.firstName }}" required class="w-full px-4 py-3 border-2 border-gray-900 bg-white text-sm font-bold focus:outline-none focus:border-indigo-600 focus:shadow-[4px_4px_0px_rgba(79,70,229,0.3)]"> </div> <div> - <label class="block text-xs font-black uppercase tracking-widest mb-2">Nom</label> - <input type="text" name="lastName" value="{{ app.user.lastName }}" required + <label for="lastName" class="block text-xs font-black uppercase tracking-widest mb-2">Nom</label> + <input type="text" id="lastName" name="lastName" value="{{ app.user.lastName }}" required class="w-full px-4 py-3 border-2 border-gray-900 bg-white text-sm font-bold focus:outline-none focus:border-indigo-600 focus:shadow-[4px_4px_0px_rgba(79,70,229,0.3)]"> </div> </div> <div> - <label class="block text-xs font-black uppercase tracking-widest mb-2">Email</label> - <input type="email" name="email" value="{{ app.user.email }}" required + <label for="email" class="block text-xs font-black uppercase tracking-widest mb-2">Email</label> + <input type="email" id="email" name="email" value="{{ app.user.email }}" required class="w-full px-4 py-3 border-2 border-gray-900 bg-white text-sm font-bold focus:outline-none focus:border-indigo-600 focus:shadow-[4px_4px_0px_rgba(79,70,229,0.3)]"> </div> {% if app.user.keycloakId %} @@ -152,21 +152,21 @@ <div class="border-2 border-gray-900 bg-white p-6 shadow-[4px_4px_0px_rgba(0,0,0,1)]"> <form method="post" action="{{ path('app_admin_profil_password') }}" class="flex flex-col gap-4"> <div> - <label class="block text-xs font-black uppercase tracking-widest mb-2">Mot de passe actuel</label> - <input type="password" name="current_password" required + <label for="current_password" class="block text-xs font-black uppercase tracking-widest mb-2">Mot de passe actuel</label> + <input type="password" id="current_password" name="current_password" required class="w-full px-4 py-3 border-2 border-gray-900 bg-white text-sm font-bold focus:outline-none focus:border-indigo-600 focus:shadow-[4px_4px_0px_rgba(79,70,229,0.3)]" placeholder="Votre mot de passe actuel"> </div> <div class="grid grid-cols-1 md:grid-cols-2 gap-4"> <div> - <label class="block text-xs font-black uppercase tracking-widest mb-2">Nouveau mot de passe</label> - <input type="password" name="new_password" required minlength="8" + <label for="new_password" class="block text-xs font-black uppercase tracking-widest mb-2">Nouveau mot de passe</label> + <input type="password" id="new_password" name="new_password" required minlength="8" class="w-full px-4 py-3 border-2 border-gray-900 bg-white text-sm font-bold focus:outline-none focus:border-indigo-600 focus:shadow-[4px_4px_0px_rgba(79,70,229,0.3)]" placeholder="Minimum 8 caracteres"> </div> <div> - <label class="block text-xs font-black uppercase tracking-widest mb-2">Confirmer</label> - <input type="password" name="confirm_password" required minlength="8" + <label for="confirm_password" class="block text-xs font-black uppercase tracking-widest mb-2">Confirmer</label> + <input type="password" id="confirm_password" name="confirm_password" required minlength="8" class="w-full px-4 py-3 border-2 border-gray-900 bg-white text-sm font-bold focus:outline-none focus:border-indigo-600 focus:shadow-[4px_4px_0px_rgba(79,70,229,0.3)]" placeholder="Retapez le mot de passe"> </div> diff --git a/templates/admin/revendeurs/create.html.twig b/templates/admin/revendeurs/create.html.twig index 9237711..ccd25c3 100644 --- a/templates/admin/revendeurs/create.html.twig +++ b/templates/admin/revendeurs/create.html.twig @@ -23,18 +23,18 @@ <h2 class="text-sm font-black uppercase tracking-widest mb-4">Identite</h2> <div class="grid grid-cols-1 md:grid-cols-3 gap-4"> <div> - <label class="block text-xs font-black uppercase tracking-widest mb-2">Prenom *</label> - <input type="text" name="firstName" required placeholder="Prenom" + <label for="firstName" class="block text-xs font-black uppercase tracking-widest mb-2">Prenom *</label> + <input type="text" id="firstName" name="firstName" required placeholder="Prenom" class="w-full px-4 py-3 border-2 border-gray-900 bg-white text-sm font-bold focus:outline-none focus:border-indigo-600 focus:shadow-[4px_4px_0px_rgba(79,70,229,0.3)]"> </div> <div> - <label class="block text-xs font-black uppercase tracking-widest mb-2">Nom *</label> - <input type="text" name="lastName" required placeholder="Nom" + <label for="lastName" class="block text-xs font-black uppercase tracking-widest mb-2">Nom *</label> + <input type="text" id="lastName" name="lastName" required placeholder="Nom" class="w-full px-4 py-3 border-2 border-gray-900 bg-white text-sm font-bold focus:outline-none focus:border-indigo-600 focus:shadow-[4px_4px_0px_rgba(79,70,229,0.3)]"> </div> <div> - <label class="block text-xs font-black uppercase tracking-widest mb-2">Email *</label> - <input type="email" name="email" required placeholder="email@exemple.fr" + <label for="email" class="block text-xs font-black uppercase tracking-widest mb-2">Email *</label> + <input type="email" id="email" name="email" required placeholder="email@exemple.fr" class="w-full px-4 py-3 border-2 border-gray-900 bg-white text-sm font-bold focus:outline-none focus:border-indigo-600 focus:shadow-[4px_4px_0px_rgba(79,70,229,0.3)]"> </div> </div> @@ -44,18 +44,18 @@ <h2 class="text-sm font-black uppercase tracking-widest mb-4">Entreprise</h2> <div class="grid grid-cols-1 md:grid-cols-3 gap-4"> <div> - <label class="block text-xs font-black uppercase tracking-widest mb-2">Raison sociale</label> - <input type="text" name="raisonSociale" placeholder="Nom de l'entreprise" + <label for="raisonSociale" class="block text-xs font-black uppercase tracking-widest mb-2">Raison sociale</label> + <input type="text" id="raisonSociale" name="raisonSociale" placeholder="Nom de l'entreprise" class="w-full px-4 py-3 border-2 border-gray-900 bg-white text-sm font-bold focus:outline-none focus:border-indigo-600 focus:shadow-[4px_4px_0px_rgba(79,70,229,0.3)]"> </div> <div> - <label class="block text-xs font-black uppercase tracking-widest mb-2">SIRET</label> - <input type="text" name="siret" maxlength="14" placeholder="12345678901234" + <label for="siret" class="block text-xs font-black uppercase tracking-widest mb-2">SIRET</label> + <input type="text" id="siret" name="siret" maxlength="14" placeholder="12345678901234" class="w-full px-4 py-3 border-2 border-gray-900 bg-white text-sm font-bold focus:outline-none focus:border-indigo-600 focus:shadow-[4px_4px_0px_rgba(79,70,229,0.3)]"> </div> <div> - <label class="block text-xs font-black uppercase tracking-widest mb-2">Telephone</label> - <input type="tel" name="phone" placeholder="06 12 34 56 78" + <label for="phone" class="block text-xs font-black uppercase tracking-widest mb-2">Telephone</label> + <input type="tel" id="phone" name="phone" placeholder="06 12 34 56 78" class="w-full px-4 py-3 border-2 border-gray-900 bg-white text-sm font-bold focus:outline-none focus:border-indigo-600 focus:shadow-[4px_4px_0px_rgba(79,70,229,0.3)]"> </div> </div> @@ -65,19 +65,19 @@ <h2 class="text-sm font-black uppercase tracking-widest mb-4">Adresse</h2> <div class="flex flex-col gap-4"> <div> - <label class="block text-xs font-black uppercase tracking-widest mb-2">Adresse</label> - <input type="text" name="address" placeholder="Numero et rue" + <label for="address" class="block text-xs font-black uppercase tracking-widest mb-2">Adresse</label> + <input type="text" id="address" name="address" placeholder="Numero et rue" class="w-full px-4 py-3 border-2 border-gray-900 bg-white text-sm font-bold focus:outline-none focus:border-indigo-600 focus:shadow-[4px_4px_0px_rgba(79,70,229,0.3)]"> </div> <div class="grid grid-cols-1 md:grid-cols-2 gap-4"> <div> - <label class="block text-xs font-black uppercase tracking-widest mb-2">Code postal</label> - <input type="text" name="zipCode" maxlength="10" placeholder="02800" + <label for="zipCode" class="block text-xs font-black uppercase tracking-widest mb-2">Code postal</label> + <input type="text" id="zipCode" name="zipCode" maxlength="10" placeholder="02800" class="w-full px-4 py-3 border-2 border-gray-900 bg-white text-sm font-bold focus:outline-none focus:border-indigo-600 focus:shadow-[4px_4px_0px_rgba(79,70,229,0.3)]"> </div> <div> - <label class="block text-xs font-black uppercase tracking-widest mb-2">Ville</label> - <input type="text" name="city" placeholder="Beautor" + <label for="city" class="block text-xs font-black uppercase tracking-widest mb-2">Ville</label> + <input type="text" id="city" name="city" placeholder="Beautor" class="w-full px-4 py-3 border-2 border-gray-900 bg-white text-sm font-bold focus:outline-none focus:border-indigo-600 focus:shadow-[4px_4px_0px_rgba(79,70,229,0.3)]"> </div> </div> diff --git a/templates/admin/revendeurs/edit.html.twig b/templates/admin/revendeurs/edit.html.twig index 2bc8246..3a22ff6 100644 --- a/templates/admin/revendeurs/edit.html.twig +++ b/templates/admin/revendeurs/edit.html.twig @@ -25,24 +25,24 @@ <h2 class="text-sm font-black uppercase tracking-widest mb-4">Entreprise</h2> <div class="grid grid-cols-1 md:grid-cols-3 gap-4"> <div> - <label class="block text-xs font-black uppercase tracking-widest mb-2">Raison sociale</label> - <input type="text" name="raisonSociale" value="{{ revendeur.raisonSociale }}" placeholder="Nom de l'entreprise" + <label for="raisonSociale" class="block text-xs font-black uppercase tracking-widest mb-2">Raison sociale</label> + <input type="text" id="raisonSociale" name="raisonSociale" value="{{ revendeur.raisonSociale }}" placeholder="Nom de l'entreprise" class="w-full px-4 py-3 border-2 border-gray-900 bg-white text-sm font-bold focus:outline-none focus:border-indigo-600 focus:shadow-[4px_4px_0px_rgba(79,70,229,0.3)]"> </div> <div> - <label class="block text-xs font-black uppercase tracking-widest mb-2">SIRET</label> - <input type="text" name="siret" value="{{ revendeur.siret }}" maxlength="14" placeholder="12345678901234" + <label for="siret" class="block text-xs font-black uppercase tracking-widest mb-2">SIRET</label> + <input type="text" id="siret" name="siret" value="{{ revendeur.siret }}" maxlength="14" placeholder="12345678901234" class="w-full px-4 py-3 border-2 border-gray-900 bg-white text-sm font-bold focus:outline-none focus:border-indigo-600 focus:shadow-[4px_4px_0px_rgba(79,70,229,0.3)]"> </div> <div> - <label class="block text-xs font-black uppercase tracking-widest mb-2">Telephone</label> - <input type="tel" name="phone" value="{{ revendeur.phone }}" placeholder="06 12 34 56 78" + <label for="phone" class="block text-xs font-black uppercase tracking-widest mb-2">Telephone</label> + <input type="tel" id="phone" name="phone" value="{{ revendeur.phone }}" placeholder="06 12 34 56 78" class="w-full px-4 py-3 border-2 border-gray-900 bg-white text-sm font-bold focus:outline-none focus:border-indigo-600 focus:shadow-[4px_4px_0px_rgba(79,70,229,0.3)]"> </div> </div> <div class="mt-4"> - <label class="block text-xs font-black uppercase tracking-widest mb-2">Email</label> - <input type="email" name="email" value="{{ revendeur.email }}" placeholder="email@exemple.fr" + <label for="email" class="block text-xs font-black uppercase tracking-widest mb-2">Email</label> + <input type="email" id="email" name="email" value="{{ revendeur.email }}" placeholder="email@exemple.fr" class="w-full px-4 py-3 border-2 border-gray-900 bg-white text-sm font-bold focus:outline-none focus:border-indigo-600 focus:shadow-[4px_4px_0px_rgba(79,70,229,0.3)]"> </div> </section> @@ -51,19 +51,19 @@ <h2 class="text-sm font-black uppercase tracking-widest mb-4">Adresse</h2> <div class="flex flex-col gap-4"> <div> - <label class="block text-xs font-black uppercase tracking-widest mb-2">Adresse</label> - <input type="text" name="address" value="{{ revendeur.address }}" placeholder="Numero et rue" + <label for="address" class="block text-xs font-black uppercase tracking-widest mb-2">Adresse</label> + <input type="text" id="address" name="address" value="{{ revendeur.address }}" placeholder="Numero et rue" class="w-full px-4 py-3 border-2 border-gray-900 bg-white text-sm font-bold focus:outline-none focus:border-indigo-600 focus:shadow-[4px_4px_0px_rgba(79,70,229,0.3)]"> </div> <div class="grid grid-cols-1 md:grid-cols-2 gap-4"> <div> - <label class="block text-xs font-black uppercase tracking-widest mb-2">Code postal</label> - <input type="text" name="zipCode" value="{{ revendeur.zipCode }}" maxlength="10" placeholder="02800" + <label for="zipCode" class="block text-xs font-black uppercase tracking-widest mb-2">Code postal</label> + <input type="text" id="zipCode" name="zipCode" value="{{ revendeur.zipCode }}" maxlength="10" placeholder="02800" class="w-full px-4 py-3 border-2 border-gray-900 bg-white text-sm font-bold focus:outline-none focus:border-indigo-600 focus:shadow-[4px_4px_0px_rgba(79,70,229,0.3)]"> </div> <div> - <label class="block text-xs font-black uppercase tracking-widest mb-2">Ville</label> - <input type="text" name="city" value="{{ revendeur.city }}" placeholder="Beautor" + <label for="city" class="block text-xs font-black uppercase tracking-widest mb-2">Ville</label> + <input type="text" id="city" name="city" value="{{ revendeur.city }}" placeholder="Beautor" class="w-full px-4 py-3 border-2 border-gray-900 bg-white text-sm font-bold focus:outline-none focus:border-indigo-600 focus:shadow-[4px_4px_0px_rgba(79,70,229,0.3)]"> </div> </div> diff --git a/templates/admin/stats/index.html.twig b/templates/admin/stats/index.html.twig index 93cd920..3cbdf68 100644 --- a/templates/admin/stats/index.html.twig +++ b/templates/admin/stats/index.html.twig @@ -10,7 +10,7 @@ <form method="get" action="{{ path('app_admin_stats_index') }}" class="mb-6 border-2 border-gray-900 bg-white p-4 shadow-[4px_4px_0px_rgba(0,0,0,1)]"> <div class="flex flex-wrap items-end gap-3"> <div> - <label class="block text-[9px] font-black uppercase tracking-widest text-gray-400 mb-1">Periode</label> + <label for="stats-period-select" class="block text-[9px] font-black uppercase tracking-widest text-gray-400 mb-1">Periode</label> <select name="period" id="stats-period-select" class="px-3 py-2 border-2 border-gray-900 text-xs font-bold bg-white"> <option value="current" {{ period == 'current' ? 'selected' }}>Mois en cours</option> <option value="1" {{ period == '1' ? 'selected' }}>-1 mois</option> @@ -25,12 +25,12 @@ </div> <div id="stats-custom-range" class="{{ period == 'custom' ? '' : 'hidden' }} flex items-end gap-3"> <div> - <label class="block text-[9px] font-black uppercase tracking-widest text-gray-400 mb-1">Du</label> - <input type="date" name="from" value="{{ dateFrom }}" class="px-3 py-2 border-2 border-gray-900 text-xs font-bold bg-white"> + <label for="from" class="block text-[9px] font-black uppercase tracking-widest text-gray-400 mb-1">Du</label> + <input type="date" id="from" name="from" value="{{ dateFrom }}" class="px-3 py-2 border-2 border-gray-900 text-xs font-bold bg-white"> </div> <div> - <label class="block text-[9px] font-black uppercase tracking-widest text-gray-400 mb-1">Au</label> - <input type="date" name="to" value="{{ dateTo }}" class="px-3 py-2 border-2 border-gray-900 text-xs font-bold bg-white"> + <label for="to" class="block text-[9px] font-black uppercase tracking-widest text-gray-400 mb-1">Au</label> + <input type="date" id="to" name="to" value="{{ dateTo }}" class="px-3 py-2 border-2 border-gray-900 text-xs font-bold bg-white"> </div> </div> <button type="submit" class="px-4 py-2 border-2 border-gray-900 bg-[#fabf04] font-black uppercase text-[10px] tracking-widest hover:bg-yellow-500 transition-all"> diff --git a/templates/admin/status/index.html.twig b/templates/admin/status/index.html.twig index 20649c9..8e4f24b 100644 --- a/templates/admin/status/index.html.twig +++ b/templates/admin/status/index.html.twig @@ -54,29 +54,29 @@ <h2 class="text-sm font-black uppercase tracking-widest mb-3">Publier un message</h2> <form method="post" action="{{ path('app_admin_status_message_create') }}" class="flex flex-wrap items-end gap-3"> <div class="w-40"> - <label class="block text-[9px] font-black uppercase tracking-widest text-gray-400 mb-1">Service</label> - <select name="service_id" required class="w-full px-3 py-2 border-2 border-gray-900 text-xs font-bold bg-white"> + <label for="service_id" class="block text-[9px] font-black uppercase tracking-widest text-gray-400 mb-1">Service</label> + <select id="service_id" name="service_id" required class="w-full px-3 py-2 border-2 border-gray-900 text-xs font-bold bg-white"> {% for service in allServices %} <option value="{{ service.id }}">{{ service.name }}</option> {% endfor %} </select> </div> <div class="w-24"> - <label class="block text-[9px] font-black uppercase tracking-widest text-gray-400 mb-1">Severite</label> - <select name="severity" class="w-full px-3 py-2 border-2 border-gray-900 text-xs font-bold bg-white"> + <label for="severity" class="block text-[9px] font-black uppercase tracking-widest text-gray-400 mb-1">Severite</label> + <select id="severity" name="severity" class="w-full px-3 py-2 border-2 border-gray-900 text-xs font-bold bg-white"> <option value="info">Info</option> <option value="warning">Warning</option> <option value="critical">Critical</option> </select> </div> <div class="flex-1 min-w-[120px]"> - <label class="block text-[9px] font-black uppercase tracking-widest text-gray-400 mb-1">Titre</label> - <input type="text" name="title" required placeholder="Ex: Maintenance prevue..." + <label for="title" class="block text-[9px] font-black uppercase tracking-widest text-gray-400 mb-1">Titre</label> + <input id="title" type="text" name="title" required placeholder="Ex: Maintenance prevue..." class="w-full px-3 py-2 border-2 border-gray-900 text-xs font-bold bg-white"> </div> <div class="flex-1 min-w-[150px]"> - <label class="block text-[9px] font-black uppercase tracking-widest text-gray-400 mb-1">Message</label> - <input type="text" name="content" required placeholder="Details..." + <label for="content" class="block text-[9px] font-black uppercase tracking-widest text-gray-400 mb-1">Message</label> + <input id="content" type="text" name="content" required placeholder="Details..." class="w-full px-3 py-2 border-2 border-gray-900 text-xs font-bold bg-white"> </div> <button type="submit" class="px-4 py-2 border-2 border-gray-900 bg-[#fabf04] font-black uppercase text-[10px] tracking-widest hover:bg-yellow-500 transition-all"> @@ -155,8 +155,8 @@ <div class="px-4 py-3 border-t border-gray-200 bg-gray-50"> <form method="post" action="{{ path('app_admin_status_update', {id: service.id}) }}" class="flex flex-wrap items-end gap-3"> <div> - <label class="block text-[9px] font-black uppercase tracking-widest text-gray-400 mb-1">Statut</label> - <select name="status" class="px-3 py-1.5 border-2 border-gray-900 text-xs font-bold bg-white"> + <label for="status_{{ service.id }}" class="block text-[9px] font-black uppercase tracking-widest text-gray-400 mb-1">Statut</label> + <select id="status_{{ service.id }}" name="status" class="px-3 py-1.5 border-2 border-gray-900 text-xs font-bold bg-white"> <option value="up" {{ service.status == 'up' ? 'selected' }}>Up</option> <option value="degraded" {{ service.status == 'degraded' ? 'selected' }}>Degrade</option> <option value="down" {{ service.status == 'down' ? 'selected' }}>Down</option> @@ -165,8 +165,8 @@ </select> </div> <div class="flex-1"> - <label class="block text-[9px] font-black uppercase tracking-widest text-gray-400 mb-1">Message</label> - <input type="text" name="message" value="{{ service.message }}" placeholder="Message optionnel..." + <label for="message_{{ service.id }}" class="block text-[9px] font-black uppercase tracking-widest text-gray-400 mb-1">Message</label> + <input id="message_{{ service.id }}" type="text" name="message" value="{{ service.message }}" placeholder="Message optionnel..." class="w-full px-3 py-1.5 border-2 border-gray-900 text-xs font-bold bg-white"> </div> <button type="submit" class="px-4 py-1.5 border-2 border-gray-900 bg-[#fabf04] font-black uppercase text-[10px] tracking-widest hover:bg-yellow-500 transition-all"> diff --git a/templates/admin/status/manage.html.twig b/templates/admin/status/manage.html.twig index 4ee6bf5..4706ddf 100644 --- a/templates/admin/status/manage.html.twig +++ b/templates/admin/status/manage.html.twig @@ -25,13 +25,13 @@ <div class="border-2 border-gray-900 bg-white p-6 shadow-[4px_4px_0px_rgba(0,0,0,1)]"> <form method="post" action="{{ path('app_admin_status_category_create') }}" class="flex flex-wrap items-end gap-4"> <div class="flex-1 min-w-[200px]"> - <label class="block text-xs font-black uppercase tracking-widest mb-2">Nom</label> - <input type="text" name="name" required placeholder="Ex: Hebergement Web" + <label for="category_name" class="block text-xs font-black uppercase tracking-widest mb-2">Nom</label> + <input id="category_name" type="text" name="name" required placeholder="Ex: Hebergement Web" class="w-full px-4 py-3 border-2 border-gray-900 bg-white text-sm font-bold focus:outline-none focus:border-indigo-600"> </div> <div class="w-24"> - <label class="block text-xs font-black uppercase tracking-widest mb-2">Position</label> - <input type="number" name="position" value="0" + <label for="category_position" class="block text-xs font-black uppercase tracking-widest mb-2">Position</label> + <input id="category_position" type="number" name="position" value="0" class="w-full px-4 py-3 border-2 border-gray-900 bg-white text-sm font-bold focus:outline-none focus:border-indigo-600"> </div> <button type="submit" class="px-6 py-3 border-2 border-gray-900 bg-[#fabf04] font-black uppercase text-sm tracking-widest hover:bg-yellow-500 transition-all shadow-[4px_4px_0px_rgba(0,0,0,1)] hover:shadow-[2px_2px_0px_rgba(0,0,0,1)] active:shadow-none active:translate-x-1 active:translate-y-1"> @@ -98,18 +98,18 @@ <form method="post" action="{{ path('app_admin_status_service_create') }}" class="flex flex-wrap items-end gap-3"> <input type="hidden" name="category_id" value="{{ category.id }}"> <div class="flex-1 min-w-[120px]"> - <label class="block text-[9px] font-black uppercase tracking-widest text-gray-400 mb-1">Nom</label> - <input type="text" name="name" required placeholder="Ex: CRM Ecosplay" + <label for="service_name_{{ category.id }}" class="block text-[9px] font-black uppercase tracking-widest text-gray-400 mb-1">Nom</label> + <input id="service_name_{{ category.id }}" type="text" name="name" required placeholder="Ex: CRM Ecosplay" class="w-full px-3 py-2 border-2 border-gray-900 bg-white text-xs font-bold focus:outline-none focus:border-indigo-600"> </div> <div class="flex-1 min-w-[120px]"> - <label class="block text-[9px] font-black uppercase tracking-widest text-gray-400 mb-1">URL</label> - <input type="url" name="url" placeholder="https://..." + <label for="service_url_{{ category.id }}" class="block text-[9px] font-black uppercase tracking-widest text-gray-400 mb-1">URL</label> + <input id="service_url_{{ category.id }}" type="url" name="url" placeholder="https://..." class="w-full px-3 py-2 border-2 border-gray-900 bg-white text-xs font-bold focus:outline-none focus:border-indigo-600"> </div> <div class="w-28"> - <label class="block text-[9px] font-black uppercase tracking-widest text-gray-400 mb-1">Type</label> - <select name="external_type" class="w-full px-3 py-2 border-2 border-gray-900 bg-white text-xs font-bold"> + <label for="service_external_type_{{ category.id }}" class="block text-[9px] font-black uppercase tracking-widest text-gray-400 mb-1">Type</label> + <select id="service_external_type_{{ category.id }}" name="external_type" class="w-full px-3 py-2 border-2 border-gray-900 bg-white text-xs font-bold"> <option value="">Interne</option> <option value="stripe">Stripe</option> <option value="docuseal">DocuSeal</option> @@ -118,8 +118,8 @@ </select> </div> <div class="w-16"> - <label class="block text-[9px] font-black uppercase tracking-widest text-gray-400 mb-1">Pos.</label> - <input type="number" name="position" value="0" + <label for="service_position_{{ category.id }}" class="block text-[9px] font-black uppercase tracking-widest text-gray-400 mb-1">Pos.</label> + <input id="service_position_{{ category.id }}" type="number" name="position" value="0" class="w-full px-3 py-2 border-2 border-gray-900 bg-white text-xs font-bold focus:outline-none focus:border-indigo-600"> </div> <button type="submit" class="px-4 py-2 border-2 border-gray-900 bg-[#fabf04] font-black uppercase text-[10px] tracking-widest hover:bg-yellow-500 transition-all"> diff --git a/templates/email/base.html.twig b/templates/email/base.html.twig index 0b91f5b..f78f293 100644 --- a/templates/email/base.html.twig +++ b/templates/email/base.html.twig @@ -6,13 +6,13 @@ <title>{% block title %}CRM Ecosplay{% endblock %} - +

Cet email ne s'affiche pas correctement ? Voir en ligne

- +
CRM Ecosplay diff --git a/templates/emails/membre_created.html.twig b/templates/emails/membre_created.html.twig index cd8363d..6553e3c 100644 --- a/templates/emails/membre_created.html.twig +++ b/templates/emails/membre_created.html.twig @@ -8,7 +8,7 @@

Vos identifiants de connexion

- +
@@ -45,7 +45,7 @@ {% endif %} -
Email {{ email }}
+
Se connecter diff --git a/templates/emails/revendeur_created.html.twig b/templates/emails/revendeur_created.html.twig index 3a99d1c..c4b4903 100644 --- a/templates/emails/revendeur_created.html.twig +++ b/templates/emails/revendeur_created.html.twig @@ -13,7 +13,7 @@

Pour acceder a votre espace, suivez ces etapes :

- +

Etape 1

@@ -36,7 +36,7 @@
- +
Definir mon mot de passe @@ -44,7 +44,7 @@
- +
Acceder a la page de connexion @@ -54,7 +54,7 @@

Informations de votre compte :

- +
diff --git a/templates/emails/rgpd_attestation_signed.html.twig b/templates/emails/rgpd_attestation_signed.html.twig index 910fae9..27bdcf4 100644 --- a/templates/emails/rgpd_attestation_signed.html.twig +++ b/templates/emails/rgpd_attestation_signed.html.twig @@ -6,7 +6,7 @@

Attestation RGPD signee

Bonjour,

Suite a votre demande, vous trouverez en piece jointe votre attestation d'{{ typeName }}, signee electroniquement par l'association E-Cosplay.

-
Code revendeur {{ codeRevendeur }}
+
diff --git a/templates/pdf/contrat_revendeur.html.twig b/templates/pdf/contrat_revendeur.html.twig index 2a6cb1f..50d08a3 100644 --- a/templates/pdf/contrat_revendeur.html.twig +++ b/templates/pdf/contrat_revendeur.html.twig @@ -2,6 +2,7 @@ + Contrat Revendeur - E-Cosplay
Reference {{ attestation.reference }}