diff --git a/ecrire/genie/mise_a_jour.php b/ecrire/genie/mise_a_jour.php index a93b9e1d8f52ba1d7036c0e95bbc6540df164066..e28d6b94a68e84a1dbb7e320f35b0ab420f74919 100644 --- a/ecrire/genie/mise_a_jour.php +++ b/ecrire/genie/mise_a_jour.php @@ -29,6 +29,14 @@ function genie_mise_a_jour_dist($t) { include_spip('inc/meta'); $maj = info_maj($GLOBALS['spip_version_branche']); ecrire_meta('info_maj_spip', $maj ? ($GLOBALS['spip_version_branche'] . "|$maj") : '', 'non'); + spip_log('Verification version SPIP : ' . ($maj ?: 'version a jour'), 'verifie_maj'); + + // notifier les webmestres d’une mise à jour mineure + $maj = info_maj_exists($GLOBALS['spip_version_branche']); + if ($maj['mineure'] && ($GLOBALS['meta']['derniere_maj_notifiee'] ?? '') !== $maj['mineure']) { + info_maj_notifier($maj['mineure']); + ecrire_meta('derniere_maj_notifiee', $maj['mineure'], 'non'); + } mise_a_jour_ecran_securite(); @@ -93,51 +101,36 @@ function mise_a_jour_ecran_securite() { } } +/** + * Indique les mises à jour majeures et mineures pour une version de SPIP + * + * @param string $version Version du SPIP à comparer + * @return array{mineure: string, majeure: string} + */ +function info_maj_exists(string $version): array { + // API V1 + $contenu = info_maj_cache() ?? []; + return info_maj_versions($version, array_keys($contenu['versions'] ?? [])); +} + /** * Vérifier si une nouvelle version de SPIP est disponible * * Repérer aussi si cette version est une version majeure de SPIP. * - * @param string $version - * La version reçue ici est sous la forme x.y.z - * On la transforme par la suite pour avoir des integer ($maj, $min, $rev) - * et ainsi pouvoir mieux les comparer - * - * @return string + * @param string $version Version du SPIP à comparer + * @return string HTML présentant les mises à jour disponibles, s’il y en a */ function info_maj(string $version): string { - include_spip('inc/plugin'); - - // API V1 - $contenu = info_maj_cache(); - if (!$contenu) { - return ''; - } + $maj = info_maj_exists($version); - $maj = info_maj_versions($version, array_keys($contenu['versions'] ?? [])); if (!$maj['mineure'] && !$maj['majeure']) { return ''; } $message = []; - if ($maj['mineure'] && ($GLOBALS['meta']['derniere_maj_notifiee'] != $maj['mineure'])) { + if ($maj['mineure']) { $message[] = _T('nouvelle_version_spip', ['version' => $maj['mineure']]); - $texte = recuperer_fond( - 'notifications/mise_a_jour', - ['raw' => true] - ); - $destinataires = defined('_MAJ_NOTIF_EMAILS') ? _MAJ_NOTIF_EMAILS : array_column(sql_allfetsel('email', 'spip_auteurs', "statut='0minirezo' AND webmestre='oui'"), 'email'); - if ($destinataires) { - include_spip('inc/notifications'); - $destinataires = is_string($destinataires) ? array_map('trim', explode(',', $destinataires)) : $destinataires; - notifications_envoyer_mails( - $destinataires, - $texte, - '['. $GLOBALS['meta']['nom_site'] .'] '. _T('nouvelle_version_spip', ['version' => $maj['mineure']]) - ); - } - include_spip('inc/meta'); - ecrire_meta('derniere_maj_notifiee', $maj['mineure'], 'non'); } if ($maj['majeure']) { $message[] = _T('nouvelle_version_spip_majeure', ['version' => $maj['majeure']]); @@ -194,10 +187,15 @@ function info_maj_cache(): ?array { * - version mineure, quelque soit notre état actuel * - version majeure, seulement si la majeure est stable (pas alpha, beta, rc, ...) * + * @note + * La version reçue ici est sous la forme x.y.z + * On la transforme par la suite pour avoir des integer ($maj, $min, $rev) + * et ainsi pouvoir mieux les comparer + * * @internal * @param string $version Notre version * @param string[] $versions Les dernières versions distantes - * @return array<string, string> Version mineure supérieure, version majeure supérieure + * @return array{mineure: string, majeure: string} Version mineure supérieure, version majeure supérieure */ function info_maj_versions(string $version, array $versions): array { $maj = ['mineure' => '', 'majeure' => '']; @@ -237,3 +235,35 @@ function info_maj_versions(string $version, array $versions): array { return $maj; } + + +/** + * Notifier les webmestre d’une nouvelle version existante (pour mettre à jour) + * + * La constante si définie `_MAJ_NOTIF_EMAILS` peut servir + * - soit à indiquer les emails à notifier à la place des webmestres du site + * - soit (falsy) pour empêcher cette notification + */ +function info_maj_notifier(string $version) { + $texte = recuperer_fond( + 'notifications/mise_a_jour', + ['raw' => true] + ); + if (defined('_MAJ_NOTIF_EMAILS')) { + $destinataires = constant('_MAJ_NOTIF_EMAILS'); + } else { + $destinataires = array_column(sql_allfetsel('email', 'spip_auteurs', "statut='0minirezo' AND webmestre='oui'"), 'email'); + } + if ($destinataires) { + if (is_string($destinataires)) { + $destinataires = explode(',', $destinataires); + } + $destinataires = array_map('trim', $destinataires); + include_spip('inc/notifications'); + notifications_envoyer_mails( + $destinataires, + $texte, + '['. $GLOBALS['meta']['nom_site'] .'] '. _T('nouvelle_version_spip', ['version' => $version]) + ); + } +}