feat: mise à jour du profil utilisateur et intégration API Kaz (synchro des données, gestion des erreurs et succès) + divers correctifs (liens externes, simplifications de commentaires)
This commit is contained in:
@@ -58,7 +58,7 @@ class UserController extends AbstractController
|
||||
// Initialisation de la variable $userData
|
||||
$user = $user->updateFromKazUser($kazUser);
|
||||
} catch (Exception $e) {
|
||||
$this->addFlash('error', 'Impossible de charger vos données.');
|
||||
$this->addFlash('error', 'Impossible de charger vos données.' . $e->getMessage());
|
||||
}
|
||||
|
||||
// Création du formulaire lié à l'utilisateur connecté
|
||||
@@ -80,6 +80,21 @@ class UserController extends AbstractController
|
||||
$newFilename = $fileUploader->upload($imageFile);
|
||||
$user->setImage($newFilename);
|
||||
}
|
||||
// --- Fin gestion de l'image de profil ---
|
||||
|
||||
// Synchronisation des données avec l'API
|
||||
$kazUser = [
|
||||
'telephone' => $form->get('telephone')->getData(),
|
||||
'alternateEmail' => $form->get('alternateEmail')->getData(),
|
||||
];
|
||||
|
||||
try {
|
||||
$apiKazService->updateUserData($user->getEmail(), $kazUser);
|
||||
|
||||
$this->addFlash('success', 'Votre profil a été mis à jour avec succès !');
|
||||
} catch (Exception $e) {
|
||||
$this->addFlash('error', 'Impossible de mettre à jour votre profil' . $e->getMessage());
|
||||
}
|
||||
|
||||
// Sauvegarde en base de données
|
||||
$entityManager->flush();
|
||||
|
||||
@@ -10,35 +10,36 @@ use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
|
||||
|
||||
class AppFixtures extends Fixture
|
||||
{
|
||||
# Initialisation de l'outil de hachage de Symfony
|
||||
// Initialisation de l'outil de hachage de Symfony
|
||||
private UserPasswordHasherInterface $hasher;
|
||||
|
||||
# Injection de dépendance pour récupérer le service de sécurité
|
||||
// Injection de dépendance pour récupérer le service de sécurité
|
||||
public function __construct(UserPasswordHasherInterface $hasher)
|
||||
{
|
||||
$this->hasher = $hasher;
|
||||
}
|
||||
|
||||
# Méthode principale qui génère les données en base
|
||||
// Méthode principale qui génère des données de test en BDD locale
|
||||
public function load(ObjectManager $manager): void
|
||||
{
|
||||
# Initialisation de Faker en français
|
||||
// --- Création de 10 utilisateurs avec Faker --- //
|
||||
// Initialisation de Faker en français
|
||||
$faker = Factory::create('fr_FR');
|
||||
|
||||
# Boucle pour créer 10 utilisateurs
|
||||
// Boucle pour créer 10 utilisateurs
|
||||
for ($i = 0; $i < 10; $i++) {
|
||||
# Instanciation d'un nouvel utilisateur (Adhérent)
|
||||
// Instanciation d'un nouvel utilisateur (Adhérent)
|
||||
$user = new User();
|
||||
# Attribution d'un email aléatoire et unique
|
||||
// Attribution d'un email aléatoire et unique
|
||||
$user->setEmail($faker->unique()->safeEmail());
|
||||
# Définition des droits d'accès de l'utilisateur
|
||||
// Définition des droits d'accès de l'utilisateur
|
||||
$user->setRoles(['ROLE_USER', 'ROLE_ORGANISATION']);
|
||||
# Hachage sécurisé du mot de passe "password"
|
||||
// Hachage sécurisé du mot de passe "password"
|
||||
$user->setPassword($this->hasher->hashPassword($user, 'password'));
|
||||
# Définition d'un NOM et Prénom
|
||||
// Définition d'un NOM et Prénom
|
||||
$user->setFirstname($faker->firstName());
|
||||
$user->setLastname($faker->lastName());
|
||||
# autres fixtures à modifier plus tard
|
||||
// autres fixtures à modifier plus tard
|
||||
$user->setNextcloudQuota($faker->numberBetween(1, 20) . 'G');
|
||||
$user->setQuota($faker->numberBetween(1, 10) . 'G');
|
||||
$user->setEmailQuota('1G');
|
||||
@@ -47,7 +48,7 @@ class AppFixtures extends Fixture
|
||||
$user->setHasMobilizon($faker->boolean(50));
|
||||
$user->setHasNextcloudAccess($faker->boolean(90));
|
||||
$user->setIdentifiantKaz($faker->uuid());
|
||||
# Préparation de l'enregistrement de l'objet en base de données
|
||||
// Préparation de l'enregistrement de l'objet en base de données
|
||||
$manager->persist($user);
|
||||
}
|
||||
|
||||
@@ -56,10 +57,9 @@ class AppFixtures extends Fixture
|
||||
$admin->setEmail('admin@kaz.bzh');
|
||||
$admin->setRoles(['ROLE_USER', 'ROLE_ADMIN', 'ROLE_ORGANISATION']);
|
||||
$admin->setPassword($this->hasher->hashPassword($admin, 'password'));
|
||||
// Remplissage des champs obligatoires restants pour éviter les erreurs SQL
|
||||
$admin->setFirstName('Admin');
|
||||
$admin->setLastName('KAZ');
|
||||
|
||||
// Remplissage des champs obligatoires restants pour éviter les erreurs SQL
|
||||
$admin->setAlternateEmail('secours@kaz.bzh');
|
||||
$admin->setIdentifiantKaz('ADMIN-KAZ-001');
|
||||
$admin->setQuota('5G');
|
||||
@@ -71,14 +71,13 @@ class AppFixtures extends Fixture
|
||||
|
||||
$manager->persist($admin);
|
||||
|
||||
// Création d'un compte de test fixe
|
||||
// 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');
|
||||
@@ -90,7 +89,24 @@ class AppFixtures extends Fixture
|
||||
|
||||
$manager->persist($melvin);
|
||||
|
||||
# Exécution réelle des requêtes SQL (envoi vers la base), une fois la bouche finie
|
||||
// Création d'un compte de test fixe présent dans le LDAP pour ma présentation
|
||||
$toto = new User();
|
||||
$toto->setEmail('toto@kazkouil.fr');
|
||||
$toto->setRoles(['ROLE_USER', 'ROLE_ADMIN', 'ROLE_ORGANISATION']);
|
||||
$toto->setPassword($this->hasher->hashPassword($toto, 'password'));
|
||||
$toto->setFirstName('');
|
||||
$toto->setLastName('');
|
||||
$toto->setAlternateEmail('');
|
||||
$toto->setIdentifiantKaz('');
|
||||
$toto->setQuota('5G');
|
||||
$toto->setEmailQuota('1G');
|
||||
$toto->setNextcloudQuota('10G');
|
||||
$toto->setHasNextcloudAccess(true);
|
||||
$toto->setHasMobilizon(true);
|
||||
$toto->setHasAgoraAccess(true);
|
||||
$manager->persist($toto);
|
||||
|
||||
// Exécution réelle des requêtes SQL (envoi vers la base), une fois la bouche finie
|
||||
$manager->flush();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -336,4 +336,27 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
// Fonction qui permet de convertir les données de l'API vers $kazUser
|
||||
public function convertToKazUser() : array
|
||||
{
|
||||
$fullName = implode(' ', array_filter([
|
||||
$this->getFirstName(),
|
||||
$this->getLastName()
|
||||
]));
|
||||
|
||||
return [
|
||||
'mail' => $this->getEmail(),
|
||||
'sn' => $fullName,
|
||||
'mailDeSecours' => $this->getAlternateEmail(),
|
||||
'mailQuota' => $this->getEmailQuota(),
|
||||
'agoraEnabled' => $this->hasAgoraAccess(),
|
||||
'mobilizonEnabled' => $this->hasMobilizon(),
|
||||
'nextcloudEnabled' => $this->hasNextcloudAccess(),
|
||||
'nextcloudQuota' => $this->getNextcloudQuota(),
|
||||
'quota' => $this->getQuota(),
|
||||
'identifiantKaz' => $this->getIdentifiantKaz(),
|
||||
'telephone' => $this->getTelephone(),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -90,7 +90,7 @@ class UserProfileType extends AbstractType
|
||||
new Image(
|
||||
maxSize: '8M',
|
||||
extensions: ['jpg', 'jpeg', 'png', 'gif'],
|
||||
extensionsMessage: 'Veuillez déposer une image JPG, JPEG, GIF ou PNG valide',)
|
||||
extensionsMessage: 'Veuillez déposer une image JPG, JPEG, GIF ou PNG valide')
|
||||
],
|
||||
])
|
||||
;
|
||||
|
||||
@@ -4,6 +4,8 @@ namespace App\Service;
|
||||
|
||||
|
||||
use Exception;
|
||||
use Symfony\Component\Mime\Part\DataPart;
|
||||
use Symfony\Component\Mime\Part\Multipart\FormDataPart;
|
||||
use Symfony\Contracts\HttpClient\Exception\ClientExceptionInterface;
|
||||
use Symfony\Contracts\HttpClient\Exception\DecodingExceptionInterface;
|
||||
use Symfony\Contracts\HttpClient\Exception\RedirectionExceptionInterface;
|
||||
@@ -80,4 +82,18 @@ class KazApiService
|
||||
|
||||
return $response->toArray();
|
||||
}
|
||||
|
||||
/**
|
||||
* Envoie les nouvelles données saisies par l'utilisateur vers l'API
|
||||
*/
|
||||
public function updateUserData(string $email, array $kazUser): void
|
||||
{
|
||||
$options['headers']['Authorization'] = 'Bearer ' . $this->getToken();
|
||||
$options['body'] = json_encode($kazUser);
|
||||
// $response = $this->kazApiClient->request('PUT', "/ldap/user/add/$email", $options);
|
||||
|
||||
if ($response->getStatusCode() !== 200) {
|
||||
throw new Exception('Erreur lors de l\'appel API : ' . $response->getStatusCode());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user