← Inicio

📋 Versión y Log

Historial de cambios de la aplicación

v2.3.1
2026-05-23

MAIA — Astro Chart Application

Aplicación de cartas natales

CHANGELOG



v2.3.1 — 2026-05-23



Añadido


  • API logs de WordPress: Nuevo endpoint GET /api/v1/chart/logs que devuelve los últimos N usuarios del plugin carta-natal-maia.

  • Plugin WP — Últimos usuarios: Sección en configuración del plugin con tabla de los 10 últimos usuarios.


Corregido


  • Versiones de plugins WP: Corregidos los headers de carta-natal-maia.php (v1.4.0) y maia-connector.php (v1.0.1) para reflejar sus versiones reales, no la de la app.

  • Changelog en updates: check.php ahora lee la versión y changelog del componente correcto (app, carta-natal-maia o maia-connector) usando componentVersion(). Añadida a Functions.php.

  • Updater WP: download_url() reemplazado por wp_remote_get() + file_put_contents() en ambos plugins.

  • download.php: Soporta maia-connector como alias del directorio maia.


v2.3.0 — 2026-05-23



Añadido


  • Sidebar lateral colapsable en vista de carta: Las pestañas horizontales de charts/view.php se reemplazan por un panel lateral izquierdo con toggle ☰. Colapsado: solo iconos (52px). Expandido: icono + texto (220px). Estado persistente en localStorage. En móvil (<768px) vuelve a tabs horizontales.

  • Motor de Cálculo de Tránsitos Adaptativo: Nuevo script scripts/calculadora_transitos.py (~350 líneas) que sustituye las consultas SQL a ephemerides_planetas (~630M filas, ~8 GB) por cálculo dinámico con Swiss Ephemeris + interpolación cúbica (scipy.CubicSpline).

- Grupo rápido (Sol, Luna, Mercurio, Venus, Marte): swe.calc_ut() diario (0.5d para Luna).
- Grupo lento (Júpiter, Saturno, Urano, Neptuno, Plutón, Quirón, Nodos): muestreo cada 15d + CubicSpline con numpy.unwrap para cruce del punto Aries.
- Detección con orbes reales desde ANGULOS_Y_ORBES_ASPECTOS (antes ignorados, solo matching exacto).
- Partil (hora exacta): extrapolación lineal zero-cost desde la derivada del spline.
- Deduplicación: solo el punto de máximo acercamiento por paso consecutivo.
- Rendimiento: 12 meses = 0.037s / 130 llamadas SWE; 3 años = 0.1s / 370 llamadas SWE.
  • Migración 017_drop_ephemerides_planetas.sql: Elimina v_ephemerides_legible y ephemerides_planetas.

  • Soporte True_South_Node: Derivado automáticamente del Nodo Norte (+180°).


Cambiado


  • TransitosCalculator.php: Refactorizado calcularTransitosCompletos() para usar el motor Python vía proc_open() con JSON stdin/stdout. Añadidos ejecutarCalculoTransitos(), adaptarResultadoPython(), lonToRaw() y formatearGradosMinutos(). obtenerRangosTransitos() ahora lee del resultado Python en memoria.

  • ajax/transitos.php: get_date_limits() usa rangos configurables vía .env (TRANSITOS_ANIO_MIN/MAX) en vez de SQL.

  • routes.php: Limpieza de ruta innecesaria.

  • Dependencia Python: Añadido scipy>=1.17 al Python del sistema ServBay 3.11.


Corregido


  • Rangos de tránsitos: Los min/max de cada planeta ahora se calculan desde las posiciones reales de inicio/fin del período, no desde los puntos de aspecto detectados. Corrige falsos rangos de vuelta completa en Saturno y disparidad entre Nodo Norte/Sur.

  • Arcos de tránsito en la rueda (WheelRenderer): El sweep ahora se fuerza a ≤180° (arco corto) con sweepFlipped para invertir el sweep-flag SVG cuando corresponde. Corrige arcos de ~320° (89% del zodíaco) en planetas retrógrados y la posición del label (tSN, tNN).

  • Sidebar lateral: switchTab() renombrado a switchChartTab() para evitar colisión con la función global de script.js que se carga después vía footer.php.


