Foro: edición/borrado de posts, moderación de temas y búsqueda

Portado desde forum/db.py + forum/permissions.py de Django:
- lib/forum-perm.ts: forumIsModerator (gmlevel >= FORUM_MOD_GMLEVEL) y
  canEditPost (autor o moderador).
- Edición y borrado lógico de posts (autor o mod), respetando tema bloqueado,
  con validación de longitud mínima (plainLength).
- Moderación de temas (solo mod): bloquear/desbloquear, fijar/no fijar, borrar.
- Búsqueda de temas por título/contenido (searchTopics/countSearchTopics)
  con página /forum/search y buscador en el índice.
- API: PATCH/DELETE /api/forum/post, POST /api/forum/moderate (401/403 correctos).
- UI: PostActions, TopicModBar, ForumSearchBox; marca "editado" y "[Fijado]".
- i18n: 22 claves nuevas en es/en.

Verificado: build OK, /forum y /forum/search 200, APIs 401 sin sesión.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-13 00:28:39 +00:00
parent 13636d097a
commit 1de1002938
14 changed files with 590 additions and 9 deletions
+23 -1
View File
@@ -268,7 +268,29 @@
"sending": "Enviando…",
"loginToPost": "Inicia sesión para participar.",
"emptyError": "Completa todos los campos.",
"genericError": "Algo ha salido mal. Inténtalo más tarde."
"genericError": "Algo ha salido mal. Inténtalo más tarde.",
"moderation": "Moderación",
"lock": "Bloquear",
"unlock": "Desbloquear",
"pin": "Fijar",
"unpin": "No fijar",
"pinned": "Fijado",
"deleteTopic": "Borrar tema",
"confirmDeleteTopic": "¿Seguro que quieres borrar este tema?",
"edit": "Editar",
"delete": "Borrar",
"save": "Guardar",
"cancel": "Cancelar",
"confirmDeletePost": "¿Seguro que quieres borrar este mensaje?",
"tooShort": "El mensaje es demasiado corto (mínimo 5 caracteres).",
"topicLocked": "El tema está bloqueado.",
"editedMark": "editado",
"search": "Buscar",
"searchPlaceholder": "Buscar en el foro…",
"searchHint": "Escribe al menos 2 caracteres para buscar.",
"noResults": "No hay resultados para «{query}».",
"resultsCount": "{count} resultado(s) para «{query}».",
"in": "en"
},
"Admin": {
"title": "Panel de administración",