[SPIP] v3.2.12 -> v3.2.12 - Reinstallation avec le spip_loader
[lhc/web/www.git] / www / plugins-dist / svp / action / actionner.php
1 <?php
2
3 /**
4 * Gestion de l'action actionner
5 *
6 * @plugin SVP pour SPIP
7 * @license GPL
8 * @package SPIP\SVP\Actions
9 */
10
11 if (!defined("_ECRIRE_INC_VERSION")) {
12 return;
13 }
14
15 /**
16 * Action effectuant 1 action dans la liste des actions à réaliser
17 * sur les plugins.
18 *
19 * Cette action sera relancée tant qu'il reste des actions à faire
20 */
21 function action_actionner_dist() {
22 // droits
23 include_spip('inc/autoriser');
24 if (!autoriser('configurer', '_plugins')) {
25 include_spip('inc/minipres');
26 echo minipres();
27 exit;
28 }
29
30 include_spip('inc/svp_actionner');
31 include_spip('inc/headers');
32 $actionneur = new Actionneur();
33 $actionneur->get_actions();
34
35 if ($actionneur->one_action()) {
36 // si SVP a été enlevé des actifs, on redirige sur la fin...
37 // sinon cette page d'action/actionner devient introuvable.
38 // dans ce cas précis, les autres actions prévues venant après la desactivation de SVP
39 // ne pourront être traitees... SVP n'étant plus là !
40 if ($actionneur->tester_si_svp_desactive()) {
41 $url = _request('redirect');
42 } else {
43 $url = generer_action_auteur('actionner', '', _request('redirect'));
44 }
45
46 // en mode pas à pas, on affiche un bilan entre chaque action
47 // et on demande a l'utilistateur de cliquer pour realiser
48 // l'action suivante.
49 include_spip('inc/config');
50 if (lire_config('svp/mode_pas_a_pas') == 'oui') {
51 include_spip('inc/minipres');
52 $pres = $actionneur->presenter_actions();
53 $btn = "<a href='$url'>[ Action Suivante ]</a>";
54 $styles = "
55 <style type='text/css'>
56 #minipres #actionner .fail {color:#c30000;}
57 #minipres #actionner ul {margin-left: 0.5em;}
58 #minipres #actionner li {list-style-type:square; margin-left: 0.5em;}
59 </style>";
60 echo minipres(_T('svp:installation_en_cours'), $pres . '<br /><br />' . $btn . $styles);
61 die();
62 }
63
64 // s'il n'y avait en tout est pour tout qu'une seule action, rediriger directement
65 if ($actionneur->progression() === 1 and count($actionneur->done) === 1) {
66 redirige_par_entete(str_replace('&amp;', '&', $url));
67 }
68 // sinon bel affichage de la progression
69 svp_redirige_boucle(
70 str_replace('&amp;', '&', $url),
71 $actionneur->presenter_derniere_action(),
72 $actionneur->progression()
73 );
74 }
75
76 foreach ($actionneur->done as $done) {
77 if ($done['todo'] == 'on') {
78 if ($voir = session_get('svp_admin_plugin_voir')
79 and $voir == 'inactif'
80 ) {
81 session_set('svp_admin_plugin_voir', 'actif');
82 }
83 break;
84 }
85 }
86
87 include_spip('inc/svp_depoter_local');
88 svp_actualiser_paquets_locaux();
89
90 if (!_request('redirect')) {
91 $GLOBALS['redirect'] = generer_url_ecrire('admin_plugin');
92 } else {
93 $GLOBALS['redirect'] = str_replace('&amp;', '&', _request('redirect'));
94 }
95 }
96
97 /**
98 * Redirections par refresh d'une URL afin d'éviter des blocages de redirections par les navigateurs
99 * lorsqu'elles sont trop nombreuses
100 *
101 * @param string $url
102 * @param string $texte Texte de l'action réalisée
103 * @param string $progres
104 */
105 function svp_redirige_boucle($url, $texte, $progres){
106 include_spip('inc/minipres');
107
108 //@apache_setenv('no-gzip', 1); // provoque page blanche chez certains hebergeurs donc ne pas utiliser
109 @ini_set('zlib.output_compression', '0'); // pour permettre l'affichage au fur et a mesure
110 @ini_set('output_buffering', 'off');
111 @ini_set('implicit_flush', 1);
112 @ob_implicit_flush(1);
113
114 $pres = '<meta http-equiv="refresh" content="0;'.$url.'">';
115 $pres .="
116 <div class='derniere_action'>$texte</div>
117 <div class='progression'>" . round($progres*100) . "%</div>
118 <div class='bar'><div style='width:".round($progres*100)."%'></div></div>
119 ";
120
121 $styles = "
122 <style type='text/css'>
123 #minipres .derniere_action { font-weight:bold; }
124 #minipres div {
125 line-height:140%;
126 }
127 #minipres div.progression {
128 margin-top:2em;
129 font-weight:bold;
130 font-size:1.4em;
131 text-align:center;
132 }
133 #minipres .bar {border:1px solid #aaa;}
134 #minipres .bar div {background:#aaa;height:1em;}
135 </style>";
136
137 echo minipres(_T('svp:installation_en_cours'), $pres . $styles);
138 exit;
139 }