예제 #1
0
function picker_identifie_id_rapide($ref, $rubriques = 0, $articles = 0)
{
    include_spip("inc/json");
    include_spip("inc/lien");
    if (!($match = typer_raccourci($ref))) {
        return json_export(false);
    }
    @(list($type, , $id, , , , ) = $match);
    if (!in_array($type, array($rubriques ? 'rubrique' : 'x', $articles ? 'article' : 'x'))) {
        return json_export(false);
    }
    $table_sql = table_objet_sql($type);
    $id_table_objet = id_table_objet($type);
    if (!($titre = sql_getfetsel('titre', $table_sql, "{$id_table_objet}=" . intval($id)))) {
        return json_export(false);
    }
    $titre = attribut_html(extraire_multi($titre));
    return json_export(array('type' => $type, 'id' => "{$type}|{$id}", 'titre' => $titre));
}
예제 #2
0
function inc_lien($lien, $texte = '', $class = '', $title = '', $hlang = '', $rel = '', $connect = '')
{
    # Tests TW
    if (!$GLOBALS['tw']) {
        return inc_lien_dist($lien, $texte, $class, $title, $hlang, $rel, $connect);
    }
    static $u = null;
    if (!$u) {
        $u = url_de_base();
    }
    $typo = false;
    // Si une langue est demandee sur un raccourci d'article, chercher
    // la traduction ;
    // - [{en}->art2] => traduction anglaise de l'article 2, sinon art 2
    // - [{}->art2] => traduction en langue courante de l'art 2, sinon art 2
    if ($hlang and $match = typer_raccourci($lien)) {
        @(list($type, , $id, , $args, , $ancre) = $match);
        if ($id_trad = sql_getfetsel('id_trad', 'spip_articles', "id_article={$id}") and $id_dest = sql_getfetsel('id_article', 'spip_articles', "id_trad={$id_trad} AND lang=" . sql_quote($hlang))) {
            $lien = "{$type}{$id_dest}";
        } else {
            $hlang = '';
        }
    }
    $mode = ($texte and $class) ? 'url' : 'tout';
    $lien = calculer_url($lien, $texte, $mode, $connect);
    if ($mode === 'tout') {
        $texte = $lien['titre'];
        if (!$class and isset($lien['class'])) {
            $class = $lien['class'];
        }
        $lang = isset($lien['lang']) ? $lien['lang'] : '';
        $mime = isset($lien['mime']) ? " type='" . $lien['mime'] . "'" : "";
        $lien = $lien['url'];
    }
    $lien = trim($lien);
    if (strncmp($lien, "#", 1) == 0) {
        # ancres pures (internes a la page)
        $class = 'spip_ancre';
    } elseif (strncasecmp($lien, 'mailto:', 7) == 0) {
        # pseudo URL de mail
        $class = "spip_mail";
    } elseif (strncmp($texte, '<html>', 6) == 0) {
        # cf traiter_lien_explicite
        $class = "spip_url spip_out";
    } elseif (!$class) {
        $class = "spip_out";
    }
    # si pas spip_in|spip_glossaire
    // Si l'objet n'est pas de la langue courante, on ajoute hreflang
    if (!$hlang and $lang !== $GLOBALS['spip_lang']) {
        $hlang = $lang;
    }
    $lang = $hlang ? " hreflang='{$hlang}'" : '';
    if ($title) {
        $title = ' title="' . attribut_html($title) . '"';
    }
    // rel=external pour les liens externes
    if ((strncmp($lien, 'http://', 7) == 0 or strncmp($lien, 'https://', 8) == 0) and strncmp("{$lien}/", $u, strlen($u)) != 0) {
        $rel = trim("{$rel} external");
    }
    if ($rel) {
        $rel = " rel='{$rel}'";
    }
    if (traiter_modeles($texte, false, $echapper ? 'TYPO' : '', $connect) == $texte) {
        $texte = typo($texte, true, $connect);
        $lien = "<a href=\"" . str_replace('"', '&quot;', $lien) . "\" class='{$class}'{$lang}{$title}{$rel}{$mime}>{$texte}</a>";
        return $lien;
    }
    # ceci s'execute heureusement avant les tableaux et leur "|".
    # Attention, le texte initial est deja echappe mais pas forcement
    # celui retourne par calculer_url.
    # Penser au cas [<imgXX|right>->URL], qui exige typo('<a>...</a>')
    $lien = "<a href=\"" . str_replace('"', '&quot;', $lien) . "\" class='{$class}'{$lang}{$title}{$rel}{$mime}>{$texte}</a>";
    return typo($lien, true, $connect);
}
예제 #3
0
파일: lien.php 프로젝트: rhertzog/lcs
function traiter_lien_implicite ($ref, $texte='', $pour='url', $connect='')
{
	if (!($match = typer_raccourci($ref))) return false;
	@list($type,,$id,,$args,,$ancre) = $match;
# attention dans le cas des sites le lien doit pointer non pas sur
# la page locale du site, mais directement sur le site lui-meme
	if ($type == 'site')
		$url = sql_getfetsel('url_site', 'spip_syndic', "id_syndic=$id",'','','','',$connect);
	elseif ($type == 'glose') {
		if (function_exists($f = 'glossaire_' . $ancre)) 
		  $url = $f($texte, $id);
		else $url = glossaire_std($texte);
	} else $url = generer_url_entite($id,$type,$args,$ancre,$connect ? $connect : NULL);
	if (!$url) return false;
	if (is_array($url)) {
		@list($type,$id) = $url;
		$url = generer_url_entite($id,$type,$args,$ancre,$connect ? $connect : NULL);
	}
	if ($pour === 'url') return $url;
	$r = traiter_raccourci_titre($id, $type, $connect);
	if ($r) $r['class'] =  ($type == 'site')?'spip_out':'spip_in';
	if ($texte = trim($texte)) $r['titre'] = $texte;
	if (!@$r['titre']) $r['titre'] =  _T($type) . " $id";
	if ($pour=='titre') return $r['titre'];
	$r['url'] = $url;

	// dans le cas d'un lien vers un doc, ajouter le type='mime/type'
	if ($type == 'document'
	  AND $extension = sql_getfetsel("extension","spip_documents", " id_document =".sql_quote($id), '', '', '', '', $connect)
		AND $mime = sql_getfetsel('mime_type', 'spip_types_documents',"extension=".sql_quote($extension),'','','','',$connect)
	)
		$r['mime'] = $mime;

	return $r;
}
예제 #4
0
파일: lien.php 프로젝트: loorenzooo/aslfc
/**
 * Transformer un lien raccourci art23 en son URL
 * Par defaut la fonction produit une url prive si on est dans le prive
 * ou publique si on est dans le public.
 * La globale lien_implicite_cible_public permet de forcer un cas ou l'autre :
 * $GLOBALS['lien_implicite_cible_public'] = true;
 *  => tous les liens raccourcis pointent vers le public
 * $GLOBALS['lien_implicite_cible_public'] = false;
 *  => tous les liens raccourcis pointent vers le prive
 * unset($GLOBALS['lien_implicite_cible_public']);
 *  => retablit le comportement automatique
 *
 * http://doc.spip.org/@traiter_lien_implicite
 *
 * @param string $ref
 * @param string $texte
 * @param string $pour
 * @param string $connect
 * @return array|bool|string
 */
