BCard - Documentation technique

AdminBusinessController extends AbstractController
in package

Gère le back-office des comptes entreprise (utilisateurs rattachés à une `Company`).

Ce contrôleur couvre le cycle de vie complet d'un compte entreprise côté administration : consultation filtrée et paginée des comptes (en attente, activés, désactivés, tous), activation/désactivation (qui pilotent aussi l'attribution du rôle ROLE_MANAGER et l'envoi d'e-mails transactionnels), édition du profil et consultation du détail avec les cartes de visite des employés. Chaque changement d'état est tracé via AuditLogger. Une exception : AdminBusinessController::settlePayment() n'est pas destinée au staff mais au manager entreprise lui-même.

Préfixe de route : /admin/business. Authentification complète requise (IS_AUTHENTICATED_FULLY) ; la quasi-totalité des actions exige en outre ROLE_ADMIN ou ROLE_OPERATOR via AdminBusinessController::assertBackofficeStaffAccess().

Attributes
#[IsGranted]
'IS_AUTHENTICATED_FULLY'
#[Route]
'/admin/business'

Table of Contents

Properties

$auditLogger  : AuditLogger
$entityManager  : EntityManagerInterface
$mailerService  : MailerService
$paginator  : PaginatorInterface

Methods

__construct()  : mixed
activateBusinessAccount()  : Response
Activer un compte entreprise
activatedBusinessAccounts()  : Response
Liste des comptes entreprise activés
deactivateBusinessAccount()  : Response
Désactiver un compte entreprise
deactivatedBusinessAccounts()  : Response
Liste des comptes entreprise désactivés
editBusinessAccount()  : Response
Modifier un compte entreprise
listBusinessAccounts()  : Response
Liste de tous les comptes entreprise
pendingBusinessAccounts()  : Response
Liste des comptes entreprise en attente d'activation
settlePayment()  : Response
Régler un paiement en attente (pour les managers)
viewBusinessAccount()  : Response
Voir les détails d'un compte entreprise
assertBackofficeStaffAccess()  : void
Vérifie que l'utilisateur connecté appartient au staff du back-office.
buildCountriesList()  : array<string, string>
Construit la liste des pays destinée au filtre des vues de liste.

Properties

Methods

__construct()

public __construct(EntityManagerInterface $entityManager, PaginatorInterface $paginator, MailerService $mailerService, AuditLogger $auditLogger) : mixed
Parameters
$entityManager : EntityManagerInterface

Gestionnaire Doctrine utilisé pour les flush() et les requêtes sur les cartes employés.

$paginator : PaginatorInterface

Paginateur KnpPaginator appliqué aux listes de comptes entreprise (10 par page).

$mailerService : MailerService

Service d'envoi des e-mails transactionnels (activation, désactivation, modification).

$auditLogger : AuditLogger

Service de journalisation d'audit des actions réalisées sur un compte utilisateur.

activateBusinessAccount()

Activer un compte entreprise

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

Refuse l'opération (message flash d'erreur + redirection vers la liste) si l'utilisateur n'est rattaché à aucune Company. Sinon passe le compte à activated = true, lui ajoute le rôle ROLE_MANAGER s'il ne l'a pas déjà, persiste, journalise l'action AuditLog::ACTION_USER_ACTIVATED et envoie l'e-mail business_activation_email. La redirection finale privilégie l'en-tête Referer s'il est présent.

Route : /admin/business/activate/{id} (toutes méthodes), nom app_admin_business_activate. Réservée à ROLE_ADMIN ou ROLE_OPERATOR.

Parameters
$user : User

Compte entreprise à activer, résolu depuis {id} par le ParamConverter.

$request : Request

Requête HTTP, exploitée pour l'en-tête Referer.

Tags
throws
TransportExceptionInterface

Si l'envoi de l'e-mail d'activation échoue au niveau du transport.

Attributes
#[Route]
'/activate/{id}'
$name: 'app_admin_business_activate'
Return values
Response

Redirection vers le référent, ou vers app_admin_business_list (succès comme cas non-entreprise).

activatedBusinessAccounts()

Liste des comptes entreprise activés

public activatedBusinessAccounts(UserRepository $userRepository, Request $request) : Response

Même mécanique de filtrage et de pagination que AdminBusinessController::pendingBusinessAccounts(), avec le périmètre activated passé au query builder du dépôt.

