Install

Works with Drupal: ^10.3 || ^11

Using 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 wow permission replaces administer site configuration on 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/wow with tabbed interface — default tab renamed to "API & Core", submodule tabs alongside.
  • New /admin/content/wow container 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_icon string 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 ConnectedRealmStatus service 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/realm with 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_only boolean pair with a single faction string field (ALLIANCE / HORDE / empty). Includes update hooks for data migration.
  • Toys: removed should_exclude_if_uncollected field (Blizzard display hint, not useful as stored data).
  • Specializations: converted wow_playable_class_id from plain integer to entity_reference targeting the wow_playable_class vocabulary. Views can now follow the relationship natively.
  • Reputation factions: converted parent faction storage from a custom entity_reference field to Drupal's native taxonomy parent field. 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 (enGBen_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.
Created by: hexblot
Created on: 17 Apr 2026 at 00:04 UTC
Last updated: 17 Apr 2026 at 00:05 UTC
Bug fixes
New features

Other releases