Beispiel #1
0
function inc_informer_dist($id, $col, $exclus, $rac, $type, $do = 'aff')
{
    include_spip('inc/texte');
    if ($type == "rubrique") {
        $row = sql_fetsel("titre, descriptif", "spip_rubriques", "id_rubrique = {$id}");
        if ($row) {
            $titre = typo($row["titre"]);
            $descriptif = propre($row["descriptif"]);
        } else {
            $titre = _T('info_racine_site');
        }
    } else {
        $titre = '';
    }
    $res = '';
    if ($type == "rubrique" and $GLOBALS['spip_display'] != 1 and isset($GLOBALS['meta']['image_process'])) {
        if ($GLOBALS['meta']['image_process'] != "non") {
            $chercher_logo = charger_fonction('chercher_logo', 'inc');
            if ($res = $chercher_logo($id, 'id_rubrique', 'on')) {
                list($fid, $dir, $nom, $format) = $res;
                include_spip('inc/filtres_images_mini');
                $res = image_reduire("<img src='{$fid}' alt='' />", 100, 48);
                if ($res) {
                    $res = "<div style='float: " . $GLOBALS['spip_lang_right'] . "; margin-" . $GLOBALS['spip_lang_right'] . ": -5px; margin-top: -5px;'>{$res}</div>";
                }
            }
        }
    }
    $rac = spip_htmlentities($rac);
    # ce lien provoque la selection (directe) de la rubrique cliquee
    # et l'affichage de son titre dans le bandeau
    $titre = strtr(str_replace("'", "&#8217;", str_replace('"', "&#34;", textebrut($titre))), "\n\r", "  ");
    $js_func = $do . '_selection_titre';
    return "<div style='display: none;'>" . "<input type='text' id='" . $rac . "_sel' value='{$id}' />" . "<input type='text' id='" . $rac . "_sel2' value=\"" . entites_html($titre) . "\" />" . "</div>" . "<div class='informer' style='padding: 5px; border-top: 0px;'>" . (!$res ? '' : $res) . "<p><b>" . safehtml($titre) . "</b></p>" . (!$descriptif ? '' : "<div>" . safehtml($descriptif) . "</div>") . "<div style='text-align: " . $GLOBALS['spip_lang_right'] . ";'>" . "<input type='submit' class='fondo' value='" . _T('bouton_choisir') . "'\nonclick=\"{$js_func}('{$titre}',{$id},'selection_rubrique','id_parent'); return false;\" />" . "</div>" . "</div>";
}
Beispiel #2
0
function formulaires_login_charger_dist($cible = "", $login = "", $prive = null)
{
    $erreur = _request('var_erreur');
    if (!$login) {
        $login = strval(_request('var_login'));
    }
    // si on est deja identifie
    if (!$login and isset($GLOBALS['visiteur_session']['login'])) {
        $login = $GLOBALS['visiteur_session']['login'];
    }
    // ou si on a un cookie admin
    if (!$login) {
        if (isset($_COOKIE['spip_admin']) and preg_match(",^@(.*)\$,", $_COOKIE['spip_admin'], $regs)) {
            $login = $regs[1];
        }
    }
    include_spip('inc/auth');
    $row = auth_informer_login($login);
    // Construire l'environnement du squelette
    // Ne pas proposer de "rester connecte quelques jours"
    // si la duree de l'alea est inferieure a 12 h (valeur par defaut)
    $valeurs = array('var_login' => $login, 'editable' => !$row, 'cnx' => isset($row['cnx']) ? $row['cnx'] : '', 'auth_http' => login_auth_http(), 'rester_connecte' => _RENOUVELLE_ALEA < 12 * 3600 ? '' : ' ', '_logo' => isset($row['logo']) ? $row['logo'] : '', '_alea_actuel' => isset($row['alea_actuel']) ? $row['alea_actuel'] : '', '_alea_futur' => isset($row['alea_futur']) ? $row['alea_futur'] : '', '_pipeline' => 'affiche_formulaire_login');
    if ($erreur or !isset($GLOBALS['visiteur_session']['id_auteur']) or !$GLOBALS['visiteur_session']['id_auteur']) {
        $valeurs['editable'] = true;
    }
    if (is_null($prive) ? is_url_prive($cible) : $prive) {
        include_spip('inc/autoriser');
        $loge = autoriser('ecrire');
    } else {
        $loge = (isset($GLOBALS['visiteur_session']['auth']) and $GLOBALS['visiteur_session']['auth'] != '');
    }
    // Si on est connecte, appeler traiter()
    // et lancer la redirection si besoin
    if (!$valeurs['editable'] and $loge) {
        $traiter = charger_fonction('traiter', 'formulaires/login');
        $res = $traiter($cible, $login, $prive);
        $valeurs = array_merge($valeurs, $res);
        if (isset($res['redirect']) and $res['redirect']) {
            include_spip('inc/headers');
            # preparer un lien pour quand redirige_formulaire ne fonctionne pas
            $valeurs['_deja_loge'] = inserer_attribut("<a>" . _T('login_par_ici') . "</a>{$m}", 'href', $res['redirect']);
            $m = redirige_formulaire($res['redirect']);
        }
    }
    // en cas d'echec de cookie, inc_auth a renvoye vers le script de
    // pose de cookie ; s'il n'est pas la, c'est echec cookie
    // s'il est la, c'est probablement un bookmark sur bonjour=oui,
    // et pas un echec cookie.
    if ($erreur == 'cookie') {
        $valeurs['echec_cookie'] = ' ';
    } elseif ($erreur) {
        // une erreur d'un SSO indique dans la redirection vers ici
        // mais il faut se proteger de toute tentative d'injection malveilante
        include_spip('inc/texte');
        $valeurs['message_erreur'] = safehtml($erreur);
    }
    return $valeurs;
}
Beispiel #3
0
/**
 * enlever les scripts de html si necessaire
 * on utilise safehtml
 *
 * @param string $file
 * @return array
 */