Route : /admin/business/activated (toutes méthodes), nom app_admin_business_activated. Réservée à ROLE_ADMIN ou ROLE_OPERATOR.

Parameters
$userRepository : UserRepository

Dépôt fournissant le query builder de filtrage des comptes entreprise.

$request : Request

Requête HTTP source des filtres et du numéro de page.

Attributes
#[Route]
'/activated'
$name: 'app_admin_business_activated'
Return values
Response

Page HTML admin/business/business-list.html.twig listant les comptes activés.

deactivateBusinessAccount()

Désactiver un compte entreprise

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

Opération symétrique de AdminBusinessController::activateBusinessAccount() : refuse les comptes sans Company, passe activated = false, retire ROLE_MANAGER de la liste des rôles (via array_diff), journalise AuditLog::ACTION_USER_DEACTIVATED et envoie l'e-mail business_deactivation_email. Redirige vers le Referer si disponible.

Route : /admin/business/deactivate/{id} (toutes méthodes), nom app_admin_business_deactivate. Réservée à ROLE_ADMIN ou ROLE_OPERATOR.

Parameters
$user : User

Compte entreprise à désactiver, résolu depuis {id}.

$request : Request

Requête HTTP, exploitée pour l'en-tête Referer.

Tags
throws
TransportExceptionInterface

Si l'envoi de l'e-mail de désactivation échoue au niveau du transport.

Attributes
#[Route]
'/deactivate/{id}'
$name: 'app_admin_business_deactivate'
Return values
Response

Redirection vers le référent ou vers app_admin_business_list.

deactivatedBusinessAccounts()

Liste des comptes entreprise désactivés

public deactivatedBusinessAccounts(UserRepository $userRepository, Request $request) : Response

Même mécanique de filtrage et de pagination que AdminBusinessController::pendingBusinessAccounts(), avec le périmètre deactivated passé au query builder du dépôt.

Route : /admin/business/deactivated (toutes méthodes), nom app_admin_business_deactivated. Réservée à ROLE_ADMIN ou ROLE_OPERATOR.

Parameters
$userRepository : UserRepository

Dépôt fournissant le query builder de filtrage des comptes entreprise.

$request : Request

Requête HTTP source des filtres et du numéro de page.

Attributes
#[Route]
'/deactivated'
$name: 'app_admin_business_deactivated'
Return values
Response

Page HTML admin/business/business-list.html.twig listant les comptes désactivés.

editBusinessAccount()

Modifier un compte entreprise

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

Rejette les comptes sans Company. Construit et traite le formulaire BusinessProfileEditType lié à l'entité User ; à la soumission valide, flush() suffit (l'entité est déjà managée), l'action AuditLog::ACTION_USER_UPDATED est journalisée et l'e-mail business_update_email est envoyé au compte modifié.

Route : /admin/business/edit/{id} (toutes méthodes), nom app_admin_business_edit. Réservée à ROLE_ADMIN ou ROLE_OPERATOR.

Parameters
$user : User

Compte entreprise à modifier, résolu depuis {id}.

$request : Request

Requête HTTP traitée par le formulaire.

Tags
throws
TransportExceptionInterface

Si l'envoi de l'e-mail de notification échoue au niveau du transport.

Attributes
#[Route]
'/edit/{id}'
$name: 'app_admin_business_edit'
Return values
Response

Formulaire HTML admin/business/edit.html.twig, ou redirection vers app_admin_business_view après enregistrement.

listBusinessAccounts()

Liste de tous les comptes entreprise

public listBusinessAccounts(UserRepository $userRepository, Request $request) : Response

Variante non restreinte de AdminBusinessController::pendingBusinessAccounts() : aucun périmètre n'est passé au query builder, mais un filtre supplémentaire account_status est accepté en plus de q, country, activity, subscription_status et billing_cycle. Résultat paginé à 10 éléments par page.

Route : /admin/business/list (toutes méthodes), nom app_admin_business_list. Réservée à ROLE_ADMIN ou ROLE_OPERATOR.

Parameters
$userRepository : UserRepository

Dépôt fournissant le query builder de filtrage des comptes entreprise.

$request : Request

Requête HTTP source des filtres et du numéro de page.

Attributes
#[Route]
'/list'
$name: 'app_admin_business_list'
Return values
Response

