Aller au contenu

tilttek/badges

✅ publié

Des badges que vos membres gagnent par ce qu'ils font et qu'ils montrent quand ils le choisissent.

tilttek/badges attribue des badges et des succès à partir de l'activité des membres, enregistrée par tilttek/activity. Un badge a un critère lu dans le journal — un nombre d'activités, un total de leurs quantités, une première fois, des jours consécutifs, une période, une combinaison de critères, une valeur que mesure l'application, ou une attribution à la main. La progression vers lui est calculée et affichée, 7 sur 10. Les paliers relient les badges d'une série — bronze, argent, or. Un badge répétable se gagne de nouveau chaque fois que sa cible est de nouveau atteinte. Un badge révocable est retiré quand l'activité qui l'a valu est annulée. Un succès caché n'est affiché, et son critère avec lui, qu'une fois gagné. Quand une règle change, les badges sont recalculés à partir du journal sur la période que choisit l'application.

Un badge gagné reste privé tant que le membre ne le montre pas. Le membre choisit un titre porté à côté de son nom, la vitrine de son profil et son ordre, ce qu'il partage et où, et quelles autres applications peuvent lire ses badges, un consentement qu'il retire en tout temps. Effacer un membre supprime ses attributions, les contributions de son activité, son profil et ses consentements. tilttek/badges-bundle délivre un badge comme une attestation Open Badges 3.0, à la demande du membre, par phil/open-badges.

Elle s'adresse à une application qui reconnaît ce que font ses membres — un site communautaire, un site de jeux, une boutique — et qui veut des badges qu'elle peut recalculer et des membres qui décident de ce qui est public. tilttek/badges-bundle l'intègre à Symfony et garde les badges dans Doctrine DBAL. Une application sans Symfony prend la bibliothèque seule, avec ses stockages en mémoire ou les siens.

C'est une bibliothèque PHP simple. Ses dépendances sont tilttek/activity, le journal que lisent les critères, phil/resource, la référence opaque d'un membre, psr/clock, et l'extension mbstring. Les membres sont des références que donne l'application, member:44 : la bibliothèque ne lit jamais un nom, un courriel ou un compte.

La conception est petite : un Badge avec son Criterion, tenu par un Catalog. BadgeProjection lit le journal en Contribution et en Award par quatre stockages. Evaluator calcule une Progress. Badges sert l'application : attributions, progression, Profile, Showcase, partage, consentements, effacement.

État

PartieÉtat
Badge, Tier, Catalog : codes, textes, images, paliers, badges répétables, cachés et révocables, un catalogue à partir de valeurs simplesImplémenté et testé
Critères : Count (et premières fois), Total, Streak, Measure, Manual, AtLeast (tous ou certains), périodes et conditions de contexte dans Scope, CriterionReaderImplémenté et testé
BadgeProjection et Evaluator : contributions une seule fois par activité, attributions et répétitions, retraits, reconstructions sans nouvelle annonceImplémenté et testé
Badges : attributions, progression, vue d'ensemble, attributions manuelles, profil, vitrine, titre, partage, consentements des autres applications, effacementImplémenté et testé
Stockages — ProgressStore, AwardStore, ProfileStore, GrantStore — et leurs implémentations en mémoireImplémenté et testé
Exceptions sous une seule interface BadgesExceptionImplémenté et testé

Documentation

DocumentCe qu'il couvre
InstallationLes prérequis et l'installation.
Badges et critèresLes badges, les paliers, chaque sorte de critère, les périodes, les conditions de contexte, le catalogue à partir de valeurs simples.
AttribuerLa projection, la progression, les badges répétables et révocables, les attributions manuelles, les reconstructions, les observateurs.
Ce que montre un membreLes badges privés, la vitrine, le titre, le partage, le consentement des autres applications.
EffacementCe qu'efface la suppression d'un membre.
Écrire un stockageLes contrats des quatre stockages qu'implémente le stockage d'une application.
Points d'extensionCe qu'une application fournit à la bibliothèque : stockages, mesures, critères, observateurs, partage, horloge.
ExceptionsBadgesException et ses exceptions, avec leurs messages.
TestsLes tests de la bibliothèque et son seuil de mutation, et comment tester du code qui attribue des badges.
RéférenceChaque type de la bibliothèque, avec son rôle.

Démarrage rapide

composer require tilttek/badges
use Tilttek\Badges\BadgeProjection;
use Tilttek\Badges\Badges;
use Tilttek\Badges\Catalog;
use Tilttek\Badges\Evaluator;
use Tilttek\Badges\Store\InMemoryAwardStore;
use Tilttek\Badges\Store\InMemoryGrantStore;
use Tilttek\Badges\Store\InMemoryProfileStore;
use Tilttek\Badges\Store\InMemoryProgressStore;

$catalog = Catalog::fromArray([
    'commenter' => ['name' => 'Commenter', 'criterion' => ['count' => ['verbs' => ['news.commented'], 'times' => 10]]],
    'regular' => ['name' => 'Regular', 'criterion' => ['streak' => ['verbs' => ['site.visited'], 'days' => 7]]],
], 'America/Toronto');
$progress = new InMemoryProgressStore();
$awards = new InMemoryAwardStore();
$evaluator = new Evaluator($catalog, $progress);

$projection = new BadgeProjection($evaluator, $progress, $awards); // handed to tilttek/activity's projections
$badges = new Badges($evaluator, $progress, $awards, new InMemoryProfileStore(), new InMemoryGrantStore(), $clock);

$badges->progress($member, 'commenter'); // 7 of 10

Prérequis

PHP 8.5 ou plus récent, avec l'extension mbstring.

Contribuer

Les contributions sont les bienvenues sur le monodépôt de PHIL : lisez le guide de contribution et le code de conduite. Signalez une vulnérabilité en privé, comme l'explique la politique de sécurité, jamais dans un ticket public.

Licence

MIT, © Philippe Gamache, doing business as Le Gnome Archiviste; a Tilttek project. Voir LICENSE.