source: spip-zone/_plugins_/formidable/trunk/formidable_fonctions.php

Last change on this file was 125309, checked in by Maïeul Rouquette, 10 months ago

calculer_voir_reponses : prendre en compte le cas des saisies fichiers, où il faut installer le lien de téléchargement

File size: 8.6 KB
Line 
1<?php
2
3/**
4 * Chargement des fonctions pour les squelettes
5 *
6 * @package SPIP\Formidable\Fonctions
7 **/
8
9if (!defined('_ECRIRE_INC_VERSION')) {
10        return;
11}
12
13include_spip('inc/formidable');
14include_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 */
22function 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        $boucle = $p->boucles;
33        $boucle = current($boucle);
34        $sql_serveur = $boucle->sql_serveur;
35        $sql_serveur = "'$sql_serveur'";
36        $p->code = "calculer_voir_reponse($id_formulaires_reponse, $id_formulaire, $nom, $sql_serveur, $type_retour, $sans_reponse)";
37        return $p;
38}
39
40/**
41 * @param int $id_formulaires_reponse
42 * @param int $id_formulaire
43 * @param string $nom
44 * @param string $sql_serveur
45 * @param string $type_retour
46 *   'brut' : valeur brute
47 *   'valeur_uniquement' : la valeur seulement
48 *   'label' : le label associé à la saisie
49 *   'edit' : pour les crayons
50 *   defaut : tout le HTML de la saisie
51 * @param null|string $sans_reponse
52 *   texte affiche si aucune valeur en base pour ce champ
53 * @return array|string
54 */
55function calculer_voir_reponse($id_formulaires_reponse, $id_formulaire, $nom, $sql_serveur = '', $type_retour = null, $sans_reponse = null) {
56        static $formulaires_saisies = array();
57        static $reponses_valeurs = array();
58        $tenter_unserialize = charger_fonction('tenter_unserialize', 'filtre/');
59
60        // Si pas déjà présent, on cherche les saisies de ce formulaire
61        if (!isset($formulaires_saisies[$id_formulaire])) {
62                $formulaires_saisies[$id_formulaire] = unserialize(
63                        sql_getfetsel('saisies',//select
64                        'spip_formulaires',//from
65                        'id_formulaire = '.intval($id_formulaire),//where
66                        '',//groupby
67                        '',//orderby
68                        '',//limit
69                        '',//having
70                        $sql_serveur
71                )
72                );
73        }
74        // Si pas déjà présent, on cherche les valeurs de cette réponse
75        if (!isset($reponses_valeurs[$id_formulaires_reponse])) {
76                if ($champs = sql_allfetsel(
77                        'nom,valeur,id_formulaires_reponses_champ',//select
78                        'spip_formulaires_reponses_champs',//from
79                        'id_formulaires_reponse = '.intval($id_formulaires_reponse),//where
80                        '',//groupby
81                        '',//orderby
82                        '',//limit
83                        '',//having
84                        $sql_serveur//
85                )) {
86                        foreach ($champs as $champ) {
87                                $reponses_valeurs[$id_formulaires_reponse][$champ['nom']] = array(
88                                        'valeur' =>  formidable_ajouter_action_recuperer_fichier(
89                                                $tenter_unserialize($champ['valeur']),
90                                                $champ['nom'],
91                                                $formulaires_saisies[$id_formulaire],
92                                                $id_formulaire,
93                                                $id_formulaires_reponse
94                                        ),
95                                        'id' => $champ['id_formulaires_reponses_champ']
96                                );
97                        }
98                }
99        }
100
101        // Si on demande la valeur brute, on ne génère rien, on renvoie telle quelle
102        if ($type_retour == 'brut') {
103                return $reponses_valeurs[$id_formulaires_reponse][$nom]['valeur'];
104        }
105
106        // Si on demande edit > mode crayon > on génère le crayon correspond
107        if ($type_retour == 'edit') {
108                if (isset($reponses_valeurs[$id_formulaires_reponse][$nom]['id'])) {
109                        $valeur = $reponses_valeurs[$id_formulaires_reponse][$nom]['id'];
110                } else {
111                        $valeur = sql_insertq('spip_formulaires_reponses_champs', array('id_formulaires_reponse' => $id_formulaires_reponse, 'nom' => $nom));
112                }
113                return 'crayon '.'formulaires_reponses_champ-valeur-'. $valeur;
114        }
115        // Si on trouve bien la saisie demandée
116        if ($saisie = saisies_chercher($formulaires_saisies[$id_formulaire], $nom)) {
117                // Si on demande le label, on ne génère rien, on renvoie juste le label
118                if ($type_retour == 'label') {
119                        return $saisie['options']['label'];
120                }
121                // On génère la vue de cette saisie avec la valeur trouvée précédemment
122                return recuperer_fond(
123                        'saisies-vues/_base',
124                        array_merge(
125                                array(
126                                        'type_saisie' => $saisie['saisie'],
127                                        'valeur' => $reponses_valeurs[$id_formulaires_reponse][$nom]['valeur'],
128                                        'valeur_uniquement' => ($type_retour == 'valeur_uniquement' ? 'oui' : 'non'),
129                                        'sans_reponse' => $sans_reponse,
130                                ),
131                                $saisie['options']
132                        )
133                );
134        }
135}
136
137/**
138 * Afficher le resume d'une reponse selon un modele qui contient des noms de champ "@input_1@ ..."
139 *
140 * @param int $id_formulaires_reponse
141 * @param int $id_formulaire
142 * @param string $resume_reponse
143 * @return string
144 */
145function affiche_resume_reponse($id_formulaires_reponse, $id_formulaire = null, $modele_resume = null) {
146        static $modeles_resume = array();
147        static $saisies_form = array();
148
149        if (is_null($id_formulaire)) {
150                $id_formulaire = sql_getfetsel(
151                        'id_formulaire',
152                        'spip_formulaires_reponses',
153                        'id_formulaires_reponse='.intval($id_formulaires_reponse)
154                );
155        }
156
157        if (is_null($modele_resume) and !isset($modeles_resume[$id_formulaire])) {
158                $row = sql_fetsel('saisies, traitements', 'spip_formulaires', 'id_formulaire='.intval($id_formulaire));
159                $saisies = unserialize($row['saisies']);
160                $saisies_form[$id_formulaire] = $saisies;
161                $traitements = unserialize($row['traitements']);
162                if (isset($traitements['enregistrement']['resume_reponse'])) {
163                        $modeles_resume[$id_formulaire] = $traitements['enregistrement']['resume_reponse'];
164                } else {
165                        $modeles_resume[$id_formulaire] = '';
166                }
167        }
168        if (is_null($modele_resume)) {
169                $modele_resume = $modeles_resume[$id_formulaire];
170                $saisies = $saisies_form[$id_formulaire];
171        }
172
173        if (!$modele_resume) {
174                return '';
175        }
176
177        $valeurs = array();
178        $chaine = formidable_raccourcis_arobases_2_valeurs_champs($modele_resume, $saisies, false, '', $source = 'base', $id_formulaires_reponse, $id_formulaire, $valeurs, $valeurs_libellees);
179
180        // Pour compatibilité historique : remplacer les clés dans $valeurs_libellees pour mettre un arobase autour
181        if (is_array($valeurs_libellees)) {
182                foreach ($valeurs_libellees as $cle => $val) {
183                        unset($valeurs_libellees[$cle]);
184                        $valeurs_libellees["@$cle@"] = $val;
185                }
186        }
187        return pipeline(
188                'formidable_affiche_resume_reponse',
189                array(
190                        'args' => array(
191                                'id_formulaire' => $id_formulaire,
192                                'id_formulaires_reponse' => $id_formulaires_reponse,
193                                'modele_resume' => $modele_resume,
194                                'valeurs' => $valeurs_libellees,
195                        ),
196                        'data' => $chaine,
197                )
198        );
199}
200
201/**
202 * Supprimer les balise d'une vue de saisies
203 * sans pour autant faire un trim
204 * @param str $valeur
205 * @return str
206**/
207function formidable_nettoyer_saisie_vue($valeur) {
208        // on ne veut pas du \n de PtoBR, mais on ne veut pas non plus faire un trim
209        $valeur = str_ireplace('</p>', '', $valeur);
210        $valeur = PtoBR($valeur);
211        if (strpos($valeur, '</li>')) {
212                $valeur = explode('</li>', $valeur);
213                array_pop($valeur);
214                $valeur = implode(', ', $valeur);
215        }
216        $valeur = supprimer_tags($valeur);
217        $valeur = str_replace("\n"," ",$valeur);
218        $valeur = str_replace("\r"," ",$valeur);
219        $valeur = str_replace("\t"," ",$valeur);
220        return $valeur;
221}
222
223/**
224 * Si une saisie est de type 'fichiers'
225 * insère dans la description du résultat de cette saisie
226 * l'url de l'action pour récuperer la saisie
227 * Ajoute également une vignette correspondent à l'extention
228 * @param array $saisie_a_modifier
229 * @param string $nom_saisie
230 * @param array $saisies_du_formulaire
231 * @param int|string $id_formulaire
232 * @param int|string $id_formulaires_reponse
233 * return array $saisie_a_modifier
234 **/
235function formidable_ajouter_action_recuperer_fichier($saisie_a_modifier, $nom_saisie, $saisies_du_formulaire, $id_formulaire, $id_formulaires_reponse) {
236        // précaution
237        include_spip('inc/saisies_lister');
238        include_spip('inc/formidable_fichiers');
239        $id_formulaire = strval($id_formulaire);
240        $id_formulaires_reponse = strval($id_formulaires_reponse);
241        $vignette_par_defaut = charger_fonction('vignette', 'inc/');
242        if (array_key_exists($nom_saisie, saisies_lister_avec_type($saisies_du_formulaire, 'fichiers'))) { //saisies SPIP
243                if (isset($saisie_a_modifier) and is_array($saisie_a_modifier)) {
244                        foreach ($saisie_a_modifier as $i => $valeur) {
245                                $url = formidable_generer_url_action_recuperer_fichier(
246                                        $id_formulaire,
247                                        $id_formulaires_reponse,
248                                        $nom_saisie,
249                                        $valeur['nom']
250                                );
251                                $saisie_a_modifier[$i]['url'] = $url;
252                                if (isset($valeur['extension'])) {
253                                        $extension = strtolower($valeur['extension']);
254                                        if (in_array($extension,array('png','jpg','gif'))) {
255                                                $saisie_a_modifier[$i]['vignette'] = _DIR_FICHIERS_FORMIDABLE."formulaire_$id_formulaire/reponse_$id_formulaires_reponse/$nom_saisie/".$valeur['nom'];
256                                        }       else {
257                                                $saisie_a_modifier[$i]['vignette'] = $vignette_par_defaut($extension, false);
258                                        }
259                                }
260                        }
261                }
262        }
263        return $saisie_a_modifier;
264}
Note: See TracBrowser for help on using the repository browser.