Install
Works with Drupal: ^10.3 || ^11Using Composer to manage Drupal site dependencies
Alternative installation files
Download tar.gz
409.81 KB
MD5: ff52ce6296cfd381b0cd4c3089b91262
SHA-1: 2316f5553aabbe8a52690483c45a29024c74052b
SHA-256: 5db4bcc20283df3e7284937c626ee4b96dd4fc38d7c81141874d7ea35013711f
Download zip
776.56 KB
MD5: 3c33409d4153c67ad494b61994d05146
SHA-1: cd38be592bb2a2a9d315bcb3e95126ed86745535
SHA-256: 1a34f23fc6aa57a35d492d5793e4f27e637b3048bdeab2159319a5b2be73a939
Release notes
Beta 2 — Views integration, permissions, admin content pages
This release adds comprehensive Views support across the entire module suite, a dedicated permission system, restructured admin navigation, and multiple data model improvements.
Permissions
- New
administer wowpermission replacesadminister site configurationon all routes and entity types. Sites no longer need to grant broad config access just to manage WoW data.
Admin navigation restructure
- Dashboard moved to
/admin/reports/wow(monitoring + sync actions). - Settings stays at
/admin/config/services/wowwith tabbed interface — default tab renamed to "API & Core", submodule tabs alongside. - New
/admin/content/wowcontainer page lists all WoW content types (same pattern as core's Content page).
Admin Views (12 new views)
Every submodule now ships an admin content listing under /admin/content/wow/:
- Realms — with region, type, category, locale, timezone, population, server status, login queue columns
- Playable Classes — with icon (WoW icon formatter)
- Playable Races — with faction filter
- Playable Specializations — with role filter, class relationship
- Power Types
- Reputation Factions — with expansion and group hierarchy filters, native taxonomy parent tree
- Achievements — character and guild category pages
- Mounts — with source type and faction filters
- Pets — with source, faction, and pet type filters
- Titles
- Toys — with source type filter
Views infrastructure
- DistinctFieldFilter base class in core — subclasses need only a table name and column name to create a DB-backed select filter. Used by 8+ filters across the suite.
- WoW icon formatter — renders
wow_iconstring fields as styled images with a game-style dark frame (CSS box-shadows, gold border). Configurable width/height. Shows a red?placeholder when the icon is
missing. - Region name field — computed Views field mapping region slugs to labels via the Region enum.
- Region filter — select dropdown backed by the Region enum.
- Locale label field — computed Views field using PHP Intl (
en_GB→ "English (United Kingdom)").
Connected realm live status
- New
ConnectedRealmStatusservice fetches server status, population, and login queue from Blizzard's connected-realm endpoint. - Supports live (per-request) and cached (State-backed with configurable TTL) modes.
- Three computed Views fields: status, population, has queue.
- Settings tab at
/admin/config/services/wow/realmwith mode toggle, TTL, and rate-limit notice. - Graceful fallback: returns stale data on API failure, catches exceptions from deleted/unavailable connected realm groups.
Data model improvements
- Mounts & Pets: replaced
is_alliance_only+is_horde_onlyboolean pair with a singlefactionstring field (ALLIANCE / HORDE / empty). Includes update hooks for data migration. - Toys: removed
should_exclude_if_uncollectedfield (Blizzard display hint, not useful as stored data). - Specializations: converted
wow_playable_class_idfrom plain integer to entity_reference targeting thewow_playable_classvocabulary. Views can now follow the relationship natively. - Reputation factions: converted parent faction storage from a custom entity_reference field to Drupal's native taxonomy
parentfield. Recursive sync handles 3+ level hierarchy (expansion → group → faction). - Realm sync: now fetches per-realm detail during index sync (category, locale, timezone, type, connected realm ID, tournament flag). Locale normalized from Blizzard's compact format (
enGB→en_GB).
Localized category field properly resolved.
Uninstall fix
- Fixed "Unknown column in WHERE" errors on MySQL during module uninstall. Our install hooks were calling
uninstallFieldStorageDefinition()explicitly, then Drupal core's ModuleInstaller did the same — double-uninstall. Now only
purges owner-linked rows and lets core handle column removal.
Documentation
- Region API classified as "Won't implement" with rationale in architecture docs.
- Core module now depends on
drupal:views.
Test coverage
- 706 tests passing on MySQL.
- New tests for ConnectedRealmStatus service (7 cases: live/cached modes, TTL, stale fallback).
- New kernel test for DistinctFieldFilter base class.
- Realm normalizeLocale tests.
- Specialization class-term resolution tests.
- Updated faction, mount, pet, toy tests for data model changes.