[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / plugins-dist / svp / action / actionner.php
index 259e46d..d0c4f41 100644 (file)
@@ -7,8 +7,10 @@
  * @license GPL
  * @package SPIP\SVP\Actions
  */
-if (!defined("_ECRIRE_INC_VERSION")) return;
+
+if (!defined("_ECRIRE_INC_VERSION")) {
+       return;
+}
 
 /**
  * Action effectuant 1 action dans la liste des actions à réaliser
@@ -29,6 +31,7 @@ function action_actionner_dist() {
        include_spip('inc/headers');
        $actionneur = new Actionneur();
        $actionneur->get_actions();
+
        if ($actionneur->one_action()) {
                // si SVP a été enlevé des actifs, on redirige sur la fin...
                // sinon cette page d'action/actionner devient introuvable.
@@ -37,7 +40,7 @@ function action_actionner_dist() {
                if ($actionneur->tester_si_svp_desactive()) {
                        $url = _request('redirect');
                } else {
-                       $url = generer_action_auteur('actionner', '',  _request('redirect'));
+                       $url = generer_action_auteur('actionner', '', _request('redirect'));
                }
 
                // en mode pas à pas, on affiche un bilan entre chaque action
@@ -54,21 +57,83 @@ function action_actionner_dist() {
                                #minipres #actionner ul {margin-left: 0.5em;}
                                #minipres #actionner li {list-style-type:square; margin-left: 0.5em;}
                                </style>";
-                       echo minipres( _T('svp:installation_en_cours'), $pres . '<br /><br />' . $btn . $styles);
+                       echo minipres(_T('svp:installation_en_cours'), $pres . '<br /><br />' . $btn . $styles);
                        die();
                }
 
-               redirige_par_entete(str_replace('&amp;','&', $url));
+               // s'il n'y avait en tout est pour tout qu'une seule action, rediriger directement
+               if ($actionneur->progression() === 1 and count($actionneur->done) === 1) {
+                       redirige_par_entete(str_replace('&amp;', '&', $url));
+               }
+               // sinon bel affichage de la progression
+               svp_redirige_boucle(
+                       str_replace('&amp;', '&', $url),
+                       $actionneur->presenter_derniere_action(),
+                       $actionneur->progression()
+               );
+       }
+
+       foreach ($actionneur->done as $done) {
+               if ($done['todo'] == 'on') {
+                       if ($voir = session_get('svp_admin_plugin_voir')
+                               and $voir == 'inactif'
+                       ) {
+                               session_set('svp_admin_plugin_voir', 'actif');
+                       }
+                       break;
+               }
        }
-       
+
        include_spip('inc/svp_depoter_local');
        svp_actualiser_paquets_locaux();
 
-       if (!_request('redirect'))
+       if (!_request('redirect')) {
                $GLOBALS['redirect'] = generer_url_ecrire('admin_plugin');
-       else
-               $GLOBALS['redirect'] = str_replace('&amp;','&', _request('redirect'));
-
+       } else {
+               $GLOBALS['redirect'] = str_replace('&amp;', '&', _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; }
+               #minipres div {
+                       line-height:140%;
+               }
+               #minipres div.progression {
+                       margin-top:2em;
+                       font-weight:bold;
+                       font-size:1.4em;
+                       text-align:center;
+               }
+               #minipres .bar {border:1px solid #aaa;}
+               #minipres .bar div {background:#aaa;height:1em;}
+               </style>";
+
+       echo minipres(_T('svp:installation_en_cours'), $pres . $styles);
+       exit;
+}