function medata_html_dist($file)
{
    $meta = array();
    // Securite si pas autorise : virer les scripts et les references externes
    // sauf si on est en mode javascript 'ok' (1), cf. inc_version
    if ($GLOBALS['filtrer_javascript'] < 1 and !autoriser('televerser', 'script')) {
        $texte = spip_file_get_contents($file);
        include_spip('inc/texte');
        $new = trim(safehtml($texte));
        // petit bug safehtml
        if ($new != $texte) {
            ecrire_fichier($file, $new);
        }
    }
    return $meta;
}
Beispiel #4
0
/**
 * Déterminer les dimensions d'un svg, et enlever ses scripts si nécessaire
 *
 * On utilise safehtml qui n'est pas apropriée pour ça en attendant mieux
 * cf http://www.slideshare.net/x00mario/the-image-that-called-me
 * http://heideri.ch/svgpurifier/SVGPurifier/index.php
 *
 * @param string $file
 * @return array Tableau (largeur, hauteur)
 */
function metadata_svg_dist($file)
{
    $meta = array();
    $texte = spip_file_get_contents($file);
    // Securite si pas autorise : virer les scripts et les references externes
    // sauf si on est en mode javascript 'ok' (1), cf. inc_version
    if ($GLOBALS['filtrer_javascript'] < 1 and !autoriser('televerser', 'script')) {
        include_spip('inc/texte');
        $new = trim(safehtml($texte));
        // petit bug safehtml
        if (substr($new, 0, 2) == ']>') {
            $new = ltrim(substr($new, 2));
        }
        if ($new != $texte) {
            ecrire_fichier($file, $texte = $new);
        }
    }
    $width = $height = 150;
    if (preg_match(',<svg[^>]+>,', $texte, $s)) {
        $s = $s[0];
        if (preg_match(',\\WviewBox\\s*=\\s*.\\s*(\\d+)\\s+(\\d+)\\s+(\\d+)\\s+(\\d+),i', $s, $r)) {
            $width = $r[3];
            $height = $r[4];
        } else {
            // si la taille est en centimetre, estimer le pixel a 1/64 de cm
            if (preg_match(',\\Wwidth\\s*=\\s*.(\\d+)([^"\']*),i', $s, $r)) {
                if ($r[2] != '%') {
                    $width = $r[1];
                    if ($r[2] == 'cm') {
                        $width <<= 6;
                    }
                }
            }
            if (preg_match(',\\Wheight\\s*=\\s*.(\\d+)([^"\']*),i', $s, $r)) {
                if ($r[2] != '%') {
                    $height = $r[1];
                    if ($r[2] == 'cm') {
                        $height <<= 6;
                    }
                }
            }
        }
    }
    $meta['largeur'] = $width;
    $meta['hauteur'] = $height;
    return $meta;
}
function BOUCLE_art_syndichtml_bb1fa8f06f75cd5c61b4de0a063c1a54(&$Cache, &$Pile, &$doublons, &$Numrows, $SP)
{
    static $command = array();
    static $connect;
    $command['connect'] = $connect = '';
    if (!isset($command['table'])) {
        $command['table'] = 'syndic_articles';
        $command['id'] = '_art_syndic';
        $command['from'] = array('syndic_articles' => 'spip_syndic_articles', 'L1' => 'spip_syndic');
        $command['type'] = array();
        $command['groupby'] = array();
        $command['select'] = array("syndic_articles.date", "syndic_articles.titre", "syndic_articles.url", "L1.url_site", "L1.nom_site", "syndic_articles.descriptif");
        $command['orderby'] = array('syndic_articles.date DESC');
        $command['join'] = array('L1' => array('syndic_articles', 'id_syndic'));
        $command['limit'] = '0,5';
        $command['having'] = array();
    }
    $command['where'] = array(quete_condition_statut('L1.statut', 'publie,prop', 'publie', ''), quete_condition_statut('syndic_articles.statut', 'publie,prop', 'publie', ''), array('=', 'L1.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', '_art_syndic', 6, $GLOBALS['spip_lang']));
    if (!$iter->err()) {
        $l1 = _T('public|spip|ecrire:form_prop_nom_site');
        $SP++;
        // RESULTATS
        while ($Pile[$SP] = $iter->fetch()) {
            $t0 .= '
            <li>' . (($t1 = strval(interdire_scripts(affdate(normaliser_date($Pile[$SP]['date']))))) !== '' ? '<span>' . $t1 . '</span>' : '') . '
                ' . (($t1 = strval(interdire_scripts(supprimer_numero($Pile[$SP]['titre'])))) !== '' ? '<a href="' . vider_url($Pile[$SP]['url']) . '" ' . (($t2 = strval(interdire_scripts(attribut_html(supprimer_tags(typo(supprimer_numero(calculer_url($Pile[$SP]['url_site'], $Pile[$SP]['nom_site'], 'titre', $connect, false)), "TYPO", $connect, $Pile[0])))))) !== '' ? 'title="' . $l1 . ' : ' . $t2 . '"' : '') . ' class="spip_out">' . $t1 . '</a>' : '') . '
                ' . (($t1 = strval(interdire_scripts(typo(supprimer_numero(calculer_url($Pile[$SP]['url_site'], $Pile[$SP]['nom_site'], 'titre', $connect, false)), "TYPO", $connect, $Pile[0])))) !== '' ? '<span style="text-align: right;"><a href="' . calculer_url($Pile[$SP]['url_site'], '', 'url', $connect) . '" ' . (($t2 = strval(interdire_scripts(attribut_html(supprimer_tags(safehtml($Pile[$SP]['descriptif'])))))) !== '' ? 'title="' . $t2 . '"' : '') . ' class="spip_out" style="text-align: right; color: maroon; margin-top:-.5em">' . $t1 . '</a></span>' : '') . '
            </li>
            ';
        }
        $iter->free();
    }
    if (defined("_BOUCLE_PROFILER") and 1000 * ($timer = time() + microtime() - $timer) > _BOUCLE_PROFILER) {
        spip_log(intval(1000 * $timer) . "ms BOUCLE_art_syndic @ squelettes/inc/inc-syndic.html", "profiler" . _LOG_AVERTISSEMENT);
    }
    return $t0;
}
Beispiel #6
0
function filtre_text_html_dist($t)
{
    if (!preg_match(',^(.*?)<body[^>]*>(.*)</body>,is', $t, $r)) {
        return appliquer_filtre($t, 'text/plain');
    }
    list(, $h, $t) = $r;
    $style = '';
    // recuperer les styles internes
    if (preg_match_all(',<style>(.*?)</style>,is', $h, $r, PREG_PATTERN_ORDER)) {
        $style = join("\n", $r[1]);
    }
    // ... et externes
    include_spip('inc/distant');
    if (preg_match_all(',<link[^>]+type=.text/css[^>]*>,is', $h, $r, PREG_PATTERN_ORDER)) {
        foreach ($r[0] as $l) {
            preg_match("/href='([^']*)'/", str_replace('"', "'", $l), $m);
            $style .= "\n/* {$l} */\n" . str_replace('<', '', recuperer_page($m[1]));
        }
    }
    // Pourquoi SafeHtml transforme-t-il en texte les scripts dans Body ?
    $t = safehtml(preg_replace(',<script' . '.*?</script>,is', '', $t));
    return (!$style ? '' : "\n<style>" . $style . "</style>") . $t;
}
Beispiel #7
0
function afficher_suivi_versions ($debut = 0, $id_secteur = 0, $uniq_auteur = false, $lang = "", $court = false) {
	
	changer_typo($lang);
	$lang_dir = lang_dir($lang);
	$nb_aff = 10;
	$champs = array('surtitre', 'titre', 'soustitre', 'descriptif', 'nom_site', 'url_site', 'chapo', 'texte', 'ps');

	if ($uniq_auteur) {
		$req_where = " AND articles.statut IN ('prepa','prop','publie')"; 
		$req_where .= " AND versions.id_auteur = $uniq_auteur";
	} else {
		$req_where = " AND articles.statut IN ('prop','publie')";
	}
	
	if (strlen($lang) > 0)
		$req_where .= " AND articles.lang=" . sql_quote($lang);

	if ($id_secteur > 0)
		$req_where .= " AND articles.id_secteur = ".intval($id_secteur);

	$req_where = "versions.id_version > 1 $req_where";

	$req_sel = "versions.id_version, versions.id_auteur, versions.date, versions.id_article, articles.statut, articles.titre";

	$req_from = 'spip_versions AS versions LEFT JOIN spip_articles AS articles ON versions.id_article = articles.id_article';

	$revisions = '';
	$items = array();
	$result = sql_select($req_sel, $req_from, $req_where, '', 'versions.date DESC', "$debut, $nb_aff");
	while ($row = sql_fetch($result)) {
			$id_article = $row['id_article'];
			if (autoriser('voir','article',$id_article)){
				$statut = $row['statut'];
				$id_version = $row['id_version'];
				$id_auteur = $row['id_auteur'];
				$date = $row['date'];
				$titre = typo(supprime_img($row['titre'],''));
				
				// l'id_auteur peut etre un numero IP (edition anonyme)
				if ($id_auteur == intval($id_auteur)
				AND $row_auteur = sql_fetsel('nom,email', 'spip_auteurs', "id_auteur = ".sql_quote($id_auteur))) {
					$nom = typo($row_auteur["nom"]);
					$email = $row_auteur['email'];
				} else {
					$nom = $id_auteur;
					$email = '';
				}

				$aff = revisions_bouton($id_article, $id_auteur, $id_version, $titre, $statut, $date, $lang_dir, $nom);
				if (!$court) {
						$bouton_id = "b$id_version-$id_article-$id_auteur";
						$aff = bouton_block_depliable($aff,false,$bouton_id)
						  . debut_block_depliable(false,$bouton_id)
						  . safehtml(revisions_diff ($id_article, $id_version, $court))
						  . fin_block();
				}
				$revisions .= "\n<div class='tr_liste' style='padding: 5px; border-top: 1px solid #aaaaaa;'>$aff</div>";
			}
	}
	if (!$revisions) return '';
	else return 
	  revisions_entete_boite($court, $debut, $id_secteur, $lang, $nb_aff, $req_from, $req_where, $uniq_auteur)
	  . $revisions
	  . fin_block()
	  . fin_cadre();
}
Beispiel #8
0
// which 'quotes' all HTML-tags and special symbols
// from user input
function safehtml($s)
{
    $s = str_replace("&", "&amp;", $s);
    $s = str_replace("<", "&lt;", $s);
    $s = str_replace(">", "&gt;", $s);
    $s = str_replace("'", "&apos;", $s);
    $s = str_replace("\"", "&quot;", $s);
    return $s;
}
if (isset($_POST['description'])) {
    $filename = $_POST['filename'];
    $size = filesize($upload_dir . '/' . $filename);
    $date = date('r', filemtime($upload_dir . '/' . $filename));
    $description = safehtml($_POST['description']);
    // Let's generate file information page
    $html = <<<END
<html><head><title>{$filename} [uploaded by IFRAME Async file uploader]</title></head>
<body>
<h1>{$filename}</h1>
<p>This is a file information page for your uploaded file. Bookmark it, or send to anyone...</p>
<p>Date: {$date}</p>
<p>Size: {$size} bytes</p>
<p>Description: 
<pre>{$description}</pre>
</p>
<p><a href="{$web_upload_dir}/{$filename}" style="font-size: large;">download file</a><br>
<a href="uploadtest.php" style="font-size: small;">back to file uploading</a><br>
<a href="{$web_upload_dir}/upload-log.html" style="font-size: small;">upload-log</a></p>
<br><br>Example by <a href="http://www.anyexample.com/">AnyExample</a>
Beispiel #9
0
/**
 * filtre appliquant les traitements SPIP d'un champ (et eventuellement d'un type d'objet) sur un texte
 * (voir la fonction champs_traitements($p) dans : public/references.php)
 * ce mecanisme est a preferer au traditionnel #TEXTE*|propre
 * traitements_previsu() consulte la globale $table_des_traitements et applique le traitement adequat
 * si aucun traitement n'est trouve, alors propre() est applique
 * 
 * @param string $texte : texte source
 * @param string $nom_champ : champ (en majuscules)
 * @param string $type_objet : objet (en minuscules)
 * @return string : texte traite
 */
function traitements_previsu($texte, $nom_champ='', $type_objet='', $connect=null) {
	include_spip('public/interfaces'); // charger les traitements
	safehtml($t);
	global $table_des_traitements;
	if(!strlen($nom_champ) || !isset($table_des_traitements[$nom_champ])) {
		$texte = propre($texte, $connect);
	}
	else {
		include_spip('base/abstract_sql');
		$table = table_objet($type_objet);
		$ps = $table_des_traitements[$nom_champ];
		if(is_array($ps))
			$ps = $ps[(strlen($table) && isset($ps[$table])) ? $table : 0];
		if(!$ps)
			$texte = propre($texte, $connect);
		else
			// remplacer le placeholder %s par le texte fourni
			eval('$texte=' . str_replace('%s', '$texte', $ps) . ';');
	}
	// il faut toujours securiser le texte preivusalise car il peut contenir n'importe quoi
	// et servir de support a une attaque xss ou vol de cookie admin
	// on ne peut donc se fier au statut de l'auteur connecte car le contenu ne vient pas
	// forcement de lui
	return safehtml($texte);
}
Beispiel #10
0
function controle_forum_boucle($row, $args) {

	$id_forum = $row['id_forum'];
	$forum_id_parent = $row['id_parent'];
	$forum_id_rubrique = $row['id_rubrique'];
	$forum_id_article = $row['id_article'];
	$forum_id_breve = $row['id_breve'];
	$forum_date_heure = $row['date_heure'];
	$forum_titre = echapper_tags($row['titre']);
	$forum_texte = $row['texte'];
	$forum_auteur = echapper_tags(extraire_multi($row['auteur']));
	$forum_email_auteur = echapper_tags($row['email_auteur']);
	$forum_nom_site = echapper_tags($row['nom_site']);
	$forum_url_site = echapper_tags($row['url_site']);
	$forum_stat = $row['statut'];
	$forum_ip = $row['ip'];
	$forum_id_auteur = $row["id_auteur"];

	$r = forum_parent($id_forum);
	$avant = $r['avant'];
	$url = $r['url'];
	$titre = $r['titre'];
	$type = $r['type'];
	$valeur = $r['valeur'];
	$pref = $r['pref'];

	if ($documents = sql_allfetsel('doc.id_document, doc.fichier AS fichier', 'spip_documents AS doc LEFT JOIN spip_documents_liens AS lien ON doc.id_document=lien.id_document', 'lien.id_objet='.intval($id_forum)." AND objet='forum'")) {
		include_spip('inc/documents');
		foreach ($documents as $k => $t) {
			$h = generer_url_entite($t['id_document'], 'document');
			$documents[$k] = "<a href='".$h."'>".basename($t['fichier'])."</a>";
		}
	}

	switch($forum_stat) {
		case 'off':
		case 'privoff':
			$style = " style='border: 2px #ff0000 dashed;'";
			break;
		case 'prop':
			$style = " style='border: 2px yellow solid; background-color: white;'";
			break;
		case 'spam':
			$style = " style='border: 2px black dotted;'";
			break;
		default:
			$style = "";
			break;
	}

	if ($forum_email_auteur) {
		if (email_valide($forum_email_auteur))
			$forum_email_auteur = "<a href='mailto:"
			.htmlspecialchars($forum_email_auteur)
			."?subject=".rawurlencode($forum_titre)."'>".$forum_email_auteur
			."</a>";
		$forum_auteur .= " &mdash; $forum_email_auteur";
	}

	$suite = "\n<br />$avant<b>$pref\n<a href='$url' class='controle'>$titre</a></b>"  
	. "<div class='controle'>".justifier(propre($forum_texte))."</div>";
	include_spip('public/composer');
	if ($forum_notes = safehtml(calculer_notes()))
		$suite .= "<div class='notes controle'>".justifier(safehtml($forum_notes))."</div>";

	if (strlen($forum_url_site) > 10 AND strlen($forum_nom_site) >= 3)
		$suite .= "\n<div style='text-align: left' class='serif'><b><a href='$forum_url_site'>$forum_nom_site</a></b></div>";

	return 	"\n<div><br /><a id='forum$id_forum'></a></div>" .
	  debut_cadre_forum("", true, "", typo($forum_titre)) .
	  "<div$style>" .
	  date_interface($forum_date_heure) .
	  safehtml("<span class='arial2'> / <b>$forum_auteur</b></span>") .
	  boutons_controle_forum($id_forum, $forum_stat, $forum_id_auteur, "$type=$valeur", $forum_ip, 'controle_forum', $args) .
	  safehtml(lignes_longues($suite)) .
	  afficher_forum_mots($id_forum) .
	  join(', ', $documents) .
	  "<div class='nettoyeur'></div></div>".
	  fin_cadre_forum(true);
}
Beispiel #11
0
function inclure_previsu($texte,$titre, $url_site, $nom_site, $ajouter_mot, $doc,
$id_rubrique, $id_forum, $id_article, $id_breve, $id_syndic) {
	global $table_des_traitements;

	$bouton = _T('forum_message_definitif');
	include_spip('public/assembler');
	include_spip('public/composer');

	// appliquer les traitements de #TEXTE a la previsu
	// comme on voit c'est complique... y a peut-etre plus simple ?
	// recuperer les filtres eventuels de 'mes_fonctions.php' sur les balises
	include_spip('public/parametrer');
	$evaltexte = isset($table_des_traitements['TEXTE']['forums'])
		? $table_des_traitements['TEXTE']['forums']
		: $table_des_traitements['TEXTE'][0];
	$evaltexte = '$tmptexte = '.str_replace('%s', '$texte', $evaltexte).';';
	// evaluer...
	eval($evaltexte);

	// supprimer les <form> de la previsualisation
	// (sinon on ne peut pas faire <cadre>...</cadre> dans les forums)
	return preg_replace("@<(/?)form\b@ism",
			    '<\1div',
		inclure_balise_dynamique(array('formulaires/inc-forum_previsu',
		      0,
		      array(
			'titre' => safehtml(typo($titre)),
			'texte' => $tmptexte,
			'notes' => safehtml(calculer_notes()),
			'url_site' => vider_url($url_site),
			'nom_site' => safehtml(typo($nom_site)),
			'ajouter_mot' => (is_array($ajouter_mot) ? $ajouter_mot : array($ajouter_mot)),
			'ajouter_document' => $doc,
			'erreur' => $erreur,
			'bouton' => $bouton,
			'id_rubrique' => $id_rubrique,
			'id_forum' => $id_forum,
			'id_article' => $id_article,
			'id_breve' => $id_breve,
			'id_syndic' => $id_syndic
			)
		), false));
}
Beispiel #12
0
        $id = $item['id'];
        $filename = strip_tags($item['filename']);
        $added = strip_tags(date("d/m/Y H:i:s", $item['added']));
        $descr = format_comment($item['description'] . "\n");
        $seeders = strip_tags($item['seeders']);
        $leechers = strip_tags($item['leechers']);
        // output to browser
        ?>

  <item>
  <title><![CDATA[<?php 
        print htmlspecialchars("[" . TORRENT . "] " . $filename);
        ?>
]]></title>
  <description><![CDATA[<?php 
        print $descr . " (" . SEEDERS . " " . safehtml($seeders) . " -- " . LEECHERS . " " . safehtml($leechers);
        ?>
)]]></description>
  <link><?php 
        print $BASEURL;
        ?>
