dbdf45e3bc20b0f2550c2023c30546d67d3bcfd6
[lhc/web/www.git] / www / ecrire / balise / formulaire_ecrire_auteur.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2017 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
8 * *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
12
13 /**
14 * Ce fichier gère la balise dynamique `#FORMULAIRE_ECRIRE_AUTEUR`
15 *
16 * @package SPIP\Core\Compilateur\Balises
17 **/
18
19 if (!defined('_ECRIRE_INC_VERSION')) {
20 return;
21 }
22
23 include_spip('base/abstract_sql');
24
25 /**
26 * Compile la balise dynamique `#FORMULAIRE_ECRIRE_AUTEUR` qui permet
27 * très logiquement d'afficher un formulaire pour écrire à un auteur
28 *
29 * Cette balise récupère l'id_auteur (et son email) ou l'id_article de
30 * la boucle AUTEURS ou ARTICLES englobante.
31 *
32 * Le ou les emails correspondants à l'auteur ou aux auteurs de l'article
33 * sont transmis au formulaire CVT (mais ils ne seront pas dévoilés
34 * au visiteur).
35 *
36 * @balise
37 *
38 * @param Champ $p
39 * Pile au niveau de la balise
40 * @return Champ
41 * Pile complétée du code compilé
42 **/
43 function balise_FORMULAIRE_ECRIRE_AUTEUR($p) {
44 return calculer_balise_dynamique($p, 'FORMULAIRE_ECRIRE_AUTEUR', array('id_auteur', 'id_article', 'email'));
45 }
46
47 /**
48 * Calculs de paramètres de contexte automatiques pour la balise FORMULAIRE_ECRIRE_AUTEUR
49 *
50 * Retourne le contexte du formulaire uniquement si l'email de l'auteur
51 * est valide, sinon rien (pas d'exécution/affichage du formulaire)
52 *
53 * @param array $args
54 * Liste des arguments demandés obtenus du contexte (id_auteur, id_article, email)
55 * @param array $context_compil
56 * Tableau d'informations sur la compilation
57 * @return array|string
58 * - Liste (id_auteur, id_article, email) des paramètres du formulaire CVT
59 * - chaîne vide sinon (erreur ou non affichage).
60 */
61 function balise_FORMULAIRE_ECRIRE_AUTEUR_stat($args, $context_compil) {
62 include_spip('inc/filtres');
63 // Pas d'id_auteur ni d'id_article ? Erreur de contexte
64 $id = intval($args[1]);
65 if (!$args[0] and !$id) {
66 $msg = array(
67 'zbug_champ_hors_motif',
68 array(
69 'champ' => 'FORMULAIRE_ECRIRE_AUTEUR',
70 'motif' => 'AUTEURS/ARTICLES'
71 )
72 );
73
74 erreur_squelette($msg, $context_compil);
75
76 return '';
77 }
78 // Si on est dans un contexte article,
79 // sortir tous les mails des auteurs de l'article
80 if (!$args[0] and $id) {
81 $r = '';
82 $s = sql_allfetsel('email',
83 'spip_auteurs AS A LEFT JOIN spip_auteurs_liens AS L ON (A.id_auteur=L.id_auteur AND L.objet=\'article\')',
84 "A.email != '' AND L.id_objet=$id");
85 foreach ($s as $row) {
86 if (email_valide($row['email'])) {
87 $r .= ', ' . $row['email'];
88 }
89 }
90 $args[2] = substr($r, 2);
91 }
92
93 // On ne peut pas ecrire a un auteur dont le mail n'est pas valide
94 if (!$args[2] or !email_valide($args[2])) {
95 return '';
96 }
97
98 // OK
99 return $args;
100 }