fix: asegurar despliegue del calendario litúrgico

This commit is contained in:
2026-08-30 08:46:55 -04:00
parent 67857638ba
commit 10e5431365
2 changed files with 35 additions and 7 deletions
+18 -7
View File
@@ -12,7 +12,9 @@
*/
$apply = getenv('FEA_EVANGELIO_APPLY') === '1';
$book_file = __DIR__ . '/../data/evangelio-diario/entradas-libro.json';
$calendar_file = __DIR__ . '/../data/evangelio-diario/calendario-liturgico-2026-2040.json';
if (!is_readable($book_file)) { fwrite(STDERR, "No se lee $book_file\n"); exit(2); }
if (!is_readable($calendar_file)) { fwrite(STDERR, "No se lee $calendar_file\n"); exit(2); }
$book = json_decode(file_get_contents($book_file), true, 512, JSON_THROW_ON_ERROR);
if (count($book) !== 500) { fwrite(STDERR, "El libro debe tener 500 entradas\n"); exit(2); }
@@ -30,7 +32,7 @@ $existing = get_posts([
'category' => 14, 'orderby' => 'ID', 'order' => 'ASC',
]);
$used = [];
$updated = $ambiguous = $unmatched = 0;
$updated = $ambiguous = $unmatched = $duplicate = 0;
$to_update = [];
foreach ($existing as $post) {
$matches = [];
@@ -38,22 +40,31 @@ foreach ($existing as $post) {
if (str_contains($norm($post->post_content), $motto)) $matches = array_merge($matches, $indices);
}
$matches = array_values(array_unique($matches));
if (count($matches) !== 1 || isset($used[$matches[0]])) {
if (count($matches) !== 1) {
$ambiguous += count($matches) > 1; $unmatched += count($matches) === 0;
continue;
}
if (isset($used[$matches[0]])) { $duplicate++; continue; }
$idx = $matches[0]; $used[$idx] = true;
$entry = $book[$idx - 1];
$to_update[] = [$post->ID, $idx, $entry];
$updated++;
}
$planned_new = count($book) - count($used);
if ($ambiguous || $unmatched) {
printf("DRY-RUN: existentes indexados=%d; nuevos=%d; ambiguos=%d; sin coincidencia=%d; total=%d\n",
$updated, $planned_new, $ambiguous, $unmatched, count($book));
if ($ambiguous || $unmatched || $duplicate) {
printf("DRY-RUN: existentes indexados=%d; nuevos=%d; ambiguos=%d; sin coincidencia=%d; duplicados=%d; total=%d\n",
$updated, $planned_new, $ambiguous, $unmatched, $duplicate, count($book));
fwrite(STDERR, "ABORTAR APLICACIÓN: hay posts existentes sin correspondencia única.\n");
exit(3);
}
// El JSON se instala antes de tocar contenido: el shortcode lo consume desde
// WP_CONTENT_DIR/fea-data y así código y calendario llegan como una unidad.
if ($apply) {
$calendar_target = WP_CONTENT_DIR . '/fea-data/calendario-liturgico-2026-2040.json';
if (!wp_mkdir_p(dirname($calendar_target)) || !copy($calendar_file, $calendar_target)) {
fwrite(STDERR, "No se pudo instalar el calendario en $calendar_target\n"); exit(1);
}
}
if ($apply) foreach ($to_update as [$post_id, $idx, $entry]) {
update_post_meta($post_id, '_fea_book_index', (string) $idx);
update_post_meta($post_id, '_fea_cita', $entry['citation']);
@@ -78,5 +89,5 @@ foreach ($book as $i => $entry) {
}
$created++;
}
printf("%s: existentes indexados=%d; nuevos=%d; ambiguos=%d; sin coincidencia=%d; total=%d\n",
$apply ? 'APLICADO' : 'DRY-RUN', $updated, $created, $ambiguous, $unmatched, count($book));
printf("%s: existentes indexados=%d; nuevos=%d; ambiguos=%d; sin coincidencia=%d; duplicados=%d; total=%d\n",
$apply ? 'APLICADO' : 'DRY-RUN', $updated, $created, $ambiguous, $unmatched, $duplicate, count($book));