- búsqueda paginada (count_search_topics + offset/limit) con controles en la plantilla
- contador de visitas: columna opcional forum_topics.views con detección automática
(has_views_column), increment_views al ver el tema, mostrado en lista y cabecera
- sql/forum_views.sql (ALTER opcional) + docs
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- app 'forum': portada (categorías/foros), ver foro y tema (paginado), crear tema,
responder, editar/borrar posts y moderación (fijar, bloquear, mover, borrar/restaurar)
- lee/escribe la BD acore_web (5ª conexión, DB_NAME_WEB) por SQL directo, tablas
forum_categories/forums/forum_topics/forum_posts/forum_reads (portado de NovaWeb-main)
- identidad = cuenta de juego en sesión; permisos simplificados por gmlevel
(FORUM_MOD_GMLEVEL) en vez de la matriz group_level×permission del original
- saneado del HTML de posts con nh3 (evita el XSS del original); POST+CSRF en formularios
- plantillas con los partials del sitio; enlace 'FOROS' del menú apunta al foro interno
- sql/forum_schema.sql y docs/FORO.md
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- pagos_sumup.py: crear_checkout_battlepay(reference,...) y obtener_checkout()
- battlepay_view: lista las órdenes PENDING de la cuenta de juego
- battlepay_pay_view: crea checkout SumUp para una orden concreta (checkout_reference=reference)
- sumup_webhook: marca la orden PAID (valida estado contra la API de SumUp si falta)
- plantillas account/battlepay.html y partials/pago_sumup.html
- sql/battlepay_sumup.sql (tablas battlepay_orders/battlepay_price) y docs actualizados
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>