# Resumen del proyecto

Este repositorio contiene una pequeña aplicación PHP con assets estáticos y scripts auxiliares.

## Resumen

Este repositorio contiene una pequeña aplicación PHP + assets estáticos y un script auxiliar para gestionar un entorno LAMP. A continuación se describe la estructura, responsabilidad de cada archivo y las funciones/clases clave.

## Estructura de archivos

- `lamp_manager.sh` — Script Bash para instalar/configurar LAMP y gestionar virtual hosts.
- `view.php` — Generador de un `index.html` con vista del directorio y eliminación de archivos vía AJAX.
- Archivos del subdirectorio `Archivos/`:
  - `Archivos/index.php` — Lista paginada de registros desde la tabla `detalles`.
  - `Archivos/registro.php` — Formulario y lógica para insertar un nuevo registro en la tabla `detalles`.
  - `Archivos/Imagenes/Favicon/site.webmanifest` — manifest para favicons.
  - `Archivos/Js/copytxt.js` — JS para copiar texto al portapapeles.
  - `Archivos/Sql/detalles.sql` — DDL de la tabla `detalles`.
  - `Archivos/Sql/leeme.txt` — Instrucciones para importar la BD.
  - `Archivos/Styles/tema.css` — Estilos CSS del listado.
- `Etiquetas/Html.php` — Clase `Html` usada desde `Tests/index.php`.
- `Tests/index.php` — Ejemplo de uso de la clase `Html`.

## Archivos clave — explicación y símbolos importantes

### lamp_manager.sh

Archivo: `lamp_manager.sh`

Propósito: instalar Apache, MariaDB (MySQL), PHP; instalar VS Code; instalar phpMyAdmin; crear/listar/eliminar Virtual Hosts.

Funciones relevantes:

- `mensaje_estado()` — imprime estado.
- `mensaje_error()` — imprime errores.
- `pausar()` — pausa en consola.
- `instalar_lamp()` — instala la pila LAMP.
- `instalar_vscode()` — instala VS Code.
- `instalar_phpmyadmin()` — instala phpMyAdmin.
- `crear_virtualhost()` — crea un vhost y la carpeta en `/var/www`.
- `listar_virtualhosts()` — lista vhosts.
- `eliminar_virtualhost()` — elimina un vhost.
- `menu_principal()` / `menu_crud_vhost()` — UI de menú en consola.

Nota: requiere privilegios `sudo` y adaptación para distribuciones distintas a Debian/Ubuntu.

### view.php

Archivo: `view.php`

Propósito: generar `index.html` con una vista del directorio actual y manejar eliminación de archivos vía AJAX.

Síntesis:

- La lógica de eliminación se maneja al inicio mediante POST con `action=delete` y `filename`.
- Función principal: `generate_directory_view()` — lee `scandir()`, genera HTML con botones de eliminar y escribe `index.html`.
- Incluye cliente jQuery que llama a `view.php` vía AJAX para eliminar y recargar.

Notas de seguridad: usa `basename()` para sanitizar nombres y valida contra una lista de items ignorados; revisar permisos y rutas antes de usar en entornos públicos.

### Archivos/registro.php

Archivo: `Archivos/registro.php`

Propósito: insertar un nuevo registro en la tabla `detalles`.

Elementos:

- Constantes de conexión: `DB_SERVER`, `DB_USERNAME`, `DB_PASSWORD`, `DB_NAME`.
- Usa `mysqli` y sentencias preparadas para insertar: `INSERT INTO detalles (nombre, hash) VALUES (?, ?)`.
- Actualmente recibe datos por `GET` (`$_GET['nombre_archivo']`) — recomendable cambiar a `POST` en producción.

Buenas prácticas: ya usa sentencias preparadas; mejorar validación y añadir protección CSRF si hay formularios públicos.

### Archivos/index.php

Archivo: `Archivos/index.php`

Propósito: mostrar la lista paginada de nombres guardados en la tabla `detalles`.

Lógica:

