PredefinedFeaturesService
in package
Référentiel en dur des fonctionnalités proposées dans les offres commerciales.
Ce service ne dépend d'aucune infrastructure : il expose la constante self::FEATURES et des méthodes de lecture qui traduisent les clés techniques stockées sur les plans en libellés, descriptions et icônes Bootstrap Icons. Il est consommé par les formulaires d'administration des plans et par les gabarits d'affichage de la grille tarifaire.
Table of Contents
Constants
- FEATURES : array<string, array{label: string, description: string, icon: string}> = ['unlimited_cards' => ['label' => 'Cartes illim...
- Catalogue des fonctionnalités connues de l'application.
Methods
- getAllFeatures() : array<string, array{label: string, description: string, icon: string}>
- Retourne toutes les fonctionnalités disponibles
- getFeature() : array{label: string, description: string, icon: string}|null
- Retourne une fonctionnalité par sa clé
- getFeatureLabelAndIcon() : array{label: string, icon: string}
- Retourne le label et l'icône d'une fonctionnalité
- getSelectedFeaturesLabels() : array<int, string>
- Retourne les labels des fonctionnalités sélectionnées
- getSelectedFeaturesWithIcons() : array<int, array{label: string, icon: string}>
- Retourne les labels et icônes des fonctionnalités sélectionnées
- validateFeatureKeys() : bool
- Valide que les clés de fonctionnalités existent
Constants
FEATURES
Catalogue des fonctionnalités connues de l'application.
public
array<string, array{label: string, description: string, icon: string}>
FEATURES
= ['unlimited_cards' => ['label' => 'Cartes illimitées', 'description' => 'Créez autant de cartes que vous voulez', 'icon' => 'bi-infinity'], 'custom_design' => ['label' => 'Design personnalisé', 'description' => 'Personnalisez entièrement vos cartes', 'icon' => 'bi-palette'], 'analytics' => ['label' => 'Statistiques avancées', 'description' => 'Suivez les performances de vos cartes', 'icon' => 'bi-graph-up'], 'qr_code' => ['label' => 'Code QR personnalisé', 'description' => 'Générez des codes QR pour vos cartes', 'icon' => 'bi-qr-code'], 'nfc_support' => ['label' => 'Support NFC', 'description' => 'Cartes compatibles avec la technologie NFC', 'icon' => 'bi-broadcast'], 'priority_support' => ['label' => 'Support prioritaire', 'description' => 'Assistance technique prioritaire 24/7', 'icon' => 'bi-headset'], 'team_management' => ['label' => 'Gestion d\'équipe', 'description' => 'Gérez les cartes de votre équipe', 'icon' => 'bi-people'], 'api_access' => ['label' => 'Accès API', 'description' => 'Intégrez nos services via API', 'icon' => 'bi-code-slash'], 'white_label' => ['label' => 'Marque blanche', 'description' => 'Supprimez notre branding', 'icon' => 'bi-tag'], 'export_data' => ['label' => 'Export des données', 'description' => 'Exportez vos données en différents formats', 'icon' => 'bi-download'], 'custom_domain' => ['label' => 'Domaine personnalisé', 'description' => 'Utilisez votre propre nom de domaine', 'icon' => 'bi-globe'], 'advanced_security' => ['label' => 'Sécurité avancée', 'description' => 'Protection renforcée de vos données', 'icon' => 'bi-shield-check'], 'physical_nfc_card' => ['label' => 'Carte de visite physique NFC', 'description' => 'Recevez une carte de visite physique équipée de la technologie NFC', 'icon' => 'bi-credit-card-2-front']]
Chaque entrée est indexée par sa clé technique — celle qui est réellement stockée
dans le champ features d'un Plan — et porte trois attributs :
label (libellé français affichable), description (argumentaire commercial) et
icon (classe CSS Bootstrap Icons). Modifier une clé existante invalide les plans
déjà enregistrés en base qui y font référence.
Methods
getAllFeatures()
Retourne toutes les fonctionnalités disponibles
public
getAllFeatures() : array<string, array{label: string, description: string, icon: string}>
Simple exposition de la constante self::FEATURES sous forme de méthode, afin de la rendre accessible depuis les gabarits Twig.
Return values
array<string, array{label: string, description: string, icon: string}> —Catalogue complet, indexé par clé technique.
getFeature()
Retourne une fonctionnalité par sa clé
public
getFeature(string $key) : array{label: string, description: string, icon: string}|null
Parameters
- $key : string
-
Clé technique recherchée.
Return values
array{label: string, description: string, icon: string}|null —Définition complète de la fonctionnalité, ou null si la clé est inconnue du catalogue.
getFeatureLabelAndIcon()
Retourne le label et l'icône d'une fonctionnalité
public
getFeatureLabelAndIcon(string $key) : array{label: string, icon: string}
Pour une clé inconnue, la méthode ne lève pas d'erreur mais applique un repli
d'affichage : la clé brute est utilisée comme libellé et l'icône générique
bi-check est retournée. La description n'est jamais incluse dans le résultat.
Parameters
- $key : string
-
Clé technique de la fonctionnalité.
Return values
array{label: string, icon: string} —Libellé et classe d'icône, éventuellement issus du repli.
getSelectedFeaturesLabels()
Retourne les labels des fonctionnalités sélectionnées
public
getSelectedFeaturesLabels(array<int, string> $selectedKeys) : array<int, string>
Les clés inconnues du catalogue sont silencieusement ignorées : le tableau retourné peut donc être plus court que celui fourni en entrée. Contrairement à self::getSelectedFeaturesWithIcons(), aucun repli n'est appliqué.
Parameters
- $selectedKeys : array<int, string>
-
Clés techniques retenues sur un plan.
Return values
array<int, string> —Libellés correspondants, dans l'ordre des clés fournies.
getSelectedFeaturesWithIcons()
Retourne les labels et icônes des fonctionnalités sélectionnées
public
getSelectedFeaturesWithIcons(array<int, string> $selectedKeys) : array<int, array{label: string, icon: string}>
Applique self::getFeatureLabelAndIcon() à chaque clé : le tableau retourné a donc toujours la même taille que celui fourni en entrée, les clés inconnues étant remplacées par leur repli d'affichage plutôt qu'écartées.
Parameters
- $selectedKeys : array<int, string>
-
Clés techniques retenues sur un plan.
Return values
array<int, array{label: string, icon: string}> —Couples libellé/icône, dans l'ordre des clés fournies.
validateFeatureKeys()
Valide que les clés de fonctionnalités existent
public
validateFeatureKeys(array<int, string> $keys) : bool
La validation est stricte et s'arrête à la première clé inconnue. Un tableau vide est considéré comme valide.
Parameters
- $keys : array<int, string>
-
Clés techniques à contrôler.
Return values
bool —true si toutes les clés figurent dans self::FEATURES.