diff --git a/src/Controller/WikiController.php b/src/Controller/WikiController.php index b6c04b36..b753f3a0 100644 --- a/src/Controller/WikiController.php +++ b/src/Controller/WikiController.php @@ -25,6 +25,7 @@ class WikiController extends AbstractController $wikiPages = []; $missingTranslations = []; + $pageDifferences = []; // First pass: collect all staleness scores to find min and max $stalenessScores = []; @@ -68,6 +69,33 @@ class WikiController extends AbstractController } } + // Calculate differences between English and French versions + foreach ($wikiPages as $key => $languages) { + if (isset($languages['en']) && isset($languages['fr'])) { + $en = $languages['en']; + $fr = $languages['fr']; + + // Calculate differences (French - English) + $sectionDiff = (int)$fr['sections'] - (int)$en['sections']; + $wordDiff = (int)$fr['word_count'] - (int)$en['word_count']; + $linkDiff = (int)$fr['link_count'] - (int)$en['link_count']; + $mediaDiff = isset($fr['media_count']) && isset($en['media_count']) ? + (int)$fr['media_count'] - (int)$en['media_count'] : 0; + + // Format differences with + or - sign + $pageDifferences[$key] = [ + 'section_diff' => $sectionDiff, + 'section_diff_formatted' => ($sectionDiff >= 0 ? '+' : '') . $sectionDiff, + 'word_diff' => $wordDiff, + 'word_diff_formatted' => ($wordDiff >= 0 ? '+' : '') . $wordDiff, + 'link_diff' => $linkDiff, + 'link_diff_formatted' => ($linkDiff >= 0 ? '+' : '') . $linkDiff, + 'media_diff' => $mediaDiff, + 'media_diff_formatted' => ($mediaDiff >= 0 ? '+' : '') . $mediaDiff, + ]; + } + } + // Sort wiki pages by staleness score (descending) uasort($wikiPages, function($a, $b) { $scoreA = isset($a['en']) && isset($a['fr']) && isset($a['en']['staleness_score']) ? (float)$a['en']['staleness_score'] : 0; @@ -78,6 +106,7 @@ class WikiController extends AbstractController return $this->render('admin/wiki.html.twig', [ 'wiki_pages' => $wikiPages, 'missing_translations' => $missingTranslations, + 'page_differences' => $pageDifferences, ]); } diff --git a/templates/admin/followup_theme_graph.html.twig b/templates/admin/followup_theme_graph.html.twig index 4a3907b9..49530fc5 100644 --- a/templates/admin/followup_theme_graph.html.twig +++ b/templates/admin/followup_theme_graph.html.twig @@ -14,6 +14,10 @@ padding: 0.5rem; color: white; } + .bg-purple { + background-color: #8A2BE2 !important; + color: white !important; + } #themeMap { margin-top: 1rem; } @@ -881,8 +885,32 @@ const divOsmose = document.querySelector(('#alertes_osmose')) if(divOsmose){ - - divOsmose.innerHTML = `${data.issues.length} objets à ajouter selon Osmose`; + if (data.issues.length === 1) { + // Si un seul objet, rendre tout le texte cliquable + const issueId = data.issues[0].id; + divOsmose.innerHTML = ` + ${data.issues.length} objet à ajouter selon Osmose + `; + } else { + // Si plusieurs objets, lister chaque objet avec son numéro + let content = `${data.issues.length} objets à ajouter selon Osmose : `; + + // Limiter à 5 objets affichés pour éviter de surcharger l'interface + const displayLimit = 5; + const displayCount = Math.min(data.issues.length, displayLimit); + + for (let i = 0; i < displayCount; i++) { + const issueId = data.issues[i].id; + content += `${i}`; + } + + // Indiquer s'il y a plus d'objets que ceux affichés + if (data.issues.length > displayLimit) { + content += `(et ${data.issues.length - displayLimit} autres)`; + } + + divOsmose.innerHTML = content; + } } console.log(`[Osmose] ${data.issues.length} analyses trouvées pour le thème ${theme}`); @@ -895,7 +923,7 @@ .setHTML( (() => { - return `