# Qullqi Wasi — Instalación en Hosting Compartido (sin root)
## Guía paso a paso para phpMyAdmin / LiteSpeed / cPanel

> Aplica a: b4all, cPanel, Plesk, Hostinger, SiteGround y cualquier
> hosting donde **no tengas `sudo`** y el servidor use **LiteSpeed**.

---

## ANTES DE EMPEZAR — Lista de verificación

- [ ] Tienes acceso al panel del hosting (cPanel / b4all)
- [ ] Tienes acceso a phpMyAdmin desde el panel
- [ ] Tienes el archivo `database/qullqi_wasi_base_datos.sql`
- [ ] Sabes cuál es el directorio raíz de tu dominio o subdominio

---

## PASO 1 — Subir los archivos al servidor

### Opción A: Administrador de Archivos del panel

1. Abrir el **Administrador de Archivos** del hosting
2. Navegar al directorio raíz de tu dominio/subdominio
3. Subir el ZIP del proyecto y extraerlo ahí mismo
4. La estructura final debe quedar así:

```
qullqiwasi.b4all.net/       ← raíz del subdominio
├── app/
├── config/
├── database/
├── public/                 ← el servidor web llega hasta aquí
│   ├── index.php
│   └── .htaccess
├── scripts/
└── storage/
```

> Si el panel no te permite elegir el DocumentRoot y el dominio
> apunta directamente a la carpeta raíz, mueve el contenido de
> `public/` (index.php y .htaccess) un nivel arriba, a la raíz,
> y cambia `url_base` en `config/aplicacion.php` a:
> `'url_base' => 'https://qullqiwasi.b4all.net'`

### Opción B: FTP (FileZilla / WinSCP)

```
Host:     qullqiwasi.b4all.net  (o la IP del servidor)
Usuario:  caluiwrb
Puerto:   21 (FTP) o 22 (SFTP si está disponible)
```

---

## PASO 2 — Crear la base de datos en cPanel

1. En cPanel → **Bases de datos MySQL**
2. **Crear nueva base de datos** → escribir `qullqi_wasi_db` → **Crear**
3. **Usuarios de MySQL** → **Agregar nuevo usuario**:
   - Usuario: `qw_user`
   - Contraseña: una segura (guárdala)
   → Clic en **Crear usuario**
4. **Agregar usuario a base de datos**:
   - Seleccionar `caluiwrb_qw_user` y `caluiwrb_qullqi_wasi_db`
   → **Agregar** → marcar **TODOS LOS PRIVILEGIOS** → Confirmar

> ⚠️ cPanel agrega automáticamente el prefijo de tu cuenta.
> El nombre real será algo como `caluiwrb_qullqi_wasi_db`.
> Anota el nombre **exacto** que aparece en pantalla.

---

## PASO 3 — Importar el modelo de datos en phpMyAdmin

**3.1** En el panel → **phpMyAdmin**

**3.2** En el panel izquierdo hacer clic sobre `caluiwrb_qullqi_wasi_db`

**3.3** En la barra superior clic en la pestaña **Importar**

**3.4** Configurar:
- **Archivo a importar** → **Seleccionar archivo**
  → elegir `database/qullqi_wasi_base_datos.sql`
- **Juego de caracteres**: `utf8mb4`
- Resto de opciones: dejar por defecto

**3.5** Clic en **Continuar** (al final de la página)

**3.6** Debe aparecer:
```
Importación terminada correctamente. Se han ejecutado XX consultas SQL.
```

En el panel izquierdo deben aparecer estas 10 tablas:
```
actividad_diaria    album_usuario    auditoria
colecciones         estampas         intercambios
inventario_estampas roles            secciones
usuarios
```

---

## PASO 4 — Actualizar contraseñas de usuarios

**4.1** En phpMyAdmin, pestaña **SQL**, ejecutar:

```sql
-- Contraseña del admin: Admin2026*
-- Hash verificado con bcrypt cost=10
UPDATE usuarios
SET contrasena_hash = '$2y$10$nIBdgLCqlvGHWUmjdWXcMuzX1.euj4KDcRD8mNHWyB51Te9UO4NLa'
WHERE nombre_usuario = 'admin';

-- Contraseña del coleccionista demo: Demo2026*
-- Hash verificado con bcrypt cost=10
UPDATE usuarios
SET contrasena_hash = '$2y$10$0QMKO5yYUWTYyVwXFvRldO.Y6FnW9yhkh3UuZ/PQqKosdDJzpAHgW'
WHERE nombre_usuario = 'coleccionista.demo';
```

