Exemple #1
0
function tw_traiter_autoliens($r)
{
    if (count($r) < 2) {
        return reset($r);
    }
    list($tout, $l) = $r;
    if (!$l) {
        return $tout;
    }
    // reperer le protocole
    if (preg_match(',^(https?):/*,S', $l, $m)) {
        $l = substr($l, strlen($m[0]));
        $protocol = $m[1];
    } else {
        $protocol = 'http';
    }
    // valider le nom de domaine
    if (!preg_match(_EXTRAIRE_DOMAINE, $l)) {
        return $tout;
    }
    // les ponctuations a la fin d'une URL n'en font certainement pas partie
    // en particulier le "|" quand elles sont dans un tableau a la SPIP
    preg_match('/^(.*?)([,.;?|]?)$/', $l, $k);
    $url = $protocol . '://' . $k[1];
    $lien = charger_fonction('lien', 'inc');
    // deux fois <html> car inc_lien echappe un coup et restaure ensuite
    // => un perd 1 <html>
    $r = $lien($url, "<html><html>{$url}</html></html>", '', '', '', 'nofollow') . $k[2];
    // ajouter la class auto
    $r = inserer_attribut($r, 'class', trim(extraire_attribut($r, 'class') . ' auto'));
    // si l'original ne contenait pas le 'http:' on le supprime du clic
    return $m ? $r : str_replace('>http://', '>', $r);
}
function BOUCLE_documents_portfoliohtml_4dc0f36e18dd7a26ebc382429cbc9835(&$Cache, &$Pile, &$doublons, &$Numrows, $SP)
{
    static $command = array();
    static $connect;
    $command['connect'] = $connect = '';
    $doublons_index = array();
    $in = array();
    $in[] = 'png';
    $in[] = 'jpg';
    $in[] = 'gif';
    // Initialise le(s) critère(s) doublons
    if (!isset($doublons[$d = 'documents'])) {
        $doublons[$d] = '';
    }
    if (!isset($command['table'])) {
        $command['table'] = 'documents';
        $command['id'] = '_documents_portfolio';
        $command['from'] = array('documents' => 'spip_documents', 'L1' => 'spip_documents_liens', 'L2' => 'spip_types_documents');
        $command['type'] = array();
        $command['groupby'] = array();
        $command['select'] = array("0+documents.titre AS num", "documents.date", "documents.id_document", "L2.mime_type", "L1.id_objet AS id_rubrique", "documents.titre", "documents.fichier");
        $command['orderby'] = array('num', 'documents.date');
        $command['join'] = array('L1' => array('documents', 'id_document'), 'L2' => array('documents', 'extension'));
        $command['limit'] = '';
        $command['having'] = array();
    }
    $command['where'] = array(quete_condition_statut('documents.statut', 'publie,prop,prepa', 'publie', ''), array('(documents.taille > 0 OR documents.distant=\'oui\')'), array('=', 'L1.id_objet', sql_quote(@$Pile[0]['id_rubrique'], '', 'bigint(21) NOT NULL DEFAULT \'0\'')), array('=', 'L1.objet', sql_quote('rubrique')), array('=', 'documents.mode', "'document'"), sql_in('documents.extension', sql_quote($in)), array('=', 'L1.vu', "'non'"), array(sql_in('documents.id_document', $doublons[$doublons_index[] = 'documents'], 'NOT')));
    if (defined("_BOUCLE_PROFILER")) {
        $timer = time() + microtime();
    }
    $t0 = "";
    // REQUETE
    $iter = IterFactory::create("SQL", $command, array('squelettes/inc/inc-rub-documents.html', 'html_4dc0f36e18dd7a26ebc382429cbc9835', '_documents_portfolio', 2, $GLOBALS['spip_lang']));
    if (!$iter->err()) {
        $SP++;
        // RESULTATS
        while ($Pile[$SP] = $iter->fetch()) {
            foreach ($doublons_index as $k) {
                $doublons[$k] .= "," . $Pile[$SP]['id_document'];
            }
            // doublons
            $t0 .= ($t1 = strval(vider_url(urlencode_1738(generer_url_entite($Pile[$SP]['id_document'], 'document', '', '', true))))) !== '' ? '
		<a href="' . $t1 . ('" type="' . interdire_scripts($Pile[$SP]['mime_type']) . '" onclick="location.href=\'' . parametre_url(vider_url(urlencode_1738(generer_url_entite($Pile[$SP]['id_rubrique'], 'rubrique', '', '', true))), 'id_document', $Pile[$SP]['id_document']) . '#documents_portfolio\';return false;"' . (($t2 = strval(interdire_scripts(@$Pile[0]['exposer']))) !== '' ? ' class="' . $t2 . '"' : '') . (($t2 = strval(interdire_scripts(couper(attribut_html(traiter_doublons_documents($doublons, typo(supprimer_numero($Pile[$SP]['titre']), "TYPO", $connect, $Pile[0]))), '80')))) !== '' ? ' title="' . $t2 . '"' : '') . '>' . interdire_scripts(inserer_attribut(inserer_attribut(filtrer('image_graver', filtrer('image_reduire', copie_locale(get_spip_doc($Pile[$SP]['fichier'])), '0', '100')), 'class', 'spip_vignette_portfolio'), 'alt', interdire_scripts(couper(attribut_html(traiter_doublons_documents($doublons, typo(supprimer_numero($Pile[$SP]['titre']), "TYPO", $connect, $Pile[0]))), '80')))) . '</a>
	') : '';
        }
        $iter->free();
    }
    if (defined("_BOUCLE_PROFILER") and 1000 * ($timer = time() + microtime() - $timer) > _BOUCLE_PROFILER) {
        spip_log(intval(1000 * $timer) . "ms BOUCLE_documents_portfolio @ squelettes/inc/inc-rub-documents.html", "profiler" . _LOG_AVERTISSEMENT);
    }
    return $t0;
}
/**
 * Afficher l'arborescence du dossier squelette
 *
 * @param string $path_base
 * @param string $current_file
 * @return string
 */
