CompanyRegistrationService
in package
Pilote le tunnel d'inscription entreprise en plusieurs étapes.
Les données saisies à chaque étape (utilisateur, entreprise, abonnement, paiement) sont
accumulées en session sous des clés préfixées company_registration.*, ce qui permet de
naviguer entre les écrans sans rien écrire en base. La finalisation crée en une seule
transaction l'entité Company, l'abonnement via SubscriptionService et le paiement
via PaymentService, et affecte à l'utilisateur un mot de passe temporaire qu'il devra
changer à la première connexion.
Table of Contents
Properties
- $entityManager : EntityManagerInterface
- $passwordHasher : UserPasswordHasherInterface
- $paymentService : PaymentService
- $requestStack : RequestStack
- $subscriptionService : SubscriptionService
Methods
- __construct() : mixed
- canAccessStep() : bool
- Validate registration step access
- clearRegistrationSession() : void
- Clear all registration session data
- completeRegistration() : User, temporary_password: string, message: string}
- Complete the company registration process
- getStoredCompanyData() : array<string, mixed>|null
- Get stored company data from session
- getStoredPaymentData() : array<string, mixed>|null
- Get stored payment data from session
- getStoredSubscriptionData() : array<string, mixed>|null
- Get stored subscription data from session
- getStoredUserData() : array{id: int|null, email: string|null, name: string|null}|null
- Get stored user data from session
- storeCompanyDetails() : void
- Store company details in session for multi-step form
- storePaymentData() : void
- Store payment data in session (simplified version)
- storePaymentDetails() : void
- Store payment and address details in session
- storeSubscriptionDetails() : void
- Store subscription details in session
- storeUserData() : void
- Store user data in session
- createCompany() : Company
- Create company entity from stored data
- generateTemporaryPassword() : string
- Generate a secure temporary password
Properties
$entityManager
private
EntityManagerInterface
$entityManager
$passwordHasher
private
UserPasswordHasherInterface
$passwordHasher
$paymentService
private
PaymentService
$paymentService
$requestStack
private
RequestStack
$requestStack
$subscriptionService
private
SubscriptionService
$subscriptionService
Methods
__construct()
public
__construct(EntityManagerInterface $entityManager, RequestStack $requestStack, SubscriptionService $subscriptionService, PaymentService $paymentService, UserPasswordHasherInterface $passwordHasher) : mixed
Parameters
- $entityManager : EntityManagerInterface
-
Transaction, persistance et flush de la finalisation.
- $requestStack : RequestStack
-
Accès à la session portant l'état du tunnel.
- $subscriptionService : SubscriptionService
-
Création de l'abonnement de l'entreprise.
- $paymentService : PaymentService
-
Création de l'enregistrement de paiement.
- $passwordHasher : UserPasswordHasherInterface
-
Hachage du mot de passe temporaire généré.
canAccessStep()
Validate registration step access
public
canAccessStep(string $step) : bool
Garde de navigation du tunnel, fondée uniquement sur la présence des blocs en session :
details est toujours accessible (l'e-mail est déjà vérifié à ce stade) ; subscription
exige les données d'entreprise ; payment exige en plus les données d'abonnement ;
confirmation exige les trois blocs. Toute autre valeur renvoie false.
Lecture seule, sans effet de bord.
Parameters
- $step : string
-
Identifiant de l'étape :
details,subscription,paymentouconfirmation.
Return values
bool —true si l'étape peut être affichée en l'état de la session.
clearRegistrationSession()
Clear all registration session data
public
clearRegistrationSession() : void
Supprime les quatre clés company_registration.user, .company, .subscription et
.payment. La clé temporary_password n'est pas touchée, afin que l'e-mail d'accès puisse
encore être envoyé après la finalisation.
Effet de bord : suppression d'entrées en session.
completeRegistration()
Complete the company registration process
public
completeRegistration() : User, temporary_password: string, message: string}
Recharge les quatre blocs de session (utilisateur, entreprise, abonnement, paiement) et
refuse de continuer si l'un d'eux manque. L'utilisateur est rechargé depuis la base par son
identifiant. Dans une transaction unique, la méthode : génère un mot de passe temporaire,
crée et persiste l'entreprise (inactive à la création), rattache l'entreprise à l'utilisateur
en remplaçant son mot de passe par le mot de passe temporaire haché et en positionnant
mustChangePassword, crée l'abonnement via SubscriptionService::createCompanySubscription(),
crée le paiement via PaymentService::createCompanyPayment() et le force au statut
Payment::COMPLETED_STATUS (le débit ayant déjà eu lieu à l'étape précédente), puis active
l'abonnement et l'entreprise. Le mot de passe temporaire en clair est déposé en session sous
la clé temporary_password pour permettre l'envoi ultérieur de l'e-mail, avant flush() et
commit(). Les clés company_registration.* sont enfin purgées, temporary_password étant
volontairement conservée.
Effets de bord : transaction et écritures en base, modification du mot de passe de l'utilisateur, écritures et suppressions en session.
Tags
Return values
User, temporary_password: string, message: string} —Résultat de l'inscription, incluant le mot de passe temporaire en clair.
getStoredCompanyData()
Get stored company data from session
public
getStoredCompanyData() : array<string, mixed>|null
Lecture seule de la clé company_registration.company.
Return values
array<string, mixed>|null —Détails de l'entreprise (name, website, phone,
employeeCount, description), ou null si l'étape n'a pas été franchie.
getStoredPaymentData()
Get stored payment data from session
public
getStoredPaymentData() : array<string, mixed>|null
Lecture seule de la clé company_registration.payment. Le contenu dépend de la méthode
d'écriture utilisée (CompanyRegistrationService::storePaymentDetails() ou
CompanyRegistrationService::storePaymentData()).
Return values
array<string, mixed>|null —Détails du paiement, ou null si l'étape n'a pas été franchie.
getStoredSubscriptionData()
Get stored subscription data from session
public
getStoredSubscriptionData() : array<string, mixed>|null
Lecture seule de la clé company_registration.subscription.
Return values
array<string, mixed>|null —Détails de l'abonnement (plan_id, billing_cycle,
employee_count, amount), ou null si l'étape n'a pas été franchie.
getStoredUserData()
Get stored user data from session
public
getStoredUserData() : array{id: int|null, email: string|null, name: string|null}|null
Lecture seule de la clé company_registration.user.
Return values
array{id: int|null, email: string|null, name: string|null}|null —Extrait de
l'utilisateur, ou null si l'étape correspondante n'a pas encore été franchie.
storeCompanyDetails()
Store company details in session for multi-step form
public
storeCompanyDetails(Company $company) : void
Aplati l'entité Company soumise par le formulaire (nom, site web, téléphone, effectif,
description) dans la clé de session company_registration.company. L'entité elle-même n'est
ni persistée ni conservée : elle sera reconstruite à la finalisation par
CompanyRegistrationService::createCompany().
Effet de bord : écriture en session.
Parameters
- $company : Company
-
Entreprise saisie à l'étape « détails ».
storePaymentData()
Store payment data in session (simplified version)
public
storePaymentData(array<string, mixed> $paymentData) : void
Variante simplifiée qui stocke tel quel le tableau fourni sous la clé
company_registration.payment, sans normalisation. Écrase toute valeur écrite par
CompanyRegistrationService::storePaymentDetails() ; l'appelant doit donc fournir au
minimum la clé payment_method attendue par la finalisation.
Effet de bord : écriture en session.
Parameters
- $paymentData : array<string, mixed>
-
Données de paiement déjà mises en forme par l'appelant.
storePaymentDetails()
Store payment and address details in session
public
storePaymentDetails(Payment $payment, array<string, mixed> $billingAddress[, array<string, mixed>|null $deliveryAddress = null ]) : void
Enregistre sous company_registration.payment le moyen de paiement retenu ainsi que les
adresses de facturation et, optionnellement, de livraison. Seul le moyen de paiement est
extrait de l'entité Payment, qui n'est pas persistée à ce stade.
Effet de bord : écriture en session.
Parameters
- $payment : Payment
-
Paiement en cours de construction.
- $billingAddress : array<string, mixed>
-
Adresse de facturation saisie.
- $deliveryAddress : array<string, mixed>|null = null
-
Adresse de livraison,
nullsi identique ou non applicable.
storeSubscriptionDetails()
Store subscription details in session
public
storeSubscriptionDetails(Subscription $subscription, int $employeeCount) : void
Mémorise sous company_registration.subscription l'identifiant du plan choisi, le cycle de
facturation, le nombre d'employés retenu pour la tarification et le montant calculé.
L'abonnement n'est pas persisté à ce stade.
Effet de bord : écriture en session.
Parameters
- $subscription : Subscription
-
Abonnement pré-construit à l'étape « abonnement ».
- $employeeCount : int
-
Nombre d'employés facturés.
storeUserData()
Store user data in session
public
storeUserData(User $user) : void
Mémorise sous la clé de session company_registration.user un extrait de l'utilisateur
(id, email, name) plutôt que l'entité complète, l'identifiant servant à la recharger
lors de la finalisation. Écrase toute valeur précédente.
Effet de bord : écriture en session, aucune écriture en base.
Parameters
- $user : User
-
Utilisateur ayant validé son adresse e-mail au début du tunnel.
createCompany()
Create company entity from stored data
private
createCompany(array<string, mixed> $data) : Company
Instancie une Company à partir du tableau issu de la session et la marque explicitement comme inactive : elle ne sera activée qu'après validation du paiement dans CompanyRegistrationService::completeRegistration(). L'entité n'est ni persistée ni flushée ici. Toutes les clés attendues sont lues sans garde : leur absence déclenche une erreur PHP.
Parameters
- $data : array<string, mixed>
-
Détails issus de
company_registration.company:name,website,phone,employeeCount,description.
Return values
Company —Entreprise nouvellement instanciée, inactive.
generateTemporaryPassword()
Generate a secure temporary password
private
generateTemporaryPassword() : string
Tire 12 caractères au hasard, via random_int() (générateur cryptographiquement sûr), dans
un alphabet composé des lettres minuscules et majuscules, des chiffres et des symboles
!@#$%^&*. Aucune contrainte de composition n'est imposée : le mot de passe produit peut
théoriquement ne contenir qu'une seule classe de caractères.
Tags
Return values
string —Mot de passe temporaire en clair, de 12 caractères.