source: spip-zone/_plugins_/csv_import/exec/csvimport_admin.php @ 29644

Last change on this file since 29644 was 29644, checked in by kent1@…, 11 years ago

Gros update du plugin CSVImport avec au menu :

  • Version pour SPIP 2.0.X uniquement
  • Adaptation graphique le plus proche du reste de SPIP 2
  • Préparation pour le multilinguisme
  • La partie lecture des CSV est délaissée à SPIP-BONUX pour éviter de faire doublon (et donc on nécessite spip-bonux)

Tout test et retour de bug est le bienvenue comme toute traduction. Il serait peut être judicieux que ce plugin soit plus verbeux (explications à droite à gauche)

File size: 8.6 KB
Line 
1<?php
2/*
3 * CSVimport
4 * Plug-in d'import csv dans les tables spip et d'export CSV des tables
5 *
6 * Auteur :
7 * Cedric MORIN
8 * notre-ville.net
9 * © 2005,2009 - Distribue sous licence GNU/GPL
10 *
11 */
12
13include_spip("inc/csvimport");
14include_spip("inc/presentation");
15include_spip("base/abstract_sql");
16include_spip("base/serial");
17include_spip("base/auxiliaires");
18include_spip("public/interfaces"); // definition des jointures et autres
19
20function csvimport_admin_action(){
21        global $tables_principales;
22        global $tables_auxiliaires;
23        if (_request('modif')){
24                $csvimport_tables_auth = array();
25                $exportable = _request("exportable");
26                if (count($exportable)){
27                        $titre = _request("titre");
28                        $statut=_request("statut");
29                        $operation=_request("operation");
30                        $field=_request("field");
31                        foreach(array_keys($exportable) as $table){
32                                $csvimport_tables_auth[$table]=array(
33                                        'titre'=>$titre[$table],
34                                        'statut'=>isset($statut[$table])?$statut[$table]:array(),
35                                        'operations'=>isset($operation[$table])?$operation[$table]:array(),
36                                        'field'=>isset($field[$table])?$field[$table]:array(),
37                                        'dyn_declare_aux'=>(!isset($tables_principales[$table])&&!isset($tables_auxiliaires[$table]))
38                                );
39                        }
40                }
41                ecrire_meta('csvimport_tables_auth',serialize($csvimport_tables_auth));
42                ecrire_metas();
43        }
44}
45
46function ligne_table_import($table,$desc){
47        static $csvimport_tables_auth=NULL;
48        $liste_statuts = array('0minirezo'=>_T('item_choix_administrateurs'), '1comite'=>_T('item_choix_redacteurs'));
49        $liste_operations = array('add' => _T('csvimport:ajouter_donnees'),'replaceall' =>_T('csvimport:tout_remplacer'),'export' =>_T('csvimport:exporter'));
50
51        if ($csvimport_tables_auth==NULL)
52                $csvimport_tables_auth = csvimport_tables_auth();
53
54       
55        if (isset($csvimport_tables_auth[$table])){
56                $exportable = true;
57                $titre = $csvimport_tables_auth[$table]['titre'];
58                $statuts = $csvimport_tables_auth[$table]['statut'];
59                $operations = $csvimport_tables_auth[$table]['operations'];
60                $fields = $csvimport_tables_auth[$table]['field'];
61        }
62        else{
63                $exportable = false;
64                $titre = "";
65                $statuts = array('0minirezo');
66                $operations = array('export');
67                $fields = array();
68        }
69
70        $vals=array();
71       
72        // nom de la table dans mysql
73        $s = "<input type='checkbox' name='exportable[$table]' value='1' id='exportable_$table'";
74        $s .= ($exportable)?" checked='checked'":"";
75        $s .= " /> <label for='exportable_$table'>";
76        $s .= $table;
77        $s .= "</label>\n";
78        $vals[] = $s;
79
80        // Libelle explicite
81        $s = "<input type='text' name='titre[$table]' id='titre_$table' class='texte' value='".entites_html($titre)."' />";
82        //$vals[] = $s;
83        $s .= "<br />";
84       
85        // status autorises a manipuler la table
86        //$s = "";
87        foreach($liste_statuts as $stat=>$lib){
88                $s .= "<input type='checkbox' name='statut[$table][]' value='$stat' id='statut_".$table."_".$stat."'";
89                $s .= (in_array($stat,$statuts))?" checked='checked'":"";
90                $s .= " />&nbsp;<label for='statut_".$table."_".$stat."'>";
91                $s .= str_replace(" ","&nbsp;",$lib);
92                $s .= "</label>\n\n";
93                //$s .= "<br />";
94        }
95        $s .= "<hr />\n\n";
96        //$vals[] = $s;
97
98       
99        // operations autorises sur la table
100        //$s = "";
101        foreach($liste_operations as $op=>$lib){
102                $s .= "<input type='checkbox' name='operation[$table][]' value='$op' id='statut_".$table."_".$op."'";
103                $s .= (in_array($op,$operations))?" checked='checked'":"";
104                $s .= " />&nbsp;<label for='statut_".$table."_".$op."'>";
105                $s .= str_replace(" ","&nbsp;",$lib);
106                $s .= "</label>\n\n";
107                //$s .= "<br />";
108        }
109        $s .= "<hr />\n\n";
110        //$vals[] = $s;
111       
112        // champs de la table
113        //$s = "";
114        $s .= "<table>";
115        $col=0;
116        foreach($desc['field'] as $field=>$type){
117                if ($col==0)
118                        $s .= "<tr>";
119                $s.="<td>";
120                $s .= "<input type='checkbox' name='field[$table][]' value='$field' id='statut_".$table."_".$field."'";
121                $s .= (in_array($field,$fields))?" checked='checked'":"";
122                $s .= " />&nbsp;<label for='statut_".$table."_".$field."'>";
123                $s .= $field;
124                $s .= "</label>";
125                $s.="</td>\n\n";
126                $col++;
127                if ($col==3){
128                        $s .= "</tr>\n\n";
129                        $col = 0;
130                }
131                //$s .= "<br />";
132        }
133        if ($col!=0)
134                $s .= "</tr>\n\n";
135        $s.= "</table>";
136        $vals[] = $s;
137
138        return $vals;
139}
140
141function exec_csvimport_admin(){
142        global $tables_jointures;
143        global $tables_principales;
144        global $tables_auxiliaires;
145        global $table_des_tables;       
146        global $table_prefix;
147        $tables_defendues = array('ajax_fonc','meta','ortho_cache','ortho_dico','caches','test');
148       
149        if (!autoriser('configurer')) {
150                include_spip('inc/minipres');
151                minipres();
152                exit;
153        }
154       
155        //
156        // Afficher une liste de tables importables
157        //
158        $commencer_page = charger_fonction('commencer_page','inc');
159        echo $commencer_page(_T("csvimport:import_csv"), "csvimport");
160        echo debut_gauche('',true);
161       
162        $raccourcis = icone_horizontale(_T('csvimport:import_export_tables'), generer_url_ecrire("csvimport_tous"), "../"._DIR_PLUGIN_CSVIMPORT."img_pack/csvimport-24.png", "", false);
163        echo bloc_des_raccourcis($raccourcis);
164       
165        echo debut_droite('',true);
166       
167        csvimport_admin_action();
168       
169        //csvimport_afficher_tables(_L("Tables declar&eacute;es pour import"));
170       
171        $retour = _request('retour');
172        if (!$retour)
173                $retour = generer_url_ecrire('csvimport_tous');
174        $icone = "../"._DIR_PLUGIN_CSVIMPORT."img_pack/csvimport-24.png";
175       
176        $titre = _T('csvimport:administrer_tables');
177        //
178        // Icones retour
179        //
180        $milieu = '';
181        $milieu .= "<div class='entete-formulaire'>";
182        $milieu .= icone_inline(_T('icone_retour'), $retour, $icone, "rien.gif",$GLOBALS['spip_lang_left']);
183        $milieu .= gros_titre($titre,'', false);
184        $milieu .= "</div>";
185
186
187        // on construit un index des tables de liens
188        // pour les ajouter SI les deux tables qu'ils connectent sont sauvegardees
189        $tables_for_link = array();
190        foreach($tables_jointures as $table=>$liste_relations)
191                if (is_array($liste_relations))
192                {
193                        $nom = $table;
194                        if (!isset($tables_auxiliaires[$nom])&&!isset($tables_principales[$nom]))
195                                $nom = "spip_$table";
196                        if (isset($tables_auxiliaires[$nom])||isset($tables_principales[$nom])){
197                                foreach($liste_relations as $link_table){
198                                        if (isset($tables_auxiliaires[$link_table])/*||isset($tables_principales[$link_table])*/){
199                                                $tables_for_link[$link_table][] = $nom;
200                                        }
201                                        else if (isset($tables_auxiliaires["spip_$link_table"])/*||isset($tables_principales["spip_$link_table"])*/){
202                                                $tables_for_link["spip_$link_table"][] = $nom;
203                                        }
204                                }
205                        }
206                }
207       
208        $res = sql_showbase();
209        $liste_des_tables_spip=array();
210        $liste_des_tables_autres=array();
211        while ($row=spip_fetch_array($res,SPIP_NUM)){
212                $table = $row[0];
213                // on ne retient que les tables prefixees par spip_
214                // evite les melanges sur une base avec plusieurs spip installes
215                if (substr($table,0,strlen($table_prefix))==$table_prefix){
216                        $table_abr = substr($table,strlen($table_prefix)+1);
217                        if (!isset($tables_for_link["spip_$table_abr"]) && !in_array($table_abr,$tables_defendues)){
218                                $liste_des_tables_spip[]=$table;
219                        }
220                }
221                else {
222                        $liste_des_tables_autres[] = $table;
223                }
224        }
225       
226        $milieu .= "<div class='formulaire_spip'>";
227        $action = generer_url_ecrire("csvimport_admin", "modif=1&retour=".urlencode($retour));
228       
229        $milieu .= "\n<form action='$action' method='post' class='formulaire_editer'><div>".form_hidden($action);
230        $milieu .= "<table width='100%' cellpadding='5' cellspacing='0' border='0'>";
231        $num_rows = count($liste_des_tables_spip)+count($liste_des_tables_autres);
232
233        $ifond = 0;
234        $premier = true;
235
236        $compteur_liste = 0;
237        $tableau = array();
238        foreach($liste_des_tables_spip as $table) {
239                $desc = sql_showtable($table);
240                if (is_array($desc)){
241                        $ligne = ligne_table_import($table,$desc);
242                        $tableau[] = $ligne;
243                }
244        }
245        foreach($liste_des_tables_autres as $table) {
246                $desc = sql_showtable($table);
247                if (is_array($desc)){
248                        $ligne = ligne_table_import($table,$desc);
249                        $tableau[] = $ligne;
250                }
251        }
252
253        $largeurs = array('','','');
254        $styles = array('arial11', 'arial1', 'arial1');
255        $evt = ' style="width:100%"';
256        $liste = ''; 
257        foreach ($tableau as $t) {
258                reset($largeurs);
259                if ($styles) reset($styles);
260                $res ='';
261                while (list(, $texte) = each($t)) {
262                        $style = $largeur = "";
263                        list(, $largeur) = each($largeurs);
264                        if ($styles) list(, $style) = each($styles);
265                        if (!trim($texte)) $texte .= "&nbsp;";
266                        $res .= "\n<td" .
267                                ($largeur ? (" style='width: $largeur px;'") : '') .
268                                ($style ? " class='$style'" : '') .
269                                ">" . lignes_longues($texte) . "</td>\n\n";
270                }
271       
272                $liste .=  "\n<tr class='tr_liste'$evt>$res</tr>"; 
273        }
274       
275        $milieu .= $liste;
276        $milieu .= "</table>";
277        $milieu .= "<p class='boutons'>";
278        $milieu .= "<input type='submit' name='Enregistrer' value='"._T('bouton_enregistrer')."' class='submit' />";
279        $milieu .= "</p>";
280        $milieu .= "</div></form>";
281        $milieu .= "</div>";
282       
283        echo pipeline('affiche_milieu',array('args'=>array('exec'=>'csvimport_admin','table'=>$table),'data'=>$milieu));
284
285        echo fin_gauche(), fin_page();
286}
287
288?>
Note: See TracBrowser for help on using the repository browser.