source: spip-zone/_plugins_/isocode/trunk/formulaires/isocode_gerer_table.php @ 100347

Last change on this file since 100347 was 100347, checked in by eric@…, 5 years ago

Renommage.
Refactoring des messages du formulaire.

  • Property svn:eol-style set to native
File size: 5.2 KB
Line 
1<?php
2/**
3 * Gestion du formulaire de chargement ou de vidage des tables de codes ISO.
4 *
5 * @package    SPIP\ISOCODE\OBJET
6 */
7if (!defined('_ECRIRE_INC_VERSION')) {
8        return;
9}
10
11/**
12 * Chargement des données : le formulaire propose les actions possibles sur les tables de codes ISO,
13 * à savoir, charger ou vider et la liste des tables regroupées par service.
14 *
15 * @return array
16 *      Tableau des données à charger par le formulaire (affichage). Aucune donnée chargée n'est un
17 *      champ de saisie, celle-ci sont systématiquement remises à zéro.
18 *      - `_actions_tables`        : (affichage) alias et libellés des actions possibles sur une table, `charger` et
19 *        `vider`
20 *      - `_actions_disable`    : (affichage) liste des actions désactivées (`vider` si aucune table n`est chargée)
21 *      - `_action_defaut`        : (affichage) action sélectionnée par défaut, `charger`
22 *      - `_tables`                : (affichage) noms des tables sans le préfixe `spip_`
23 */
24function formulaires_isocode_gerer_table_charger() {
25        $valeurs = array();
26        include_spip('isocode_fonctions');
27
28        // Lister les actions sur les tables
29        $valeurs['_actions_tables'] = array(
30                'charger' => _T('isocode:label_action_charger_table'),
31                'vider'   => _T('isocode:label_action_vider_table')
32        );
33
34        // Acquérir la liste des tables et leur statut de chargement
35        $tables = isocode_lister_tables();
36        $aucune_table_charge = true;
37        if ($tables) {
38                foreach ($tables as $_table) {
39                        $valeurs['_tables'][$_table] = "<em>${_table}</em>, " . _T("isocode:label_table_${_table}");
40                        if (isocode_table_chargee($_table, $meta_regne)) {
41                                $valeurs['_tables'][$_table] .= ' - [' . _T('isocode:info_table_chargee') . ']';
42                                $aucune_table_charge = false;
43                        }
44                }
45        }
46
47        // Désactiver l'action vider si aucun table n'est chargée
48        if ($aucune_table_charge) {
49                $valeurs['_actions_disable'] = array('vider' => 'oui');
50                $valeurs['_action_defaut'] = 'charger';
51        }
52
53        return $valeurs;
54}
55
56/**
57 * Vérification des saisies : il est indispensable de choisir une action (`vider` ou `charger`) et
58 * une table.
59 *
60 * @return array
61 *      Tableau des erreurs sur l'action et/ou la table ou tableau vide si aucune erreur.
62 */
63function formulaires_isocode_gerer_table_verifier() {
64        $erreurs = array();
65
66        $obligatoires = array('action_table', 'tables');
67        foreach ($obligatoires as $_obligatoire) {
68                if (!_request($_obligatoire)) {
69                        $erreurs[$_obligatoire] = _T('info_obligatoire');
70                }
71        }
72
73        return $erreurs;
74}
75
76/**
77 * Exécution du formulaire : les tables choisies sont soit vidées, soit chargées.
78 *
79 * @uses isocode_charger_tables()
80 * @uses isocode_vider_tables()
81 * @uses formater_message()
82  *
83 * @return array
84 *      Tableau retourné par le formulaire contenant toujours un message de bonne exécution ou
85 *      d'erreur. L'indicateur editable est toujours à vrai.
86 */
87function formulaires_isocode_gerer_table_traiter() {
88
89        $retour = array();
90
91        // Acquisition des saisies: comme elles sont obligatoires, il existe toujours une action et une
92        // table.
93        $action = _request('action_table');
94        $tables = _request('tables');
95
96        // Pour chaque table, on génère l'action demandée.
97        // (La fonction de chargement de la table lance un vidage préalable si la table demandé est déjà chargée)
98        $actionner = "isocode_${action}_tables";
99        $statut = $actionner($tables);
100
101        // Formatage du message avant renvoie au formulaire
102        $retour = formater_message($action, $statut);
103        $retour['editable'] = true;
104
105        return $retour;
106}
107
108
109/**
110 * Formate les messages de succès et d'erreur résultant des actions de chargement ou de vidage
111 * des tables de codes ISO.
112 *
113 * @param string $action
114 *      Action venant d'être appliquée à certaines tables. Peut prendre les valeurs `charger` et
115 *      `vider`.
116 * @param array  $statut
117 *              Tableau résultant de l'action sur les tables choisies:
118 *      - `ok`         : `true` si le vidage a réussi, `false` sinon.
119 *      - `tables_ok`  : liste des tables vidées avec succès ou tableau vide sinon.
120 *      - `tables_nok` : liste des tables en erreur ou tableau vide sinon.
121 *      - `tables_sha` : liste des tables inchangées (SHA identique) ou tableau vide sinon.
122 *                       Uniquement disponible pour l'action `charger`.
123 *
124 * @return array
125 *      Tableau des messages à afficher sur le formulaire:
126 *      - `message_ok`     : message sur les tables ayant été traitées avec succès ou tableau vide sinon.
127 *      - `message_erreur` : message sur les tables en erreur ou tableau vide sinon.
128 */
129function formater_message($action, $statut) {
130
131        $message = array(
132                'message_ok'     => '',
133                'message_erreur' => ''
134        );
135
136        // Traitement des succès
137        if (!empty($statut['tables_ok'])) {
138                $message['message_ok'] .= _T("isocode:succes_${action}_table", array('tables' => implode(', ', $statut['tables_ok'])));
139        }
140
141        // Traitement des erreurs
142        if (!empty($statut['tables_nok'])) {
143                $message['message_erreur'] .= _T("isocode:erreur_${action}_table", array('tables' => implode(', ', $statut['tables_nok'])));
144        }
145        if (!empty($statut['tables_sha'])) {
146                $message['message_erreur'] .= $message['message_erreur'] ? '<br />' : '';
147                $message['message_erreur'] .= _T("isocode:notice_${action}_table", array('tables' => implode(', ', $statut['tables_sha'])));
148        }
149
150        return $message;
151}
Note: See TracBrowser for help on using the repository browser.