Browse Source

Ticket #3473 : lorsqu'il y a de nombreuses actions à réaliser (activation de 10 plugins par exemple), les navigateurs peuvent râler à cause

des différentes redirections qui sont réalisées. On utilise (tente) la méthode employée par le spip_loader à coup de meta refresh.
Du coup, les actions sont moins transparentes (s'il y en a plus d'1) : un message avec la dernière action réalisée et le % de progression
est affiché dans un bloc minipres().
master v1.3.0
marcimat@rezo.net 6 years ago
parent
commit
579a820e2d
  1. 41
      action/actionner.php
  2. 39
      inc/svp_actionner.php
  3. 2
      paquet.xml

41
action/actionner.php

@ -61,7 +61,12 @@ function action_actionner_dist() {
die();
}
redirige_par_entete(str_replace('&', '&', $url));
svp_redirige_boucle(
str_replace('&', '&', $url),
$actionneur->presenter_derniere_action(),
$actionneur->progression()
);
#redirige_par_entete(str_replace('&', '&', $url));
}
foreach ($actionneur->done as $done) {
@ -83,5 +88,37 @@ function action_actionner_dist() {
} else {
$GLOBALS['redirect'] = str_replace('&', '&', _request('redirect'));
}
}
/**
* Redirections par refresh d'une URL afin d'éviter des blocages de redirections par les navigateurs
* lorsqu'elles sont trop nombreuses
*
* @param string $url
* @param string $texte Texte de l'action réalisée
* @param string $progres
*/
function svp_redirige_boucle($url, $texte, $progres){
include_spip('inc/minipres');
//@apache_setenv('no-gzip', 1); // provoque page blanche chez certains hebergeurs donc ne pas utiliser
@ini_set('zlib.output_compression', '0'); // pour permettre l'affichage au fur et a mesure
@ini_set('output_buffering', 'off');
@ini_set('implicit_flush', 1);
@ob_implicit_flush(1);
$pres = '<meta http-equiv="refresh" content="0;'.$url.'">';
$pres .="
<div class='derniere_action'>$texte</div>
<div class='progression'>" . round($progres*100) . "%</div>
<div class='bar'><div style='width:".round($progres*100)."%'></div></div>
";
$styles = "
<style type='text/css'>
#minipres .derniere_action { font-weight:bold; }
</style>";
echo minipres(_T('svp:installation_en_cours'), $pres . $styles);
exit;
}

39
inc/svp_actionner.php

@ -655,6 +655,34 @@ class Actionneur {
unset($diff, $in, $out);
}
/**
* Retourne le texte qui présente la dernière action qui vient d'être réalisée
*
* @return string
**/
public function presenter_derniere_action() {
$i = end($this->done);
reset($this->done);
$texte = '';
if ($i) {
$ok = ($i['done'] ? true : false);
$oks = &$ok;
$ok_texte = $ok ? 'ok' : 'fail';
$cle_t = 'svp:message_action_finale_' . $i['todo'] . '_' . $ok_texte;
$trads = array(
'plugin' => $i['n'],
'version' => denormaliser_version($i['v']),
);
if (isset($i['maj'])) {
$trads['version_maj'] = denormaliser_version($i['maj']);
}
$texte = _T($cle_t, $trads);
if (is_string($i['done'])) {
$texte .= " <span class='$ok_texte'>$i[done]</span>";
}
}
return $texte;
}
/**
* Retourne un bilan, texte HTML, des actions qui ont été faites
@ -765,6 +793,17 @@ class Actionneur {
return $affiche;
}
/**
* Retourne le pourcentage de progression des actions
* @return int|float
*/
public function progression() {
if (count($this->done)) {
return count($this->done) / (count($this->done) + count($this->end));
}
return 0;
}
/**
* Teste l'existance d'un verrou par un auteur ?
*

2
paquet.xml

@ -1,7 +1,7 @@
<paquet
prefix="svp"
categorie="maintenance"
version="1.2.2"
version="1.3.0"
etat="stable"
compatibilite="[3.2.0-dev;]"
logo="svp-64.png"

Loading…
Cancel
Save