9ba74346f38120dcd25fce29522bad624395ec86
[lhc/web/www.git] / www / plugins-dist / forum / balise / formulaire_forum_prive.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2019 *
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 * Gestion du formulaire Forum Privé et de sa balise
15 *
16 * @package SPIP\Forum\Balises
17 **/
18 if (!defined("_ECRIRE_INC_VERSION")) {
19 return;
20 } #securite
21
22 include_spip('inc/acces');
23 include_spip('inc/texte');
24 include_spip('inc/forum');
25
26
27 /**
28 * Compile la balise `#FORMULAIRE_FORUM_PRIVE` qui affiche un formulaire d'ajout
29 * de commentaire pour l'espace privé
30 *
31 * Signature : `#FORMULAIRE_FORUM_PRIVE{[redirection[, objet, id_objet]]}`
32 *
33 * Particularité du contexte du formulaire pour permettre une saisie
34 * de mots-clés dans les forums : si la variable de personnalisation
35 * `$afficher_groupe[]` est définie dans le fichier d'appel, et si la table
36 * de référence est OK, la liste des mots-clés est alors proposée.
37 *
38 * @balise
39 * @see balise_FORMULAIRE_FORUM()
40 * @example
41 * ```
42 * #FORMULAIRE_FORUM_PRIVE seul calcule (objet, id_objet) depuis la boucle parente
43 * #FORMULAIRE_FORUM_PRIVE{#SELF} pour forcer l'url de retour
44 * #FORMULAIRE_FORUM_PRIVE{#SELF, article, 3} pour forcer l'objet et son identifiant
45 * ```
46 *
47 * @param Champ $p
48 * Pile au niveau de la balise
49 * @return Champ
50 * Pile complétée par le code à générer
51 */
52 function balise_FORMULAIRE_FORUM_PRIVE($p) {
53
54 /**
55 * On recupere $objet et $id_objet depuis une boucle englobante si possible
56 * Sinon, on essaie aussi de recuperer des id_xx dans l'URL qui pourraient indiquer
57 * sur quoi le formulaire porte.
58 * Enfin, on pourra aussi forcer objet et id_objet depuis l'appel du formulaire
59 */
60 $i_boucle = $p->nom_boucle ? $p->nom_boucle : $p->id_boucle;
61 if (isset($p->boucles[$i_boucle])) {
62 $_id_objet = $p->boucles[$i_boucle]->primary;
63 $_type = $p->boucles[$i_boucle]->id_table;
64 } else {
65 $_id_objet = $_type = '';
66 }
67
68 /**
69 * On essaye de trouver les forums en fonction de l'environnement
70 * pour cela, on recupere l'ensemble des id_xxx possibles dans l'env
71 */
72 $ids = forum_get_objets_depuis_env();
73 $ids = array_values($ids);
74
75 $obtenir = array(
76 $_id_objet,
77 'id_forum',
78 'forcer_previsu',
79 'statut',
80 );
81
82
83 if ($ids) {
84 $obtenir = array_merge($obtenir, $ids);
85 }
86
87 $p = calculer_balise_dynamique($p, 'FORMULAIRE_FORUM_PRIVE', $obtenir,
88 array("'$_type'", count($ids))
89 );
90
91 return $p;
92 }
93
94 /**
95 * Chercher l'objet/id_objet et la configuration du forum
96 *
97 * @param array $args
98 * @param array $context_compil
99 * @return array|bool
100 */
101 function balise_FORMULAIRE_FORUM_PRIVE_stat($args, $context_compil) {
102 // un arg peut contenir l'url sur lequel faire le retour
103 // exemple dans un squelette article.html : [(#FORMULAIRE_FORUM_PRIVE{#SELF})]
104 // recuperer les donnees du forum auquel on repond.
105 // deux autres a la suite pour forcer objet et id_objet
106 // [(#FORMULAIRE_FORUM_PRIVE{#SELF, article, 8})]
107 //
108
109 // $args = (obtenir) + (ids) + (url, objet, id_objet)
110 $ido = array_shift($args);
111 $id_forum = intval(array_shift($args));
112 $forcer_previsu = array_shift($args);
113 $statut = array_shift($args);
114
115 include_spip('balise/formulaire_forum');
116 // si statut privrac ou privadm, pas besoin d'objet !
117 $r = balise_forum_retrouve_objet($ido, $id_forum, $args, $context_compil,
118 !in_array($statut, array('privrac', 'privadm')));
119 if (!$r) {
120 return false;
121 }
122
123 list($objet, $id_objet, $retour) = $r;
124
125 return
126 array($objet, $id_objet, $id_forum, $forcer_previsu, $statut, $retour);
127 }