[SPIP][PLUGINS] v3.0-->v3.2
[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 (!isset($formulaires_saisies[$id_formulaire])) {
55 $formulaires_saisies[$id_formulaire] = unserialize(
56 sql_getfetsel('saisies', 'spip_formulaires', 'id_formulaire = '.intval($id_formulaire))
57 );
58 }
59 // Si pas déjà présent, on cherche les valeurs de cette réponse
60 if (!isset($reponses_valeurs[$id_formulaires_reponse])) {
61 if ($champs = sql_allfetsel(
62 'nom,valeur',
63 'spip_formulaires_reponses_champs',
64 'id_formulaires_reponse = '.intval($id_formulaires_reponse)
65 )) {
66 foreach ($champs as $champ) {
67 $reponses_valeurs[$id_formulaires_reponse][$champ['nom']] = $tenter_unserialize($champ['valeur']);
68 }
69 }
70 }
71
72 // Si on demande la valeur brute, on ne génère rien, on renvoie telle quelle
73 if ($type_retour == 'brut') {
74 return $reponses_valeurs[$id_formulaires_reponse][$nom];
75 }
76
77 // Si on trouve bien la saisie demandée
78 if ($saisie = saisies_chercher($formulaires_saisies[$id_formulaire], $nom)) {
79 // On génère la vue de cette saisie avec la valeur trouvée précédemment
80 return recuperer_fond(
81 'saisies-vues/_base',
82 array_merge(
83 array(
84 'type_saisie' => $saisie['saisie'],
85 'valeur' => $reponses_valeurs[$id_formulaires_reponse][$nom],
86 'valeur_uniquement' => ($type_retour == 'valeur_uniquement' ? 'oui' : 'non'),
87 'sans_reponse' => $sans_reponse,
88 ),
89 $saisie['options']
90 )
91 );
92 }
93 }
94
95 /**
96 * Afficher le resume d'une reponse selon un modele qui contient des noms de champ "@input_1@ ..."
97 *
98 * @param int $id_formulaires_reponse
99 * @param int $id_formulaire
100 * @param string $resume_reponse
101 * @return string
102 */
103 function affiche_resume_reponse($id_formulaires_reponse, $id_formulaire = null, $modele_resume = null) {
104 static $modeles_resume = array();
105 static $modeles_vars = array();
106
107 if (is_null($id_formulaire)) {
108 $id_formulaire = sql_getfetsel(
109 'id_formulaire',
110 'spip_formulaires_reponses',
111 'id_formulaires_reponse='.intval($id_formulaires_reponse)
112 );
113 }
114 if (is_null($modele_resume) and !isset($modeles_resume[$id_formulaire])) {
115 $modeles_resume[$id_formulaire] = sql_getfetsel(
116 'resume_reponse',
117 'spip_formulaires',
118 'id_formulaire='.intval($id_formulaire)
119 );
120 }
121 if (is_null($modele_resume)) {
122 $modele_resume = $modeles_resume[$id_formulaire];
123 }
124
125 if (!$modele_resume) {
126 return '';
127 }
128
129 if (!isset($modeles_vars[$modele_resume])) {
130 preg_match_all(',@(.*)@,Uims', $modele_resume, $matches);
131 $modeles_vars[$modele_resume] = $matches[1];
132 }
133
134 $valeurs = array();
135 foreach ($modeles_vars[$modele_resume] as $var) {
136 $valeur = calculer_voir_reponse($id_formulaires_reponse, $id_formulaire, $var, 'valeur_uniquement', '');
137 // on ne veut pas du \n de PtoBR, mais on ne veut pas non plus faire un trim
138 $valeur = str_ireplace('</p>', '', $valeur);
139 $valeur = PtoBR($valeur);
140 if (strpos($valeur, '</li>')) {
141 $valeur = explode('</li>', $valeur);
142 array_pop($valeur);
143 $valeur = implode(', ', $valeur);
144 }
145 $valeur = supprimer_tags($valeur);
146 $valeurs["@$var@"] = $valeur;
147 }
148 return pipeline(
149 'formidable_affiche_resume_reponse',
150 array(
151 'args' => array(
152 'id_formulaire' => $id_formulaire,
153 'id_formulaires_reponse' => $id_formulaires_reponse,
154 'modele_resume' => $modele_resume,
155 'valeurs' => $valeurs,
156 ),
157 'data' => str_replace(array_keys($valeurs), array_values($valeurs), $modele_resume),
158 )
159 );
160 }
161
162 /**
163 * Si une saisie est de type 'fichiers'
164 * insère dans la description du résultat de cette saisie
165 * l'url de l'action pour récuperer la saisie
166 * Ajoute également une vignette correspondent à l'extention
167 * @param array $saisie_a_modifier
168 * @param string $nom_saisie
169 * @param array $saisies_du_formulaire
170 * @param int|string $id_formulaire
171 * @param int|string $id_formulaires_reponse
172 * return array $saisie_a_modifier
173 **/
174 function formidable_ajouter_action_recuperer_fichier($saisie_a_modifier, $nom_saisie, $saisies_du_formulaire, $id_formulaire, $id_formulaires_reponse) {
175 // précaution
176 include_spip('inc/saisies_lister');
177 include_spip('inc/formidable_fichiers');
178 $id_formulaire = strval($id_formulaire);
179 $id_formulaires_reponse = strval($id_formulaires_reponse);
180 $vignette_par_defaut = charger_fonction('vignette', 'inc/');
181 if (array_key_exists($nom_saisie, saisies_lister_avec_type($saisies_du_formulaire, 'fichiers'))) { //saisies SPIP
182 if (isset($saisie_a_modifier) and is_array($saisie_a_modifier)) {
183 foreach ($saisie_a_modifier as $i => $valeur) {
184 $url = formidable_generer_url_action_recuperer_fichier(
185 $id_formulaire,
186 $id_formulaires_reponse,
187 $nom_saisie,
188 $valeur['nom']
189 );
190 $saisie_a_modifier[$i]['url'] = $url;
191 if (in_array($valeur['extension'],array('png','jpg','gif'))) {
192 $saisie_a_modifier[$i]['vignette'] = _DIR_FICHIERS_FORMIDABLE."formulaire_$id_formulaire/reponse_$id_formulaires_reponse/$nom_saisie/".$valeur['nom'];
193 } else {
194 $saisie_a_modifier[$i]['vignette'] = $vignette_par_defaut($valeur['extension'], false);
195 }
196 }
197 }
198 }
199 return $saisie_a_modifier;
200 }