Obsoleto


  • calcularPuntosDeAspectos() y procesarTransitos(): Marcados como @deprecated. Se eliminarán en v2.4.0.


v2.2.5 — 2026-05-22



Corregido


  • Actualización de Plugins WP: Refactorizado run_update() en ambos plugins. Ahora descarga el zip por separado con SSL relajado y download_url(), usa Automatic_Upgrader_Skin + archivo local en vez de WP_Ajax_Upgrader_Skin + URL remota, fuerza FS_METHOD=direct, verifica tanto $result como $skin->result, y comprueba el retorno de activate_plugin(). Esto resuelve el falso "actualizado correctamente" cuando el upgrader fallaba silenciosamente.


v2.2.4 — 2026-05-22



Mejorado


  • Rueda a Pantalla Completa (Desktop): La rueda SVG de la carta natal en el plugin WP ahora ocupa la altura máxima disponible de la ventana en pantallas ≥1024px, permitiendo verla completa sin scroll vertical.


v2.2.3 — 2026-05-22



Corregido


  • Transient Stale en Updater WP: Los plugins carta-natal-maia y maia ahora invalidan el transient de actualización si la versión cacheada ya no es superior a la versión local. Esto evitaba que apareciese una falsa notificación de "actualización disponible" cuando servidor y plugin tenían la misma versión.


v2.2.2 — 2026-05-22



Corregido


  • Fiabilidad de Actualización: Añadida limpieza de caché de plugins de WordPress tras la actualización para asegurar la detección inmediata de la nueva versión.

  • Interfaz de Ajustes: Corregido error de diseño (layout) en WordPress que causaba desplazamientos visuales en el panel.

  • Descarga Pública: Corregido error "Invalid component" en el enlace de descarga de la pantalla de login.


v2.2.1 — 2026-05-22



Añadido


  • Branding Universal: Enlace a la web personal del autor en todos los pies de página (App y Plugins).

  • Acceso Público a Versión: La página de registro de cambios ahora es accesible sin necesidad de autenticación.

  • Promoción de Plugins: Nueva caja de descarga y contacto en la pantalla de login para usuarios de WordPress.


v2.2.0 — 2026-05-22



Añadido


  • Sistema de Logs para Integraciones:

- Nueva tabla wordpress_chart_logs para registrar cada cálculo realizado desde WordPress.
- Registro de datos: Nombre, fecha/hora de nacimiento, lugar, IP, Sistema Operativo y Navegador.
- Seguimiento de Características: El log ahora registra qué secciones se activaron (Planetas, Aspectos, Balance, Luna, Quirón).
- Nueva vista de "Logs" en el panel de administración de integraciones para visualizar estadísticas detalladas.
  • Mejoras en el Plugin WP v2.2.0:

- Actualizada la lógica de envío para incluir las preferencias de visualización en el log del servidor.
- Corregidos errores de permisos en el proceso de auto-actualización.

v2.1.2 — 2026-05-21



Mejorado


  • Sincronización de Versiones: Actualización global de versiones en todos los componentes del sistema (App y Plugins) para asegurar la coherencia del ecosistema Maia.


v2.1.1 — 2026-05-21



Añadido


  • URL de Copyright Premium: Opción para definir una URL personalizada en el copyright de las integraciones premium. Soporte para ocultar el enlace si se deja vacío.


v2.1.0 — 2026-05-21



Añadido


  • Sistema de Licencias Premium:

- Nuevo endpoint api/v1/license/validate para verificar validez de API Key y estado Premium.
- Columna is_premium en tabla wordpress_sites (Migración 014_add_is_premium_to_wp_sites.sql).
- Capacidad de personalización (White-label) para sitios Premium: Título y Copyright personalizados.
  • Plugin WP Carta Natal Maia v1.3.0:

