Skip to content
Extraits de code Groupes Projets
Valider 0f57feb3 rédigé par marcimat's avatar marcimat Validation de b_b
Parcourir les fichiers

refactor: Séparer les fonctions d’indication de mises à jour disponibles de leur notification

parent 1a3e285d
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -29,6 +29,14 @@ function genie_mise_a_jour_dist($t) { ...@@ -29,6 +29,14 @@ function genie_mise_a_jour_dist($t) {
include_spip('inc/meta'); include_spip('inc/meta');
$maj = info_maj($GLOBALS['spip_version_branche']); $maj = info_maj($GLOBALS['spip_version_branche']);
ecrire_meta('info_maj_spip', $maj ? ($GLOBALS['spip_version_branche'] . "|$maj") : '', 'non'); 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(); mise_a_jour_ecran_securite();
...@@ -93,51 +101,36 @@ function 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 * Vérifier si une nouvelle version de SPIP est disponible
* *
* Repérer aussi si cette version est une version majeure de SPIP. * Repérer aussi si cette version est une version majeure de SPIP.
* *
* @param string $version * @param string $version Version du SPIP à comparer
* La version reçue ici est sous la forme x.y.z * @return string HTML présentant les mises à jour disponibles, s’il y en a
* On la transforme par la suite pour avoir des integer ($maj, $min, $rev)
* et ainsi pouvoir mieux les comparer
*
* @return string
*/ */
function info_maj(string $version): string { function info_maj(string $version): string {
include_spip('inc/plugin'); $maj = info_maj_exists($version);
// API V1
$contenu = info_maj_cache();
if (!$contenu) {
return '';
}
$maj = info_maj_versions($version, array_keys($contenu['versions'] ?? []));
if (!$maj['mineure'] && !$maj['majeure']) { if (!$maj['mineure'] && !$maj['majeure']) {
return ''; return '';
} }
$message = []; $message = [];
if ($maj['mineure'] && ($GLOBALS['meta']['derniere_maj_notifiee'] != $maj['mineure'])) { if ($maj['mineure']) {
$message[] = _T('nouvelle_version_spip', ['version' => $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']) { if ($maj['majeure']) {
$message[] = _T('nouvelle_version_spip_majeure', ['version' => $maj['majeure']]); $message[] = _T('nouvelle_version_spip_majeure', ['version' => $maj['majeure']]);
...@@ -194,10 +187,15 @@ function info_maj_cache(): ?array { ...@@ -194,10 +187,15 @@ function info_maj_cache(): ?array {
* - version mineure, quelque soit notre état actuel * - version mineure, quelque soit notre état actuel
* - version majeure, seulement si la majeure est stable (pas alpha, beta, rc, ...) * - 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 * @internal
* @param string $version Notre version * @param string $version Notre version
* @param string[] $versions Les dernières versions distantes * @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 { function info_maj_versions(string $version, array $versions): array {
$maj = ['mineure' => '', 'majeure' => '']; $maj = ['mineure' => '', 'majeure' => ''];
...@@ -237,3 +235,35 @@ function info_maj_versions(string $version, array $versions): array { ...@@ -237,3 +235,35 @@ function info_maj_versions(string $version, array $versions): array {
return $maj; 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])
);
}
}
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter