[PLUGINS] ~maj globale
[lhc/web/www.git] / www / plugins / formidable / formidable_fonctions.php
1 <?php
2
3 /**
4 * Chargement des fonctions pour les squelettes
5 *
6 * @package SPIP\Formidable\Fonctions
7 **/
8
9 if (!defined('_ECRIRE_INC_VERSION')) {
10 return;
11 }
12
13 include_spip('inc/formidable');
14 include_spip('public/formidable_criteres');
15
16 /**
17 * #VOIR_REPONSE{checkbox_2} dans une boucle (FORMULAIRES_REPONSES)
18 *
19 * @param Pile $p
20 * @return Pile
21 */
22 function balise_VOIR_REPONSE_dist($p) {
23 $nom = interprete_argument_balise(1, $p);
24 if (!$type_retour = interprete_argument_balise(2, $p)) {
25 $type_retour = 'null';
26 }
27 if (!$sans_reponse = interprete_argument_balise(3, $p)) {
28 $sans_reponse = 'null';
29 }
30 $id_formulaires_reponse = champ_sql('id_formulaires_reponse', $p);
31 $id_formulaire = champ_sql('id_formulaire', $p);
32 $p->code = "calculer_voir_reponse($id_formulaires_reponse, $id_formulaire, $nom, $type_retour, $sans_reponse)";
33 return $p;
34 }
35
36 /**
37 * @param int $id_formulaires_reponse
38 * @param int $id_formulaire
39 * @param string $nom
40 * @param string $type_retour
41 * 'brut' : valeur brute
42 * 'valeur_uniquement' : la valeur seulement
43 * defaut : tout le HTML de la saisie
44 * @param null|string $sans_reponse
45 * texte affiche si aucune valeur en base pour ce champ
46 * @return array|string
47 */
48 function calculer_voir_reponse($id_formulaires_reponse, $id_formulaire, $nom, $type_retour = null, $sans_reponse = null) {
49 static $formulaires_saisies = array();
50 static $reponses_valeurs = array();
51 $tenter_unserialize = charger_fonction('tenter_unserialize', 'filtre/');
52
53 // Si pas déjà présent, on cherche les saisies de ce formulaire
54 if (is_null($formulaires_saisies[$id_formulaire])) {
55 $formulaires_saisies[$id_formulaire] = unserialize(sql_getfetsel('saisies', 'spip_formulaires', 'id_formulaire = '.intval($id_formulaire)));
56 }
57 // Si pas déjà présent, on cherche les valeurs de cette réponse
58 if (is_null($reponses_valeurs[$id_formulaires_reponse])) {
59 if ($champs = sql_allfetsel('nom,valeur', 'spip_formulaires_reponses_champs', 'id_formulaires_reponse = '.intval($id_formulaires_reponse))) {
60 foreach ($champs as $champ) {
61 $reponses_valeurs[$id_formulaires_reponse][$champ['nom']] = $tenter_unserialize($champ['valeur']);
62 }
63 }
64 }
65
66 // Si on demande la valeur brute, on ne génère rien, on renvoie telle quelle
67 if ($type_retour == 'brut') {
68 return $reponses_valeurs[$id_formulaires_reponse][$nom];
69 }
70
71 // Si on trouve bien la saisie demandée
72 if ($saisie = saisies_chercher($formulaires_saisies[$id_formulaire], $nom)) {
73 // On génère la vue de cette saisie avec la valeur trouvée précédemment
74 return recuperer_fond(
75 'saisies-vues/_base',
76 array_merge(
77 array(
78 'type_saisie' => $saisie['saisie'],
79 'valeur' => $reponses_valeurs[$id_formulaires_reponse][$nom],
80 'valeur_uniquement' => ($type_retour == 'valeur_uniquement' ? 'oui' : 'non'),
81 'sans_reponse' => $sans_reponse,
82 ),
83 $saisie['options']
84 )
85 );
86 }
87 }
88
89 /**
90 * Afficher le resume d'une reponse selon un modele qui contient des noms de champ "@input_1@ ..."
91 *
92 * @param int $id_formulaires_reponse
93 * @param int $id_formulaire
94 * @param string $resume_reponse
95 * @return string
96 */
97 function affiche_resume_reponse($id_formulaires_reponse, $id_formulaire = null, $modele_resume = null) {
98 static $modeles_resume = array();
99 static $modeles_vars = array();
100
101 if (is_null($id_formulaire)) {
102 $id_formulaire = sql_getfetsel('id_formulaire', 'spip_formulaires_reponses', 'id_formulaires_reponse='.intval($id_formulaires_reponse));
103 }
104 if (is_null($modele_resume) and !isset($modeles_resume[$id_formulaire])) {
105 $modeles_resume[$id_formulaire] = sql_getfetsel('resume_reponse', 'spip_formulaires', 'id_formulaire='.intval($id_formulaire));
106 }
107 if (is_null($modele_resume)) {
108 $modele_resume = $modeles_resume[$id_formulaire];
109 }
110
111 if (!$modele_resume) {
112 return '';
113 }
114
115 if (!isset($modeles_vars[$modele_resume])) {
116 preg_match_all(',@(.*)@,Uims', $modele_resume, $matches);
117 $modeles_vars[$modele_resume] = $matches[1];
118 }
119
120 $valeurs = array();
121 foreach ($modeles_vars[$modele_resume] as $var) {
122 $valeur = calculer_voir_reponse($id_formulaires_reponse, $id_formulaire, $var, 'valeur_uniquement', '');
123 // on ne veut pas du \n de PtoBR, mais on ne veut pas non plus faire un trim
124 $valeur = str_ireplace('</p>', '', $valeur);
125 $valeur = PtoBR($valeur);
126 if (strpos($valeur, '</li>')) {
127 $valeur = explode('</li>', $valeur);
128 array_pop($valeur);
129 $valeur = implode(', ', $valeur);
130 }
131 $valeur = supprimer_tags($valeur);
132 $valeurs["@$var@"] = $valeur;
133 }
134 return pipeline(
135 'formidable_affiche_resume_reponse',
136 array(
137 'args' => array(
138 'id_formulaire' => $id_formulaire,
139 'id_formulaires_reponse' => $id_formulaires_reponse,
140 'modele_resume' => $modele_resume,
141 'valeurs' => $valeurs,
142 ),
143 'data' => str_replace(array_keys($valeurs), array_values($valeurs), $modele_resume),
144 )
145 );
146 }