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.

101 lines
3.2 KiB

<?php
/***************************************************************************\
* SPIP, Système de publication pour l'internet *
* *
* Copyright © avec tendresse depuis 2001 *
* Arnaud Martin, Antoine Pitrou, Philippe Rivière, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribué sous licence GNU/GPL. *
* Pour plus de détails 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).
*/
Le débusqueur donne à présent aussi pour les balises dynamiques l'endroit précis de leur éventuelle mauvaise utilisation dans un squelette. Cette fonctionnalité a nécessité de revenir encore une fois sur le deuxième argument des balises dynamiques, tombé en désuétude en [14194], ressuscité en [14213] sur la suggestion de #1728: ce tableau est finalement composé d'abord de 5 valeurs issues du contexte de compilation (nom du squelette, nom du fichier compilé, nom de la boucle éventuelle où figure la balise, numéro de ligne, langue) suivis éventuellement des éléments du tableau optionnel fourni par la fonction principale de la balise dynamique comme 4e argument de la fonction {{{calculer_balise_dynamique}}}. Introduction aussi d'une nouvelle structure pour contenir ces informations, qui n'est peut-être pas très intuitive mais facilite leur propagation. Ce dépot s'accompagne d'un modification sémantique du libellé des erreurs concernant ces balises: elles ne sont pas nécessairement à utiliser dans une boucle (sinon on pourrait réperer l'erreur à la compilation et on n'aurait pas tout ce problème de contexte à trimbaler), il faut seulement que le {{{id_*}}} idoine soit présent (par exemple dans l'URL). Musée des horreurs ayant servi de tests pour les derniers dépôts: {{{ [(#FORMULAIRE_ECRIRE_AUTEUR)] [(#FORMULAIRE_SITE)] [(#FORMULAIRE_SIGNATURE)] <BOUCLE_coucou(AUTEURS){#ID_AUTEUR}> CHEMIN #INCLURE{expo, #X} </div> </BOUCLE_coucou> <//B_coucou> <BOUCLE2(AUTEURS){id_auteur} /> <BOUCLE2(ARTICLES){id_auteur} /> <BOUCLE3(ARTICLES){id_auteur} > [(#NOM&&&)] [(#NOM{,,,,,,,,,})] }}}
14 years ago
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 '';
Le débusqueur donne à présent aussi pour les balises dynamiques l'endroit précis de leur éventuelle mauvaise utilisation dans un squelette. Cette fonctionnalité a nécessité de revenir encore une fois sur le deuxième argument des balises dynamiques, tombé en désuétude en [14194], ressuscité en [14213] sur la suggestion de #1728: ce tableau est finalement composé d'abord de 5 valeurs issues du contexte de compilation (nom du squelette, nom du fichier compilé, nom de la boucle éventuelle où figure la balise, numéro de ligne, langue) suivis éventuellement des éléments du tableau optionnel fourni par la fonction principale de la balise dynamique comme 4e argument de la fonction {{{calculer_balise_dynamique}}}. Introduction aussi d'une nouvelle structure pour contenir ces informations, qui n'est peut-être pas très intuitive mais facilite leur propagation. Ce dépot s'accompagne d'un modification sémantique du libellé des erreurs concernant ces balises: elles ne sont pas nécessairement à utiliser dans une boucle (sinon on pourrait réperer l'erreur à la compilation et on n'aurait pas tout ce problème de contexte à trimbaler), il faut seulement que le {{{id_*}}} idoine soit présent (par exemple dans l'URL). Musée des horreurs ayant servi de tests pour les derniers dépôts: {{{ [(#FORMULAIRE_ECRIRE_AUTEUR)] [(#FORMULAIRE_SITE)] [(#FORMULAIRE_SIGNATURE)] <BOUCLE_coucou(AUTEURS){#ID_AUTEUR}> CHEMIN #INCLURE{expo, #X} </div> </BOUCLE_coucou> <//B_coucou> <BOUCLE2(AUTEURS){id_auteur} /> <BOUCLE2(ARTICLES){id_auteur} /> <BOUCLE3(ARTICLES){id_auteur} > [(#NOM&&&)] [(#NOM{,,,,,,,,,})] }}}
14 years ago
}
// 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;
}