source: spip-zone/_plugins_/formidable/branches/v3_dev/formidable_fonctions.php @ 101190

Last change on this file since 101190 was 101190, checked in by maieul@…, 3 years ago

finalement il faut utiliser une action securisée, qui renvoie le document

File size: 6.2 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        $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 */
48function 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 */
97function 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}
147
148/**
149 * Si une saisie est de type 'fichiers'
150 * insère dans la description du résultat de cette saisie
151 * l'url de l'action pour récuperer la saisie
152 * Ajoute également une vignette correspondent à l'extention
153 * @param array $saisie_a_modifier
154 * @param string $nom_saisie
155 * @param array $saisies_du_formulaire
156 * @param int|string $id_formulaire
157 * @param int|string $id_formulaires_reponse
158 * return array $saisie_a_modifier
159 **/
160function formidable_ajouter_action_vue_saisie_fichiers($saisie_a_modifier, $nom_saisie, $saisies_du_formulaire, $id_formulaire, $id_formulaires_reponse) {
161        // précaution
162        include_spip('inc/saisies_lister');
163        $id_formulaire = strval($id_formulaire);
164        $id_formulaires_reponse = strval($id_formulaires_reponse);
165        $vignette_par_defaut = charger_fonction('vignette', 'inc/');
166        $securiser_action = charger_fonction('securiser_action','inc');
167        if (array_key_exists($nom_saisie, saisies_lister_avec_type($saisies_du_formulaire, 'fichiers'))) { //saisies SPIP
168                foreach ($saisie_a_modifier as $i => $valeur){
169                        $param = serialize(array(
170                                'formulaire' => $id_formulaire,
171                                'reponse' => $id_formulaires_reponse,
172                                'fichier' => $valeur['nom'],
173                                'saisie' => $nom_saisie
174                        ));
175                        $url = $securiser_action('formidable_recuperer_fichier',$param,'',false);
176                        $saisie_a_modifier[$i]['url'] = $url;
177                        $saisie_a_modifier[$i]['vignette'] = $vignette_par_defaut($valeur['extension'],false);
178                }
179        }
180        return $saisie_a_modifier;
181}
Note: See TracBrowser for help on using the repository browser.