BCard - Documentation technique

VirtualCardController extends AbstractController
in package

Permet au personnel du back-office de gérer les cartes virtuelles pour le compte des clients.

Offre un annuaire des clients avec leur offre, leur quota de cartes restant et leur droit d'en créer une de plus, puis la création et la modification d'une carte BusinessCardAize au nom d'un client. Les clients dépourvus d'abonnement se voient attribuer automatiquement l'offre gratuite. Un publicHash est calculé après persistance et sert de base à la génération du QR code pointant vers /bcard. Les fonctionnalités premium du formulaire et la saisie des activités sont conditionnées à l'offre et au profil du client.

Préfixe de route : /admin/virtual-cards. Authentification complète requise au niveau de la classe ; chaque action exige en plus ROLE_ADMIN, ROLE_OPERATOR ou ROLE_SUPPORT.

Attributes
#[IsGranted]
'IS_AUTHENTICATED_FULLY'
#[Route]
'/admin/virtual-cards'

Table of Contents

Properties

$auditLogger  : AuditLogger
$entityManager  : EntityManagerInterface
$logoManagementService  : LogoManagementService
$qrCodeService  : QRCodeService
$subscriptionService  : SubscriptionService
$userRepository  : UserRepository

Methods

__construct()  : mixed
clients()  : Response
Affiche l'annuaire paginé des clients avec leur situation en matière de cartes virtuelles.
create()  : Response
Crée une carte virtuelle pour le compte d'un client.
edit()  : Response
Modifie une carte virtuelle existante pour le compte de son propriétaire.
checkPhpUploadErrors()  : void
Signale à l'utilisateur les erreurs d'upload remontées par PHP.
getUploadErrorMessage()  : string|null
Traduit un code d'erreur d'upload PHP en message lisible en français.
manageFiles()  : void
Traite les fichiers du formulaire et applique les éléments d'identité visuelle à la carte.

Properties

Methods

__construct()

public __construct(EntityManagerInterface $entityManager, UserRepository $userRepository, SubscriptionService $subscriptionService, QRCodeService $qrCodeService, LogoManagementService $logoManagementService, AuditLogger $auditLogger) : mixed
Parameters
$entityManager : EntityManagerInterface

Gestionnaire d'entités pour persister et flusher les cartes.

$userRepository : UserRepository

Dépôt des utilisateurs, fournit le query builder de filtrage des clients par offre.

$subscriptionService : SubscriptionService

Service d'abonnement : création de l'offre gratuite, quota de cartes, accès aux fonctionnalités premium.

$qrCodeService : QRCodeService

Service de génération des QR codes à partir du hash public.

$logoManagementService : LogoManagementService

Service de dépôt du logo personnalisé et d'application des couleurs de l'entreprise.

$auditLogger : AuditLogger

Service d'audit des créations et modifications de cartes virtuelles.

clients()

Affiche l'annuaire paginé des clients avec leur situation en matière de cartes virtuelles.

public clients(Request $request, PaginatorInterface $paginator) : Response

Refuse l'accès si l'utilisateur n'est ni ROLE_ADMIN, ni ROLE_OPERATOR, ni ROLE_SUPPORT. La requête est filtrée par offre (plan) et par recherche libre (q) au moyen de UserRepository::createClientsByPlanFilterQueryBuilder(), paginée selon page et limit (défaut 15).

Effet de bord : pour chaque client de la page dépourvu d'abonnement actif, un abonnement gratuit est créé à la volée via SubscriptionService::createFreeSubscriptionForUser(). Chaque ligne préparée pour la vue expose le nom de l'offre (« Free » par défaut), le nombre de cartes restantes et la possibilité de créer une carte supplémentaire.

Route : /admin/virtual-cards/clients (GET), nom admin_virtual_cards_clients. Requiert ROLE_ADMIN, ROLE_OPERATOR ou ROLE_SUPPORT.

Parameters
$request : Request

Requête HTTP courante (paramètres plan, q, page, limit).

$paginator : PaginatorInterface

Service de pagination KnpPaginator.

Attributes
#[Route]
'/clients'
$name: 'admin_virtual_cards_clients'
$methods: ['GET']
Return values
Response

Rendu du template admin/virtual_card/index.html.twig avec les lignes préparées, l'objet de pagination et les filtres actifs.

create()

Crée une carte virtuelle pour le compte d'un client.

public create(User $user, Request $request) : Response

Refuse l'accès si l'utilisateur n'est ni ROLE_ADMIN, ni ROLE_OPERATOR, ni ROLE_SUPPORT. Un abonnement gratuit est créé si le client n'en a aucun d'actif. La saisie des activités (allow_activities) n'est ouverte que pour les offres « Free » ou « Pro », lorsque le client n'est rattaché à aucune entreprise et ne porte ni ROLE_MANAGER ni ROLE_EMPLOYEE. Si le quota de cartes de l'offre est atteint, un flash d'information est affiché et l'utilisateur est renvoyé vers l'annuaire sans rien créer.

La carte est créée directement au statut publié. Les erreurs d'upload PHP sont signalées par VirtualCardController::checkPhpUploadErrors() et les fichiers sont traités par VirtualCardController::manageFiles(). Après une première persistance, un publicHash est calculé par hash_hmac('sha256', id, APP_SECRET) s'il est absent, puis le QR code est généré vers <host>/bcard en y intégrant l'entreprise, l'intitulé de poste, le prénom et le nom. La création est enfin journalisée.