/index.php?page=torrent-details&amp;id=<?php 
        print $id;
        ?>
</link>
  <pubDate><?php 
        print $added;
        ?>
</pubDate>
  </item>
/**
 * Filtre appliquant les traitements SPIP d'un champ
 *
 * Applique les filtres prévus sur un champ (et eventuellement un type d'objet)
 * sur un texte donné. Sécurise aussi le texte en appliquant safehtml().
 *
 * Ce mécanisme est à préférer au traditionnel #TEXTE*|propre
 *
 * traitements_previsu() consulte la globale $table_des_traitements et
 * applique le traitement adequat. Si aucun traitement n'est trouvé,
 * alors propre() est appliqué.
 *
 * @package SPIP\PortePlume\Fonctions
 * @see champs_traitements() dans public/references.php
 * @global table_des_traitements
 *
 * @param string $texte
 *     Texte source
 * @param string $nom_champ
 *     Nom du champ (nom de la balise, en majuscules)
 * @param string $type_objet
 *     L'objet a qui appartient le champ (en minuscules)
 * @param string $connect
 *     Nom du connecteur de base de données
 * @return string
 *     Texte traité avec les filtres déclarés pour le champ.
 */
function traitements_previsu($texte, $nom_champ = '', $type_objet = '', $connect = null)
{
    include_spip('public/interfaces');
    // charger les traitements
    global $table_des_traitements;
    if (!strlen($nom_champ) || !isset($table_des_traitements[$nom_champ])) {
        $texte = propre($texte, $connect);
    } else {
        include_spip('base/abstract_sql');
        $table = table_objet($type_objet);
        $ps = $table_des_traitements[$nom_champ];
        if (is_array($ps)) {
            $ps = $ps[strlen($table) && isset($ps[$table]) ? $table : 0];
        }
        if (!$ps) {
            $texte = propre($texte, $connect);
        } else {
            // [FIXME] Éviter une notice sur le eval suivant qui ne connait
            // pas la Pile ici. C'est pas tres joli...
            $Pile = array(0 => array());
            // remplacer le placeholder %s par le texte fourni
            eval('$texte=' . str_replace('%s', '$texte', $ps) . ';');
        }
    }
    // il faut toujours securiser le texte prévisualisé car il peut contenir n'importe quoi
    // et servir de support a une attaque xss ou vol de cookie admin
    // on ne peut donc se fier au statut de l'auteur connecté car le contenu ne vient pas
    // forcément de lui
    return safehtml($texte);
}
/**
 * Si le html contenu dans un texte ne passe pas sans transformation a travers safehtml
 * on l'echappe
 * si safehtml ne renvoie pas la meme chose on echappe les < en &lt; pour montrer le contenu brut
 *
 * @param string $texte
 * @return string
 */
