diff --git a/soyezcreateurs_fonctions.php b/soyezcreateurs_fonctions.php index b724777a0f41c03ab33de89480119381c0d43efa..e2c14b8ad43484e54e10dae128630335b84f26ea 100644 --- a/soyezcreateurs_fonctions.php +++ b/soyezcreateurs_fonctions.php @@ -1,856 +1,858 @@ -<?php -if (!defined('_ECRIRE_INC_VERSION')) return; -/* - * +----------------------------------+ - * Nom du Filtre : Sommaire de l'article - * +----------------------------------+ - * Date : dimanche 9 février 2003 - * Auteur : Noplay (noplay@altern.org) - * +-------------------------------------+ - * Fonctions de ce filtre : - * Cette modification permet d'afficher le sommaire de son article - * généré dynamiquement à partir du texte de l'article. Vous pouvez naviguer - * dans l'article en cliquant sur les titres du sommaire. - * - * Tous ce qui ce trouve entre {{{ et }}} est considéré comme un titre à ajouter au sommaire de l'article. - * +-------------------------------------+ - * - * Pour toute suggestion, remarque, proposition d'ajout - * reportez-vous au forum de l'article : - * http://contrib.spip.net/spip.php?article76 -*/ - -function sc_sommaire_article($texte,$istxt=0) -{ - // Conversion des intertitres d'enluminures type {ß{titre}ß} - // ou ß est un nombre en intertitres avec des étoiles type {{{* (avec ß étoiles) - // {1{ sera converti en {{{* ; {2{ sera converti en {{{** ; etc. - // Obsolète ! - /* - $texte=preg_replace_callback ("/(\{(\d)\{)(.*?)(\}\\2\})/", - create_function ( - '$matches', - 'return "{{{".str_repeat("*",$matches[2]).$matches[3]."}}}";' - ), - $texte); - */ - - preg_match_all("|(?!<code>)\{\{\{([*]*?)(?!<\/code>)(.*)(?!<code>)(\}\}\})(?!<\/code>)|U", $texte, $regs); - - - $nb=1; - $lastniveau=0; - if ($istxt==0) { - $texte=''; - for($j=0;$j<count($regs[2]);$j++) { - $niveau=strlen($regs[1][$j]); - if ($niveau===0) {$niveau=1;} - if ($niveau==$lastniveau) { - $texte.="</li>\n"; - } - if ($niveau>$lastniveau) { - $texte.="<ul>"; - $lastniveau=$niveau; - } - if ($niveau<$lastniveau) { - $texte.="</li>\n"; - for($ulli=$niveau;$ulli<$lastniveau;$ulli++) { - $texte.="</ul></li>\n"; - } - $lastniveau=$niveau; - } - - $texte.="<li><a href=\"#sommaire_".$nb."\">".$regs[2][$j]."</a>"; - $nb++; - } - for($j=0;$j<$niveau;$j++) { - $texte.="</li></ul>\n"; - } - - } else { - $texte=""; - for($j=0;$j<count($regs[2]);$j++) - { - $niveau=strlen($regs[1][$j]); - if ($niveau===0) {$niveau=1;} - if ($niveau===1) { $puce="\n- ";} - if ($niveau===2) { $puce=" · ";} - if ($niveau===3) { $puce=" × ";} - if ($niveau===4) { $puce=" ° ";} - if ($niveau===5) { $puce=" ¤ ";} - $texte.=$puce.$regs[2][$j]."\n"; - } - - } - return $texte; -} - -function sc_sommaire_ancre($texte) { - - $image = find_in_path("images/spip_out.gif"); - $largeur = largeur($image); - $hauteur = hauteur($image); - - $retoursommaire = "<a href='#sommaire' title='"._T('soyezcreateurs:retoursommaire')."' class='retoursommaire'><img src='$image' width='$largeur' height='$hauteur' alt='"._T('soyezcreateurs:retoursommaire')."' /></a>"; - - $texte = preg_replace("|(<h[23456])[^>]*>(.*)(<\/h[23456]>)|U","$retoursommaire$1 id=\"sommaire_#NB_TITRE_DE_MON_ARTICLE#\">$2$3", $texte); - - $array = explode("#NB_TITRE_DE_MON_ARTICLE#" , $texte); - $res =count($array); - $i =1; - $texte=$array[0]; - while($i<$res) - { - $texte.=$i.$array[$i]; - $i++; - } - if ($i>1) { - $texte.="<p class='retoursommaire'>".$retoursommaire."</p>"; - } - return $texte; -} -//Fin filtre sommaire de l'article - -function sc_nettoyer_marqueur($texte) { - include_spip('inc/charsets'); - $texte=translitteration($texte); - // Enlève la conversion caractères spéciaux HTML - $trans_tbl = get_html_translation_table (HTML_ENTITIES); - $trans_tbl = array_flip ($trans_tbl); - $texte=strtr ($texte, $trans_tbl); - $accents = - /* A */ chr(192).chr(193).chr(194).chr(195).chr(196).chr(197). - /* a */ chr(224).chr(225).chr(226).chr(227).chr(228).chr(229). - /* O */ chr(210).chr(211).chr(212).chr(213).chr(214).chr(216). - /* o */ chr(242).chr(243).chr(244).chr(245).chr(246).chr(248). - /* E */ chr(200).chr(201).chr(202).chr(203). - /* e */ chr(232).chr(233).chr(234).chr(235). - /* Cc */ chr(199).chr(231). - /* I */ chr(204).chr(205).chr(206).chr(207). - /* i */ chr(236).chr(237).chr(238).chr(239). - /* U */ chr(217).chr(218).chr(219).chr(220). - /* u */ chr(249).chr(250).chr(251).chr(252). - /* yNn */ chr(255).chr(209).chr(241); - $texte = preg_replace("#<[^<]*>#", "", $texte); - $texte = preg_replace("#[^A-Za-z0-9]#", "_", strtr($texte,$accents,"AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn")); - $texte = preg_replace("#Â #", "_", $texte); - $texte = preg_replace("#\s#", "_", $texte); - $texte = preg_replace("#_+#", "_", $texte); - return strtolower($texte); -} - -/* à appliquer au #TEXTE de forum */ -function sc_anti_glouton($texte) { - $regexp = '|<a href=["\x27]([^"\x27]+)["\x27][^>]*>([^<]+)</a>|i'; - $replace = "\${2} [\${1}]"; - $texte = preg_replace($regexp, $replace, $texte); - return $texte; -} - -function sc_replace($texte,$search,$replace) { - return trim(str_replace($search,$replace,$texte)); -} - -function sc_supprimer_slogan($texte) { - $regexp = '/<(sub|sup)[^>]*>([^<]*)<\/\1>/i'; - $replace = ""; - $texte = trim(preg_replace($regexp, $replace, $texte)); - return $texte; -} - -function sc_NewLine2str($texte) { - return str_replace('"','\"',str_replace("\r",'',str_replace("\n",'\n',$texte))); -} - -function sc_DateAdd($d=null, $v, $f="Y-m-d"){ - return date($f,strtotime($v." days",strtotime($d))); -} - -function sc_annee_scolaire($ladate) { - if ($ladate=='') return ''; - $annee = annee($ladate); - $mois = mois($ladate); - if ($mois <= 8) $annee -= 1; - return $annee; -} - -/* 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) */ -function generer_url_refsite($id, $args, $ancre) { - return array('site', $id); -} - -/* Transforme un texte en lien raccourcis SPIP et calcule le résultat */ -function sc_texte2urlspip($url) { - return expanser_liens('[->'.$url.']'); -} - -function sc_trouver_corr_un ($id_article) { - $row = sql_fetsel('spip_articles.id_article, spip_articles.titre', - 'spip_articles', - "id_article=$id_article"); - return $row; -} -function sc_trouver_corr_pl ($id_article) { - $row = sql_fetsel( - 'spip_articles.id_article, spip_rubriques.titre, spip_rubriques.id_rubrique, spip_rubriques.id_secteur', - 'spip_articles LEFT JOIN spip_rubriques ON spip_rubriques.id_rubrique = spip_articles.id_rubrique', - "id_article=$id_article"); - return $row; -} -// Retrouver le fonctionnement d'avant http://core.spip.org/projects/spip/repository/revisions/23315 -function sc_date_ical($date, $addminutes = 0) { - list($heures, $minutes, $secondes) = recup_heure($date); - list($annee, $mois, $jour) = recup_date($date); - return date("Ymd\THis", mktime($heures, $minutes + $addminutes, $secondes, $mois, $jour, $annee)); -} -function sc_decoder_date ($date_d, $date_e, $horaire='oui', $mode=false, $court=false) { - if($mode == 'skel') { - $date_d = sc_date_ical($date_d); - $date_e = sc_date_ical($date_e); - } - $debut = array(); - $debut['annee'] = substr($date_d, 0, 4); - $debut['mois'] = substr($date_d, 4, 2); - $debut['jour'] = substr($date_d, 6, 2); - $debut['heure'] = substr($date_d, 9, 2); - $debut['minutes'] = substr($date_d, 11, 2); - $debut['secondes'] = substr($date_d, 13, 2); - $debut['mois_fr'] = sc_get_mois($debut['mois']); - $debut['jour_fr'] = (sc_get_jour(mktime($debut['heure'], $debut['minutes'], $debut['secondes'], $debut['mois'], $debut['jour'], $debut['annee']))); - $fin = array(); - $fin['annee'] = substr($date_e, 0, 4); - $fin['mois'] = substr($date_e, 4, 2); - $fin['jour'] = substr($date_e, 6, 2); - $fin['heure'] = substr($date_e, 9, 2); - $fin['minutes'] = substr($date_e, 11, 2); - $fin['secondes'] = substr($date_e, 13, 2); - $fin['mois_fr'] = sc_get_mois($fin['mois']); - $fin['jour_fr'] = sc_get_jour(mktime($fin['heure'], $fin['minutes'], $fin['secondes'], $fin['mois'], $fin['jour'], $fin['annee'])); - $get_same = sc_same_day($debut, $fin); - if ($get_same) { - if ($court == 'oui') { - $resultat = ucfirst($debut['jour_fr']).' '.$debut['jour']; - } - else { - if (intval($debut['jour']) < 10) - $debut['jour'] = substr($debut['jour'], 1, 1); - if ($horaire=='oui') { - $comd = $debut['heure'].$debut['minutes']; - $comf = $fin['heure'].$fin['minutes']; - if ($comd == $comf) { - $resultat = _T('soyezcreateurs:agenda_sd_h', array( - 'djour_l' => ($debut['jour_fr']), - 'djour' => $debut['jour'], - 'dmois_l' => $debut['mois_fr'], - 'dannee' => $debut['annee'], - 'dheure' => $debut['heure'], - 'dminutes' => $debut['minutes'], - ) - ); - } - else { - $resultat = _T('soyezcreateurs:agenda_sd', array( - 'djour_l' => $debut['jour_fr'], - 'djour' => $debut['jour'], - 'dmois_l' => $debut['mois_fr'], - 'dannee' => $debut['annee'], - 'dheure' => $debut['heure'], - 'dminutes' => $debut['minutes'], - 'fheure' => $fin['heure'], - 'fminutes' => $fin['minutes'] - ) - ); - } - } else { - $resultat = _T('soyezcreateurs:agenda_sd_notime', array( - 'djour_l' => ($debut['jour_fr']), - 'djour' => $debut['jour'], - 'dmois_l' => $debut['mois_fr'], - 'dannee' => $debut['annee'] - ) - ); - } - } - } - else if (!$get_same) { - if ($court == 'oui') { - $resultat = ucfirst($debut['jour_fr']).' '.$debut['jour']; - $resultat .= ' – '.$fin['jour_fr'].' '.$fin['jour']; - if ($fin['annee'] != $debut['annee']) { - $resultat .= ' '.$fin['mois_fr'].' '.$fin['annee'].' '; - } else if ($fin['mois'] != $debut['mois']) { - $resultat .= ' '.$fin['mois_fr'].' '; - } else { - $resultat .= ' '; - } - } - else { - if (intval($debut['jour']) < 10) - $debut['jour'] = substr($debut['jour'], 1, 1); - if (intval($fin['jour']) < 10) - $fin['jour'] = substr($fin['jour'], 1, 1); - if ($horaire=='oui') { - $resultat = _T('soyezcreateurs:agenda_fsd', array( - 'djour_l' => ($debut['jour_fr']), - 'djour' => $debut['jour'], - 'dmois_l' => $debut['mois_fr'], - 'dannee' => $debut['annee'], - 'dheure' => $debut['heure'], - 'dminutes' => $debut['minutes'], - 'fjour_l' => $fin['jour_fr'], - 'fjour' => $fin['jour'], - 'fmois_l' => $fin['mois_fr'], - 'fannee' => $fin['annee'], - 'fheure' => $fin['heure'], - 'fminutes' => $fin['minutes'] - ) - ); - } else { - $resultat = _T('soyezcreateurs:agenda_fsd_notime', array( - 'djour_l' => ($debut['jour_fr']), - 'djour' => $debut['jour'], - 'dmois_l' => $debut['mois_fr'], - 'dannee' => $debut['annee'], - 'fjour_l' => $fin['jour_fr'], - 'fjour' => $fin['jour'], - 'fmois_l' => $fin['mois_fr'], - 'fannee' => $fin['annee'] - ) - ); - } - } - } - return typo($resultat); -} -function sc_same_day ($debut, $fin) { - $start = mktime(0, 0, 0, $debut['mois'], $debut['jour'], $debut['annee']); - $end = mktime(0, 0, 0, $fin['mois'], $fin['jour'], $fin['annee']); - if ($start == $end) - return true; - else if ($start != $end) - return false; -} -function sc_get_mois ($nb) { - $mois["01"] = _T('date_mois_1'); - $mois["02"] = _T('date_mois_2'); - $mois["03"] = _T('date_mois_3'); - $mois["04"] = _T('date_mois_4'); - $mois["05"] = _T('date_mois_5'); - $mois["06"] = _T('date_mois_6'); - $mois["07"] = _T('date_mois_7'); - $mois["08"] = _T('date_mois_8'); - $mois["09"] = _T('date_mois_9'); - $mois["10"] = _T('date_mois_10'); - $mois["11"] = _T('date_mois_11'); - $mois["12"] = _T('date_mois_12'); - return $mois[$nb]; -} -function sc_get_jour ($nb) { - $nb = intval($nb); - $j = date("w", $nb); - $jour["0"] = _T('date_jour_1'); - $jour["1"] = _T('date_jour_2'); - $jour["2"] = _T('date_jour_3'); - $jour["3"] = _T('date_jour_4'); - $jour["4"] = _T('date_jour_5'); - $jour["5"] = _T('date_jour_6'); - $jour["6"] = _T('date_jour_7'); - return $jour[$j]; -} -function sc_agenda_mini($i) { - $args = func_get_args(); - $une_date = array_shift($args); // une date comme balise - $sinon = array_shift($args); - if (!$une_date) return $sinon; - $type = 'sc_mini'; - $agenda = sc_Agenda_memo_full(0); - $evt = array(); - foreach (($args ? $args : array_keys($agenda)) as $k) { - if (is_array($agenda[$k])) - foreach($agenda[$k] as $d => $v) { - $evt[$d] = $evt[$d] ? (array_merge($evt[$d], $v)) : $v; - } - } - $la_date = mktime(0, 0, 0, mois($une_date), 1, annee($une_date)); - include_spip('inc/sc_agenda'); - return http_calendrier_init($la_date, $type, '', '', '', array('', $evt)); -} -function sc_agenda_grand($i) { - $args = func_get_args(); - $une_date = array_shift($args); // une date comme balise - $sinon = array_shift($args); - if (!$une_date) return $sinon; - $type = 'sc_grand'; - $agenda = sc_Agenda_memo_full(0); - $evt = array(); - foreach (($args ? $args : array_keys($agenda)) as $k) { - if (is_array($agenda[$k])) - foreach($agenda[$k] as $d => $v) { - $evt[$d] = $evt[$d] ? (array_merge($evt[$d], $v)) : $v; - } - } - $la_date = mktime(0, 0, 0, mois($une_date), 1, annee($une_date)); - include_spip('inc/sc_agenda'); - return http_calendrier_init($la_date, $type, '', '', '', array('', $evt)); -} -function sc_generer_ligne_agenda($jour, $amj, $evts, $type, $agenda) { - //definissons le retour en un tableau - $aff = array(); - //s'il y a un/des evenement(s) - if ($evts) { - $nb_elmts= @count($evts); - //s'il y a plus d'un evenements - if ($nb_elmts>1){ - if ($agenda == 'mini') { - $row = sc_trouver_corr_pl($evts[0]['ID']); - $date_debut = $evts[0]['LIENJOUR']; - $id_rub = intval($row['id_secteur']); - $titre_rub = supprimer_numero(extraire_multi($row['titre'])); - $url = generer_url_public('agenda_calendrier', array('id_rubrique'=>$id_rub,'date_ev'=>$date_debut)); - $url_javascript = generer_url_public('agenda_calendrier_dyn', array('id_rubrique'=>$id_rub,'date_ev'=>$date_debut)); - $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>"; - } - foreach($evts as $key => $ev) { - if ($agenda == 'grand') { - if ($key == 0) { - $aff['ligne'] .= intval($jour); - $aff['ligne'] .= '<div class="odd">'; - $row = sc_trouver_corr_pl($ev['ID']); - $row2 = sc_trouver_corr_un($ev['ID']); - $aff['ligne'] .= '<strong>'.supprimer_numero(typo(extraire_multi($row['titre']))).'</strong> : '; - $url = generer_url_entite($row2['id_article'], 'article'); - if (supprimer_tags(typo($ev['SUMMARY'])) == supprimer_numero(typo(extraire_multi($row2['titre'])))) - $aff['ligne'] .= "<a href='".$url."'>".$ev['SUMMARY']."</a>"; - else - $aff['ligne'] .= "<a href='".$url."'>".supprimer_numero(typo(extraire_multi($row2['titre'])))." : ".$ev['SUMMARY']."</a>"; - $aff['ligne'] .= '</div>'; - } - else { - $aff['ligne'] .= '<div>'; - $row = sc_trouver_corr_pl($ev['ID']); - $row2 = sc_trouver_corr_un($ev['ID']); - $aff['ligne'] .= "<strong>".supprimer_numero(typo(extraire_multi($row['titre'])))."</strong> : "; - $url = generer_url_entite($row2['id_article'], 'article'); - if (supprimer_tags(typo($ev['SUMMARY'])) == supprimer_numero(extraire_multi(typo($row2['titre'])))) - $aff['ligne'] .= "<a href='".$url."'>".$ev['SUMMARY']."</a>"; - else - $aff['ligne'] .= "<a href='".$url."'>".supprimer_numero(typo(extraire_multi($row2['titre'])))." : ".$ev['SUMMARY']."</a>"; - $aff['ligne'] .= '</div>'; - } - } - } - $aff['class']= $type.' events'; - } - //s'il n'y a qu'un evenement - else{ - if ($agenda == 'grand') { - $aff['ligne'] .= intval($jour); - $aff['ligne'] .= '<div class="odd">'; - $row = sc_trouver_corr_pl($evts[0]['ID']); - $row2 = sc_trouver_corr_un($evts[0]['ID']); - $aff['ligne'] .= '<strong>'.supprimer_numero(typo(extraire_multi($row['titre']))).'</strong> : '; - $url = generer_url_entite($row2['id_article'], 'article'); - if (supprimer_tags(typo($evts[0]['SUMMARY'])) == supprimer_numero(typo(extraire_multi($row2['titre'])))) - $aff['ligne'] .= "<a href='".$url."'>".$evts[0]['SUMMARY']."</a>"; - else - $aff['ligne'] .= "<a href='".$url."'>".supprimer_numero(typo(extraire_multi($row2['titre'])))." : ".$evts[0]['SUMMARY']."</a>"; - $aff['ligne'] .= '</div>'; - } - else if ($agenda == 'mini') { - $row = sc_trouver_corr_un($evts[0]['ID']); - $url = generer_url_entite($row['id_article'], 'article'); - $info = sc_decoder_date($evts[0]['DTSTART'], $evts[0]['DTEND'], $evts[0]['HORAIRE']); - if (supprimer_tags(typo($evts[0]['SUMMARY'])) == supprimer_numero(typo(extraire_multi($row['titre'])))) - $title = supprimer_numero(typo(extraire_multi($row['titre'])))." - ".$info; - else - $title = supprimer_numero(typo(extraire_multi($row['titre'])))." : ".$evts[0]['SUMMARY']." - ".$info; - $aff['ligne'] = "<a href='".$url."' title='".supprimer_tags(typo($title))."'>".intval($jour)."</a>"; - } - $aff['class']= $type.' event'; - } - } - //s'il n'y a rien - else { - $aff['ligne'] = intval($jour); - $aff['class'] = $type; - } - return $aff; -} -function http_calendrier_sc_grand($annee, $mois, $jour, $echelle, $partie_cal, $script, $ancre, $evt) { - list($sansduree, $evenements, $premier_jour, $dernier_jour) = $evt; - - if ($sansduree) - foreach($sansduree as $d => $r) { - $evenements[$d] = !$evenements[$d] ? $r : - array_merge($evenements[$d], $r); - } - - if (!$premier_jour) $premier_jour = '01'; - if (!$dernier_jour) { - $dernier_jour = 31; - while (!(checkdate($mois,$dernier_jour,$annee))) $dernier_jour--; - } - - // affichage du debut de semaine hors periode - $ligne = ''; - $debut = date("w",mktime(1,1,1,$mois,$premier_jour,$annee)); - for ($i=$debut ? $debut : 7;$i>1;$i--) { - $mois_t_precedent = mktime(1,1,1,$mois-1,1,$annee); - $jour_mois_precedent = date('t', $mois_t_precedent)+2-$i; - $mois_precedent = date("m",$mois_t_precedent); - $annee_en_cours = date("Y",$nom); - $amj = date("Y",$mois_t_precedent) . $mois_precedent . $jour_mois_precedent; - $evts = $evenements[$amj]; - $aff = sc_generer_ligne_agenda($jour_mois_precedent, $amj, $evts, 'agendanotthismonth', 'grand'); - $ligne .= '<td valign="top" class="'.$aff['class'].'">'.$aff['ligne'].'</td>'; - } - //mois en cours - $total = ''; - for ($j=$premier_jour; $j<=$dernier_jour; $j++) { - $nom = mktime(1,1,1,$mois,$j,$annee); - $jour = date("d",$nom); - $jour_semaine = date("w",$nom); - $mois_en_cours = date("m",$nom); - $annee_en_cours = date("Y",$nom); - $amj = date("Y",$nom) . $mois_en_cours . $jour; - if ($jour_semaine==1 AND $ligne != '') { - $total .= "\n<tr>$ligne\n</tr>"; - $ligne = ''; - } - $evts = $evenements[$amj]; - $aff = sc_generer_ligne_agenda($jour, $amj, $evts, 'agendathismonth', 'grand'); - $ligne .= '<td valign="top" class="'.($amj == date("Ymd")?"agendathisday": $aff['class']).'">' . $aff['ligne'] . '</td>'; - } - $jour_mois_suivant=0; - // affichage de la fin de semaine hors periode - for($j=$jour_semaine ? $jour_semaine : 7; $j<7; $j++) { - $nom = mktime(1,1,1,$mois+1,$j,$annee); - $jour = date("d",$nom); - $jour_semaine = date("w",$nom); - $mois_suivant = date("m",$nom); - $annee_en_cours = date("Y",$nom); - $amj = date("Y",$nom) . $mois_suivant . '0'.$jour_mois_suivant++; - $evts = $evenements[$amj]; - $aff = sc_generer_ligne_agenda($jour_mois_suivant, $amj, $evts, 'agendanotthismonth', 'grand'); - $ligne .= '<td valign="top" class="'.$aff['class'].'">'.$aff['ligne'].'</td>'; - } - - return $total . ($ligne ? "\n<tr>$ligne\n</tr>" : ''); -} - - -function http_calendrier_sc_mini($annee, $mois, $jour, $echelle, $partie_cal, $script, $ancre, $evt) { - list($sansduree, $evenements, $premier_jour, $dernier_jour) = $evt; - - if ($sansduree) - foreach($sansduree as $d => $r) { - $evenements[$d] = !$evenements[$d] ? $r : - array_merge($evenements[$d], $r); - } - - if (!$premier_jour) $premier_jour = '01'; - if (!$dernier_jour) { - $dernier_jour = 31; - while (!(checkdate($mois,$dernier_jour,$annee))) $dernier_jour--; - } - - // affichage du debut de semaine hors periode - $ligne = ''; - $debut = date("w",mktime(1,1,1,$mois,$premier_jour,$annee)); - for ($i=$debut ? $debut : 7;$i>1;$i--) { - $mois_t_precedent = mktime(1,1,1,$mois-1,1,$annee); - $jour_mois_precedent = date('t', $mois_t_precedent)+2-$i; - $mois_precedent = date("m",$mois_t_precedent); - $annee_en_cours = date("Y",$nom); - $amj = date("Y",$mois_t_precedent) . $mois_precedent . $jour_mois_precedent; - $evts = $evenements[$amj]; - $aff = sc_generer_ligne_agenda($jour_mois_precedent, $amj, $evts, 'agendanotthismonth', 'mini'); - $ligne .= '<td class="'.$aff['class'].'">'.$aff['ligne'].'</td>'; - } - //mois en cours - $total = ''; - for ($j=$premier_jour; $j<=$dernier_jour; $j++) { - $nom = mktime(1,1,1,$mois,$j,$annee); - $jour = date("d",$nom); - $jour_semaine = date("w",$nom); - $mois_en_cours = date("m",$nom); - $annee_en_cours = date("Y",$nom); - $amj = date("Y",$nom) . $mois_en_cours . $jour; - - if ($jour_semaine==1 AND $ligne != '') { - $total .= "\n<tr>$ligne\n</tr>"; - $ligne = ''; - } - - $evts = $evenements[$amj]; - $aff = sc_generer_ligne_agenda($jour, $amj, $evts, 'agendathismonth', 'mini'); - $ligne .= '<td class="'.($amj == date("Ymd")?"agendathisday": $aff['class']).'">' . $aff['ligne'] . '</td>'; - } - $jour_mois_suivant=1; - // affichage de la fin de semaine hors periode - for($j=$jour_semaine ? $jour_semaine : 7; $j<7; $j++) { - $nom = mktime(1,1,1,$mois+1,$j,$annee); - $jour = date("d",$nom); - $jour_semaine = date("w",$nom); - $mois_suivant = date("m",$nom); - $annee_en_cours = date("Y",$nom); - $amj = date("Y",$nom) . $mois_suivant . '0'.$jour_mois_suivant; - $evts = $evenements[$amj]; - $aff = sc_generer_ligne_agenda($jour_mois_suivant++, $amj, $evts, 'agendanotthismonth', 'mini'); - $ligne .= '<td class="'.$aff['class'].'">'.$aff['ligne'].'</td>'; - } - - return $total . ($ligne ? "\n<tr>$ligne\n</tr>" : ''); -} -function sc_agenda_memo_full($date_deb=0, $date_fin=0 , $titre='', $descriptif='', $lieu='', $url='', $horaire='oui', $cal='') -{ - static $agenda = array(); - if (!$date_deb) { - $res = $agenda; - $agenda=array(); - return $res; - } - $url=str_replace("&","&",$url); - - $idatedeb = sc_date_ical($date_deb); - $idatefin = sc_date_ical($date_fin); - $vidatefin = sc_date_ical($date_fin); - $cal = trim($cal); // func_get_args (filtre alterner) rajoute \n !!!! - $startday1=explode(' ',$date_deb); - $startday1=$startday1['0'].' 00:00:00'; - $ts_startday1=strtotime($startday1); - $ts_date_fin=strtotime($date_fin); - $maxdays=365; - while (($ts_startday1<=$ts_date_fin)&&($maxdays-->0)) - { - $day=date('Y-m-d H:i:s',$ts_startday1); - $lienjour=date('Y-m-d',$ts_startday1); - $agenda[$cal][(date_anneemoisjour($day))][] = array( - 'CATEGORIES' => $cal, - 'DTSTART' => $idatedeb, - 'DTEND' => $vidatefin, - 'DESCRIPTION' => $descriptif, - 'SUMMARY' => supprimer_numero(typo(extraire_multi($titre))), - 'HORAIRE' => $horaire, - 'LOCATION' => $lieu, - 'ID' => $url, - 'LIENJOUR' => $lienjour); - $ts_startday1 += 26*3600; // le jour suivant : +26 h pour gerer les changements d'heure - $ts_startday1 = mktime(0, 0, 0, date("m",$ts_startday1), - date("d",$ts_startday1), date("Y",$ts_startday1)); // et remise a zero de l'heure - } - // toujours retourner vide pour qu'il ne se passe rien - return ""; -} - -function js2PhpTime($jsdate){ - if(preg_match('@(\d+)/(\d+)/(\d+)\s+(\d+):(\d+)@', $jsdate, $matches)==1){ - $ret = mktime($matches[4], $matches[5], 0, $matches[1], $matches[2], $matches[3]); - }else if(preg_match('@(\d+)/(\d+)/(\d+)@', $jsdate, $matches)==1){ - $ret = mktime(0, 0, 0, $matches[1], $matches[2], $matches[3]); - } - return $ret; -} - -function php2JsTime($phpDate){ - return date("m/d/Y H:i", $phpDate); -} - -function php2MySqlTime($phpDate){ - return date("Y-m-d H:i:s", $phpDate); -} - -function mySql2PhpTime($sqlDate){ - $arr = date_parse($sqlDate); - return mktime($arr["hour"],$arr["minute"],$arr["second"],$arr["month"],$arr["day"],$arr["year"]); -} - -function sc_wdcalendar_json($day, $type) { - $phpTime = js2PhpTime($day); - - switch($type){ - case "month": - $st = mktime(0, 0, 0, date("m", $phpTime), 1, date("Y", $phpTime)); - $et = mktime(0, 0, -1, date("m", $phpTime)+1, 1, date("Y", $phpTime)); - break; - case "week": - //suppose first day of a week is monday - $monday = date("d", $phpTime) - date('N', $phpTime) + 1; - //echo date('N', $phpTime); - $st = mktime(0,0,0,date("m", $phpTime), $monday, date("Y", $phpTime)); - $et = mktime(0,0,-1,date("m", $phpTime), $monday+7, date("Y", $phpTime)); - break; - case "day": - $st = mktime(0, 0, 0, date("m", $phpTime), date("d", $phpTime), date("Y", $phpTime)); - $et = mktime(0, 0, -1, date("m", $phpTime), date("d", $phpTime)+1, date("Y", $phpTime)); - break; - } - - $ret = array(); - $ret['events'] = array(); - $ret["issort"] =true; - $ret["start"] = php2JsTime($st); - $ret["end"] = php2JsTime($et); - $ret['error'] = null; - - $where = array( - "date_debut between '".php2MySqlTime($st)."' and '".php2MySqlTime($et)."'", - ); - if($resultats = sql_select('*', "spip_evenements", $where)) { - while($row = sql_fetch($resultats)) { - - $date_debut = intval(date('Ymd',mySql2PhpTime($row['date_debut']))); - $date_fin = intval(date('Ymd',mySql2PhpTime($row['date_fin']))); - - if($date_fin > $date_debut OR $row['horaire'] == 'non') { - $AllTheDay = 1; - } else $AllTheDay = 0; - - $colorEvent = intval($row['id_evenement'])%13; - - $ret['events'][] = array( - intval($row['id_evenement']), - unicode2charset(html2unicode(supprimer_tags(supprimer_numero(typo(extraire_multi($row['titre'])))))), - php2JsTime(mySql2PhpTime($row['date_debut'])), - php2JsTime(mySql2PhpTime($row['date_fin'])), - 0, - $AllTheDay, //more than one day event - 0,//Recurring event, - $colorEvent, //color - 0,//editable - unicode2charset(html2unicode(supprimer_tags(supprimer_numero(typo(extraire_multi($row['lieu'])))))), //lieu - urlencode_1738(generer_url_entite(intval($row['id_article']), 'article')) //url article spip //$attends - ); - } - } - - // return print_r($ret,1); - - return json_encode($ret); -} - -function balise_ARTICLE_URL_dist($p) { - if (!is_array($p->param)) - $p->param=array(); - - // Produire le premier argument {article_url} - $texte = new Texte; - $texte->type='texte'; - $texte->texte='article_url'; - $param = array(0=>NULL, 1=>array(0=>$texte)); - array_unshift($p->param, $param); - - // Transformer les filtres en arguments - for ($i=1; $i<count($p->param); $i++) { - if ($p->param[$i][0]) { - if (!strstr($p->param[$i][0], '=')) - break;# on a rencontre un vrai filtre, c'est fini - $texte = new Texte; - $texte->type='texte'; - $texte->texte=$p->param[$i][0]; - $param = array(0=>$texte); - $p->param[$i][1] = $param; - $p->param[$i][0] = NULL; - } - } - - // Appeler la balise #MODELE{article_url}{arguments} - if (!function_exists($f = 'balise_modele')) - $f = 'balise_modele_dist'; - return $f($p); -} - - -@define('_MOT_MASQUER', 'Archives'); - -// ajoute le critere {archive} et {!archive} -// {archive} n'affiche que les articles ayant le mot clef _MOT_MASQUER ou dont la rubrique a ce mot clef -// {!archive} n'affiche que les articles n'ayant pas ce mot clef et dont la rubrique ne l'a pas non plus -// /!\ Pas de notion d'héritage sur une branche /!\ -function critere_archive_dist($idb, &$boucles, $crit) { - $boucle = &$boucles[$idb]; - $not = $crit->not?"NOT":""; - - if ($boucle->type_requete == 'articles') { - $art = $boucle->id_table . '.id_article'; - $select_article = sql_get_select($art, - "spip_articles AS `articlesin` - INNER JOIN spip_mots_liens AS mots_liens_articles - ON (articlesin.id_article = mots_liens_articles.id_objet AND mots_liens_articles.objet=\"article\") - INNER JOIN spip_mots AS mots_articles - ON (mots_liens_articles.id_mot=mots_articles.id_mot)", - array("articlesin.id_article = $art","mots_articles.titre=\"Archives\"")); - $select_article_rubrique = sql_get_select($art, - "spip_articles AS `articlesin` - INNER JOIN spip_rubriques AS rubriques - ON (articlesin.id_rubrique = rubriques.id_rubrique) - INNER JOIN spip_mots_liens AS mots_liens_rubriques - ON (rubriques.id_rubrique = mots_liens_rubriques.id_objet AND mots_liens_rubriques.objet=\"rubrique\") - INNER JOIN spip_mots AS mots_articles ON - (mots_liens_rubriques.id_mot=mots_articles.id_mot)", - array("articlesin.id_article = $art","mots_articles.titre=\"Archives\"")); - - $where = "'$not (($art IN ($select_article)) OR ($art IN ($select_article_rubrique)))'"; - $boucle->where[]= $where; - } -} - -/** Plugin Dictionnaires **/ -/* - * Fonction de remplacement par défaut pour les termes trouvés dans les textes - */ -function dictionnaires_remplacer_defaut($mot, $definition){ - return $mot - .'<sup><a href="' - .($definition['url']?$definition['url']:generer_url_public('sigles', 'id_dictionnaire='.$definition['id_dictionnaire'].'#sigle'.$definition['id_definition'])) - .'" title="'._T('definition:titre_definition').': '.couper(trim(attribut_html(supprimer_tags(typo($definition['texte'])))),80).'">' - .'?' - .'</a></sup>'; -} - -/* - * Fonction de remplacement par défaut pour les abbréviations trouvées dans les textes - * Ceci est un EXEMPLE montrant qu'on peut mettre un truc différent pour un type de définition précis - * Mais ce code est une MAUVAISE PRATIQUE en accessibilité - * (car seuls les gens avec des yeux valides et un pointeur de souris ont accès à l'information) - */ -function dictionnaires_remplacer_abbr($mot, $definition){ - return '<abbr title="'.trim(attribut_html(supprimer_tags(typo($definition['texte'])))).'">'.$mot.'</abbr>'; - /* Pas de texte rajouté après : pose problème sur |couper et |attribut_html - .'<sup><a href="' - .($definition['url']?$definition['url']:generer_url_public('sigles', 'id_dictionnaire='.$definition['id_dictionnaire'].'&type=abbr#sigle'.$definition['id_definition'])) - .'" title="'._T('definition:titre_definition').': '.couper(trim(attribut_html(supprimer_tags(typo($definition['texte'])))),80).'">' - .'?' - .'</a></sup>'; - */ -} - -if (!function_exists('rainette_afficher_icone')) { - function rainette_afficher_icone($meteo, $taille='petit', $chemin='', $extension='png'){ - return rainette_icone_meteo($meteo, $taille='petit', $chemin='', $extension='png'); - } -} - -function sc_rgb($couleurs) { - include_spip('inc/filtres_images_lib_mini'); // par precaution - $couleurs = _couleur_hex_to_dec($couleurs); - return $couleurs["red"] .", ". $couleurs["green"] .", ". $couleurs["blue"]; -} - -function mini_html($texte) { - $texte = preg_replace(",\n[\t\ ]*,", "\n", $texte); - $texte = preg_replace(",\n+,", "\n", $texte); - return $texte; -} - -// Permet de recadrer une image en la centrant sur son focus (plugin Centre Image) -function focusimage($img, $largeur, $hauteur, $position = 'center') { - if ((largeur($img) <= $largeur) AND (hauteur($img) <= $hauteur)) { - $img = image_recadre($img, "$largeur:$hauteur", '+', $position, 'transparent'); - $img = image_recadre($img, $largeur, $hauteur, $position, 'transparent'); - } else { - $img = image_recadre($img, "$largeur:$hauteur", '-', 'focus', 'transparent'); - $img = image_reduire($img, $largeur, $hauteur, $position, 'transparent'); - } - return $img; -} +<?php +if (!defined('_ECRIRE_INC_VERSION')) return; +/* + * +----------------------------------+ + * Nom du Filtre : Sommaire de l'article + * +----------------------------------+ + * Date : dimanche 9 février 2003 + * Auteur : Noplay (noplay@altern.org) + * +-------------------------------------+ + * Fonctions de ce filtre : + * Cette modification permet d'afficher le sommaire de son article + * généré dynamiquement à partir du texte de l'article. Vous pouvez naviguer + * dans l'article en cliquant sur les titres du sommaire. + * + * Tous ce qui ce trouve entre {{{ et }}} est considéré comme un titre à ajouter au sommaire de l'article. + * +-------------------------------------+ + * + * Pour toute suggestion, remarque, proposition d'ajout + * reportez-vous au forum de l'article : + * http://contrib.spip.net/spip.php?article76 +*/ + +function sc_sommaire_article($texte,$istxt=0) +{ + // Conversion des intertitres d'enluminures type {ß{titre}ß} + // ou ß est un nombre en intertitres avec des étoiles type {{{* (avec ß étoiles) + // {1{ sera converti en {{{* ; {2{ sera converti en {{{** ; etc. + // Obsolète ! + /* + $texte=preg_replace_callback ("/(\{(\d)\{)(.*?)(\}\\2\})/", + create_function ( + '$matches', + 'return "{{{".str_repeat("*",$matches[2]).$matches[3]."}}}";' + ), + $texte); + */ + + preg_match_all("|(?!<code>)\{\{\{([*]*?)(?!<\/code>)(.*)(?!<code>)(\}\}\})(?!<\/code>)|U", $texte, $regs); + + + $nb=1; + $lastniveau=0; + if ($istxt==0) { + $texte=''; + for($j=0;$j<count($regs[2]);$j++) { + $niveau=strlen($regs[1][$j]); + if ($niveau===0) {$niveau=1;} + if ($niveau==$lastniveau) { + $texte.="</li>\n"; + } + if ($niveau>$lastniveau) { + $texte.="<ul>"; + $lastniveau=$niveau; + } + if ($niveau<$lastniveau) { + $texte.="</li>\n"; + for($ulli=$niveau;$ulli<$lastniveau;$ulli++) { + $texte.="</ul></li>\n"; + } + $lastniveau=$niveau; + } + + $texte.="<li><a href=\"#sommaire_".$nb."\">".$regs[2][$j]."</a>"; + $nb++; + } + for($j=0;$j<$niveau;$j++) { + $texte.="</li></ul>\n"; + } + + } else { + $texte=""; + for($j=0;$j<count($regs[2]);$j++) + { + $niveau=strlen($regs[1][$j]); + if ($niveau===0) {$niveau=1;} + if ($niveau===1) { $puce="\n- ";} + if ($niveau===2) { $puce=" · ";} + if ($niveau===3) { $puce=" × ";} + if ($niveau===4) { $puce=" ° ";} + if ($niveau===5) { $puce=" ¤ ";} + $texte.=$puce.$regs[2][$j]."\n"; + } + + } + return $texte; +} + +function sc_sommaire_ancre($texte) { + + $image = find_in_path("images/spip_out.gif"); + $largeur = largeur($image); + $hauteur = hauteur($image); + + $retoursommaire = "<a href='#sommaire' title='"._T('soyezcreateurs:retoursommaire')."' class='retoursommaire'><img src='$image' width='$largeur' height='$hauteur' alt='"._T('soyezcreateurs:retoursommaire')."' /></a>"; + + $texte = preg_replace("|(<h[23456])[^>]*>(.*)(<\/h[23456]>)|U","$retoursommaire$1 id=\"sommaire_#NB_TITRE_DE_MON_ARTICLE#\">$2$3", $texte); + + $array = explode("#NB_TITRE_DE_MON_ARTICLE#" , $texte); + $res =count($array); + $i =1; + $texte=$array[0]; + while($i<$res) + { + $texte.=$i.$array[$i]; + $i++; + } + if ($i>1) { + $texte.="<p class='retoursommaire'>".$retoursommaire."</p>"; + } + return $texte; +} +//Fin filtre sommaire de l'article + +function sc_nettoyer_marqueur($texte) { + include_spip('inc/charsets'); + $texte=translitteration($texte); + // Enlève la conversion caractères spéciaux HTML + $trans_tbl = get_html_translation_table (HTML_ENTITIES); + $trans_tbl = array_flip ($trans_tbl); + $texte=strtr ($texte, $trans_tbl); + $accents = + /* A */ chr(192).chr(193).chr(194).chr(195).chr(196).chr(197). + /* a */ chr(224).chr(225).chr(226).chr(227).chr(228).chr(229). + /* O */ chr(210).chr(211).chr(212).chr(213).chr(214).chr(216). + /* o */ chr(242).chr(243).chr(244).chr(245).chr(246).chr(248). + /* E */ chr(200).chr(201).chr(202).chr(203). + /* e */ chr(232).chr(233).chr(234).chr(235). + /* Cc */ chr(199).chr(231). + /* I */ chr(204).chr(205).chr(206).chr(207). + /* i */ chr(236).chr(237).chr(238).chr(239). + /* U */ chr(217).chr(218).chr(219).chr(220). + /* u */ chr(249).chr(250).chr(251).chr(252). + /* yNn */ chr(255).chr(209).chr(241); + $texte = preg_replace("#<[^<]*>#", "", $texte); + $texte = preg_replace("#[^A-Za-z0-9]#", "_", strtr($texte,$accents,"AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn")); + $texte = preg_replace("#Â #", "_", $texte); + $texte = preg_replace("#\s#", "_", $texte); + $texte = preg_replace("#_+#", "_", $texte); + return strtolower($texte); +} + +/* à appliquer au #TEXTE de forum */ +function sc_anti_glouton($texte) { + $regexp = '|<a href=["\x27]([^"\x27]+)["\x27][^>]*>([^<]+)</a>|i'; + $replace = "\${2} [\${1}]"; + $texte = preg_replace($regexp, $replace, $texte); + return $texte; +} + +function sc_replace($texte,$search,$replace) { + return trim(str_replace($search,$replace,$texte)); +} + +function sc_supprimer_slogan($texte) { + $regexp = '/<(sub|sup)[^>]*>([^<]*)<\/\1>/i'; + $replace = ""; + $texte = trim(preg_replace($regexp, $replace, $texte)); + return $texte; +} + +function sc_NewLine2str($texte) { + return str_replace('"','\"',str_replace("\r",'',str_replace("\n",'\n',$texte))); +} + +function sc_DateAdd($d=null, $v, $f="Y-m-d"){ + return date($f,strtotime($v." days",strtotime($d))); +} + +function sc_annee_scolaire($ladate) { + if ($ladate=='') return ''; + $annee = annee($ladate); + $mois = mois($ladate); + if ($mois <= 8) $annee -= 1; + return $annee; +} + +/* 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) */ +function generer_url_refsite($id, $args, $ancre) { + return array('site', $id); +} + +/* Transforme un texte en lien raccourcis SPIP et calcule le résultat */ +function sc_texte2urlspip($url) { + return expanser_liens('[->'.$url.']'); +} + +function sc_trouver_corr_un ($id_article) { + $row = sql_fetsel('spip_articles.id_article, spip_articles.titre', + 'spip_articles', + "id_article=$id_article"); + return $row; +} +function sc_trouver_corr_pl ($id_article) { + $row = sql_fetsel( + 'spip_articles.id_article, spip_rubriques.titre, spip_rubriques.id_rubrique, spip_rubriques.id_secteur', + 'spip_articles LEFT JOIN spip_rubriques ON spip_rubriques.id_rubrique = spip_articles.id_rubrique', + "id_article=$id_article"); + return $row; +} +// Retrouver le fonctionnement d'avant http://core.spip.org/projects/spip/repository/revisions/23315 +function sc_date_ical($date, $addminutes = 0) { + list($heures, $minutes, $secondes) = recup_heure($date); + list($annee, $mois, $jour) = recup_date($date); + return date("Ymd\THis", mktime($heures, $minutes + $addminutes, $secondes, $mois, $jour, $annee)); +} +function sc_decoder_date ($date_d, $date_e, $horaire='oui', $mode=false, $court=false) { + if($mode == 'skel') { + $date_d = sc_date_ical($date_d); + $date_e = sc_date_ical($date_e); + } + $debut = array(); + $debut['annee'] = substr($date_d, 0, 4); + $debut['mois'] = substr($date_d, 4, 2); + $debut['jour'] = substr($date_d, 6, 2); + $debut['heure'] = substr($date_d, 9, 2); + $debut['minutes'] = substr($date_d, 11, 2); + $debut['secondes'] = substr($date_d, 13, 2); + $debut['mois_fr'] = sc_get_mois($debut['mois']); + $debut['jour_fr'] = (sc_get_jour(mktime($debut['heure'], $debut['minutes'], $debut['secondes'], $debut['mois'], $debut['jour'], $debut['annee']))); + $fin = array(); + $fin['annee'] = substr($date_e, 0, 4); + $fin['mois'] = substr($date_e, 4, 2); + $fin['jour'] = substr($date_e, 6, 2); + $fin['heure'] = substr($date_e, 9, 2); + $fin['minutes'] = substr($date_e, 11, 2); + $fin['secondes'] = substr($date_e, 13, 2); + $fin['mois_fr'] = sc_get_mois($fin['mois']); + $fin['jour_fr'] = sc_get_jour(mktime($fin['heure'], $fin['minutes'], $fin['secondes'], $fin['mois'], $fin['jour'], $fin['annee'])); + $get_same = sc_same_day($debut, $fin); + if ($get_same) { + if ($court == 'oui') { + $resultat = ucfirst($debut['jour_fr']).' '.$debut['jour']; + } + else { + if (intval($debut['jour']) < 10) + $debut['jour'] = substr($debut['jour'], 1, 1); + if ($horaire=='oui') { + $comd = $debut['heure'].$debut['minutes']; + $comf = $fin['heure'].$fin['minutes']; + if ($comd == $comf) { + $resultat = _T('soyezcreateurs:agenda_sd_h', array( + 'djour_l' => ($debut['jour_fr']), + 'djour' => $debut['jour'], + 'dmois_l' => $debut['mois_fr'], + 'dannee' => $debut['annee'], + 'dheure' => $debut['heure'], + 'dminutes' => $debut['minutes'], + ) + ); + } + else { + $resultat = _T('soyezcreateurs:agenda_sd', array( + 'djour_l' => $debut['jour_fr'], + 'djour' => $debut['jour'], + 'dmois_l' => $debut['mois_fr'], + 'dannee' => $debut['annee'], + 'dheure' => $debut['heure'], + 'dminutes' => $debut['minutes'], + 'fheure' => $fin['heure'], + 'fminutes' => $fin['minutes'] + ) + ); + } + } else { + $resultat = _T('soyezcreateurs:agenda_sd_notime', array( + 'djour_l' => ($debut['jour_fr']), + 'djour' => $debut['jour'], + 'dmois_l' => $debut['mois_fr'], + 'dannee' => $debut['annee'] + ) + ); + } + } + } + else if (!$get_same) { + if ($court == 'oui') { + $resultat = ucfirst($debut['jour_fr']).' '.$debut['jour']; + $resultat .= ' – '.$fin['jour_fr'].' '.$fin['jour']; + if ($fin['annee'] != $debut['annee']) { + $resultat .= ' '.$fin['mois_fr'].' '.$fin['annee'].' '; + } else if ($fin['mois'] != $debut['mois']) { + $resultat .= ' '.$fin['mois_fr'].' '; + } else { + $resultat .= ' '; + } + } + else { + if (intval($debut['jour']) < 10) + $debut['jour'] = substr($debut['jour'], 1, 1); + if (intval($fin['jour']) < 10) + $fin['jour'] = substr($fin['jour'], 1, 1); + if ($horaire=='oui') { + $resultat = _T('soyezcreateurs:agenda_fsd', array( + 'djour_l' => ($debut['jour_fr']), + 'djour' => $debut['jour'], + 'dmois_l' => $debut['mois_fr'], + 'dannee' => $debut['annee'], + 'dheure' => $debut['heure'], + 'dminutes' => $debut['minutes'], + 'fjour_l' => $fin['jour_fr'], + 'fjour' => $fin['jour'], + 'fmois_l' => $fin['mois_fr'], + 'fannee' => $fin['annee'], + 'fheure' => $fin['heure'], + 'fminutes' => $fin['minutes'] + ) + ); + } else { + $resultat = _T('soyezcreateurs:agenda_fsd_notime', array( + 'djour_l' => ($debut['jour_fr']), + 'djour' => $debut['jour'], + 'dmois_l' => $debut['mois_fr'], + 'dannee' => $debut['annee'], + 'fjour_l' => $fin['jour_fr'], + 'fjour' => $fin['jour'], + 'fmois_l' => $fin['mois_fr'], + 'fannee' => $fin['annee'] + ) + ); + } + } + } + return typo($resultat); +} +function sc_same_day ($debut, $fin) { + $start = mktime(0, 0, 0, $debut['mois'], $debut['jour'], $debut['annee']); + $end = mktime(0, 0, 0, $fin['mois'], $fin['jour'], $fin['annee']); + if ($start == $end) + return true; + else if ($start != $end) + return false; +} +function sc_get_mois ($nb) { + $mois["01"] = _T('date_mois_1'); + $mois["02"] = _T('date_mois_2'); + $mois["03"] = _T('date_mois_3'); + $mois["04"] = _T('date_mois_4'); + $mois["05"] = _T('date_mois_5'); + $mois["06"] = _T('date_mois_6'); + $mois["07"] = _T('date_mois_7'); + $mois["08"] = _T('date_mois_8'); + $mois["09"] = _T('date_mois_9'); + $mois["10"] = _T('date_mois_10'); + $mois["11"] = _T('date_mois_11'); + $mois["12"] = _T('date_mois_12'); + return $mois[$nb]; +} +function sc_get_jour ($nb) { + $nb = intval($nb); + $j = date("w", $nb); + $jour["0"] = _T('date_jour_1'); + $jour["1"] = _T('date_jour_2'); + $jour["2"] = _T('date_jour_3'); + $jour["3"] = _T('date_jour_4'); + $jour["4"] = _T('date_jour_5'); + $jour["5"] = _T('date_jour_6'); + $jour["6"] = _T('date_jour_7'); + return $jour[$j]; +} +function sc_agenda_mini($i) { + $args = func_get_args(); + $une_date = array_shift($args); // une date comme balise + $sinon = array_shift($args); + if (!$une_date) return $sinon; + $type = 'sc_mini'; + $agenda = sc_Agenda_memo_full(0); + $evt = array(); + foreach (($args ? $args : array_keys($agenda)) as $k) { + if (is_array($agenda[$k])) + foreach($agenda[$k] as $d => $v) { + $evt[$d] = $evt[$d] ? (array_merge($evt[$d], $v)) : $v; + } + } + $la_date = mktime(0, 0, 0, mois($une_date), 1, annee($une_date)); + include_spip('inc/sc_agenda'); + return http_calendrier_init($la_date, $type, '', '', '', array('', $evt)); +} +function sc_agenda_grand($i) { + $args = func_get_args(); + $une_date = array_shift($args); // une date comme balise + $sinon = array_shift($args); + if (!$une_date) return $sinon; + $type = 'sc_grand'; + $agenda = sc_Agenda_memo_full(0); + $evt = array(); + foreach (($args ? $args : array_keys($agenda)) as $k) { + if (is_array($agenda[$k])) + foreach($agenda[$k] as $d => $v) { + $evt[$d] = $evt[$d] ? (array_merge($evt[$d], $v)) : $v; + } + } + $la_date = mktime(0, 0, 0, mois($une_date), 1, annee($une_date)); + include_spip('inc/sc_agenda'); + return http_calendrier_init($la_date, $type, '', '', '', array('', $evt)); +} +function sc_generer_ligne_agenda($jour, $amj, $evts, $type, $agenda) { + //definissons le retour en un tableau + $aff = array(); + //s'il y a un/des evenement(s) + if ($evts) { + $nb_elmts= @count($evts); + //s'il y a plus d'un evenements + if ($nb_elmts>1){ + if ($agenda == 'mini') { + $row = sc_trouver_corr_pl($evts[0]['ID']); + $date_debut = $evts[0]['LIENJOUR']; + $id_rub = intval($row['id_secteur']); + $titre_rub = supprimer_numero(extraire_multi($row['titre'])); + $url = generer_url_public('agenda_calendrier', array('id_rubrique'=>$id_rub,'date_ev'=>$date_debut)); + $url_javascript = generer_url_public('agenda_calendrier_dyn', array('id_rubrique'=>$id_rub,'date_ev'=>$date_debut)); + $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>"; + } + foreach($evts as $key => $ev) { + if ($agenda == 'grand') { + if ($key == 0) { + $aff['ligne'] .= intval($jour); + $aff['ligne'] .= '<div class="odd">'; + $row = sc_trouver_corr_pl($ev['ID']); + $row2 = sc_trouver_corr_un($ev['ID']); + $aff['ligne'] .= '<strong>'.supprimer_numero(typo(extraire_multi($row['titre']))).'</strong> : '; + $url = generer_url_entite($row2['id_article'], 'article'); + if (supprimer_tags(typo($ev['SUMMARY'])) == supprimer_numero(typo(extraire_multi($row2['titre'])))) + $aff['ligne'] .= "<a href='".$url."'>".$ev['SUMMARY']."</a>"; + else + $aff['ligne'] .= "<a href='".$url."'>".supprimer_numero(typo(extraire_multi($row2['titre'])))." : ".$ev['SUMMARY']."</a>"; + $aff['ligne'] .= '</div>'; + } + else { + $aff['ligne'] .= '<div>'; + $row = sc_trouver_corr_pl($ev['ID']); + $row2 = sc_trouver_corr_un($ev['ID']); + $aff['ligne'] .= "<strong>".supprimer_numero(typo(extraire_multi($row['titre'])))."</strong> : "; + $url = generer_url_entite($row2['id_article'], 'article'); + if (supprimer_tags(typo($ev['SUMMARY'])) == supprimer_numero(extraire_multi(typo($row2['titre'])))) + $aff['ligne'] .= "<a href='".$url."'>".$ev['SUMMARY']."</a>"; + else + $aff['ligne'] .= "<a href='".$url."'>".supprimer_numero(typo(extraire_multi($row2['titre'])))." : ".$ev['SUMMARY']."</a>"; + $aff['ligne'] .= '</div>'; + } + } + } + $aff['class']= $type.' events'; + } + //s'il n'y a qu'un evenement + else{ + if ($agenda == 'grand') { + $aff['ligne'] .= intval($jour); + $aff['ligne'] .= '<div class="odd">'; + $row = sc_trouver_corr_pl($evts[0]['ID']); + $row2 = sc_trouver_corr_un($evts[0]['ID']); + $aff['ligne'] .= '<strong>'.supprimer_numero(typo(extraire_multi($row['titre']))).'</strong> : '; + $url = generer_url_entite($row2['id_article'], 'article'); + if (supprimer_tags(typo($evts[0]['SUMMARY'])) == supprimer_numero(typo(extraire_multi($row2['titre'])))) + $aff['ligne'] .= "<a href='".$url."'>".$evts[0]['SUMMARY']."</a>"; + else + $aff['ligne'] .= "<a href='".$url."'>".supprimer_numero(typo(extraire_multi($row2['titre'])))." : ".$evts[0]['SUMMARY']."</a>"; + $aff['ligne'] .= '</div>'; + } + else if ($agenda == 'mini') { + $row = sc_trouver_corr_un($evts[0]['ID']); + $url = generer_url_entite($row['id_article'], 'article'); + $info = sc_decoder_date($evts[0]['DTSTART'], $evts[0]['DTEND'], $evts[0]['HORAIRE']); + if (supprimer_tags(typo($evts[0]['SUMMARY'])) == supprimer_numero(typo(extraire_multi($row['titre'])))) + $title = supprimer_numero(typo(extraire_multi($row['titre'])))." - ".$info; + else + $title = supprimer_numero(typo(extraire_multi($row['titre'])))." : ".$evts[0]['SUMMARY']." - ".$info; + $aff['ligne'] = "<a href='".$url."' title='".supprimer_tags(typo($title))."'>".intval($jour)."</a>"; + } + $aff['class']= $type.' event'; + } + } + //s'il n'y a rien + else { + $aff['ligne'] = intval($jour); + $aff['class'] = $type; + } + return $aff; +} +function http_calendrier_sc_grand($annee, $mois, $jour, $echelle, $partie_cal, $script, $ancre, $evt) { + list($sansduree, $evenements, $premier_jour, $dernier_jour) = $evt; + + if ($sansduree) + foreach($sansduree as $d => $r) { + $evenements[$d] = !$evenements[$d] ? $r : + array_merge($evenements[$d], $r); + } + + if (!$premier_jour) $premier_jour = '01'; + if (!$dernier_jour) { + $dernier_jour = 31; + while (!(checkdate($mois,$dernier_jour,$annee))) $dernier_jour--; + } + + // affichage du debut de semaine hors periode + $ligne = ''; + $debut = date("w",mktime(1,1,1,$mois,$premier_jour,$annee)); + for ($i=$debut ? $debut : 7;$i>1;$i--) { + $mois_t_precedent = mktime(1,1,1,$mois-1,1,$annee); + $jour_mois_precedent = date('t', $mois_t_precedent)+2-$i; + $mois_precedent = date("m",$mois_t_precedent); + $annee_en_cours = date("Y",$nom); + $amj = date("Y",$mois_t_precedent) . $mois_precedent . $jour_mois_precedent; + $evts = $evenements[$amj]; + $aff = sc_generer_ligne_agenda($jour_mois_precedent, $amj, $evts, 'agendanotthismonth', 'grand'); + $ligne .= '<td valign="top" class="'.$aff['class'].'">'.$aff['ligne'].'</td>'; + } + //mois en cours + $total = ''; + for ($j=$premier_jour; $j<=$dernier_jour; $j++) { + $nom = mktime(1,1,1,$mois,$j,$annee); + $jour = date("d",$nom); + $jour_semaine = date("w",$nom); + $mois_en_cours = date("m",$nom); + $annee_en_cours = date("Y",$nom); + $amj = date("Y",$nom) . $mois_en_cours . $jour; + if ($jour_semaine==1 AND $ligne != '') { + $total .= "\n<tr>$ligne\n</tr>"; + $ligne = ''; + } + $evts = $evenements[$amj]; + $aff = sc_generer_ligne_agenda($jour, $amj, $evts, 'agendathismonth', 'grand'); + $ligne .= '<td valign="top" class="'.($amj == date("Ymd")?"agendathisday": $aff['class']).'">' . $aff['ligne'] . '</td>'; + } + $jour_mois_suivant=0; + // affichage de la fin de semaine hors periode + for($j=$jour_semaine ? $jour_semaine : 7; $j<7; $j++) { + $nom = mktime(1,1,1,$mois+1,$j,$annee); + $jour = date("d",$nom); + $jour_semaine = date("w",$nom); + $mois_suivant = date("m",$nom); + $annee_en_cours = date("Y",$nom); + $amj = date("Y",$nom) . $mois_suivant . '0'.$jour_mois_suivant++; + $evts = $evenements[$amj]; + $aff = sc_generer_ligne_agenda($jour_mois_suivant, $amj, $evts, 'agendanotthismonth', 'grand'); + $ligne .= '<td valign="top" class="'.$aff['class'].'">'.$aff['ligne'].'</td>'; + } + + return $total . ($ligne ? "\n<tr>$ligne\n</tr>" : ''); +} + + +function http_calendrier_sc_mini($annee, $mois, $jour, $echelle, $partie_cal, $script, $ancre, $evt) { + list($sansduree, $evenements, $premier_jour, $dernier_jour) = $evt; + + if ($sansduree) + foreach($sansduree as $d => $r) { + $evenements[$d] = !$evenements[$d] ? $r : + array_merge($evenements[$d], $r); + } + + if (!$premier_jour) $premier_jour = '01'; + if (!$dernier_jour) { + $dernier_jour = 31; + while (!(checkdate($mois,$dernier_jour,$annee))) $dernier_jour--; + } + + // affichage du debut de semaine hors periode + $ligne = ''; + $debut = date("w",mktime(1,1,1,$mois,$premier_jour,$annee)); + for ($i=$debut ? $debut : 7;$i>1;$i--) { + $mois_t_precedent = mktime(1,1,1,$mois-1,1,$annee); + $jour_mois_precedent = date('t', $mois_t_precedent)+2-$i; + $mois_precedent = date("m",$mois_t_precedent); + $annee_en_cours = date("Y",$nom); + $amj = date("Y",$mois_t_precedent) . $mois_precedent . $jour_mois_precedent; + $evts = $evenements[$amj]; + $aff = sc_generer_ligne_agenda($jour_mois_precedent, $amj, $evts, 'agendanotthismonth', 'mini'); + $ligne .= '<td class="'.$aff['class'].'">'.$aff['ligne'].'</td>'; + } + //mois en cours + $total = ''; + for ($j=$premier_jour; $j<=$dernier_jour; $j++) { + $nom = mktime(1,1,1,$mois,$j,$annee); + $jour = date("d",$nom); + $jour_semaine = date("w",$nom); + $mois_en_cours = date("m",$nom); + $annee_en_cours = date("Y",$nom); + $amj = date("Y",$nom) . $mois_en_cours . $jour; + + if ($jour_semaine==1 AND $ligne != '') { + $total .= "\n<tr>$ligne\n</tr>"; + $ligne = ''; + } + + $evts = $evenements[$amj]; + $aff = sc_generer_ligne_agenda($jour, $amj, $evts, 'agendathismonth', 'mini'); + $ligne .= '<td class="'.($amj == date("Ymd")?"agendathisday": $aff['class']).'">' . $aff['ligne'] . '</td>'; + } + $jour_mois_suivant=1; + // affichage de la fin de semaine hors periode + for($j=$jour_semaine ? $jour_semaine : 7; $j<7; $j++) { + $nom = mktime(1,1,1,$mois+1,$j,$annee); + $jour = date("d",$nom); + $jour_semaine = date("w",$nom); + $mois_suivant = date("m",$nom); + $annee_en_cours = date("Y",$nom); + $amj = date("Y",$nom) . $mois_suivant . '0'.$jour_mois_suivant; + $evts = $evenements[$amj]; + $aff = sc_generer_ligne_agenda($jour_mois_suivant++, $amj, $evts, 'agendanotthismonth', 'mini'); + $ligne .= '<td class="'.$aff['class'].'">'.$aff['ligne'].'</td>'; + } + + return $total . ($ligne ? "\n<tr>$ligne\n</tr>" : ''); +} +function sc_agenda_memo_full($date_deb=0, $date_fin=0 , $titre='', $descriptif='', $lieu='', $url='', $horaire='oui', $cal='') +{ + static $agenda = array(); + if (!$date_deb) { + $res = $agenda; + $agenda=array(); + return $res; + } + $url=str_replace("&","&",$url); + + $idatedeb = sc_date_ical($date_deb); + $idatefin = sc_date_ical($date_fin); + $vidatefin = sc_date_ical($date_fin); + $cal = trim($cal); // func_get_args (filtre alterner) rajoute \n !!!! + $startday1=explode(' ',$date_deb); + $startday1=$startday1['0'].' 00:00:00'; + $ts_startday1=strtotime($startday1); + $ts_date_fin=strtotime($date_fin); + $maxdays=365; + while (($ts_startday1<=$ts_date_fin)&&($maxdays-->0)) + { + $day=date('Y-m-d H:i:s',$ts_startday1); + $lienjour=date('Y-m-d',$ts_startday1); + $agenda[$cal][(date_anneemoisjour($day))][] = array( + 'CATEGORIES' => $cal, + 'DTSTART' => $idatedeb, + 'DTEND' => $vidatefin, + 'DESCRIPTION' => $descriptif, + 'SUMMARY' => supprimer_numero(typo(extraire_multi($titre))), + 'HORAIRE' => $horaire, + 'LOCATION' => $lieu, + 'ID' => $url, + 'LIENJOUR' => $lienjour); + $ts_startday1 += 26*3600; // le jour suivant : +26 h pour gerer les changements d'heure + $ts_startday1 = mktime(0, 0, 0, date("m",$ts_startday1), + date("d",$ts_startday1), date("Y",$ts_startday1)); // et remise a zero de l'heure + } + // toujours retourner vide pour qu'il ne se passe rien + return ""; +} + +function js2PhpTime($jsdate){ + if(preg_match('@(\d+)/(\d+)/(\d+)\s+(\d+):(\d+)@', $jsdate, $matches)==1){ + $ret = mktime($matches[4], $matches[5], 0, $matches[1], $matches[2], $matches[3]); + }else if(preg_match('@(\d+)/(\d+)/(\d+)@', $jsdate, $matches)==1){ + $ret = mktime(0, 0, 0, $matches[1], $matches[2], $matches[3]); + } + return $ret; +} + +function php2JsTime($phpDate){ + return date("m/d/Y H:i", $phpDate); +} + +function php2MySqlTime($phpDate){ + return date("Y-m-d H:i:s", $phpDate); +} + +function mySql2PhpTime($sqlDate){ + $arr = date_parse($sqlDate); + return mktime($arr["hour"],$arr["minute"],$arr["second"],$arr["month"],$arr["day"],$arr["year"]); +} + +function sc_wdcalendar_json($day, $type) { + $phpTime = js2PhpTime($day); + + switch($type){ + case "month": + $st = mktime(0, 0, 0, date("m", $phpTime), 1, date("Y", $phpTime)); + $et = mktime(0, 0, -1, date("m", $phpTime)+1, 1, date("Y", $phpTime)); + break; + case "week": + //suppose first day of a week is monday + $monday = date("d", $phpTime) - date('N', $phpTime) + 1; + //echo date('N', $phpTime); + $st = mktime(0,0,0,date("m", $phpTime), $monday, date("Y", $phpTime)); + $et = mktime(0,0,-1,date("m", $phpTime), $monday+7, date("Y", $phpTime)); + break; + case "day": + $st = mktime(0, 0, 0, date("m", $phpTime), date("d", $phpTime), date("Y", $phpTime)); + $et = mktime(0, 0, -1, date("m", $phpTime), date("d", $phpTime)+1, date("Y", $phpTime)); + break; + } + + $ret = array(); + $ret['events'] = array(); + $ret["issort"] =true; + $ret["start"] = php2JsTime($st); + $ret["end"] = php2JsTime($et); + $ret['error'] = null; + + $where = array( + "date_debut between '".php2MySqlTime($st)."' and '".php2MySqlTime($et)."'", + ); + if($resultats = sql_select('*', "spip_evenements", $where)) { + while($row = sql_fetch($resultats)) { + + $date_debut = intval(date('Ymd',mySql2PhpTime($row['date_debut']))); + $date_fin = intval(date('Ymd',mySql2PhpTime($row['date_fin']))); + + if($date_fin > $date_debut OR $row['horaire'] == 'non') { + $AllTheDay = 1; + } else $AllTheDay = 0; + + $colorEvent = intval($row['id_evenement'])%13; + + $ret['events'][] = array( + intval($row['id_evenement']), + unicode2charset(html2unicode(supprimer_tags(supprimer_numero(typo(extraire_multi($row['titre'])))))), + php2JsTime(mySql2PhpTime($row['date_debut'])), + php2JsTime(mySql2PhpTime($row['date_fin'])), + 0, + $AllTheDay, //more than one day event + 0,//Recurring event, + $colorEvent, //color + 0,//editable + unicode2charset(html2unicode(supprimer_tags(supprimer_numero(typo(extraire_multi($row['lieu'])))))), //lieu + urlencode_1738(generer_url_entite(intval($row['id_article']), 'article')) //url article spip //$attends + ); + } + } + + // return print_r($ret,1); + + return json_encode($ret); +} + +function balise_ARTICLE_URL_dist($p) { + if (!is_array($p->param)) + $p->param=array(); + + // Produire le premier argument {article_url} + $texte = new Texte; + $texte->type='texte'; + $texte->texte='article_url'; + $param = array(0=>NULL, 1=>array(0=>$texte)); + array_unshift($p->param, $param); + + // Transformer les filtres en arguments + for ($i=1; $i<count($p->param); $i++) { + if ($p->param[$i][0]) { + if (!strstr($p->param[$i][0], '=')) + break;# on a rencontre un vrai filtre, c'est fini + $texte = new Texte; + $texte->type='texte'; + $texte->texte=$p->param[$i][0]; + $param = array(0=>$texte); + $p->param[$i][1] = $param; + $p->param[$i][0] = NULL; + } + } + + // Appeler la balise #MODELE{article_url}{arguments} + if (!function_exists($f = 'balise_modele')) + $f = 'balise_modele_dist'; + return $f($p); +} + + +@define('_MOT_MASQUER', 'Archives'); + +// ajoute le critere {archive} et {!archive} +// {archive} n'affiche que les articles ayant le mot clef _MOT_MASQUER ou dont la rubrique a ce mot clef +// {!archive} n'affiche que les articles n'ayant pas ce mot clef et dont la rubrique ne l'a pas non plus +// /!\ Pas de notion d'héritage sur une branche /!\ +function critere_archive_dist($idb, &$boucles, $crit) { + $boucle = &$boucles[$idb]; + $not = $crit->not?"NOT":""; + + if ($boucle->type_requete == 'articles') { + $art = $boucle->id_table . '.id_article'; + $select_article = sql_get_select($art, + "spip_articles AS `articlesin` + INNER JOIN spip_mots_liens AS mots_liens_articles + ON (articlesin.id_article = mots_liens_articles.id_objet AND mots_liens_articles.objet=\"article\") + INNER JOIN spip_mots AS mots_articles + ON (mots_liens_articles.id_mot=mots_articles.id_mot)", + array("articlesin.id_article = $art","mots_articles.titre=\"Archives\"")); + $select_article_rubrique = sql_get_select($art, + "spip_articles AS `articlesin` + INNER JOIN spip_rubriques AS rubriques + ON (articlesin.id_rubrique = rubriques.id_rubrique) + INNER JOIN spip_mots_liens AS mots_liens_rubriques + ON (rubriques.id_rubrique = mots_liens_rubriques.id_objet AND mots_liens_rubriques.objet=\"rubrique\") + INNER JOIN spip_mots AS mots_articles ON + (mots_liens_rubriques.id_mot=mots_articles.id_mot)", + array("articlesin.id_article = $art","mots_articles.titre=\"Archives\"")); + + $where = "'$not (($art IN ($select_article)) OR ($art IN ($select_article_rubrique)))'"; + $boucle->where[]= $where; + } +} + +/** Plugin Dictionnaires **/ +/* + * Fonction de remplacement par défaut pour les termes trouvés dans les textes + */ +function dictionnaires_remplacer_defaut($mot, $definition){ + return $mot + .'<sup><a href="' + .($definition['url']?$definition['url']:generer_url_public('sigles', 'id_dictionnaire='.$definition['id_dictionnaire'].'#sigle'.$definition['id_definition'])) + .'" title="'._T('definition:titre_definition').': '.couper(trim(attribut_html(supprimer_tags(typo($definition['texte'])))),80).'">' + .'?' + .'</a></sup>'; +} + +/* + * Fonction de remplacement par défaut pour les abbréviations trouvées dans les textes + * Ceci est un EXEMPLE montrant qu'on peut mettre un truc différent pour un type de définition précis + * Mais ce code est une MAUVAISE PRATIQUE en accessibilité + * (car seuls les gens avec des yeux valides et un pointeur de souris ont accès à l'information) + */ +function dictionnaires_remplacer_abbr($mot, $definition){ + return '<abbr title="'.trim(attribut_html(supprimer_tags(typo($definition['texte'])))).'">'.$mot.'</abbr>'; + /* Pas de texte rajouté après : pose problème sur |couper et |attribut_html + .'<sup><a href="' + .($definition['url']?$definition['url']:generer_url_public('sigles', 'id_dictionnaire='.$definition['id_dictionnaire'].'&type=abbr#sigle'.$definition['id_definition'])) + .'" title="'._T('definition:titre_definition').': '.couper(trim(attribut_html(supprimer_tags(typo($definition['texte'])))),80).'">' + .'?' + .'</a></sup>'; + */ +} + +if (!function_exists('rainette_afficher_icone')) { + function rainette_afficher_icone($meteo, $taille='petit', $chemin='', $extension='png'){ + return rainette_icone_meteo($meteo, $taille='petit', $chemin='', $extension='png'); + } +} + +function sc_rgb($couleurs) { + include_spip('inc/filtres_images_lib_mini'); // par precaution + $couleurs = _couleur_hex_to_dec($couleurs); + return $couleurs["red"] .", ". $couleurs["green"] .", ". $couleurs["blue"]; +} + +function mini_html($texte) { + $texte = preg_replace(",\n[\t\ ]*,", "\n", $texte); + $texte = preg_replace(",\n+,", "\n", $texte); + return $texte; +} + +// Permet de recadrer une image en la centrant sur son focus (plugin Centre Image) +function focusimage($img, $largeur, $hauteur, $position = 'center') { + include_spip('filtres_images_lib_mini'); + include_spip('filtres/images_transforme'); + if ((largeur($img) <= $largeur) AND (hauteur($img) <= $hauteur)) { + $img = image_recadre($img, "$largeur:$hauteur", '+', $position, 'transparent'); + $img = image_recadre($img, $largeur, $hauteur, $position, 'transparent'); + } else { + $img = image_recadre($img, "$largeur:$hauteur", '-', 'focus', 'transparent'); + $img = image_reduire($img, $largeur, $hauteur, $position, 'transparent'); + } + return $img; +}