AdminCardController
extends AbstractController
in package
Administre le catalogue des produits « carte » (entité `Card`) proposés à la commande.
Ce contrôleur permet au staff de créer, modifier, prévisualiser, masquer/afficher et supprimer
les modèles de produits vendus, y compris l'upload des visuels et la normalisation des options
d'impression associées (une seule option peut être marquée par défaut). Attention : la
visibilité est portée par le drapeau hide de l'entité et les noms de routes sont trompeurs —
app_card_show masque la carte tandis que app_card_hide la réaffiche.
Préfixe de route : /admin. Aucun #[IsGranted] au niveau de la classe : chaque action
contrôle elle-même la détention de ROLE_ADMIN ou ROLE_OPERATOR.
Attributes
- #[Route]
- '/admin'
Table of Contents
Methods
- createCard() : Response
- Crée un nouveau produit « carte » dans le catalogue.
- delete() : Response
- Supprime définitivement un produit « carte ».
- edit() : Response
- Modifie un produit « carte » existant.
- hideCard() : RedirectResponse
- Réaffiche un produit « carte » dans le catalogue public.
- index() : Response
- Affiche la liste paginée des produits « carte » du catalogue.
- showApercu() : Response
- Prévisualise la fiche produit publique d'une carte depuis le back-office.
- showCard() : RedirectResponse
- Masque un produit « carte » du catalogue public.
- uploadImage() : void
- Déplace les visuels soumis dans le formulaire et les rattache à la carte.
- normalizeOptions() : void
- Normalise les options d'impression d'une carte pour garantir une unique option par défaut.
Methods
createCard()
Crée un nouveau produit « carte » dans le catalogue.
public
createCard(Request $request, EntityManagerInterface $entityManager) : Response
Refuse l'accès hors ROLE_ADMIN/ROLE_OPERATOR. Instancie une Card vierge, traite le
formulaire CardType et, à la soumission valide, déplace les visuels via
AdminCardController::uploadImage(), normalise les options d'impression via
AdminCardController::normalizeOptions(), puis persiste l'entité.
Route : /admin/business/card/new (toutes méthodes), nom app_card_new.
Réservée à ROLE_ADMIN ou ROLE_OPERATOR (contrôle en dur dans la méthode).
Parameters
- $request : Request
- $entityManager : EntityManagerInterface
Attributes
- #[Route]
- '/business/card/new'
- $name: 'app_card_new'
Return values
Response —Formulaire HTML admin/card/create.html.twig, ou redirection vers app_card après création.
delete()
Supprime définitivement un produit « carte ».
public
delete(Request $request, Card $card, EntityManagerInterface $entityManager) : Response
Refuse l'accès hors ROLE_ADMIN/ROLE_OPERATOR. La suppression n'est effectuée que si le
jeton CSRF delete<id> transmis dans _token est valide ; en cas de jeton invalide, rien
n'est supprimé mais le flash de succès « Carte supprimée avec succès. » est tout de même
affiché et la redirection est identique — le résultat n'est donc pas discriminant côté
interface.
Route : /admin/card/{id} (DELETE), nom admin_card_delete.
Réservée à ROLE_ADMIN ou ROLE_OPERATOR (contrôle en dur dans la méthode).
Parameters
- $request : Request
- $card : Card
- $entityManager : EntityManagerInterface
Attributes
- #[Route]
- '/card/{id}'
- $name: 'admin_card_delete'
- $methods: ['DELETE']
Return values
Response —Redirection vers app_card.
edit()
Modifie un produit « carte » existant.
public
edit(Card $card, Request $request, EntityManagerInterface $entityManager) : Response
Refuse l'accès hors ROLE_ADMIN/ROLE_OPERATOR. Traite le formulaire CardType lié à la
carte ; à la soumission valide, réapplique AdminCardController::uploadImage() puis
AdminCardController::normalizeOptions() avant le flush(). Note : l'upload ne
remplace le tableau images que si de nouveaux fichiers ont été envoyés.
Route : /admin/card/{id}/edit (toutes méthodes), nom admin_card_edit.
Réservée à ROLE_ADMIN ou ROLE_OPERATOR (contrôle en dur dans la méthode).
Parameters
- $card : Card
- $request : Request
- $entityManager : EntityManagerInterface
Attributes
- #[Route]
- '/card/{id}/edit'
- $name: 'admin_card_edit'
Return values
Response —Formulaire HTML admin/card/edit.html.twig, ou redirection vers app_card après enregistrement.
hideCard()
Réaffiche un produit « carte » dans le catalogue public.
public
hideCard(Card $card, EntityManagerInterface $entityManager) : RedirectResponse
Malgré son nom, cette action repasse hide = false sur la carte et confirme par un flash
« Carte affichée avec succès. ». Contrairement aux autres actions du contrôleur, elle
n'effectue aucun contrôle de rôle explicite : seule la sécurisation globale du préfixe
/admin (pare-feu / access_control) la protège.
Route : /admin/card/{id}/hide (toutes méthodes), nom app_card_hide.
Parameters
- $card : Card
- $entityManager : EntityManagerInterface
Attributes
- #[Route]
- '/card/{id}/hide'
- $name: 'app_card_hide'
Return values
RedirectResponse —Redirection vers app_card.
index()
Affiche la liste paginée des produits « carte » du catalogue.
public
index(CardRepository $cardRepository, Request $request, PaginatorInterface $paginator) : Response
Refuse l'accès si l'utilisateur ne détient ni ROLE_ADMIN ni ROLE_OPERATOR. Les cartes
sont triées par identifiant décroissant et paginées par blocs de 4 (paramètre de query
page). Aucun filtre de visibilité n'est appliqué : les cartes masquées apparaissent aussi.
Route : /admin/card (toutes méthodes), nom app_card.
Réservée à ROLE_ADMIN ou ROLE_OPERATOR (contrôle en dur dans la méthode).
Parameters
- $cardRepository : CardRepository
- $request : Request
- $paginator : PaginatorInterface
Attributes
- #[Route]
- '/card'
- $name: 'app_card'
Return values
ResponseshowApercu()
Prévisualise la fiche produit publique d'une carte depuis le back-office.
public
showApercu(Card $card, CardRepository $cardRepository, Request $request) : Response
Refuse l'accès hors ROLE_ADMIN/ROLE_OPERATOR. Effet de bord notable : le panier stocké
en session (cart) est vidé avant le rendu. La méthode récupère jusqu'à 4 produits
similaires (même typeProduct), calcule la taille maximale de fichier de design autorisée
en Mo à partir du paramètre design_file_max_bytes, puis rend le template public de fiche
produit avec le drapeau is_admin_preview à true.
Route : /admin/show/{id}/apercu (toutes méthodes), nom admin_card_apercu.
Réservée à ROLE_ADMIN ou ROLE_OPERATOR (contrôle en dur dans la méthode).
Parameters
- $card : Card
- $cardRepository : CardRepository
- $request : Request
Attributes
- #[Route]
- '/show/{id}/apercu'
- $name: 'admin_card_apercu'
Return values
Response —Page HTML home/product-retail.html.twig en mode aperçu administrateur.
showCard()
Masque un produit « carte » du catalogue public.
public
showCard(Card $card, EntityManagerInterface $entityManager) : RedirectResponse
Malgré son nom, cette action ne rend rien : elle positionne hide = true sur la carte
(la retirant donc de la boutique) et confirme par un flash « Carte masquée avec succès ».
L'opération inverse est AdminCardController::hideCard().
Route : /admin/card/{id}/show (toutes méthodes), nom app_card_show.
Réservée à ROLE_ADMIN ou ROLE_OPERATOR (contrôle en dur dans la méthode).
Parameters
- $card : Card
- $entityManager : EntityManagerInterface
Attributes
- #[Route]
- '/card/{id}/show'
- $name: 'app_card_show'
Return values
RedirectResponse —Redirection vers app_card.
uploadImage()
Déplace les visuels soumis dans le formulaire et les rattache à la carte.
public
uploadImage(FormInterface $form, Card $card) : void
Lit le champ images du formulaire ; si aucun fichier n'a été envoyé, la méthode ne fait
rien et les visuels existants sont conservés. Sinon chaque fichier est renommé avec un
uniqid() et son extension devinée, puis déplacé dans le répertoire du paramètre
image_directory. Une FileException sur un fichier est capturée : un flash d'erreur est
posé, l'erreur est écrite dans le log PHP et le fichier concerné est simplement ignoré.
Le tableau des noms de fichiers réussis remplace intégralement Card::setImages().
Parameters
- $form : FormInterface
- $card : Card
normalizeOptions()
Normalise les options d'impression d'une carte pour garantir une unique option par défaut.
private
normalizeOptions(Card $card) : void
Parcourt Card::getPrintOptions() en mémorisant la première option active rencontrée.
Toute option marquée par défaut au-delà de la première est repassée à false
(dédoublonnage). Si finalement aucune option n'est marquée par défaut et qu'au moins une
option active existe, cette première option active est promue par défaut. Les
modifications ne sont pas persistées ici : elles le sont par le flush() de l'appelant.
Parameters
- $card : Card
-
Carte dont les options d'impression doivent être normalisées.