Large uncommitted body of work accumulated across sessions on this branch -- committing as a checkpoint so it's tracked and future worktree-isolated agents see the real codebase instead of a stale ancestor commit. Covers the management app's dedicated Tailwind theme and templates, the club onboarding requirement/signup workflow (club/services/onboarding.py, requirement/status models, sign-up dashboard), fee/status auto-activation decoupling, referee management, and the new events calendar grid service layer. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ECGMEwrc2k4D8VQuwjstj9
47 lines
2.3 KiB
Python
47 lines
2.3 KiB
Python
"""Tenant-aware page branding.
|
|
|
|
Every page inherits its chrome from ``base_template``. On a club subdomain that
|
|
resolves to the club-branded skin, on the base domain to the platform one — the
|
|
control panel's own industrial design system (assets/controlpanel.css) — so the
|
|
auth screens (login, password reset, MFA, passkeys — anything allauth ships, now
|
|
or later) follow the tenant without a single template of their own knowing that
|
|
clubs exist. templates/403.html and templates/maintenance.html extend
|
|
``base_template`` directly too, so they follow the same split.
|
|
|
|
A club subdomain serves two very different chromes, though: the public club site
|
|
(daisyUI, assets/app.css) and the management app (assets/management.css) live on
|
|
the same tenant, distinguished only by path. Without the checks below, a staff
|
|
member clicking "Change password" from inside the management app would land back
|
|
on the club's *public* skin -- jarring, and visually nothing like where they just
|
|
were. MANAGEMENT_BASE_TEMPLATE picks up management/base.html's own chrome instead,
|
|
for two cases: a request path directly under /manage/ (matching management/urls.py's
|
|
own hardcoded "manage/" prefix in rosterchief/urls.py -- e.g. a 403 on a management
|
|
page), and the session flag ClubStaffRequiredMixin.dispatch sets on every management
|
|
view (club/mixins.py) -- needed because allauth's password-change/MFA/logout screens
|
|
live under /accounts/, outside /manage/, so the path check alone can't see they were
|
|
reached from the management app's own user menu.
|
|
|
|
The control panel's own pages deliberately do *not* use this: controlpanel/base.html
|
|
hardcodes itself, so no branding bug can ever dress the platform panel up as a club.
|
|
"""
|
|
|
|
PLATFORM_BASE_TEMPLATE = "controlpanel/_auth_base.html"
|
|
CLUB_BASE_TEMPLATE = "_club_base.html"
|
|
MANAGEMENT_BASE_TEMPLATE = "management/_auth_base.html"
|
|
|
|
|
|
def branding(request):
|
|
club = getattr(request, "club", None) # set by ClubTenantMiddleware
|
|
|
|
if club and (request.path.startswith("/manage/") or request.session.get("management_context")):
|
|
base_template = MANAGEMENT_BASE_TEMPLATE
|
|
elif club:
|
|
base_template = CLUB_BASE_TEMPLATE
|
|
else:
|
|
base_template = PLATFORM_BASE_TEMPLATE
|
|
|
|
return {
|
|
"club": club,
|
|
"base_template": base_template,
|
|
}
|