function bandeau_rubrique($id_rubrique, $titre_rubrique, $zdecal) { static $zmax = 6; $nav = "<a href='" . generer_url_entite($id_rubrique, 'rubrique', '', '', false) . "'>" . supprimer_tags(preg_replace(',[\\x00-\\x1f]+,', ' ', $titre_rubrique)) . "</a>\n"; // Limiter volontairement le nombre de sous-menus if (!--$zmax) { $zmax++; return "\n<li>{$nav}</li>"; } $arr_rub = extraire_article($id_rubrique, $GLOBALS['db_art_cache']); $i = sizeof($arr_rub); if (!$i) { $zmax++; return "\n<li>{$nav}</li>"; } $nb_col = 1; if ($nb_rub = count($arr_rub)) { $nb_col = min(10, max(1, ceil($nb_rub / 10))); } $ret = "<li class='haschild'>{$nav}<ul class='cols_{$nb_col}'>"; foreach ($arr_rub as $id_rub => $titre_rub) { if (autoriser('voir', 'rubrique', $id_rub)) { $titre = supprimer_numero(typo($titre_rub)); $ret .= bandeau_rubrique($id_rub, $titre, $zdecal + $i); $i++; } } $ret .= "</ul></li>\n"; $zmax++; return $ret; }
function url_nettoyer($titre,$longueur_maxi,$longueur_min=0,$separateur='-',$filtre=''){ if (!defined('_TRANSLITTERER_URL')) define('_TRANSLITTERER_URL', true); $titre = supprimer_tags(supprimer_numero(extraire_multi($titre))); $url = corriger_caracteres($titre); if (_TRANSLITTERER_URL) $url = translitteration($url); if ($filtre) $url = $filtre($url); // on va convertir tous les caracteres de ponctuation et espaces // a l'exception de l'underscore (_), car on veut le conserver dans l'url $url = str_replace('_', chr(7), $url); $url = @preg_replace(',[[:punct:][:space:]]+,u', ' ', $url); $url = str_replace(chr(7), '_', $url); // S'il reste trop de caracteres non latins, les gerer comme wikipedia // avec rawurlencode : if (_TRANSLITTERER_URL && preg_match_all(",[^a-zA-Z0-9 _]+,", $url, $r, PREG_SET_ORDER)) { foreach ($r as $regs) { $url = substr_replace($url, rawurlencode($regs[0]), strpos($url, $regs[0]), strlen($regs[0])); } } // S'il reste trop peu, renvoyer vide if (strlen($url) < $longueur_min) return ''; // Sinon couper les mots et les relier par des $separateur if (_TRANSLITTERER_URL) $mots = preg_split(",[^a-zA-Z0-9_%]+,", $url); else $mots = preg_split(",[\s]+,", $url); $url = ''; foreach ($mots as $mot) { if (!strlen($mot)) continue; $url2 = $url.$separateur.$mot; // Si on depasse $longueur_maxi caracteres, s'arreter // ne pas compter 3 caracteres pour %E9 mais un seul $long = preg_replace(',%.,', '', $url2); if (strlen($long) > $longueur_maxi) { break; } $url = $url2; } $url = substr($url, 1); // On enregistre en utf-8 dans la base $url = rawurldecode($url); if (strlen($url) < $longueur_min) return ''; return $url; }
function inc_instituer_article_dist($id_article, $statut, $id_rubrique) { // menu de date pour les articles post-dates (plugin) /* un branchement sauvage ? if ($statut <> 'publie' AND $GLOBALS['meta']['post_dates'] == 'non' AND function_exists('menu_postdates')) list($postdates,$postdates_js) = menu_postdates(); else $postdates = $postdates_js = '';*/ // cf autorisations dans action/editer_article if (!autoriser('modifier', 'article', $id_article)) return ''; $res = ''; $etats = $GLOBALS['liste_des_etats']; if (!autoriser('publierdans', 'rubrique', $id_rubrique)) { if ($statut == 'publie') return ''; unset($etats[array_search('publie', $etats)]); unset($etats[array_search('refuse', $etats)]); if ($statut == 'prepa') $res = supprimer_tags(_T('texte_proposer_publication')); } $res .= "<ul id='instituer_article-$id_article' class='instituer_article instituer'>" . "<li>" . _T('texte_article_statut') . aide("artstatut") ."<ul>"; $href = redirige_action_auteur('instituer_article',$id_article,'articles', "id_article=$id_article"); $href = parametre_url($href,'statut_old',$statut); foreach($etats as $affiche => $s){ $puce = puce_statut($s) . _T($affiche); if ($s==$statut) $class=' selected'; else { $class=''; $puce = "<a href='" . parametre_url($href,'statut_nouv',$s) . "' onclick='return confirm(confirm_changer_statut);'>$puce</a>"; } $res .= "<li class='$s $class'>$puce</li>"; } $res .= "</ul></li></ul>"; return $res; }
function formulaires_ecrire_auteur_traiter_dist($id_auteur, $id_article, $mail) { $adres = _request('email_message_auteur'); $sujet = _request('sujet_message_auteur'); $texte = _request('texte_message_auteur'); $texte .= "\n\n-- " . _T('envoi_via_le_site') . " " . supprimer_tags(extraire_multi($GLOBALS['meta']['nom_site'])) . " (" . $GLOBALS['meta']['adresse_site'] . "/) --\n"; $envoyer_mail = charger_fonction('envoyer_mail', 'inc'); if ($envoyer_mail($mail, $sujet, $texte, $adres, "X-Originating-IP: " . $GLOBALS['ip'])) { $message['message_ok'] = _T('form_prop_message_envoye'); } else { $message['message_erreur'] = _T('pass_erreur_probleme_technique'); } return $message; }
function referers_group($nbvisites, $id_article, $lesliensracine, $lesreferermd5, $lesreferers, $lesurls) { global $spip_lang_right, $source_vignettes; $vign = ((strlen($source_vignettes) > 0) && $GLOBALS['meta']["activer_captures_referers"]!='non'); $aff = array(); foreach($nbvisites as $numero => $visites) { if (!$numero) next; $referermd5 = $lesreferermd5[$numero]; $bouton = $ret = ""; if ($vign) $ret = "\n<a href=\"http://".$lesurls[$numero]."\"><img src=\"$source_vignettes".rawurlencode($lesurls[$numero])."\"\nstyle=\"float: $spip_lang_right; margin-bottom: 3px; margin-left: 3px;\" alt='' /></a>"; if ($visites > 5) $bouton .= "<span class='visites visites3'>$visites "._T('info_visites')."</span> "; else if ($visites > 1) $bouton .= "<span class='visites visites2'>$visites "._T('info_visites')."</span> "; else $bouton .= "<span class='visites visites1'>$visites "._T('info_visite')."</span> "; if ($numero == "(email)") { $ret .= $bouton . "<b>".$numero."</b>"; } else { $n = count($lesreferers[$numero]); if (($n > 1) || ($n > 0 && substr(supprimer_tags($lesreferers[$numero][0]),0,1) != '/')) { $rac = $lesliensracine[$numero]; $bouton .= "<a href=\"http://".attribut_html($lesurls[$numero])."\" style='font-weight: bold;'>".$numero."</a>" . (!$rac ? '': (" <span class='spip_x-small'>(" . $rac .")</span>")); $ret .= bouton_block_depliable($bouton,false) . debut_block_depliable(false) . "\n<ul><li>" . join ("</li><li>",$lesreferers[$numero]) . "</li></ul>" . fin_block(); } else { $ret .= $bouton; $lien = $n ? $lesreferers[$numero][0] : ''; if (preg_match(",^(<a [^>]+>)([^ ]*)( \([0-9]+\))?,i", $lien, $regs)) { $lien = quote_amp($regs[1]).$numero.$regs[2]; if (!strpos($lien, '</a>')) $lien .= '</a>'; } else $lien = "<a href=\"http://".attribut_html($numero)."\">".$numero."</a>"; $ret .= "<b>".quote_amp($lien)."</b>" . ($id_article ? '' : referes($referermd5)); } } $aff[]= $ret; } return $aff; }
/** * Insertion dans le pipeline formulaire_charger (SPIP) * * Surcharge du sujet et le texte du message généré par le formulaire_ecrire_auteur * Surcharge du formulaire d'inscription pour ne pas afficher l'explication * * @param array $flux * @return array $flux */ function geol_formulaire_charger($flux) { // sujet perso pour formulaire_ecrire_auteur depuis une page article (erreur de localisation) if ($flux['args']['form'] == 'ecrire_auteur' and $flux['args']['args'][1] != '') { $flux['data']['sujet_message_auteur'] .= supprimer_tags(extraire_multi($GLOBALS['meta']['nom_site'])) . " : " . _T('geol:sujet_erreur_localisation'); $flux['data']['texte_message_auteur'] .= _T('geol:depuis_page') . " : " . generer_url_entite_absolue($flux['args']['args'][1], 'article') . "\n\nMessage :\n\n"; } // pas d'explicaltion sur le form d'inscription if ($flux['args']['form'] == 'inscription' and $flux['args']['args'][0] == '1comite') { $flux['data']['_commentaire'] = ''; } // limiter le form de polyhierarchie sur la branche des categories (dans le public) // cf http://zone.spip.org/trac/spip-zone/changeset/41280 if ($flux['args']['form'] == 'editer_polyhierarchie' and !test_espace_prive()) { $flux['data']['limite_branche'] = lire_config('geol/secteur_categories', 2); } return $flux; }
function filtre_nuage_dist($id_mot, $titre = '', $url = '', $poids = -1, $expose = array()) { static $nuage = array(); if ($titre and $url) { $nuage['titre'][$id_mot] = supprimer_tags($titre); $nuage['url'][$id_mot] = $url; if ($poids >= 0) { $nuage['poids'][$id_mot] = $poids; } } elseif ($poids >= 0) { $nuage['poids'][$id_mot] += $poids; } else { $calcul = chercher_filtre('calculer_nuage'); $retour = $calcul($nuage['titre'], $nuage['url'], $nuage['poids'], $expose); $nuage = array(); } return !empty($retour) ? $retour : ''; }
function cs_introduction($texte, $descriptif, $lgr, $id, $racc, $connect) { @define('_INTRODUCTION_LGR', 100); // fonction couper_intro $couper = $GLOBALS['cs_couper_intro']; if (strlen($descriptif)) # si descriptif contient juste des espaces ca produit une intro vide, # c'est une fonctionnalite, pas un bug // ici le descriptif est coupe s'il est trop long $texte = $lgr<0?propre($couper($descriptif, -$lgr, _INTRODUCTION_CODE)):propre($descriptif); else { // pas de maths dans l'intro... $texte = preg_replace(',<math>.*</math>,imsU', '', $texte); // on coupe proprement... $lgr = $lgr>0?round($lgr*_INTRODUCTION_LGR/100):-$lgr; $texte = PtoBR(propre(supprimer_tags($couper(cs_introduire($texte), $lgr, _INTRODUCTION_CODE)))); } // si les points de suite ont ete ajoutes return remplace_points_de_suite($texte, $id, $racc); } // introduction()
/** * Sélecteur de rubriques pour l'espace privé en mode classique (menu) * * @uses sous_menu_rubriques() * * @param int $id_rubrique * Identifiant de rubrique courante (0 si NEW) * @param string $type * Type de l'objet à placer. * @param bool $restreint * True pour indiquer qu'il faut limiter les rubriques affichées * aux rubriques éditables par l'admin restreint * @param int $idem * En mode rubrique, identifiant de soi-même * @return string * Code HTML du sélecteur **/ function selecteur_rubrique_html($id_rubrique, $type, $restreint, $idem = 0) { $data = array(); if ($type == 'rubrique' and autoriser('publierdans', 'rubrique', 0)) { $data[0] = _T('info_racine_site'); } elseif ($type == 'auteur' or !$id_rubrique) { $data[0] = ' '; } // // creer une structure contenant toute l'arborescence // include_spip('base/abstract_sql'); $q = sql_select("id_rubrique, id_parent, titre, statut, lang, langue_choisie", "spip_rubriques", $type == 'breve' ? ' id_parent=0 ' : '', '', "0+titre,titre"); while ($r = sql_fetch($q)) { if (autoriser('voir', 'rubrique', $r['id_rubrique'])) { // titre largeur maxi a 50 $titre = couper(supprimer_tags(typo($r['titre'])) . " ", 50); if ($GLOBALS['meta']['multi_rubriques'] == 'oui' and ($r['langue_choisie'] == "oui" or $r['id_parent'] == 0)) { $titre .= ' [' . traduire_nom_langue($r['lang']) . ']'; } $data[$r['id_rubrique']] = $titre; $enfants[$r['id_parent']][] = $r['id_rubrique']; if ($id_rubrique == $r['id_rubrique']) { $id_parent = $r['id_parent']; } } } // si une seule rubrique comme choix possible, // inutile de mettre le selecteur sur un choix vide par defaut // sauf si le selecteur s'adresse a une rubrique puisque on peut la mettre a la racine dans ce cas if (count($data) == 2 and isset($data[0]) and !in_array($type, array('auteur', 'rubrique')) and !$id_rubrique) { unset($data[0]); } $opt = sous_menu_rubriques($id_rubrique, 0, 0, $data, $enfants, $idem, $restreint, $type); $att = " id='id_parent' name='id_parent'\nclass='selecteur_parent verdana1'"; if (preg_match(',^<option[^<>]*value=.(\\d*).[^<>]*>([^<]*)</option>$,', $opt, $r)) { $r = "<input{$att} type='hidden' value='" . $r[1] . "' />" . $r[2]; } else { $r = "<select" . $att . " size='1'>\n{$opt}</select>\n"; } # message pour neuneus (a supprimer ?) # if ($type != 'auteur' AND $type != 'breve') # $r .= "\n<br />"._T('texte_rappel_selection_champs'); return $r; }
function couper($texte, $taille = 50, $suite = ' (...)') { if (!($length = strlen($texte)) or $taille <= 0) { return ''; } $offset = 400 + 2 * $taille; while ($offset < $length and strlen(preg_replace(",<[^>]+>,Uims", "", substr($texte, 0, $offset))) < $taille) { $offset = 2 * $offset; } if ($offset < $length && ($p_tag_ouvrant = strpos($texte, '<', $offset)) !== NULL) { $p_tag_fermant = strpos($texte, '>', $offset); if ($p_tag_fermant && $p_tag_fermant < $p_tag_ouvrant) { $offset = $p_tag_fermant + 1; } // prolonger la coupe jusqu'au tag fermant suivant eventuel } $texte = substr($texte, 0, $offset); /* eviter de travailler sur 10ko pour extraire 150 caracteres */ // on utilise les \r pour passer entre les gouttes $texte = str_replace("\r\n", "\n", $texte); $texte = str_replace("\r", "\n", $texte); // sauts de ligne et paragraphes $texte = preg_replace("/\n\n+/", "\r", $texte); $texte = preg_replace("/<(p|br)( [^>]*)?" . ">/", "\r", $texte); // supprimer les traits, lignes etc $texte = preg_replace("/(^|\r|\n)(-[-#\\*]*|_ )/", "\r", $texte); // supprimer les tags $texte = supprimer_tags($texte); $texte = trim(str_replace("\n", " ", $texte)); $texte .= "\n"; // marquer la fin // travailler en accents charset $texte = unicode2charset(html2unicode($texte, true)); if (!function_exists('nettoyer_raccourcis_typo')) { include_spip('inc/lien'); } $texte = nettoyer_raccourcis_typo($texte); // corriger la longueur de coupe // en fonction de la presence de caracteres utf if ($GLOBALS['meta']['charset'] == 'utf-8') { $long = charset2unicode($texte); $long = spip_substr($long, 0, max($taille, 1)); $nbcharutf = preg_match_all('/(&#[0-9]{3,5};)/S', $long, $matches); $taille += $nbcharutf; } // couper au mot precedent $long = spip_substr($texte, 0, max($taille - 4, 1)); $u = $GLOBALS['meta']['pcre_u']; $court = preg_replace("/([^\\s][\\s]+)[^\\s]*\n?\$/" . $u, "\\1", $long); $points = $suite; // trop court ? ne pas faire de (...) if (spip_strlen($court) < max(0.75 * $taille, 2)) { $points = ''; $long = spip_substr($texte, 0, $taille); $texte = preg_replace("/([^\\s][\\s]+)[^\\s]*\n?\$/" . $u, "\\1", $long); // encore trop court ? couper au caractere if (spip_strlen($texte) < 0.75 * $taille) { $texte = $long; } } else { $texte = $court; } if (strpos($texte, "\n")) { // la fin est encore la : c'est qu'on n'a pas de texte de suite $points = ''; } // remettre les paragraphes $texte = preg_replace("/\r+/", "\n\n", $texte); // supprimer l'eventuelle entite finale mal coupee $texte = preg_replace('/&#?[a-z0-9]*$/S', '', $texte); return quote_amp(trim($texte)) . $points; }
function couper($texte, $taille = 50) { $texte = substr($texte, 0, 400 + 2 * $taille); /* eviter de travailler sur 10ko pour extraire 150 caracteres */ // on utilise les \r pour passer entre les gouttes $texte = str_replace("\r\n", "\n", $texte); $texte = str_replace("\r", "\n", $texte); // sauts de ligne et paragraphes $texte = preg_replace("/\n\n+/", "\r", $texte); $texte = preg_replace("/<(p|br)( [^>]*)?/" . ">", "\r", $texte); // supprimer les traits, lignes etc $texte = preg_replace("/(^|\r|\n)(-[-#\\*]*|_ )/", "\r", $texte); // supprimer les tags $texte = supprimer_tags($texte); $texte = trim(str_replace("\n", " ", $texte)); $texte .= "\n"; // marquer la fin // travailler en accents charset $texte = filtrer_entites($texte); // supprimer les liens $texte = preg_replace("/\\[->([^]]*)\\]/", "\\1", $texte); // liens sans texte $texte = preg_replace("/\\[([^\\[]*)->([^]]*)\\]/", "\\1", $texte); // supprimer les notes $texte = preg_replace("/[\\[([^]]|\\][^]])*\\]\\]/", "", $texte); // supprimer les codes typos $texte = preg_replace("/[{}]/", "", $texte); // supprimer les tableaux $texte = preg_replace("/(^|\r)\\|.*\\|\r/", "\r", $texte); // couper au mot precedent $long = substr($texte, 0, max($taille - 4, 1)); $court = preg_replace("/([^[:space:]][[:space:]]+)[^[:space:]]*\n?\$/", "\\1", $long); $points = ' (...)'; // trop court ? ne pas faire de (...) if (strlen($court) < max(0.75 * $taille, 2)) { $points = ''; $long = preg_replace("/&#?[a-z0-9]*;?\$/", "", substr($texte, 0, $taille)); $texte = preg_replace("/([^[:space:]][[:space:]]+)[^[:space:]]*\$/", "\\1", $long); // encore trop court ? couper au caractere if (strlen($texte) < 0.75 * $taille) { $texte = $long; } } else { $texte = $court; } if (strpos($texte, "\n")) { // la fin est encore la : c'est qu'on n'a pas de texte de suite $points = ''; } // remettre les paragraphes $texte = preg_replace("/\r+/", "\n\n", $texte); return trim($texte) . $points; }
function inserer_article_syndique($data, $now_id_syndic, $statut, $url_site, $url_syndic, $resume, $documents, &$faits) { // Creer le lien s'il est nouveau - cle=(id_syndic,url) // On coupe a 255 caracteres pour eviter tout doublon // sur une URL de plus de 255 qui exloserait la base de donnees $le_lien = substr($data['url'], 0, 255); // si true, un lien deja syndique arrivant par une autre source est ignore // par defaut [false], chaque source a sa liste de liens, eventuellement // les memes define('_SYNDICATION_URL_UNIQUE', false); // Si false, on ne met pas a jour un lien deja syndique avec ses nouvelles // donnees ; par defaut [true] : on met a jour si le contenu a change // Attention si on modifie a la main un article syndique, les modifs sont // ecrasees lors de la syndication suivante define('_SYNDICATION_CORRECTION', true); // Chercher les liens de meme cle // S'il y a plusieurs liens qui repondent, il faut choisir le plus proche // (ie meme titre et pas deja fait), le mettre a jour et ignorer les autres $n = 0; $s = sql_select("id_syndic_article,titre,id_syndic,statut", "spip_syndic_articles", "url=" . sql_quote($le_lien) . (_SYNDICATION_URL_UNIQUE ? '' : " AND id_syndic={$now_id_syndic}") . " AND " . sql_in('id_syndic_article', $faits, 'NOT'), "", "maj DESC"); while ($a = sql_fetch($s)) { $id = $a['id_syndic_article']; $id_syndic = $a['id_syndic']; if ($a['titre'] == $data['titre']) { $id_syndic_article = $id; break; } $n++; } // S'il y en avait qu'un, le prendre quel que soit le titre if ($n == 1) { $id_syndic_article = $id; } elseif (!isset($id_syndic_article)) { $champs = array('id_syndic' => $now_id_syndic, 'url' => $le_lien, 'date' => date("Y-m-d H:i:s", $data['date'] ? $data['date'] : $data['lastbuilddate']), 'statut' => $statut); // Envoyer aux plugins $champs = pipeline('pre_insertion', array('args' => array('table' => 'spip_syndic_articles'), 'data' => $champs)); $ajout = $id_syndic_article = sql_insertq('spip_syndic_articles', $champs); if (!$ajout) { return; } pipeline('post_insertion', array('args' => array('table' => 'spip_syndic_articles', 'id_objet' => $id_syndic_article), 'data' => $champs)); } $faits[] = $id_syndic_article; // Si le lien n'est pas nouveau, plusieurs options : if (!$ajout) { // 1. Lien existant : on corrige ou pas ? if (!_SYNDICATION_CORRECTION) { return; } // 2. Le lien existait deja, lie a un autre spip_syndic if (_SYNDICATION_URL_UNIQUE and $id_syndic != $now_id_syndic) { return; } } // Descriptif, en mode resume ou mode 'full text' // on prend en priorite data['descriptif'] si on est en mode resume, // et data['content'] si on est en mode "full syndication" if ($resume != 'non') { // mode "resume" $desc = strlen($data['descriptif']) ? $data['descriptif'] : $data['content']; $desc = couper(trim_more(textebrut($desc)), 300); } else { // mode "full syndication" // choisir le contenu pertinent // & refaire les liens relatifs $desc = strlen($data['content']) ? $data['content'] : $data['descriptif']; $desc = liens_absolus($desc, $url_syndic); } // tags & enclosures (preparer spip_syndic_articles.tags) $tags = $data['enclosures'] ? $data['enclosures'] : ''; # eviter les doublons (cle = url+titre) et passer d'un tableau a une chaine if ($data['tags']) { $vus = array(); foreach ($data['tags'] as $tag) { $cle = supprimer_tags($tag) . extraire_attribut($tag, 'href'); $vus[$cle] = $tag; } $tags .= ($tags ? ', ' : '') . join(', ', $vus); } // Mise a jour du contenu (titre,auteurs,description,date?,source...) $vals = array('titre' => $data['titre'], 'lesauteurs' => $data['lesauteurs'], 'descriptif' => $desc, 'lang' => substr($data['lang'], 0, 10), 'source' => substr($data['source'], 0, 255), 'url_source' => substr($data['url_source'], 0, 255), 'tags' => $tags); // Mettre a jour la date si lastbuilddate if ($data['lastbuilddate']) { $vals['date'] = date("Y-m-d H:i:s", $data['lastbuilddate']); } sql_updateq('spip_syndic_articles', $vals, "id_syndic_article={$id_syndic_article}"); // Point d'entree post_syndication pipeline('post_syndication', array('args' => array('table' => 'spip_syndic_articles', 'id_objet' => $id_syndic_article, 'url' => $le_lien, 'id_syndic' => $now_id_syndic, 'ajout' => $ajout), 'data' => $data)); return $ajout; }
function affiche_mots_ressemblant($cherche_mot, $objet, $id_objet, $resultat, $table, $table_id, $url_base) { $les_mots = sql_in('id_mot', $resultat); $res = sql_allfetsel("*", "spip_mots", $les_mots, "", "titre", "17"); foreach ($res as $k => $row) { $id_mot = $row['id_mot']; $titre = $row['titre']; $type = typo($row['type']); $descriptif = $row['descriptif']; $res[$k]= ajax_action_auteur('editer_mots', "$id_objet,,$table,$table_id,$objet,$id_mot", $url_base, "$table_id=$id_objet", array(typo($titre),' title="' . _T('info_ajouter_mot') .'"'),"&id_objet=$id_objet&objet=$objet") . (!$descriptif ? '' : ("\n(<span class='spip_xx-small'>".supprimer_tags(couper(propre($descriptif), 100)).")</span><br />\n")); } $res2 = ($type ? "<strong>$type</strong> : " : '' ) . _T('info_plusieurs_mots_trouves', array('cherche_mot' => $cherche_mot)) ."<br />"; if (count($resultat) > 17) $res2 .= "<br /><strong>" ._T('info_trop_resultat', array('cherche_mot' => $cherche_mot)) ."</strong><br />\n"; return $res2 . '<ul><li>' . join("</li>\n<li>", $res) . '</li></ul>'; }
function formulaire_mot_remplace($id_groupe, $id_mot, $url_base, $table, $table_id, $objet, $id_objet) { $res = sql_allfetsel("id_mot, titre", "spip_mots", "id_groupe = $id_groupe", "", "titre"); foreach($res as $k => $row) { $id = $row['id_mot']; $titre = supprimer_tags(typo($row['titre'])); $selected = ($id == $id_mot) ? " selected='selected'" : ""; $res[$k]= "<option value='$id'$selected> $titre</option>"; } $ancre = "valider_groupe_$id_groupe"; // forcer le recalcul du noeud car on est en Ajax $jscript1 = "findObj_forcer('$ancre').style.visibility='visible';"; $corps = "\n<select name='nouv_mot' id='nouv_mot$id_groupe' onchange=\"$jscript1\"" . " class='spip_xx-small' style='width:90px;'>" . join("\n", $res) . "</select>\n " ; $t = _T('bouton_changer'); return ajax_action_post('editer_mots', "$id_objet,$id_mot,$table,$table_id,$objet", $url_base, "$table_id=$id_objet",$corps, $t, " class='visible_au_chargement' id='$ancre'", "", "&id_objet=$id_objet&objet=$objet"); }
function afficher_script_statut($id, $type, $n, $img, $statut, $titre, $act='') { $i = http_wrapper($img); $h = generer_action_auteur("instituer_$type","$id-$statut"); $h = "javascript:selec_statut('$id', '$type', $n, '$i', '$h');"; $t = supprimer_tags($titre); $inf = getimagesize($i); return "<a href=\"$h\"\ntitle=\"$t\"$act><img src='$i' $inf[3] alt=' '/></a>"; }
function nettoyer_titre_email($titre) { $titre = preg_replace("/\n/", ' ', supprimer_tags($titre)); return $titre; }
function statistiques_par_mois($entrees, $script){ $maxgraph = maxgraph(max($entrees)); $rapport = 200/$maxgraph; $largeur = floor(420 / (count($entrees))); if ($largeur < 1) $largeur = 1; if ($largeur > 50) $largeur = 50; $decal = 0; $tab_moyenne = array(); $all = ''; foreach($entrees as $key=>$value) { $key = substr($key,0,4).'-'.substr($key,4,2); $mois = affdate_mois_annee($key); if ($decal == 30) $decal = 0; $decal ++; $tab_moyenne[$decal] = $value; $moyenne = statistiques_moyenne($tab_moyenne); $hauteur_moyenne = round($moyenne * $rapport) - 1; $hauteur = round($value * $rapport) - 1; $res = ''; $title= attribut_html(supprimer_tags("$mois | " ._T('info_total')." ".$value)); $tagtitle = $script ? '' : $title; if ($hauteur > 0){ if ($hauteur_moyenne > $hauteur) { $difference = ($hauteur_moyenne - $hauteur) -1; $res .= http_img_rien($largeur, 1, 'trait_moyen'); $res .= http_img_rien($largeur, $difference, '', $tagtitle); $res .= http_img_rien($largeur,1,"trait_haut"); if (preg_match(",-01,",$key)){ // janvier en couleur foncee $res .= http_img_rien($largeur,$hauteur,"couleur_janvier", $tagtitle); } else { $res .= http_img_rien($largeur,$hauteur,"couleur_mois", $tagtitle); } } else if ($hauteur_moyenne < $hauteur) { $difference = ($hauteur - $hauteur_moyenne) -1; $res .= http_img_rien($largeur,1,"trait_haut", $tagtitle); if (preg_match(",-01,",$key)){ // janvier en couleur foncee $couleur = 'couleur_janvier'; } else { $couleur = 'couleur_mois'; } $res .= http_img_rien($largeur,$difference, $couleur, $tagtitle); $res .= http_img_rien($largeur,1,'trait_moyen',$tagtitle); $res .= http_img_rien($largeur,$hauteur_moyenne, $couleur, $tagtitle); } else { $res .= http_img_rien($largeur,1,"trait_haut", $tagtitle); if (preg_match(",-01,",$key)){ // janvier en couleur foncee $res .= http_img_rien($largeur, $hauteur, "couleur_janvier", $tagtitle); } else { $res .= http_img_rien($largeur,$hauteur, "couleur_mois", $tagtitle); } } } $res .= http_img_rien($largeur,1,'trait_bas', $tagtitle); if (!$script) { $y = annee($key); $m = mois($key); $href = generer_url_ecrire('calendrier', "type=mois&annee=$y&mois=$m&jour=1"); } else $href = "$script&date=$key"; $all .= "\n<td style='width: ${largeur}px'><a href='" . $href . '\' title="' . $title . '">' . $res . "</a></td>\n"; } return "\n<table cellpadding='0' cellspacing='0' border='0'><tr>" . "\n<td ".http_style_background("fond-stats.gif").">" . "\n<table cellpadding='0' cellspacing='0' border='0' class='bottom'><tr>" . "\n<td class='trait_bas'>" . http_img_rien(1, 200) ."</td>" . $all . "\n<td style='background-color: black'>" . http_img_rien(1, 1) . "</td>" . "</tr></table></td>" . "\n<td ".http_style_background("fond-stats.gif")." valign='bottom'>" . http_img_rien(3, 1, 'trait_bas') ."</td>" . "\n<td>" . http_img_rien(5, 1) ."</td>" . "\n<td valign='top'>" . statistiques_echelle($maxgraph) . "</td></tr></table>"; }
function decouper_en_pages_rempl($texte, $pagination_seule=false) { // un seul id par page... static $id_decoupe = ''; // si pas de separateur, on sort if (strpos($texte, _decoupe_SEPARATEUR)===false) return $pagination_seule?'':$texte; // au cas ou on ne veuille pas de decoupe, on remplace les '++++' par un filet. if (defined('_CS_PRINT') && !$pagination_seule) { @define(_decoupe_FILET, '<p style="border-bottom:1px dashed #666; padding:0; margin:1em 20%; font-size:4pt;" > </p>'); return str_replace(_decoupe_SEPARATEUR, _decoupe_FILET, $texte); } // recherche du sommaire s'il existe if (defined('_sommaire_REM') && (substr_count($texte, _sommaire_REM)==2)) { $pages = explode(_sommaire_REM, $texte); $sommaire = $pages[0].$pages[1]; $texte = $pages[2]; } else $sommaire = ''; // traitement des pages $pages = explode(_decoupe_SEPARATEUR, $texte); $num_pages = count($pages); if ($num_pages == 1) return $pagination_seule?'':$texte; $artpage = max(intval(artpage()), 1); $artpage = min($artpage, $num_pages); /* // si numero illegal ou si var_recherche existe, alors renvoyer toutes les pages, separees par une ligne <hr/>. // la surbrillance pourra alors fonctionner correctement. if (strlen($_GET['var_recherche']) || $artpage < 1 || $artpage > $num_pages) return join("<hr/>", $pages); */ // si la balise #CS_DECOUPE est utilisee on renvoie le texte sans pagination if (!$pagination_seule) { // page demandee $page = cs_safebalises($pages[$artpage-1]); if (isset($_GET['decoupe_recherche'])) { include_spip('inc/surligne'); $page = surligner_mots($page, $_GET['decoupe_recherche']); } if (defined('_decoupe_BALISE')) return $sommaire.$page; } $self = nettoyer_uri();//self();//$GLOBALS['REQUEST_URI']; // liens des differentes pages sous forme : 1 2 3 4 $milieu = ''; for ($i = 1; $i <= $num_pages; $i++) { $page_ = supprimer_tags(cs_safebalises(cs_introduire(echappe_retour($pages[$i-1],'CS')))); $title = preg_split("/[\r\n]+/", trim($page_), 2); $title = attribut_html(/*propre*/(couper($title[0], _decoupe_NB_CARACTERES)));//.' (...)'; $milieu .= recuperer_fond('fonds/decoupe_item', array( 'page'=>$i, 'artpage'=>$artpage, 'derniere_page'=>$num_pages, 'title_page'=>_T('couteau:page_lien', array('page' => $i, 'title' => $title)), 'self' =>$self, )); } // pagination finale $pagination = recuperer_fond('fonds/decoupe', array( 'artpage'=>$artpage, 'derniere_page'=>$num_pages, 'items'=>$milieu, 'self' =>$self, )); if ($pagination_seule) { if(trim($pagination)=="") return ""; $pagination = "<div id='decoupe_balise$id_decoupe' class='pagination decoupe_balise'>\n$pagination\n</div>\n"; return $pagination; } // ici $pagination_seule est false, $page est definie $pagination1 = "<div id='decoupe_haut$id_decoupe' class='pagination decoupe_haut'>\n$pagination\n</div>\n"; $pagination2 = "<div id='decoupe_bas$id_decoupe' class='pagination decoupe_bas'>\n$pagination\n</div>\n"; $id_decoupe++; return $sommaire.$pagination1.$page.$pagination2; }
function debusquer_entete($titre, $corps) { global $debug_objets; include_spip('balise/formulaire_admin'); include_spip('public/assembler'); // pour inclure_balise_dynamique include_spip('inc/texte'); // pour corriger_typo return _DOCTYPE_ECRIRE . html_lang_attributes() . "<head>\n<title>" . ('SPIP ' . $GLOBALS['spip_version_affichee'] . ' ' . _T('admin_debug') . ' ' . $titre . ' (' . supprimer_tags(corriger_typo($GLOBALS['meta']['nom_site']))) . ")</title>\n" . "<meta http-equiv='Content-Type' content='text/html" . (($c = $GLOBALS['meta']['charset']) ? "; charset={$c}" : '') . "' />\n" . http_script('', 'jquery.js') . "<link rel='stylesheet' href='" . url_absolue(find_in_path('spip_admin.css')) . "' type='text/css' />" . "</head>\n" . "<body style='margin:0 10px;'>\n" . "<div id='spip-debug-header'>" . $corps . inclure_balise_dynamique(balise_FORMULAIRE_ADMIN_dyn('spip-admin-float', $debug_objets), false) . '</div></body></html>'; }
function selecteur_rubrique_html($id_rubrique, $type, $restreint, $idem=0) { $data = array(); if ($type == 'rubrique') $data[0] = _T('info_racine_site'); if ($type == 'auteur') $data[0] = ' '; # premier choix = neant (rubriques restreintes) // // creer une structure contenant toute l'arborescence // include_spip('base/abstract_sql'); $where = array(); if ($type == 'breve') $where[]= ' id_parent=0 '; if (is_array($restreint) AND $restreint) $where[]= sql_in('id_rubrique', $restreint); $q = sql_select("id_rubrique, id_parent, titre, statut, lang, langue_choisie", "spip_rubriques", join(' AND ', $where), '', "0+titre,titre"); while ($r = sql_fetch($q)) { if (autoriser('voir','rubrique',$r['id_rubrique'])){ // titre largeur maxi a 50 $titre = couper(supprimer_tags(typo($r['titre']))." ", 50); if ($GLOBALS['meta']['multi_rubriques'] == 'oui' AND ($r['langue_choisie'] == "oui" OR $r['id_parent'] == 0)) $titre .= ' ['.traduire_nom_langue($r['lang']).']'; $data[$r['id_rubrique']] = $titre; $enfants[$r['id_parent']][] = $r['id_rubrique']; } } $opt = sous_menu_rubriques($id_rubrique,0, 0,$data,$enfants,$idem, $restreint, $type); $att = " id='id_parent' name='id_parent'\nclass='selecteur_parent verdana1'"; if (preg_match(',^<option[^<>]*value=.(\d*).[^<>]*>([^<]*)</option>$,',$opt,$r)) $r = "<input$att type='hidden' value='" . $r[1] . "' />" . $r[2] ; else $r = "<select$att size='1'>\n$opt</select>\n"; # message pour neuneus (a supprimer ?) # if ($type != 'auteur' AND $type != 'breve') # $r .= "\n<br />"._T('texte_rappel_selection_champs'); return $r; }
/** * Retourne un tableau d'analyse du texte transmis * Cette analyse concerne principalement des statistiques sur les liens * * @param string $texte texte d'entree * @return array rapport d'analyse */ function analyser_spams($texte) { $infos = array('caracteres_utiles' => 0, 'nombre_liens' => 0, 'caracteres_texte_lien_min' => 0); if (!$texte) { return $infos; } // on travaille d'abord sur le texte 'brut' tel que saisi par // l'utilisateur pour ne pas avoir les class= et style= que spip ajoute // sur les raccourcis. // on ne tient pas compte des blocs <code> et <cadre> ni de leurs contenus include_spip("inc/texte_mini"); if (!function_exists('echappe_html')) { // SPIP 2.x include_spip("inc/texte"); } $texte_humain = echappe_html($texte); // on repère dans ce qui reste la présence de style= ou class= qui peuvent // servir à masquer du contenu // les spammeurs utilisent le laxisme des navigateurs pour envoyer aussi style = // soyons donc mefiant // (mais en enlevant le base64 !) $texte_humain = str_replace('class="base64"', '', $texte_humain); $hidden = ",(<(img|object)|\\s(?:style|class)\\s*=[^>]+>),UimsS"; if (preg_match($hidden, $texte_humain)) { // suspicion de spam $infos['contenu_cache'] = true; } include_spip('inc/texte'); $texte = propre($texte); // caracteres_utiles $infos['caracteres_utiles'] = compter_caracteres_utiles($texte, false); // nombre de liens $liens = array_filter(extraire_balises($texte, 'a'), 'pas_lien_ancre'); $infos['nombre_liens'] = count($liens); $infos['liens'] = $liens; // taille du titre de lien minimum if (count($liens)) { // supprimer_tags() s'applique a tout le tableau, // mais attention a verifier dans le temps que ca continue a fonctionner # $titres_liens = array_map('supprimer_tags', $liens); $titres_liens = supprimer_tags($liens); $titres_liens = array_map('strlen', $titres_liens); $infos['caracteres_texte_lien_min'] = min($titres_liens); } return $infos; }
function ajoute_popup_multi($langue_demandee, $trads, $texte) { static $num_multi = 0; global $multi_popup; while (list($lang, $bloc) = each($trads)) { if ($lang != $langue_demandee) { $survol .= "[{$lang}] " . supprimer_tags(couper($bloc, 20)) . "\n"; } $texte_popup .= "<br /><b>" . translate_language_name($lang) . "</b> " . preg_replace("/\n+/", "<br />", supprimer_tags(couper(propre($bloc), 200))); } if ($survol) { $num_multi++; $texte .= " <img src=\"img_pack/langues-modif-12.gif\" alt=\"(multi)\" title=\"{$survol}\" height=\"12\" width=\"12\" border=\"0\" onclick=\"return openmulti({$num_multi})\" />"; $multi_popup .= "textes_multi[{$num_multi}] = '" . addslashes($texte_popup) . "';\n"; } return $texte; }
function nettoyer_raccourcis_typo($texte, $connect='') { $texte = pipeline('nettoyer_raccourcis_typo',$texte); if (preg_match_all(_RACCOURCI_LIEN, $texte, $regs, PREG_SET_ORDER)) foreach ($regs as $reg) { list ($titre,,)= traiter_raccourci_lien_atts($reg[1]); if (!$titre) { $match = typer_raccourci($reg[count($reg)-1]); @list($type,,$id,,,,) = $match; if ($type) { $url = generer_url_entite($id,$type,'','',true); if (is_array($url)) list($type, $id) = $url; $titre = traiter_raccourci_titre($id, $type, $connect); } $titre = $titre ? $titre['titre'] : $match[0]; } $titre = corriger_typo(supprimer_tags($titre)); $texte = str_replace($reg[0], $titre, $texte); } // supprimer les notes $texte = preg_replace(",[[][[]([^]]|[]][^]])*[]][]],UimsS","",$texte); // supprimer les codes typos $texte = str_replace(array('}','{'), '', $texte); // supprimer les tableaux $texte = preg_replace(",(^|\r)\|.*\|\r,s", "\r", $texte); return $texte; }
function tw_traiter_raccourci_notes($letexte, $marqueur_notes) { global $compt_note, $les_notes, $notes_vues; global $ouvre_ref, $ferme_ref; if (strpos($letexte, '[[') === false or !preg_match_all(_RACCOURCI_NOTES_TW, $letexte, $m, PREG_SET_ORDER)) { return array($letexte, array()); } // quand il y a plusieurs series de notes sur une meme page $mn = !$marqueur_notes ? '' : $marqueur_notes . '-'; $mes_notes = array(); foreach ($m as $r) { list($note_source, $note_all, $ref, $nom, $note_texte) = $r; // reperer une note nommee, i.e. entre chevrons // On leve la Confusion avec une balise en regardant // si la balise fermante correspondante existe // Cas pathologique: [[ <a> <a href="x">x</a>]] if (!(isset($nom) and $ref and (strpos($note_texte, '</' . $nom . '>') === false or preg_match(",<{$nom}\\W.*</{$nom}>,", $note_texte)))) { $nom = ++$compt_note; $note_texte = $note_all; } // eliminer '%' pour l'attribut id $ancre = $mn . str_replace('%', '_', rawurlencode($nom)); // ne mettre qu'une ancre par appel de note (XHTML) $att = $notes_vues[$ancre]++ ? '' : " id='nh{$ancre}'"; // creer le popup 'title' sur l'appel de note ## attention : propre() est couteux ! ## utiliser nettoyer_raccourcis_typo() ? if ($title = supprimer_tags(nettoyer_raccourcis_typo($note_texte))) { $title = " title='" . couper($title, 80) . "'"; } // ajouter la note aux notes precedentes if ($note_texte) { $mes_notes[] = array($ancre, $nom, $note_texte); } // dans le texte, mettre l'appel de note a la place de la note if ($nom) { $nom = "{$ouvre_ref}<a href='#nb{$ancre}' class='spip_note' rel='footnote'{$title}{$att}>{$nom}</a>{$ferme_ref}"; } $pos = strpos($letexte, $note_source); $letexte = rtrim(substr($letexte, 0, $pos), ' ') . code_echappement($nom) . substr($letexte, $pos + strlen($note_source)); } return array($letexte, $mes_notes); }
function vignette_automatique($img, $doc, $lien, $x = 0, $y = 0, $align = '', $class = 'spip_logos') { include_spip('inc/distant'); include_spip('inc/texte'); include_spip('inc/filtres_images_mini'); $e = $doc['extension']; if (!$img) { if ($img = image_du_document($doc)) { if (!$x and !$y) { // eviter une double reduction $img = image_reduire($img); } } else { $f = charger_fonction('vignette', 'inc'); $img = $f($e, false); $size = @getimagesize($img); $img = "<img src='{$img}' " . $size[3] . " />"; } } else { $size = @getimagesize($img); $img = "<img src='{$img}' " . $size[3] . " />"; } // on appelle image_reduire independamment de la presence ou non // des librairies graphiques // la fonction sait se debrouiller et faire de son mieux dans tous les cas if ($x or $y) { $img = image_reduire($img, $x, $y); } $img = inserer_attribut($img, 'alt', ''); $img = inserer_attribut($img, 'class', $class); if ($align) { $img = inserer_attribut($img, 'align', $align); } if (!$lien) { return $img; } $titre = supprimer_tags(typo($doc['titre'])); $titre = " - " . taille_en_octets($doc['taille']) . ($titre ? " - {$titre}" : ""); $type = sql_fetsel('titre, mime_type', 'spip_types_documents', "extension = " . sql_quote($e)); $mime = $type['mime_type']; $titre = attribut_html(couper($type['titre'] . $titre, 80)); return "<a href='{$lien}' type='{$mime}' title='{$titre}'>{$img}</a>"; }
function ajouter_tags($matches, $item) { include_spip('inc/filtres'); $tags = array(); foreach ($matches as $match) { $type = ($match[3] == 'category' or $match[3] == 'directory') ? 'directory' : 'tag'; $mot = supprimer_tags($match[0]); if (!strlen($mot) and !strlen($mot = extraire_attribut($match[0], 'label'))) { break; } // rechercher un url if ($url = extraire_attribut($match[0], 'domain')) { // category@domain est la racine d'une url qui se prolonge // avec le contenu text du tag <category> ; mais dans SPIP < 2.0 // on donnait category@domain = #URL_RUBRIQUE, et // text = #TITRE_RUBRIQUE ; d'ou l'heuristique suivante sur le slash if (substr($url, -1) == '/') { $url .= rawurlencode($mot); } } else { if ($url = extraire_attribut($match[0], 'resource') or $url = extraire_attribut($match[0], 'url')) { } else { if (extraire_attribut($match[0], 'scheme') == 'urn:flickr:tags') { foreach (explode(' ', $mot) as $petit) { if ($t = creer_tag($petit, $type, 'http://www.flickr.com/photos/tags/' . rawurlencode($petit) . '/')) { $tags[] = $t; } } $mot = ''; } else { if ($term = extraire_attribut($match[0], 'term')) { if ($scheme = extraire_attribut($match[0], 'scheme')) { $url = suivre_lien($scheme, $term); } else { $url = $term; } } else { # type delicious.com foreach (explode(' ', $mot) as $petit) { if (preg_match(',<rdf\\b[^>]*\\bresource=["\']([^>]*/' . preg_quote(rawurlencode($petit), ',') . ')["\'],i', $item, $m)) { $mot = ''; if ($t = creer_tag($petit, $type, $m[1])) { $tags[] = $t; } } } } } } } if ($t = creer_tag($mot, $type, $url)) { $tags[] = $t; } } return $tags; }
/** * Analyser une URL de site distant, qui peut être une syndication. * * @param string $url * URL du site à analyser * @return array|bool * - array : informations du site * - false : site impossible à récupérer **/ function analyser_site($url) { include_spip('inc/filtres'); include_spip('inc/distant'); // Accepter les URLs au format feed:// ou qui ont oublie le http:// $url = preg_replace(',^feed://,i', 'http://', $url); if (!preg_match(',^[a-z]+://,i', $url)) { $url = 'http://' . $url; } $texte = recuperer_page($url, true); if (!$texte) { return false; } include_spip('inc/syndic'); cdata_echappe($texte, $echappe_cdata); if (preg_match(',<(channel|feed)([\\:[:space:]][^>]*)?' . '>(.*)</\\1>,ims', $texte, $regs)) { $result['syndication'] = 'oui'; $result['url_syndic'] = $url; $channel = $regs[3]; // Pour recuperer l'entete, on supprime tous les items $b = array_merge(extraire_balises($channel, 'item'), extraire_balises($channel, 'entry')); $header = str_replace($b, array(), $channel); if ($t = extraire_balise($header, 'title')) { cdata_echappe_retour($t, $echappe_cdata); $result['nom_site'] = filtrer_entites(supprimer_tags($t)); } if ($t = extraire_balises($header, 'link')) { cdata_echappe_retour($t, $echappe_cdata); foreach ($t as $link) { $u = supprimer_tags(filtrer_entites($link)); if (!strlen($u)) { $u = extraire_attribut($link, 'href'); } if (strlen($u)) { // on installe l'url comme url du site // si c'est non vide, en donnant la priorite a rel=alternate if (preg_match(',\\balternate\\b,', extraire_attribut($link, 'rel')) or !isset($result['url_site'])) { $result['url_site'] = filtrer_entites($u); } } } } $result['url_site'] = url_absolue($result['url_site'], $url); if ($a = extraire_balise($header, 'description') or $a = extraire_balise($header, 'tagline')) { cdata_echappe_retour($a, $echappe_cdata); $result['descriptif'] = filtrer_entites(supprimer_tags($a)); } if (preg_match(',<image.*<url.*>(.*)</url>.*</image>,Uims', $header, $r) and preg_match(',(https?://.*/.*(gif|png|jpg)),ims', $r[1], $r) and $image = recuperer_infos_distantes($r[1])) { if (in_array($image['extension'], array('gif', 'jpg', 'png'))) { $result['format_logo'] = $image['extension']; $result['logo'] = $r[1]; } else { if ($image['fichier']) { spip_unlink($image['fichier']); } } } } else { $result['syndication'] = 'non'; $result['url_site'] = $url; if (preg_match(',<head>(.*(description|title).*)</head>,Uims', $texte, $regs)) { $head = filtrer_entites($regs[1]); } else { $head = $texte; } if (preg_match(',<title[^>]*>(.*),ims', $head, $regs)) { $titre = trim($regs[1]); if (!strlen($titre)) { $titre = substr($head, strpos($head, $regs[0])); } $result['nom_site'] = filtrer_entites(supprimer_tags(preg_replace(',</title>.*$,ims', '', $titre))); } if ($a = array_merge(extraire_balises($head, 'meta'), extraire_balises($head, 'http-equiv'))) { foreach ($a as $meta) { if (extraire_attribut($meta, 'name') == 'description') { $desc = trim(extraire_attribut($meta, 'content')); if (!strlen($desc)) { $desc = trim(extraire_attribut($meta, 'value')); } $result['descriptif'] = $desc; } } } // Cherchons quand meme un backend include_spip('inc/distant'); include_spip('inc/feedfinder'); $feeds = get_feed_from_url($url, $texte); // si on a a trouve un (ou plusieurs) on le note avec select: // ce qui constitue un signal pour exec=sites qui proposera de choisir // si on syndique, et quelle url. if (count($feeds) >= 1) { spip_log("feedfinder.php :\n" . join("\n", $feeds)); $result['url_syndic'] = "select: " . join(' ', $feeds); } } cdata_echappe_retour($result, $echappe_cdata); return $result; }
function afficher_script_statut($id, $type, $n, $img, $statut, $titre, $act = '') { $h = generer_action_auteur("instituer_objet", "{$type}-{$id}-{$statut}"); $h = "selec_statut('{$id}', '{$type}', {$n}, jQuery('img',this).attr('src'), '{$h}');return false;"; $t = supprimer_tags($titre); return "<a href=\"#\" onclick=\"{$h}\" title=\"{$t}\"{$act}>" . http_img_pack($img, $t) . "</a>"; }
/** * Vérifie qu'un nom (d'auteur) ne comporte pas d'autres tags que <multi> * et ceux volontairement spécifiés dans la constante * * @param string $nom * Nom (signature) proposé * @return bool * - false si pas conforme, * - true sinon **/ function nom_acceptable($nom) { if (!is_string($nom)) { return false; } if (!defined('_TAGS_NOM_AUTEUR')) { define('_TAGS_NOM_AUTEUR', ''); } $tags_acceptes = array_unique(explode(',', 'multi,' . _TAGS_NOM_AUTEUR)); foreach ($tags_acceptes as $tag) { if (strlen($tag)) { $remp1[] = '<' . trim($tag) . '>'; $remp1[] = '</' . trim($tag) . '>'; $remp2[] = '\\x60' . trim($tag) . '\\x61'; $remp2[] = '\\x60/' . trim($tag) . '\\x61'; } } $v_nom = str_replace($remp2, $remp1, supprimer_tags(str_replace($remp1, $remp2, $nom))); return str_replace('<', '<', $v_nom) == $nom; }
function BOUCLE_siteshtml_bb1fa8f06f75cd5c61b4de0a063c1a54(&$Cache, &$Pile, &$doublons, &$Numrows, $SP) { static $command = array(); static $connect; $command['connect'] = $connect = ''; if (!isset($command['table'])) { $command['table'] = 'syndic'; $command['id'] = '_sites'; $command['from'] = array('syndic' => 'spip_syndic'); $command['type'] = array(); $command['groupby'] = array(); $command['select'] = array("syndic.nom_site", "syndic.url_site", "syndic.descriptif"); $command['orderby'] = array('syndic.nom_site'); $command['join'] = array(); $command['limit'] = '0,5'; $command['having'] = array(); } $command['where'] = array(quete_condition_statut('syndic.statut', 'publie,prop', 'publie', ''), array('=', 'syndic.syndication', "'non'"), array('=', 'syndic.id_rubrique', sql_quote(@$Pile[0]['id_rubrique'], '', 'bigint(21) NOT NULL DEFAULT \'0\''))); if (defined("_BOUCLE_PROFILER")) { $timer = time() + microtime(); } $t0 = ""; // REQUETE $iter = IterFactory::create("SQL", $command, array('squelettes/inc/inc-syndic.html', 'html_bb1fa8f06f75cd5c61b4de0a063c1a54', '_sites', 52, $GLOBALS['spip_lang'])); if (!$iter->err()) { $SP++; // RESULTATS while ($Pile[$SP] = $iter->fetch()) { $t0 .= ' <li> ' . (($t1 = strval(interdire_scripts(typo(supprimer_numero(calculer_url($Pile[$SP]['url_site'], $Pile[$SP]['nom_site'], 'titre', $connect, false)), "TYPO", $connect, $Pile[0])))) !== '' ? '<a href="' . calculer_url($Pile[$SP]['url_site'], '', 'url', $connect) . '" ' . (($t2 = strval(interdire_scripts(attribut_html(supprimer_tags(propre($Pile[$SP]['descriptif'], $connect, $Pile[0])))))) !== '' ? 'title="' . $t2 . '"' : '') . ' class="spip_out">' . $t1 . '</a>' : '') . ' </li> '; } $iter->free(); } if (defined("_BOUCLE_PROFILER") and 1000 * ($timer = time() + microtime() - $timer) > _BOUCLE_PROFILER) { spip_log(intval(1000 * $timer) . "ms BOUCLE_sites @ squelettes/inc/inc-syndic.html", "profiler" . _LOG_AVERTISSEMENT); } return $t0; }