Install
Works with Drupal: ^10.3 || ^11Using Composer to manage Drupal site dependencies
Alternative installation files
Download tar.gz
584 KB
MD5: 6fe0682751eebfb10691ebc63c8ae7f6
SHA-1: 0e252340e0fa975284d14460492c36180a54b2a8
SHA-256: 2d56f00f66025d8270afe5dfb85e51895c9991b5f8c03271764304d8feaa7908
Download zip
1.09 MB
MD5: 19434d8583ec5d4b5a7e9c89309e7ef4
SHA-1: ce188a68ca02850a6537c46766401a2cac748ae1
SHA-256: dbcaa4daca8e72744de96e86357e0c17b6697d31ac5131a5d34bff99ffa87b1c
Release notes
New Submodules
- wow_guild — Guild canonical pages at
/wow/guild/{region}/{realm}/{slug}with crest, roster (Views), class distribution chart, recent achievements sidebar, and activity
feed. Configurable roster sync depth (Basic/Profile/Full). Auto-imports guilds during character sync. Guild achievements tracked viaGuildAchievementDataplugin. Custom rank names editable by guild
master. Connected realm support viaguild_realm_slugfield. - wow_spell — Spell catalog with on-demand lookup. Canonical pages at
/wow/spell/{id}/{slug}. Dashboard provider, local search integration, drush command
(wspl). - wow_journal — Dungeon/raid instance catalog (209 instances) and boss encounters. Batch sync via AdvancedQueue. Canonical pages at
/wow/instance/{id}/{slug}and
/wow/encounter/{id}/{slug}. UsesInstanceCategoryenum.
Character Pages
- Two-column layout — Hero banner with equipment in main column (3/4), stats panel and recent achievements in sidebar (1/4).
- Shallow imports — Roster-discovered characters created as lightweight stubs. First page visit shows a loading spinner with JSON status polling; auto-refreshes when sync
completes. - Character statistics — Combat stats (attributes, offense, defense, power) stored as map field, rendered in sidebar panel.
- Hunter pets — New
wow_hunter_petentity. Synced only for Hunter characters with class-gating and pet pruning. - Collection pages — Mounts, pets, toys, titles each have a dedicated Views page with local task tabs. Collection cards link to their pages.
- Achievements page — Full character achievements via Views with local task tab.
- Title rendering — Prefix/suffix display via API
display_string(Loremaster {name} vs {name} the Kingslayer). - Empty equipment slots — Placeholder frames for unequipped positions (shirt, tabard, off-hand).
- Selection upgrade — Saving character selection triggers full sync for any shallow characters.
Security & Access
- Entity access system: view own, view any, guild-based view grants.
- Search import endpoint converted to POST + CSRF token.
- Guild master access check for rank editing.
- IP hashing changed from md5 to sha256.
- Admin bypass for character refresh cooldown.
- SAST scoped to module code only.
API Coverage Expanded
- Spell detail + media, journal instance/encounter, character statistics, hunter pets, quest categories (181), reputation tiers (80 tier sets), guild activity feed.
Performance
- Render cache metadata on all 13 page controllers.
- Local-first gating on CharacterSync and GuildSync (30-day TTL).
RunTestsInSeparateProcessesremoved from 86 test files (~12 min CI savings).
Code Quality
- 5 new enums: Gender, ItemQuality, EquipmentSlot, InstanceCategory, GuildActivityType.
- Search provider helpers extracted to base class.
- Legacy
hook_wow_character_page_alter()removed. - Stub settings forms removed from 5 submodules.
views_embed_view()replaced with#type => viewrender elements.- Route standardization:
/wow/character/{region}/{realm}/{name}. - WoW class colors CSS,
wow_iconformatter with config schema.
Testing
- 949 tests (up from 831), 9,400+ assertions.
- Pipeline-level security tests for search import (POST-only, CSRF, permission).
- New coverage: shallow imports, statistics, hunter pets, guild access, roster sync, collection URLs, title display, icon formatter.
Documentation
- Dashboard/settings route distinction corrected.
- Search import contract updated (POST + CSRF + JSON).
- Character page architecture updated (provider slots primary).
- Editor permission prerequisites documented.