Example #1
0
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;
}
Example #2
0
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;
}
Example #3
0
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;
}
Example #4
0
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;
}
Example #5
0
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;
}
Example #6
0
/**
 * 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;
}
Example #7
0
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 : '';
}
Example #8
0
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()
Example #9
0
/**
 * 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] = '&nbsp;';
    }
    //
    // 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;
}
Example #10
0
function couper($texte, $taille = 50, $suite = '&nbsp;(...)')
{
    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;
}
Example #11
0
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 = '&nbsp;(...)';
    // 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;
}
Example #12
0
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;
}
Example #13
0
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>&nbsp;: "
		: '' )
		. _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>';
}
Example #14
0
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&nbsp;" ;

	$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");
}
Example #15
0
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>";
}
Example #16
0
function nettoyer_titre_email($titre)
{
    $titre = preg_replace("/\n/", ' ', supprimer_tags($titre));
    return $titre;
}
Example #17
0
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&amp;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>";
 }
Example #18
0
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;" >&nbsp; &nbsp;</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;
}
Example #19
0
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>';
}
Example #20
0
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] = '&nbsp;'; # 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;
}
Example #21
0
/**
 * 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;
}
Example #22
0
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;
}
Example #23
0
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;
}
Example #24
0
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);
}
Example #25
0
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>";
}
Example #26
0
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;
}
Example #27
0
/**
 * 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>";
}
Example #29
0
/**
 * 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('&lt;', '<', $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;
}