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

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

Passage de la fonction focusimage en image_focus dans la matrice des traitements d'images de SPIP

File size: 29.9 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
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 http://core.spip.org/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        return $texte;
844}
845
846if(is_array($GLOBALS['spip_matrice'])){
847        $GLOBALS['spip_matrice']['image_focus'] = 'filtres/images_soyezcreateurs.php';
848}
Note: See TracBrowser for help on using the repository browser.