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

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

Tiens, chemin() n'existe plus en 3.1. Passons à son anglais : find_in_path()

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