Aller au contenu

Configuration

tilttek/badges-bundle
tilttek_badges:
    store: doctrine              # or memory, for tests
    connection: default          # the DBAL connection of the tables
    timezone: UTC                # the days of a streak and the dates of a period
    badges: {}                   # by code, see below
    projection: badges           # the name of the projection's checkpoint
    showcase_size: 6             # badges a member features, at most
    max_awards_per_activity: 10  # awards of a repeatable badge one activity brings, at most
    translation_domain: badges   # the domain of the badges' names and descriptions
    open_badges:
        enabled: false           # needs phil/open-badges-bundle, which holds the issuer and its key
        achievement_url: ~       # e.g. https://example.org/badges/{code}
    privacy:
        member_kind: member      # a data subject 44 is the member member:44

Badges

Chaque badge, par code, prend name, description, image, repeatable, hidden, revocable, tier (series, rank) et son criterion, l'un de ceux-ci :

CritèreClés
countverbs, times, et context, since, until
firstverbs, et context, since, until
totalverbs, amount, et context, since, until
streakverbs, days, et context, since, until
measurename, threshold, verbs — lu par le service Tilttek\Badges\Measures de l'application
manualtrue
allune liste de critères
at_leastcount, et of, une liste de critères
tilttek_badges:
    badges:
        commenter.silver:
            name: badges.commenter.silver.name
            description: badges.commenter.silver.description
            image: /images/badges/commenter-silver.svg
            tier: { series: commenter, rank: 2 }
            revocable: true
            criterion: { count: { verbs: ['news.commented'], times: 50 } }
        december:
            name: badges.december.name
            hidden: true
            criterion: { first: { verbs: ['event.*'], since: '2026-12-01', until: '2027-01-01' } }

Le catalogue est lu à la compilation du conteneur : une erreur fait échouer la construction avec l'InvalidBadge de la bibliothèque.

Des badges dans la base de données

Le catalogue est le service Tilttek\Badges\Catalog, construit à partir de cette configuration. Une application qui modifie ses badges dans la base de données remplace ce service par sa propre fabrique, qui renvoie un Catalog : Catalog::fromArray() lit les mêmes valeurs simples à partir de lignes.

Les services ne gardent aucun état entre les requêtes : ils sont sûrs dans un worker. Les stockages en mémoire, pour les tests, se vident quand le noyau se réinitialise, et la projection oublie ce que sa dernière reconstruction gardait pour la relecture.