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