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)); }
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('"', '"', $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('"', '"', $lien) . "\" class='{$class}'{$lang}{$title}{$rel}{$mime}>{$texte}</a>"; return typo($lien, true, $connect); }
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; }
/** * 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; }
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; }
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)); }