- Validación de Licencia: Comprobación forzada en ajustes y automática cada 24 horas en el sitio.
- Personalización Premium: Campos para Título y Copyright personalizados en el panel de administración.
- Atributos de Shortcode: Parámetros custom_title y custom_copyright soportados (solo para sitios Premium).
- Fase Lunar y Quirón: Nuevas tarjetas informativas con diseño detallado replicando el informe de Maia.
- Configuración Dinámica: Opciones para activar/desactivar secciones (Planetas, Aspectos, Balance, Luna, Quirón) desde ajustes o vía shortcode.
- Versión 1.3.0: Actualización de versión en cabeceras y encolado de scripts/estilos.

Mejorado


  • Motor de Tránsitos (Propuesta Técnica): Diseño de nueva arquitectura para cálculo dinámico "on-the-fly" usando Swiss Ephemeris (Root-Finding) eliminando la dependencia de base de datos precalculada.

  • Robustez de Fase Lunar: Corregidos "gaps" matemáticos en el cálculo de fases de la luna en InfoAstrologica.php.

  • Seguridad en Frontend: Comprobaciones de existencia de nodos DOM en el plugin de WordPress para evitar errores con cachés de servidor.


v1.1.6 — 2026-05-12



Corregido


  • CSRF en admin/users.php: los 5 formularios (change_group, block, unblock, delete, impersonate) no incluían el campo csrf_token desde que se añadió la validación CSRF en v1.0.5. El intento de impersonar, bloquear, desbloquear, eliminar o cambiar grupo devolvía «Token de seguridad inválido». Añadido <input type="hidden" name="csrf_token"> a todos.

  • Migración 013: columnas default_group_id y force_group_sync faltantes en wordpress_sites. El INSERT de WordPressSiteRepository::create() fallaba con SQLSTATE[42S22]: Column not found: 1054 Unknown column 'default_group_id' al crear integraciones WordPress en producción.


v1.1.5 — 2026-05-12



Mejorado


  • Plugin WP Carta Natal Maia v1.1.1:

- Fuente Nunito: reemplaza la pila de fuentes del sistema por Nunito (Google Fonts, pesos 400/500/600/700) cargada vía @import en el CSS.
- Tamaño mínimo 16px: todo el texto del plugin tiene mínimo 16px. Labels pequeñas (footer, orbes, retro) a 14px.
- Tamaños proporcionales: headings escalados (brand 26px, títulos 24px, secciones 18px).
- Símbolos astrológicos a 30px: .astronomicon, .planeta-header, .simbolo-aspecto, .cnm-summary-glyph, .cnm-pt-symbol escalados al mínimo de 30px establecido por convención.
- Responsive: tamaños del breakpoint 480px actualizados proporcionalmente (inputs/botones/tabs a 16px, step-title a 22px).

v1.1.4 — 2026-05-12



Añadido


  • Generador de imagen PNG (ChartImageRenderer): nueva clase GD+TTF que dibuja la carta natal completa como imagen PNG (1200×1200). Incluye rueda con signos, casas, planetas con grados/signo/minutos, líneas de aspecto con símbolos, cabecera con datos personales y tabla de posiciones planetarias. Usa fuente Astronomicon (TTF) directamente — no depende de renderizado SVG del servidor.

  • API v1 chart_image field: POST /api/v1/chart/calculate ahora devuelve data.chart_image con la imagen PNG en formato data URI base64 (además del SVG y HTML de aspectos).

  • Recálculo automático de cartas antiguas: si charts/view.php detecta datos incompletos (planets o casas vacíos), fuerza recálculo vía calcularCartaNatal() y persiste los datos en BD con el nuevo método CartaNatalRepository::guardarDatosCalculados().

  • Método guardarDatosCalculados(int $cartaId, array $datos) en CartaNatalRepository: actualiza solo la columna datos_calculados de una carta existente.


