CompanyConfigurationController
extends AbstractController
in package
Permet à un manager de configurer la fiche de son entreprise.
Espace réservé au titulaire du compte entreprise (et non au staff BCard) : édition des
informations de la Company rattachée au compte connecté, gestion des activités de
l'entreprise et de leurs brochures, ainsi que du logo. Les uploads remplacent le fichier
précédent et l'effacent physiquement du disque. Aucune entreprise ne peut être choisie : seule
celle du compte connecté est éditable.
Préfixe de route : /admin/company-configuration. Réservé à ROLE_MANAGER pour toutes les actions.
Attributes
- #[IsGranted]
- 'ROLE_MANAGER'
- #[Route]
- '/admin/company-configuration'
Table of Contents
Methods
- index() : Response
- Affiche et enregistre le formulaire de configuration de l'entreprise du manager connecté.
- removeLogo() : Response
- Supprime le logo de l'entreprise du manager connecté (appel AJAX).
Methods
index()
Affiche et enregistre le formulaire de configuration de l'entreprise du manager connecté.
public
index(Request $request, EntityManagerInterface $entityManager, SluggerInterface $slugger) : Response
Si le compte connecté n'a pas d'entreprise, un flash d'erreur est posé et l'utilisateur est
renvoyé au tableau de bord. L'EntityManager est ensuite vidé (clear()) et l'entreprise
rechargée par son identifiant afin d'éviter les conflits d'identity map ; si elle est
introuvable après rechargement, même redirection.
À la soumission valide du formulaire CompanyConfigurationType, trois traitements
s'enchaînent : les activités nouvellement ajoutées se voient affecter leur entreprise
parente puis sont persistées ; pour chaque activité, si une brochure a été envoyée, le
fichier est renommé (nom d'origine slugifié + uniqid() + extension devinée), déplacé dans
le répertoire company_brochures_directory et l'ancienne brochure est effacée du disque ;
le logo suit la même logique dans company_logos_directory. Une FileException lors d'un
déplacement est capturée et signalée par un flash d'erreur sans interrompre le reste de
l'enregistrement.
Route : /admin/company-configuration/ (GET, POST), nom admin_company_configuration_index.
Réservée à ROLE_MANAGER (attribut au niveau de la classe).
Parameters
- $request : Request
-
Requête HTTP traitée par le formulaire.
- $entityManager : EntityManagerInterface
-
Gestionnaire Doctrine utilisé pour le
clear(), le rechargement de l'entreprise et leflush(). - $slugger : SluggerInterface
-
Slugger produisant un nom de fichier sûr à partir du nom d'origine.
Attributes
- #[Route]
- '/'
- $name: 'admin_company_configuration_index'
- $methods: ['GET', 'POST']
Return values
Response —Page HTML admin/company_configuration/index.html.twig, redirection vers app_dashboard si aucune entreprise, ou redirection vers admin_company_configuration_index après enregistrement.
removeLogo()
Supprime le logo de l'entreprise du manager connecté (appel AJAX).
public
removeLogo(Request $request, EntityManagerInterface $entityManager) : Response
Recharge l'entreprise depuis son identifiant pour éviter les conflits d'identity map. La
suppression n'est réalisée que si le jeton CSRF remove_logo<id> est valide et qu'un
logo est effectivement enregistré : le fichier est alors effacé du répertoire
company_logos_directory, la référence est mise à null et l'entité est flush()ée. Dans
tous les autres cas — entreprise introuvable, jeton invalide, ou absence de logo — une
réponse d'échec est renvoyée, le message étant systématiquement « Token CSRF invalide »
même lorsque la véritable cause est l'absence de logo.
Route : /admin/company-configuration/remove-logo (POST), nom admin_company_configuration_remove_logo.
Réservée à ROLE_MANAGER (attribut au niveau de la classe).
Parameters
- $request : Request
-
Requête HTTP portant le jeton CSRF
_token. - $entityManager : EntityManagerInterface
-
Gestionnaire Doctrine utilisé pour recharger l'entreprise et persister la suppression.
Attributes
- #[Route]
- '/remove-logo'
- $name: 'admin_company_configuration_remove_logo'
- $methods: ['POST']
Return values
Response —Réponse JSON {"success": bool, "message": string}, toujours en HTTP 200.