Clic en **Continuar**. Debe indicar: `1 fila afectada` para cada sentencia.

**4.2** Verificar:
```sql
SELECT id, nombre_usuario, estado, LEFT(contrasena_hash, 7) AS tipo_hash
FROM usuarios;
```
El campo `tipo_hash` debe mostrar `$2y$10$` en ambas filas.

---

## PASO 5 — Configurar la aplicación

### `config/base_datos.php`

```php
return [
    'motor'        => 'mysql',
    'servidor'     => 'localhost',
    'puerto'       => 3306,
    'base_datos'   => 'caluiwrb_qullqi_wasi_db',  // nombre exacto
    'usuario'      => 'caluiwrb_qw_user',           // usuario exacto
    'contrasena'   => 'tu_contrasena_aqui',
    'codificacion' => 'utf8mb4',
    'colacion'     => 'utf8mb4_unicode_ci',
    'opciones'     => [
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES   => false,
    ],
];
```

### `config/aplicacion.php` — la clave más importante

```php
// ✅ CORRECTO para hosting compartido (el dominio YA apunta a public/)
'url_base'   => 'https://qullqiwasi.b4all.net',

// ❌ INCORRECTO — provoca el error 404 en LiteSpeed
'url_base'   => 'https://qullqiwasi.b4all.net/public',

// ✅ CORRECTO para XAMPP local (proyecto en htdocs/qullqi_wasi/)
'url_base'   => 'http://localhost/qullqi_wasi/public',
```

**Regla:** `url_base` debe ser exactamente lo que escribes en el
navegador para llegar a la pantalla de login, **sin `/public`** si el
dominio ya apunta a esa carpeta.

```php
'depuracion' => false,  // false en hosting
```

---

## PASO 6 — Verificar el .htaccess (LiteSpeed)

El `.htaccess` incluido ya tiene soporte para LiteSpeed. Verificar que
el archivo `public/.htaccess` se subió correctamente al servidor y que
contiene el bloque `<IfModule LiteSpeed>`.

Si el hosting tiene el Administrador de Archivos, abrir el archivo y
confirmar que las primeras líneas son:

```apache
Options -Indexes -MultiViews

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    ...
</IfModule>

<IfModule LiteSpeed>
    RewriteEngine On
    RewriteBase /
    ...
</IfModule>
```

> El `RewriteBase /` (con solo una barra) es correcto cuando el
> DocumentRoot apunta directamente a la carpeta `public/`.
> Si ves `RewriteBase /qullqi_wasi/public/` de una versión anterior,
> reemplázalo con el archivo nuevo incluido en este ZIP.

---

## PASO 7 — Permisos de directorios

En el Administrador de Archivos, dar permiso **755** a:

```
storage/logs/
storage/uploads/
storage/backups/
public/uploads/
```

Clic derecho → **Cambiar permisos** → `755` → Confirmar.

---

## PASO 8 — Probar la aplicación

Abrir en el navegador:
```
https://qullqiwasi.b4all.net
```

Debe aparecer la pantalla de login. Iniciar sesión con:
```
Usuario:    admin
Contraseña: Admin2026*
```

---

## ❓ Solución de problemas

| Síntoma | Causa probable | Solución |
|---|---|---|
| `404 Not Found` en login | `url_base` tiene `/public` de más, o `.htaccess` incorrecto | Quitar `/public` de `url_base`; reemplazar `.htaccess` con el incluido en el ZIP |
| `404` en LiteSpeed al navegar | El bloque `<IfModule LiteSpeed>` falta en `.htaccess` | Reemplazar `.htaccess` con el del ZIP actualizado |
| Pantalla en blanco | Error PHP no visible | Poner `'depuracion' => true` en `aplicacion.php` temporalmente |
| `Access denied for user` | Credenciales de BD incorrectas | Verificar nombres exactos (con prefijo) en `config/base_datos.php` |
| Login no funciona | Hash de contraseña no actualizado | Re-ejecutar el UPDATE del Paso 4 en phpMyAdmin |
| Error 403 en uploads | Permisos insuficientes | Dar permiso 755 a `public/uploads/` y `storage/uploads/` |

---

*Qullqi Wasi © 2026 — Guía hosting compartido / LiteSpeed / phpMyAdmin*