function skeleditor_afficher_dir_skel($path_base,$current_file) {
	include_spip('inc/skeleditor');
	include_spip('inc/presentation');
	$file_list = skeleditor_files_editables($path_base);
	$current_file = substr($current_file,strlen($path_base));

  $output = "<div id='arbo'><div class='dir'>\n";
	$init_dir = $current_dir = "";
	foreach($file_list as $file){
		$dir = substr(dirname($file),strlen($path_base));
		$file = substr($file,strlen($path_base));

		if ($dir != $current_dir)
			$output .= skeleditor_tree_open_close_dir($current_dir,$dir,$current_file);

		$class="fichier";
		$readonly = false;
		if (!is_writable($path_base.$dir) OR !is_writable($path_base.$file)) {
			$readonly = true;
			$class .= " readonly";
		}

		$class .= ($file==$current_file?" on":'');

		$icon = "file";
		if (preg_match(',('._SE_EXTENSIONS_IMG.')$,',$file))
			$icon = "image";

		include_spip('inc/filtres_images_mini');
		$cadenas = ($readonly) ? "&nbsp;".inserer_attribut(image_reduire(chemin_image('cadenas-16.png'),12),'title',attribut_html(_T('texte_inc_meta_2'))) : "";

		$output .= "<a href='".generer_url_ecrire('skeleditor','f='.urlencode($f=$path_base.$file))."' class='$class'
			onclick=\"jQuery('#contenu > :first').ajaxReload({history:true,args:{f:'$f'}});return false;\">"
			. "<img src='"._DIR_PLUGIN_SKELEDITOR."images/se-$icon-16.png' alt='$icon' /> "
			.basename($file)
			.$cadenas
			. "</a>"
			;
	}
	$output .= skeleditor_tree_open_close_dir($current_dir,$init_dir,$current_file);
  $output .= "</div></div>\n";
  return $output;
}
function filtre_photoswipe_preparer($texte)
{
    foreach (extraire_balises($texte, 'img') as $img) {
        if ($src = extraire_attribut($img, 'src') and !extraire_attribut($img, 'data-photo')) {
            $l = largeur($img);
            $h = hauteur($img);
            if ($l > 500 or $h > 300) {
                // pour echapper à la ligne de filtres_images_lib_mini qui remplace tout:
                // `$tag = str_replace($src,$surcharge['src'],$tag);`
                $photo_src = str_replace('.', '__.__', $src);
                $img2 = inserer_attribut($img, 'data-photo', $photo_src);
                $img2 = inserer_attribut($img2, 'data-photo-w', $l);
                $img2 = inserer_attribut($img2, 'data-photo-h', $h);
                $texte = str_replace($img, $img2, $texte);
            }
        }
    }
    return $texte;
}
Exemple #5
0
function image_select($img,$width_min=0, $height_min=0, $width_max=10000, $height_max=1000){
	if (!$img) return $img;
	list ($h,$l) = taille_image($img);
	$select = true;
	if ($l<$width_min OR $l>$width_max OR $h<$height_min OR $h>$height_max)
		$select = false;

	$class = extraire_attribut($img,'class');
	$p = strpos($class,'no_image_filtrer');
	if (($select==false) AND ($p===FALSE)){
		$class .= " no_image_filtrer";
		$img = inserer_attribut($img,'class',$class);
	}
	if (($select==true) AND ($p!==FALSE)){
		$class = preg_replace(",\s*no_image_filtrer,","",$class);
		$img = inserer_attribut($img,'class',$class);
	}
	return $img;
}
function remplace_points_de_suite($texte, $id, $racc) {
	if (strpos($texte, _INTRODUCTION_CODE) === false) return $texte;
	// precaution sur le tout paragrapher de SPIP >= 2.0 !
	$mem = $GLOBALS['toujours_paragrapher'];  
	$GLOBALS['toujours_paragrapher'] = false;  
	// des points de suite bien propres
	@define('_INTRODUCTION_SUITE', '&nbsp;(...)');
	$intro_suite = propre(_INTRODUCTION_SUITE);
	// si les points de suite sont cliquables
	if ($id && _INTRODUCTION_LIEN == 1) {
		$url = (defined('_SPIP19300') && test_espace_prive())
			?generer_url_entite_absolue($id, $racc, '', '', true):"$racc$id";
		if (substr($intro_suite, 0, 6) == '<br />') 
			$intro_suite = propre("<br />[".substr($intro_suite, 6)."->$url]");
			else $intro_suite = propre("&nbsp;[{$intro_suite}->$url]");
		$intro_suite = inserer_attribut($intro_suite, 'class', extraire_attribut($intro_suite,'class') . ' pts_suite');
	}
	$GLOBALS['toujours_paragrapher'] = $mem; 
	return str_replace(_INTRODUCTION_CODE, $intro_suite, $texte);
}
/**
 * Crée l'affichage des listes de rubriques dans le privé
 *
 * @param int $collection
 *  L'identifiant numérique de la rubrique à lister
 * @param int $debut
 *  Le numéro de la pagination si paginé (> 500)
 * @param int $limite
 *  Le pas de pagination si paginé (> 500)
 * @return array $res
 *  Un tableau des sous rubriques
 */
