# TecnoLinguaSuite 1.0 — Instalación

Plataforma para aprender idiomas y a construir oraciones, para estudiantes de 8 a 18 años.
Multiempresa, con panel de soporte, planes, demos, suscripción anual, grupos y permisos granulares.

## Requisitos

| Componente | Versión |
|---|---|
| PHP | **8.5.12 o superior** (recomendado). También 8.4.27+ o 8.3.36+. Versiones anteriores son vulnerables a PHP2Shell (CVE-2026-109618 y CVE-2026-109619) y el instalador no continúa. |
| Extensiones | mysqli, intl, mbstring, json, zip, simplexml (obligatorias); fileinfo, gd, curl (recomendadas) |
| Base de datos | MySQL 8 o MariaDB 10.6+ (utf8mb4) |
| Servidor web | Nginx o Apache con la raíz en la carpeta `public/` |

En `php.ini` (o con `instalacion/php-tecnolinguasuite.ini`): `session.upload_progress.enabled = 0`.

## Pasos

1. Sube la carpeta completa al servidor, por ejemplo a `/var/www/tecnolinguasuite`.
2. Apunta el dominio a la carpeta **`public/`** (nunca a la raíz del proyecto).
   - Nginx: usa `instalacion/nginx-tecnolinguasuite.conf`.
   - Apache: `public/.htaccess` ya trae las URL limpias (requiere `mod_rewrite`).
3. Da permiso de escritura a `writable/` y a la raíz (solo para crear `.env`):
   `chown -R www-data:www-data writable && chmod -R 775 writable`
4. Crea una base de datos vacía (utf8mb4).
5. Abre `https://tu-dominio/instalar` y sigue los tres pasos:
   requisitos → datos de la base de datos → usuario de soporte (correo, contraseña y código de autorización).
6. Al terminar, el instalador se bloquea solo (`writable/instalado.lock`) y crea `.env` con permisos 600.

El instalador crea las tablas, los permisos, tres planes (Escuela, Institución completa y Demo 15 días),
6 temas de colores, las frases del bot y los dos cursos oficiales:

- **Inglés**: 50 niveles en 5 etapas (niveles 1 al 11 con contenido completo; los demás con su título,
  objetivo, gramática y juego definidos, listos para llenar).
- **Español: construye oraciones**: 20 niveles para aprender a armar oraciones de 3 a más de 10 palabras
  (niveles 1 al 12 con contenido).

## Primeros pasos

1. Entra como soporte. En **Contenido › Cursos oficiales** revisa los cursos y usa **Vista previa** en cualquier nivel.
2. En **Clientes › Demos** crea una demo con datos de ejemplo: trae un docente, un padre, dos clases con código
   y diez estudiantes con avance. Los accesos de ejemplo aparecen en la misma lista de demos.
3. Para un cliente real: **Organizaciones › Nueva**, elige el plan y entrega las credenciales del administrador.

## Cómo entran los estudiantes

- Con el **código de clase** en `/unirse` (si la clase y la institución lo permiten), o
- con el **usuario y la clave** que genera la institución (por ejemplo `ana482` / `sol315`).

Pantalla de cada institución: `/i/identificador` o su dominio propio.

## Agregar contenido

En cada curso: editor por nivel, o **Importar** con la plantilla de Excel, con el formato de texto
(`# NIVEL n`, `V:`, `F:`, `R:`, `P:`, `L:`, `D:`; ver `instalacion/cursos/ingles.txt`) o desde un documento
de Word o texto (queda en borrador para revisión).

## Actualizaciones

Reemplaza los archivos (sin tocar `.env` ni `writable/`) y en **Soporte › Configuración y cobro** usa
**Actualizar base de datos y catálogo**. Los scripts nuevos se colocan en `instalacion/actualizaciones/`.

## Rendimiento (1000+ usuarios)

- Activa OPcache (`opcache.validate_timestamps=0` en producción y reinicia PHP-FPM al actualizar).
- La calificación se hace en el servidor con consultas por índice; el audio se genera en el navegador
  (no consume servidor).
- Para varios servidores, mueve las sesiones a Redis o a base de datos en `app/Config/Session.php`.
