Añade foro de comunidad integrado (app forum) con el diseño de NovaWoW

- 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>
This commit is contained in:
2026-07-12 17:10:55 +00:00
parent 2162fe34d0
commit 2c30844bf7
21 changed files with 1385 additions and 1 deletions
+9
View File
@@ -75,6 +75,7 @@ INSTALLED_APPS = [
'django_ckeditor_5',
'django_extensions',
'wotlk_db',
'forum',
]
# Configuración para AC SOAP
@@ -220,8 +221,16 @@ DATABASES = {
'acore_auth': _mysql_db(os.getenv('DB_NAME_AUTH', 'acore_auth'), _ACORE_OPTIONS),
'acore_characters': _mysql_db(os.getenv('DB_NAME_CHARACTERS', 'acore_characters'), _ACORE_OPTIONS),
'acore_world': _mysql_db(os.getenv('DB_NAME_WORLD', 'acore_world'), _ACORE_OPTIONS),
# Base de datos del portal web (foro, etc.)
'acore_web': _mysql_db(os.getenv('DB_NAME_WEB', 'acore_web'), _ACORE_OPTIONS),
}
# Nivel GM mínimo (acore_auth.account_access.gmlevel) para moderar el foro
FORUM_MOD_GMLEVEL = int(os.getenv('FORUM_MOD_GMLEVEL', '2'))
# Tamaños de página del foro
FORUM_TOPICS_PER_PAGE = int(os.getenv('FORUM_TOPICS_PER_PAGE', '20'))
FORUM_POSTS_PER_PAGE = int(os.getenv('FORUM_POSTS_PER_PAGE', '15'))
AC_LOGON = None