/ecrire/genie/mise_a_jour.php

https://github.com/denisbz/SPIP-1 · PHP · 89 lines · 48 code · 16 blank · 25 comment · 5 complexity · 76ec3cb30b9e82e49190bd4e2ba7ffe2 MD5 · raw file

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