BCard - Documentation technique

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

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
Response

create()

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 employee de 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.

disable()

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.

draft()

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 page et limit).

$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
JsonResponse

show()

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.


        
On this page

Search results