source: spip-zone/_squelettes_/soyezcreateurs_net/trunk/plugins/soyezcreateurs/soyezcreateurs_fonctions.php @ 112705

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

Ne traiter que les champs d'adresse dans le bandeau de contact (permet d'en rajouter qui ne concernent pas l'adresse sans provoquer l'affichage d'un bandeau de contact qui serait alors possiblement vide)

File size: 31.6 KB
Line 
1<?php
2if (!defined('_ECRIRE_INC_VERSION')) return; 
3/*
4 *   +----------------------------------+
5 *    Nom du Filtre : Sommaire de l'article
6 *   +----------------------------------+
7 *    Date : dimanche 9 février 2003
8 *    Auteur :  Noplay (noplay@altern.org)
9 *   +-------------------------------------+
10 *    Fonctions de ce filtre :
11 *      Cette modification permet d'afficher le sommaire de son article
12 *      généré dynamiquement à partir du texte de l'article. Vous pouvez naviguer
13 *      dans l'article en cliquant sur les titres du sommaire.
14 *
15 *      Tous ce qui ce trouve entre {{{ et }}} est considéré comme un titre à ajouter au sommaire de l'article.
16 *   +-------------------------------------+
17 *
18 * Pour toute suggestion, remarque, proposition d'ajout
19 * reportez-vous au forum de l'article :
20 * https://contrib.spip.net/spip.php?article76
21*/
22
23function sc_sommaire_article($texte,$istxt=0)
24{
25        // Conversion des intertitres d'enluminures type {ß{titre}ß}
26        // ou ß est un nombre en intertitres avec des étoiles type {{{* (avec ß étoiles)
27        // {1{ sera converti en {{{* ; {2{ sera converti en {{{** ; etc.
28        // Obsolète !
29        /*
30        $texte=preg_replace_callback ("/(\{(\d)\{)(.*?)(\}\\2\})/",
31                                        create_function (
32                                                '$matches',
33                                                'return "{{{".str_repeat("*",$matches[2]).$matches[3]."}}}";'
34                                                ),
35                                        $texte);
36        */
37       
38        preg_match_all("|(?!<code>)\{\{\{([*]*?)(?!<\/code>)(.*)(?!<code>)(\}\}\})(?!<\/code>)|U", $texte, $regs);
39
40
41        $nb=1;
42        $lastniveau=0;
43        if ($istxt==0) {
44                $texte='';
45                for($j=0;$j<count($regs[2]);$j++) {
46                        $niveau=strlen($regs[1][$j]);
47                        if ($niveau===0) {$niveau=1;}
48                        if ($niveau==$lastniveau) {
49                                $texte.="</li>\n";
50                        }
51                        if ($niveau>$lastniveau) {
52                                $texte.="<ul>";
53                                $lastniveau=$niveau;
54                        }
55                        if ($niveau<$lastniveau) {
56                                $texte.="</li>\n";
57                                for($ulli=$niveau;$ulli<$lastniveau;$ulli++) {
58                                        $texte.="</ul></li>\n";
59                                }
60                                $lastniveau=$niveau;
61                        }
62
63                        $texte.="<li><a href=\"#sommaire_".$nb."\">".$regs[2][$j]."</a>";
64                        $nb++;
65                }
66                for($j=0;$j<$niveau;$j++) {
67                        $texte.="</li></ul>\n";
68                }
69                               
70        } else {
71                $texte="";
72                for($j=0;$j<count($regs[2]);$j++)
73                {
74                        $niveau=strlen($regs[1][$j]);
75                        if ($niveau===0) {$niveau=1;}
76                        if ($niveau===1) { $puce="\n- ";}
77                        if ($niveau===2) { $puce=" · ";}
78                        if ($niveau===3) { $puce="  × ";}
79                        if ($niveau===4) { $puce="   ° ";}
80                        if ($niveau===5) { $puce="    ¤ ";}
81                        $texte.=$puce.$regs[2][$j]."\n";
82                }
83
84        }
85        return $texte;
86}
87
88function sc_sommaire_ancre($texte) {
89       
90        $image = find_in_path("images/spip_out.gif");
91        $largeur = largeur($image);
92        $hauteur = hauteur($image);
93       
94        $retoursommaire = "<a href='#sommaire' title='"._T('soyezcreateurs:retoursommaire')."' class='retoursommaire'><img src='$image' width='$largeur' height='$hauteur' alt='"._T('soyezcreateurs:retoursommaire')."' /></a>";
95       
96        $texte = preg_replace("|(<h[23456])[^>]*>(.*)(<\/h[23456]>)|U","$retoursommaire$1 id=\"sommaire_#NB_TITRE_DE_MON_ARTICLE#\">$2$3", $texte);
97
98        $array = explode("#NB_TITRE_DE_MON_ARTICLE#" , $texte);
99        $res =count($array);
100        $i =1;
101        $texte=$array[0];
102        while($i<$res)
103        {
104                $texte.=$i.$array[$i];
105                $i++;
106        }
107        if ($i>1) {
108                $texte.="<p class='retoursommaire'>".$retoursommaire."</p>";
109        }
110        return $texte;
111}
112//Fin filtre sommaire de l'article
113
114function sc_nettoyer_marqueur($texte) {
115        include_spip('inc/charsets');
116        $texte=translitteration($texte);
117        // Enlève la conversion caractères spéciaux HTML
118        $trans_tbl = get_html_translation_table (HTML_ENTITIES);
119        $trans_tbl = array_flip ($trans_tbl);
120        $texte=strtr ($texte, $trans_tbl);
121        $accents =
122                        /* A */ chr(192).chr(193).chr(194).chr(195).chr(196).chr(197).
123                        /* a */ chr(224).chr(225).chr(226).chr(227).chr(228).chr(229).
124                        /* O */ chr(210).chr(211).chr(212).chr(213).chr(214).chr(216).
125                        /* o */ chr(242).chr(243).chr(244).chr(245).chr(246).chr(248).
126                        /* E */ chr(200).chr(201).chr(202).chr(203).
127                        /* e */ chr(232).chr(233).chr(234).chr(235).
128                        /* Cc */ chr(199).chr(231).
129                        /* I */ chr(204).chr(205).chr(206).chr(207).
130                        /* i */ chr(236).chr(237).chr(238).chr(239).
131                        /* U */ chr(217).chr(218).chr(219).chr(220).
132                        /* u */ chr(249).chr(250).chr(251).chr(252).
133                        /* yNn */ chr(255).chr(209).chr(241);
134        $texte = preg_replace("#<[^<]*>#", "", $texte);
135        $texte = preg_replace("#[^A-Za-z0-9]#", "_", strtr($texte,$accents,"AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn"));
136        $texte = preg_replace("#Â #", "_", $texte); 
137        $texte = preg_replace("#\s#", "_", $texte);
138        $texte = preg_replace("#_+#", "_", $texte);
139        return strtolower($texte);
140}
141
142/* à appliquer au #TEXTE de forum */
143function sc_anti_glouton($texte) {
144  $regexp = '|<a href=["\x27]([^"\x27]+)["\x27][^>]*>([^<]+)</a>|i';
145  $replace = "\${2} [\${1}]";
146  $texte = preg_replace($regexp, $replace, $texte);
147  return $texte;
148}
149
150function sc_replace($texte,$search,$replace) {
151        return trim(str_replace($search,$replace,$texte));
152}
153
154function sc_supprimer_slogan($texte) {
155  $regexp = '/<(sub|sup)[^>]*>([^<]*)<\/\1>/i';
156  $replace = "";
157  $texte = trim(preg_replace($regexp, $replace, $texte));
158  return $texte;
159}
160
161function sc_NewLine2str($texte) {
162        return str_replace('"','\"',str_replace("\r",'',str_replace("\n",'\n',$texte)));
163}
164
165function sc_DateAdd($d=null, $v, $f="Y-m-d"){
166  return date($f,strtotime($v." days",strtotime($d)));
167}
168
169function sc_annee_scolaire($ladate) {
170        if ($ladate=='') return '';
171        $annee = annee($ladate);
172        $mois = mois($ladate);
173        if ($mois <= 8) $annee -= 1;
174        return $annee;
175}
176
177/* Permet dans un texte de faire [->refsite12] qui fera un lien vers la page du site en cours décrivant ce site (et non pas un lien direct vers le site de destination) */
178function generer_url_refsite($id, $args, $ancre) {
179        return array('site', $id);
180}
181
182/* Transforme un texte en lien raccourcis SPIP et calcule le résultat */
183function sc_texte2urlspip($url) {
184        return expanser_liens('[->'.$url.']');
185}
186
187function sc_trouver_corr_un ($id_article) {
188        $row = sql_fetsel('spip_articles.id_article, spip_articles.titre', 
189                'spip_articles',
190                "id_article=$id_article");
191        return $row;
192}
193function sc_trouver_corr_pl ($id_article) {
194        $row = sql_fetsel(
195        'spip_articles.id_article, spip_rubriques.titre, spip_rubriques.id_rubrique, spip_rubriques.id_secteur', 
196        'spip_articles LEFT JOIN spip_rubriques ON spip_rubriques.id_rubrique = spip_articles.id_rubrique', 
197        "id_article=$id_article");
198        return $row;
199}
200// Retrouver le fonctionnement d'avant https://core.spip.net/projects/spip/repository/revisions/23315
201function sc_date_ical($date, $addminutes = 0) {
202        list($heures, $minutes, $secondes) = recup_heure($date);
203        list($annee, $mois, $jour) = recup_date($date);
204        return date("Ymd\THis", mktime($heures, $minutes + $addminutes, $secondes, $mois, $jour, $annee));
205}
206function sc_decoder_date ($date_d, $date_e, $horaire='oui', $mode=false, $court=false) {
207        if($mode == 'skel') {
208                $date_d = sc_date_ical($date_d);
209                $date_e = sc_date_ical($date_e);
210        }
211        $debut = array();
212        $debut['annee'] = substr($date_d, 0, 4);
213        $debut['mois'] = substr($date_d, 4, 2);
214        $debut['jour'] = substr($date_d, 6, 2);
215        $debut['heure'] = substr($date_d, 9, 2);
216        $debut['minutes'] = substr($date_d, 11, 2);
217        $debut['secondes'] = substr($date_d, 13, 2);
218        $debut['mois_fr'] = sc_get_mois($debut['mois']);
219        $debut['jour_fr'] = (sc_get_jour(mktime($debut['heure'], $debut['minutes'], $debut['secondes'], $debut['mois'], $debut['jour'], $debut['annee'])));
220        $fin = array();
221        $fin['annee'] = substr($date_e, 0, 4);
222        $fin['mois'] = substr($date_e, 4, 2);
223        $fin['jour'] = substr($date_e, 6, 2);
224        $fin['heure'] = substr($date_e, 9, 2);
225        $fin['minutes'] = substr($date_e, 11, 2);
226        $fin['secondes'] = substr($date_e, 13, 2);
227        $fin['mois_fr'] = sc_get_mois($fin['mois']);
228        $fin['jour_fr'] = sc_get_jour(mktime($fin['heure'], $fin['minutes'], $fin['secondes'], $fin['mois'], $fin['jour'], $fin['annee']));
229        $get_same = sc_same_day($debut, $fin);
230        if ($get_same) {
231                if ($court == 'oui') {
232                        $resultat = ucfirst($debut['jour_fr']).'&nbsp;'.$debut['jour'];
233                }
234                else {
235                        if (intval($debut['jour']) < 10)
236                                $debut['jour'] = substr($debut['jour'], 1, 1);
237                        if ($horaire=='oui') {
238                                $comd = $debut['heure'].$debut['minutes'];
239                                $comf = $fin['heure'].$fin['minutes'];
240                                if ($comd == $comf) {
241                                        $resultat = _T('soyezcreateurs:agenda_sd_h', array(
242                                                'djour_l' => ($debut['jour_fr']),
243                                                'djour' => $debut['jour'],
244                                                'dmois_l' => $debut['mois_fr'],
245                                                'dannee' => $debut['annee'],
246                                                'dheure' => $debut['heure'],
247                                                'dminutes' => $debut['minutes'],
248                                                )
249                                        );
250                                }
251                                else {
252                                $resultat = _T('soyezcreateurs:agenda_sd', array(
253                                        'djour_l' => $debut['jour_fr'],
254                                        'djour' => $debut['jour'],
255                                        'dmois_l' => $debut['mois_fr'],
256                                        'dannee' => $debut['annee'],
257                                        'dheure' => $debut['heure'],
258                                        'dminutes' => $debut['minutes'],
259                                        'fheure' => $fin['heure'],
260                                        'fminutes' => $fin['minutes']
261                                        )
262                                );
263                                }
264                        } else {
265                                $resultat = _T('soyezcreateurs:agenda_sd_notime', array(
266                                        'djour_l' => ($debut['jour_fr']),
267                                        'djour' => $debut['jour'],
268                                        'dmois_l' => $debut['mois_fr'],
269                                        'dannee' => $debut['annee']
270                                        )
271                                );
272                        }
273                }
274        }
275        else if (!$get_same) {
276                if ($court == 'oui') {
277                        $resultat = ucfirst($debut['jour_fr']).'&nbsp;'.$debut['jour'];
278                        $resultat .= '&nbsp;&ndash;&nbsp;'.$fin['jour_fr'].'&nbsp;'.$fin['jour'];
279                        if ($fin['annee'] != $debut['annee']) {
280                                $resultat .= '&nbsp;'.$fin['mois_fr'].'&nbsp;'.$fin['annee'].'&nbsp;';
281                        } else if ($fin['mois'] != $debut['mois']) {
282                                $resultat .= '&nbsp;'.$fin['mois_fr'].'&nbsp;';
283                        } else {
284                                $resultat .= '&nbsp;';
285                        }
286                }
287                else {
288                        if (intval($debut['jour']) < 10)
289                                $debut['jour'] = substr($debut['jour'], 1, 1);
290                        if (intval($fin['jour']) < 10)
291                                $fin['jour'] = substr($fin['jour'], 1, 1);
292                        if ($horaire=='oui') {
293                                $resultat = _T('soyezcreateurs:agenda_fsd', array(
294                                        'djour_l' => ($debut['jour_fr']),
295                                        'djour' => $debut['jour'],
296                                        'dmois_l' => $debut['mois_fr'],
297                                        'dannee' => $debut['annee'],
298                                        'dheure' => $debut['heure'],
299                                        'dminutes' => $debut['minutes'],
300                                        'fjour_l' => $fin['jour_fr'],
301                                        'fjour' => $fin['jour'],
302                                        'fmois_l' => $fin['mois_fr'],
303                                        'fannee' => $fin['annee'],
304                                        'fheure' => $fin['heure'],
305                                        'fminutes' => $fin['minutes']
306                                        )
307                                );
308                        } else {
309                                $resultat = _T('soyezcreateurs:agenda_fsd_notime', array(
310                                        'djour_l' => ($debut['jour_fr']),
311                                        'djour' => $debut['jour'],
312                                        'dmois_l' => $debut['mois_fr'],
313                                        'dannee' => $debut['annee'],
314                                        'fjour_l' => $fin['jour_fr'],
315                                        'fjour' => $fin['jour'],
316                                        'fmois_l' => $fin['mois_fr'],
317                                        'fannee' => $fin['annee']
318                                        )
319                                );
320                        }
321                }
322        }
323        return typo($resultat);
324}
325function sc_same_day ($debut, $fin) {
326        $start = mktime(0, 0, 0, $debut['mois'], $debut['jour'], $debut['annee']);
327        $end = mktime(0, 0, 0, $fin['mois'], $fin['jour'], $fin['annee']);
328        if ($start == $end)
329                return true;
330        else if ($start != $end)
331                return false;
332}
333function sc_get_mois ($nb) {
334        $mois["01"] = _T('date_mois_1');
335        $mois["02"] = _T('date_mois_2');
336        $mois["03"] = _T('date_mois_3');
337        $mois["04"] = _T('date_mois_4');
338        $mois["05"] = _T('date_mois_5');
339        $mois["06"] = _T('date_mois_6');
340        $mois["07"] = _T('date_mois_7');
341        $mois["08"] = _T('date_mois_8');
342        $mois["09"] = _T('date_mois_9');
343        $mois["10"] = _T('date_mois_10');
344        $mois["11"] = _T('date_mois_11');
345        $mois["12"] = _T('date_mois_12');
346        return $mois[$nb];
347}
348function sc_get_jour ($nb) {
349        $nb = intval($nb);
350        $j = date("w", $nb);
351        $jour["0"] = _T('date_jour_1');
352        $jour["1"] = _T('date_jour_2');
353        $jour["2"] = _T('date_jour_3');
354        $jour["3"] = _T('date_jour_4');
355        $jour["4"] = _T('date_jour_5');
356        $jour["5"] = _T('date_jour_6');
357        $jour["6"] = _T('date_jour_7');
358        return $jour[$j];
359}
360function sc_agenda_mini($i) {
361  $args = func_get_args();
362  $une_date = array_shift($args); // une date comme balise
363  $sinon = array_shift($args);
364  if (!$une_date) return $sinon;
365  $type = 'sc_mini';
366  $agenda = sc_Agenda_memo_full(0);
367  $evt = array();
368  foreach (($args ? $args : array_keys($agenda)) as $k) { 
369      if (is_array($agenda[$k]))
370                foreach($agenda[$k] as $d => $v) { 
371                  $evt[$d] = $evt[$d] ? (array_merge($evt[$d], $v)) : $v;
372                }
373    }
374        $la_date = mktime(0, 0, 0, mois($une_date), 1, annee($une_date));
375    include_spip('inc/sc_agenda');
376    return http_calendrier_init($la_date, $type, '', '', '', array('', $evt));
377}
378function sc_agenda_grand($i) {
379  $args = func_get_args();
380  $une_date = array_shift($args); // une date comme balise
381  $sinon = array_shift($args);
382  if (!$une_date) return $sinon;
383  $type = 'sc_grand';
384  $agenda = sc_Agenda_memo_full(0);
385  $evt = array();
386  foreach (($args ? $args : array_keys($agenda)) as $k) { 
387      if (is_array($agenda[$k]))
388                foreach($agenda[$k] as $d => $v) { 
389                  $evt[$d] = $evt[$d] ? (array_merge($evt[$d], $v)) : $v;
390                }
391    }
392        $la_date = mktime(0, 0, 0, mois($une_date), 1, annee($une_date));
393    include_spip('inc/sc_agenda');
394    return http_calendrier_init($la_date, $type, '', '', '', array('', $evt));
395}
396function sc_generer_ligne_agenda($jour, $amj, $evts, $type, $agenda) {
397        //definissons le retour en un tableau
398        $aff = array();
399        //s'il y a un/des evenement(s)
400        if ($evts) {
401                $nb_elmts= @count($evts);
402                //s'il y a plus d'un evenements
403                if ($nb_elmts>1){
404                        if ($agenda == 'mini') {
405                                $row = sc_trouver_corr_pl($evts[0]['ID']);
406                                $date_debut = $evts[0]['LIENJOUR'];
407                                $id_rub = intval($row['id_secteur']);
408                                $titre_rub = supprimer_numero(extraire_multi($row['titre']));
409                                $url = generer_url_public('agenda_calendrier', array('id_rubrique'=>$id_rub,'date_ev'=>$date_debut));
410                                $url_javascript = generer_url_public('agenda_calendrier_dyn', array('id_rubrique'=>$id_rub,'date_ev'=>$date_debut));
411                                $aff['ligne'] = "<a href='".$url."' title='".supprimer_tags(typo($titre_rub))." ("._T('agenda:voir_evenements_rubrique').")' onclick=\"event.preventDefault();window.location.href='".$url_javascript."';\">".intval($jour)."</a>";
412                        }
413                        foreach($evts as $key => $ev) {
414                                if ($agenda == 'grand') {
415                                        if ($key == 0) {
416                                                $aff['ligne'] .= intval($jour);
417                                                $aff['ligne'] .= '<div class="odd">';
418                                                $row = sc_trouver_corr_pl($ev['ID']);
419                                                $row2 = sc_trouver_corr_un($ev['ID']);
420                                                $aff['ligne'] .= '<strong>'.supprimer_numero(typo(extraire_multi($row['titre']))).'</strong>&nbsp;: ';
421                                                $url = generer_url_entite($row2['id_article'], 'article');
422                                                if (supprimer_tags(typo($ev['SUMMARY'])) == supprimer_numero(typo(extraire_multi($row2['titre']))))
423                                                        $aff['ligne'] .= "<a href='".$url."'>".$ev['SUMMARY']."</a>";
424                                                else
425                                                        $aff['ligne'] .= "<a href='".$url."'>".supprimer_numero(typo(extraire_multi($row2['titre'])))."&nbsp;: ".$ev['SUMMARY']."</a>"; 
426                                                $aff['ligne'] .= '</div>';
427                                        }
428                                        else {
429                                                $aff['ligne'] .= '<div>';
430                                                $row = sc_trouver_corr_pl($ev['ID']);
431                                                $row2 = sc_trouver_corr_un($ev['ID']);
432                                                $aff['ligne'] .= "<strong>".supprimer_numero(typo(extraire_multi($row['titre'])))."</strong>&nbsp;: ";
433                                                $url = generer_url_entite($row2['id_article'], 'article');
434                                                if (supprimer_tags(typo($ev['SUMMARY'])) == supprimer_numero(extraire_multi(typo($row2['titre']))))
435                                                        $aff['ligne'] .= "<a href='".$url."'>".$ev['SUMMARY']."</a>";
436                                                else
437                                                        $aff['ligne'] .= "<a href='".$url."'>".supprimer_numero(typo(extraire_multi($row2['titre'])))."&nbsp;: ".$ev['SUMMARY']."</a>"; 
438                                                $aff['ligne'] .= '</div>';
439                                        }
440                                }
441                        }
442                $aff['class']= $type.' events';
443                }
444                //s'il n'y a qu'un evenement
445                else{
446                        if ($agenda == 'grand') {
447                                $aff['ligne'] .= intval($jour);
448                                $aff['ligne'] .= '<div class="odd">';
449                                $row = sc_trouver_corr_pl($evts[0]['ID']);
450                                $row2 = sc_trouver_corr_un($evts[0]['ID']);
451                                $aff['ligne'] .= '<strong>'.supprimer_numero(typo(extraire_multi($row['titre']))).'</strong>&nbsp;: ';
452                                        $url = generer_url_entite($row2['id_article'], 'article');
453                                if (supprimer_tags(typo($evts[0]['SUMMARY'])) == supprimer_numero(typo(extraire_multi($row2['titre']))))
454                                        $aff['ligne'] .= "<a href='".$url."'>".$evts[0]['SUMMARY']."</a>";
455                                else
456                                        $aff['ligne'] .= "<a href='".$url."'>".supprimer_numero(typo(extraire_multi($row2['titre'])))."&nbsp;: ".$evts[0]['SUMMARY']."</a>";
457                                $aff['ligne'] .= '</div>';
458                        }
459                        else if ($agenda == 'mini') {
460                                $row = sc_trouver_corr_un($evts[0]['ID']);
461                                $url = generer_url_entite($row['id_article'], 'article');
462                                $info = sc_decoder_date($evts[0]['DTSTART'], $evts[0]['DTEND'], $evts[0]['HORAIRE']);
463                                if (supprimer_tags(typo($evts[0]['SUMMARY'])) == supprimer_numero(typo(extraire_multi($row['titre']))))
464                                        $title = supprimer_numero(typo(extraire_multi($row['titre'])))." - ".$info;
465                                else
466                                        $title = supprimer_numero(typo(extraire_multi($row['titre'])))." : ".$evts[0]['SUMMARY']." - ".$info;
467                                $aff['ligne'] = "<a href='".$url."' title='".supprimer_tags(typo($title))."'>".intval($jour)."</a>";
468                        }
469                $aff['class']= $type.' event';
470                }
471        }
472        //s'il n'y a rien
473        else {
474                $aff['ligne'] = intval($jour);
475                $aff['class'] = $type;
476        }
477        return $aff;
478}
479function http_calendrier_sc_grand($annee, $mois, $jour, $echelle, $partie_cal, $script, $ancre, $evt) {
480        list($sansduree, $evenements, $premier_jour, $dernier_jour) = $evt;
481
482        if ($sansduree)
483                foreach($sansduree as $d => $r) {
484                        $evenements[$d] = !$evenements[$d] ? $r : 
485                                 array_merge($evenements[$d], $r);
486                         }
487
488        if (!$premier_jour) $premier_jour = '01';
489        if (!$dernier_jour) {
490                $dernier_jour = 31;
491                while (!(checkdate($mois,$dernier_jour,$annee))) $dernier_jour--;
492        }
493
494        // affichage du debut de semaine hors periode
495        $ligne = '';
496        $debut = date("w",mktime(1,1,1,$mois,$premier_jour,$annee));
497        for ($i=$debut ? $debut : 7;$i>1;$i--) {
498                $mois_t_precedent = mktime(1,1,1,$mois-1,1,$annee);
499                $jour_mois_precedent = date('t', $mois_t_precedent)+2-$i;
500                $mois_precedent = date("m",$mois_t_precedent);
501                $annee_en_cours = date("Y",$nom);
502                $amj = date("Y",$mois_t_precedent) . $mois_precedent . $jour_mois_precedent;
503                $evts = $evenements[$amj];
504                $aff = sc_generer_ligne_agenda($jour_mois_precedent, $amj, $evts, 'agendanotthismonth', 'grand');
505                $ligne .= '<td valign="top" class="'.$aff['class'].'">'.$aff['ligne'].'</td>';
506        }
507        //mois en cours
508        $total = '';
509        for ($j=$premier_jour; $j<=$dernier_jour; $j++) {
510                $nom = mktime(1,1,1,$mois,$j,$annee);
511                $jour = date("d",$nom);
512                $jour_semaine = date("w",$nom);
513                $mois_en_cours = date("m",$nom);
514                $annee_en_cours = date("Y",$nom);
515                $amj = date("Y",$nom) . $mois_en_cours . $jour;
516                if ($jour_semaine==1 AND $ligne != '') { 
517                        $total .= "\n<tr>$ligne\n</tr>";
518                        $ligne = '';
519                }
520                $evts = $evenements[$amj];
521                $aff = sc_generer_ligne_agenda($jour, $amj, $evts, 'agendathismonth', 'grand');
522                $ligne .= '<td valign="top" class="'.($amj == date("Ymd")?"agendathisday": $aff['class']).'">' . $aff['ligne'] . '</td>';
523        }
524        $jour_mois_suivant=0;
525        // affichage de la fin de semaine hors periode
526        for($j=$jour_semaine ? $jour_semaine : 7; $j<7; $j++) {
527                $nom = mktime(1,1,1,$mois+1,$j,$annee);
528                $jour = date("d",$nom);
529                $jour_semaine = date("w",$nom);
530                $mois_suivant = date("m",$nom);
531                $annee_en_cours = date("Y",$nom);
532                $amj = date("Y",$nom) . $mois_suivant . '0'.$jour_mois_suivant++;
533                $evts = $evenements[$amj];
534                $aff = sc_generer_ligne_agenda($jour_mois_suivant, $amj, $evts, 'agendanotthismonth', 'grand');
535                $ligne .= '<td valign="top" class="'.$aff['class'].'">'.$aff['ligne'].'</td>';
536        }
537
538        return $total . ($ligne ? "\n<tr>$ligne\n</tr>" : '');
539}
540
541
542function http_calendrier_sc_mini($annee, $mois, $jour, $echelle, $partie_cal, $script, $ancre, $evt) {
543        list($sansduree, $evenements, $premier_jour, $dernier_jour) = $evt;
544
545        if ($sansduree)
546                foreach($sansduree as $d => $r) {
547                        $evenements[$d] = !$evenements[$d] ? $r : 
548                                 array_merge($evenements[$d], $r);
549                         }
550
551        if (!$premier_jour) $premier_jour = '01';
552        if (!$dernier_jour) {
553                $dernier_jour = 31;
554                while (!(checkdate($mois,$dernier_jour,$annee))) $dernier_jour--;
555        }
556
557        // affichage du debut de semaine hors periode
558        $ligne = '';
559        $debut = date("w",mktime(1,1,1,$mois,$premier_jour,$annee));
560        for ($i=$debut ? $debut : 7;$i>1;$i--) {
561                $mois_t_precedent = mktime(1,1,1,$mois-1,1,$annee);
562                $jour_mois_precedent = date('t', $mois_t_precedent)+2-$i;
563                $mois_precedent = date("m",$mois_t_precedent);
564                $annee_en_cours = date("Y",$nom);
565                $amj = date("Y",$mois_t_precedent) . $mois_precedent . $jour_mois_precedent;
566                $evts = $evenements[$amj];
567                $aff = sc_generer_ligne_agenda($jour_mois_precedent, $amj, $evts, 'agendanotthismonth', 'mini');
568                $ligne .= '<td class="'.$aff['class'].'">'.$aff['ligne'].'</td>';
569        }
570        //mois en cours
571        $total = '';
572        for ($j=$premier_jour; $j<=$dernier_jour; $j++) {
573                $nom = mktime(1,1,1,$mois,$j,$annee);
574                $jour = date("d",$nom);
575                $jour_semaine = date("w",$nom);
576                $mois_en_cours = date("m",$nom);
577                $annee_en_cours = date("Y",$nom);
578                $amj = date("Y",$nom) . $mois_en_cours . $jour;
579
580                if ($jour_semaine==1 AND $ligne != '') { 
581                        $total .= "\n<tr>$ligne\n</tr>";
582                        $ligne = '';
583                }
584
585                $evts = $evenements[$amj];
586                $aff = sc_generer_ligne_agenda($jour, $amj, $evts, 'agendathismonth', 'mini');
587                $ligne .= '<td class="'.($amj == date("Ymd")?"agendathisday": $aff['class']).'">' . $aff['ligne'] . '</td>';
588        }
589        $jour_mois_suivant=1;
590        // affichage de la fin de semaine hors periode
591        for($j=$jour_semaine ? $jour_semaine : 7; $j<7; $j++) {
592                $nom = mktime(1,1,1,$mois+1,$j,$annee);
593                $jour = date("d",$nom);
594                $jour_semaine = date("w",$nom);
595                $mois_suivant = date("m",$nom);
596                $annee_en_cours = date("Y",$nom);
597                $amj = date("Y",$nom) . $mois_suivant . '0'.$jour_mois_suivant;
598                $evts = $evenements[$amj];
599                $aff = sc_generer_ligne_agenda($jour_mois_suivant++, $amj, $evts, 'agendanotthismonth', 'mini');
600                $ligne .= '<td class="'.$aff['class'].'">'.$aff['ligne'].'</td>';
601        }
602
603        return $total . ($ligne ? "\n<tr>$ligne\n</tr>" : '');
604}
605function sc_agenda_memo_full($date_deb=0, $date_fin=0 , $titre='', $descriptif='', $lieu='', $url='', $horaire='oui', $cal='')
606{
607        static $agenda = array();
608        if (!$date_deb) {
609                $res = $agenda;
610                $agenda=array();
611                return $res;
612        }
613        $url=str_replace("&amp;","&",$url);
614       
615        $idatedeb = sc_date_ical($date_deb);
616        $idatefin = sc_date_ical($date_fin);
617        $vidatefin = sc_date_ical($date_fin);
618        $cal = trim($cal); // func_get_args (filtre alterner) rajoute \n !!!!
619        $startday1=explode(' ',$date_deb);
620        $startday1=$startday1['0'].' 00:00:00';
621        $ts_startday1=strtotime($startday1);
622        $ts_date_fin=strtotime($date_fin);
623        $maxdays=365;
624        while (($ts_startday1<=$ts_date_fin)&&($maxdays-->0))
625        {
626                $day=date('Y-m-d H:i:s',$ts_startday1);
627                $lienjour=date('Y-m-d',$ts_startday1);
628                $agenda[$cal][(date_anneemoisjour($day))][] =  array(
629                        'CATEGORIES' => $cal,
630                        'DTSTART' => $idatedeb,
631                        'DTEND' => $vidatefin,
632                        'DESCRIPTION' => $descriptif,
633                        'SUMMARY' => supprimer_numero(typo(extraire_multi($titre))),
634                        'HORAIRE' => $horaire,
635                        'LOCATION' => $lieu,
636                        'ID' => $url,
637                        'LIENJOUR' => $lienjour);
638                $ts_startday1 += 26*3600; // le jour suivant : +26 h pour gerer les changements d'heure
639                $ts_startday1 = mktime(0, 0, 0, date("m",$ts_startday1), 
640                date("d",$ts_startday1), date("Y",$ts_startday1)); // et remise a zero de l'heure       
641        }
642        // toujours retourner vide pour qu'il ne se passe rien
643        return "";
644}
645
646function js2PhpTime($jsdate){
647  if(preg_match('@(\d+)/(\d+)/(\d+)\s+(\d+):(\d+)@', $jsdate, $matches)==1){
648    $ret = mktime($matches[4], $matches[5], 0, $matches[1], $matches[2], $matches[3]);
649  }else if(preg_match('@(\d+)/(\d+)/(\d+)@', $jsdate, $matches)==1){
650    $ret = mktime(0, 0, 0, $matches[1], $matches[2], $matches[3]);
651  }
652  return $ret;
653}
654
655function php2JsTime($phpDate){
656    return date("m/d/Y H:i", $phpDate);
657}
658
659function php2MySqlTime($phpDate){
660    return date("Y-m-d H:i:s", $phpDate);
661}
662
663function mySql2PhpTime($sqlDate){
664    $arr = date_parse($sqlDate);
665    return mktime($arr["hour"],$arr["minute"],$arr["second"],$arr["month"],$arr["day"],$arr["year"]);
666}
667
668function sc_wdcalendar_json($day, $type) {
669        $phpTime = js2PhpTime($day);
670
671        switch($type){
672        case "month":
673          $st = mktime(0, 0, 0, date("m", $phpTime), 1, date("Y", $phpTime));
674          $et = mktime(0, 0, -1, date("m", $phpTime)+1, 1, date("Y", $phpTime));
675          break;
676        case "week":
677          //suppose first day of a week is monday
678          $monday  =  date("d", $phpTime) - date('N', $phpTime) + 1;
679          //echo date('N', $phpTime);
680          $st = mktime(0,0,0,date("m", $phpTime), $monday, date("Y", $phpTime));
681          $et = mktime(0,0,-1,date("m", $phpTime), $monday+7, date("Y", $phpTime));
682          break;
683        case "day":
684          $st = mktime(0, 0, 0, date("m", $phpTime), date("d", $phpTime), date("Y", $phpTime));
685          $et = mktime(0, 0, -1, date("m", $phpTime), date("d", $phpTime)+1, date("Y", $phpTime));
686          break;
687        }
688       
689        $ret = array();
690        $ret['events'] = array();
691        $ret["issort"] =true;
692        $ret["start"] = php2JsTime($st);
693        $ret["end"] = php2JsTime($et);
694        $ret['error'] = null;
695       
696        $where = array(
697                "date_debut between '".php2MySqlTime($st)."' and '".php2MySqlTime($et)."'",
698        );
699        if($resultats = sql_select('*', "spip_evenements", $where)) {
700                while($row = sql_fetch($resultats)) {
701
702                        $date_debut = intval(date('Ymd',mySql2PhpTime($row['date_debut'])));
703                        $date_fin = intval(date('Ymd',mySql2PhpTime($row['date_fin'])));
704
705                        if($date_fin > $date_debut OR $row['horaire'] == 'non') {
706                                $AllTheDay = 1;
707                        } else $AllTheDay = 0;
708                       
709                        $colorEvent = intval($row['id_evenement'])%13;
710
711                        $ret['events'][] = array(
712                                intval($row['id_evenement']),
713                                unicode2charset(html2unicode(supprimer_tags(supprimer_numero(typo(extraire_multi($row['titre'])))))),
714                                php2JsTime(mySql2PhpTime($row['date_debut'])),
715                                php2JsTime(mySql2PhpTime($row['date_fin'])),
716                                0,
717                                $AllTheDay, //more than one day event
718                                0,//Recurring event,
719                                $colorEvent, //color
720                                0,//editable
721                                unicode2charset(html2unicode(supprimer_tags(supprimer_numero(typo(extraire_multi($row['lieu'])))))), //lieu
722                                urlencode_1738(generer_url_entite(intval($row['id_article']), 'article')) //url article spip //$attends                         
723                        );
724                }
725        }
726       
727        // return print_r($ret,1);
728
729        return json_encode($ret);
730}
731
732function balise_ARTICLE_URL_dist($p) {
733        if (!is_array($p->param))
734                $p->param=array();
735
736        // Produire le premier argument {article_url}
737        $texte = new Texte;
738        $texte->type='texte';
739        $texte->texte='article_url';
740        $param = array(0=>NULL, 1=>array(0=>$texte));
741        array_unshift($p->param, $param);
742
743        // Transformer les filtres en arguments
744        for ($i=1; $i<count($p->param); $i++) {
745                if ($p->param[$i][0]) {
746                        if (!strstr($p->param[$i][0], '='))
747                                break;# on a rencontre un vrai filtre, c'est fini
748                        $texte = new Texte;
749                        $texte->type='texte';
750                        $texte->texte=$p->param[$i][0];
751                        $param = array(0=>$texte);
752                        $p->param[$i][1] = $param;
753                        $p->param[$i][0] = NULL;
754                }
755        }
756
757        // Appeler la balise #MODELE{article_url}{arguments}
758        if (!function_exists($f = 'balise_modele'))
759                $f = 'balise_modele_dist';
760        return $f($p);
761}
762
763
764@define('_MOT_MASQUER', 'Archives');
765
766// ajoute le critere {archive} et {!archive}
767// {archive} n'affiche que les articles ayant le mot clef _MOT_MASQUER ou dont la rubrique a ce mot clef
768// {!archive} n'affiche que les articles n'ayant pas ce mot clef et dont la rubrique ne l'a pas non plus
769// /!\ Pas de notion d'héritage sur une branche /!\
770function critere_archive_dist($idb, &$boucles, $crit) {
771        $boucle = &$boucles[$idb];
772        $not = $crit->not?"NOT":"";
773       
774        if ($boucle->type_requete == 'articles') {
775                $art = $boucle->id_table . '.id_article';
776                $select_article = sql_get_select($art,
777                        "spip_articles AS `articlesin`
778                        INNER JOIN spip_mots_liens AS mots_liens_articles
779                                ON (articlesin.id_article = mots_liens_articles.id_objet AND mots_liens_articles.objet=\"article\")
780                        INNER JOIN spip_mots AS mots_articles
781                                ON (mots_liens_articles.id_mot=mots_articles.id_mot)",
782                        array("articlesin.id_article = $art","mots_articles.titre=\"Archives\""));
783                $select_article_rubrique = sql_get_select($art,
784                        "spip_articles AS `articlesin`
785                                INNER JOIN spip_rubriques AS rubriques
786                                        ON (articlesin.id_rubrique = rubriques.id_rubrique)
787                                INNER JOIN spip_mots_liens AS mots_liens_rubriques
788                                        ON (rubriques.id_rubrique = mots_liens_rubriques.id_objet AND mots_liens_rubriques.objet=\"rubrique\")
789                                INNER JOIN spip_mots AS mots_articles ON
790                                        (mots_liens_rubriques.id_mot=mots_articles.id_mot)",
791                        array("articlesin.id_article = $art","mots_articles.titre=\"Archives\""));
792       
793                $where = "'$not (($art  IN ($select_article)) OR ($art  IN ($select_article_rubrique)))'";
794                $boucle->where[]= $where;
795        }
796}
797
798/** Plugin Dictionnaires **/
799/*
800 * Fonction de remplacement par défaut pour les termes trouvés dans les textes
801 */
802function dictionnaires_remplacer_defaut($mot, $definition){
803        return $mot
804                .'<sup><a href="'
805                .($definition['url']?$definition['url']:generer_url_public('sigles', 'id_dictionnaire='.$definition['id_dictionnaire'].'#sigle'.$definition['id_definition']))
806                .'" title="'._T('definition:titre_definition').': '.couper(trim(attribut_html(supprimer_tags(typo($definition['texte'])))),80).'">'
807                .'?'
808                .'</a></sup>';
809}
810
811/*
812 * Fonction de remplacement par défaut pour les abbréviations trouvées dans les textes
813 * Ceci est un EXEMPLE montrant qu'on peut mettre un truc différent pour un type de définition précis
814 * Mais ce code est une MAUVAISE PRATIQUE en accessibilité
815 * (car seuls les gens avec des yeux valides et un pointeur de souris ont accès à l'information)
816 */
817function dictionnaires_remplacer_abbr($mot, $definition){
818        return '<abbr title="'.trim(attribut_html(supprimer_tags(typo($definition['texte'])))).'">'.$mot.'</abbr>';
819        /* Pas de texte rajouté après : pose problème sur |couper et |attribut_html
820                .'<sup><a href="'
821                .($definition['url']?$definition['url']:generer_url_public('sigles', 'id_dictionnaire='.$definition['id_dictionnaire'].'&type=abbr#sigle'.$definition['id_definition']))
822                .'" title="'._T('definition:titre_definition').': '.couper(trim(attribut_html(supprimer_tags(typo($definition['texte'])))),80).'">'
823                .'?'
824                .'</a></sup>';
825        */
826}
827
828if (!function_exists('rainette_afficher_icone')) {
829        function rainette_afficher_icone($meteo, $taille='petit', $chemin='', $extension='png'){
830                return rainette_icone_meteo($meteo, $taille='petit', $chemin='', $extension='png');
831        }
832}
833
834function sc_rgb($couleurs) {
835        include_spip('inc/filtres_images_lib_mini'); // par precaution
836        $couleurs = _couleur_hex_to_dec($couleurs);
837        return $couleurs["red"] .", ". $couleurs["green"]  .", ". $couleurs["blue"];
838}
839
840function mini_html($texte) {
841        $texte = preg_replace(",\n[\t\ ]*,", "\n", $texte);
842        $texte = preg_replace(",\n+,", "\n", $texte);
843        if (defined('_CLEVER_CACHE_BUSTING') && _CLEVER_CACHE_BUSTING === true) {
844                $texte = preg_replace("/\.(jpg|gif|png|css|js|json|xml)\?([0-9]+)([\'\"])/", ".$2.$1$3", $texte);
845        }
846       
847        return $texte;
848}
849
850if(is_array($GLOBALS['spip_matrice'])){
851        $GLOBALS['spip_matrice']['image_focus'] = 'filtres/images_soyezcreateurs.php';
852}
853
854function sinoncrayon($texte, $sinon = '') {
855        return $texte;
856        // ça ne marche pas : le cache garde la version vue par l'admin, même pour les visiteurs !
857        if ((isset($GLOBALS['visiteur_session']['statut']) AND $GLOBALS['visiteur_session']['statut']=='0minirezo')) {
858                return sinon($texte, '<i><small>[Crayons]</small></i> '.$sinon.' <i><small>[/Crayons]</small></i>');
859        } else {
860                return $texte;
861        }
862}
863
864function sc_exclude_newsletter($texte) {
865        $texte = preg_replace(
866                '/(<!-- Begin Exclude NewsLetter -->.*<!-- End Exclude NewsLetter -->)/s', 
867                '',
868                $texte);
869        return $texte;
870}
871
872function sc_filesize($file) {
873        $size = 0;
874        $size = filesize($file=preg_replace(',[?].*$,','',$file));
875        return $size;
876}
877
878function sc_bandeau_contact() {
879        $texte = '';
880        // N'afficher avec identité Extra (https://contrib.spip.net/Identite-Extra) que si au moins un champ renseigné
881        $identite_extra = lire_config('identite_extra');
882        $champs = explode(',', _CHAMPS_INDENTITE_EXTRA_SC);
883        echo implode($champs,',');
884        if ((is_array($identite_extra)) && (implode('', $identite_extra) !== '')) {
885                foreach($champs as $champ) {
886                        if (array_key_exists($champ, $identite_extra) && $identite_extra[$champ]!== '') {
887                                $texte = recuperer_fond('noisettes/footer/footer_identite_extra');
888                                break;
889                        }
890                }
891        }
892        if ($texte === '') {
893                // On utilise la vieille configuration du bandeau de contact de SoyezCréateurs
894                $texte = recuperer_fond('noisettes/footer/footer_bandeau_contact');
895        }
896       
897        return $texte;
898}
Note: See TracBrowser for help on using the repository browser.