source: spip-zone/_plugins_/codes_postaux/trunk/formulaires/importer_codes_postaux.php @ 104935

Last change on this file since 104935 was 104935, checked in by real3t@…, 2 years ago

La liaison avec les communes de COG ne se faisait pas sur les communes ayant un apostrophe dans L'ISLE-D'ESPAGNAC

File size: 4.8 KB
Line 
1<?php
2
3
4// https://code.spip.net/@inc_editer_mot_dist
5function formulaires_importer_codes_postaux_charger(){
6        include_spip('codes_postaux_config');
7        return array();
8}
9
10
11
12function formulaires_importer_codes_postaux_verifier_dist(){
13        include_spip('codes_postaux_config');
14        include_spip('inc/config');
15        /*$erreurs = formulaires_editer_objet_verifier('spip_'._request('fichier'),'new',array('fichier'));
16        */
17         $erreurs=array();
18    $tab_fichier=codes_postaux_config_tab_fichier();
19        $emplacement=sous_repertoire(_DIR_TMP,'codes_postaux');
20        if (!file_exists($emplacement.$tab_fichier['code_postal']['nom_fichier'])) {
21                        $erreurs['fichier'] .= _T('codes_postaux:fichier_introuvable')." ".$emplacement.$tab_fichier[$fichier]['fichier'] ;
22                        $erreurs['message_erreur'] .= _T('codes_postaux:fichier_introuvable');
23                }
24
25
26        return $erreurs;
27}
28
29// https://code.spip.net/@inc_editer_mot_dist
30function formulaires_importer_codes_postaux_traiter_dist(){
31include_spip('codes_postaux_config');
32         $options=array(
33         'truncate'=>_request("option_truncate"),
34         'relier_communes'=>_request("option_relier_communes"),
35         'filtre'=>_request("option_filtre")
36         );
37        $message=codes_postaux_import($options);
38
39        return array('message_ok'=>$message);
40}
41
42
43
44
45
46
47
48function codes_postaux_import($options)
49{
50
51        $contenu_fichier=array();
52        $message="";
53
54$tab_fichier=codes_postaux_config_tab_fichier();
55$tab_colonne = codes_postaux_config_correspondance_colonne();
56$tab_colonne=$tab_colonne['code_postal'];
57$colonnes=$tab_colonne['colonnes'];
58
59if(isset($tab_colonne['filtre'])){
60        $filtre_config=$tab_colonne['filtre'];
61        }
62if(isset($tab_colonne['liaison'])){
63        $liaison=$tab_colonne['liaison'];
64        }
65
66
67
68        $tab_filtres= array();
69        $option_truncate        = false;
70        if(isset($options['truncate']))
71                $option_truncate= $options['truncate'];
72        $option_relier_communes = false;
73        if(isset($options['relier_communes']))
74                $option_relier_communes= $options['relier_communes'];
75        $option_filtre  = '';
76        if (isset($options['filtre']))
77                $option_filtre  = $options['filtre'];
78
79        $filtres=explode(';',$option_filtre);
80
81        foreach($filtres as $filtre)
82                {
83                $tab_temp=explode('=',$filtre);
84                $tab_filtres[$tab_temp[0]]=$tab_temp[1];
85                }
86
87        $emplacement=sous_repertoire(_DIR_TMP,'codes_postaux');
88        $message=  'Importation du fichier '.$fichier."<br />";
89        $fichier_modele=$emplacement.$tab_fichier['code_postal']['nom_fichier'];
90
91
92        $table='spip_codes_postaux';
93        if($option_truncate)
94        {
95        $message.=  'Purge de la table '.$table."<br />";
96        spip_mysql_query('truncate table '.$table);
97        if($option_relier_communes){
98                sql_delete("spip_cog_communes_liens",'objet=\'code_postal\'');
99                }
100        }
101
102
103        $pointeur_fichier = fopen($fichier_modele,"r");
104        if($pointeur_fichier<>0)
105        {
106        $nb_ligne=0;
107        while (!feof($pointeur_fichier))
108        {
109                $ligne= fgets($pointeur_fichier, 4096);
110                $tab=explode("\t",$ligne);
111               
112                if(count($tab)>1)
113                {
114                       
115                        $tab=array_combine($tab_fichier['code_postal']['description'],$tab);
116                        if(isset($filtre_config)){
117                                if(!preg_match('/^'.$filtre['valeur'].'$/',$tab[$filtre['cle']]))
118                                        continue;
119                        }
120                        if(!empty($tab_filtres)){
121                                if (!codes_postaux_applique_filtre($tab,$tab_filtres))
122                                        continue;
123                        }
124
125                        foreach($colonnes as $nom_colonne) {
126                                $champs[''.$nom_colonne]=$tab[$nom_colonne];
127                        }
128
129                        if($option_truncate)
130                                {
131                                $id_code_postal=0;
132                                }
133                        else
134                                {
135                                $where=array();
136                                foreach($champs as $key=>$valeur)
137                                        $where[]=$key.'='.sql_quote($valeur);
138                                $id_code_postal=sql_getfetsel('id_code_postal',$table,implode(' AND ',$where));
139                                }
140
141                                if(!$id_code_postal){
142                                        $id_code_postal=sql_insertq($table,$champs);
143                                        }
144
145                        if($option_relier_communes){
146                                $id_cog_commune=sql_getfetsel('id_cog_commune','spip_cog_communes','departement='.$tab['code_departement'].' and (nom_majuscule = '.sql_quote(str_replace('’',"'",strtoupper($tab['titre'])))
147                                        .' or concat(MID(article_majuscule,2,LENGTH(article_majuscule)-2),concat(\' \',nom_majuscule)) = '.sql_quote(str_replace('’',"'",strtoupper($tab['titre'])))
148                                        .' or concat(MID(article_majuscule,2,LENGTH(article_majuscule)-2),concat(\'\',nom_majuscule)) = '.sql_quote(str_replace('’',"'",strtoupper($tab['titre'])))
149                                .')');
150                                if($id_cog_commune){
151                                        sql_insertq("spip_cog_communes_liens",array('id_cog_commune'=>$id_cog_commune,'objet'=>'code_postal','id_objet'=>$id_code_postal));
152                                        }
153                                }
154                        $nb_ligne++;
155
156                }
157        }
158   }
159        $message.=$nb_ligne.' enregistrements ajoutés.';
160        fclose($pointeur_fichier);
161        return $message;
162
163}
164
165
166
167function codes_postaux_applique_filtre($tab_value,$tab_filtres)
168{
169       
170        foreach($tab_filtres as $col=>$filtre)
171        {
172                if(isset($tab_value[$col]))
173                {
174                if(!preg_match('/^'.$filtre.'$/',$tab_value[$col]))
175                        {
176                        return false;
177                        }
178                }
179        }
180return true;
181}
182
183
184
185?>
Note: See TracBrowser for help on using the repository browser.