Route : /admin/virtual-cards/clients/{id}/create (GET, POST), nom admin_virtual_cards_create. Requiert ROLE_ADMIN, ROLE_OPERATOR ou ROLE_SUPPORT.

Parameters
$user : User

Client bénéficiaire de la carte, résolu depuis l'identifiant de l'URL.

$request : Request

Requête HTTP courante, utilisée pour traiter le formulaire et les fichiers.

Attributes
#[Route]
'/clients/{id}/create'
$name: 'admin_virtual_cards_create'
$methods: ['GET', 'POST']
Return values
Response

Rendu du template admin/virtual_card/create.html.twig, ou redirection vers admin_virtual_cards_clients après création réussie ou quota atteint.

edit()

Modifie une carte virtuelle existante pour le compte de son propriétaire.

public edit(BusinessCardAize $businessCard, Request $request) : Response

Refuse l'accès si l'utilisateur n'est ni ROLE_ADMIN, ni ROLE_OPERATOR, ni ROLE_SUPPORT. Si la carte n'est rattachée à aucun client, une exception 404 « Client introuvable. » est levée. Un abonnement gratuit est créé si le client n'en a aucun d'actif, et les mêmes règles que dans VirtualCardController::create() pilotent l'ouverture des activités et des fonctionnalités premium. Aucun contrôle de quota n'est appliqué en modification.

Après enregistrement, la modification est journalisée, le publicHash est calculé s'il manquait, puis le QR code est systématiquement régénéré ; si la génération échoue, un flash d'avertissement précise que la carte a bien été modifiée mais que le QR code n'a pas pu être régénéré. En cas de succès, l'utilisateur est renvoyé vers la fiche de l'abonné.

Route : /admin/virtual-cards/cards/{id}/edit (GET, POST), nom admin_virtual_cards_edit. Requiert ROLE_ADMIN, ROLE_OPERATOR ou ROLE_SUPPORT.

Parameters
$businessCard : BusinessCardAize

Carte virtuelle résolue depuis l'identifiant de l'URL.

$request : Request

Requête HTTP courante, utilisée pour traiter le formulaire et les fichiers.

Tags
throws
NotFoundHttpException

Si la carte n'a pas d'utilisateur rattaché.

Attributes
#[Route]
'/cards/{id}/edit'
$name: 'admin_virtual_cards_edit'
$methods: ['GET', 'POST']
Return values
Response

Rendu du template admin/virtual_card/create.html.twig en mode modification, ou redirection vers app_admin_subscriber_view après enregistrement réussi.

checkPhpUploadErrors()

Signale à l'utilisateur les erreurs d'upload remontées par PHP.

private checkPhpUploadErrors(Request $request) : void

Inspecte les fichiers bruts image, cv et brochure de la requête (et non les champs imbriqués du formulaire) et, pour chaque fichier dont le code d'erreur diffère de UPLOAD_ERR_OK, ajoute un message flash d'erreur obtenu via VirtualCardController::getUploadErrorMessage(). N'interrompt pas le traitement du formulaire.

Parameters
$request : Request

Requête HTTP courante contenant les fichiers envoyés.

getUploadErrorMessage()

Traduit un code d'erreur d'upload PHP en message lisible en français.

private getUploadErrorMessage(int $errorCode) : string|null

Couvre les constantes UPLOAD_ERR_INI_SIZE, UPLOAD_ERR_FORM_SIZE, UPLOAD_ERR_PARTIAL, UPLOAD_ERR_NO_FILE, UPLOAD_ERR_NO_TMP_DIR, UPLOAD_ERR_CANT_WRITE et UPLOAD_ERR_EXTENSION. Malgré son type de retour nullable, la méthode renvoie toujours une chaîne : un code inconnu produit « Erreur inconnue lors de l'upload du fichier. ».

Parameters
$errorCode : int

Code d'erreur issu de UploadedFile::getError().

Return values
string|null

Message d'erreur correspondant.

manageFiles()

Traite les fichiers du formulaire et applique les éléments d'identité visuelle à la carte.

private manageFiles(FormInterface $form, BusinessCardAize $businessCard) : void

Le CV est déplacé vers le paramètre cv_directory et la photo vers profil_directory, tous deux renommés avec un identifiant unique suivi de l'extension devinée ; une FileException est capturée et convertie en message flash d'erreur sans interrompre le traitement. Si le formulaire expose customLogo, le fichier est confié à LogoManagementService::uploadCustomLogo() et le chemin retourné est enregistré sur la carte. Les couleurs de l'entreprise sont ensuite appliquées via LogoManagementService::setCompanyColors(), toute exception étant également transformée en flash d'erreur. Enfin, pour chaque sous-formulaire d'activité disposant d'un champ brochure, le fichier est déplacé vers brochure_directory et rattaché à l'activité — ce dernier déplacement n'est pas protégé par un bloc try.

Aucun flush n'est réalisé ici : la persistance est à la charge de l'action appelante.

Parameters
$form : FormInterface

Formulaire soumis contenant les champs de fichiers et les activités.

$businessCard : BusinessCardAize

Carte virtuelle à alimenter avec les fichiers déposés.


        
On this page

Search results