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
$auditLogger read-only
private
AuditLogger
$auditLogger
$entityManager read-only
private
EntityManagerInterface
$entityManager
$mailerService read-only
private
MailerService
$mailerService
$paginator read-only
private
PaginatorInterface
$paginator
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
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
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
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
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
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.