EmployeeBusinessCardController
extends AbstractController
in package
Gère les cartes de visite numériques des employés d'une entreprise cliente.
Couvre le cycle de vie complet d'une carte BusinessCardAize rattachée à un
Employee : création unitaire, création simultanée d'un employé et de sa carte, création en
masse pour les employés éligibles, publication (avec envoi de la carte par email), retour en
brouillon, désactivation, réactivation, édition, suppression et gestion du QR code. Un compte
utilisateur est créé automatiquement pour l'employé lorsqu'il n'en possède pas encore. Chaque
carte reçoit un publicHash calculé par hash_hmac('sha256', id, APP_SECRET), qui sert d'URL
publique /bcard encodée dans le QR code. La plupart des actions sont cloisonnées à l'entreprise
du gestionnaire connecté ; l'affichage et l'édition tolèrent en plus le personnel du back-office.
Préfixe de route : /admin/employee-business-cards. Authentification complète requise au niveau
de la classe ; les actions de listing et de création exigent ROLE_MANAGER.
Attributes
- #[IsGranted]
- 'IS_AUTHENTICATED_FULLY'
- #[Route]
- '/admin/employee-business-cards'
Table of Contents
Properties
- $auditLogger : AuditLogger
- $businessCardEmailService : BusinessCardEmailService
- $employeeRepository : EmployeeRepository
- $employeeUserCreationService : EmployeeUserCreationService
- $entityManager : EntityManagerInterface
- $qrCodeService : QRCodeService
- $slugger : SluggerInterface
Methods
- __construct() : mixed
- bulkCreate() : Response
- Créer des cartes de visite en masse pour tous les employés éligibles sans carte
- create() : Response
- Créer une carte de visite pour un employé
- createEmployeeWithCard() : Response
- Créer un nouvel employé avec sa carte de visite
- delete() : Response
- Supprimer une carte de visite
- disable() : Response
- Désactiver une carte de visite
- downloadQRCode() : Response
- Télécharger le QR Code d'une carte de visite
- draft() : Response
- Mettre une carte de visite en brouillon
- edit() : Response
- Modifier une carte de visite d'employé
- index() : Response
- Liste des cartes de visite des employés de l'entreprise
- publish() : Response
- Publier une carte de visite
- reactivate() : Response
- Réactiver une carte de visite
- regenerateQRCode() : JsonResponse
- Régénérer le QR Code d'une carte de visite
- show() : Response
- Voir les détails d'une carte de visite
Properties
$auditLogger read-only
private
AuditLogger
$auditLogger
$businessCardEmailService read-only
private
BusinessCardEmailService
$businessCardEmailService
$employeeRepository read-only
private
EmployeeRepository
$employeeRepository
$employeeUserCreationService read-only
private
EmployeeUserCreationService
$employeeUserCreationService
$entityManager read-only
private
EntityManagerInterface
$entityManager
$qrCodeService read-only
private
QRCodeService
$qrCodeService
$slugger read-only
private
SluggerInterface
$slugger
Methods
__construct()
public
__construct(EntityManagerInterface $entityManager, EmployeeRepository $employeeRepository, QRCodeService $qrCodeService, BusinessCardEmailService $businessCardEmailService, EmployeeUserCreationService $employeeUserCreationService, SluggerInterface $slugger, AuditLogger $auditLogger) : mixed
Parameters
- $entityManager : EntityManagerInterface
-
Gestionnaire d'entités (persistance, suppression, requêtes sur les cartes physiques).
- $employeeRepository : EmployeeRepository
-
Dépôt des employés (recherche par entreprise, employés éligibles sans carte).
- $qrCodeService : QRCodeService
-
Service de génération, régénération, suppression et téléchargement des QR codes.
- $businessCardEmailService : BusinessCardEmailService
-
Service d'envoi de la carte de visite par email à l'employé lors de la publication.
- $employeeUserCreationService : EmployeeUserCreationService
-
Service de création du compte utilisateur d'un employé et de contrôle d'unicité de l'email.
- $slugger : SluggerInterface
-
Service de normalisation des noms de fichiers de CV déposés.
- $auditLogger : AuditLogger
-
Service d'audit des créations, modifications et suppressions de cartes.
bulkCreate()
Créer des cartes de visite en masse pour tous les employés éligibles sans carte
public
bulkCreate(Request $request) : Response
Parameters
- $request : Request
Attributes
- #[Route]
- '/bulk-create'
- $name: 'admin_employee_business_cards_bulk_create'
- $methods: ['POST']
Return values
Responsecreate()
Créer une carte de visite pour un employé
public
create(Employee $employee, Request $request) : Response
Crée la carte de visite d'un employé existant, en brouillon.
Refuse l'accès si le gestionnaire n'a pas d'entreprise ou si l'employé n'appartient pas à celle-ci. Si l'employé possède déjà une carte, un flash d'avertissement est affiché et l'utilisateur est redirigé vers la liste. La carte est préremplie avec l'identité de l'employé, le nom et le site web de l'entreprise, et le statut brouillon.
À la soumission, une règle métier impose que l'email saisi corresponde exactement à celui de
l'employé, sous peine d'une erreur de formulaire. Si l'employé n'a pas encore de compte
utilisateur, celui-ci est créé via EmployeeUserCreationService::createUserAccountForEmployee() ;
un échec de création interrompt le processus avec un avertissement. Le CV éventuel est
renommé (slug + identifiant unique) puis déplacé dans cv_directory, une FileException
étant convertie en simple avertissement. Après persistance, le publicHash est calculé s'il
est absent, puis le QR code est généré vers <host>/bcard en format simple ; un échec de
génération n'annule pas la création. La création est enfin journalisée.
Route : /admin/employee-business-cards/create/{employee} (GET, POST), nom admin_employee_business_card_create.
Requiert ROLE_MANAGER.
Parameters
- $employee : Employee
-
Employé bénéficiaire, résolu depuis le paramètre
employeede l'URL. - $request : Request
-
Requête HTTP courante, utilisée pour traiter le formulaire et déduire l'URL publique.
Attributes
- #[IsGranted]
- 'ROLE_MANAGER'
- #[Route]
- '/create/{employee}'
- $name: 'admin_employee_business_card_create'
- $methods: ['GET', 'POST']
Return values
Response —Rendu du template admin/employee_business_cards/create.html.twig, ou
redirection vers admin_employee_business_cards_index (carte déjà existante,
échec de création du compte, ou création réussie).
createEmployeeWithCard()
Créer un nouvel employé avec sa carte de visite
public
createEmployeeWithCard(Request $request) : Response
Crée en une seule opération un employé, son compte utilisateur et sa carte de visite.
Refuse l'accès si le compte connecté n'a pas d'entreprise. Deux contrôles d'unicité précèdent la création : l'email ne doit correspondre à aucun utilisateur existant (EmployeeUserCreationService::isEmailAlreadyUsed()) ni à un employé déjà enregistré dans l'entreprise ; dans les deux cas le formulaire est réaffiché avec un flash d'erreur.
L'employé est créé actif et rattaché à l'entreprise ; son CV éventuel est renommé et déplacé
dans cv_directory. Un compte utilisateur est ensuite créé, puis la carte est construite en
brouillon avec l'identité de l'employé, les réseaux sociaux et la biographie saisis. Les
activités de l'entreprise, si elles existent, sont concaténées dans le champ
additionalInfo, et le champ cardTitle du formulaire écrase l'intitulé de poste lorsqu'il
est renseigné. Le QR code est généré après persistance (pour disposer de l'identifiant) vers
la racine du site — et non vers /bcard comme ailleurs dans ce contrôleur ; un échec ne
bloque pas la création. Le message final signale si le compte utilisateur n'a pas pu être créé.
Route : /admin/employee-business-cards/create-employee (GET, POST), nom admin_create_employee_with_card.
Requiert ROLE_MANAGER.
Parameters
- $request : Request
-
Requête HTTP courante, utilisée pour traiter le formulaire et déduire l'URL du QR code.
Attributes
- #[IsGranted]
- 'ROLE_MANAGER'
- #[Route]
- '/create-employee'
- $name: 'admin_create_employee_with_card'
- $methods: ['GET', 'POST']
Return values
Response —Rendu du template admin/employee_business_cards/create_employee_with_card.html.twig,
ou redirection vers admin_employee_business_cards_index après création réussie.
delete()
Supprimer une carte de visite
public
delete(BusinessCardAize $businessCard, Request $request, UploaderService $uploaderService) : Response
Parameters
- $businessCard : BusinessCardAize
- $request : Request
- $uploaderService : UploaderService
Attributes
- #[Route]
- '/delete/{id}'
- $name: 'admin_employee_business_card_delete'
- $methods: ['POST']
Return values
Responsedisable()
Désactiver une carte de visite
public
disable(BusinessCardAize $businessCard, Request $request) : Response
Rend une carte de visite inaccessible en la désactivant.
Vérifie l'appartenance de la carte à l'entreprise du gestionnaire, puis le jeton CSRF
disable<id>. Délègue le changement d'état à la méthode disable() de l'entité
BusinessCardAize avant de flusher. Toute exception est capturée et affichée en flash
d'erreur.
Route : /admin/employee-business-cards/disable/{id} (POST), nom admin_employee_business_card_disable.
Requiert ROLE_MANAGER.
Parameters
- $businessCard : BusinessCardAize
-
Carte résolue depuis l'identifiant de l'URL.
- $request : Request
-
Requête HTTP courante, contenant le jeton CSRF
_token.
Attributes
- #[IsGranted]
- 'ROLE_MANAGER'
- #[Route]
- '/disable/{id}'
- $name: 'admin_employee_business_card_disable'
- $methods: ['POST']
Return values
Response —Redirection vers admin_employee_business_cards_index dans tous les cas.
downloadQRCode()
Télécharger le QR Code d'une carte de visite
public
downloadQRCode(BusinessCardAize $businessCard, QRCodeService $qrCodeService) : Response
Parameters
- $businessCard : BusinessCardAize
- $qrCodeService : QRCodeService
Attributes
- #[Route]
- '/download-qr/{id}'
- $name: 'download_qr_code'
- $methods: ['GET']
Return values
Responsedraft()
Mettre une carte de visite en brouillon
public
draft(BusinessCardAize $businessCard, Request $request) : Response
Dépublie une carte en la ramenant au statut brouillon.
Vérifie l'appartenance de la carte à l'entreprise du gestionnaire, puis le jeton CSRF
draft<id>. Positionne le statut à STATUS_DRAFT et flushe ; aucun email n'est envoyé.
Toute exception est capturée et affichée en flash d'erreur.
Route : /admin/employee-business-cards/draft/{id} (POST), nom admin_employee_business_card_draft.
Requiert ROLE_MANAGER.
Parameters
- $businessCard : BusinessCardAize
-
Carte résolue depuis l'identifiant de l'URL.
- $request : Request
-
Requête HTTP courante, contenant le jeton CSRF
_token.
Attributes
- #[IsGranted]
- 'ROLE_MANAGER'
- #[Route]
- '/draft/{id}'
- $name: 'admin_employee_business_card_draft'
- $methods: ['POST']
Return values
Response —Redirection vers admin_employee_business_cards_index dans tous les cas.
edit()
Modifier une carte de visite d'employé
public
edit(BusinessCardAize $businessCard, Request $request) : Response
Modifie une carte de visite d'employé et régénère son QR code.
Contrôle d'accès à deux niveaux : le personnel du back-office (ROLE_ADMIN, ROLE_OPERATOR ou ROLE_SUPPORT) accède à n'importe quelle carte ; pour les autres comptes, la carte doit appartenir à un employé de l'entreprise du gestionnaire connecté.
À l'enregistrement, un nouveau CV est renommé, déplacé dans cv_directory et l'ancien fichier
est supprimé du disque s'il existe. L'ancien QR code est ensuite supprimé et un nouveau est
généré à partir du hash public, vers la racine du site (getSchemeAndHttpHost(), sans le
suffixe /bcard utilisé à la création) ; un échec de génération ne bloque pas
l'enregistrement. La modification est journalisée avant redirection vers la fiche de la carte.
Route : /admin/employee-business-cards/edit/{id} (GET, POST), nom admin_employee_business_card_edit.
Parameters
- $businessCard : BusinessCardAize
-
Carte résolue depuis l'identifiant de l'URL.
- $request : Request
-
Requête HTTP courante, utilisée pour traiter le formulaire.
Attributes
- #[Route]
- '/edit/{id}'
- $name: 'admin_employee_business_card_edit'
- $methods: ['GET', 'POST']
Return values
Response —Rendu du template admin/employee_business_cards/edit.html.twig, ou
redirection vers admin_employee_business_card_show après enregistrement réussi.
index()
Liste des cartes de visite des employés de l'entreprise
public
index(Request $request, PaginatorInterface $paginator) : Response
Affiche le tableau de bord paginé des employés et de leurs cartes.
Refuse l'accès si le compte connecté n'est pas un User rattaché à une entreprise.
Récupère tous les employés de l'entreprise ainsi que les employés « éligibles » — c'est-à-dire
disposant d'une commande validée mais encore sans carte
(findWithValidatedOrderButNoBusinessCard). Calcule ensuite des statistiques : effectif total,
nombre d'employés avec et sans carte, cartes publiées, cartes en brouillon et taux de
complétion arrondi à une décimale.
Détermine enfin quelles cartes ont déjà fait l'objet d'une commande de carte physique, via une
requête unique sur PhysicalCard filtrée sur les cartes virtuelles de l'entreprise ; le
tableau résultant est indexé par identifiant de carte et sert à la fois à la vue et au
compteur physical_cards_ordered. Pagination selon page (défaut 1) et limit (défaut 10).
Route : /admin/employee-business-cards/ (GET), nom admin_employee_business_cards_index.
Requiert ROLE_MANAGER.
Parameters
- $request : Request
-
Requête HTTP courante (paramètres
pageetlimit). - $paginator : PaginatorInterface
-
Service de pagination KnpPaginator.
Attributes
- #[IsGranted]
- 'ROLE_MANAGER'
- #[Route]
- '/'
- $name: 'admin_employee_business_cards_index'
- $methods: ['GET']
Return values
Response —Rendu du template admin/employee_business_cards/index.html.twig avec les
employés paginés, les employés éligibles, les commandes physiques et les statistiques.
publish()
Publier une carte de visite
public
publish(BusinessCardAize $businessCard, Request $request) : Response
Publie la carte de visite d'un employé et la lui envoie par email.
Vérifie que la carte appartient bien à un employé de l'entreprise du gestionnaire connecté,
puis contrôle le jeton CSRF publish<id> (un jeton invalide produit un flash d'erreur et une
redirection). Le statut passe à STATUS_PUBLISHED et est flushé, puis
BusinessCardEmailService::sendBusinessCardEmail() est appelé : le message de succès
distingue le cas où l'email a bien été envoyé de celui où l'envoi a échoué (la publication
restant effective). Toute exception est capturée et affichée en flash d'erreur.
Route : /admin/employee-business-cards/publish/{id} (POST), nom admin_employee_business_card_publish.
Requiert ROLE_MANAGER.
Parameters
- $businessCard : BusinessCardAize
-
Carte résolue depuis l'identifiant de l'URL.
- $request : Request
-
Requête HTTP courante, contenant le jeton CSRF
_token.
Attributes
- #[IsGranted]
- 'ROLE_MANAGER'
- #[Route]
- '/publish/{id}'
- $name: 'admin_employee_business_card_publish'
- $methods: ['POST']
Return values
Response —Redirection vers admin_employee_business_cards_index dans tous les cas.
reactivate()
Réactiver une carte de visite
public
reactivate(BusinessCardAize $businessCard, Request $request) : Response
Remet en service une carte précédemment désactivée.
Vérifie l'appartenance de la carte à l'entreprise du gestionnaire, puis le jeton CSRF
reactivate<id>. La réactivation s'effectue en appelant publish() sur l'entité : la carte
repasse donc au statut publié, et non à son statut antérieur. Contrairement à la publication,
aucun email n'est envoyé à l'employé. Aucun #[IsGranted] n'est posé sur cette méthode :
seule l'authentification complète et l'appartenance à l'entreprise sont exigées.
Route : /admin/employee-business-cards/reactivate/{id} (POST), nom admin_employee_business_card_reactivate.
Parameters
- $businessCard : BusinessCardAize
-
Carte résolue depuis l'identifiant de l'URL.
- $request : Request
-
Requête HTTP courante, contenant le jeton CSRF
_token.
Attributes
- #[Route]
- '/reactivate/{id}'
- $name: 'admin_employee_business_card_reactivate'
- $methods: ['POST']
Return values
Response —Redirection vers admin_employee_business_cards_index dans tous les cas.
regenerateQRCode()
Régénérer le QR Code d'une carte de visite
public
regenerateQRCode(BusinessCardAize $businessCard, Request $request) : JsonResponse
Parameters
- $businessCard : BusinessCardAize
- $request : Request
Attributes
- #[Route]
- '/regenerate-qr/{id}'
- $name: 'admin_employee_business_card_regenerate_qr'
- $methods: ['POST']
Return values
JsonResponseshow()
Voir les détails d'une carte de visite
public
show(BusinessCardAize $businessCard) : Response
Affiche la fiche détaillée d'une carte de visite d'employé.
Même règle d'accès que EmployeeBusinessCardController::edit() : ROLE_ADMIN, ROLE_OPERATOR ou ROLE_SUPPORT accèdent à toutes les cartes, les autres comptes doivent être rattachés à l'entreprise de l'employé propriétaire de la carte, sous peine d'accès refusé. Aucune écriture n'est effectuée.
Route : /admin/employee-business-cards/show/{id} (GET), nom admin_employee_business_card_show.
Parameters
- $businessCard : BusinessCardAize
-
Carte résolue depuis l'identifiant de l'URL.
Attributes
- #[Route]
- '/show/{id}'
- $name: 'admin_employee_business_card_show'
- $methods: ['GET']
Return values
Response —Rendu du template admin/employee_business_cards/show.html.twig.