diff --git a/core/module/config/view/autoupdate/autoupdate.php b/core/module/config/view/autoupdate/autoupdate.php index 9db19976..9bbf60cb 100644 --- a/core/module/config/view/autoupdate/autoupdate.php +++ b/core/module/config/view/autoupdate/autoupdate.php @@ -35,7 +35,7 @@ if (common::ZWII_VERSION === $latestVersion) { exit; } -logMessage("Récupération des SHAs des commits associés aux releases..."); +logMessage("Récupération des SHAs des commits associés aux versions..."); $fromSHA = getCommitSHAFromTag($repoUrl, common::ZWII_VERSION); $toSHA = getCommitSHAFromRelease($repoUrl, $latestVersion); logMessage("SHA de départ : $fromSHA, SHA de fin : $toSHA"); @@ -81,6 +81,7 @@ foreach ($modifiedFiles as $file) { } } +// Gérer la suppression des fichiers marqués comme supprimés foreach ($modifiedFiles as $file) { if ($file['status'] === 'removed') { $filePath = $file['filename']; @@ -105,9 +106,8 @@ logMessage("Mise à jour terminée vers la version : $latestVersion"); */ function logMessage($message) { global $logFile; - // Vérifier que le fichier de log est bien défini + // Ajouter le message dans le fichier de log if (!empty($logFile)) { - // Ajouter le message dans le fichier de log file_put_contents($logFile, $message . PHP_EOL, FILE_APPEND); } // Afficher le message dans le champ HTML @@ -144,12 +144,29 @@ function getLatestPublishedRelease($repoUrl) { function getCommitSHAFromTag($repoUrl, $tag) { $tagUrl = $repoUrl . '/git/refs/tags/' . urlencode($tag); logMessage("Récupération du SHA pour le tag $tag depuis l'URL : $tagUrl"); - $tagInfo = json_decode(file_get_contents($tagUrl), true); + $tagInfoArray = json_decode(file_get_contents($tagUrl), true); - if (!$tagInfo || empty($tagInfo)) { + if (!$tagInfoArray || empty($tagInfoArray)) { die("Impossible de récupérer le tag : $tag"); } + // Si la réponse est un tableau, prendre le premier élément + if (is_array($tagInfoArray) && isset($tagInfoArray[0])) { + $tagInfo = $tagInfoArray[0]; + } else { + $tagInfo = $tagInfoArray; + } + + // Vérifier que 'object' existe dans $tagInfo + if (!isset($tagInfo['object'])) { + die("Le tag $tag ne contient pas d'objet dans la réponse de l'API."); + } + + // Vérifier que 'type' et 'sha' existent dans 'object' + if (!isset($tagInfo['object']['type']) || !isset($tagInfo['object']['sha'])) { + die("Les informations 'type' ou 'sha' manquent pour le tag $tag."); + } + // Si c'est un tag annoté, il faut suivre l'objet pour obtenir le commit SHA if ($tagInfo['object']['type'] === 'tag') { $annotatedTagUrl = $repoUrl . '/git/tags/' . $tagInfo['object']['sha']; @@ -158,9 +175,16 @@ function getCommitSHAFromTag($repoUrl, $tag) { if (!$annotatedTag || empty($annotatedTag)) { die("Impossible de récupérer le tag annoté : $tag"); } + if (!isset($annotatedTag['object']) || !isset($annotatedTag['object']['sha'])) { + die("Le tag annoté $tag ne contient pas les informations attendues."); + } $commitSHA = $annotatedTag['object']['sha']; - } else { + } + // Si c'est un tag léger, le SHA du commit est directement accessible + elseif ($tagInfo['object']['type'] === 'commit') { $commitSHA = $tagInfo['object']['sha']; + } else { + die("Type d'objet inattendu pour le tag $tag : " . $tagInfo['object']['type']); } logMessage("SHA trouvé pour le tag $tag : $commitSHA"); @@ -181,12 +205,18 @@ function getCommitsManually($repoUrl, $fromSHA, $toSHA) { $commits = []; $page = 1; $perPage = 100; + $maxPages = 50; // Limiter le nombre de pages pour éviter les boucles infinies logMessage("Début de la récupération des commits depuis $toSHA jusqu'à $fromSHA..."); while (true) { + if ($page > $maxPages) { + die("Nombre maximum de pages atteint lors de la récupération des commits."); + } + $commitsUrl = "$repoUrl/commits?sha=$toSHA&per_page=$perPage&page=$page"; logMessage("Accès à l'URL des commits : $commitsUrl"); + $response = json_decode(file_get_contents($commitsUrl), true); if (!$response || empty($response)) {