uawdijnntqw1x1x1
IP : 216.73.217.6
Hostname : webm002.cluster111.gra.hosting.ovh.net
Kernel : Linux webm002.cluster111.gra.hosting.ovh.net 6.18.42-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Wed Aug 5 15:59:48 CEST 2026 x86_64
Disable Function : _dyuweyrj4,_dyuweyrj4r,dl
OS : Linux
PATH:
/
home
/
atelierpru
/
provence
/
6bf95
/
..
/
tmp
/
..
/
52177
/
.
/
balise.tar
/
/
login_prive.php000066600000005410152442520610007577 0ustar00<?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. * \***************************************************************************/ /** * Ce fichier gère la balise dynamique dépréciée `#LOGIN_PRIVE` * * @package SPIP\Core\Compilateur\Balises **/ if (!defined("_ECRIRE_INC_VERSION")) { return; } #securite /** * Compile la balise dynamique `#LOGIN_PRIVE` qui permet d'afficher le * formulaire de connexion vers l'espace privé * * @balise * @deprecated Utiliser `#FORMULAIRE_LOGIN` * * @param Champ $p * Pile au niveau de la balise * @return Champ * Pile complétée du code compilé **/ function balise_LOGIN_PRIVE($p) { return calculer_balise_dynamique($p, 'LOGIN_PRIVE', array('url')); } /** * Calculs de paramètres de contexte automatiques pour la balise LOGIN_PRIVE * * Retourne le contexte du formulaire en prenant : * * 1. l'URL collectée ci-dessus (args0) ou donnée en premier paramètre (args1) * `#LOGIN_PRIVE{#URL_ECRIRE}` * 2. un éventuel paramètre (args2) indiquant le login et permettant une écriture * `<boucle(AUTEURS)>[(#LOGIN_PRIVE{#URL_ECRIRE, #LOGIN})]` * * @param array $args * Liste des arguments demandés obtenus du contexte (url) * @param array $context_compil * Tableau d'informations sur la compilation * @return array * Liste (url, login) des arguments collectés. */ function balise_LOGIN_PRIVE_stat($args, $context_compil) { return array(isset($args[1]) ? $args[1] : $args[0], (isset($args[2]) ? $args[2] : '')); } /** * Exécution de la balise dynamique `#LOGIN_PRIVE` * * Exécution mappée sur le formulaire de login. * * @param string $url * URL de destination après l'identification. Par défaut la page * d'accueil de l'espace privé. * @param string $login * Login de la personne à identifié (si connu) * @return array * Liste : Chemin du squelette, durée du cache, contexte **/ function balise_LOGIN_PRIVE_dyn($url, $login) { include_spip('balise/formulaire_'); if (!$url # pas d'url passee en filtre ou dans le contexte and !$url = _request('url') # ni d'url passee par l'utilisateur ) { $url = generer_url_ecrire('accueil', '', true); } return balise_FORMULAIRE__dyn('login', $url, $login, true); } formulaire_admin.php000066600000017771152442520610010614 0ustar00<?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. * \***************************************************************************/ /** * Ce fichier gère la balise dynamique `#FORMULAIRE_ADMIN` * * @package SPIP\Core\Formulaires **/ if (!defined('_ECRIRE_INC_VERSION')) { return; } /** * Compile la balise dynamique `#FORMULAIRE_ADMIN` qui des boutons * d'administration dans l'espace public * * Cette balise permet de placer les boutons d'administrations dans un * endroit spécifique du site. Si cette balise n'est pas présente, les boutons * seront automatiquement ajoutés par SPIP si l'auteur a activé le * cookie de correspondance. * * @balise * @see f_admin() * @example * ``` * #FORMULAIRE_ADMIN * ``` * * @param Champ $p * Pile au niveau de la balise * @return Champ * Pile complétée du code compilé **/ function balise_FORMULAIRE_ADMIN($p) { return calculer_balise_dynamique($p, 'FORMULAIRE_ADMIN', array()); } /** * Calculs de paramètres de contexte automatiques pour la balise FORMULAIRE_ADMIN * * On ne peut rien dire au moment de l'execution du squelette * * @param array $args * - Classe CSS éventuelle * @param array $context_compil * Tableau d'informations sur la compilation * @return array|string * - Liste (statut, id) si un mode d'inscription est possible * - chaîne vide sinon. */ function balise_FORMULAIRE_ADMIN_stat($args, $context_compil) { return $args; } /** * Retourne le squelette d'affichage et le contexte de la balise FORMULAIRE_ADMIN * * @note * Les boutons admin sont mis d'autorité si absents * donc une variable statique contrôle si FORMULAIRE_ADMIN a été vu. * * Toutefois, si c'est le debuger qui appelle, il peut avoir recopié * le code dans ses données et il faut le lui refournir. * Pas question de recompiler: ca fait boucler ! * Le debuger transmet donc ses données, et cette balise y retrouve son petit. * * @param string $float * Classe CSS éventuelle * @param string|array $debug * Informations sur la page contenant une erreur de compilation * @return array * Liste : Chemin du squelette, durée du cache, contexte **/ function balise_FORMULAIRE_ADMIN_dyn($float = '', $debug = '') { static $dejafait = false; if (!@$_COOKIE['spip_admin']) { return ''; } if (!is_array($debug)) { if ($dejafait) { return ''; } } else { if ($dejafait) { if (empty($debug['sourcefile'])) { return ''; } foreach ($debug['sourcefile'] as $k => $v) { if (strpos($v, 'administration.') !== false) { if (isset($debug['resultat'][$k . 'tout'])) { return $debug['resultat'][$k . 'tout']; } } } return ''; } } include_spip('inc/autoriser'); include_spip('base/abstract_sql'); $dejafait = true; // Preparer le #ENV des boutons $env = admin_objet(); // Pas de "modifier ce..." ? -> donner "acces a l'espace prive" if (!$env) { $env['ecrire'] = _DIR_RESTREINT_ABS; } $env['divclass'] = $float; $env['lang'] = admin_lang(); $env['calcul'] = (_request('var_mode') ? 'recalcul' : 'calcul'); $env['debug'] = ((defined('_VAR_PREVIEW') and _VAR_PREVIEW) ? "" : admin_debug()); $env['analyser'] = (!$env['debug'] and !$GLOBALS['xhtml']) ? '' : admin_valider(); $env['inclure'] = ((defined('_VAR_INCLURE') and _VAR_INCLURE) ? 'inclure' : ''); if (!$GLOBALS['use_cache']) { $env['use_cache'] = ' *'; } if (isset($debug['validation'])) { $env['xhtml_error'] = $debug['validation']; } $env['_pipelines']['formulaire_admin'] = array(); return array('formulaires/administration', 0, $env); } /** * Préparer le contexte d'environnement pour les boutons * * Permettra d'afficher le bouton 'Modifier ce...' s'il y a un * `$id_XXX` défini globalement par `spip_register_globals` * * @note * Attention à l'ordre dans la boucle: * on ne veut pas la rubrique si un autre bouton est possible * * @return array * Tableau de l'environnement calculé **/ function admin_objet() { include_spip('inc/urls'); $env = array(); $trouver_table = charger_fonction('trouver_table', 'base'); $objets = urls_liste_objets(false); $objets = array_diff($objets, array('rubrique')); $objets = array_reverse($objets); array_unshift($objets, 'rubrique'); foreach ($objets as $obj) { $type = $obj; if ($type == objet_type($type, false) and $_id_type = id_table_objet($type) and isset($GLOBALS['contexte'][$_id_type]) and $id = $GLOBALS['contexte'][$_id_type] and !is_array($id) and $id = intval($id) ) { $id = sql_getfetsel($_id_type, table_objet_sql($type), "$_id_type=" . intval($id)); if ($id) { $env[$_id_type] = $id; $env['objet'] = $type; $env['id_objet'] = $id; $env['voir_' . $obj] = str_replace('&', '&', generer_url_entite($id, $obj, '', '', false)); if ($desc = $trouver_table(table_objet_sql($type)) and isset($desc['field']['id_rubrique']) and $type != 'rubrique' ) { unset($env['id_rubrique']); unset($env['voir_rubrique']); if (admin_preview($type, $id, $desc)) { $env['preview'] = parametre_url(self(), 'var_mode', 'preview', '&'); } } } } } return $env; } /** * Détermine si l'élément est previsualisable * * @param string $type * Type d'objet * @param int $id * Identifinant de l'objet * @param array|null $desc * Description de la table * @return string|array * - Chaine vide si on est déjà en prévisu ou si pas de previsualisation possible * - Tableau d'un élément sinon. **/ function admin_preview($type, $id, $desc = null) { if (defined('_VAR_PREVIEW') and _VAR_PREVIEW) { return ''; } if (!$desc) { $trouver_table = charger_fonction('trouver_table', 'base'); $desc = $trouver_table(table_objet_sql($type)); } if (!$desc or !isset($desc['field']['statut'])) { return ''; } include_spip('inc/autoriser'); if (!autoriser('previsualiser')) { return ''; } $notpub = sql_in("statut", array('prop', 'prive')); if ($type == 'article' and $GLOBALS['meta']['post_dates'] != 'oui') { $notpub .= " OR (statut='publie' AND date>" . sql_quote(date('Y-m-d H:i:s')) . ")"; } return sql_fetsel('1', table_objet_sql($type), id_table_objet($type) . "=" . $id . " AND ($notpub)"); } /** * Régler les boutons dans la langue de l'admin (sinon tant pis) * * @return string * Code de langue **/ function admin_lang() { $alang = sql_getfetsel('lang', 'spip_auteurs', "login=" . sql_quote(preg_replace(',^@,', '', @$_COOKIE['spip_admin']))); if (!$alang) { return ''; } $l = lang_select($alang); $alang = $GLOBALS['spip_lang']; if ($l) { lang_select(); } return $alang; } /** * Retourne une URL vers un validateur * * @return string **/ function admin_valider() { return ((!isset($GLOBALS['xhtml']) or $GLOBALS['xhtml'] !== 'true') ? (parametre_url(self(), 'var_mode', 'debug', '&') . '&var_mode_affiche=validation') : ('http://validator.w3.org/check?uri=' . rawurlencode("http://" . $_SERVER['HTTP_HOST'] . nettoyer_uri()))); } /** * Retourne une URL vers le mode debug, si l'utilisateur a le droit, et si c'est utile * * @return string **/ function admin_debug() { return (( (isset($GLOBALS['forcer_debug']) and $GLOBALS['forcer_debug']) or (isset($GLOBALS['bouton_admin_debug']) and $GLOBALS['bouton_admin_debug']) or ( defined('_VAR_MODE') and _VAR_MODE == 'debug' and isset($_COOKIE['spip_debug']) and $_COOKIE['spip_debug'] ) ) and autoriser('debug') ) ? parametre_url(self(), 'var_mode', 'debug', '&') : ''; } index.php000066600000000002152442520610006361 0ustar00X info_.php000066600000003666152442520610006367 0ustar00<?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 génériques pour les balises `#INFO_XXXX` * * @package SPIP\Core\Compilateur\Balises **/ if (!defined('_ECRIRE_INC_VERSION')) { return; } /** * Compile la balise dynamique `#INFO_xx` qui génère n'importe quelle * information pour un objet * * Signature : `#INFO_n{objet,id_objet}` où n est une colonne sur la table * SQL de l'objet. * * @balise * @link http://www.spip.net/5544 * @uses generer_info_entite() * @example * ``` * #INFO_TITRE{article, #ENV{id_article}} * ``` * @param Champ $p * Pile au niveau de la balise * @return Champ * Pile complétée par le code à générer */ function balise_INFO__dist($p) { $info = $p->nom_champ; $type_objet = interprete_argument_balise(1, $p); $id_objet = interprete_argument_balise(2, $p); if ($info === 'INFO_' or !$type_objet or !$id_objet) { $msg = _T('zbug_balise_sans_argument', array('balise' => ' INFO_')); erreur_squelette($msg, $p); $p->interdire_scripts = true; return $p; } else { $info_sql = strtolower(substr($info, 5)); $code = "generer_info_entite($id_objet, $type_objet, '$info_sql'" . ($p->etoile ? "," . _q($p->etoile) : "") . ")"; $p->code = champ_sql($info, $p, $code); $p->interdire_scripts = true; return $p; } } login_public.php000066600000005530152442520610007733 0ustar00<?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. * \***************************************************************************/ /** * Ce fichier gère la balise dynamique dépréciée `#LOGIN_PUBLIC` * * @package SPIP\Core\Compilateur\Balises **/ if (!defined("_ECRIRE_INC_VERSION")) { return; } #securite /** * Compile la balise dynamique `#LOGIN_PUBLIC` qui permet d'afficher le * formulaire de connexion vers l'espace public * * @balise * @deprecated Utiliser `#FORMULAIRE_LOGIN` * * @param Champ $p * Pile au niveau de la balise * @param string $nom * Nom de la fonction de calcul des arguments statiques à appeler * @return Champ * Pile complétée du code compilé **/ function balise_LOGIN_PUBLIC($p, $nom = 'LOGIN_PUBLIC') { return calculer_balise_dynamique($p, $nom, array('url')); } /** * Calculs de paramètres de contexte automatiques pour la balise LOGIN_PUBLIC * * Retourne le contexte du formulaire en prenant : * * 1. l'URL collectée ci-dessus (args0) ou donnée en premier paramètre (args1) * `#LOGIN_PUBLIC{#SELF}` * 2. un éventuel paramètre (args2) indiquant le login et permettant une écriture * `<boucle(AUTEURS)>[(#LOGIN_PUBLIC{#SELF, #LOGIN})]` * * @param array $args * Liste des arguments demandés obtenus du contexte (url) * @param array $context_compil * Tableau d'informations sur la compilation * @return array * Liste (url, login) des arguments collectés. */ function balise_LOGIN_PUBLIC_stat($args, $context_compil) { return array(isset($args[1]) ? $args[1] : $args[0], (isset($args[2]) ? $args[2] : '')); } /** * Exécution de la balise dynamique `#LOGIN_PUBLIC` * * Exécution mappée sur le formulaire de login. * * @param string $url * URL de destination après l'identification. Par défaut la page * en cours. * @param string $login * Login de la personne à identifié (si connu) * @return array * Liste : Chemin du squelette, durée du cache, contexte **/ function balise_LOGIN_PUBLIC_dyn($url, $login) { include_spip('balise/formulaire_'); if (!$url # pas d'url passee en filtre ou dans le contexte and !$url = _request('url') # ni d'url passee par l'utilisateur ) { $url = parametre_url(self(), '', '', '&'); } return balise_FORMULAIRE__dyn('login', $url, $login, false); } url_logout.php000066600000004440152442520610007457 0ustar00<?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. * \***************************************************************************/ /** * Ce fichier gère la balise dynamique `#URL_LOGOUT` * * @package SPIP\Core\Compilateur\Balises **/ if (!defined('_ECRIRE_INC_VERSION')) { return; } /** * Compile la balise dynamique `#URL_LOGOUT` qui génère une URL permettant * de déconnecter l'auteur actuellement connecté * * @balise * @example * ``` * [<a href="(#URL_LOGOUT)">déconnexion</a>] * ``` * * @param Champ $p * Pile au niveau de la balise * @return Champ * Pile complétée du code compilé **/ function balise_URL_LOGOUT($p) { return calculer_balise_dynamique($p, 'URL_LOGOUT', array()); } /** * Calculs de paramètres de contexte automatiques pour la balise URL_LOGOUT * * @param array $args * Liste des arguments transmis à la balise * - `$args[0]` = URL destination après logout `[(#URL_LOGOUT{url})]` * @param array $context_compil * Tableau d'informations sur la compilation * @return array * Liste (url) des arguments collectés. */ function balise_URL_LOGOUT_stat($args, $context_compil) { $url = isset($args[0]) ? $args[0] : ''; return array($url); } /** * Exécution de la balise dynamique `#URL_LOGOUT` * * Retourne une URL de déconnexion uniquement si le visiteur est connecté. * * @param string $cible * URL de destination après déconnexion * @return string * URL de déconnexion ou chaîne vide. **/ function balise_URL_LOGOUT_dyn($cible) { if (!$GLOBALS['visiteur_session']['login'] and !$GLOBALS['visiteur_session']['statut']) { return ''; } return generer_url_action('logout', "logout=public&url=" . rawurlencode($cible ? $cible : self('&'))); } url_.php000066600000025016152442520610006227 0ustar00<?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 génériques pour les balises `#URL_XXXX` * * Les balises `URL_$type` sont génériques, sauf quelques cas particuliers. * * @package SPIP\Core\Compilateur\Balises **/ if (!defined('_ECRIRE_INC_VERSION')) { return; } /** * Génère le code compilé des balises d'URL * * Utilise le premier paramètre de la balise d'URL comme identifiant d'objet * s'il est donné, sinon le prendra dans un champ d'une boucle englobante. * * @uses generer_generer_url_arg() * @param string $type * Type d'objet * @param Champ $p * Pile au niveau de la balise * @return string * Code compilé **/ function generer_generer_url($type, $p) { $_id = interprete_argument_balise(1, $p); if (!$_id) { $primary = id_table_objet($type); $_id = champ_sql($primary, $p); } return generer_generer_url_arg($type, $p, $_id); } /** * Génère le code compilé des balises d'URL (en connaissant l'identifiant) * * - Si ces balises sont utilisées pour la base locale, * production des appels à `generer_url_entite(id-courant, entite)` * - Si la base est externe et sous SPIP, on produit * * - l'URL de l'objet si c'est une pièce jointe, ou sinon * - l'URL du site local appliqué sur l'objet externe, * ce qui permet de le voir à travers les squelettes du site local * * On communique le type-url distant à `generer_url_entite` mais il ne sert pas * car rien ne garantit que le .htaccess soit identique. À approfondir. * * @see generer_url_entite() * * @param string $type * Type d'objet * @param Champ $p * Pile au niveau de la balise * @param string $_id * Code compilé permettant d'obtenir l'identifiant de l'objet * @return string * Code compilé **/ function generer_generer_url_arg($type, $p, $_id) { if ($s = trouver_nom_serveur_distant($p)) { // si une fonction de generation des url a ete definie pour ce connect l'utiliser if (function_exists($f = 'generer_generer_url_' . $s)) { return $f($type, $_id, $s); } if (!$GLOBALS['connexions'][strtolower($s)]['spip_connect_version']) { return null; } $s = _q($s); # exception des urls de documents sur un serveur distant... if ($type == 'document') { return "quete_meta('adresse_site', $s) . '/' .\n\t" . "quete_meta('dir_img', $s) . \n\t" . "quete_fichier($_id,$s)"; } $s = ", '', '', $s, quete_meta('type_urls', $s)"; } else { $s = ", '', '', true"; } return "urlencode_1738(generer_url_entite($_id, '$type'$s))"; } /** * Compile la balise générique `#URL_xxx` qui génère l'URL d'un objet * * S'il existe une fonction spécifique de calcul d'URL pour l'objet demandé, * tel que `balise_URL_ARTICLE_dist()`, la fonction l'utilisera. Sinon, * on calcule une URL de façon générique. * * @balise * @uses generer_generer_url() * @example * ``` * #URL_ARTICLE * #URL_ARTICLE{3} * ``` * @param Champ $p * Pile au niveau de la balise * @return Champ * Pile complétée par le code à générer */ function balise_URL__dist($p) { $nom = $p->nom_champ; if ($nom === 'URL_') { $msg = array('zbug_balise_sans_argument', array('balise' => ' URL_')); erreur_squelette($msg, $p); $p->interdire_scripts = false; return $p; } elseif ($f = charger_fonction($nom, 'balise', true)) { return $f($p); } else { $nom = strtolower($nom); $code = generer_generer_url(substr($nom, 4), $p); $code = champ_sql($nom, $p, $code); $p->code = $code; if (!$p->etoile) { $p->code = "vider_url($code)"; } $p->interdire_scripts = false; return $p; } } /** * Compile la balise `#URL_ARTICLE` qui génère l'URL d'un article * * Retourne l'URL (locale) d'un article mais retourne dans le cas * d'un article syndiqué (boucle SYNDIC_ARTICLES), son URL distante d'origine. * * @balise * @uses generer_generer_url() * @link http://www.spip.net/3963 * @example * ``` * #URL_ARTICLE * #URL_ARTICLE{3} * ``` * @param Champ $p * Pile au niveau de la balise * @return Champ * Pile complétée par le code à générer */ function balise_URL_ARTICLE_dist($p) { // Cas particulier des boucles (SYNDIC_ARTICLES) if ($p->type_requete == 'syndic_articles') { $code = champ_sql('url', $p); } else { $code = generer_generer_url('article', $p); } $p->code = $code; if (!$p->etoile) { $p->code = "vider_url($code)"; } $p->interdire_scripts = false; return $p; } /** * Compile la balise `#URL_SITE` qui génère l'URL d'un site ou de cas spécifiques * * Génère une URL spécifique si la colonne SQL `url_site` est trouvée * (par exemple lien hypertexte d'un article), sinon l'URL d'un site syndiqué * * @balise * @uses generer_generer_url() * @see calculer_url() * @link http://www.spip.net/3861 * * @param Champ $p * Pile au niveau de la balise * @return Champ * Pile complétée par le code à générer */ function balise_URL_SITE_dist($p) { $code = champ_sql('url_site', $p); if (strpos($code, '@$Pile[0]') !== false) { $code = generer_generer_url('site', $p); if ($code === null) { return null; } } else { if (!$p->etoile) { $code = "calculer_url($code,'','url', \$connect)"; } } $p->code = $code; $p->interdire_scripts = false; return $p; } // Autres balises URL_*, qui ne concernent pas une table // (historique) /** * Compile la balise `#URL_SITE_SPIP` qui retourne l'URL du site * telle que définie dans la configuration * * @balise * @link http://www.spip.net/4623 * * @param Champ $p * Pile au niveau de la balise * @return Champ * Pile complétée par le code à générer */ function balise_URL_SITE_SPIP_dist($p) { $p->code = "sinon(\$GLOBALS['meta']['adresse_site'],'.')"; $p->code = "spip_htmlspecialchars(" . $p->code . ")"; $p->interdire_scripts = false; return $p; } /** * Compile la balise `#URL_PAGE` qui retourne une URL de type « page » * * - `#URL_PAGE{nom}` génère l'url pour la page `nom` * - `#URL_PAGE{nom,param=valeur}` génère l'url pour la page `nom` avec des paramètres * - `#URL_PAGE` sans argument retourne l'URL courante. * - `#URL_PAGE*` retourne l'URL sans convertir les `&` en `&` * * @balise * @link http://www.spip.net/4630 * @see generer_url_public() * @example * ``` * #URL_PAGE{backend} produit ?page=backend * #URL_PAGE{backend,id_rubrique=1} est équivalent à * [(#URL_PAGE{backend}|parametre_url{id_rubrique,1})] * ``` * * @param Champ $p * Pile au niveau de la balise * @return Champ * Pile complétée par le code à générer */ function balise_URL_PAGE_dist($p) { $code = interprete_argument_balise(1, $p); $args = interprete_argument_balise(2, $p); if ($args == null) { $args = "''"; } if ($s = trouver_nom_serveur_distant($p)) { // si une fonction de generation des url a ete definie pour ce connect l'utiliser // elle devra aussi traiter le cas derogatoire type=page if (function_exists($f = 'generer_generer_url_' . $s)) { if ($args and $args !== "''") { $code .= ", $args"; } $code = $f('page', $code, $s); return $p; } $s = 'connect=' . addslashes($s); $args = (($args and $args !== "''") ? "$args . '&$s'" : "'$s'"); } if (!$code) { $noentities = $p->etoile ? "'&'" : ''; $code = "url_de_base() . preg_replace(',^./,', '', self($noentities))"; } else { if (!$args) { $args = "''"; } $noentities = $p->etoile ? ", true" : ''; $code = "generer_url_public($code, $args$noentities)"; } $p->code = $code; spip_log("Calcul url page : connect vaut $s ca donne :" . $p->code . " args $args", _LOG_INFO); #$p->interdire_scripts = true; return $p; } /** * Compile la balise `#URL_ECRIRE` qui retourne une URL d'une page de l'espace privé * * - `#URL_ECRIRE{nom}` génère l'url pour la page `nom` de l'espace privé * - `#URL_ECRIRE{nom,param=valeur}` génère l'url pour la page `nom` avec des paramètres * - `#URL_ECRIRE` génère l'url pour la page d'accueil de l'espace privé * - `#URL_ECRIRE*` retourne l'URL sans convertir les `&` en `&` * * @balise * @link http://www.spip.net/5566 * @see generer_url_ecrire() * @example * ``` * #URL_ECRIRE{rubriques} -> ecrire/?exec=rubriques * ``` * * @param Champ $p * Pile au niveau de la balise * @return Champ * Pile complétée par le code à générer */ function balise_URL_ECRIRE_dist($p) { $code = interprete_argument_balise(1, $p); if (!$code) { $fonc = "''"; } else { $fonc = $code; $args = interprete_argument_balise(2, $p); if ($args === null) { $args = "''"; } $noentities = $p->etoile ? ", true" : ''; if (($args != "''") or $noentities) { $fonc .= ",$args$noentities"; } } $p->code = 'generer_url_ecrire(' . $fonc . ')'; $p->interdire_scripts = false; return $p; } /** * Compile la balise `#URL_ACTION_AUTEUR` qui retourne une URL d'action * sécurisée pour l'auteur en cours * * La balise accepte 3 paramètres. Les 2 premiers sont obligatoires : * * - le nom de l'action * - l'argument transmis à l'action (une chaîne de caractère) * - une éventuelle URL de redirection qui sert une fois l'action réalisée * * @balise * @see generer_action_auteur() * @example * `#URL_ACTION_AUTEUR{converser,arg,redirect}` pourra produire * `ecrire/?action=converser&arg=arg&hash=xxx&redirect=redirect` * * @param Champ $p * Pile au niveau de la balise * @return Champ * Pile complétée par le code à générer */ function balise_URL_ACTION_AUTEUR_dist($p) { $p->descr['session'] = true; $p->code = interprete_argument_balise(1, $p); $args = interprete_argument_balise(2, $p); if ($args != "''" && $args !== null) { $p->code .= "," . $args; } $redirect = interprete_argument_balise(3, $p); if ($redirect != "''" && $redirect !== null) { if ($args == "''" || $args === null) { $p->code .= ",''"; } $p->code .= "," . $redirect; } $p->code = "generer_action_auteur(" . $p->code . ")"; $p->interdire_scripts = false; return $p; } formulaire_.php000066600000025100152442520610007564 0ustar00<?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 génériques pour les balises formulaires * * @package SPIP\Core\Formulaires **/ if (!defined('_ECRIRE_INC_VERSION')) { return; } include_spip('inc/filtres'); include_spip('inc/texte'); /** * Protéger les saisies d'un champ de formulaire * * Proteger les ' et les " dans les champs que l'on va injecter, * sans toucher aux valeurs sérialisées * * @see entites_html() * @param string|array $texte * Saisie à protéger * @return string|array * Saisie protégée **/ function protege_champ($texte) { if (is_array($texte)) { $texte = array_map('protege_champ', $texte); } else { // ne pas corrompre une valeur serialize if ((preg_match(",^[abis]:\d+[:;],", $texte) and @unserialize($texte) != false) or is_null($texte)) { return $texte; } if (is_string($texte) and $texte and strpbrk($texte, "&\"'<>") !== false ) { $texte = spip_htmlspecialchars($texte, ENT_QUOTES); } elseif (is_bool($texte)) { $texte = ($texte ? '1' : ''); } } return $texte; } /** * Teste si un formulaire demandé possède un squelette pour l'afficher * * @see trouver_fond() * @param string $form * Nom du formulaire * @return string|bool * - string : chemin du squelette * - false : pas de squelette trouvé **/ function existe_formulaire($form) { if (substr($form, 0, 11) == "FORMULAIRE_") { $form = strtolower(substr($form, 11)); } else { $form = strtolower($form); } if (!$form) { return ''; } // on ne sait pas, le nom du formulaire n'est pas fourni ici return trouver_fond($form, 'formulaires/') ? $form : false; } /** * Balises Formulaires par défaut. * * Compilé en un appel à une balise dynamique. * * @param Champ $p * Description de la balise formulaire * @return Champ * Description complétée du code compilé appelant la balise dynamique **/ function balise_FORMULAIRE__dist($p) { // Cas d'un #FORMULAIRE_TOTO inexistant : renvoyer la chaine vide. // mais si #FORMULAIRE_{toto} on ne peut pas savoir a la compilation, continuer if (existe_formulaire($p->nom_champ) === false) { $p->code = "''"; $p->interdire_scripts = false; return $p; } // sinon renvoyer un code php dynamique return calculer_balise_dynamique($p, $p->nom_champ, array()); } /** * Balise dynamiques par défaut des formulaires * * @param string $form * Nom du formulaire * @return string|array * - array : squelette à appeler, durée du cache, contexte * - string : texte à afficher directement */ function balise_FORMULAIRE__dyn($form) { $form = existe_formulaire($form); if (!$form) { return ''; } // deux moyen d'arriver ici : // soit #FORMULAIRE_XX reroute avec 'FORMULAIRE_XX' ajoute en premier arg // soit #FORMULAIRE_{xx} // recuperer les arguments passes a la balise // on enleve le premier qui est le nom de la balise // deja recupere ci-dessus $args = func_get_args(); array_shift($args); $contexte = balise_FORMULAIRE__contexte($form, $args); if (!is_array($contexte)) { return $contexte; } return array("formulaires/$form", 3600, $contexte); } /** * Calcule le contexte à envoyer dans le squelette d'un formulaire * * @param string $form * Nom du formulaire * @param array $args * Arguments envoyés à l'appel du formulaire * @return array * Contexte d'environnement à envoyer au squelette **/ function balise_FORMULAIRE__contexte($form, $args) { // tester si ce formulaire vient d'etre poste (memes arguments) // pour ne pas confondre 2 #FORMULAIRES_XX identiques sur une meme page // si poste, on recupere les erreurs $je_suis_poste = false; if ($post_form = _request('formulaire_action') and $post_form == $form and $p = _request('formulaire_action_args') and is_array($p = decoder_contexte_ajax($p, $post_form)) ) { // enlever le faux attribut de langue masque array_shift($p); if (formulaire__identifier($form, $args, $p)) { $je_suis_poste = true; } } $editable = true; $erreurs = $post = array(); if ($je_suis_poste) { $post = traiter_formulaires_dynamiques(true); $e = "erreurs_$form"; $erreurs = isset($post[$e]) ? $post[$e] : array(); $editable = "editable_$form"; $editable = (!isset($post[$e])) || count($erreurs) || (isset($post[$editable]) && $post[$editable]); } $valeurs = formulaire__charger($form, $args, $je_suis_poste); // si $valeurs n'est pas un tableau, le formulaire n'est pas applicable // C'est plus fort qu'editable qui est gere par le squelette // Idealement $valeur doit etre alors un message explicatif. if (!is_array($valeurs)) { return is_string($valeurs) ? $valeurs : ''; } // charger peut passer une action si le formulaire ne tourne pas sur self() // ou une action vide si elle ne sert pas $action = (isset($valeurs['action'])) ? $valeurs['action'] : self('&', true); // bug IEx : si action finit par / // IE croit que le <form ... action=../ > est autoferme if (substr($action, -1) == '/') { // on ajoute une ancre pour feinter IE, au pire ca tue l'ancre qui finit par un / $action .= '#'; } // recuperer la saisie en cours si erreurs // seulement si c'est ce formulaire qui est poste // ou si on le demande explicitement par le parametre _forcer_request = true $dispo = ($je_suis_poste || (isset($valeurs['_forcer_request']) && $valeurs['_forcer_request'])); foreach (array_keys($valeurs) as $champ) { if ($champ[0] !== '_' and !in_array($champ, array('message_ok', 'message_erreur', 'editable'))) { if ($dispo and (($v = _request($champ)) !== null)) { $valeurs[$champ] = $v; } // nettoyer l'url des champs qui vont etre saisis if ($action) { $action = parametre_url($action, $champ, ''); } // proteger les ' et les " dans les champs que l'on va injecter $valeurs[$champ] = protege_champ($valeurs[$champ]); } } if ($action) { // nettoyer l'url $action = parametre_url($action, 'formulaire_action', ''); $action = parametre_url($action, 'formulaire_action_args', ''); } if (isset($valeurs['_action'])) { $securiser_action = charger_fonction('securiser_action', 'inc'); $secu = $securiser_action(reset($valeurs['_action']), end($valeurs['_action']), '', -1); $valeurs['_hidden'] = (isset($valeurs['_hidden']) ? $valeurs['_hidden'] : '') . "<input type='hidden' name='arg' value='" . $secu['arg'] . "' />" . "<input type='hidden' name='hash' value='" . $secu['hash'] . "' />"; } // empiler la lang en tant que premier argument implicite du CVT // pour permettre de la restaurer au moment du Verifier et du Traiter array_unshift($args, $GLOBALS['spip_lang']); $valeurs['formulaire_args'] = encoder_contexte_ajax($args, $form); $valeurs['erreurs'] = $erreurs; $valeurs['action'] = $action; $valeurs['form'] = $form; if (!isset($valeurs['id'])) { $valeurs['id'] = 'new'; } // editable peut venir de charger() ou de traiter() sinon if (!isset($valeurs['editable'])) { $valeurs['editable'] = $editable; } // dans tous les cas, renvoyer un espace ou vide (et pas un booleen) $valeurs['editable'] = ($valeurs['editable'] ? ' ' : ''); if ($je_suis_poste) { $valeurs['message_erreur'] = ""; if (isset($erreurs['message_erreur'])) { $valeurs['message_erreur'] = $erreurs['message_erreur']; } $valeurs['message_ok'] = ""; if (isset($post["message_ok_$form"])) { $valeurs['message_ok'] = $post["message_ok_$form"]; } elseif (isset($erreurs['message_ok'])) { $valeurs['message_ok'] = $erreurs["message_ok"]; } } return $valeurs; } /** * Charger les valeurs de saisie du formulaire * * @param string $form * @param array $args * @param bool $poste * @return array */ function formulaire__charger($form, $args, $poste) { if ($charger_valeurs = charger_fonction("charger", "formulaires/$form", true)) { $valeurs = call_user_func_array($charger_valeurs, $args); } else { $valeurs = array(); } $valeurs = pipeline( 'formulaire_charger', array( 'args' => array('form' => $form, 'args' => $args, 'je_suis_poste' => $poste), 'data' => $valeurs ) ); // prise en charge CVT multi etape if (is_array($valeurs) and isset($valeurs['_etapes'])) { include_spip('inc/cvt_multietapes'); $valeurs = cvtmulti_formulaire_charger_etapes( array('form' => $form, 'args' => $args, 'je_suis_poste' => $poste), $valeurs ); } // si $valeurs et false ou une chaine, pas de formulaire, donc pas de pipeline ! if (is_array($valeurs)) { if (!isset($valeurs['_pipelines'])) { $valeurs['_pipelines'] = array(); } // l'ancien argument _pipeline devient maintenant _pipelines // reinjectons le vieux _pipeline au debut de _pipelines if (isset($valeurs['_pipeline'])) { $pipe = is_array($valeurs['_pipeline']) ? reset($valeurs['_pipeline']) : $valeurs['_pipeline']; $args = is_array($valeurs['_pipeline']) ? end($valeurs['_pipeline']) : array(); $pipelines = array($pipe => $args); $valeurs['_pipelines'] = array_merge($pipelines, $valeurs['_pipelines']); } // et enfin, ajoutons systematiquement un pipeline sur le squelette du formulaire // qui constitue le cas le plus courant d'utilisation du pipeline recuperer_fond // (performance, cela evite de s'injecter dans recuperer_fond utilise pour *tous* les squelettes) $valeurs['_pipelines']['formulaire_fond'] = array('form' => $form, 'args' => $args, 'je_suis_poste' => $poste); } return $valeurs; } /** * Vérifier que le formulaire en cours est celui qui est poste * * On se base sur la fonction identifier (si elle existe) qui fournit * une signature identifiant le formulaire a partir de ses arguments * significatifs * * En l'absence de fonction identifier, on se base sur l'egalite des * arguments, ce qui fonctionne dans les cas simples * * @param string $form * @param array $args * @param array $p * @return bool */ function formulaire__identifier($form, $args, $p) { if ($identifier_args = charger_fonction("identifier", "formulaires/$form", true)) { return call_user_func_array($identifier_args, $args) === call_user_func_array($identifier_args, $p); } return $args === $p; } formulaire_ecrire_auteur.php000066600000006247152442520610012356 0ustar00<?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. * \***************************************************************************/ /** * Ce fichier gère la balise dynamique `#FORMULAIRE_ECRIRE_AUTEUR` * * @package SPIP\Core\Compilateur\Balises **/ if (!defined('_ECRIRE_INC_VERSION')) { return; } include_spip('base/abstract_sql'); /** * Compile la balise dynamique `#FORMULAIRE_ECRIRE_AUTEUR` qui permet * très logiquement d'afficher un formulaire pour écrire à un auteur * * Cette balise récupère l'id_auteur (et son email) ou l'id_article de * la boucle AUTEURS ou ARTICLES englobante. * * Le ou les emails correspondants à l'auteur ou aux auteurs de l'article * sont transmis au formulaire CVT (mais ils ne seront pas dévoilés * au visiteur). * * @balise * * @param Champ $p * Pile au niveau de la balise * @return Champ * Pile complétée du code compilé **/ function balise_FORMULAIRE_ECRIRE_AUTEUR($p) { return calculer_balise_dynamique($p, 'FORMULAIRE_ECRIRE_AUTEUR', array('id_auteur', 'id_article', 'email')); } /** * Calculs de paramètres de contexte automatiques pour la balise FORMULAIRE_ECRIRE_AUTEUR * * Retourne le contexte du formulaire uniquement si l'email de l'auteur * est valide, sinon rien (pas d'exécution/affichage du formulaire) * * @param array $args * Liste des arguments demandés obtenus du contexte (id_auteur, id_article, email) * @param array $context_compil * Tableau d'informations sur la compilation * @return array|string * - Liste (id_auteur, id_article, email) des paramètres du formulaire CVT * - chaîne vide sinon (erreur ou non affichage). */ function balise_FORMULAIRE_ECRIRE_AUTEUR_stat($args, $context_compil) { include_spip('inc/filtres'); // Pas d'id_auteur ni d'id_article ? Erreur de contexte $id = intval($args[1]); if (!$args[0] and !$id) { $msg = array( 'zbug_champ_hors_motif', array( 'champ' => 'FORMULAIRE_ECRIRE_AUTEUR', 'motif' => 'AUTEURS/ARTICLES' ) ); erreur_squelette($msg, $context_compil); return ''; } // Si on est dans un contexte article, // sortir tous les mails des auteurs de l'article if (!$args[0] and $id) { $r = ''; $s = sql_allfetsel('email', 'spip_auteurs AS A LEFT JOIN spip_auteurs_liens AS L ON (A.id_auteur=L.id_auteur AND L.objet=\'article\')', "A.email != '' AND L.id_objet=$id"); foreach ($s as $row) { if (email_valide($row['email'])) { $r .= ', ' . $row['email']; } } $args[2] = substr($r, 2); } // On ne peut pas ecrire a un auteur dont le mail n'est pas valide if (!$args[2] or !email_valide($args[2])) { return ''; } // OK return $args; } formulaire_inscription.php000066600000005000152442520610012043 0ustar00<?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. * \***************************************************************************/ /** * Ce fichier gère la balise dynamique `#FORMULAIRE_INSCRIPTION` * * @package SPIP\Core\Inscription **/ if (!defined('_ECRIRE_INC_VERSION')) { return; } include_spip('base/abstract_sql'); include_spip('inc/filtres'); // Balise independante du contexte /** * Compile la balise dynamique `#FORMULAIRE_INSCRIPTION` qui affiche * un formulaire d'inscription au site * * @balise * @example * ``` * #FORMULAIRE_INSCRIPTION * #FORMULAIRE_INSCRIPTION{nom_inscription, #ID_RUBRIQUE} * ``` * * @param Champ $p * Pile au niveau de la balise * @return Champ * Pile complétée du code compilé **/ function balise_FORMULAIRE_INSCRIPTION($p) { return calculer_balise_dynamique($p, 'FORMULAIRE_INSCRIPTION', array()); } /** * Calculs de paramètres de contexte automatiques pour la balise FORMULAIRE_INSCRIPTION * * En absence de mode d'inscription transmis à la balise, celui-ci est * calculé en fonction de la configuration : * * - '1comite' si les rédacteurs peuvent s'inscrire, * - '6forum' sinon si les forums sur abonnements sont actifs, * - rien sinon. * * @example * ``` * #FORMULAIRE_INSCRIPTION * [(#FORMULAIRE_INSCRIPTION{mode_inscription, #ID_RUBRIQUE})] * ``` * * @param array $args * - args[0] un statut d'auteur (rédacteur par defaut) * - args[1] indique la rubrique éventuelle de proposition * @param array $context_compil * Tableau d'informations sur la compilation * @return array|string * - Liste (statut, id) si un mode d'inscription est possible * - chaîne vide sinon. */ function balise_FORMULAIRE_INSCRIPTION_stat($args, $context_compil) { list($mode, $id, $retour) = array_pad($args, 3, null); include_spip('action/inscrire_auteur'); $mode = tester_statut_inscription($mode, $id); return $mode ? array($mode, $id, $retour) : ''; } menu_lang.php000066600000004642152442520610007235 0ustar00<?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. * \***************************************************************************/ /** * Ce fichier gère la balise dynamique `#MENU_LANG` * * @package SPIP\Core\Compilateur\Balises **/ if (!defined('_ECRIRE_INC_VERSION')) { return; } /** * Compile la balise dynamique `#MENU_LANG` qui affiche * un sélecteur de langue pour l'espace public * * Affiche le menu des langues de l'espace public * et présélectionne celle la globale `$lang` * ou de l'arguemnt fourni: `#MENU_LANG{#ENV{malangue}}` * * @balise * @link http://www.spip.net/4626 * * @param Champ $p * Pile au niveau de la balise * @return Champ * Pile complétée du code compilé **/ function balise_MENU_LANG($p) { return calculer_balise_dynamique($p, 'MENU_LANG', array('lang')); } /** * Calculs de paramètres de contexte automatiques pour la balise MENU_LANG * * S'il n'y a qu'une langue proposée, pas besoin du formulaire * (éviter une balise ?php inutile) * * @param array $args * Liste des arguments demandés obtenus du contexte (lang) * complétés de ceux fournis à la balise * @param array $context_compil * Tableau d'informations sur la compilation * @return array * Liste (lang) des arguments collectés et fournis. */ function balise_MENU_LANG_stat($args, $context_compil) { if (strpos($GLOBALS['meta']['langues_multilingue'], ',') === false) { return ''; } return $args; } /** * Exécution de la balise dynamique `#MENU_LANG` * * @uses menu_lang_pour_tous() * @note * Normalement `$opt` sera toujours non vide suite au test ci-dessus * * @param string $opt * Langue par défaut * @return array * Liste : Chemin du squelette, durée du cache, contexte **/ function balise_MENU_LANG_dyn($opt) { include_spip('balise/menu_lang_ecrire'); return menu_lang_pour_tous('var_lang', $opt); } logo_.php000066600000014260152442520610006364 0ustar00<?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 génériques pour les balises `#LOGO_XXXX` * * @package SPIP\Core\Compilateur\Balises **/ if (!defined('_ECRIRE_INC_VERSION')) { return; } /** * Compile la balise dynamique `#LOGO_xx` qui retourne le code HTML * pour afficher l'image de logo d'un objet éditorial de SPIP. * * Le type d'objet est récupéré dans le nom de la balise, tel que * `LOGO_ARTICLE` ou `LOGO_SITE`. * * Ces balises ont quelques options : * * - La balise peut aussi demander explicitement le logo normal ou de survol, * avec `LOGO_ARTICLE_NORMAL` ou `LOGO_ARTICLE_SURVOL`. * - On peut demander un logo de rubrique en absence de logo sur l'objet éditorial * demandé avec `LOGO_ARTICLE_RUBRIQUE` * - `LOGO_ARTICLE*` ajoute un lien sur l'image du logo vers l'objet éditorial * - `LOGO_ARTICLE**` retourne le nom du fichier de logo. * - `LOGO_ARTICLE{right}`. Valeurs possibles : top left right center bottom * - `LOGO_DOCUMENT{icone}`. Valeurs possibles : auto icone apercu vignette * - `LOGO_ARTICLE{200, 0}`. Redimensionnement indiqué * * @balise * @uses logo_survol() * @example * ``` * #LOGO_ARTICLE * ``` * * @param Champ $p * Pile au niveau de la balise * @return Champ * Pile complétée par le code à générer */ function balise_LOGO__dist($p) { preg_match(',^LOGO_([A-Z_]+?)(|_NORMAL|_SURVOL|_RUBRIQUE)$,i', $p->nom_champ, $regs); $type = strtolower($regs[1]); $suite_logo = $regs[2]; // cas de #LOGO_SITE_SPIP if ($type == 'site_spip') { $type = 'site'; $_id_objet = "\"'0'\""; } $id_objet = id_table_objet($type); if (!isset($_id_objet)) { $_id_objet = champ_sql($id_objet, $p); } $fichier = ($p->etoile === '**') ? -1 : 0; $coord = array(); $align = $lien = ''; $mode_logo = ''; if ($p->param and !$p->param[0][0]) { $params = $p->param[0]; array_shift($params); foreach ($params as $a) { if ($a[0]->type === 'texte') { $n = $a[0]->texte; if (is_numeric($n)) { $coord[] = $n; } elseif (in_array($n, array('top', 'left', 'right', 'center', 'bottom'))) { $align = $n; } elseif (in_array($n, array('auto', 'icone', 'apercu', 'vignette'))) { $mode_logo = $n; } } else { $lien = calculer_liste($a, $p->descr, $p->boucles, $p->id_boucle); } } } $coord_x = !$coord ? 0 : intval(array_shift($coord)); $coord_y = !$coord ? 0 : intval(array_shift($coord)); if ($p->etoile === '*') { include_spip('balise/url_'); $lien = generer_generer_url_arg($type, $p, $_id_objet); } $connect = $p->id_boucle ? $p->boucles[$p->id_boucle]->sql_serveur : ''; if ($type == 'document') { $qconnect = _q($connect); $doc = "quete_document($_id_objet, $qconnect)"; if ($fichier) { $code = "quete_logo_file($doc, $qconnect)"; } else { $code = "quete_logo_document($doc, " . ($lien ? $lien : "''") . ", '$align', '$mode_logo', $coord_x, $coord_y, $qconnect)"; } // (x=non-faux ? y : '') pour affecter x en retournant y if ($p->descr['documents']) { $code = '(($doublons["documents"] .= ",". ' . $_id_objet . ") ? $code : '')"; } } elseif ($connect) { $code = "''"; spip_log('Les logos distants ne sont pas prevus'); } else { $code = logo_survol($id_objet, $_id_objet, $type, $align, $fichier, $lien, $p, $suite_logo); } // demande de reduction sur logo avec ecriture spip 2.1 : #LOGO_xxx{200, 0} if ($coord_x or $coord_y) { $code = "filtrer('image_graver',filtrer('image_reduire'," . $code . ", '$coord_x', '$coord_y'))"; } $p->code = $code; $p->interdire_scripts = false; return $p; } /** * Calcule le code HTML pour l'image d'un logo * * @param string $id_objet * Nom de la clé primaire de l'objet (id_article, ...) * @param string $_id_objet * Code pour la compilation permettant de récupérer la valeur de l'identifiant * @param string $type * Type d'objet * @param string $align * Alignement demandé du logo * @param int $fichier * - -1 pour retourner juste le chemin de l'image * - 0 pour retourner le code HTML de l'image * @param string $lien * Lien pour encadrer l'image avec si présent * @param Champ $p * Pile au niveau de la balise * @param string $suite * Suite éventuelle de la balise logo, telle que `_SURVOL`, `_NORMAL` ou `_RUBRIQUE`. * @return string * Code compilé retournant le chemin du logo ou le code HTML du logo. **/ function logo_survol($id_objet, $_id_objet, $type, $align, $fichier, $lien, $p, $suite) { $code = "quete_logo('$id_objet', '" . (($suite == '_SURVOL') ? 'off' : (($suite == '_NORMAL') ? 'on' : 'ON')) . "', $_id_objet," . (($suite == '_RUBRIQUE') ? champ_sql('id_rubrique', $p) : (($type == 'rubrique') ? "quete_parent($_id_objet)" : "''")) . ', ' . intval($fichier) . ')'; if ($fichier) { return $code; } // class spip_logos a supprimer ulterieurement (transition douce vers spip_logo) // cf http://core.spip.net/issues/2483 $class = 'spip_logo '; if ($align) { $class .= "spip_logo_$align "; } $class .= 'spip_logos'; $style = ''; if (in_array($align, array('left', 'right'))) { $style = "float:$align"; $align = ''; } $code = "\n((!is_array(\$l = $code)) ? '':\n (" . '"<img class=\"' . $class . '\" alt=\"\"' . ($style ? " style=\\\"$style\\\"" : '') . ($align ? " align=\\\"$align\\\"" : '') . ' src=\"$l[0]\"" . $l[2] . ($l[1] ? " onmouseover=\"this.src=\'$l[1]\'\" onmouseout=\"this.src=\'$l[0]\'\"" : "") . \' />\'))'; if (!$lien) { return $code; } return ('(strlen($logo=' . $code . ')?\'<a href="\' .' . $lien . ' . \'">\' . $logo . \'</a>\':\'\')'); } configurer_metas.php000066600000006460152442520610010624 0ustar00<?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. * \***************************************************************************/ /** * Ce fichier gère la balise dynamique `#CONFIGURER_METAS` * * @package SPIP\Core\Compilateur\Balises **/ if (!defined('_ECRIRE_INC_VERSION')) { return; } /** * Compile la balise dynamique `#CONFIGURER_METAS` appelant un formulaire * de configuration * * L'usage `#CONFIGURER_METAS{nom}` suppose qu'il existe un formulaire * nommé `nom.html` et une table SQL `spip_nom` ayant deux colonnes * `nom` et `valeur` où sont stockées les configurations (comme la table `spip_meta`). * L'enregistrement des saisies du formulaire sera alors automatique. * * Cette fonction est dépréciée. Pour obtenir ce résultat, il faut * utiliser `#FORMULAIRE_CONFIGURER_NOM` qui appelle le formulaire `nom.html` * et dans ce formulaire indiquer un champ hidden spécifiant la table d'enregistrement * tel que : * * Chaque saisie à la racine de la table spip_nom : * <input type="hidden" name="_meta_casier" value="/nom" /> * * Toutes les saisies dans la clé 'config' de spip_nom : * <input type="hidden" name="_meta_casier" value="/nom/config" /> * * Chaque saisie à la racine de la table spip_meta : * <input type="hidden" name="_meta_casier" value="" /> * * Toutes les saisies dans la clé 'config' de spip_meta : * <input type="hidden" name="_meta_casier" value="config" /> * * @note * Comme l'emplacement du squelette est calcule (par l'argument de la balise) * on ne peut rien dire sur l'existence du squelette lors de la compil. * On pourrait toutefois traiter le cas de l'argument qui est une constante. * * @balise * @deprecated Utiliser `#FORMULAIRE_CONFIGURER_XX` * @param Champ $p * Pile au niveau de la balise * @return Champ * Pile complétée du code compilé **/ function balise_CONFIGURER_METAS_dist($p) { return calculer_balise_dynamique($p, $p->nom_champ, array()); } /** * Exécution de la balise dynamique `#CONFIGURER_METAS` * * À l'exécution on dispose du nom du squelette, on verifie qu'il existe. * Pour le calcul du contexte, c'est comme la balise `#FORMULAIRE_` * y compris le contrôle au retour pour faire apparaître le message d'erreur. * * @see balise_CONFIGURER_METAS_dist() * @param string $form * Nom du formulaire * @return array * Liste : Chemin du squelette, durée du cache, contexte **/ function balise_CONFIGURER_METAS_dyn($form) { include_spip('balise/formulaire_'); if (!existe_formulaire($form)) { return ''; } $args = func_get_args(); $contexte = balise_FORMULAIRE__contexte('configurer_metas', $args); if (!is_array($contexte)) { return $contexte; } return array('formulaires/' . $form, 3600, $contexte); } menu_lang_ecrire.php000066600000007052152442520610010564 0ustar00<?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. * \***************************************************************************/ /** * Ce fichier gère la balise dynamique `#MENU_LANG_ECRIRE` * * @package SPIP\Core\Compilateur\Balises **/ if (!defined('_ECRIRE_INC_VERSION')) { return; } /** * Compile la balise dynamique `#MENU_LANG_ECRIRE` qui affiche * un sélecteur de langue pour l'interface privée * * Affiche le menu des langues de l'espace privé * et présélectionne celle la globale `$lang` * ou de l'arguemnt fourni: `#MENU_LANG_ECRIRE{#ENV{malangue}}` * * @balise * @link http://www.spip.net/4626 * * @param Champ $p * Pile au niveau de la balise * @return Champ * Pile complétée du code compilé **/ function balise_MENU_LANG_ECRIRE($p) { return calculer_balise_dynamique($p, 'MENU_LANG_ECRIRE', array('lang')); } /** * Calculs de paramètres de contexte automatiques pour la balise MENU_LANG_ECRIRE * * S'il n'y a qu'une langue proposée, pas besoin du formulaire * (éviter une balise ?php inutile) * * @param array $args * Liste des arguments demandés obtenus du contexte (lang) * complétés de ceux fournis à la balise * @param array $context_compil * Tableau d'informations sur la compilation * @return array * Liste (lang) des arguments collectés et fournis. */ function balise_MENU_LANG_ECRIRE_stat($args, $context_compil) { include_spip('inc/lang'); if (strpos($GLOBALS['meta']['langues_proposees'], ',') === false) { return ''; } return $args; } /** * Exécution de la balise dynamique `#MENU_LANG_ECRIRE` * * @uses menu_lang_pour_tous() * @note * Normalement `$opt` sera toujours non vide suite au test ci-dessus * * @param string $opt * Langue par défaut * @return array * Liste : Chemin du squelette, durée du cache, contexte **/ function balise_MENU_LANG_ECRIRE_dyn($opt) { return menu_lang_pour_tous('var_lang_ecrire', $opt); } /** * Calcule l'environnement et le squelette permettant d'afficher * le formulaire de sélection de changement de langue * * Le changement de langue se fait par l'appel à l'action `converser` * * @uses lang_select() * @see action_converser_dist() * * @param string $nom * Nom de la variable qui sera postée par le formulaire * @param string $default * Valeur par défaut de la langue * @return array * Liste : Chemin du squelette, durée du cache, contexte **/ function menu_lang_pour_tous($nom, $default) { include_spip('inc/lang'); if ($GLOBALS['spip_lang'] <> $default) { $opt = lang_select($default); # et remplace if ($GLOBALS['spip_lang'] <> $default) { $default = ''; # annule tout choix par defaut if ($opt) { lang_select(); } } } # lien a partir de / $cible = parametre_url(self(), 'lang', '', '&'); $post = generer_url_action('converser', 'redirect=' . rawurlencode($cible), '&'); return array( 'formulaires/menu_lang', 3600, array( 'nom' => $nom, 'url' => $post, 'name' => $nom, 'default' => $default, ) ); }
/home/atelierpru/provence/6bf95/../tmp/../52177/./balise.tar