function traiter_lien_implicite($ref, $texte = '', $pour = 'url', $connect = '')
{
    $cible = $connect ? $connect : (isset($GLOBALS['lien_implicite_cible_public']) ? $GLOBALS['lien_implicite_cible_public'] : null);
    if (!($match = typer_raccourci($ref))) {
        return false;
    }
    @(list($type, , $id, , $args, , $ancre) = $match);
    # attention dans le cas des sites le lien doit pointer non pas sur
    # la page locale du site, mais directement sur le site lui-meme
    $url = '';
    if ($f = charger_fonction("implicite_{$type}", "liens", true)) {
        $url = $f($texte, $id, $type, $args, $ancre, $connect);
    }
    if (!$url) {
        $url = generer_url_entite($id, $type, $args, $ancre, $cible);
    }
    if (!$url) {
        return false;
    }
    if (is_array($url)) {
        @(list($type, $id) = $url);
        $url = generer_url_entite($id, $type, $args, $ancre, $cible);
    }
    if ($pour === 'url') {
        return $url;
    }
    $r = traiter_raccourci_titre($id, $type, $connect);
    if ($r) {
        $r['class'] = $type == 'site' ? 'spip_out' : 'spip_in';
    }
    if ($texte = trim($texte)) {
        $r['titre'] = $texte;
    }
    if (!@$r['titre']) {
        $r['titre'] = _T($type) . " {$id}";
    }
    if ($pour == 'titre') {
        return $r['titre'];
    }
    $r['url'] = $url;
    // dans le cas d'un lien vers un doc, ajouter le type='mime/type'
    if ($type == 'document' and $mime = sql_getfetsel('mime_type', 'spip_types_documents', "extension IN (SELECT extension FROM spip_documents where id_document =" . intval($id) . ")", '', '', '', '', $connect)) {
        $r['mime'] = $mime;
    }
    return $r;
}
예제 #5
0
function importe_raccourci($v)
{
	if (preg_match_all(_RACCOURCI_LIEN, $v, $m, PREG_SET_ORDER)) {
		foreach ($m as $regs) {
		  // supprimer 'http://' ou 'mailto:'
		  	$lien = vider_url($regs[count($regs)-1]);
			if ($match = typer_raccourci($lien)) {
				list($f,$objet,$id,$params,$ancre) = $match;
				$k = 'id_' . $f;
				$g = importe_translate_maj($k, $id);
				if ($g != $id) {

				  $rac = '[' . $regs[1] . '->' . $regs[2] . $objet . $g . $params . $ancre .']';
				  $v = str_replace($regs[0], $rac, $v);
				}
			}
		}
	}

	if (preg_match_all(_RACCOURCI_MODELE_ALL, $v, $m, PREG_SET_ORDER)) {
		foreach ($m as $regs) {
			$g = importe_translate_maj('id_document', $regs[3]);
			if ($g != $regs[3]) {
				$rac = '<' . $regs[2] . $g . $regs[4] . '>' . $regs[5];
				$v = str_replace($regs[0], $rac, $v);
			}
		}
	}
	return $v;
}
예제 #6
0
function picker_identifie_id_rapide($ref, $rubriques_ou_objets = false, $articles = false)
{
    include_spip('inc/json');
    include_spip('inc/lien');
    // On construit un tableau des objets sélectionnables suivant les paramètres
    $objets = array();
    if ($rubriques_ou_objets and is_array($rubriques_ou_objets)) {
        $objets = $rubriques_ou_objets;
    } else {
        if ($rubriques_ou_objets) {
            $objets[] = 'rubriques';
        }
        if ($articles) {
            $objets[] = 'articles';
        }
    }
    // Si la référence ne correspond à rien, c'est fini
    if (!($match = typer_raccourci($ref))) {
        return json_export(false);
    }
    // Sinon on récupère les infos utiles
    @(list($type, , $id, , , , ) = $match);
    // On regarde si le type trouvé fait partie des objets sélectionnables
    if (!in_array(table_objet($type), $objets)) {
        return json_export(false);
    }
    // Maintenant que tout est bon, on cherche les informations sur cet objet
    include_spip('inc/filtres');
    if (!($titre = generer_info_entite($id, $type, 'titre'))) {
        return json_export(false);
    }
    // On simplifie le texte
    $titre = attribut_html($titre);
    return json_export(array('type' => $type, 'id' => "{$type}|{$id}", 'titre' => $titre));
}