- Parámetros de paginación: `$registros_por_pagina`, `$pagina_actual`, `$offset`.
- Cuenta total con `SELECT COUNT(*) AS total FROM detalles`.
- Consulta parametrizada con `LIMIT ? OFFSET ?` usando `prepare`/`bind_param`.
- Genera paginación simple (número de página, "Retroceder" / "Avanzar").

Nota: sanitiza salida con `htmlspecialchars()`.

### Archivos/Sql/detalles.sql

Archivo: `Archivos/Sql/detalles.sql`

Contenido: definición de la tabla `detalles` con columnas: `numero` (PK, AUTO_INCREMENT), `nombre` (varchar(100)), `hash` (text).

Ver `Archivos/Sql/leeme.txt` para instrucciones de importación.

### Archivos/Js/copytxt.js

Archivo: `Archivos/Js/copytxt.js`

Propósito: habilitar botón "copy txt" para copiar el contenido de `#contenedor-texto`.

Funciones: `setupCopyToClipboard()` y `copyUsingExecCommand()` (fallback).

### Etiquetas/Html.php

Archivo: `Etiquetas/Html.php`

Propósito: clase sencilla para construir etiquetas y mostrar contenido.

Elementos clave: constantes `SOLA`, `PAR`, `TEXTO`; métodos `crear()` e `imprimir()` y utilidades internas `modificar()`, `obtener()`.

### Tests/index.php

Archivo: `Tests/index.php`

Propósito: ejemplo de uso de la clase `Html` y plantilla de página con favicons. Usa `require_once "../Etiquetas/Html.php";` y luego `$html = new Html;` / `$html->imprimir(...);`

### Archivos/Styles/tema.css

Archivo: `Archivos/Styles/tema.css`

Propósito: estilos para la lista y la paginación; contiene media queries para móvil y escritorio.

## Flujo típico de uso

1. Preparar base de datos: crear base `archivos` e importar `Archivos/Sql/detalles.sql` (ver `Archivos/Sql/leeme.txt`).
2. Insertar registros: desde `Archivos/registro.php` (formulario) se inserta `nombre_archivo` en la tabla `detalles`.
3. Ver registros: abrir `Archivos/index.php` para ver la lista paginada.
4. Generar vista del directorio: ejecutar o abrir `view.php` para crear `index.html` con enlaces y botones de eliminar.
5. Script de infraestructura: ejecutar `lamp_manager.sh` en un sistema Debian/Ubuntu con `sudo` para instalar/gestionar LAMP y vhosts.

## Riesgos y recomendaciones rápidas

- `registro.php` usa GET: cambiar a POST para formularios que modifican datos.
- Validación y permisos: revisar permisos y validar rutas en `view.php` para evitar eliminación de archivos sensibles.
- Seguridad: añadir CSRF y sanitización adicional si se publica el proyecto en internet.
- Precaución con scripts: en `lamp_manager.sh`, probar en un entorno controlado antes de ejecutar en servidores de producción.

## Archivos listados (referencia rápida)

- `lamp_manager.sh`
- `view.php`
- `Archivos/index.php`
- `Archivos/registro.php`
- `Archivos/Imagenes/Favicon/site.webmanifest`
- `Archivos/Js/copytxt.js`
- `Archivos/Sql/detalles.sql`
- `Archivos/Sql/leeme.txt`
- `Archivos/Styles/tema.css`
- `Etiquetas/Html.php`
- `Tests/index.php`

### Símbolos y funciones referenciadas

- Bash: `instalar_lamp()`, `instalar_vscode()`, `instalar_phpmyadmin()`, `crear_virtualhost()`, `listar_virtualhosts()`, `eliminar_virtualhost()`, `menu_principal()`, `mensaje_estado()`, `mensaje_error()`, `pausar()`.
- PHP/View: `generate_directory_view()`.
- DB/Archivos: tabla `detalles` (`Archivos/Sql/detalles.sql`).
- HTML helper: `SOLA`, `PAR`, `TEXTO`, `Html::crear()`, `Html::imprimir()`.
- JS: `setupCopyToClipboard()`, `copyUsingExecCommand()`.