function enfant_rub($collection, $debut = 0, $limite = 500)
{
    $voir_logo = (isset($GLOBALS['meta']['image_process']) and $GLOBALS['meta']['image_process'] != "non");
    $logo = "";
    if ($voir_logo) {
        $chercher_logo = charger_fonction('chercher_logo', 'inc');
        include_spip('inc/filtres_images_mini');
    }
    $res = array();
    $result = sql_select("id_rubrique, id_parent, titre, descriptif, lang ", "spip_rubriques", "id_parent={$collection}", '', '0+titre,titre', "{$debut},{$limite}");
    while ($row = sql_fetch($result)) {
        $id_rubrique = $row['id_rubrique'];
        $id_parent = $row['id_parent'];
        $titre = generer_info_entite($id_rubrique, 'rubrique', 'titre');
        // pour etre sur de passer par tous les traitements
        if ('' !== ($rang = recuperer_numero($row['titre']))) {
            $rang = "{$rang}. ";
        }
        if (autoriser('voir', 'rubrique', $id_rubrique)) {
            $les_sous_enfants = sous_enfant_rub($id_rubrique);
            changer_typo($row['lang']);
            $lang_dir = lang_dir($row['lang']);
            $descriptif = propre($row['descriptif']);
            if ($voir_logo) {
                if ($logo = $chercher_logo($id_rubrique, 'id_rubrique', 'on')) {
                    list($fid, $dir, $nom, $format) = $logo;
                    $logo = image_reduire("<img src='{$fid}' alt='' />", 48, 36);
                    if ($logo) {
                        $logo = inserer_attribut($logo, 'class', 'logo');
                    }
                }
            }
            $lib_bouton = (!acces_restreint_rubrique($id_rubrique) ? "" : http_img_pack('auteur-0minirezo-16.png', '', " width='16' height='16'", _T('image_administrer_rubrique'))) . " <a dir='{$lang_dir}'" . ($row['lang'] !== $GLOBALS['spip_lang'] ? " hreflang='" . $row['lang'] . "'" : '') . " href='" . generer_url_entite($id_rubrique, 'rubrique') . "'>" . $rang . $titre . "</a>";
            $titre = (is_string($logo) ? $logo : '') . bouton_block_depliable($lib_bouton, $les_sous_enfants ? false : -1, "enfants{$id_rubrique}");
            $res[] = debut_cadre_sous_rub($id_parent ? "rubrique-24.png" : "secteur-24.png", true, "", $titre) . (!$descriptif ? '' : "\n<div class='descriptif'>{$descriptif}</div>") . $les_sous_enfants . fin_cadre_sous_rub(true);
        }
    }
    changer_typo($GLOBALS['spip_lang']);
    # remettre la typo de l'interface pour la suite
    return $res;
}
Exemple #8
0
function image_select($img, $width_min = 0, $height_min = 0, $width_max = 10000, $height_max = 1000)
{
    if (!$img) {
        return $img;
    }
    list($h, $l) = taille_image($img);
    $select = true;
    if ($l < $width_min or $l > $width_max or $h < $height_min or $h > $height_max) {
        $select = false;
    }
    $class = extraire_attribut($img, 'class');
    $p = strpos($class, 'filtre_inactif');
    if ($select == false and $p === FALSE) {
        $class .= " filtre_inactif";
        $img = inserer_attribut($img, 'class', $class);
    }
    if ($select == true and $p !== FALSE) {
        // no_image_filtrer : historique, a virer
        $class = preg_replace(",\\s*(filtre_inactif|no_image_filtrer),", "", $class);
        $img = inserer_attribut($img, 'class', $class);
    }
    return $img;
}
Exemple #9
0
function plugin_resume($info, $dir_plugins, $plug_file, $url_page)
{
	$desc = plugin_propre($info['description']);
	$dir = $dir_plugins.$plug_file;
	if (($p=strpos($desc, "<br />"))!==FALSE)
		$desc = substr($desc, 0,$p);
	$url = parametre_url($url_page, "plugin", $dir);

	if (isset($info['icon']) and $i = trim($info['icon'])) {
		include_spip("inc/filtres_images_mini");
		$i = inserer_attribut(image_reduire("$dir/$i", 32),'alt','');
		$i = "<div class='icon'><a href='$url' rel='info'>$i</a></div>";
	} else $i = '';

	return "<div class='resume'>"
	. "<h3 class='nom'><a href='$url' rel='info'>"
	. typo($info['nom'])
	. "</a></h3>"
	. " <span class='version'>".$info['version']."</span>"
	. " <span class='etat'> - "
	. plugin_etat_en_clair($info['etat'])
	. "</span>"
	. "<div class='short'>".couper($desc,70)."</div>"
	. $i
	. "</div>";

}
Exemple #10
0
function plugin_resume($info, $dir_plugins, $plug_file, $url_page)
{
    $prefix = $info['prefix'];
    $dir = "{$dir_plugins}{$plug_file}";
    $slogan = PtoBR(plugin_propre($info['slogan'], "{$dir}/lang/paquet-{$prefix}"));
    // une seule ligne dans le slogan : couper si besoin
    if (($p = strpos($slogan, "<br />")) !== FALSE) {
        $slogan = substr($slogan, 0, $p);
    }
    // couper par securite
    $slogan = couper($slogan, 80);
    $nom = plugin_nom($info, $dir_plugins, $plug_file);
    $url = parametre_url($url_page, "plugin", substr($dir, strlen(_DIR_RACINE)));
    if (isset($info['logo']) and $i = trim($info['logo'])) {
        include_spip("inc/filtres_images_mini");
        $i = inserer_attribut(image_reduire("{$dir}/{$i}", 32), 'alt', '');
        $i = "<div class='icon'><a href='{$url}' rel='info'>{$i}</a></div>";
    } else {
        $i = '';
    }
    return "<div class='resume'>" . "<h3><a href='{$url}' rel='info'>" . $nom . "</a></h3>" . " <span class='version'>" . $info['version'] . "</span>" . " <span class='etat'> - " . plugin_etat_en_clair($info['etat']) . "</span>" . "<div class='short'>" . $slogan . "</div>" . $i . "</div>";
}
/**
 * Massicoter un logo
 *
 * Traitement automatique sur les balises #LOGO_*
 *
 * @param string $fichier : Le logo
 *
 * @return string : Un logo massicoté
 */
function massicoter_logo($logo, $objet_type = null, $id_objet = null, $role = null, $env = null)
{
    include_spip('inc/filtres');
    if (!$logo) {
        return $logo;
    }
    $src = extraire_attribut($logo, 'src');
    $alt = extraire_attribut($logo, 'alt');
    $classes = extraire_attribut($logo, 'class');
    $onmouseover = extraire_attribut($logo, 'onmouseover');
    $onmouseout = extraire_attribut($logo, 'onmouseout');
    /* S'il n'y a pas d'id_objet, on essaie de le deviner avec le nom du
       fichier, c'est toujours mieux que rien. Sinon on abandonne… */
    if (is_null($id_objet)) {
        $objet = massicot_trouver_objet_logo($src);
        /* Si le plugin roles_documents est activé, l'objet n'est pas forcément
         * devinable via le nom de fichier (notamment avec la balise
         * LOGO_ARTICLE_RUBRIQUE). Dans ce cas on essaie de bidouiller un truc
         * avec l'environnement. */
        if (test_plugin_actif('roles_documents') and $env) {
            if (isset($env['id_article'])) {
                $objet = array('objet' => 'article', 'id_objet' => $env['id_article']);
            } elseif (isset($env['id_rubrique'])) {
                $objet = array('objet' => 'rubrique', 'id_objet' => $env['id_rubrique']);
            }
        }
        if (is_null($objet)) {
            return $logo;
        }
        $objet_type = $objet['objet'];
        $id_objet = $objet['id_objet'];
    }
    $parametres = massicot_get_parametres($objet_type, $id_objet, $role);
    $fichier = massicoter_fichier($src, $parametres);
    if ($onmouseout) {
        $onmouseout = str_replace($src, $fichier, $onmouseout);
    }
    if ($onmouseover) {
        $src_off = preg_replace('/^.*[\']([^\']+)[\']/', '$1', $onmouseover);
        $parametres_off = massicot_get_parametres($objet_type, $id_objet, 'logo_survol');
        $fichier_off = massicoter_fichier($src_off, $parametres_off);
        $onmouseover = str_replace($src_off, $fichier_off, $onmouseover);
    }
    $balise_img = charger_filtre('balise_img');
    $balise = $balise_img($fichier, $alt, $classes);
    $balise = inserer_attribut($balise, 'onmouseover', $onmouseover);
    $balise = inserer_attribut($balise, 'onmouseout', $onmouseout);
    return $balise;
}
/**
 * Attraper automatiquement toutes les .less ou .less.css du head
 * les compiler, et les remplacer par leur css compilee
 *
 * @param string $head
 * @return string
 */
