Dépôt officiel du core SPIP * Copie possible par svn sur svn://trac.rezo.net/spip * Les svn:externals sont présent dans https://git.spip.net/SPIP/[nom du plugin dist]
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

703 lines
19 KiB

<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2019 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
/**
* Fonctions d'appel aux serveurs SQL presentes dans le code compile
*
* NB : à l'exception des fonctions pour les balises dynamiques
*
* @package SPIP\Core\Compilateur\Quetes
**/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
Résolution de #1510, cette double redirection d'action conduisant à plusieurs changements: * réintégration dans le script {{{../public.php}}} de tous les cas ne suivant pas le déroulement complet d'utilisation d'un squelette (action, CVT) afin de migrer tous les appels à {{{exit}}} de {{{public/assembler}}} dans le script initial (il en reste un, dans la fonction repérant un violation de sécurité CVT ça peut se justifier). * abandon de la possibilité d'avoir et des actions et des formulaires CVT dont l'URL soit indifféremment au niveau de la racine ou au niveau de {{{ecrire}}}: il ne faut pas obscuricr et ralentir l'accès aux scripts de {{{ecrire/}}}. * le traitement de la variable {{{redirect}}} dans la requête HTTP est modifié pour tenir compte des incohérences de PHP signalé dans #1510: * si la requête est en GET, cette variable a dû être encodée par {{{rawurlencode}}} * si la requête est en POST, elle ne doit pas avoir été encodée. Ce traitement est assuré par {{{generer_action_auteur}}} et ses fonctions annes, les extensions de SPIP utilisant cette fonction de manière standard ne seront pas affectées par ce changement interne. - vérification de tous les cas d'utilisation de cette variable de redirection, en particulier pour éliminer la production d'URL absolue dans le cas GET, le mod_security d'APACHE faisant de la parano là-dessus. En particulier, la solution de #1510 a imposé d'expliciter le script de retour des bouton de contrôle de forum, le double retour s'effectue à l'endroit attendu de {{{articles_forum}}}, ce qui est le cas aussi de {{{controle_forum}}} à présent, même en utilisation AJAX.
15 years ago
include_spip('base/abstract_sql');
12 years ago
/**
* Retourne l'URL de redirection d'un article virtuel, seulement si il est publié
12 years ago
*
* @param $id_article
* @param $connect
* @return array|bool|null
*/
function quete_virtuel($id_article, $connect) {
6 years ago
return sql_getfetsel(
'virtuel',
'spip_articles',
array('id_article=' . intval($id_article), "statut='publie'"),
'',
'',
'',
'',
$connect
);
}
12 years ago
/**
* Retourne le couple `parent,lang` pour toute table
*
* En pratique `id_rubrique` si présent (ou `id_parent` pour table rubriques)
* et champ `lang` si présent
12 years ago
*
* @param string $table
* @param int $id
* @param string $connect
* @return array
*/
function quete_parent_lang($table, $id, $connect = '') {
static $cache_quete = array();
13 years ago
if (!isset($cache_quete[$connect][$table][$id])) {
if (!isset($cache_quete[$connect][$table]['_select'])) {
$trouver_table = charger_fonction('trouver_table', 'base');
if (!$desc = $trouver_table($table,
$connect) or !isset($desc['field']['id_rubrique'])
6 years ago
) {
// pas de parent rubrique, on passe
$cache_quete[$connect][$table]['_select'] = false;
} else {
$select = ($table == 'spip_rubriques' ? 'id_parent' : 'id_rubrique');
6 years ago
$select .= isset($desc['field']['lang']) ? ', lang' : '';
$cache_quete[$connect][$table]['_select'] = $select;
$cache_quete[$connect][$table]['_id'] = id_table_objet(objet_type($table));
}
}
if ($cache_quete[$connect][$table]['_select']) {
6 years ago
$cache_quete[$connect][$table][$id] = sql_fetsel(
$cache_quete[$connect][$table]['_select'],
$table,
$cache_quete[$connect][$table]['_id'] . '=' . intval($id),
'',
'',
'',
'',
$connect
);
}
}
return isset($cache_quete[$connect][$table][$id]) ? $cache_quete[$connect][$table][$id] : null;
}
12 years ago
/**
* Retourne le parent d'une rubrique
*
* Repose sur la fonction quete_parent_lang pour la mutualisation
* +mise en cache SQL des requêtes
12 years ago
*
* @uses quete_parent_lang()
12 years ago
*
* @param int $id_rubrique
* @param string $connect
* @return int
*/
function quete_parent($id_rubrique, $connect = '') {
if (!$id_rubrique = intval($id_rubrique)) {
return 0;
}
$id_parent = quete_parent_lang('spip_rubriques', $id_rubrique, $connect);
return $id_parent['id_parent'];
}
12 years ago
/**
* Retourne la rubrique d'un article
*
* Repose sur la fonction quete_parent_lang pour la mutualisation
* +mise en cache SQL des requêtes
12 years ago
*
* @uses quete_parent_lang()
12 years ago
*
* @param int $id_article
* @param $serveur
* @return int
12 years ago
*/
function quete_rubrique($id_article, $serveur) {
$id_parent = quete_parent_lang('spip_articles', $id_article, $serveur);
return $id_parent['id_rubrique'];
}
12 years ago
/**
* Retourne la profondeur d'une rubrique
12 years ago
*
* @uses quete_parent()
*
12 years ago
* @param int $id
* @param string $connect
* @return int
*/
function quete_profondeur($id, $connect = '') {
$n = 0;
while ($id) {
$n++;
$id = quete_parent($id, $connect);
}
return $n;
}
/**
* Retourne la condition sur la date lorsqu'il y a des post-dates
*
* @param string $champ_date
* Nom de la colonne de date dans la table SQL
12 years ago
* @param string $serveur
* @param bool $ignore_previsu
* true pour forcer le test même en prévisu
* @return string
* Morceau de la requête SQL testant la date
*/
function quete_condition_postdates($champ_date, $serveur = '', $ignore_previsu = false) {
if (defined('_VAR_PREVIEW') and _VAR_PREVIEW and !$ignore_previsu) {
6 years ago
return '1=1';
}
return
(isset($GLOBALS['meta']['date_prochain_postdate'])
and $GLOBALS['meta']['date_prochain_postdate'] > time())
? "$champ_date<" . sql_quote(date('Y-m-d H:i:s', $GLOBALS['meta']['date_prochain_postdate']), $serveur)
6 years ago
: '1=1';
}
/**
* Calculer la condition pour filtrer les status,
*
* @param string $mstatut
* Le champ de la table sur lequel porte la condition
* @param string $previsu
* Mode previsu : statut ou liste des statuts séparés par une virgule
* @param string $publie
* Mode publie : statut ou liste des statuts séparés par une virgule
* @param string $serveur
* Serveur de BDD
* @param bool $ignore_previsu
* true pour forcer le test même en prévisu
* @return array|string
*/
function quete_condition_statut($mstatut, $previsu, $publie, $serveur = '', $ignore_previsu = false) {
static $cond = array();
$key = func_get_args();
6 years ago
$key = implode('-', $key);
if (isset($cond[$key])) {
return $cond[$key];
}
$liste_statuts = $publie;
if (defined('_VAR_PREVIEW') and _VAR_PREVIEW and !$ignore_previsu) {
$liste_statuts = $previsu;
}
$not = false;
if (strncmp($liste_statuts, '!', 1) == 0) {
$not = true;
$liste_statuts = substr($liste_statuts, 1);
}
// '' => ne rien afficher, '!'=> ne rien filtrer
if (!strlen($liste_statuts)) {
return $cond[$key] = ($not ? '1=1' : '0=1');
}
$liste_statuts = explode(',', $liste_statuts);
$where = array();
foreach ($liste_statuts as $k => $v) {
// filtrage /auteur pour limiter les objets d'un statut (prepa en general)
// a ceux de l'auteur identifie
6 years ago
if (strpos($v, '/') !== false) {
$v = explode('/', $v);
$filtre = end($v);
$v = reset($v);
6 years ago
$v = preg_replace(',\W,', '', $v);
if ($filtre == 'auteur'
and (strpos($mstatut, '.') !== false)
and $objet = explode('.', $mstatut)
and $id_table = reset($objet)
and $objet = objet_type($id_table)
) {
$w = "$mstatut<>" . sql_quote($v);
// retrouver l’id_auteur qui a filé un lien de prévisu éventuellement,
// sinon l’auteur en session
include_spip('inc/securiser_action');
if ($desc = decrire_token_previsu()) {
$id_auteur = $desc['id_auteur'];
} elseif (isset($GLOBALS['visiteur_session']['id_auteur'])) {
$id_auteur = intval($GLOBALS['visiteur_session']['id_auteur']);
} else {
$id_auteur = null;
}
// dans ce cas (admin en general), pas de filtrage sur ce statut
if (!autoriser('previsualiser' . $v, $objet, '', $id_auteur)) {
// si pas d'auteur identifie pas de sous-requete car pas d'article qui matche
if (!$id_auteur) {
$where[] = $w;
} else {
$primary = id_table_objet($objet);
$where[] = "($w OR $id_table.$primary IN (" . sql_get_select(
'ssss.id_objet',
'spip_auteurs_liens AS ssss',
'ssss.objet=' . sql_quote($objet) . ' AND ssss.id_auteur=' . intval($id_auteur),
'',
'',
'',
'',
$serveur
) . '))';
}
}
} // ignorer ce statut si on ne sait pas comment le filtrer
else {
6 years ago
$v = '';
}
}
// securite
$liste_statuts[$k] = preg_replace(',\W,', '', $v);
}
$liste_statuts = array_filter($liste_statuts);
if (count($liste_statuts) == 1) {
$where[] = array('=', $mstatut, sql_quote(reset($liste_statuts), $serveur));
} else {
$where[] = sql_in($mstatut, $liste_statuts, $not, $serveur);
}
while (count($where) > 1) {
$and = array('AND', array_pop($where), array_pop($where));
$where[] = $and;
}
$cond[$key] = reset($where);
if ($not) {
$cond[$key] = array('NOT', $cond[$key]);
}
return $cond[$key];
}
12 years ago
/**
* Retourne le fichier d'un document
12 years ago
*
* @param int $id_document
* @param string $serveur
* @return array|bool|null
*/
function quete_fichier($id_document, $serveur = '') {
6 years ago
return sql_getfetsel('fichier', 'spip_documents', ('id_document=' . intval($id_document)), '', array(), '', '', $serveur);
}
12 years ago
/**
* Toute les infos sur un document
*
* @param int $id_document
* @param string $serveur
* @return array|bool
*/
function quete_document($id_document, $serveur = '') {
6 years ago
return sql_fetsel('*', 'spip_documents', ('id_document=' . intval($id_document)), '', array(), '', '', $serveur);
}
12 years ago
/**
* Récuperer une meta sur un site (spip) distant (en local il y a plus simple)
12 years ago
*
* @param string $nom Nom de la méta
* @param string $serveur Connecteur
12 years ago
* @return array|bool|null
*/
function quete_meta($nom, $serveur) {
6 years ago
return sql_getfetsel('valeur', 'spip_meta', 'nom=' . sql_quote($nom), '', '', '', '', $serveur);
}
12 years ago
/**
* Retourne le logo d'un objet, éventuellement par héritage
*
* Si flag != false, retourne le chemin du fichier, sinon retourne un tableau
* de 3 elements :
* le chemin du fichier, celui du logo de survol, l'attribut style=w/h.
12 years ago
*
* @param string $cle_objet
* Nom de la clé de l'objet dont on veut chercher le logo.
12 years ago
* @param string $onoff
* Sélectionne quel(s) logo(s) : "on" pour le logo normal, "off" pour le logo de survol, ou "ON" pour l'ensemble.
12 years ago
* @param int $id
* Identifiant de l'objet dont on veut chercher le logo.
12 years ago
* @param int $id_rubrique
* Identifiant de la rubrique parente si l'on veut aller chercher son logo
* dans le cas où l'objet demandé n'en a pas.
12 years ago
* @param bool $flag
* Lorsque le drapeau est évalué comme "true", la fonction ne renvoie
* que le chemin du fichier, sinon elle renvoie le tableau plus complet.
12 years ago
* @return array|string
* Retourne soit un tableau, soit le chemin du fichier.
12 years ago
*/
function quete_logo($cle_objet, $onoff, $id, $id_rubrique, $flag) {
include_spip('base/objets');
Début de mise à plat de la balise générique #LOGO_. Tout ce qui est calculable à la compilation l'est effectivement, ce qui allège le code produit. Conséquence, les fonctions {{{affiche_logos, calcule_logo_document, calcule_logo}}} n'ont plus les mêmes signatures, on en profite pour les nommer plus rationnellement, voire les faire disparaître. La production du code HTML est enfin rejetée en dehors du compilateur proprement dit, la fonction {{{balise_LOGO__dist}}} d'une part, et dans {{{inc/documents}}}. Ce n'est pas encore facilement surchargeable, mais on s'en approche. Test (sur un article avec logo): {{{ <BOUCLE_doc(DOCUMENTS){id_article}{doublons}> <h1>DOCUMENT #ID_DOCUMENT</h1> LOGO_DOCUMENT|URL_ARTICLE [(#LOGO_DOCUMENT|#URL_ARTICLE)] <br> LOGO_DOCUMENT|right [(#LOGO_DOCUMENT|right)] <br> LOGO_DOCUMENT|fichier [(#LOGO_DOCUMENT|fichier)] <br> LOGO_DOCUMENT|lien [(#LOGO_DOCUMENT|lien)] <br> LOGO_DOCUMENT|fichier|strtoupper [(#LOGO_DOCUMENT|fichier|strtoupper)] <br> LOGO_DOCUMENT||image_sepia [(#LOGO_DOCUMENT||image_sepia)] <br><br><br><br> LOGO_DOCUMENT{200,50}|URL_ARTICLE [(#LOGO_DOCUMENT{200,50}|#URL_ARTICLE)] <br> LOGO_DOCUMENT{200,50}|right [(#LOGO_DOCUMENT{200,50}|right)] <br> LOGO_DOCUMENT{200,50}|fichier [(#LOGO_DOCUMENT{200,50}|fichier)] <br> LOGO_DOCUMENT{200,50}|lien [(#LOGO_DOCUMENT{200,50}|lien)] <br> LOGO_DOCUMENT{200,50}|fichier|strtoupper [(#LOGO_DOCUMENT{200,50}|fichier|strtoupper)] <br> LOGO_DOCUMENT{200,50}||image_sepia [(#LOGO_DOCUMENT{200,50}||image_sepia)] </BOUCLE_doc> }}}
14 years ago
$nom = strtolower($onoff);
while (1) {
$objet = objet_type($cle_objet);
6 years ago
$on = quete_logo_objet($id, $objet, $nom);
6 years ago
Début de mise à plat de la balise générique #LOGO_. Tout ce qui est calculable à la compilation l'est effectivement, ce qui allège le code produit. Conséquence, les fonctions {{{affiche_logos, calcule_logo_document, calcule_logo}}} n'ont plus les mêmes signatures, on en profite pour les nommer plus rationnellement, voire les faire disparaître. La production du code HTML est enfin rejetée en dehors du compilateur proprement dit, la fonction {{{balise_LOGO__dist}}} d'une part, et dans {{{inc/documents}}}. Ce n'est pas encore facilement surchargeable, mais on s'en approche. Test (sur un article avec logo): {{{ <BOUCLE_doc(DOCUMENTS){id_article}{doublons}> <h1>DOCUMENT #ID_DOCUMENT</h1> LOGO_DOCUMENT|URL_ARTICLE [(#LOGO_DOCUMENT|#URL_ARTICLE)] <br> LOGO_DOCUMENT|right [(#LOGO_DOCUMENT|right)] <br> LOGO_DOCUMENT|fichier [(#LOGO_DOCUMENT|fichier)] <br> LOGO_DOCUMENT|lien [(#LOGO_DOCUMENT|lien)] <br> LOGO_DOCUMENT|fichier|strtoupper [(#LOGO_DOCUMENT|fichier|strtoupper)] <br> LOGO_DOCUMENT||image_sepia [(#LOGO_DOCUMENT||image_sepia)] <br><br><br><br> LOGO_DOCUMENT{200,50}|URL_ARTICLE [(#LOGO_DOCUMENT{200,50}|#URL_ARTICLE)] <br> LOGO_DOCUMENT{200,50}|right [(#LOGO_DOCUMENT{200,50}|right)] <br> LOGO_DOCUMENT{200,50}|fichier [(#LOGO_DOCUMENT{200,50}|fichier)] <br> LOGO_DOCUMENT{200,50}|lien [(#LOGO_DOCUMENT{200,50}|lien)] <br> LOGO_DOCUMENT{200,50}|fichier|strtoupper [(#LOGO_DOCUMENT{200,50}|fichier|strtoupper)] <br> LOGO_DOCUMENT{200,50}||image_sepia [(#LOGO_DOCUMENT{200,50}||image_sepia)] </BOUCLE_doc> }}}
14 years ago
if ($on) {
if ($flag) {
return basename($on['chemin']);
} else {
$taille = @spip_getimagesize($on['chemin']);
6 years ago
// Si on a déjà demandé un survol directement ($onoff = off)
// ou qu'on a demandé uniquement le normal ($onoff = on)
// alors on ne cherche pas du tout le survol ici
if ($onoff != 'ON') {
$off = '';
6 years ago
} else {
// Sinon, c'est qu'on demande normal ET survol à la fois, donc on cherche maintenant le survol
$off = quete_logo_objet($id, $objet, 'off');
}
6 years ago
Début de mise à plat de la balise générique #LOGO_. Tout ce qui est calculable à la compilation l'est effectivement, ce qui allège le code produit. Conséquence, les fonctions {{{affiche_logos, calcule_logo_document, calcule_logo}}} n'ont plus les mêmes signatures, on en profite pour les nommer plus rationnellement, voire les faire disparaître. La production du code HTML est enfin rejetée en dehors du compilateur proprement dit, la fonction {{{balise_LOGO__dist}}} d'une part, et dans {{{inc/documents}}}. Ce n'est pas encore facilement surchargeable, mais on s'en approche. Test (sur un article avec logo): {{{ <BOUCLE_doc(DOCUMENTS){id_article}{doublons}> <h1>DOCUMENT #ID_DOCUMENT</h1> LOGO_DOCUMENT|URL_ARTICLE [(#LOGO_DOCUMENT|#URL_ARTICLE)] <br> LOGO_DOCUMENT|right [(#LOGO_DOCUMENT|right)] <br> LOGO_DOCUMENT|fichier [(#LOGO_DOCUMENT|fichier)] <br> LOGO_DOCUMENT|lien [(#LOGO_DOCUMENT|lien)] <br> LOGO_DOCUMENT|fichier|strtoupper [(#LOGO_DOCUMENT|fichier|strtoupper)] <br> LOGO_DOCUMENT||image_sepia [(#LOGO_DOCUMENT||image_sepia)] <br><br><br><br> LOGO_DOCUMENT{200,50}|URL_ARTICLE [(#LOGO_DOCUMENT{200,50}|#URL_ARTICLE)] <br> LOGO_DOCUMENT{200,50}|right [(#LOGO_DOCUMENT{200,50}|right)] <br> LOGO_DOCUMENT{200,50}|fichier [(#LOGO_DOCUMENT{200,50}|fichier)] <br> LOGO_DOCUMENT{200,50}|lien [(#LOGO_DOCUMENT{200,50}|lien)] <br> LOGO_DOCUMENT{200,50}|fichier|strtoupper [(#LOGO_DOCUMENT{200,50}|fichier|strtoupper)] <br> LOGO_DOCUMENT{200,50}||image_sepia [(#LOGO_DOCUMENT{200,50}||image_sepia)] </BOUCLE_doc> }}}
14 years ago
// on retourne une url du type IMG/artonXX?timestamp
// qui permet de distinguer le changement de logo
// et placer un expire sur le dossier IMG/
$res = array(
$on['chemin'] . ($on['timestamp'] ? "?{$on['timestamp']}" : ''),
($off ? $off['chemin'] . ($off['timestamp'] ? "?{$off['timestamp']}" : '') : ''),
(!$taille ? '' : (' ' . $taille[3]))
);
$res['src'] = $res[0];
$res['logo_on'] = $res[0];
$res['logo_off'] = $res[1];
$res['width'] = ($taille ? $taille[0] : '');
$res['height'] = ($taille ? $taille[1] : '');
return $res;
Début de mise à plat de la balise générique #LOGO_. Tout ce qui est calculable à la compilation l'est effectivement, ce qui allège le code produit. Conséquence, les fonctions {{{affiche_logos, calcule_logo_document, calcule_logo}}} n'ont plus les mêmes signatures, on en profite pour les nommer plus rationnellement, voire les faire disparaître. La production du code HTML est enfin rejetée en dehors du compilateur proprement dit, la fonction {{{balise_LOGO__dist}}} d'une part, et dans {{{inc/documents}}}. Ce n'est pas encore facilement surchargeable, mais on s'en approche. Test (sur un article avec logo): {{{ <BOUCLE_doc(DOCUMENTS){id_article}{doublons}> <h1>DOCUMENT #ID_DOCUMENT</h1> LOGO_DOCUMENT|URL_ARTICLE [(#LOGO_DOCUMENT|#URL_ARTICLE)] <br> LOGO_DOCUMENT|right [(#LOGO_DOCUMENT|right)] <br> LOGO_DOCUMENT|fichier [(#LOGO_DOCUMENT|fichier)] <br> LOGO_DOCUMENT|lien [(#LOGO_DOCUMENT|lien)] <br> LOGO_DOCUMENT|fichier|strtoupper [(#LOGO_DOCUMENT|fichier|strtoupper)] <br> LOGO_DOCUMENT||image_sepia [(#LOGO_DOCUMENT||image_sepia)] <br><br><br><br> LOGO_DOCUMENT{200,50}|URL_ARTICLE [(#LOGO_DOCUMENT{200,50}|#URL_ARTICLE)] <br> LOGO_DOCUMENT{200,50}|right [(#LOGO_DOCUMENT{200,50}|right)] <br> LOGO_DOCUMENT{200,50}|fichier [(#LOGO_DOCUMENT{200,50}|fichier)] <br> LOGO_DOCUMENT{200,50}|lien [(#LOGO_DOCUMENT{200,50}|lien)] <br> LOGO_DOCUMENT{200,50}|fichier|strtoupper [(#LOGO_DOCUMENT{200,50}|fichier|strtoupper)] <br> LOGO_DOCUMENT{200,50}||image_sepia [(#LOGO_DOCUMENT{200,50}||image_sepia)] </BOUCLE_doc> }}}
14 years ago
}
} else {
if (defined('_LOGO_RUBRIQUE_DESACTIVER_HERITAGE')) {
return '';
} else {
if ($id_rubrique) {
$cle_objet = 'id_rubrique';
$id = $id_rubrique;
$id_rubrique = 0;
} else {
if ($id and $cle_objet == 'id_rubrique') {
$id = quete_parent($id);
} else {
return '';
}
}
}
Début de mise à plat de la balise générique #LOGO_. Tout ce qui est calculable à la compilation l'est effectivement, ce qui allège le code produit. Conséquence, les fonctions {{{affiche_logos, calcule_logo_document, calcule_logo}}} n'ont plus les mêmes signatures, on en profite pour les nommer plus rationnellement, voire les faire disparaître. La production du code HTML est enfin rejetée en dehors du compilateur proprement dit, la fonction {{{balise_LOGO__dist}}} d'une part, et dans {{{inc/documents}}}. Ce n'est pas encore facilement surchargeable, mais on s'en approche. Test (sur un article avec logo): {{{ <BOUCLE_doc(DOCUMENTS){id_article}{doublons}> <h1>DOCUMENT #ID_DOCUMENT</h1> LOGO_DOCUMENT|URL_ARTICLE [(#LOGO_DOCUMENT|#URL_ARTICLE)] <br> LOGO_DOCUMENT|right [(#LOGO_DOCUMENT|right)] <br> LOGO_DOCUMENT|fichier [(#LOGO_DOCUMENT|fichier)] <br> LOGO_DOCUMENT|lien [(#LOGO_DOCUMENT|lien)] <br> LOGO_DOCUMENT|fichier|strtoupper [(#LOGO_DOCUMENT|fichier|strtoupper)] <br> LOGO_DOCUMENT||image_sepia [(#LOGO_DOCUMENT||image_sepia)] <br><br><br><br> LOGO_DOCUMENT{200,50}|URL_ARTICLE [(#LOGO_DOCUMENT{200,50}|#URL_ARTICLE)] <br> LOGO_DOCUMENT{200,50}|right [(#LOGO_DOCUMENT{200,50}|right)] <br> LOGO_DOCUMENT{200,50}|fichier [(#LOGO_DOCUMENT{200,50}|fichier)] <br> LOGO_DOCUMENT{200,50}|lien [(#LOGO_DOCUMENT{200,50}|lien)] <br> LOGO_DOCUMENT{200,50}|fichier|strtoupper [(#LOGO_DOCUMENT{200,50}|fichier|strtoupper)] <br> LOGO_DOCUMENT{200,50}||image_sepia [(#LOGO_DOCUMENT{200,50}||image_sepia)] </BOUCLE_doc> }}}
14 years ago
}
}
}
/**
* Chercher le logo d'un contenu précis
6 years ago
*
* @param int $id_objet
* Idenfiant de l'objet dont on cherche le logo
* @param string $objet
* Type de l'objet dont on cherche le logo
* @param string $mode
* "on" ou "off" suivant le logo normal ou survol
**/
function quete_logo_objet($id_objet, $objet, $mode) {
static $chercher_logo;
if (is_null($chercher_logo)) {
$chercher_logo = charger_fonction('chercher_logo', 'inc');
}
$cle_objet = id_table_objet($objet);
6 years ago
// On cherche pas la méthode classique
$infos_logo = $chercher_logo($id_objet, $cle_objet, $mode);
// Si la méthode classique a trouvé quelque chose, on utilise le nouveau format
if (!empty($infos_logo)) {
$infos_logo = array(
'chemin' => $infos_logo[0],
'timestamp' => $infos_logo[4],
);
}
6 years ago
// On passe cette recherche de logo dans un pipeline
$infos_logo = pipeline(
'quete_logo_objet',
array(
'args' => array(
'id_objet' => $id_objet,
'objet' => $objet,
'cle_objet' => $cle_objet,
'mode' => $mode,
),
'data' => $infos_logo,
)
);
6 years ago
return $infos_logo;
}
12 years ago
/**
* Retourne le logo d’un fichier (document spip) sinon la vignette du type du fichier
12 years ago
*
* Fonction appeleé par la balise `#LOGO_DOCUMENT`
12 years ago
*
* @param array $row
* @param string $connect
* @return bool|string
*/
function quete_logo_file($row, $connect = null) {
Début de mise à plat de la balise générique #LOGO_. Tout ce qui est calculable à la compilation l'est effectivement, ce qui allège le code produit. Conséquence, les fonctions {{{affiche_logos, calcule_logo_document, calcule_logo}}} n'ont plus les mêmes signatures, on en profite pour les nommer plus rationnellement, voire les faire disparaître. La production du code HTML est enfin rejetée en dehors du compilateur proprement dit, la fonction {{{balise_LOGO__dist}}} d'une part, et dans {{{inc/documents}}}. Ce n'est pas encore facilement surchargeable, mais on s'en approche. Test (sur un article avec logo): {{{ <BOUCLE_doc(DOCUMENTS){id_article}{doublons}> <h1>DOCUMENT #ID_DOCUMENT</h1> LOGO_DOCUMENT|URL_ARTICLE [(#LOGO_DOCUMENT|#URL_ARTICLE)] <br> LOGO_DOCUMENT|right [(#LOGO_DOCUMENT|right)] <br> LOGO_DOCUMENT|fichier [(#LOGO_DOCUMENT|fichier)] <br> LOGO_DOCUMENT|lien [(#LOGO_DOCUMENT|lien)] <br> LOGO_DOCUMENT|fichier|strtoupper [(#LOGO_DOCUMENT|fichier|strtoupper)] <br> LOGO_DOCUMENT||image_sepia [(#LOGO_DOCUMENT||image_sepia)] <br><br><br><br> LOGO_DOCUMENT{200,50}|URL_ARTICLE [(#LOGO_DOCUMENT{200,50}|#URL_ARTICLE)] <br> LOGO_DOCUMENT{200,50}|right [(#LOGO_DOCUMENT{200,50}|right)] <br> LOGO_DOCUMENT{200,50}|fichier [(#LOGO_DOCUMENT{200,50}|fichier)] <br> LOGO_DOCUMENT{200,50}|lien [(#LOGO_DOCUMENT{200,50}|lien)] <br> LOGO_DOCUMENT{200,50}|fichier|strtoupper [(#LOGO_DOCUMENT{200,50}|fichier|strtoupper)] <br> LOGO_DOCUMENT{200,50}||image_sepia [(#LOGO_DOCUMENT{200,50}||image_sepia)] </BOUCLE_doc> }}}
14 years ago
include_spip('inc/documents');
$logo = vignette_logo_document($row, $connect);
if (!$logo) {
$logo = image_du_document($row, $connect);
}
if (!$logo) {
$f = charger_fonction('vignette', 'inc');
13 years ago
$logo = $f($row['extension'], false);
}
// si c'est une vignette type doc, la renvoyer direct
if (strcmp($logo, _DIR_PLUGINS) == 0
or strcmp($logo, _DIR_PLUGINS_DIST) == 0
or strcmp($logo, _DIR_RACINE . 'prive/') == 0
) {
return $logo;
}
Début de mise à plat de la balise générique #LOGO_. Tout ce qui est calculable à la compilation l'est effectivement, ce qui allège le code produit. Conséquence, les fonctions {{{affiche_logos, calcule_logo_document, calcule_logo}}} n'ont plus les mêmes signatures, on en profite pour les nommer plus rationnellement, voire les faire disparaître. La production du code HTML est enfin rejetée en dehors du compilateur proprement dit, la fonction {{{balise_LOGO__dist}}} d'une part, et dans {{{inc/documents}}}. Ce n'est pas encore facilement surchargeable, mais on s'en approche. Test (sur un article avec logo): {{{ <BOUCLE_doc(DOCUMENTS){id_article}{doublons}> <h1>DOCUMENT #ID_DOCUMENT</h1> LOGO_DOCUMENT|URL_ARTICLE [(#LOGO_DOCUMENT|#URL_ARTICLE)] <br> LOGO_DOCUMENT|right [(#LOGO_DOCUMENT|right)] <br> LOGO_DOCUMENT|fichier [(#LOGO_DOCUMENT|fichier)] <br> LOGO_DOCUMENT|lien [(#LOGO_DOCUMENT|lien)] <br> LOGO_DOCUMENT|fichier|strtoupper [(#LOGO_DOCUMENT|fichier|strtoupper)] <br> LOGO_DOCUMENT||image_sepia [(#LOGO_DOCUMENT||image_sepia)] <br><br><br><br> LOGO_DOCUMENT{200,50}|URL_ARTICLE [(#LOGO_DOCUMENT{200,50}|#URL_ARTICLE)] <br> LOGO_DOCUMENT{200,50}|right [(#LOGO_DOCUMENT{200,50}|right)] <br> LOGO_DOCUMENT{200,50}|fichier [(#LOGO_DOCUMENT{200,50}|fichier)] <br> LOGO_DOCUMENT{200,50}|lien [(#LOGO_DOCUMENT{200,50}|lien)] <br> LOGO_DOCUMENT{200,50}|fichier|strtoupper [(#LOGO_DOCUMENT{200,50}|fichier|strtoupper)] <br> LOGO_DOCUMENT{200,50}||image_sepia [(#LOGO_DOCUMENT{200,50}||image_sepia)] </BOUCLE_doc> }}}
14 years ago
return get_spip_doc($logo);
}
12 years ago
/**
* Trouver l'image logo d'un document
*
* @param $row
* description du document, issue de la base
* @param $lien
* url de lien
* @param $align
* alignement left/right
* @param $mode_logo
* mode du logo :
* '' => automatique (vignette sinon apercu sinon icone)
* icone => icone du type du fichier
* apercu => apercu de l'image exclusivement, meme si une vignette existe
* vignette => vignette exclusivement, ou rien si elle n'existe pas
* @param $x
* largeur maxi
* @param $y
* hauteur maxi
* @param string $connect
* serveur
* @return string
*/
function quete_logo_document($row, $lien, $align, $mode_logo, $x, $y, $connect = null) {
Début de mise à plat de la balise générique #LOGO_. Tout ce qui est calculable à la compilation l'est effectivement, ce qui allège le code produit. Conséquence, les fonctions {{{affiche_logos, calcule_logo_document, calcule_logo}}} n'ont plus les mêmes signatures, on en profite pour les nommer plus rationnellement, voire les faire disparaître. La production du code HTML est enfin rejetée en dehors du compilateur proprement dit, la fonction {{{balise_LOGO__dist}}} d'une part, et dans {{{inc/documents}}}. Ce n'est pas encore facilement surchargeable, mais on s'en approche. Test (sur un article avec logo): {{{ <BOUCLE_doc(DOCUMENTS){id_article}{doublons}> <h1>DOCUMENT #ID_DOCUMENT</h1> LOGO_DOCUMENT|URL_ARTICLE [(#LOGO_DOCUMENT|#URL_ARTICLE)] <br> LOGO_DOCUMENT|right [(#LOGO_DOCUMENT|right)] <br> LOGO_DOCUMENT|fichier [(#LOGO_DOCUMENT|fichier)] <br> LOGO_DOCUMENT|lien [(#LOGO_DOCUMENT|lien)] <br> LOGO_DOCUMENT|fichier|strtoupper [(#LOGO_DOCUMENT|fichier|strtoupper)] <br> LOGO_DOCUMENT||image_sepia [(#LOGO_DOCUMENT||image_sepia)] <br><br><br><br> LOGO_DOCUMENT{200,50}|URL_ARTICLE [(#LOGO_DOCUMENT{200,50}|#URL_ARTICLE)] <br> LOGO_DOCUMENT{200,50}|right [(#LOGO_DOCUMENT{200,50}|right)] <br> LOGO_DOCUMENT{200,50}|fichier [(#LOGO_DOCUMENT{200,50}|fichier)] <br> LOGO_DOCUMENT{200,50}|lien [(#LOGO_DOCUMENT{200,50}|lien)] <br> LOGO_DOCUMENT{200,50}|fichier|strtoupper [(#LOGO_DOCUMENT{200,50}|fichier|strtoupper)] <br> LOGO_DOCUMENT{200,50}||image_sepia [(#LOGO_DOCUMENT{200,50}||image_sepia)] </BOUCLE_doc> }}}
14 years ago
include_spip('inc/documents');
remise en marche des #LOGO_DOCUMENT qui produisent bien le meme resultat que sur une branche 2.0 On ajoute un parametre optionnel a la balise qui peut avoir 4 valeurs possibles : #LOGO_DOCUMENT{icone} renverra toujours l'icone du type de document #LOGO_DOCUMENT{apercu} renverra l'apercu d'une image ou l'icone (mais pas la vignette telechargee si il y en a une) #LOGO_DOCUMENT{vignette} renverra la vignette telechargee si il y en a une, ou rien #LOGO_DOCUMENT{auto} correspond au fonctionnement par defaut, sans l'argument. Cet argument peut avoir n'importe quelle place dans la liste des arguments Jeu de test : <BOUCLE_doc(DOCUMENTS){id_article}{doublons}> <h1>DOCUMENT #ID_DOCUMENT</h1> LOGO_DOCUMENT|URL_ARTICLE [(#LOGO_DOCUMENT|#URL_ARTICLE)] <br> LOGO_DOCUMENT|right [(#LOGO_DOCUMENT|right)] <br> LOGO_DOCUMENT|fichier [(#LOGO_DOCUMENT|fichier)] <br> LOGO_DOCUMENT|lien [(#LOGO_DOCUMENT|lien)] <br> LOGO_DOCUMENT|fichier|strtoupper [(#LOGO_DOCUMENT|fichier|strtoupper)] <br> LOGO_DOCUMENT{icone} [(#LOGO_DOCUMENT{icone})] <br> LOGO_DOCUMENT{vignette} [(#LOGO_DOCUMENT{vignette}|sinon{'pas de vignette'})] <br> LOGO_DOCUMENT{apercu} [(#LOGO_DOCUMENT{apercu})] <br> LOGO_DOCUMENT{auto} [(#LOGO_DOCUMENT{auto})] <br> LOGO_DOCUMENT||image_sepia [(#LOGO_DOCUMENT||image_sepia)] <br><br><br><br> LOGO_DOCUMENT{16,50}|URL_ARTICLE [(#LOGO_DOCUMENT{16,50}|#URL_ARTICLE)] <br> LOGO_DOCUMENT{16,50}|right [(#LOGO_DOCUMENT{16,50}|right)] <br> LOGO_DOCUMENT{16,50}|fichier [(#LOGO_DOCUMENT{16,50}|fichier)] <br> LOGO_DOCUMENT{16,50}|lien [(#LOGO_DOCUMENT{16,50}|lien)] <br> LOGO_DOCUMENT{16,50}|fichier|strtoupper [(#LOGO_DOCUMENT{16,50}|fichier|strtoupper)] <br> LOGO_DOCUMENT{16,50}||image_sepia [(#LOGO_DOCUMENT{16,50}||image_sepia)] <br> LOGO_DOCUMENT{icone,16,50} [(#LOGO_DOCUMENT{icone,16,50})] <br> LOGO_DOCUMENT{vignette,16,50} [(#LOGO_DOCUMENT{vignette,16,50}|sinon{'pas de vignette'})] <br> LOGO_DOCUMENT{apercu,16,50} [(#LOGO_DOCUMENT{apercu,16,50})] <br> LOGO_DOCUMENT{auto,16,50} [(#LOGO_DOCUMENT{auto,16,50})] <br> LOGO_DOCUMENT{apercu,16,50,right} [(#LOGO_DOCUMENT{apercu,16,50,right})] <br> </BOUCLE_doc>
14 years ago
$logo = '';
if (!in_array($mode_logo, array('icone', 'apercu'))) {
remise en marche des #LOGO_DOCUMENT qui produisent bien le meme resultat que sur une branche 2.0 On ajoute un parametre optionnel a la balise qui peut avoir 4 valeurs possibles : #LOGO_DOCUMENT{icone} renverra toujours l'icone du type de document #LOGO_DOCUMENT{apercu} renverra l'apercu d'une image ou l'icone (mais pas la vignette telechargee si il y en a une) #LOGO_DOCUMENT{vignette} renverra la vignette telechargee si il y en a une, ou rien #LOGO_DOCUMENT{auto} correspond au fonctionnement par defaut, sans l'argument. Cet argument peut avoir n'importe quelle place dans la liste des arguments Jeu de test : <BOUCLE_doc(DOCUMENTS){id_article}{doublons}> <h1>DOCUMENT #ID_DOCUMENT</h1> LOGO_DOCUMENT|URL_ARTICLE [(#LOGO_DOCUMENT|#URL_ARTICLE)] <br> LOGO_DOCUMENT|right [(#LOGO_DOCUMENT|right)] <br> LOGO_DOCUMENT|fichier [(#LOGO_DOCUMENT|fichier)] <br> LOGO_DOCUMENT|lien [(#LOGO_DOCUMENT|lien)] <br> LOGO_DOCUMENT|fichier|strtoupper [(#LOGO_DOCUMENT|fichier|strtoupper)] <br> LOGO_DOCUMENT{icone} [(#LOGO_DOCUMENT{icone})] <br> LOGO_DOCUMENT{vignette} [(#LOGO_DOCUMENT{vignette}|sinon{'pas de vignette'})] <br> LOGO_DOCUMENT{apercu} [(#LOGO_DOCUMENT{apercu})] <br> LOGO_DOCUMENT{auto} [(#LOGO_DOCUMENT{auto})] <br> LOGO_DOCUMENT||image_sepia [(#LOGO_DOCUMENT||image_sepia)] <br><br><br><br> LOGO_DOCUMENT{16,50}|URL_ARTICLE [(#LOGO_DOCUMENT{16,50}|#URL_ARTICLE)] <br> LOGO_DOCUMENT{16,50}|right [(#LOGO_DOCUMENT{16,50}|right)] <br> LOGO_DOCUMENT{16,50}|fichier [(#LOGO_DOCUMENT{16,50}|fichier)] <br> LOGO_DOCUMENT{16,50}|lien [(#LOGO_DOCUMENT{16,50}|lien)] <br> LOGO_DOCUMENT{16,50}|fichier|strtoupper [(#LOGO_DOCUMENT{16,50}|fichier|strtoupper)] <br> LOGO_DOCUMENT{16,50}||image_sepia [(#LOGO_DOCUMENT{16,50}||image_sepia)] <br> LOGO_DOCUMENT{icone,16,50} [(#LOGO_DOCUMENT{icone,16,50})] <br> LOGO_DOCUMENT{vignette,16,50} [(#LOGO_DOCUMENT{vignette,16,50}|sinon{'pas de vignette'})] <br> LOGO_DOCUMENT{apercu,16,50} [(#LOGO_DOCUMENT{apercu,16,50})] <br> LOGO_DOCUMENT{auto,16,50} [(#LOGO_DOCUMENT{auto,16,50})] <br> LOGO_DOCUMENT{apercu,16,50,right} [(#LOGO_DOCUMENT{apercu,16,50,right})] <br> </BOUCLE_doc>
14 years ago
$logo = vignette_logo_document($row, $connect);
}
remise en marche des #LOGO_DOCUMENT qui produisent bien le meme resultat que sur une branche 2.0 On ajoute un parametre optionnel a la balise qui peut avoir 4 valeurs possibles : #LOGO_DOCUMENT{icone} renverra toujours l'icone du type de document #LOGO_DOCUMENT{apercu} renverra l'apercu d'une image ou l'icone (mais pas la vignette telechargee si il y en a une) #LOGO_DOCUMENT{vignette} renverra la vignette telechargee si il y en a une, ou rien #LOGO_DOCUMENT{auto} correspond au fonctionnement par defaut, sans l'argument. Cet argument peut avoir n'importe quelle place dans la liste des arguments Jeu de test : <BOUCLE_doc(DOCUMENTS){id_article}{doublons}> <h1>DOCUMENT #ID_DOCUMENT</h1> LOGO_DOCUMENT|URL_ARTICLE [(#LOGO_DOCUMENT|#URL_ARTICLE)] <br> LOGO_DOCUMENT|right [(#LOGO_DOCUMENT|right)] <br> LOGO_DOCUMENT|fichier [(#LOGO_DOCUMENT|fichier)] <br> LOGO_DOCUMENT|lien [(#LOGO_DOCUMENT|lien)] <br> LOGO_DOCUMENT|fichier|strtoupper [(#LOGO_DOCUMENT|fichier|strtoupper)] <br> LOGO_DOCUMENT{icone} [(#LOGO_DOCUMENT{icone})] <br> LOGO_DOCUMENT{vignette} [(#LOGO_DOCUMENT{vignette}|sinon{'pas de vignette'})] <br> LOGO_DOCUMENT{apercu} [(#LOGO_DOCUMENT{apercu})] <br> LOGO_DOCUMENT{auto} [(#LOGO_DOCUMENT{auto})] <br> LOGO_DOCUMENT||image_sepia [(#LOGO_DOCUMENT||image_sepia)] <br><br><br><br> LOGO_DOCUMENT{16,50}|URL_ARTICLE [(#LOGO_DOCUMENT{16,50}|#URL_ARTICLE)] <br> LOGO_DOCUMENT{16,50}|right [(#LOGO_DOCUMENT{16,50}|right)] <br> LOGO_DOCUMENT{16,50}|fichier [(#LOGO_DOCUMENT{16,50}|fichier)] <br> LOGO_DOCUMENT{16,50}|lien [(#LOGO_DOCUMENT{16,50}|lien)] <br> LOGO_DOCUMENT{16,50}|fichier|strtoupper [(#LOGO_DOCUMENT{16,50}|fichier|strtoupper)] <br> LOGO_DOCUMENT{16,50}||image_sepia [(#LOGO_DOCUMENT{16,50}||image_sepia)] <br> LOGO_DOCUMENT{icone,16,50} [(#LOGO_DOCUMENT{icone,16,50})] <br> LOGO_DOCUMENT{vignette,16,50} [(#LOGO_DOCUMENT{vignette,16,50}|sinon{'pas de vignette'})] <br> LOGO_DOCUMENT{apercu,16,50} [(#LOGO_DOCUMENT{apercu,16,50})] <br> LOGO_DOCUMENT{auto,16,50} [(#LOGO_DOCUMENT{auto,16,50})] <br> LOGO_DOCUMENT{apercu,16,50,right} [(#LOGO_DOCUMENT{apercu,16,50,right})] <br> </BOUCLE_doc>
14 years ago
// si on veut explicitement la vignette, ne rien renvoyer si il n'y en a pas
if ($mode_logo == 'vignette' and !$logo) {
remise en marche des #LOGO_DOCUMENT qui produisent bien le meme resultat que sur une branche 2.0 On ajoute un parametre optionnel a la balise qui peut avoir 4 valeurs possibles : #LOGO_DOCUMENT{icone} renverra toujours l'icone du type de document #LOGO_DOCUMENT{apercu} renverra l'apercu d'une image ou l'icone (mais pas la vignette telechargee si il y en a une) #LOGO_DOCUMENT{vignette} renverra la vignette telechargee si il y en a une, ou rien #LOGO_DOCUMENT{auto} correspond au fonctionnement par defaut, sans l'argument. Cet argument peut avoir n'importe quelle place dans la liste des arguments Jeu de test : <BOUCLE_doc(DOCUMENTS){id_article}{doublons}> <h1>DOCUMENT #ID_DOCUMENT</h1> LOGO_DOCUMENT|URL_ARTICLE [(#LOGO_DOCUMENT|#URL_ARTICLE)] <br> LOGO_DOCUMENT|right [(#LOGO_DOCUMENT|right)] <br> LOGO_DOCUMENT|fichier [(#LOGO_DOCUMENT|fichier)] <br> LOGO_DOCUMENT|lien [(#LOGO_DOCUMENT|lien)] <br> LOGO_DOCUMENT|fichier|strtoupper [(#LOGO_DOCUMENT|fichier|strtoupper)] <br> LOGO_DOCUMENT{icone} [(#LOGO_DOCUMENT{icone})] <br> LOGO_DOCUMENT{vignette} [(#LOGO_DOCUMENT{vignette}|sinon{'pas de vignette'})] <br> LOGO_DOCUMENT{apercu} [(#LOGO_DOCUMENT{apercu})] <br> LOGO_DOCUMENT{auto} [(#LOGO_DOCUMENT{auto})] <br> LOGO_DOCUMENT||image_sepia [(#LOGO_DOCUMENT||image_sepia)] <br><br><br><br> LOGO_DOCUMENT{16,50}|URL_ARTICLE [(#LOGO_DOCUMENT{16,50}|#URL_ARTICLE)] <br> LOGO_DOCUMENT{16,50}|right [(#LOGO_DOCUMENT{16,50}|right)] <br> LOGO_DOCUMENT{16,50}|fichier [(#LOGO_DOCUMENT{16,50}|fichier)] <br> LOGO_DOCUMENT{16,50}|lien [(#LOGO_DOCUMENT{16,50}|lien)] <br> LOGO_DOCUMENT{16,50}|fichier|strtoupper [(#LOGO_DOCUMENT{16,50}|fichier|strtoupper)] <br> LOGO_DOCUMENT{16,50}||image_sepia [(#LOGO_DOCUMENT{16,50}||image_sepia)] <br> LOGO_DOCUMENT{icone,16,50} [(#LOGO_DOCUMENT{icone,16,50})] <br> LOGO_DOCUMENT{vignette,16,50} [(#LOGO_DOCUMENT{vignette,16,50}|sinon{'pas de vignette'})] <br> LOGO_DOCUMENT{apercu,16,50} [(#LOGO_DOCUMENT{apercu,16,50})] <br> LOGO_DOCUMENT{auto,16,50} [(#LOGO_DOCUMENT{auto,16,50})] <br> LOGO_DOCUMENT{apercu,16,50,right} [(#LOGO_DOCUMENT{apercu,16,50,right})] <br> </BOUCLE_doc>
14 years ago
return '';
}
if ($mode_logo == 'icone') {
remise en marche des #LOGO_DOCUMENT qui produisent bien le meme resultat que sur une branche 2.0 On ajoute un parametre optionnel a la balise qui peut avoir 4 valeurs possibles : #LOGO_DOCUMENT{icone} renverra toujours l'icone du type de document #LOGO_DOCUMENT{apercu} renverra l'apercu d'une image ou l'icone (mais pas la vignette telechargee si il y en a une) #LOGO_DOCUMENT{vignette} renverra la vignette telechargee si il y en a une, ou rien #LOGO_DOCUMENT{auto} correspond au fonctionnement par defaut, sans l'argument. Cet argument peut avoir n'importe quelle place dans la liste des arguments Jeu de test : <BOUCLE_doc(DOCUMENTS){id_article}{doublons}> <h1>DOCUMENT #ID_DOCUMENT</h1> LOGO_DOCUMENT|URL_ARTICLE [(#LOGO_DOCUMENT|#URL_ARTICLE)] <br> LOGO_DOCUMENT|right [(#LOGO_DOCUMENT|right)] <br> LOGO_DOCUMENT|fichier [(#LOGO_DOCUMENT|fichier)] <br> LOGO_DOCUMENT|lien [(#LOGO_DOCUMENT|lien)] <br> LOGO_DOCUMENT|fichier|strtoupper [(#LOGO_DOCUMENT|fichier|strtoupper)] <br> LOGO_DOCUMENT{icone} [(#LOGO_DOCUMENT{icone})] <br> LOGO_DOCUMENT{vignette} [(#LOGO_DOCUMENT{vignette}|sinon{'pas de vignette'})] <br> LOGO_DOCUMENT{apercu} [(#LOGO_DOCUMENT{apercu})] <br> LOGO_DOCUMENT{auto} [(#LOGO_DOCUMENT{auto})] <br> LOGO_DOCUMENT||image_sepia [(#LOGO_DOCUMENT||image_sepia)] <br><br><br><br> LOGO_DOCUMENT{16,50}|URL_ARTICLE [(#LOGO_DOCUMENT{16,50}|#URL_ARTICLE)] <br> LOGO_DOCUMENT{16,50}|right [(#LOGO_DOCUMENT{16,50}|right)] <br> LOGO_DOCUMENT{16,50}|fichier [(#LOGO_DOCUMENT{16,50}|fichier)] <br> LOGO_DOCUMENT{16,50}|lien [(#LOGO_DOCUMENT{16,50}|lien)] <br> LOGO_DOCUMENT{16,50}|fichier|strtoupper [(#LOGO_DOCUMENT{16,50}|fichier|strtoupper)] <br> LOGO_DOCUMENT{16,50}||image_sepia [(#LOGO_DOCUMENT{16,50}||image_sepia)] <br> LOGO_DOCUMENT{icone,16,50} [(#LOGO_DOCUMENT{icone,16,50})] <br> LOGO_DOCUMENT{vignette,16,50} [(#LOGO_DOCUMENT{vignette,16,50}|sinon{'pas de vignette'})] <br> LOGO_DOCUMENT{apercu,16,50} [(#LOGO_DOCUMENT{apercu,16,50})] <br> LOGO_DOCUMENT{auto,16,50} [(#LOGO_DOCUMENT{auto,16,50})] <br> LOGO_DOCUMENT{apercu,16,50,right} [(#LOGO_DOCUMENT{apercu,16,50,right})] <br> </BOUCLE_doc>
14 years ago
$row['fichier'] = '';
}
return vignette_automatique($logo, $row, $lien, $x, $y, $align, null, $connect);
}
/**
* Recuperer le HTML du logo d'apres ses infos
* @param $logo
* @param $align
* @param $lien
* @return string
*/
function quete_html_logo($logo, $align, $lien) {
if (!is_array($logo)) {
return '';
}
$contexte = [];
foreach ($logo as $k=>$v) {
if (!is_numeric($k)) {
$contexte[$k] = $v;
}
}
$contexte['align'] = $align;
$contexte['lien'] = $lien;
return recuperer_fond('modeles/logo', $contexte);
}
/**
* Retourne le chemin d’un document lorsque le connect est précisé
*
* Sur un connecteur distant, voir si on connait l’adresse du site (spip distant)
* et l’utiliser le cas échéant.
*
* @param string $fichier Chemin
* @param string $connect Nom du connecteur
* @return string|false
*/
function document_spip_externe($fichier, $connect) {
if ($connect) {
$site = quete_meta('adresse_site', $connect);
if ($site) {
$dir = quete_meta('dir_img', $connect);
return "$site/$dir$fichier";
}
}
return false;
Début de mise à plat de la balise générique #LOGO_. Tout ce qui est calculable à la compilation l'est effectivement, ce qui allège le code produit. Conséquence, les fonctions {{{affiche_logos, calcule_logo_document, calcule_logo}}} n'ont plus les mêmes signatures, on en profite pour les nommer plus rationnellement, voire les faire disparaître. La production du code HTML est enfin rejetée en dehors du compilateur proprement dit, la fonction {{{balise_LOGO__dist}}} d'une part, et dans {{{inc/documents}}}. Ce n'est pas encore facilement surchargeable, mais on s'en approche. Test (sur un article avec logo): {{{ <BOUCLE_doc(DOCUMENTS){id_article}{doublons}> <h1>DOCUMENT #ID_DOCUMENT</h1> LOGO_DOCUMENT|URL_ARTICLE [(#LOGO_DOCUMENT|#URL_ARTICLE)] <br> LOGO_DOCUMENT|right [(#LOGO_DOCUMENT|right)] <br> LOGO_DOCUMENT|fichier [(#LOGO_DOCUMENT|fichier)] <br> LOGO_DOCUMENT|lien [(#LOGO_DOCUMENT|lien)] <br> LOGO_DOCUMENT|fichier|strtoupper [(#LOGO_DOCUMENT|fichier|strtoupper)] <br> LOGO_DOCUMENT||image_sepia [(#LOGO_DOCUMENT||image_sepia)] <br><br><br><br> LOGO_DOCUMENT{200,50}|URL_ARTICLE [(#LOGO_DOCUMENT{200,50}|#URL_ARTICLE)] <br> LOGO_DOCUMENT{200,50}|right [(#LOGO_DOCUMENT{200,50}|right)] <br> LOGO_DOCUMENT{200,50}|fichier [(#LOGO_DOCUMENT{200,50}|fichier)] <br> LOGO_DOCUMENT{200,50}|lien [(#LOGO_DOCUMENT{200,50}|lien)] <br> LOGO_DOCUMENT{200,50}|fichier|strtoupper [(#LOGO_DOCUMENT{200,50}|fichier|strtoupper)] <br> LOGO_DOCUMENT{200,50}||image_sepia [(#LOGO_DOCUMENT{200,50}||image_sepia)] </BOUCLE_doc> }}}
14 years ago
}
12 years ago
/**
* Retourne la vignette explicitement attachee a un document
* le resutat est un fichier local existant, ou une URL
* ou vide si pas de vignette
*
* @param array $row
* @param string $connect
* @return string
*/
function vignette_logo_document($row, $connect = '') {
if (!$row['id_vignette']) {
return '';
}
Début de mise à plat de la balise générique #LOGO_. Tout ce qui est calculable à la compilation l'est effectivement, ce qui allège le code produit. Conséquence, les fonctions {{{affiche_logos, calcule_logo_document, calcule_logo}}} n'ont plus les mêmes signatures, on en profite pour les nommer plus rationnellement, voire les faire disparaître. La production du code HTML est enfin rejetée en dehors du compilateur proprement dit, la fonction {{{balise_LOGO__dist}}} d'une part, et dans {{{inc/documents}}}. Ce n'est pas encore facilement surchargeable, mais on s'en approche. Test (sur un article avec logo): {{{ <BOUCLE_doc(DOCUMENTS){id_article}{doublons}> <h1>DOCUMENT #ID_DOCUMENT</h1> LOGO_DOCUMENT|URL_ARTICLE [(#LOGO_DOCUMENT|#URL_ARTICLE)] <br> LOGO_DOCUMENT|right [(#LOGO_DOCUMENT|right)] <br> LOGO_DOCUMENT|fichier [(#LOGO_DOCUMENT|fichier)] <br> LOGO_DOCUMENT|lien [(#LOGO_DOCUMENT|lien)] <br> LOGO_DOCUMENT|fichier|strtoupper [(#LOGO_DOCUMENT|fichier|strtoupper)] <br> LOGO_DOCUMENT||image_sepia [(#LOGO_DOCUMENT||image_sepia)] <br><br><br><br> LOGO_DOCUMENT{200,50}|URL_ARTICLE [(#LOGO_DOCUMENT{200,50}|#URL_ARTICLE)] <br> LOGO_DOCUMENT{200,50}|right [(#LOGO_DOCUMENT{200,50}|right)] <br> LOGO_DOCUMENT{200,50}|fichier [(#LOGO_DOCUMENT{200,50}|fichier)] <br> LOGO_DOCUMENT{200,50}|lien [(#LOGO_DOCUMENT{200,50}|lien)] <br> LOGO_DOCUMENT{200,50}|fichier|strtoupper [(#LOGO_DOCUMENT{200,50}|fichier|strtoupper)] <br> LOGO_DOCUMENT{200,50}||image_sepia [(#LOGO_DOCUMENT{200,50}||image_sepia)] </BOUCLE_doc> }}}
14 years ago
$fichier = quete_fichier($row['id_vignette'], $connect);
if ($url = document_spip_externe($fichier, $connect)) {
return $url;
Début de mise à plat de la balise générique #LOGO_. Tout ce qui est calculable à la compilation l'est effectivement, ce qui allège le code produit. Conséquence, les fonctions {{{affiche_logos, calcule_logo_document, calcule_logo}}} n'ont plus les mêmes signatures, on en profite pour les nommer plus rationnellement, voire les faire disparaître. La production du code HTML est enfin rejetée en dehors du compilateur proprement dit, la fonction {{{balise_LOGO__dist}}} d'une part, et dans {{{inc/documents}}}. Ce n'est pas encore facilement surchargeable, mais on s'en approche. Test (sur un article avec logo): {{{ <BOUCLE_doc(DOCUMENTS){id_article}{doublons}> <h1>DOCUMENT #ID_DOCUMENT</h1> LOGO_DOCUMENT|URL_ARTICLE [(#LOGO_DOCUMENT|#URL_ARTICLE)] <br> LOGO_DOCUMENT|right [(#LOGO_DOCUMENT|right)] <br> LOGO_DOCUMENT|fichier [(#LOGO_DOCUMENT|fichier)] <br> LOGO_DOCUMENT|lien [(#LOGO_DOCUMENT|lien)] <br> LOGO_DOCUMENT|fichier|strtoupper [(#LOGO_DOCUMENT|fichier|strtoupper)] <br> LOGO_DOCUMENT||image_sepia [(#LOGO_DOCUMENT||image_sepia)] <br><br><br><br> LOGO_DOCUMENT{200,50}|URL_ARTICLE [(#LOGO_DOCUMENT{200,50}|#URL_ARTICLE)] <br> LOGO_DOCUMENT{200,50}|right [(#LOGO_DOCUMENT{200,50}|right)] <br> LOGO_DOCUMENT{200,50}|fichier [(#LOGO_DOCUMENT{200,50}|fichier)] <br> LOGO_DOCUMENT{200,50}|lien [(#LOGO_DOCUMENT{200,50}|lien)] <br> LOGO_DOCUMENT{200,50}|fichier|strtoupper [(#LOGO_DOCUMENT{200,50}|fichier|strtoupper)] <br> LOGO_DOCUMENT{200,50}||image_sepia [(#LOGO_DOCUMENT{200,50}||image_sepia)] </BOUCLE_doc> }}}
14 years ago
}
Début de mise à plat de la balise générique #LOGO_. Tout ce qui est calculable à la compilation l'est effectivement, ce qui allège le code produit. Conséquence, les fonctions {{{affiche_logos, calcule_logo_document, calcule_logo}}} n'ont plus les mêmes signatures, on en profite pour les nommer plus rationnellement, voire les faire disparaître. La production du code HTML est enfin rejetée en dehors du compilateur proprement dit, la fonction {{{balise_LOGO__dist}}} d'une part, et dans {{{inc/documents}}}. Ce n'est pas encore facilement surchargeable, mais on s'en approche. Test (sur un article avec logo): {{{ <BOUCLE_doc(DOCUMENTS){id_article}{doublons}> <h1>DOCUMENT #ID_DOCUMENT</h1> LOGO_DOCUMENT|URL_ARTICLE [(#LOGO_DOCUMENT|#URL_ARTICLE)] <br> LOGO_DOCUMENT|right [(#LOGO_DOCUMENT|right)] <br> LOGO_DOCUMENT|fichier [(#LOGO_DOCUMENT|fichier)] <br> LOGO_DOCUMENT|lien [(#LOGO_DOCUMENT|lien)] <br> LOGO_DOCUMENT|fichier|strtoupper [(#LOGO_DOCUMENT|fichier|strtoupper)] <br> LOGO_DOCUMENT||image_sepia [(#LOGO_DOCUMENT||image_sepia)] <br><br><br><br> LOGO_DOCUMENT{200,50}|URL_ARTICLE [(#LOGO_DOCUMENT{200,50}|#URL_ARTICLE)] <br> LOGO_DOCUMENT{200,50}|right [(#LOGO_DOCUMENT{200,50}|right)] <br> LOGO_DOCUMENT{200,50}|fichier [(#LOGO_DOCUMENT{200,50}|fichier)] <br> LOGO_DOCUMENT{200,50}|lien [(#LOGO_DOCUMENT{200,50}|lien)] <br> LOGO_DOCUMENT{200,50}|fichier|strtoupper [(#LOGO_DOCUMENT{200,50}|fichier|strtoupper)] <br> LOGO_DOCUMENT{200,50}||image_sepia [(#LOGO_DOCUMENT{200,50}||image_sepia)] </BOUCLE_doc> }}}
14 years ago
$f = get_spip_doc($fichier);
if ($f and @file_exists($f)) {
return $f;
}
if ($row['mode'] !== 'vignette') {
return '';
}
return generer_url_entite($row['id_document'], 'document', '', '', $connect);
Début de mise à plat de la balise générique #LOGO_. Tout ce qui est calculable à la compilation l'est effectivement, ce qui allège le code produit. Conséquence, les fonctions {{{affiche_logos, calcule_logo_document, calcule_logo}}} n'ont plus les mêmes signatures, on en profite pour les nommer plus rationnellement, voire les faire disparaître. La production du code HTML est enfin rejetée en dehors du compilateur proprement dit, la fonction {{{balise_LOGO__dist}}} d'une part, et dans {{{inc/documents}}}. Ce n'est pas encore facilement surchargeable, mais on s'en approche. Test (sur un article avec logo): {{{ <BOUCLE_doc(DOCUMENTS){id_article}{doublons}> <h1>DOCUMENT #ID_DOCUMENT</h1> LOGO_DOCUMENT|URL_ARTICLE [(#LOGO_DOCUMENT|#URL_ARTICLE)] <br> LOGO_DOCUMENT|right [(#LOGO_DOCUMENT|right)] <br> LOGO_DOCUMENT|fichier [(#LOGO_DOCUMENT|fichier)] <br> LOGO_DOCUMENT|lien [(#LOGO_DOCUMENT|lien)] <br> LOGO_DOCUMENT|fichier|strtoupper [(#LOGO_DOCUMENT|fichier|strtoupper)] <br> LOGO_DOCUMENT||image_sepia [(#LOGO_DOCUMENT||image_sepia)] <br><br><br><br> LOGO_DOCUMENT{200,50}|URL_ARTICLE [(#LOGO_DOCUMENT{200,50}|#URL_ARTICLE)] <br> LOGO_DOCUMENT{200,50}|right [(#LOGO_DOCUMENT{200,50}|right)] <br> LOGO_DOCUMENT{200,50}|fichier [(#LOGO_DOCUMENT{200,50}|fichier)] <br> LOGO_DOCUMENT{200,50}|lien [(#LOGO_DOCUMENT{200,50}|lien)] <br> LOGO_DOCUMENT{200,50}|fichier|strtoupper [(#LOGO_DOCUMENT{200,50}|fichier|strtoupper)] <br> LOGO_DOCUMENT{200,50}||image_sepia [(#LOGO_DOCUMENT{200,50}||image_sepia)] </BOUCLE_doc> }}}
14 years ago
}
12 years ago
/**
* Calcul pour savoir si un objet est expose dans le contexte
* fournit par $reference
*
12 years ago
* @param int $id
* @param string $prim
* @param array $reference
* @param int $parent
* @param string $type
* @param string $connect
* @return bool|string
*/
function calcul_exposer($id, $prim, $reference, $parent, $type, $connect = '') {
static $exposer = array();