BCard - Documentation technique

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

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, payment ou confirmation.

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
throws
InvalidArgumentException

Si une étape du tunnel est absente de la session ou si l'utilisateur mémorisé est introuvable en base.

RandomException

Si la génération aléatoire du mot de passe temporaire échoue.

Exception

Toute erreur survenue dans la transaction, relancée après rollback.

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.

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, null si 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
throws
RandomException

Si la source d'aléa du système est indisponible.

Return values
string

Mot de passe temporaire en clair, de 12 caractères.


        
On this page

Search results