function lesscss_cssify_head($head)
{
    $url_base = url_de_base();
    $balises = extraire_balises($head, 'link');
    $files = array();
    foreach ($balises as $s) {
        if (extraire_attribut($s, 'rel') === 'stylesheet' and (!($type = extraire_attribut($s, 'type')) or $type == 'text/css') and $src = extraire_attribut($s, 'href') and preg_match(",\\.(less\\.css|less)(\\?\\d+)?\$,", $src) and $src = preg_replace(",\\?\\d+\$,", "", $src) and $src = preg_replace(",^{$url_base},", _DIR_RACINE, $src) and file_exists($src)) {
            $files[$s] = $src;
        }
    }
    if (!count($files)) {
        return $head;
    }
    foreach ($files as $s => $lessfile) {
        $cssfile = less_css($lessfile);
        $m = @filemtime($cssfile);
        $s2 = inserer_attribut($s, "href", "{$cssfile}?{$m}");
        $head = str_replace($s, $s2, $head);
    }
    return $head;
}
Exemple #13
0
function echappe_retour($letexte, $source = '', $filtre = "")
{
    if (strpos($letexte, "base64{$source}")) {
        # spip_log(spip_htmlspecialchars($letexte));  ## pour les curieux
        $max_prof = 5;
        while (strpos($letexte, "<") !== false and preg_match_all(',<(span|div)\\sclass=[\'"]base64' . $source . '[\'"]\\s(.*)>\\s*</\\1>,UmsS', $letexte, $regs, PREG_SET_ORDER) and $max_prof--) {
            foreach ($regs as $reg) {
                $rempl = base64_decode(extraire_attribut($reg[0], 'title'));
                // recherche d'attributs supplementaires
                $at = array();
                foreach (array('lang', 'dir') as $attr) {
                    if ($a = extraire_attribut($reg[0], $attr)) {
                        $at[$attr] = $a;
                    }
                }
                if ($at) {
                    $rempl = '<' . $reg[1] . '>' . $rempl . '</' . $reg[1] . '>';
                    foreach ($at as $attr => $a) {
                        $rempl = inserer_attribut($rempl, $attr, $a);
                    }
                }
                if ($filtre) {
                    $rempl = $filtre($rempl);
                }
                $letexte = str_replace($reg[0], $rempl, $letexte);
            }
        }
    }
    return $letexte;
}
/**
 * Réduit une image
 *
 * @uses extraire_attribut()
 * @uses inserer_attribut()
 * @uses _image_valeurs_trans()
 * @uses _image_ratio()
 * @uses _image_tag_changer_taille()
 * @uses _image_ecrire_tag()
 * @uses _image_creer_vignette()
 *
 * @param array $fonction
 *     Un tableau à 2 éléments :
 *     1) string : indique le nom du filtre de traitement demandé (par exemple : `image_reduire`) ;
 *     2) array : tableau reprenant la valeur de `$img` et chacun des arguments passés au filtre utilisé.
 * @param string $img
 *     Chemin de l'image ou texte contenant une balise img
 * @param int $taille
 *     Largeur désirée
 * @param int $taille_y
 *     Hauteur désirée
 * @param bool $force
 * @param bool $cherche_image
 *     Inutilisé
 * @param string $process
 *     Librairie graphique à utiliser (gd1, gd2, netpbm, convert, imagick).
 *     AUTO utilise la librairie sélectionnée dans la configuration.
 * @return string
 *     Code HTML de la balise img produite
 **/
function process_image_reduire($fonction, $img, $taille, $taille_y, $force, $cherche_image, $process = 'AUTO')
{
    $image = false;
    if ($process == 'AUTO' and isset($GLOBALS['meta']['image_process'])) {
        $process = $GLOBALS['meta']['image_process'];
    }
    # determiner le format de sortie
    $format_sortie = false;
    // le choix par defaut sera bon
    if ($process == "netpbm") {
        $format_sortie = "jpg";
    } elseif ($process == 'gd1' or $process == 'gd2') {
        $image = _image_valeurs_trans($img, "reduire-{$taille}-{$taille_y}", $format_sortie, $fonction);
        // on verifie que l'extension choisie est bonne (en principe oui)
        $gd_formats = explode(',', $GLOBALS['meta']["gd_formats"]);
        if (is_array($image) and (!in_array($image['format_dest'], $gd_formats) or $image['format_dest'] == 'gif' and !function_exists('ImageGif'))) {
            if ($image['format_source'] == 'jpg') {
                $formats_sortie = array('jpg', 'png', 'gif');
            } else {
                $formats_sortie = array('png', 'jpg', 'gif');
            }
            // Choisir le format destination
            // - on sauve de preference en JPEG (meilleure compression)
            // - pour le GIF : les GD recentes peuvent le lire mais pas l'ecrire
            # bug : gd_formats contient la liste des fichiers qu'on sait *lire*,
            # pas *ecrire*
            $format_sortie = "";
            foreach ($formats_sortie as $fmt) {
                if (in_array($fmt, $gd_formats)) {
                    if ($fmt != "gif" or function_exists('ImageGif')) {
                        $format_sortie = $fmt;
                    }
                    break;
                }
            }
            $image = false;
        }
    }
    if (!is_array($image)) {
        $image = _image_valeurs_trans($img, "reduire-{$taille}-{$taille_y}", $format_sortie, $fonction);
    }
    if (!is_array($image) or !$image['largeur'] or !$image['hauteur']) {
        spip_log("image_reduire_src:pas de version locale de {$img}");
        // on peut resizer en mode html si on dispose des elements
        if ($srcw = extraire_attribut($img, 'width') and $srch = extraire_attribut($img, 'height')) {
            list($w, $h) = _image_ratio($srcw, $srch, $taille, $taille_y);
            return _image_tag_changer_taille($img, $w, $h);
        }
        // la on n'a pas d'infos sur l'image source... on refile le truc a css
        // sous la forme style='max-width: NNpx;'
        return inserer_attribut($img, 'style', "max-width: {$taille}px; max-height: {$taille_y}px");
    }
    // si l'image est plus petite que la cible retourner une copie cachee de l'image
    if ($image['largeur'] <= $taille && $image['hauteur'] <= $taille_y) {
        if ($image['creer']) {
            @copy($image['fichier'], $image['fichier_dest']);
        }
        return _image_ecrire_tag($image, array('src' => $image['fichier_dest']));
    }
    if ($image['creer'] == false && !$force) {
        return _image_ecrire_tag($image, array('src' => $image['fichier_dest'], 'width' => $image['largeur_dest'], 'height' => $image['hauteur_dest']));
    }
    if (in_array($image["format_source"], array('jpg', 'gif', 'png'))) {
        $destWidth = $image['largeur_dest'];
        $destHeight = $image['hauteur_dest'];
        $logo = $image['fichier'];
        $date = $image["date_src"];
        $preview = _image_creer_vignette($image, $taille, $taille_y, $process, $force);
        if ($preview && $preview['fichier']) {
            $logo = $preview['fichier'];
            $destWidth = $preview['width'];
            $destHeight = $preview['height'];
            $date = $preview['date'];
        }
        // dans l'espace prive mettre un timestamp sur l'adresse
        // de l'image, de facon a tromper le cache du navigateur
        // quand on fait supprimer/reuploader un logo
        // (pas de filemtime si SAFE MODE)
        $date = test_espace_prive() ? '?' . $date : '';
        return _image_ecrire_tag($image, array('src' => "{$logo}{$date}", 'width' => $destWidth, 'height' => $destHeight));
    } else {
        return $img;
    }
}
Exemple #15
0
function vider_attribut($balise, $attribut)
{
    return inserer_attribut($balise, $attribut, '', false, true);
}
Exemple #16
0
	function input($spec = 'ligne', $attrs = array()) {
		if ($this->controleur) {
			return $this->fond($spec);
		}
		include_spip('inc/filtres');
		$return = '';
		foreach ($this->texts as $champ => $val) {
			$type = is_array($spec) ? $spec[$champ]['type'] : $spec;
			switch ($type) {
				case 'texte':
					$id = uniqid('wid');
					$input = '<textarea style="width:100%;" class="crayon-active"'
					. ' name="content_'.$this->key.'_'.$champ.'" id="'.$id.'">'
					. "\n"
					. entites_html($val)
					. "</textarea>\n";
					break;
				case 'ligne':
				default:
					$input = '<input class="crayon-active text" type="text"'
					. ' name="content_'.$this->key.'_'.$champ.'"'
					. ' value="'
					. entites_html($val)
					. '" />'."\n";
			}
			if (is_array($spec) && isset($spec[$champ]['attrs'])) {
				foreach ($spec[$champ]['attrs'] as $attr=>$val) {
					$input = inserer_attribut($input, $attr, $val);
				}
			}

			foreach ($attrs as $attr=>$val) {
				$input = inserer_attribut($input, $attr, $val);
			}

			// petit truc crado pour mettre la barre typo si demandee
			// pour faire propre il faudra reprogrammer la bt en jquery
			$meta_crayon = unserialize($GLOBALS['meta']['crayons']);
			if ($meta_crayon['barretypo']
			AND $type == 'texte') {
				// Pas la peine de mettre cette barre si PortePlume est la
				if (function_exists('chercher_filtre')
				AND $f = chercher_filtre('info_plugin')
				AND !$f('PORTE_PLUME','est_actif')) {
					include_spip('inc/barre');
					$input = "<div style='width:".$this->largeur."px;height:23px;'>"
						. (function_exists('afficher_barre')
							? afficher_barre("document.getElementById('$id')")
							: '')
						. '</div>'
						. $input;
				}
			}

			$return .= $input;
		}
		return $return;
	}
Exemple #17
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>";
}
/**
 * Transforme les URLs relatives en URLs absolues
 *
 * Ne s'applique qu'aux textes contenant des liens
 *
 * @filtre
 * @uses url_absolue()
 * @link http://www.spip.net/4126
 *
 * @param string $texte Texte
 * @param string $base URL de base de destination (par défaut ce sera l'URL de notre site)
 * @return string Texte avec des URLs absolues
 **/
function liens_absolus($texte, $base = '')
{
    if (preg_match_all(',(<(a|link|image|img|script)\\s[^<>]*(href|src)=[^<>]*>),imsS', $texte, $liens, PREG_SET_ORDER)) {
        if (!function_exists('extraire_attribut')) {
            include_spip('inc/filtres');
        }
        foreach ($liens as $lien) {
            foreach (array('href', 'src') as $attr) {
                $href = extraire_attribut($lien[0], $attr);
                if (strlen($href) > 0) {
                    if (!preg_match(';^((?:[a-z]{3,7}:)?//);iS', $href)) {
                        $abs = url_absolue($href, $base);
                        if (rtrim($href, '/') !== rtrim($abs, '/') and !preg_match('/^#/', $href)) {
                            $texte_lien = inserer_attribut($lien[0], $attr, $abs);
                            $texte = str_replace($lien[0], $texte_lien, $texte);
                        }
                    }
                }
            }
        }
    }
    return $texte;
}
/**
 * Embarquer le 'src' d'une balise html en URI Scheme
 *
 * Experimental
 *
 * @param string $img
 *     Code HTML d'une image
 * @param int $maxsize
 *     Taille maximale des fichiers à traiter
 * @return string
 *     Code HTML de l'image, avec la source en URI Scheme si cela a été possible.
 */
function filtre_embarque_src($img, $maxsize = 4096)
{
    $src = extraire_attribut($img, 'src');
    if ($src2 = filtre_embarque_fichier($src, "", $maxsize) and $src2 != $src) {
        $img = inserer_attribut($img, 'src', $src2);
    }
    return $img;
}
Exemple #20
0
function creer_tag($mot,$type,$url) {
	if (!strlen($mot = trim($mot))) return '';
	$mot = "<a rel=\"tag\">$mot</a>";
	if ($url)
		$mot = inserer_attribut($mot, 'href', $url);
	if ($type)
		$mot = inserer_attribut($mot, 'rel', $type);
	return $mot;
}
/**
 * Ajouter enclosure sur un lien mp3
 *
 * @param $regs
 * @return mixed|string
 */
