Commit bcafae63 authored by Cerdic's avatar Cerdic

amelioration du calcul des versions de fichier statique et de l'affichage sur...

amelioration du calcul des versions de fichier statique et de l'affichage sur le formulaire de configuration
parent 4e7f0804
......@@ -3,4 +3,4 @@
<:offlineconfig:info_building_in_progress:> \((#REM|offline_building_services_in_progress)\)
</div>
<script>setTimeout(function(){jQuery('.building-in-progress').ajaxReload()}, 2000)</script>
][<p class="success"><:offlineconfig:info_service_version:> (#REM|offline_services_last_version)</p>]
\ No newline at end of file
][<div class="success"><:offlineconfig:info_service_version:> (#REM|offline_services_last_version)</div>]
\ No newline at end of file
......@@ -33,6 +33,36 @@ function offline_cache_hash($version_editoriale) {
return substr(md5($s),0,8);
}
/**
* Retrouver le numero de version du fichier statique
* @param $filename
* @return array
*/
function offline_last_service_version($filename) {
$extension = explode('.', $filename);
$extension = end($extension);
$filebase = substr($filename, 0, -strlen(".$extension"));
$version = 'X';
// utiliser la derniere ligne ajoutee au fichier
if ($content = file_get_contents($filename)) {
$content = explode("\n", rtrim($content));
$content = end($content);
$content = explode('=', $content);
$v = intval(end($content));
$filename_version = "$filebase.$v.$extension";
// verifier que les m5file correspondent bien, sinon c'est une version inconnue
// du coup on incremente pour que ca corresponde a un fichier qui n'existe pas...
if (file_exists($filename_version)
and md5_file($filename) === md5_file($filename_version)) {
$version = $v;
}
}
$filename_version = "$filebase.$version.$extension";
return array($version, $filename_version);
}
/**
* Ecrire le fichier statique du service en versionnant a cote les fichiers
* ce qui permet d'avoir un historique date de ce qu'on a envoyé aux utilisateurs
......@@ -45,34 +75,26 @@ function offline_ecrire_fichier_statique_versionne($filename, $contenu) {
$extension = end($extension);
$filebase = substr($filename, 0, -strlen(".$extension"));
// trouver la derniere version du fichier ecrite
// local/offline/sw.1.js
// local/offline/sw.2.js
// local/offline/sw.js contient une copie de la derniere version
$version = 0;
$existing = glob($filebase . ".*.$extension");
foreach ($existing as $f) {
$f = explode('.', $f);
array_pop($f);
$v = intval(end($f));
if ($v>$version) {
$version = $v;
}
}
list($version, $filename_version) = offline_last_service_version($filename);
// tester si un fichier existe et si la nouvelle version est différente ou non
if (file_exists($filename)) {
$old_version = file_get_contents($filename);
$offline_version_code = "\noffline['$service']=$version;";
if ($old_version !== $contenu . $offline_version_code) {
// nouvelle version :
$version++;
$offline_version_code = "\noffline['$service']=$version;";
$filename_version = "$filebase.$version.$extension";
ecrire_fichier($filename_version, $contenu . $offline_version_code);
@copy($filename_version, $filename);
if ($old_version === $contenu . $offline_version_code) {
// rien a faire : la nouvelle version est identique au fichier existant
return;
}
}
// nouvelle version :
$version = intval($version) + 1;
while (file_exists($filename_version = "$filebase.$version.$extension")) {
$version++;
}
$offline_version_code = "\noffline['$service']=$version;";
ecrire_fichier($filename_version, $contenu . $offline_version_code);
@copy($filename_version, $filename);
}
/**
......
......@@ -32,27 +32,39 @@ function offline_services_last_version() {
$fichiers = array(
_DIR_ETC . 'offline/urls_to_cache.txt',
);
$t = null;
foreach ($fichiers as $f) {
if (file_exists($f) and $modified = filemtime($f)) {
if (is_null($t) or $modified>$t) {
$t = $modified;
}
}
}
if ($t) {
return date('Y-m-d H:i:s',$t);
}
}
else {
$fichiers = array(
_DIR_VAR . 'offline/install.js',
_DIR_VAR . 'offline/sw.js',
_DIR_VAR . 'offline/uninstall.js',
_DIR_VAR . 'offline/sw.js',
);
}
$t = null;
foreach ($fichiers as $f) {
if (file_exists($f) and $modified = filemtime($f)) {
if (is_null($t) or $modified>$t) {
$t = $modified;
$t = array();
foreach ($fichiers as $f) {
if (file_exists($f)) {
list($version, $file_version) = offline_last_service_version($f);
$t[] = basename($f) . '->' . basename($file_version);
}
}
if ($t) {
return propre('- ' . implode("\n- ", $t));
}
}
if ($t) {
return date('Y-m-d H:i:s',$t);
}
return '';
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment