source: spip-zone/_plugins_/sitra_exports/trunk/sitra_fonctions.php @ 51654

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

Quelques corrections et commentaires

File size: 8.7 KB
Line 
1<?php
2
3/**
4teste si une copie locale existe pour les images principales
5obtenues à partir de l'archive zip
6$chemin n'est utilisé que pour l'affichage dans l'espace privé
7**/
8function url_image_locale($url='',$chemin=''){
9        if (!$url) return;
10        $path_parts = pathinfo($url);
11        $fichier_image = strtolower($path_parts['basename']);
12        $fichier_image = $chemin.SITRA_CHEMIN_IMAGES.$fichier_image;
13       
14        if (file_exists($fichier_image))
15                return $fichier_image;
16        else
17                return;
18}
19
20/**
21Pour les images distantes
22teste si une copie locale existe sinon la force
23retourne l'url de la copie locale
24**/
25function url_image_distante($url=''){
26        if (!$url) return;
27        $result = copie_locale($url,'test');
28        if (!$result)
29                $result = copie_locale($url,'force');
30        return $result;
31}
32
33/**
34copie locale ou distante en fonction du type image distante (O ou N)
35$chemin a utiliser pour la partie privée
36**/
37function url_image_sitra($url='', $lien='', $chemin=''){
38        switch ($lien){
39                // image importée par zip sitra
40                case 'N': return url_image_locale($url,$chemin); break;
41                // image distante
42                case 'O': return $chemin.url_image_distante($url); break;
43                default : return; break;
44        }
45}
46
47/***
48remplace les , par des . pour lattitude, longitude
49***/
50function sitra_lat_lon($data){
51        return str_replace(',', '.', $data);
52}
53
54
55// normalise les noms de categorie et de selection et autres
56function normalise_nom($text){
57        // passe en minuscules
58        $text = mb_strtolower($text,'UTF-8');
59        // supprime les accents
60        $car1 = array('à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ò', 'ó', 'ô', 'õ', 'ö', 'ø', 'œ', 'ù', 'ú', 'û', 'ü', 'ç', 'ñ' );
61        $car2 = array('a', 'a', 'a', 'a', 'a', 'a','ae', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'o', 'o', 'o', 'o', 'o', 'o','oe', 'u', 'u', 'u', 'u', 'c', 'n' );
62        $text = str_replace($car1, $car2, $text);
63        $text = preg_replace('`[^._=-\w\d]+`', '-',$text);
64        return $text;
65}
66
67function sitra_norme_heure($hm = '00:00') {
68        if ($hm == '00:00' )
69                return;
70        $h = substr($hm, 0, 2);
71        $m = substr($hm, 3, 2);
72        if ($m == '00')
73                $m = '';
74        if (substr($hm,0,1)== '0')
75                $h = substr($hm,1,1);
76       
77        return $h.'h'.$m;
78}
79
80// tente de masquer les adresses emails des robots
81function sitra_code_email($mail=''){
82        if (!$mail)
83                return;
84        $mail = str_replace(array('.','@'), array(' (.) ',' (at) '), $mail);
85        return $mail;
86}
87
88
89// affichage normalise des telephones
90function sitra_norme_tel($num, $sep='&nbsp;') {
91        $num = preg_replace('`[^\d]`', '', $num);
92        if (!$num)
93                return;
94        $num = substr($num,0,2).$sep.
95                substr($num,2,2).$sep.
96                substr($num,4,2).$sep.
97                substr($num,6,2).$sep.substr($num,8,2);
98        return $num;
99}
100
101function sitra_norme_web ($web){
102        if (!$web)
103                return;
104        if (substr($web,0,7) != 'http://' )
105                $web = 'http://'.$web;
106        return $web;
107}
108
109// transforme une liste séparée par des | en liste avec delimiteur personnalisé
110function sitra_expand_liste($liste, $delim = ' - '){
111        if (!$liste)
112                return;
113        $items = unserialize($liste);
114        return implode($delim, $items);
115}
116
117function sitra_expand_telephone($liste, $delim = ' - '){
118        if (!$liste)
119                return;
120        $items = unserialize($liste);
121        foreach ($items as $key => $val){
122                $val = sitra_norme_tel($val);
123                $items[$key] = $val;
124        }
125        return implode($delim, $items);
126}
127
128// traitement des emails
129function sitra_expand_email($liste, $delim = ' - ', $code=0){
130        if (!$liste)
131                return;
132        $items = unserialize($liste);
133        foreach ($items as $key => $val){
134                if ($code)
135                        $adr = sitra_code_email($val);
136                else
137                        $adr = $val;
138                $val = '<a class="spip_mail" href="mailto:'.$val.'">'.$adr.'</a>';
139                $items[$key] = $val;
140        }
141        return implode($delim, $items);
142}
143
144// les sites
145function sitra_expand_web($liste, $delim = ' - '){
146        if (!$liste)
147                return;
148        $items = unserialize($liste);
149        foreach ($items as $key => $val){
150                $val = '<a  class="spip_out" href="'.sitra_norme_web($val).'" rel="external">'.couper($val,40).'</a>';
151                $items[$key] = $val;
152        }
153        return implode($delim, $items);
154}
155
156/**
157pour les horaires
158**/
159function sitra_heure($heure){
160        $h = 1*substr($heure,0,2);
161        $mim = substr($heure,3);
162        if ($mim == '00')
163                $mim = '';
164               
165        return $h.'h'.$m;
166}
167
168
169/**
170afficher les dates correctement
171**/
172function sitra_date_debut_fin($date_debut = '0000-00-00 00:00:00', $date_fin = '0000-00-00 00:00:00', $format='court', $horaire = 'oui'){
173        // verifier la date de debut
174        if ($date_debut == '0000-00-00 00:00:00')
175                return;
176        $debut = affdate($date_debut,'Y-m-d');// aaaa-mm-jj
177        $annee_debut = annee($date_debut);
178        $mois_debut = mois($date_debut);
179        $jour_debut = jour($date_debut);
180        // fin
181        $fin = affdate($date_fin,'Y-m-d'); // aaaa-mm-jj
182        $annee_fin = annee($date_fin);
183        $mois_fin = mois($date_fin);
184        $jour_fin = jour($date_fin);
185
186        $text_debut = $text_fin = '';
187        // si fin pas renseigné debut = fin
188        if ($fin == '0000-00-00')
189                $fin = $debut;
190        // même jour
191        if ($debut == $fin) {
192                if ($format == 'complet')
193                        $text_debut = _T('sitra:date_le').' '.affdate($date_debut);
194                else
195                        $text_debut = _T('sitra:date_le').' '.affdate_jourcourt($date_debut);
196        } else {
197                if ($mois_debut == $mois_fin and $annee_debut == $annee_fin ) 
198                        $mois_debut = '';
199                else
200                        $mois_debut = ' '.nom_mois($date_debut);
201                if ($annee_debut == $annee_fin)
202                        $annee_debut = '';
203                else
204                        $annee_debut = ' '.$annee_debut;
205                       
206                $text_debut = _T('sitra:date_du').' '.jour($date_debut).$mois_debut.$annee_debut;
207                if ($format == 'complet')
208                        $text_fin = _T('sitra:date_au').' '.affdate($date_fin);
209                else
210                        $text_fin = _T('sitra:date_au').' '.affdate_jourcourt($date_fin);
211        }
212       
213        $h_debut = $h_fin = '';
214        // horaires
215        if ($horaire == 'oui'){ 
216                $h_debut = affdate($date_debut,'H:i');
217                $h_fin = affdate($date_fin,'H:i');
218               
219                if ($h_debut != '00:00'){
220                        if ($h_fin == '00:00')
221                                $h_fin = $h_debut;
222                        if ($h_debut == $h_fin)
223                                $text_fin .= ' '._T('sitra:heure_debut_a').' '.sitra_heure($h_debut);
224                        else {
225                                $h_debut = ' '._T('sitra:heure_debut_de').' '.sitra_heure($h_debut);
226                                $h_fin = _T('sitra:heure_fin_a').' '.sitra_heure($h_fin);
227                                $text_fin .= $h_debut.' '.$h_fin;
228                        }
229                }
230        }
231       
232        return $text_debut.' '.$text_fin;
233}
234
235/**
236Pour traiter correctement les dates au format ical
237**/
238function sitra_date_ical($date_debut = '0000-00-00 00:00:00', $date_fin = '0000-00-00 00:00:00'){
239        if ($date_debut == '0000-00-00 00:00:00')
240                return;
241        $debut = affdate($date_debut,'Y-m-d');// aaaa-mm-jj
242        $h_debut = affdate($date_debut,'H:i:s');
243        // fin
244        $fin = affdate($date_fin,'Y-m-d'); // aaaa-mm-jj
245        $h_fin = affdate($date_fin,'H:i:s');
246
247
248        if ($fin == '0000-00-00')
249                $fin = $debut;
250               
251        if ($h_fin == '00:00:00')
252                $h_fin = $h_debut;
253               
254        if ($h_debut == '00:00:00'){
255                // jour entier
256                $annee = annee($date_fin);
257                $mois = mois($date_fin);
258                $jour = jour($date_fin);
259                $lendemain = mktime(0, 0, 0, $mois  , $jour+1, $annee);
260                $result = 'DTSTART:'.affdate($date_debut,'Ymd')."\n";
261                $result .= 'DTEND:'.date('Ymd',$lendemain)."\n";
262        } else {
263                $result = 'DTSTART:'.date_ical($date_debut)."\n";
264                $result .= 'DTEND:'.date_ical($fin.' '.$h_fin)."\n";
265        }
266        return $result;
267}
268
269
270function date_UTC($date = ''){
271        if (!$date) return;
272        $s = affdate($date,'U');
273        $decal = date('Z');
274        $date = $s - $decal;
275        return date('Ymd\THis\Z',$date);
276}
277
278
279function sitra_date_UTC($date_debut = '0000-00-00 00:00:00', $date_fin = '0000-00-00 00:00:00'){
280        if ($date_debut == '0000-00-00 00:00:00')
281                return;
282        $debut = affdate($date_debut,'Y-m-d');// aaaa-mm-jj
283        $h_debut = affdate($date_debut,'H:i:s');
284        // fin
285        $fin = affdate($date_fin,'Y-m-d'); // aaaa-mm-jj
286        $h_fin = affdate($date_fin,'H:i:s');
287
288        if ($fin == '0000-00-00')
289                $fin = $debut;
290               
291        if ($h_fin == '00:00:00')
292                $h_fin = $h_debut;
293       
294        if ($h_debut == '00:00:00'){
295                // jour entier
296                $annee = annee($date_fin);
297                $mois = mois($date_fin);
298                $jour = jour($date_fin);
299                $lendemain = mktime(0, 0, 0, $mois  , $jour+1, $annee);
300                $date_fin = date('Ymd',$lendemain);
301                $result = affdate($date_debut,'Ymd').'/'.$date_fin;
302        } else {
303                $result = date_UTC($date_debut).'/'.date_UTC($fin.' '.$h_fin);
304        }
305        return $result;
306}
307
308/**
309détermine une date dans le passé ou l'avenir à partir d'une autre
310$date doit etre au format YYYY-MM-DD HH:MM:SS
311par défaut on ajoute des jours
312possibilité d'avoir une date dans le passé avec une valeur négative
313**/
314function sitra_date_passe_avenir($date, $ecart=0, $type='d'){
315
316        $y = substr($date, 0, 4);
317        $m = substr($date, 5, 2);
318        $d = substr($date, 8, 2);
319        $h = substr($date, 11, 2);
320        $min = substr($date, 14, 2);
321        $s = substr($date, 17, 2);
322        if (!checkdate ($m, $d, $y )){ return;}
323        switch ($type) {
324                case 'y': $date = mktime($h, $min, $s, $m, $d, $y+$ecart); break;
325                case 'm': $date = mktime($h, $min, $s, $m+$ecart, $d, $y); break;
326                case 'h': $date = mktime($h+$ecart, $min, $s, $m, $d, $y); break;
327                case 'm': $date = mktime($h, $min+$ecart, $s, $m, $d, $y); break;
328                default: $date = mktime($h, $min, $s, $m, $d+$ecart, $y); break;
329   }
330   $date = date('Y-m-d H:i:s',$date);
331   return $date;
332}
333
334
335?>
Note: See TracBrowser for help on using the repository browser.