source: spip-zone/_squelettes_/soyezcreateurs_net/plugins_2.1/plugins/soyezcreateurs/soyezcreateurs_fonctions.php @ 76935

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

Oups, perdu dans la manip pour SPIP 3

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