3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
6 * Copyright (c) 2001-2012 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
13 if (!defined('_ECRIRE_INC_VERSION')) return;
16 * Verifier si une mise a jour est disponible
21 function genie_mise_a_jour_dist($t) {
22 include_spip('inc/meta');
23 $maj = info_maj ('spip', 'SPIP', $GLOBALS['spip_version_branche']);
24 ecrire_meta('info_maj_spip',$maj?
($GLOBALS['spip_version_branche']."|$maj"):"",'non');
26 spip_log("Verification version SPIP : ".($maj?
$maj:"version a jour"),"verifie_maj");
31 // Determiner si une nouvelle version de SPIP est disponible
32 // sans demander tout le temps au serveur de versions si leur liste a change'.
34 define('_VERSIONS_SERVEUR', 'http://files.spip.org/');
35 define('_VERSIONS_LISTE', 'archives.xml');
37 function info_maj ($dir, $file, $version){
38 include_spip('inc/plugin');
40 list($maj,$min,$rev) = preg_split('/\D+/', $version);
42 $nom = _DIR_CACHE_XML
. _VERSIONS_LISTE
;
43 $page = !file_exists($nom) ?
'' : file_get_contents($nom);
44 $page = info_maj_cache($nom, $dir, $page);
46 // reperer toutes les versions de numero majeur superieur ou egal
47 // (a revoir quand on arrivera a SPIP V10 ...)
48 $p = substr("0123456789", intval($maj));
49 $p = ',/' . $file . '\D+([' . $p . ']+)\D+(\d+)(\D+(\d+))?.*?[.]zip",i';
50 preg_match_all($p, $page, $m, PREG_SET_ORDER
);
53 list(, $maj2, $min2,, $rev2) = $v;
54 $version_maj = $maj2 . '.' . $min2 . '.' . $rev2;
55 if ((spip_version_compare($version, $version_maj, '<'))
56 AND (spip_version_compare($page, $version_maj, '<')))
60 if (!$page) return "";
61 return "<a class='info_maj_spip' href='"._VERSIONS_SERVEUR
."$dir' title='$page'>" .
62 _T('nouvelle_version_spip',array('version'=>$page)) .
66 // Verifie que la liste $page des versions dans le fichier $nom est a jour
67 // Ce fichier rajoute dans ce fichier l'alea ephemere courant;
68 // on teste la nouveaute par If-Modified-Since,
69 // et seulement quand celui-ci a change' pour limiter les acces HTTP
71 function info_maj_cache($nom, $dir, $page='')
73 $re = '<archives id="a' . $GLOBALS['meta']["alea_ephemere"] . '">';
74 if (preg_match("/$re/", $page)) return $page;
76 $url = _VERSIONS_SERVEUR
. $dir . '/' . _VERSIONS_LISTE
;
77 $a = file_exists($nom) ?
filemtime($nom) : '';
78 include_spip('inc/distant');
79 $res = recuperer_lapage($url, false, 'GET', _COPIE_LOCALE_MAX_SIZE
, '',false, $a);
80 // Si rien de neuf (ou inaccessible), garder l'ancienne
81 if ($res) list(, $page) = $res;
82 // Placer l'indicateur de fraicheur
83 $page = preg_replace('/^<archives.*?>/', $re, $page);
84 sous_repertoire(_DIR_CACHE_XML
);
85 ecrire_fichier($nom, $page);