function player_enclose_link($regs)
{
    $rel = extraire_attribut($regs[0], 'rel');
    $rel = ($rel ? "{$rel} " : "") . "enclosure";
    return inserer_attribut($regs[0], 'rel', $rel);
}
Exemple #22
0
function afficher_liste_listes_plugins() {
	if (!is_array($flux = @unserialize($GLOBALS['meta']['syndic_plug'])))
		return '';

	if (count($flux)){
		$ret = '<h3>'._T('plugin_info_automatique_liste').'</h3><ul class="liste-items">';
			//$ret .= '<li>'._T('plugin_info_automatique_liste_officielle').'</li>';
		foreach ($flux as $url => $c) {
			$a = '<div class="actions">[<a href="'.parametre_url(
				generer_action_auteur('charger_plugin', 'supprimer_flux'),'supprimer_flux', $url).'">'._T('lien_supprimer').'</a>]</div>';
			$time = @filemtime(_DIR_TMP.'syndic_plug_'.md5($url).'.txt');
			$ret .= '<li class="item">'.inserer_attribut(PtoBR(propre("[->$url]")),'title',$url).' ('._T('plugins_compte',array('count' => $c)).') '
							.($time?"<div class='small'>" . _T('info_derniere_syndication').' '.affdate(date('Y-m-d H:i:s',$time)) ."</div>":'')
							. $a .'</li>';
		}
		$ret .= '</ul>';
	
		$ret .= '<div style="text-align:'.$GLOBALS['spip_lang_right'].'"><a href="'.parametre_url(
										  generer_action_auteur('charger_plugin', 'update_flux'),'update_flux', 'oui').'">'._T('plugin_info_automatique_liste_update').'</a></div>';
	}

	return $ret;
}
Exemple #23
0
function creer_tag($mot, $type, $url)
{
    if (!strlen($mot = trim($mot))) {
        return '';
    }
    $mot = "<a rel=\"tag\">{$mot}</a>";
    if ($url) {
        $mot = inserer_attribut($mot, 'href', $url);
    }
    if ($type) {
        $mot = inserer_attribut($mot, 'rel', $type);
    }
    return $mot;
}
Exemple #24
0
function formulaires_login_traiter_dist($cible="",$login="",$prive=null){
	$res = array();
	// Si on se connecte dans l'espace prive, 
	// ajouter "bonjour" (repere a peu pres les cookies desactives)
	if (is_null($prive) ? is_url_prive($cible) : $prive) {
		$cible = parametre_url($cible, 'bonjour', 'oui', '&');
	}
	if ($cible=='@page_auteur')
		$cible = generer_url_entite($GLOBALS['auteur_session']['id_auteur'],'auteur');

	if ($cible) {
		$cible = parametre_url($cible, 'var_login', '', '&');

		// transformer la cible absolue en cible relative
		// pour pas echouer quand la meta adresse_site est foireuse
		if (strncmp($cible,$u = url_de_base(),strlen($u))==0){
			$cible = "./".substr($cible,strlen($u));
		}

		// si c'est une url absolue, refuser la redirection
		// sauf si cette securite est levee volontairement par le webmestre
		elseif (tester_url_absolue($cible) AND !defined('_AUTORISER_LOGIN_ABS_REDIRECT')) {
			$cible = "";
		}
	}


	// Si on est admin, poser le cookie de correspondance
	if ($GLOBALS['auteur_session']['statut'] == '0minirezo') {
		include_spip('inc/cookie');
		spip_setcookie('spip_admin', '@'.$GLOBALS['auteur_session']['login'],
		time() + 7 * 24 * 3600);
	}

	// Si on est connecte, envoyer vers la destination
	if ($cible AND ($cible!=self())) {
		if (!headers_sent() AND !$_GET['var_mode']) {
			include_spip('inc/headers');
			$res['redirect'] = $cible;
		} else {
			$res['message_ok'] .= inserer_attribut(
				"<a>" . _T('login_par_ici') . "</a>",
				'href', $cible
			);
		}
	}
	return $res;
}
function produire_image_typo()
{
    /*
    arguments autorises:
    
    $texte : le texte a transformer; attention: c'est toujours le premier argument, et c'est automatique dans les filtres
    $couleur : la couleur du texte dans l'image - pas de dieze
    $police: nom du fichier de la police (inclure terminaison)
    $largeur: la largeur maximale de l'image ; attention, l'image retournee a une largeur inferieure, selon les limites reelles du texte
    $hauteur_ligne: la hauteur de chaque ligne de texte si texte sur plusieurs lignes
    (equivalent a "line-height")
    $padding: forcer de l'espace autour du placement du texte; necessaire pour polices a la con qui "depassent" beaucoup de leur boite 
    $align: alignement left, right, center
    */
    /**
     * On définit les variables par défaut
     */
    $variables_defaut = array('align' => false, 'police' => '', 'largeur' => 0, 'hauteur_ligne' => 0, 'padding' => 0);
    // Recuperer les differents arguments
    $numargs = func_num_args();
    $arg_list = func_get_args();
    $texte = $arg_list[0];
    for ($i = 1; $i < $numargs; $i++) {
        if (($p = strpos($arg_list[$i], "=")) !== false) {
            $nom_variable = substr($arg_list[$i], 0, $p);
            $val_variable = substr($arg_list[$i], $p + 1);
            $variable["{$nom_variable}"] = $val_variable;
        }
    }
    $variable = array_merge($variables_defaut, $variable);
    // Construire requete et nom fichier
    $text = str_replace("&nbsp;", "~", $texte);
    $text = preg_replace(",(\r|\n)+,ms", " ", $text);
    include_spip('inc/charsets');
    $text = html2unicode(strip_tags($text));
    if (strlen($text) == 0) {
        return "";
    }
    $taille = $variable["taille"];
    if ($taille < 1) {
        $taille = 16;
    }
    $couleur = couleur_html_to_hex($variable["couleur"]);
    if (strlen($couleur) < 6) {
        $couleur = "000000";
    }
    $alt = $texte;
    $align = $variable["align"];
    if (!$variable["align"]) {
        $align = "left";
    }
    $police = $variable["police"];
    if (strlen($police) < 2) {
        $police = "dustismo.ttf";
    }
    $largeur = $variable["largeur"];
    if ($largeur < 5) {
        $largeur = 600;
    }
    if ($variable["hauteur_ligne"] > 0) {
        $hauteur_ligne = $variable["hauteur_ligne"];
    } else {
        $hauteur_ligne = 0;
    }
    if ($variable["padding"] > 0) {
        $padding = $variable["padding"];
    } else {
        $padding = 0;
    }
    $string = "{$text}-{$taille}-{$couleur}-{$align}-{$police}-{$largeur}-{$hauteur_ligne}-{$padding}";
    $query = md5($string);
    $dossier = sous_repertoire(_DIR_VAR, 'cache-texte');
    $fichier = "{$dossier}{$query}.png";
    $flag_gd_typo = function_exists("imageftbbox") && function_exists('imageCreateTrueColor');
    if (@file_exists($fichier)) {
        $image = $fichier;
    } else {
        if (!$flag_gd_typo) {
            return $texte;
        } else {
            $font = find_in_path('polices/' . $police);
            if (!$font) {
                spip_log(_T('fichier_introuvable', array('fichier' => $police)));
                $font = find_in_path('polices/' . "dustismo.ttf");
            }
            $imgbidon = imageCreateTrueColor($largeur, 45);
            $retour = printWordWrapped($imgbidon, $taille + 5, 0, $largeur, $font, $couleur, $text, $taille, 'left', $hauteur_ligne);
            $hauteur = $retour["height"];
            $largeur_reelle = $retour["width"];
            $espace = $retour["espace"];
            imagedestroy($imgbidon);
            $im = imageCreateTrueColor($largeur_reelle - $espace + 2 * $padding, $hauteur + 5 + 2 * $padding);
            imagealphablending($im, false);
            imagesavealpha($im, true);
            // Creation de quelques couleurs
            $grey2 = imagecolorallocatealpha($im, hexdec("0x{" . substr($couleur, 0, 2) . "}"), hexdec("0x{" . substr($couleur, 2, 2) . "}"), hexdec("0x{" . substr($couleur, 4, 2) . "}"), 127);
            ImageFilledRectangle($im, 0, 0, $largeur_reelle + 2 * $padding, $hauteur + 5 + 2 * $padding, $grey2);
            // Le texte a dessiner
            printWordWrapped($im, $taille + 5 + $padding, $padding, $largeur, $font, $couleur, $text, $taille, $align, $hauteur_ligne);
            // Utiliser imagepng() donnera un texte plus claire,
            // compare a l'utilisation de la fonction imagejpeg()
            _image_gd_output($im, array('fichier_dest' => $fichier, 'format_dest' => 'png'));
            imagedestroy($im);
            $image = $fichier;
        }
    }
    $dimensions = getimagesize($image);
    $largeur = $dimensions[0];
    $hauteur = $dimensions[1];
    return inserer_attribut("<img src='{$image}' width='{$largeur}' height='{$hauteur}' style='width:" . $largeur . "px;height:" . $hauteur . "px;' />", 'alt', $alt);
}
/**
 * Calcule le modele et retourne la mini-page ainsi calculee
 *
 * http://code.spip.net/@inclure_modele
 *
 * @param $type string Nom du modele
 * @param $id int
 * @param $params array Paramètres du modèle
 * @param $lien array Informations du lien entourant l'appel du modèle en base de données
 * @param $connect string
 * @param $env array
 * @staticvar string $compteur
 * @return string
 */
