<?php
declare(strict_types=1);
require_once __DIR__ . '/home_slider_helpers.php';
$mesesLargos = [
1 => 'Enero', 2 => 'Febrero', 3 => 'Marzo', 4 => 'Abril', 5 => 'Mayo', 6 => 'Junio',
7 => 'Julio', 8 => 'Agosto', 9 => 'Septiembre', 10 => 'Octubre', 11 => 'Noviembre', 12 => 'Diciembre',
];
$fechaReferencia = new DateTimeImmutable('today');
$mesActual = $fechaReferencia->modify('first day of this month');
$mesSiguiente = $mesActual->modify('+1 month');
$mesesPermitidos = [
$mesActual->format('Y-m'),
$mesSiguiente->format('Y-m'),
];
$capacitacionesVisibles = [];
$capacitacionesPorMes = [];
foreach ($capacitaciones as $item) {
$capacitacion = buildCapacitacionItem((array) $item);
if ($capacitacion === null) {
continue;
}
$claveMes = $capacitacion['fecha']->format('Y-m');
if (!in_array($claveMes, $mesesPermitidos, true)) {
continue;
}
$capacitacionesVisibles[] = $capacitacion;
$capacitacionesPorMes[$claveMes][(int) $capacitacion['fecha']->format('j')][] = $capacitacion;
}
sortCapacitacionesChronologically($capacitacionesVisibles);
foreach ($capacitacionesPorMes as &$dias) {
foreach ($dias as &$itemsDia) {
sortCapacitacionesChronologically($itemsDia);
}
}
unset($dias, $itemsDia);
$detalleCalendario = $capacitacionesVisibles[0] ?? null;
$renderCalendarioMes = static function (
DateTimeImmutable $mes,
array $capacitacionesPorMes,
array $mesesLargos,
DateTimeImmutable $fechaReferencia
): void {
$claveMes = $mes->format('Y-m');
$nombreMes = $mesesLargos[(int) $mes->format('n')] . ' ' . $mes->format('Y');
$primerDia = $mes->modify('first day of this month');
$ultimoDia = $mes->modify('last day of this month');
$diasDelMes = (int) $ultimoDia->format('j');
$inicioSemana = (int) $primerDia->format('N');
$celdasPrevias = $inicioSemana - 1;
$totalCeldas = (int) ceil(($celdasPrevias + $diasDelMes) / 7) * 7;
$diasSemana = ['Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb', 'Dom'];
echo '<section class="cap-calendar__month" data-month-label="' . htmlspecialchars($nombreMes, ENT_QUOTES, 'UTF-8') . '" hidden>';
echo '<div class="cap-calendar__weekdays">';
foreach ($diasSemana as $diaSemana) {
echo '<span>' . htmlspecialchars($diaSemana, ENT_QUOTES, 'UTF-8') . '</span>';
}
echo '</div>';
echo '<div class="cap-calendar__grid">';
for ($i = 0; $i < $totalCeldas; $i++) {
$numeroDia = $i - $celdasPrevias + 1;
if ($numeroDia < 1 || $numeroDia > $diasDelMes) {
echo '<div class="cap-calendar__day cap-calendar__day--empty" aria-hidden="true"></div>';
continue;
}
$items = $capacitacionesPorMes[$claveMes][$numeroDia] ?? [];
$fechaDia = $mes->setDate((int) $mes->format('Y'), (int) $mes->format('m'), $numeroDia);
$clases = ['cap-calendar__day'];
if ($items !== []) {
$clases[] = 'cap-calendar__day--has-events';
}
if ($fechaDia->format('Y-m-d') === $fechaReferencia->format('Y-m-d')) {
$clases[] = 'cap-calendar__day--today';
}
echo '<div class="' . htmlspecialchars(implode(' ', $clases), ENT_QUOTES, 'UTF-8') . '">';
echo '<div class="cap-calendar__day-head">';
echo '<span class="cap-calendar__day-number">' . $numeroDia . '</span>';
if ($items !== []) {
echo '<span class="cap-calendar__day-badge">' . count($items) . '</span>';
}
echo '</div>';
if ($items !== []) {
echo '<div class="cap-calendar__items">';
foreach ($items as $indice => $evento) {
$fechaTexto = $evento['fecha']->format('d') . ' ' . $mesesLargos[(int) $evento['fecha']->format('n')];
$esActivo = $indice === 0 ? ' is-active' : '';
echo '<button type="button" class="cap-calendar__item-trigger' . $esActivo . '"'
. ' data-cap-title="' . htmlspecialchars($evento['titulo'], ENT_QUOTES, 'UTF-8') . '"'
. ' data-cap-description="' . htmlspecialchars($evento['descripcion'], ENT_QUOTES, 'UTF-8') . '"'
. ' data-cap-time="' . htmlspecialchars($evento['hora'], ENT_QUOTES, 'UTF-8') . '"'
. ' data-cap-mode="' . htmlspecialchars($evento['modalidad'], ENT_QUOTES, 'UTF-8') . '"'
. ' data-cap-link="' . htmlspecialchars($evento['boton_url'], ENT_QUOTES, 'UTF-8') . '"'
. ' data-cap-link-label="' . htmlspecialchars($evento['boton_texto'], ENT_QUOTES, 'UTF-8') . '"'
. ' data-cap-date="' . htmlspecialchars($fechaTexto, ENT_QUOTES, 'UTF-8') . '"'
. ' data-cap-category="' . htmlspecialchars($evento['categoria'], ENT_QUOTES, 'UTF-8') . '"'
. ' data-cap-speaker="' . htmlspecialchars($evento['capacitador'], ENT_QUOTES, 'UTF-8') . '"'
. ' data-cap-audience="' . htmlspecialchars($evento['publico'], ENT_QUOTES, 'UTF-8') . '"'
. ' data-cap-platform="' . htmlspecialchars($evento['plataforma'], ENT_QUOTES, 'UTF-8') . '"'
. ' data-cap-cupo="' . htmlspecialchars($evento['cupo'], ENT_QUOTES, 'UTF-8') . '"'
. ' data-cap-accent="' . htmlspecialchars($evento['acento'], ENT_QUOTES, 'UTF-8') . '"'
. ' title="' . htmlspecialchars($evento['hora'] . ' - ' . $evento['titulo'], ENT_QUOTES, 'UTF-8') . '">';
echo '<span class="cap-calendar__item-dot" style="--cap-dot:' . htmlspecialchars($evento['acento'], ENT_QUOTES, 'UTF-8') . ';"></span>';
echo '<span class="cap-calendar__item-copy">';
echo '<span class="cap-calendar__item-time">' . htmlspecialchars($evento['hora'], ENT_QUOTES, 'UTF-8') . '</span>';
echo '<span class="cap-calendar__item-title">' . htmlspecialchars($evento['titulo'], ENT_QUOTES, 'UTF-8') . '</span>';
echo '</span>';
echo '</button>';
}
echo '</div>';
}
echo '</div>';
}
echo '</div>';
echo '</section>';
};
?>
<section class="home-slider home-slider--capacitaciones" id="inicio-capacitaciones" aria-labelledby="capacitaciones-title">
<div class="cap-panel">
<div class="cap-panel__head">
<div class="cap-panel__copy">
<p class="cap-panel__eyebrow">Agenda formativa</p>
<h2 id="capacitaciones-title">Capacitaciones</h2>
</div>
</div>
<section class="cap-calendar" aria-label="Calendario mensual de capacitaciones">
<div class="cap-calendar__toolbar">
<button type="button" class="cap-calendar__arrow" data-cap-calendar-prev aria-label="Mes anterior">
<span aria-hidden="true"><</span>
</button>
<div class="cap-calendar__toolbar-copy">
<p>Explora por mes</p>
<h3 class="cap-calendar__label" data-cap-calendar-label></h3>
</div>
<button type="button" class="cap-calendar__arrow" data-cap-calendar-next aria-label="Mes siguiente">
<span aria-hidden="true">></span>
</button>
</div>
<?php $renderCalendarioMes($mesActual, $capacitacionesPorMes, $mesesLargos, $fechaReferencia); ?>
<?php $renderCalendarioMes($mesSiguiente, $capacitacionesPorMes, $mesesLargos, $fechaReferencia); ?>
<div class="cap-calendar__detail" id="capCalendarDetail" style="--cap-detail-accent: <?= htmlspecialchars((string) ($detalleCalendario['acento'] ?? '#8f141b'), ENT_QUOTES, 'UTF-8') ?>;">
<?php if ($detalleCalendario !== null): ?>
<?php
$detalleContexto = trim((string) ($detalleCalendario['capacitador'] ?? '')) !== ''
? trim((string) $detalleCalendario['capacitador'])
: trim((string) ($detalleCalendario['plataforma'] ?? ''));
$detalleContextoLabel = trim((string) ($detalleCalendario['capacitador'] ?? '')) !== ''
? 'Capacitador'
: 'Espacio';
$detallePublico = trim((string) ($detalleCalendario['publico'] ?? ''));
?>
<div class="cap-calendar__detail-meta">
<span id="capCalendarDetailCategory"><?= htmlspecialchars((string) $detalleCalendario['categoria'], ENT_QUOTES, 'UTF-8') ?></span>
<span id="capCalendarDetailMode"><?= htmlspecialchars((string) $detalleCalendario['modalidad'], ENT_QUOTES, 'UTF-8') ?></span>
</div>
<h3 id="capCalendarDetailTitle"><?= htmlspecialchars((string) $detalleCalendario['titulo'], ENT_QUOTES, 'UTF-8') ?></h3>
<p id="capCalendarDetailDescription"><?= htmlspecialchars((string) $detalleCalendario['descripcion'], ENT_QUOTES, 'UTF-8') ?></p>
<div class="cap-calendar__detail-grid">
<article>
<span>Fecha</span>
<strong id="capCalendarDetailDate"><?= htmlspecialchars($detalleCalendario['fecha']->format('d') . ' ' . $mesesLargos[(int) $detalleCalendario['fecha']->format('n')], ENT_QUOTES, 'UTF-8') ?></strong>
</article>
<article>
<span>Hora</span>
<strong id="capCalendarDetailTime"><?= htmlspecialchars((string) $detalleCalendario['hora'], ENT_QUOTES, 'UTF-8') ?></strong>
</article>
<article id="capCalendarDetailContextCard"<?= $detalleContexto === '' ? ' hidden' : '' ?>>
<span id="capCalendarDetailContextLabel"><?= htmlspecialchars($detalleContextoLabel, ENT_QUOTES, 'UTF-8') ?></span>
<strong id="capCalendarDetailContextValue"><?= htmlspecialchars($detalleContexto, ENT_QUOTES, 'UTF-8') ?></strong>
</article>
<article>
<span>Cupos</span>
<strong id="capCalendarDetailCupo"><?= htmlspecialchars((string) $detalleCalendario['cupo'], ENT_QUOTES, 'UTF-8') ?></strong>
</article>
<article id="capCalendarDetailAudienceCard"<?= $detallePublico === '' ? ' hidden' : '' ?>>
<span>Público</span>
<strong id="capCalendarDetailAudience"><?= htmlspecialchars($detallePublico, ENT_QUOTES, 'UTF-8') ?></strong>
</article>
</div>
<a
class="cap-calendar__detail-link"
id="capCalendarDetailLink"
href="<?= htmlspecialchars((string) $detalleCalendario['boton_url'], ENT_QUOTES, 'UTF-8') ?>"
target="_blank"
rel="noopener noreferrer"
>
<?= htmlspecialchars((string) $detalleCalendario['boton_texto'], ENT_QUOTES, 'UTF-8') ?>
</a>
<?php else: ?>
<div class="cap-calendar__detail-empty">No hay sesiones configuradas para el rango visible.</div>
<?php endif; ?>
</div>
</section>
</div>
</section>