BCard - Documentation technique

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 le flush().

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

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.


        
On this page

Search results