function inclure_modele($type, $id, $params, $lien, $connect = '', $env = array())
{
    static $compteur;
    if (++$compteur > 10) {
        return '';
    }
    # ne pas boucler indefiniment
    $type = strtolower($type);
    $fond = $class = '';
    $params = array_filter(explode('|', $params));
    if ($params) {
        list(, $soustype) = each($params);
        $soustype = strtolower(trim($soustype));
        if (in_array($soustype, array('left', 'right', 'center', 'ajax'))) {
            list(, $soustype) = each($params);
            $soustype = strtolower($soustype);
        }
        if (preg_match(',^[a-z0-9_]+$,', $soustype)) {
            if (!trouve_modele($fond = $type . '_' . $soustype)) {
                $fond = '';
                $class = $soustype;
            }
            // enlever le sous type des params
            $params = array_diff($params, array($soustype));
        }
    }
    // Si ca marche pas en precisant le sous-type, prendre le type
    if (!$fond and !trouve_modele($fond = $type)) {
        spip_log("Modele {$type} introuvable", _LOG_INFO_IMPORTANTE);
        return false;
    }
    $fond = 'modeles/' . $fond;
    // Creer le contexte
    $contexte = $env;
    $contexte['dir_racine'] = _DIR_RACINE;
    # eviter de mixer un cache racine et un cache ecrire (meme si pour l'instant les modeles ne sont pas caches, le resultat etant different il faut que le contexte en tienne compte
    // Le numero du modele est mis dans l'environnement
    // d'une part sous l'identifiant "id"
    // et d'autre part sous l'identifiant de la cle primaire
    // par la fonction id_table_objet,
    // (<article1> =>> article =>> id_article =>> id_article=1)
    $_id = id_table_objet($type);
    $contexte['id'] = $contexte[$_id] = $id;
    if (isset($class)) {
        $contexte['class'] = $class;
    }
    // Si un lien a ete passe en parametre, ex: [<modele1>->url] ou [<modele1|title_du_lien{hreflang}->url]
    if ($lien) {
        # un eventuel guillemet (") sera reechappe par #ENV
        $contexte['lien'] = str_replace("&quot;", '"', $lien['href']);
        $contexte['lien_class'] = $lien['class'];
        $contexte['lien_mime'] = $lien['mime'];
        $contexte['lien_title'] = $lien['title'];
        $contexte['lien_hreflang'] = $lien['hreflang'];
    }
    // Traiter les parametres
    // par exemple : <img1|center>, <emb12|autostart=true> ou <doc1|lang=en>
    $arg_list = creer_contexte_de_modele($params);
    $contexte['args'] = $arg_list;
    // on passe la liste des arguments du modeles dans une variable args
    $contexte = array_merge($contexte, $arg_list);
    // Appliquer le modele avec le contexte
    $retour = recuperer_fond($fond, $contexte, array(), $connect);
    // Regarder si le modele tient compte des liens (il *doit* alors indiquer
    // spip_lien_ok dans les classes de son conteneur de premier niveau ;
    // sinon, s'il y a un lien, on l'ajoute classiquement
    if (strstr(' ' . ($classes = extraire_attribut($retour, 'class')) . ' ', 'spip_lien_ok')) {
        $retour = inserer_attribut($retour, 'class', trim(str_replace(' spip_lien_ok ', ' ', " {$classes} ")));
    } else {
        if ($lien) {
            $retour = "<a href='" . $lien['href'] . "' class='" . $lien['class'] . "'>" . $retour . "</a>";
        }
    }
    $compteur--;
    return (isset($arg_list['ajax']) and $arg_list['ajax'] == 'ajax') ? encoder_contexte_ajax($contexte, '', $retour) : $retour;
}
/**
 * Inserer un champ nobot au hasard dans le form
 * et crypter tous les name
 * @param string $texte
 */
