Recipe: guild dashboard¶
Team-facing page showing guild profile data imported from Blizzard.
What ships today¶
- A
wow_guildentity per imported guild — name, realm, faction, member count, achievement points, and the crest (colors + emblem/border media). - The
wow:guild-lookupdrush command and the correspondingGuildSync::lookup()service method. - Plugin extension points for roster, guild achievements, and guild activity (
GuildDataProvidermanager) — contract and tests in place, no in-tree provider implementations yet.
What requires custom work¶
If you need a full team dashboard with roster, shared achievement progress, or activity feed, you have to build it yourself:
- Roster hydration —
GuildSync::lookup()does not createwow_characterentities for each roster member. You either import characters one by one withwow:character-lookup, or write aGuildDataProviderplugin that walks the roster endpoint and callsCharacterSync::lookup()per member. - Guild-scoped achievement progress — the
wow_achievement_progressjunction supports aguildreference (projected bywow_guild), but nothing in the tree currently populates it. A guild-achievementGuildDataProviderplugin would. - Guild activity feed — same story. The endpoint is wrapped in
GuildApi::getActivity()and is exposed to plugins, but no in-tree plugin persists it anywhere.
See the plugin system for how to implement these.
Minimum modules (profile + crest only)¶
That covers the read-only guild profile: name, faction, member count, achievement points, and the crest. Nothing else.
Minimum modules (with per-character member data)¶
Add wow_character plus whichever reference modules it needs, then add the catalog modules you want surfaced per member:
wow_realm
wow_playable_class
wow_playable_race
wow_playable_specialization
wow_character
wow_achievement # optional per-character progress
wow_mount # optional per-character collection
...
Setup (profile + crest)¶
drush en wow wow_realm wow_guild -y
drush wow:sync-realms --force
drush wow:guild-lookup stormrage "my guild name"
This fetches the guild profile and crest, saves the wow_guild entity, and invokes any registered GuildDataProvider plugins. By default none ship, so nothing else happens.
Setup (with roster as characters)¶
After the basic setup, import each roster member you care about:
Each character sync invokes the registered CharacterDataProvider plugins, so if wow_achievement, wow_mount, etc. are enabled, that data lands automatically.
There is no built-in "refresh all roster members" command. If you need one, wrap CharacterSync::refresh() in your own drush command or cron task.
Exposing the dashboard¶
The suite ships no Views and no templates. Build your own UX:
- Guild profile block — render the
wow_guildentity directly. - Roster view — a View of
wow_character, filtered by whichever property you track membership through. Note thatwow_character::guild_nameis a plain string (not an entity reference towow_guild); if you want a true reference, add a field yourself or cross-reference by name + realm. - Cross-character achievement coverage — a View of
wow_achievement_progressfiltered on the characters you imported, grouped by achievement.
Data freshness¶
wow:guild-lookuprefreshes the single guild it names. Schedule it on the cadence your site needs.- Character-backed data is only as fresh as the last
wow:character-lookupfor that member. - The
wow.ttl_sweeperstill applies — junction rows untouched in 30 days are swept.
Guild ownership of achievement progress¶
When both wow_guild and wow_achievement are enabled, the wow_achievement_progress junction gets a guild reference field in addition to character (projected by wow_character). The column exists and is indexed, but the suite does not currently write guild-owned rows to it — that's extension-point territory via a GuildDataProvider plugin.
Uninstalling wow_guild purges rows whose guild column is populated and leaves character-owned rows intact. See lifecycle.
See also¶
- Plugin system — GuildDataProvider
- Blizzard API coverage — what's wired vs extension-point