fix(user): Appel à la route de modification d'un utilisateur dans l'API. (PATCH /ldap/user/update/{email})

- Adaptation de l'objet kazUser pour qu'il corresponde a l'attente de l'api.
This commit is contained in:
MLeveque
2026-04-05 14:07:50 +02:00
parent 7400d0d418
commit 6f9523f9e7
3 changed files with 64 additions and 27 deletions

View File

@@ -83,19 +83,13 @@ class UserController extends AbstractController
// --- Fin gestion de l'image de profil --- // --- Fin gestion de l'image de profil ---
// Synchronisation des données avec l'API // Synchronisation des données avec l'API
$kazUser = [ $kazUser = $user->convertToKazUser();
'telephone' => $form->get('telephone')->getData(),
'alternateEmail' => $form->get('alternateEmail')->getData(),
];
try { try {
$apiKazService->updateUserData($user->getEmail(), $kazUser); $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()); $this->addFlash('error', 'Impossible de mettre à jour votre profil' . $e->getMessage());
} }
// Sauvegarde en base de données // Sauvegarde en base de données
$entityManager->flush(); $entityManager->flush();
// Message de confirmation et rechargement de la page // Message de confirmation et rechargement de la page

View File

@@ -74,6 +74,12 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface
#[ORM\Column(length: 20, nullable: true, name: 'telephone')] #[ORM\Column(length: 20, nullable: true, name: 'telephone')]
private ?string $telephone = null; private ?string $telephone = null;
private ?string $numeroMembre = null;
private ?bool $mailEnabled = null;
private ?string $mailAlias = null;
public function __construct() { public function __construct() {
$this->emailQuota = self::EMAIL_QUOTA_DEFAULT; $this->emailQuota = self::EMAIL_QUOTA_DEFAULT;
} }
@@ -312,6 +318,42 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface
return $this; 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 // Fonction qui permet d'afficher les données de l'API sur la page de profil
public function updateFromKazUser($kazUser) : User public function updateFromKazUser($kazUser) : User
{ {
@@ -332,31 +374,24 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface
$this->setNextcloudQuota($kazUser['nextcloudQuota']); $this->setNextcloudQuota($kazUser['nextcloudQuota']);
$this->setQuota($kazUser['quota']); $this->setQuota($kazUser['quota']);
$this->setIdentifiantKaz($kazUser['identifiantKaz']); $this->setIdentifiantKaz($kazUser['identifiantKaz']);
$this->setTelephone($kazUser['telephone'] ?? null);
return $this; return $this;
} }
// Fonction qui permet de convertir les données de l'API vers $kazUser // Fonction qui permet de convertir les données de l'API vers $kazUser
public function convertToKazUser() : array public function convertToKazUser() : array
{ {
$fullName = implode(' ', array_filter([ $data = [
$this->getFirstName(), 'numeroMembre' => $this->getNumeroMembre(),
$this->getLastName()
]));
return [
'mail' => $this->getEmail(),
'sn' => $fullName,
'mailDeSecours' => $this->getAlternateEmail(), 'mailDeSecours' => $this->getAlternateEmail(),
'mailQuota' => $this->getEmailQuota(), 'mailEnabled' => $this->isMailEnabled(),
'agoraEnabled' => $this->hasAgoraAccess(),
'mobilizonEnabled' => $this->hasMobilizon(),
'nextcloudEnabled' => $this->hasNextcloudAccess(), 'nextcloudEnabled' => $this->hasNextcloudAccess(),
'nextcloudQuota' => $this->getNextcloudQuota(), 'mobilizonEnabled' => $this->hasMobilizon(),
'quota' => $this->getQuota(), 'agoraEnabled' => $this->hasAgoraAccess(),
'identifiantKaz' => $this->getIdentifiantKaz(), 'identifiantKaz' => $this->getIdentifiantKaz(),
'telephone' => $this->getTelephone(), 'mailAlias' => $this->getMailAlias(),
'quota' => $this->getQuota(),
]; ];
return array_filter($data, fn($value) => $value !== null);
} }
} }

View File

@@ -85,12 +85,20 @@ class KazApiService
/** /**
* Envoie les nouvelles données saisies par l'utilisateur vers l'API * 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 public function updateUserData(string $email, array $kazUser): void
{ {
$options['headers']['Authorization'] = 'Bearer ' . $this->getToken(); $options['headers']['Authorization'] = 'Bearer ' . $this->getToken();
$options['body'] = json_encode($kazUser); $options['headers']['Content-Type'] = 'application/json';
// $response = $this->kazApiClient->request('PUT', "/ldap/user/add/$email", $options); $options['json'] = $kazUser;
$response = $this->kazApiClient->request('PATCH', "/ldap/user/update/$email", $options);
if ($response->getStatusCode() !== 200) { if ($response->getStatusCode() !== 200) {
throw new Exception('Erreur lors de l\'appel API : ' . $response->getStatusCode()); throw new Exception('Erreur lors de l\'appel API : ' . $response->getStatusCode());