Page HTML admin/business/business-list.html.twig listant tous les comptes entreprise.

pendingBusinessAccounts()

Liste des comptes entreprise en attente d'activation

public pendingBusinessAccounts(UserRepository $userRepository, Request $request) : Response

Contrôle d'abord l'accès staff via AdminBusinessController::assertBackofficeStaffAccess(). Collecte les filtres de la query string (q, country, activity, subscription_status, billing_cycle), les transmet à UserRepository::createBusinessAccountsFilterQueryBuilder() avec le périmètre pending, puis pagine le résultat (10 par page, paramètre page). La vue rendue est la vue de liste mutualisée, alimentée par AdminBusinessController::buildCountriesList() pour le filtre pays.

Route : /admin/business/pending (toutes méthodes), nom app_admin_business_pending. Réservée à ROLE_ADMIN ou ROLE_OPERATOR.

Parameters
$userRepository : UserRepository

Dépôt fournissant le query builder de filtrage des comptes entreprise.

$request : Request

Requête HTTP source des filtres et du numéro de page.

Attributes
#[Route]
'/pending'
$name: 'app_admin_business_pending'
Return values
Response

Page HTML admin/business/business-list.html.twig listant les comptes en attente.

settlePayment()

Régler un paiement en attente (pour les managers)

public settlePayment(Payment $payment) : Response

Seule action du contrôleur qui n'est pas réservée au staff : elle exige que l'utilisateur connecté porte ROLE_MANAGER et soit le propriétaire du paiement, sans quoi une exception d'accès refusé est levée. Le paiement doit être au statut Payment::PENDING_STATUS, sinon un flash d'erreur est posé. Si une commande est associée au paiement, l'utilisateur est renvoyé vers le tunnel de re-paiement CompanyPaymentController::retryPayment() ; sinon un flash d'erreur signale l'absence de commande.

Route : /admin/business/payment/settle/{id} (toutes méthodes), nom app_admin_business_settle_payment. Réservée aux porteurs de ROLE_MANAGER propriétaires du paiement (contrôle en dur dans la méthode).

Parameters
$payment : Payment

Paiement à régler, résolu depuis {id}.

Tags
throws
AccessDeniedException

Si l'utilisateur n'est pas un manager ou n'est pas propriétaire du paiement.

Attributes
#[Route]
'/payment/settle/{id}'
$name: 'app_admin_business_settle_payment'
Return values
Response

Redirection vers admin_company_payment_retry si une commande existe, sinon vers app_admin_business_view.

viewBusinessAccount()

Voir les détails d'un compte entreprise

public viewBusinessAccount(User $user) : Response

Rejette les comptes sans Company (flash d'erreur + redirection). Charge ensuite toutes les cartes virtuelles BusinessCardAize dont l'employé appartient à cette entreprise, triées par date de création décroissante, et les transmet à la vue de détail.

Route : /admin/business/view/{id} (toutes méthodes), nom app_admin_business_view. Réservée à ROLE_ADMIN ou ROLE_OPERATOR.

Parameters
$user : User

Compte entreprise consulté, résolu depuis {id}.

Attributes
#[Route]
'/view/{id}'
$name: 'app_admin_business_view'
Return values
Response

Page HTML admin/business/view.html.twig, ou redirection vers app_admin_business_list si le compte n'est pas un compte entreprise.

assertBackofficeStaffAccess()

Vérifie que l'utilisateur connecté appartient au staff du back-office.

private assertBackofficeStaffAccess() : void

Garde interne appelée en tête de la plupart des actions : l'accès est accordé si ROLE_ADMIN ou ROLE_OPERATOR est détenu, sinon une exception d'accès refusé est levée avec le message « Accès réservé aux administrateurs et gestionnaires. ».

Tags
throws
AccessDeniedException

Si aucun des deux rôles n'est détenu.

buildCountriesList()

Construit la liste des pays destinée au filtre des vues de liste.

private buildCountriesList() : array<string, string>

Récupère les noms de pays localisés via Countries::getNames(), puis remonte en tête quatre pays privilégiés dans cet ordre : GN, BE, FR, CA. Les autres pays sont triés alphabétiquement selon la locale (SORT_LOCALE_STRING) et concaténés à la suite.

Return values
array<string, string>

Table associative code ISO 3166-1 alpha-2 => nom du pays, pays privilégiés en premier.


        
On this page

Search results