function echapper_html_suspect($texte)
{
    if (strpos($texte, '<') === false or strpos($texte, '=') === false) {
        return $texte;
    }
    // on teste sur strlen car safehtml supprime le contenu dangereux
    // mais il peut aussi changer des ' en " sur les attributs html,
    // donc un test d'egalite est trop strict
    if (strlen(safehtml($texte)) !== strlen($texte)) {
        $texte = str_replace("<", "&lt;", $texte);
    }
    return $texte;
}
Beispiel #15
0
        $postid = (int) $item['postid'];
        $forum = strip_tags($item['name']);
        $subject = strip_tags($item['subject']);
        $added = strip_tags(date("d/m/Y H:i:s", $item['added']));
        $body = format_comment("[b]Author: " . security::html_safe($item['username']) . "[/b]\n\n" . security::html_safe($item['body']) . "\n");
        // output to browser
        $link = security::html_safe($BASEURL . "/forum.php?action=viewtopic&topicid=" . $topicid . "&page=p" . $postid . "#" . $postid);
        ?>

        <item>
        <title><?php 
        print safehtml("[" . FORUM . "] " . $forum . " - " . $subject);
        ?>
</title>
        <description><?php 
        print safehtml($body);
        ?>
</description>
        <link><?php 
        print $link;
        ?>