Corregido


  • API v1 renderAspectosList() no mostraba aspectos: la función usaba claves en español con acentos ('conjunción', 'oposición'…) pero AspectosCalculator devuelve las claves en inglés de ANGULOS_Y_ORBES_ASPECTOS ('conjunction', 'opposition'…). Ahora renderAspectosList() recibe directamente el resultado de AspectosCalculator::getAspectosUnicos() y mapea correctamente las claves.

  • Plugin WP v1.1.0: IDs HTML duplicados (#cnm-wheel-container, #cnm-aspects-container) por tabulación sobrante en shortcode.php. Eliminados los divs cnm-tab-* no utilizados. Estructura HTML corregida. Layout de resultados reorganizado: imagen PNG principal + sección de aspectos.


Modificado


  • api/v1/chart/calculate.php: usa AspectosCalculator para generar el listado de aspectos y el contador de stats; genera imagen PNG vía ChartImageRenderer.

  • integrations/wp-plugins/carta-natal-maia/: JS usa data.chart_image (PNG) como vista principal. CSS con clase .cnm-chart-png responsive.

  • charts/view.php: detección de datos incompletos + recálculo + guardado en BD.


v1.1.3 — 2026-05-11



Mejorado


  • Plugin WP Carta Natal Maia v1.0.6:

- Sin filtros ni interactividad: el SVG de la rueda se renderiza sin controles, zoom, ni fullscreen.
- Listado de aspectos en HTML: sustituye el SVG grid por un listado agrupado por tipo de aspecto con nombres de planetas en texto (no requiere fuente Astronomicon).
- Estilos robustos: prefijo #carta-natal-maia-app en todos los selectores + !important en botones para vencer temas WP.
  • REST API v1: POST /api/v1/chart/calculate ahora acepta API keys de ambos tipos (maia y carta-natal-maia).

  • Router: soporte para preflight CORS (OPTIONS) automático en cualquier ruta registrada.


v1.1.2 — 2026-05-11



Añadido


  • GeoNames local — búsqueda de lugares de nacimiento desde base de datos propia, sin depender de la API externa:

- Migración 008_create_geonames_places.sql: tabla geonames_places con FULLTEXT en name + asciiname + alternatenames.
- Script scripts/import_geonames.php: importa allCountries.txt (solo clase P, ciudades/pueblos) en lotes de 1000. Uso: php scripts/import_geonames.php --file=/ruta/allCountries.txt.
- Directorio data/geonames/ para colocar el archivo allCountries.txt.
- Endpoint GET /api/v1/geo/search ahora consulta la BD local (con fallback a API GeoNames si la tabla no existe).
- Migración 009_geonames_indexes.sql: índices B-tree en name, asciiname y population para acelerar búsquedas LIKE + ORDER BY.

Mejorado


  • Output buffering global: ob_start() en index.php para que los endpoints API puedan emitir headers CORS limpios sin interferencia del debug output de init.php.

  • Robustez API geo/search: doble fallback (file_get_contentscurl) para llamadas a GeoNames como último recurso.

  • Respuesta geo/search unificada: ahora devuelve campos compatibles con formato Nominatim (display_name, lon, address.city/state/country) y formato GeoNames (name, lng, countryCode).

  • Búsqueda en formulario de creación Maia: js/script.js usa /api/v1/geo/search (BD local) en vez de Nominatim. Búsqueda automática al escribir 3+ caracteres (con 400ms debounce). Enter para búsqueda manual de 1-2 caracteres.

  • Nombres de región legibles: migración 010_create_admin1_codes.sql + script import_admin1.php traducen códigos FIPS/ISO a nombres (ej: "56" → "Catalonia"). geo/search hace LEFT JOIN automático.

  • Plugin WP Carta Natal Maia v1.0.4: búsqueda automática a 3+ caracteres (antes 2+).


v1.1.1 — 2026-05-11



Mejorado


  • Plugin WP Carta Natal Maia v1.0.2:

- Menú propio «MaiaCN» en sidebar de WordPress (icono ⭐, posición 30), en lugar de bajo Ajustes.
- Cabecera «Carta Natal by Maia» sobre el formulario.
- Footer «© 2026 Maia by David Herrero» con enlace a la URL de Maia configurada (abre en nueva ventana).
- Formulario unificado: todos los campos visibles a la vez (nombre, fecha, hora, lugar) con labels. El botón de calcular se habilita automáticamente al rellenar nombre, fecha y seleccionar ciudad.
- Estilos CSS para cabecera y footer.

Corregido


  • Panel integraciones: fallback ?? 'maia' para plugin_type en sitios existentes sin la migración aplicada.


v1.1.0 — 2026-05-11



Añadido


  • Plugin WordPress «Carta Natal Maia» (/integrations/wp-plugins/carta-natal-maia/):

- Shortcode [carta_natal_maia] que muestra un formulario paso a paso (nombre → fecha → hora → lugar) y calcula la carta natal de forma anónima.
- Configuración desde Ajustes → Carta Natal Maia (URL de Maia + API Key).
- Búsqueda de ciudad vía GeoNames con autocompletado.
- Resultados: SVG de la rueda zodiacal + SVG de la tabla de aspectos, con tabs para alternar.
- Plug & play: solo requiere API Key generada desde el panel de integraciones de Maia.
  • REST API v1 (POST /api/v1/chart/calculate):

- Autenticación vía header X-API-Key (clave secreta del sitio).
- Rate limiting: 60 peticiones/minuto por API key.
- Validación de fechas (1800–2400) y coordenadas.
- Sin guardar en BD: cálculo puramente anónimo.
- Devuelve JSON con SVG de la rueda zodiacal + SVG de la tabla de aspectos.
- Contador de cartas calculadas por sitio (chart_count en wordpress_sites).
  • Panel de integraciones mejorado (admin/integrations.php):

- Selector de tipo de plugin al crear sitio: «Maia (acceso total · SSO)» o «Carta Natal Maia (solo cálculo anónimo)».
- Badges visuales en listado para distinguir tipo de integración.
- Contador de cartas calculadas visible para sitios de tipo «Carta Natal Maia».
- Validación CSRF en todos los formularios (crear, editar, toggle, eliminar).
  • Migración 007_add_plugin_type.sql: columna plugin_type y chart_count en tabla wordpress_sites.

  • WordPressSiteRepository: nuevos métodos validateApiKey(), incrementChartCount(), getByType().


Cambiado


  • Renombrado: /integrations/wordpress//integrations/wp-plugins/maia/.


v1.0.5 — 2026-05-11



Seguridad — corregido


  • IDOR en AJAX: obtenerPorId() ahora requiere userId en transitos, direcciones, lunaciones y progressions. Las cartas ajenas ya no son accesibles mediante enumeración de IDs.

  • CSRF en POST: añadida validación de token CSRF en /charts/save, /charts/delete, /admin/users. Formularios de creación/edición incluyen campo oculto csrf_token. El JS de eliminación envía el token desde el <meta>.

  • .env inaccesible vía web: añadido <FilesMatch "\.env$"> Require all denied </FilesMatch> en .htaccess.

  • Logs protegidos en Apache 2.4+: logs/.htaccess actualizado a sintaxis Require all denied (la sintaxis Apache 2.2 anterior era ignorada en servidores modernos).

  • Tokens de recuperación hasheados: reset_token ahora se almacena como hash('sha256', $token) en BD, no en texto plano. findByResetToken() compara hashes.

  • Token sin exponer en retorno: requestPasswordReset() ya no incluye el token en el array de retorno.

  • Sin paths ni trazas en errores AJAX: DebugManager::returnAjaxError() ya no incluye file, line ni trace en respuestas JSON (solo success + error).

  • API con autenticación: /api/ ahora requiere partes/RequireLogin.php.

  • XSS almacenado mitigado: los campos nombre, lugar, relacion, notas de carta se escapan con htmlspecialchars() antes de codificarse a JSON para showCartaInfo() en el dashboard.

  • Fuga de emails en compartir: obtenerUsuariosCompartidos() y obtenerUsuariosDisponibles() ya no devuelven email. share-manager.js actualizado para no mostrar emails.

  • TOCTOU en cuota de cartas: verificarLimiteCartas() usa SELECT ... FOR UPDATE para evitar race condition en creación concurrente de cartas.

  • Cookie de sesión condicional: SameSite y Secure ahora dependen de si la conexión es HTTPS. En HTTP local usa Lax + Secure=0, evitando que falle la autenticación en desarrollo.


Corregido


  • Bug regresión en IDOR fix: las funciones calculateDirecciones(), calculateLunaciones() y calculateProgressions() usaban $user['id'] fuera de scope (la variable no es accesible desde funciones standalone). Ahora reciben int $userId como parámetro explícito desde el switch del scope global.


v1.0.4 — 2026-05-11



Mejorado


  • Formulario paso a paso (wizard) en creación de carta natal (js/script.js + charts/create.php + css/styles.css):

- Al iniciar solo se ve "Nombre completo"
- Al rellenar el nombre, aparece "Fecha y Hora de Nacimiento" con transición suave
- Al rellenar fecha (1800–2400) y hora, aparece "Lugar de Nacimiento" con el buscador activo
- Transiciones CSS con .form-step / .form-step-hidden / .form-step-visible
- Modo edición: todas las secciones visibles desde el inicio
  • Info de ciudad seleccionada ahora aparece dentro del mismo contenedor de resultados, con botón "Cambiar ciudad"

  • Auto-selección: si la búsqueda devuelve un solo resultado, se selecciona automáticamente

  • Ajuste de zona horaria (#timeAdjustment) movido a la sección de lugar, bajo los resultados


Corregido


  • Validación de fecha sin rango: validarFecha() en CartaNatalRepository.php ahora exige 1800–2400

  • Resultados duplicados en búsqueda de ciudad: deduplicación por nombre + región + país (js/script.js)

  • Input date con min="1800-01-01" y max="2400-12-31" en charts/create.php


v1.0.3 — 2026-05-10



Corregido


  • Registro de usuario roto (includes/AuthManager.php:376): phone_country y form_load_time se pasaban a UserRepository::create() y se intentaban insertar en usuarios (columna inexistente → SQLSTATE[42S22]). Añadidos al unset().

  • Links hardcodeados en forgot-password (auth/forgot-password.php:118-120): /UserLogin.phproute('/login'), /UserRegister.phproute('/register').

  • Terminología: "carta astral" / "cartas astrales" → "carta natal" / "cartas natales" en todo el código (PHP, CSS, traducciones .po/.mo). Término astrológico correcto.

  • Versión hardcodeada en admin/version.php: ahora se lee dinámicamente del CHANGELOG.md


Añadido


  • Footer general con copyright + versión en 8 páginas (login, register, forgot-password, dashboard, groups, group_edit, version, view)

  • CSS (css/login.css): clase .app-footer + regla .user-login-container > .app-footer para grid de login

  • Función appVersion() en includes/Functions.php: lee la versión del CHANGELOG.md (cache estática)

  • Función copyrightFooter() en includes/Functions.php: combina APP_COPYRIGHT de .env con appVersion() + versión enlaza a /admin/version

  • Variable APP_COPYRIGHT en .env y .env.example para editar el copyright centralizadamente


v1.0.2 — 2026-05-09



Corregido


  • Eliminados todos los estilos inline (style="") de dashboard.php — extraídos a css/dashboard.css

  • Movido el <style> inline de admin/version.php a css/version.css

  • Estilos de botones de destacado movidos de css/direcciones.css a css/dashboard.css

  • Asegurado font-size mínimo de 16px en todas las nuevas clases CSS

  • Tamaño mínimo de símbolos astrológicos 30px en progresiones y direcciones


Mejoras


  • AGENTS.md documentado con reglas de estilo: sin inline CSS/JS, min 16px texto, min 30px símbolos

  • Botones de acción en cards ahora uniformes (36x36px, solo icono)

  • Orden de botones: Ver → Destacar → Info → Editar → Compartir → Eliminar

  • Nombre de la carta clickable (misma acción que botón Ver)


Archivos creados


  • css/dashboard.css — estilos del dashboard

  • css/version.css — estilos de la página de versión


---

v1.0.1 — 2026-05-09



Corregido


  • Call to undefined method Database::prepare() en dashboard.php y ajax/feature_chart.php

— sustituido por $db->query() y $db->fetchOne() (métodos del singleton Database)
  • SyntaxError: redeclaration of let Modal por carga duplicada de Modal.js

— eliminada la carga redundante en dashboard.php (footer.php ya incluye modal.js)
  • filtro-carta-natal.js mostraba error en páginas sin botón "Aplicar Filtros"

— cambiado Utils.errorUtils.log para que solo sea informativo
  • Tabla chart_featured no existente al primer uso

— añadido CREATE TABLE IF NOT EXISTS automático en dashboard.php y ajax/feature_chart.php
  • Estrella de destacado sin feedback visual al hacer clic

— añadido alert() en caso de error + deshabilitado temporal del botón durante la petición
  • Posición de la estrella de destacado movida junto a la etiqueta "Propia"/"Compartida"


---

v1.0.0 — 2026-05-09



Añadido


  • Módulo de Direcciones de Arco Solar: nueva pestaña "Direccions" en la vista de carta

- Calculadora de direcciones de arco solar (1 año de vida = 1 día de tránsito)
- Tabla de resultados con columnas: Pd, Casa, Asp, Pn, Data, Pos(Pd)
- Soporte para aspectes a planetas natales, nodos, Quirón
- Ingressos de casa (conjunción) → "Casa [nº]"
- Ingressos de signo (conjunción) → símbolo del signo
- Indicador de "funció inferior" cuando el planeta supera los 29° de un signo
- Filtros: fecha inicial, duración en años, orbe, planetas dirigidos, planetas natales, aspectos, casas, signos
- Aspectos por defecto: conjunción y oposición
- Permiso access_direcciones ("Ver Direcciones") añadido al sistema de permisos
  • Cartas destacadas: los usuarios pueden marcar/desmarcar cartas como favoritas

- Icono de estrella (★) junto al nombre de cada carta en el dashboard
- Estrella amarilla rellena cuando está destacada, transparente cuando no
- Las cartas destacadas se ordenan primero alfabéticamente
- El estado de destacado es por usuario (independiente del propietario)
  • Página de Versión y Log en el panel de administración (/admin/version)

- Muestra la versión actual y el changelog completo

Archivos creados


  • includes/DireccionesCalculator.php — clase calculadora de direcciones de arco solar

  • partes/direcciones.php — template de la página de direcciones

  • ajax/direcciones.php — endpoint AJAX para cálculo de direcciones

  • js/direcciones-js.php — JavaScript del módulo de direcciones

  • css/direcciones.css — estilos del módulo de direcciones

  • ajax/feature_chart.php — endpoint AJAX para toggle de destacado

  • migrations/add_direcciones_permission.sql — migración del permiso de direcciones

  • migrations/add_chart_featured.sql — migración de la tabla de destacados

  • admin/version.php — página de versión y changelog

  • CHANGELOG.md — este archivo


Modificaciones


  • charts/view.php — añadida pestaña "Direccions" con verificación de permiso

  • partes/header.php — añadido <link> para direcciones.css

  • partes/footer.php — añadido <script> para direcciones-js.php

  • dashboard.php — añadido icono de estrella para destacar cartas, ordenación por destacadas primero

  • admin/index.php — añadida tarjeta "Versión y Log" en el panel de administración

  • routes.php — añadida ruta /admin/version