function nospam_inserer_nobot(&$texte)
{
    if (false === strpos($texte, 'name="email_nobot"') and false !== ($pos = strpos($texte, '</form>'))) {
        // essayer de s'inserer au hasard entre 2 div/li du form
        if (preg_match_all(",<(div|li)\\b[^>]*class=['\"]editer[^>]*,ims", $texte, $m) and $i = rand(0, count($m[0]) - 1) and $p = strpos($texte, $m[0][$i])) {
            $nobot = recuperer_fond("inclure/nobot", array('email_nobot' => '', 'div' => $m[1][$i]));
            $texte = substr_replace($texte, $nobot, $p, 0);
        } else {
            $nobot = recuperer_fond("inclure/nobot", array('email_nobot' => ''));
            $texte = str_replace('</form>', $nobot . '</form>', $texte);
        }
    }
    if (_SPAM_ENCRYPT_NAME) {
        // recuperer toutes les balises input, textarea, select
        $balises = array_merge(extraire_balises($texte, 'input'));
        foreach ($balises as $k => $b) {
            if (in_array(extraire_attribut($b, "type"), array("hidden", "file"))) {
                unset($balises[$k]);
            }
        }
        $balises = array_merge($balises, extraire_balises($texte, 'textarea'), extraire_balises($texte, 'select'));
        $key = "";
        if (preg_match(",<input type='hidden' name='_jeton' value='([^>]*)' />,Uims", $texte, $m)) {
            $key = $m[1];
        }
        foreach ($balises as $k => $b) {
            if ($name = extraire_attribut($b, "name") and strncmp($name, "session_", 8) !== 0) {
                // cas des truc[chose] : on ne brouille que truc
                $crypted_name = explode("[", $name);
                $crypted_name[0] = nospam_name_encode($crypted_name[0], $key);
                $crypted_name = implode("[", $crypted_name);
                $b_e = inserer_attribut($b, "name", $crypted_name);
                $texte = str_replace($b, $b_e, $texte);
            }
        }
    }
}
Exemple #28
0
function liens_absolus($texte, $base = '')
{
    if (preg_match_all(',(<(a|link|image|img|script)\\s[^<>]*(href|src)=[^<>]*>),imsS', $texte, $liens, PREG_SET_ORDER)) {
        foreach ($liens as $lien) {
            foreach (array('href', 'src') as $attr) {
                $href = extraire_attribut($lien[0], $attr);
                if (strlen($href) > 0) {
                    $abs = url_absolue($href, $base);
                    if ($href != $abs and !preg_match('/^#/', $href)) {
                        $texte_lien = inserer_attribut($lien[0], $attr, $abs);
                        $texte = str_replace($lien[0], $texte_lien, $texte);
                    }
                }
            }
        }
    }
    return $texte;
}
Exemple #29
0
function formulaires_login_traiter_dist($cible = "", $login = "", $prive = null)
{
    $res = array();
    // Si on se connecte dans l'espace prive,
    // ajouter "bonjour" (repere a peu pres les cookies desactives)
    if (is_null($prive) ? is_url_prive($cible) : $prive) {
        $cible = parametre_url($cible, 'bonjour', 'oui', '&');
    }
    if ($cible == '@page_auteur') {
        $cible = generer_url_entite($GLOBALS['auteur_session']['id_auteur'], 'auteur');
    }
    if ($cible) {
        $cible = parametre_url($cible, 'var_login', '', '&');
        // transformer la cible absolue en cible relative
        // pour pas echouer quand la meta adresse_site est foireuse
        if (strncmp($cible, $u = url_de_base(), strlen($u)) == 0) {
            $cible = "./" . substr($cible, strlen($u));
        } elseif (tester_url_absolue($cible) and !defined('_AUTORISER_LOGIN_ABS_REDIRECT')) {
            $cible = "";
        }
    }
    // Si on est connecte, envoyer vers la destination
    if ($cible and $cible != self()) {
        if (!headers_sent() and !$_GET['var_mode']) {
            include_spip('inc/headers');
            $res['redirect'] = $cible;
        } else {
            $res['message_ok'] = inserer_attribut("<a>" . _T('login_par_ici') . "</a>", 'href', $cible);
        }
    }
    return $res;
}
function BOUCLE_annonces_arthtml_d7ab7eee0b09f43b71ae8cf8a6406a91(&$Cache, &$Pile, &$doublons, &$Numrows, $SP)
{
    static $command = array();
    static $connect;
    $command['connect'] = $connect = '';
    if (!isset($command['table'])) {
        $command['table'] = 'articles';
        $command['id'] = '_annonces_art';
        $command['from'] = array('articles' => 'spip_articles', 'L1' => 'spip_mots_liens', 'L2' => 'spip_mots');
        $command['type'] = array();
        $command['groupby'] = array("articles.id_article");
        $command['select'] = array("articles.date", "articles.id_article", "articles.descriptif", "articles.titre", "articles.surtitre", "articles.soustitre", "articles.lang");
        $command['orderby'] = array('articles.date DESC');
        $command['join'] = array('L1' => array('articles', 'id_objet', 'id_article', 'L1.objet=' . sql_quote('article')), 'L2' => array('L1', 'id_mot'));
        $command['limit'] = '';
        $command['having'] = array();
    }
    $command['where'] = array(quete_condition_statut('articles.statut', 'publie,prop,prepa/auteur', 'publie', ''), array('=', 'articles.lang', sql_quote($GLOBALS['spip_lang'], '', 'varchar(10) NOT NULL DEFAULT \'\'')), array('=', 'L2.titre', "'Annonce'"));
    if (defined("_BOUCLE_PROFILER")) {
        $timer = time() + microtime();
    }
    $t0 = "";
    // REQUETE
    $iter = IterFactory::create("SQL", $command, array('squelettes/inc/inc-annonces.html', 'html_d7ab7eee0b09f43b71ae8cf8a6406a91', '_annonces_art', 97, $GLOBALS['spip_lang']));
    if (!$iter->err()) {
        lang_select($GLOBALS['spip_lang']);
        $SP++;
        // RESULTATS
        while ($Pile[$SP] = $iter->fetch()) {
            lang_select_public($Pile[$SP]['lang'], '', $Pile[$SP]['titre']);
            $t0 .= '
            <li class="annonce">
            ' . (!is_array($l = quete_logo('id_article', 'ON', $Pile[$SP]['id_article'], '', 0)) ? '' : "<img class=\"spip_logo spip_logos\" alt=\"\" src=\"{$l['0']}\"" . $l[2] . ($l[1] ? " onmouseover=\"this.src='{$l['1']}'\" onmouseout=\"this.src='{$l['0']}'\"" : "") . ' />' ? '<a href="' . vider_url(urlencode_1738(generer_url_entite($Pile[$SP]['id_article'], 'article', '', '', true))) . '"' . (($t2 = strval(interdire_scripts(attribut_html(propre($Pile[$SP]['descriptif'], $connect, $Pile[0]))))) !== '' ? ' title="' . $t2 . '"' : '') . ' style="text-align:center;">

				' . inserer_attribut(inserer_attribut(filtrer('image_graver', filtrer('image_reduire', !is_array($l = quete_logo('id_article', 'ON', $Pile[$SP]['id_article'], '', 0)) ? '' : "<img class=\"spip_logo spip_logos\" alt=\"\" src=\"{$l['0']}\"" . $l[2] . ($l[1] ? " onmouseover=\"this.src='{$l['1']}'\" onmouseout=\"this.src='{$l['0']}'\"" : "") . ' />', '150', '0')), 'alt', interdire_scripts(attribut_html(typo(supprimer_numero($Pile[$SP]['titre']), "TYPO", $connect, $Pile[0])))), 'title', interdire_scripts(attribut_html(typo(supprimer_numero($Pile[$SP]['titre']), "TYPO", $connect, $Pile[0])))) . '
				</a>

			' : '<p>
                ' . (($t2 = strval(interdire_scripts(typo($Pile[$SP]['surtitre'], "TYPO", $connect, $Pile[0])))) !== '' ? '<small style="text-transform:uppercase">' . $t2 . '</small>' : '') . '
                ' . (($t2 = strval(interdire_scripts(typo(supprimer_numero($Pile[$SP]['titre']), "TYPO", $connect, $Pile[0])))) !== '' ? '<big style="text-align:center;"><a href="' . vider_url(urlencode_1738(generer_url_entite($Pile[$SP]['id_article'], 'article', '', '', true))) . '"' . (($t3 = strval(interdire_scripts(attribut_html(propre($Pile[$SP]['descriptif'], $connect, $Pile[0]))))) !== '' ? ' title="' . $t3 . '"' : '') . ' style="text-align:center;">' . $t2 . '</a></big>' : '') . '
                ' . (($t2 = strval(interdire_scripts(typo($Pile[$SP]['soustitre'], "TYPO", $connect, $Pile[0])))) !== '' ? '<span>' . $t2 . '</span>' : '') . '
                <br />
                </p>

			') . '
          	</li>
            ';
            lang_select();
        }
        lang_select();
        $iter->free();
    }
    if (defined("_BOUCLE_PROFILER") and 1000 * ($timer = time() + microtime() - $timer) > _BOUCLE_PROFILER) {
        spip_log(intval(1000 * $timer) . "ms BOUCLE_annonces_art @ squelettes/inc/inc-annonces.html", "profiler" . _LOG_AVERTISSEMENT);
    }
    return $t0;
}