</link>
        <pubDate><?php 
        print $added;
        ?>
</pubDate>
        </item>

       <?php 
    }
}
Beispiel #16
0
/**
 * Preparer la previsu d'un message de forum
 *
 * http://code.spip.net/@inclure_previsu
 *
 * @param string $texte
 * @param string $titre
 * @param string $url_site
 * @param string $nom_site
 * @param array $ajouter_mot
 * @param array $doc
 * @param string $objet
 * @param int $id_objet
 * @param int $id_forum
 * @return string
 */
function inclure_previsu($texte, $titre, $url_site, $nom_site, $ajouter_mot, $doc, $objet, $id_objet, $id_forum)
{
    global $table_des_traitements;
    $bouton = _T('forum:forum_message_definitif');
    include_spip('public/assembler');
    include_spip('public/composer');
    // appliquer les traitements de #TEXTE a la previsu
    // comme on voit c'est complique... y a peut-etre plus simple ?
    // recuperer les filtres eventuels de 'mes_fonctions.php' sur les balises
    include_spip('public/parametrer');
    $tmptexte = "";
    $evaltexte = isset($table_des_traitements['TEXTE']['forums']) ? $table_des_traitements['TEXTE']['forums'] : $table_des_traitements['TEXTE'][0];
    $evaltexte = '$tmptexte = ' . str_replace('%s', '$texte', $evaltexte) . ';';
    // evaluer...
    // [fixme]
    // $connect et $Pile ne sont pas definis ici :/
    // mais font souvent partie des variables appelees par les traitements
    $connect = "";
    $Pile = array(0 => array());
    eval($evaltexte);
    // supprimer les <form> de la previsualisation
    // (sinon on ne peut pas faire <cadre>...</cadre> dans les forums)
    return preg_replace("@<(/?)form\\b@ism", '<\\1div', inclure_balise_dynamique(array('formulaires/inc-forum_previsu', 0, array('titre' => safehtml(typo($titre)), 'texte' => $tmptexte, 'notes' => safehtml(calculer_notes()), 'url_site' => vider_url($url_site), 'nom_site' => safehtml(typo($nom_site)), 'ajouter_mot' => is_array($ajouter_mot) ? $ajouter_mot : array($ajouter_mot), 'ajouter_document' => $doc, 'bouton' => $bouton, 'objet' => $objet, 'id_objet' => $id_objet, 'id_forum' => $id_forum)), false));
}
Beispiel #17
0
function afficher_forum_auteur($row)
{
	$titre=$row['titre'];
	$id_auteur=$row["id_auteur"];
	$date_heure=$row['date_heure'];
	$email_auteur=$row['email_auteur'];
	$auteur= extraire_multi($row['auteur']);

	if ($id_auteur) {
		$formater_auteur = charger_fonction('formater_auteur', 'inc');
		$res = join(' ',$formater_auteur($id_auteur));
	} else {
		if ($email_auteur) {
			if (email_valide($email_auteur))
				$email_auteur = "<a href='mailto:"
				.htmlspecialchars($email_auteur)
				."?subject=".rawurlencode($titre)."'>".$email_auteur
				."</a>";
			$auteur .= " &mdash; $email_auteur";
		}
		$res = safehtml("<span class='arial2'> / <b>$auteur</b></span>");
	}
	return "<div style='font-weight: normal;'>"
	  . date_interface($date_heure)
	  . "&nbsp;&nbsp;$res</div>";
}
function inclure_forum_prive_previsu($texte, $titre, $url_site, $nom_site, $ajouter_mot, $doc = "")
{
    $bouton = _T('forum:forum_message_definitif');
    include_spip('public/assembler');
    include_spip('public/composer');
    // supprimer les <form> de la previsualisation
    // (sinon on ne peut pas faire <cadre>...</cadre> dans les forums)
    return preg_replace("@<(/?)form\\b@ism", '<\\1div', inclure_balise_dynamique(array('formulaires/inc-forum_prive_previsu', 0, array('titre' => safehtml(typo($titre)), 'texte' => safehtml(propre($texte)), 'notes' => safehtml(calculer_notes()), 'url_site' => vider_url($url_site), 'nom_site' => safehtml(typo($nom_site)), 'ajouter_mot' => is_array($ajouter_mot) ? $ajouter_mot : array($ajouter_mot), 'ajouter_document' => $doc, 'bouton' => $bouton)), false));
}
Beispiel #19
0
function verifier_visiteur()
{
    // Rq: pour que cette fonction marche depuis mes_options
    // il faut forcer l'init si ce n'est fait
    // mais on risque de perturber des plugins en initialisant trop tot
    // certaines constantes
    @spip_initialisation_core(_DIR_RACINE . _NOM_PERMANENTS_INACCESSIBLES, _DIR_RACINE . _NOM_PERMANENTS_ACCESSIBLES, _DIR_RACINE . _NOM_TEMPORAIRES_INACCESSIBLES, _DIR_RACINE . _NOM_TEMPORAIRES_ACCESSIBLES);
    // Demarrer une session NON AUTHENTIFIEE si on donne son nom
    // dans un formulaire sans login (ex: #FORMULAIRE_FORUM)
    // Attention on separe bien session_nom et nom, pour eviter
    // les melanges entre donnees SQL et variables plus aleatoires
    $variables_session = array('session_nom', 'session_email');
    foreach ($variables_session as $var) {
        if (_request($var) !== null) {
            $init = true;
            break;
        }
    }
    if (isset($init)) {
        #@spip_initialisation_suite();
        $session = charger_fonction('session', 'inc');
        $session();
        include_spip('inc/texte');
        foreach ($variables_session as $var) {
            if (($a = _request($var)) !== null) {
                $GLOBALS['visiteur_session'][$var] = safehtml($a);
            }
        }
        if (!isset($GLOBALS['visiteur_session']['id_auteur'])) {
            $GLOBALS['visiteur_session']['id_auteur'] = 0;
        }
        $session($GLOBALS['visiteur_session']);
        return 0;
    }
    $h = (isset($_SERVER['PHP_AUTH_USER']) and !$GLOBALS['ignore_auth_http']);
    if ($h or isset($_COOKIE['spip_session']) or isset($_COOKIE[$GLOBALS['cookie_prefix'] . '_session'])) {
        $session = charger_fonction('session', 'inc');
        if ($session()) {
            return $GLOBALS['visiteur_session']['statut'];
        }
        if ($h and isset($_SERVER['PHP_AUTH_PW'])) {
            include_spip('inc/auth');
            $h = lire_php_auth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']);
        }
        if ($h) {
            $GLOBALS['visiteur_session'] = $h;
            return $GLOBALS['visiteur_session']['statut'];
        }
    }
    // au moins son navigateur nous dit la langue preferee de cet inconnu
    include_spip('inc/lang');
    utiliser_langue_visiteur();
    return false;
}
Beispiel #20
0
function glossaire_safe($texte) {
	// on retire les notes avant propre()
	return safehtml(propre(preg_replace(', *\[\[(.*?)\]\],msS', '', nl2br(trim($texte)))));
}