From 6f9523f9e746a482f98e1194fa0bed7f52419b1b Mon Sep 17 00:00:00 2001 From: MLeveque Date: Sun, 5 Apr 2026 14:07:50 +0200 Subject: [PATCH] =?UTF-8?q?fix(user):=20Appel=20=C3=A0=20la=20route=20de?= =?UTF-8?q?=20modification=20d'un=20utilisateur=20dans=20l'API.=20(PATCH?= =?UTF-8?q?=20/ldap/user/update/{email})?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Adaptation de l'objet kazUser pour qu'il corresponde a l'attente de l'api. --- src/Controller/UserController.php | 12 ++---- src/Entity/User.php | 67 +++++++++++++++++++++++-------- src/Service/KazApiService.php | 12 +++++- 3 files changed, 64 insertions(+), 27 deletions(-) diff --git a/src/Controller/UserController.php b/src/Controller/UserController.php index 04ef9b0..d51e365 100644 --- a/src/Controller/UserController.php +++ b/src/Controller/UserController.php @@ -82,20 +82,14 @@ class UserController extends AbstractController } // --- 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(), - ]; + // Synchronisation des données avec l'API + $kazUser = $user->convertToKazUser(); try { $apiKazService->updateUserData($user->getEmail(), $kazUser); - - $this->addFlash('success', 'Votre profil a été mis à jour avec succès !'); - } catch (Exception $e) { + } catch (Exception $e) { $this->addFlash('error', 'Impossible de mettre à jour votre profil' . $e->getMessage()); } - // Sauvegarde en base de données $entityManager->flush(); // Message de confirmation et rechargement de la page diff --git a/src/Entity/User.php b/src/Entity/User.php index 7612ce4..d52b38d 100644 --- a/src/Entity/User.php +++ b/src/Entity/User.php @@ -74,6 +74,12 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface #[ORM\Column(length: 20, nullable: true, name: 'telephone')] private ?string $telephone = null; + private ?string $numeroMembre = null; + + private ?bool $mailEnabled = null; + + private ?string $mailAlias = null; + public function __construct() { $this->emailQuota = self::EMAIL_QUOTA_DEFAULT; } @@ -312,6 +318,42 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface return $this; } + public function getNumeroMembre(): ?string + { + return $this->numeroMembre; + } + + public function setNumeroMembre(?string $numeroMembre): static + { + $this->numeroMembre = $numeroMembre; + + return $this; + } + + public function isMailEnabled(): ?bool + { + return $this->mailEnabled; + } + + public function setMailEnabled(?bool $mailEnabled): static + { + $this->mailEnabled = $mailEnabled; + + return $this; + } + + public function getMailAlias(): ?string + { + return $this->mailAlias; + } + + public function setMailAlias(?string $mailAlias): static + { + $this->mailAlias = $mailAlias; + + return $this; + } + // Fonction qui permet d'afficher les données de l'API sur la page de profil public function updateFromKazUser($kazUser) : User { @@ -332,31 +374,24 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface $this->setNextcloudQuota($kazUser['nextcloudQuota']); $this->setQuota($kazUser['quota']); $this->setIdentifiantKaz($kazUser['identifiantKaz']); - $this->setTelephone($kazUser['telephone'] ?? null); - 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, + $data = [ + 'numeroMembre' => $this->getNumeroMembre(), 'mailDeSecours' => $this->getAlternateEmail(), - 'mailQuota' => $this->getEmailQuota(), - 'agoraEnabled' => $this->hasAgoraAccess(), - 'mobilizonEnabled' => $this->hasMobilizon(), + 'mailEnabled' => $this->isMailEnabled(), 'nextcloudEnabled' => $this->hasNextcloudAccess(), - 'nextcloudQuota' => $this->getNextcloudQuota(), - 'quota' => $this->getQuota(), + 'mobilizonEnabled' => $this->hasMobilizon(), + 'agoraEnabled' => $this->hasAgoraAccess(), 'identifiantKaz' => $this->getIdentifiantKaz(), - 'telephone' => $this->getTelephone(), + 'mailAlias' => $this->getMailAlias(), + 'quota' => $this->getQuota(), ]; + + return array_filter($data, fn($value) => $value !== null); } } diff --git a/src/Service/KazApiService.php b/src/Service/KazApiService.php index 274de14..10a80c9 100644 --- a/src/Service/KazApiService.php +++ b/src/Service/KazApiService.php @@ -85,12 +85,20 @@ class KazApiService /** * Envoie les nouvelles données saisies par l'utilisateur vers l'API + * + * @throws ClientExceptionInterface + * @throws DecodingExceptionInterface + * @throws RedirectionExceptionInterface + * @throws ServerExceptionInterface + * @throws TransportExceptionInterface + * @throws Exception */ 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); + $options['headers']['Content-Type'] = 'application/json'; + $options['json'] = $kazUser; + $response = $this->kazApiClient->request('PATCH', "/ldap/user/update/$email", $options); if ($response->getStatusCode() !== 200) { throw new Exception('Erreur lors de l\'appel API : ' . $response->getStatusCode());