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

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

Modification des tables images qui deviennent docs (pour généraliser).
Modification en conséquence des noms des champs (même philosophie)
ajout d'un champ "extension" dans sitra_doc.

Modification du filtre url_image_sitra en url_doc_sitra

Ajout d'un champ reservation_url dans sitra_objet

modification du numéro de version.

File size: 12.6 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                        'reservation_url' => ''
64                );
65               
66                // même chose pour les détails
67                $objet_details = array(
68                        'id_sitra' => $id_sitra,
69                        'lang' => $langue,
70                        'titre_lang' => '',
71                        'lieu' => '',
72                        'description' => '',
73                        'description_courte' => '',
74                        'observation_dates' => '',
75                        'tarifs_en_clair' => '',
76                        'tarifs_complementaires' => '',
77                        'presta_accessibilite' => '',
78                        'presta_activites' => '',
79                        'presta_confort' => '',
80                        'presta_encadrement' => '',
81                        'presta_equipements' => '',
82                        'presta_services' => '',
83                        'presta_sitra' => '',
84                        'langues' => '',
85                        'capacites' => ''
86                        );
87               
88                if (SITRA_DEBUG) echo $hr;
89                message('Traitement '.$titre_objet.' - '.$id_sitra.' - '.$langue);
90               
91                // les prestations
92                if ($oi -> OffresPrestations){
93                        foreach ($oi -> OffresPrestations -> DetailOffrePrestation as $val) {
94                                $prestations = array();
95                                if ($val -> DetailPrestation) {
96                                        foreach($val -> DetailPrestation as $val2) {
97                                                $val3 = $val2 -> Prestation;
98                                                if ($val3['utilise'] == 'O') ajoute_si_present($prestations,$val3);
99                                        }
100                                        $les_prestations = serialize_non_vide($prestations);
101                                        switch ($val['type']) {
102                                                case '15.01': $objet_details['presta_accessibilite'] = $les_prestations; break;
103                                                case '15.02': $objet_details['presta_activites'] = $les_prestations; break;
104                                                case '15.03': $objet_details['presta_confort'] = $les_prestations; break;
105                                                case '15.04': $objet_details['presta_encadrement'] = $les_prestations; break;
106                                                case '15.05': $objet_details['presta_equipements'] = $les_prestations; break;
107                                                case '15.06': $objet_details['presta_services'] = $les_prestations; break;
108                                                case '15.07': $objet_details['presta_sitra'] = $les_prestations; break;
109                                        } // fin switch
110                                }
111                        }
112                } // fin if OffresPrestations
113               
114                // Contact
115                if($oi -> Contacts -> DetailContact and $premiere_langue){
116                        $adresse = $telephone = $mel = $web = $fax = $tel_fax = array();
117                        foreach ($oi -> Contacts -> DetailContact as $val) {
118                                if ($val['type'] == '04.03.13' and $val -> Adresses -> DetailAdresse) {
119                                        $adr = $val -> Adresses -> DetailAdresse;
120                                        ajoute_si_present($adresse, $adr -> Adr1);
121                                        ajoute_si_present($adresse, $adr -> Adr2);
122                                        ajoute_si_present($adresse, $adr -> Adr3);
123                                        $objet['code_postal'] = $adr -> CodePostal;
124                                        $objet['commune'] = $adr -> Commune;
125                                        $objet['insee'] = $adr -> Commune['code'];
126                                        if ($adr -> Personnes -> DetailPersonne -> MoyensCommunications) {
127                                               
128                                                foreach ($adr -> Personnes -> DetailPersonne -> MoyensCommunications -> DetailMoyenCom as $val2){
129                                                        switch ($val2['type']) {
130                                                        case '04.02.01' : ajoute_si_present($telephone, $val2 -> Coord); break;
131                                                        case '04.02.02' : ajoute_si_present($fax, $val2 -> Coord); break;
132                                                        case '04.02.04' : ajoute_si_present($mel, $val2 -> Coord); break;
133                                                        case '04.02.05' : ajoute_si_present($web, $val2 -> Coord); break;
134                                                        case '04.02.06' : ajoute_si_present($tel_fax, $val2 -> Coord); break;
135                                                        } // fin switch
136                                                } // foreach
137                                        }
138                                }
139                        }
140                        $objet['adresse']= serialize_non_vide($adresse);
141                        $objet['telephone']= serialize_non_vide($telephone);
142                        $objet['fax'] = serialize_non_vide($fax);
143                        $objet['email'] = serialize_non_vide($mel);
144                        $objet['web'] = serialize_non_vide($web);
145                        $objet['tel_fax'] = serialize_non_vide($tel_fax);
146                } // fin if contact
147               
148                // classement
149                if($oi -> Classements -> DetailClassement and $premiere_langue){
150                        $objet['classement_orga'] = $oi -> Classements -> DetailClassement['libelle'];
151                        $objet['classement_code'] = $oi -> Classements -> DetailClassement -> Classement['type'];
152                        $objet['classement'] = $oi -> Classements -> DetailClassement -> Classement;
153                }
154               
155                // Images et logo
156                $docs = array();
157                $docs_details = array();
158               
159                // tjs le problème des clés qui doivent être des alphanum
160                $types_docs = array(
161                        'i_03.01.05' => 'principale',
162                        'i_03.01.01' => 'secondaire',
163                        'i_03.01.08' => 'logo'
164                );
165               
166                if($oi -> Multimedia -> DetailMultimedia){
167                        $i = 0;
168                        foreach ($oi -> Multimedia -> DetailMultimedia as $val){
169                                if (array_key_exists('i_'.$val['type'],$types_docs)){
170                                        if ($premiere_langue){
171                                                $docs[$i]['id_sitra'] = $id_sitra;
172                                                $docs[$i]['num_doc'] = $i;
173                                                $docs[$i]['type_doc'] = $types_docs['i_'.$val['type']];
174                                                $docs[$i]['url_doc'] = $val -> URL;
175                                                // seules les images principales sont importées eventuellement
176                                                if ($docs[$i]['type_doc'] != 'principale')
177                                                        $docs[$i]['lien'] = 'O';
178                                                else
179                                                        $docs[$i]['lien'] = $val['lien'];
180                                                $extension = substr(strrchr($val -> URL,'.'),1);
181                                                $docs[$i]['extension'] = strtolower($extension);
182                                        } // fin if premiere_langue
183                                        $docs_details[$i]['id_sitra'] = $id_sitra;
184                                        $docs_details[$i]['num_doc'] = $i;
185                                        $docs_details[$i]['lang'] = $langue;
186                                        $docs_details[$i]['titre'] = $val -> Nom;
187                                        $docs_details[$i]['descriptif'] = $val -> LegendeRessource;
188                                        $docs_details[$i]['copyright'] = $val -> Copyright;
189                                        $i++;
190                                } // fin if
191                        } // fin foreach
192                } // fin if multimedia
193               
194               
195                // autres détails
196                if ($oi -> DescriptionsComplementaires -> DetailDescriptionComplementaire){
197                        foreach ($oi -> DescriptionsComplementaires -> DetailDescriptionComplementaire as $val){
198                                $descr = $val -> Description;
199                                switch ($descr['type']){
200                                        case '16.01.05': $objet_details['titre_lang'] = $descr; break;
201                                        case '16.02.28': $objet_details['description_courte'] = $descr; break;
202                                        case '16.02.30': $objet_details['description'] = $descr; break;
203                                        case '16.02.38': $objet_details['tarifs_complementaires'] = $descr; break;
204                                        case '16.02.42': $objet_details['lieu'] = $descr; break;
205                                        case '16.02.67': $objet_details['tarifs_en_clair'] = $descr; break;
206                                } // fin switch
207                        }
208                }
209               
210                // les langues
211                if ($oi -> Langues -> Usage -> Langue){
212                        $langues = array();
213                        foreach ($oi -> Langues -> Usage as $val){
214                                ajoute_si_present($langues, $val -> Langue);
215                        }
216                        $objet_details['langues'] = serialize_non_vide($langues);
217                }
218               
219                // Capacités
220                if ($oi -> Capacites){
221                        $capacites = array();
222                        foreach ($oi -> Capacites -> CapacitesPrestations as $presta_capacite){
223                                foreach($presta_capacite -> DetailCapacitePrestation as $val){
224                                        if ($val['utilise'] == 'O'){
225                                                $details = '';
226                                                foreach($val -> Capacite as $capa){
227                                                        if ($capa > 0)
228                                                                $details .= $capa.' '.strtolower(substr($capa['libelle'],0,1)).'. ';
229                                                }
230                                                if ($details)
231                                                        ajoute_si_present($capacites, $val['libelle'].': '.$details);
232                                        }
233                                }
234                        }
235                        $objet_details['capacites'] = serialize_non_vide($capacites);
236                }
237               
238                // Criteres internes
239                if ($oi -> CriteresInternes  and $premiere_langue){
240                        $i = 0;
241                        $criteres = array();
242                        foreach($oi -> CriteresInternes -> CritereInterne as $val){
243                                $criteres[$i] = array(
244                                        'id_sitra' => $id_sitra,
245                                        'id_critere' => $val['code'],
246                                );
247                                $i++;
248                        }
249                }
250               
251                // geolocalisation
252                if ($oi -> Geolocalisations -> DetailGeolocalisation -> Zone -> Points -> DetailPoint -> Coordonnees and $premiere_langue){
253                        foreach ($oi -> Geolocalisations -> DetailGeolocalisation -> Zone -> Points -> DetailPoint -> Coordonnees -> DetailCoordonnees as $val){
254                                $type = $val['type'];
255                                if ($type == '08.02.02.03'){
256                                        $objet['longitude'] = $val -> Longitude;
257                                        $objet['latitude'] = $val -> Latitude;
258                                        $objet['altitude'] = $val -> Altitude;
259                                }
260                        }
261                }
262               
263                // Ouverture
264                $date_debut = $date_fin = $observations_dates = '';
265                if ($oi -> Periodes -> DetailPeriode  and $premiere_langue){
266                        foreach ($oi -> Periodes -> DetailPeriode as $val) {
267                                if ($val['type']=='09.01.06') {
268                                        $objet['date_debut'] = date_norme($val -> Dates -> DetailDates -> DateDebut);
269                                        $objet['date_fin'] = date_norme($val -> Dates -> DetailDates -> DateFin);
270                                        $objet_details['observation_dates'] = $val -> Dates -> DetailDates -> ObservationDates;
271                                }
272                        }
273                }
274               
275                // les catégories
276                $categories = array();
277                $i = 0;
278                if ($oi -> DublinCore -> Classification and $premiere_langue){
279                        $categories[$i]['id_sitra'] = $id_sitra;
280                        $categories[$i]['id_categorie'] = $oi -> DublinCore -> Classification['code'];
281                        $categories[$i]['categorie'] = normalise_nom($oi -> DublinCore -> Classification['libelle']);
282                }
283               
284                if ($oi -> DublinCore -> ControlledVocabulary and $premiere_langue){
285                        foreach($oi -> DublinCore -> ControlledVocabulary as $val) {
286                                if ($val['utilise'] == 'O') {
287                                        $i++;
288                                        $categories[$i]['id_sitra'] = $id_sitra;
289                                        $categories[$i]['id_categorie'] = $val['code'];
290                                        $categories[$i]['categorie'] = normalise_nom($val['libelle']);
291                                }
292                        }
293                }
294               
295                // reservation
296                if ($oi -> ModesReservations -> DetailModeReservation -> Contacts and $premiere_langue){
297                        $reservation_url = array();
298                        foreach($oi -> ModesReservations -> DetailModeReservation -> Contacts -> DetailContact -> Adresses -> DetailAdresse -> Personnes -> DetailPersonne -> MoyensCommunications -> DetailMoyenCom as $val){
299                                if ($val['type'] == '04.02.05')
300                                        ajoute_si_present($reservation_url, $val -> Coord);
301                        }
302                        $objet['reservation_url'] = serialize_non_vide($reservation_url);
303                } // fin resa
304
305                // controle des valeurs de $obj
306                if (SITRA_DEBUG){
307                        sitra_debug('objet', $objet);
308                        sitra_debug('objet_details',$objet_details);
309                        sitra_debug('categories',$categories);
310                        sitra_debug('docs',$docs);
311                        sitra_debug('docs_details',$docs_details);
312                        sitra_debug('criteres',$criteres);
313                }
314               
315                // On met à jour la base
316               
317               
318                $where = 'id_sitra = \''.$id_sitra.'\'';
319                $where_langue = 'lang = \''.$langue.'\'';
320               
321                if ($premiere_langue) {
322                        // on cherche si objet déjà présent dans la table pour mise à jour ou création
323                        $id_sitra_objet = 0;
324                        $id_sitra_objet = sql_getfetsel('id_sitra_objet','spip_sitra_objets',$where);
325                        // mise à jour ou insertion dans sitra_objets
326                        if ($id_sitra_objet)
327                                $r = sql_updateq('spip_sitra_objets',$objet,'id_sitra_objet='.$id_sitra_objet);
328                        else
329                                $r = sql_insertq('spip_sitra_objets',$objet);
330                       
331                        // mise à jour table sitra_categories
332                        sql_delete('spip_sitra_categories', $where);
333                        if (count($categories))
334                                sql_insertq_multi('spip_sitra_categories', $categories);
335                       
336                        // mise à jour table criteres
337                        sql_delete('spip_sitra_criteres', $where);
338                        if (count($criteres))
339                                sql_insertq_multi('spip_sitra_criteres', $criteres);
340                       
341                        // docs
342                        sql_delete('spip_sitra_docs', $where);
343                        if (count($docs))
344                                sql_insertq_multi('spip_sitra_docs',$docs);
345                       
346                        // on supprime toutes les données dans les tables annexes qqsoit la langue
347                        sql_delete('spip_sitra_docs_details', $where);
348                        sql_delete('spip_sitra_objets_details', $where);
349                } // fin if premiere_langue
350               
351                // les details
352                        $r = sql_insertq('spip_sitra_objets_details',$objet_details);
353               
354                // les details docs
355                if (count($docs_details))
356                        $r = sql_insertq_multi('spip_sitra_docs_details',$docs_details);
357               
358                if (SITRA_DEBUG) echo '//////';
359                if ($id_sitra_objet)
360                        message('mise a jour base : '.$titre_objet.' - '.$id_sitra.' - '.$langue);
361                else
362                        message('import base : '.$titre_objet.' '.$id_sitra.' - '.$langue);
363               
364        }// fin foreach $oi On passe à l'objet suivant
365       
366        // si pas en mode debug on supprime le fichier lissteOI
367        if (!SITRA_DEBUG) {
368                unlink($fichier_oi);
369                message('Suppression fichier '.$fichier_oi);
370        }
371
372        $premiere_langue = false;
373       
374}// fin foreach $langue on passe à la langue suivante
375
376?>
Note: See TracBrowser for help on using the repository browser.