source: spip-zone/_plugins_/sitra_exports/trunk/inclure/sitra_maj_objets.php @ 51926

Last change on this file since 51926 was 51926, checked in by dwojylac@…, 10 years ago

On peaufine la récupération des capacités : faut faire des compromis...

File size: 12.0 KB
Line 
1<?php
2
3if (!defined("_ECRIRE_INC_VERSION")) return;
4
5// *********
6// Config
7// *********
8
9
10// langues
11$langues = explode(',',SITRA_LANGUES);
12
13$nl = "\n";
14$br = '<br />';
15$hr = '<hr />';
16
17// pour n'effectuer certains traitements que la première fois avec la première langue
18$premiere_langue = true;
19
20// *********
21// fichier des listes d'objets
22// *********
23
24foreach($langues as $langue){
25        $fichier_oi = trouver_fichier_prefixe(SITRA_DIR,'('.SITRA_ID_SITE.')_ListeOI_'.$langue);
26       
27        if (!$fichier_oi) {
28                message($nl.'Pas de fichier ListeOI_'.$langue,'erreur');
29                continue;
30        }
31       
32        $fichier_oi = SITRA_DIR.$fichier_oi;
33       
34        message($nl.'/// Fichier '.$fichier_oi.' ///');
35        $xml = simplexml_load_file($fichier_oi);
36       
37        // analyse de chaque objet
38        foreach ($xml -> OI as $oi){
39               
40                $id_sitra = $oi -> DublinCore -> identifier;
41                $titre_objet = $oi -> DublinCore -> title;
42                // initialiser complétement le tableau, si une donnée n'est plus présente la mise à jour du champ doit se faire
43                $objet = array(
44                        'id_sitra' => $id_sitra,
45                        'titre' => $titre_objet,
46                        'adresse' => '',
47                        'commune' => '',
48                        'code_postal' => '',
49                        'insee' => '',
50                        'telephone' => '',
51                        'fax' => '',
52                        'tel_fax' => '',
53                        'email' => '',
54                        'web' => '',
55                        'date_debut' => '0000-00-00 00:00:00',
56                        'date_fin' => '0000-00-00 00:00:00',
57                        'latitude' => '',
58                        'longitude' => '',
59                        'altitude' => '',
60                        'classement_orga' => '',
61                        'classement_code' => '',
62                        'classement' => ''
63                );
64               
65                // même chose pour les détails
66                $objet_details = array(
67                        'id_sitra' => $id_sitra,
68                        'lang' => $langue,
69                        'titre_lang' => '',
70                        'lieu' => '',
71                        'description' => '',
72                        'description_courte' => '',
73                        'observation_dates' => '',
74                        'tarifs_en_clair' => '',
75                        'tarifs_complementaires' => '',
76                        'presta_accessibilite' => '',
77                        'presta_activites' => '',
78                        'presta_confort' => '',
79                        'presta_encadrement' => '',
80                        'presta_equipements' => '',
81                        'presta_services' => '',
82                        'presta_sitra' => '',
83                        'langues' => '',
84                        'capacites' => ''
85                        );
86               
87                if (SITRA_DEBUG) echo $hr;
88                message('Traitement '.$titre_objet.' - '.$id_sitra.' - '.$langue);
89               
90                // les prestations
91                if ($oi -> OffresPrestations){
92                        foreach ($oi -> OffresPrestations -> DetailOffrePrestation as $val) {
93                                $prestations = array();
94                                if ($val -> DetailPrestation) {
95                                        foreach($val -> DetailPrestation as $val2) {
96                                                $val3 = $val2 -> Prestation;
97                                                if ($val3['utilise'] == 'O') ajoute_si_present($prestations,$val3);
98                                        }
99                                        $les_prestations = serialize_non_vide($prestations);
100                                        switch ($val['type']) {
101                                                case '15.01': $objet_details['presta_accessibilite'] = $les_prestations; break;
102                                                case '15.02': $objet_details['presta_activites'] = $les_prestations; break;
103                                                case '15.03': $objet_details['presta_confort'] = $les_prestations; break;
104                                                case '15.04': $objet_details['presta_encadrement'] = $les_prestations; break;
105                                                case '15.05': $objet_details['presta_equipements'] = $les_prestations; break;
106                                                case '15.06': $objet_details['presta_services'] = $les_prestations; break;
107                                                case '15.07': $objet_details['presta_sitra'] = $les_prestations; break;
108                                        } // fin switch
109                                }
110                        }
111                } // fin if OffresPrestations
112               
113                // Contact
114                if($oi -> Contacts -> DetailContact and $premiere_langue){
115                        $adresse = $telephone = $mel = $web = $fax = $tel_fax = array();
116                        foreach ($oi -> Contacts -> DetailContact as $val) {
117                                if ($val['type'] == '04.03.13' and $val -> Adresses -> DetailAdresse) {
118                                        $adr = $val -> Adresses -> DetailAdresse;
119                                        ajoute_si_present($adresse, $adr -> Adr1);
120                                        ajoute_si_present($adresse, $adr -> Adr2);
121                                        ajoute_si_present($adresse, $adr -> Adr3);
122                                        $objet['code_postal'] = $adr -> CodePostal;
123                                        $objet['commune'] = $adr -> Commune;
124                                        $objet['insee'] = $adr -> Commune['code'];
125                                        if ($adr -> Personnes -> DetailPersonne -> MoyensCommunications) {
126                                               
127                                                foreach ($adr -> Personnes -> DetailPersonne -> MoyensCommunications -> DetailMoyenCom as $val2){
128                                                        switch ($val2['type']) {
129                                                        case '04.02.01' : ajoute_si_present($telephone, $val2 -> Coord); break;
130                                                        case '04.02.02' : ajoute_si_present($fax, $val2 -> Coord); break;
131                                                        case '04.02.04' : ajoute_si_present($mel, $val2 -> Coord); break;
132                                                        case '04.02.05' : ajoute_si_present($web, $val2 -> Coord); break;
133                                                        case '04.02.06' : ajoute_si_present($tel_fax, $val2 -> Coord); break;
134                                                        } // fin switch
135                                                } // foreach
136                                        }
137                                }
138                        }
139                        $objet['adresse']= serialize_non_vide($adresse);
140                        $objet['telephone']= serialize_non_vide($telephone);
141                        $objet['fax'] = serialize_non_vide($fax);
142                        $objet['email'] = serialize_non_vide($mel);
143                        $objet['web'] = serialize_non_vide($web);
144                        $objet['tel_fax'] = serialize_non_vide($tel_fax);
145                } // fin if contact
146               
147                // classement
148                if($oi -> Classements -> DetailClassement and $premiere_langue){
149                        $objet['classement_orga'] = $oi -> Classements -> DetailClassement['libelle'];
150                        $objet['classement_code'] = $oi -> Classements -> DetailClassement -> Classement['type'];
151                        $objet['classement'] = $oi -> Classements -> DetailClassement -> Classement;
152                }
153               
154                // Images et logo
155                $images = array();
156                $images_details = array();
157               
158                // tjs le problème des clés qui doivent être des alphanum
159                $types_images = array(
160                        'i_03.01.05' => 'principale',
161                        'i_03.01.01' => 'secondaire',
162                        'i_03.01.08' => 'logo'
163                );
164               
165                if($oi -> Multimedia -> DetailMultimedia){
166                        $i = 0;
167                        foreach ($oi -> Multimedia -> DetailMultimedia as $val){
168                                if (array_key_exists('i_'.$val['type'],$types_images)){
169                                        if ($premiere_langue){
170                                                $images[$i]['id_sitra'] = $id_sitra;
171                                                $images[$i]['num_image'] = $i;
172                                                $images[$i]['type_image'] = $types_images['i_'.$val['type']];
173                                                $images[$i]['url_image'] = $val -> URL;
174                                                // seules les images principales sont importées eventuellement
175                                                if ($images[$i]['type_image'] != 'principale')
176                                                        $images[$i]['lien'] = 'O';
177                                                else
178                                                        $images[$i]['lien'] = $val['lien'];
179                                        } // fin if premiere_langue
180                                        $images_details[$i]['id_sitra'] = $id_sitra;
181                                        $images_details[$i]['num_image'] = $i;
182                                        $images_details[$i]['lang'] = $langue;
183                                        $images_details[$i]['titre'] = $val -> Nom;
184                                        $images_details[$i]['descriptif'] = $val -> LegendeRessource;
185                                        $images_details[$i]['copyright'] = $val -> Copyright;
186                                        $i++;
187                                } // fin if
188                        } // fin foreach
189                } // fin if multimedia
190               
191               
192                // autres détails
193                if ($oi -> DescriptionsComplementaires -> DetailDescriptionComplementaire){
194                        foreach ($oi -> DescriptionsComplementaires -> DetailDescriptionComplementaire as $val){
195                                $descr = $val -> Description;
196                                switch ($descr['type']){
197                                        case '16.01.05': $objet_details['titre_lang'] = $descr; break;
198                                        case '16.02.28': $objet_details['description_courte'] = $descr; break;
199                                        case '16.02.30': $objet_details['description'] = $descr; break;
200                                        case '16.02.38': $objet_details['tarifs_complementaires'] = $descr; break;
201                                        case '16.02.42': $objet_details['lieu'] = $descr; break;
202                                        case '16.02.67': $objet_details['tarifs_en_clair'] = $descr; break;
203                                } // fin switch
204                        }
205                }
206               
207                // les langues
208                if ($oi -> Langues -> Usage -> Langue){
209                        $langues = array();
210                        foreach ($oi -> Langues -> Usage as $val){
211                                ajoute_si_present($langues, $val -> Langue);
212                        }
213                        $objet_details['langues'] = serialize_non_vide($langues);
214                }
215               
216                // Capacités
217                if ($oi -> Capacites){
218                        $capacites = array();
219                        foreach ($oi -> Capacites -> CapacitesPrestations as $presta_capacite){
220                                foreach($presta_capacite -> DetailCapacitePrestation as $val){
221                                        if ($val['utilise'] == 'O'){
222                                                $details = '';
223                                                foreach($val -> Capacite as $capa){
224                                                        if ($capa > 0)
225                                                                $details .= $capa.' '.strtolower(substr($capa['libelle'],0,1)).'. ';
226                                                }
227                                                if ($details)
228                                                        ajoute_si_present($capacites, $val['libelle'].': '.$details);
229                                        }
230                                }
231                        }
232                        $objet_details['capacites'] = serialize_non_vide($capacites);
233                }
234               
235                // Criteres internes
236                if ($oi -> CriteresInternes  and $premiere_langue){
237                        $i = 0;
238                        $criteres = array();
239                        foreach($oi -> CriteresInternes -> CritereInterne as $val){
240                                $criteres[$i] = array(
241                                        'id_sitra' => $id_sitra,
242                                        'id_critere' => $val['code'],
243                                );
244                                $i++;
245                        }
246                }
247               
248                // geolocalisation
249                if ($oi -> Geolocalisations -> DetailGeolocalisation -> Zone -> Points -> DetailPoint -> Coordonnees and $premiere_langue){
250                        foreach ($oi -> Geolocalisations -> DetailGeolocalisation -> Zone -> Points -> DetailPoint -> Coordonnees -> DetailCoordonnees as $val){
251                                $type = $val['type'];
252                                if ($type == '08.02.02.03'){
253                                        $objet['longitude'] = $val -> Longitude;
254                                        $objet['latitude'] = $val -> Latitude;
255                                        $objet['altitude'] = $val -> Altitude;
256                                }
257                        }
258                }
259               
260                // Ouverture
261                $date_debut = $date_fin = $observations_dates = '';
262                if ($oi -> Periodes -> DetailPeriode  and $premiere_langue){
263                        foreach ($oi -> Periodes -> DetailPeriode as $val) {
264                                if ($val['type']=='09.01.06') {
265                                        $objet['date_debut'] = date_norme($val -> Dates -> DetailDates -> DateDebut);
266                                        $objet['date_fin'] = date_norme($val -> Dates -> DetailDates -> DateFin);
267                                        $objet_details['observation_dates'] = $val -> Dates -> DetailDates -> ObservationDates;
268                                }
269                        }
270                }
271               
272                // les catégories
273                $categories = array();
274                $i = 0;
275                if ($oi -> DublinCore -> Classification and $premiere_langue){
276                        $categories[$i]['id_sitra'] = $id_sitra;
277                        $categories[$i]['id_categorie'] = $oi -> DublinCore -> Classification['code'];
278                        $categories[$i]['categorie'] = normalise_nom($oi -> DublinCore -> Classification['libelle']);
279                }
280               
281                if ($oi -> DublinCore -> ControlledVocabulary and $premiere_langue){
282                        foreach($oi -> DublinCore -> ControlledVocabulary as $val) {
283                                if ($val['utilise'] == 'O') {
284                                        $i++;
285                                        $categories[$i]['id_sitra'] = $id_sitra;
286                                        $categories[$i]['id_categorie'] = $val['code'];
287                                        $categories[$i]['categorie'] = normalise_nom($val['libelle']);
288                                }
289                        }
290                }
291
292                // controle des valeurs de $obj
293                if (SITRA_DEBUG){
294                        sitra_debug('objet', $objet);
295                        sitra_debug('objet_details',$objet_details);
296                        sitra_debug('categories',$categories);
297                        sitra_debug('images',$images);
298                        sitra_debug('images_details',$images_details);
299                        sitra_debug('criteres',$criteres);
300                }
301               
302                // On met à jour la base
303               
304               
305                $where = 'id_sitra = \''.$id_sitra.'\'';
306                $where_langue = 'lang = \''.$langue.'\'';
307               
308                if ($premiere_langue) {
309                        // on cherche si objet déjà présent dans la table pour mise à jour ou création
310                        $id_sitra_objet = 0;
311                        $id_sitra_objet = sql_getfetsel('id_sitra_objet','spip_sitra_objets',$where);
312                        // mise à jour ou insertion dans sitra_objets
313                        if ($id_sitra_objet)
314                                $r = sql_updateq('spip_sitra_objets',$objet,'id_sitra_objet='.$id_sitra_objet);
315                        else
316                                $r = sql_insertq('spip_sitra_objets',$objet);
317                       
318                        // mise à jour table sitra_categories
319                        sql_delete('spip_sitra_categories', $where);
320                        if (count($categories))
321                                sql_insertq_multi('spip_sitra_categories', $categories);
322                       
323                        // mise à jour table criteres
324                        sql_delete('spip_sitra_criteres', $where);
325                        if (count($criteres))
326                                sql_insertq_multi('spip_sitra_criteres', $criteres);
327                       
328                        // images
329                        sql_delete('spip_sitra_images', $where);
330                        if (count($images))
331                                sql_insertq_multi('spip_sitra_images',$images);
332                       
333                        // on supprime toutes les données dans les tables annexes qqsoit la langue
334                        sql_delete('spip_sitra_images_details', $where);
335                        sql_delete('spip_sitra_objets_details', $where);
336                } // fin if premiere_langue
337               
338                // les details
339                        $r = sql_insertq('spip_sitra_objets_details',$objet_details);
340               
341                // les details images
342                if (count($images_details))
343                        $r = sql_insertq_multi('spip_sitra_images_details',$images_details);
344               
345                if (SITRA_DEBUG) echo '//////';
346                if ($id_sitra_objet)
347                        message('mise a jour base : '.$titre_objet.' - '.$id_sitra.' - '.$langue);
348                else
349                        message('import base : '.$titre_objet.' '.$id_sitra.' - '.$langue);
350               
351        }// fin foreach $oi On passe à l'objet suivant
352       
353        // si pas en mode debug on supprime le fichier lissteOI
354        if (!SITRA_DEBUG) {
355                unlink($fichier_oi);
356                message('Suppression fichier '.$fichier_oi);
357        }
358
359        $premiere_langue = false;
360       
361}// fin foreach $langue on passe à la langue suivante
362
363?>
Note: See TracBrowser for help on using the repository browser.