source: spip-zone/_core_/plugins/svp/formulaires/admin_plugin.php @ 85499

Last change on this file since 85499 was 85499, checked in by cedric@…, 7 years ago

http://core.spip.org/issues/2621 : si on a moins de 256 plugins sur le site, on affiche par defaut tous les plugins actifs ou non, verrouillés ou non
+ si la demande d'action n'entraine pas d'action complémentaire (dependance ou autre), on court-circuite la boite de confirmation
+ ne pas traiter en ajax, evite un retour+affichage de la box plugin et accelere la redirection (ou pas, a voir)

File size: 6.2 KB
Line 
1<?php
2
3/**
4 * Gestion du formulaire de gestion des plugins
5 *
6 * @plugin SVP pour SPIP
7 * @license GPL
8 * @package SPIP\SVP\Formulaires
9 */
10 
11if (!defined("_ECRIRE_INC_VERSION")) return;
12
13/**
14 * Chargement du formulaire de gestion des plugins
15 *
16 * @uses  svp_actualiser_paquets_locaux()
17 * @param string $voir
18 *     Statut des plugins que l'on souhaite voir : actif, inactif, tous
19 * @param string $verrouille
20 *     Types de plugins que l'on souhaite voir :
21 *     - 'non' : les plugins utilisateurs
22 *     - 'oui' : les plugins verrouillés (plugins-dist)
23 *     - 'tous' : les deux !
24 * @param string|int $id_paquet
25 *     Identifiant du paquet dont on veut obtenir une description complète
26 *     lors de l'affichage du formulaire
27 * @param string $redirect
28 *     URL de redirection après les traitements
29 * @return array
30 *     Environnement du formulaire
31**/
32function formulaires_admin_plugin_charger_dist($voir='actif', $verrouille='non', $id_paquet='',$redirect=''){
33        $valeurs = array();
34
35        // actualiser la liste des paquets locaux systematiquement
36        include_spip('inc/svp_depoter_local');
37        // sans forcer tout le recalcul en base, mais en récupérant les erreurs XML
38        $valeurs['erreurs_xml'] = array();
39        svp_actualiser_paquets_locaux(false, $valeurs['erreurs_xml']);
40
41        $valeurs['actif'] = 'oui';
42        if ($voir == 'inactif')
43                $valeurs['actif'] = 'non';
44        if ($voir == 'tous')
45                $valeurs['actif'] = '';
46
47        $valeurs['constante'] = array('_DIR_PLUGINS','_DIR_PLUGINS_SUPPL');
48        if ($verrouille == 'oui')
49                $valeurs['constante'] = array('_DIR_PLUGINS_DIST');
50        if ($verrouille == 'tous')
51                $valeurs['constante'] = array();
52
53        $valeurs['verrouille'] = $verrouille;
54        $valeurs['id_paquet'] = $id_paquet;
55        $valeurs['actions'] = array();
56        $valeurs['ids_paquet'] = _request('ids_paquet');
57        $valeurs['afficher_incompatibles'] = _request('afficher_incompatibles');
58        $valeurs['_todo'] = _request('_todo');
59
60        return $valeurs;
61}
62
63/**
64 * Vérifications du formulaire de gestion des plugins
65 *
66 * Appelle le décideur qui détermine la liste des actions à faire et si celles-ci
67 * peuvent être faites (dépendances connues). Une erreur sera levé dans le
68 * cas contraire.
69 *
70 * Si toutes les actions peuvent être faites, une demande de confirmation
71 * est envoyée (dans une erreur spéciale), présentant alors toutes les
72 * actions qui seront réalisées (celle demandée + celles à faire par voie
73 * de conséquence.
74 *
75 * Si on reçoit une demande de confirmation, on sort sans lever d'erreur !
76 *
77 * @uses  svp_decider_verifier_actions_demandees()
78 *
79 * @param string $voir
80 *     Statut des plugins que l'on souhaite voir : actif, inactif, tous
81 * @param string $verrouille
82 *     Types de plugins que l'on souhaite voir :
83 *     - 'non' : les plugins utilisateurs
84 *     - 'oui' : les plugins verrouillés (plugins-dist)
85 *     - 'tous' : les deux !
86 * @param string|int $id_paquet
87 *     Identifiant du paquet dont on veut obtenir une description complète
88 *     lors de l'affichage du formulaire
89 * @param string $redirect
90 *     URL de redirection après les traitements
91 * @return array
92 *     Tableau des erreurs
93**/
94function formulaires_admin_plugin_verifier_dist($voir='actif', $verrouille='non', $id_paquet='',$redirect=''){
95
96        $erreurs = array();
97
98        if (_request('annuler_actions')) {
99                // Requete : Annulation des actions d'installation en cours
100                // -- On vide la liste d'actions en cours
101                set_request('_todo', '');
102                // -- vider les paquets coches s'il y en a
103                set_request('ids_paquet', array());
104        } elseif (_request('valider_actions')) {
105                // ...
106        } else {
107                $a_actionner = array();
108               
109                // actions globales...
110                if ($action_globale = _request('action_globale') AND _request('appliquer')) {
111                        $ids_paquet = _request('ids_paquet');
112                        if (!is_array($ids_paquet)) {
113                                $erreurs['message_erreur'] = _T('svp:message_erreur_aucun_plugin_selectionne');
114                        } else {
115                                foreach ($ids_paquet as $i) {
116                                        $a_actionner[$i] = $action_globale;
117                                }
118                        }
119                // action unitaire
120                } else {
121                        $actions = _request('actions');
122                        // $actions[type][id] = Texte
123                        // -> $a_actionner[id] = type
124                        foreach ($actions as $action => $p) {
125                                foreach ($p as $i => $null) {
126                                        $a_actionner[$i] = $action;
127                                }
128                        }
129                }
130                // lancer les verifications
131                if (!$a_actionner)
132                        $erreurs['message_erreur'] = _T('svp:message_erreur_aucun_plugin_selectionne');
133                else {
134                       
135                        // On fait appel au decideur pour determiner la liste exacte des commandes apres
136                        // verification des dependances
137                        include_spip('inc/svp_decider');
138                        svp_decider_verifier_actions_demandees($a_actionner, $erreurs);
139                        // si c'est une action simple sans rien a faire de plus que demande, on y go direct
140                        if (!count($erreurs['decideur_propositions'])){
141                                unset($erreurs['decideur_propositions']);
142                                unset($erreurs['decideur_demandes']);
143                                unset($erreurs['decideur_actions']);
144                                set_request('valider_actions',true); // on fake la validation, non mais ho !
145                        }
146                }
147        }
148       
149        return $erreurs;
150}
151
152/**
153 * Traitement du formulaire de gestion des plugins
154 *
155 * Si une liste d'action est validée, on redirige de formulaire sur
156 * l'action 'actionner' qui les traitera une par une.
157 *
158 * @uses svp_actionner_traiter_actions_demandees()
159 *
160 * @param string $voir
161 *     Statut des plugins que l'on souhaite voir : actif, inactif, tous
162 * @param string $verrouille
163 *     Types de plugins que l'on souhaite voir :
164 *     - 'non' : les plugins utilisateurs
165 *     - 'oui' : les plugins verrouillés (plugins-dist)
166 *     - 'tous' : les deux !
167 * @param string|int $id_paquet
168 *     Identifiant du paquet dont on veut obtenir une description complète
169 *     lors de l'affichage du formulaire
170 * @param string $redirect
171 *     URL de redirection après les traitements
172 * @return array
173 *     Retours du traitement
174**/
175function formulaires_admin_plugin_traiter_dist($voir='actif', $verrouille='non', $id_paquet='',$redirect=''){
176       
177        $retour = array();
178
179        if (_request('valider_actions')) {
180                refuser_traiter_formulaire_ajax();
181                // Ajout de la liste des actions à l'actionneur
182                // c'est lui qui va effectuer rellement les actions
183                // lors de l'appel de action/actionner
184                $actions = unserialize(_request('_todo'));
185                include_spip('inc/svp_actionner');
186                svp_actionner_traiter_actions_demandees($actions, $retour,$redirect);
187        }
188
189        $retour['editable'] = true;
190        return $retour;
191}
192
193
194?>
Note: See TracBrowser for help on using the repository browser.