source: spip-zone/_plugins_/_stable_/forms/forms_et_tables_1_9_1/inc/forms.php @ 7904

Last change on this file since 7904 was 7904, checked in by cedric@…, 13 years ago

"c'etait vraiment tout casse les sondages :)
maintenant que j'y repense, je m'etais dit que c'etait a debuguer
remarche a nouveau, sauf le formulaire est represente au lieu des resultats apres reponse (probleme de cache ?)"

File size: 22.6 KB
Line 
1<?php
2/*
3 * forms
4 * Gestion de formulaires editables dynamiques
5 *
6 * Auteurs :
7 * Antoine Pitrou
8 * Cedric Morin
9 * Renato
10 * 2005,2006 - Distribue sous licence GNU/GPL
11 *
12 */
13
14        if ($GLOBALS['spip_version_code']<1.92)
15                include_spip('inc/forms_compat_191');
16
17        function Forms_install(){
18                include_spip('base/forms_upgrade');
19                Forms_upgrade();
20        }
21       
22        function Forms_uninstall(){
23                include_spip('base/forms');
24                include_spip('base/abstract_sql');
25        }
26       
27        function Forms_structure($id_form){
28                // Preparer la table de traduction code->valeur & mise en table de la structure pour eviter des requettes
29                // a chaque ligne
30                $structure = array();
31                $res = spip_query("SELECT * FROM spip_forms_champs WHERE id_form="._q($id_form)." ORDER BY rang");
32                while ($row = spip_fetch_array($res)){
33                        $type = $row['type'];
34                        $champ = $row['champ'];
35                        foreach ($row as $k=>$v)
36                                $structure[$champ][$k] = $v;
37                        if (($type == 'select') OR ($type == 'multiple')){
38                                $res2 = spip_query("SELECT * FROM spip_forms_champs_choix WHERE id_form="._q($id_form)." AND champ="._q($champ)." ORDER BY rang");
39                                while ($row2 = spip_fetch_array($res2)){
40                                        $structure[$champ]['choix'][$row2['choix']] = $c = trim(textebrut(typo($row2['titre'])));
41                                        $structure[$champ]['choixrev'][$c] = $row2['choix'];
42                                }
43                        }
44                        else if ($type == 'mot') {
45                                $id_groupe = intval($row['extra_info']);
46                                $res2 = spip_query("SELECT id_mot, titre FROM spip_mots WHERE id_groupe="._q($id_groupe));
47                                while ($row2 = spip_fetch_array($res2)) {
48                                        $structure[$champ]['choix'][$row2['id_mot']] = $c = trim(textebrut(typo($row2['titre'])));
49                                        $structure[$champ]['choixrev'][$c] = $row2['id_mot'];
50                                }
51                        }
52                }
53                return $structure;
54        }
55       
56        function Forms_donnees_vide($id_form){
57                if (!include_spip('inc/autoriser'))
58                        include_spip('inc/autoriser_compat');
59                if (autoriser('supprimerdonnee','form',$id_form)){
60                        spip_query("UPDATE spip_forms_donnees SET statut='poubelle' WHERE id_form="._q($id_form));
61                        /*$res = spip_query("SELECT id_donnee FROM spip_forms_donnees WHERE id_form="._q($id_form));
62                        while ($row = spip_fetch_array($res)){
63                                spip_query("DELETE FROM spip_forms_donnees_champs WHERE id_donnee="._q($row['id_donnee']));
64                        }
65                        spip_query("DELETE FROM spip_forms_donnees WHERE id_form="._q($id_form));*/
66                }
67        }
68
69        function Forms_csvimport_ajoute_table_csv($data, $id_form, $assoc_field, &$erreur, $simu = false){
70                include_spip('inc/forms_type_champs');
71                $assoc = array_flip($assoc_field);
72                $res = spip_query("SELECT * FROM spip_forms WHERE id_form="._q($id_form)." AND type_form NOT IN ('','sondage')");
73                if (!$row = spip_fetch_array($res)) {
74                        $erreur[0][] = _L("Table introuvable");
75                        return;
76                }
77               
78                $structure = Forms_structure($id_form);
79                $cle = isset($assoc_field['id_donnee'])?$assoc_field['id_donnee']:false;
80               
81                $output = "";
82                if ($data!=false){
83                        $count_lignes = 0;
84                        foreach($data as $key=>$ligne) {
85              $count_lignes ++;
86                                // creation de la donnee si necessaire
87                                $creation = true;
88                                $id_donnee = 0;
89                                // verifier la validite de l'import
90                                $c = array();
91                                foreach($structure as $champ=>$infos){
92                                        if ($infos['type'] != 'multiple'){
93                                                $c[$champ] = "";
94                                          if ((isset($assoc[$champ]))&&(isset($ligne[$assoc[$champ]]))){
95                                                $c[$champ] = $ligne[$assoc[$champ]];
96                                                if (isset($infos['choix']) && !isset($infos['choix'][$c[$champ]]) && isset($infos['choixrev'][$c[$champ]]))
97                                                        $c[$champ] = $infos['choixrev'][$c[$champ]];
98                                          }
99                                        }
100                                        else {
101                                                $c[$champ] = array();
102                                                foreach($infos['choix'] as $choix=>$t)
103                                                  if ((isset($assoc[$choix]))&&(isset($ligne[$assoc[$choix]])))
104                                                        if (strlen($ligne[$assoc[$choix]]))
105                                                                $c[$champ][] = $choix;
106                                        }
107                                }
108                                $err = Forms_valide_champs_reponse_post($id_auteur, $c , $structure);
109                                if (is_array($err) && count($err)) $erreur[$count_lignes] = $err;
110                                else if (!$simu) {
111                                        if ($cle) {
112                                                $id_donnee = $ligne[$cle];
113                                                $res = spip_query("SELECT * FROM spip_forms_donnees WHERE id_donnee="._q($id_donnee)." AND id_form="._q($id_form));
114                                                if ($row = spip_fetch_array($res)){
115                                                        $creation = false;
116                                                        $set = "";
117                                                        foreach(array('date','url','ip','id_auteur') as $champ)
118                                                                if (isset($assoc_field['$champ'])) $set .= "$champ="._q($ligne[$assoc_field['date']]).", ";
119                                                        $set.=" maj=NOW()";
120                                                        spip_query("UPDATE spip_forms_donnees $set WHERE id_donnee="._q($id_donnee)." AND id_form="._q($id_form));
121                                                }
122                                        }
123                                        if ($creation){
124                                                $id_auteur = $GLOBALS['auteur_session'] ? intval($GLOBALS['auteur_session']['id_auteur']) : 0;
125                                                $ip = $GLOBALS['REMOTE_ADDR'];
126                                                $url = _DIR_RESTREINT_ABS;
127                                                if ($cle){
128                                                        if (intval($id_donnee))
129                                                                spip_abstract_insert("spip_forms_donnees","(id_donnee,id_form,date,ip,id_auteur,url,confirmation,statut,maj)","("._q($id_donnee).","._q($id_form).", NOW(),"._q($ip).","._q($id_auteur).","._q($url).", 'valide', 'publie', NOW() )");
130                                                }
131                                                else
132                                                        spip_abstract_insert("spip_forms_donnees","(id_form,date,ip,id_auteur,url,confirmation,statut,maj)","("._q($id_form).", NOW(),"._q($ip).","._q($id_auteur).","._q($url).", 'valide', 'publie', NOW() )");
133                                                $id_donnee = spip_insert_id();
134                                        }
135                                        if ($id_donnee){
136                                                foreach($c as $champ=>$values){
137                                                        if (!$creation)
138                                                                spip_query("DELETE FROM spip_forms_donnees_champs WHERE id_donnee="._q($id_donnee)." AND champ="._q($champ));
139                                                        if (!is_array($values)) $values = array($values);
140                                                        foreach($values as $v)
141                                                                if (strlen($v))
142                                                                        spip_query("INSERT INTO spip_forms_donnees_champs (id_donnee,champ,valeur,maj) VALUES ("._q($id_donnee).","._q($champ).","._q($v).", NOW() )");
143                                                }
144                                        }
145                                        else 
146                                          $erreur[$count_lignes][] = "ajout impossible ::id_donnee nul::<br />";
147                                }
148                        }
149                }
150        }
151       
152        function Forms_deplacer_fichier_form($source, $dest) {
153                include_spip('inc/getdocument');
154                if ($ok = deplacer_fichier_upload($source, $dest, true))
155                        if (file_exists($source)) // argument move pas pris en compte avant spip 1.9.2
156                                @unlink($source);
157       
158                return $ok;
159        }
160
161        function Forms_nommer_fichier_form($orig, $dir) {
162                include_spip("inc/charsets");
163                include_spip("inc/filtres");
164                if (ereg("^(.*)\.([^.]+)$", $orig, $match)) {
165                        $ext = strtolower($match[2]);
166                        $orig = $match[1];
167                }
168                $base = ereg_replace("[^.a-zA-Z0-9_=-]+", "_", 
169                        translitteration(supprimer_tags(basename($orig))));
170                $n = 0;
171                $fichier = $base.'.'.$ext;
172                while (@file_exists($dir . $fichier)) {
173                        $fichier = $base.'-'.(++$n).'.'.$ext;
174                }
175                return $fichier;
176        }
177
178        function Forms_type_fichier_autorise($nom_fichier) {
179                if (ereg("\.([^.]+)$", $nom_fichier, $match)) {
180                        $ext = addslashes(strtolower($match[1]));
181                        switch ($ext) {
182                        case 'htm':
183                                $ext = 'html';
184                                break;
185                        case 'jpeg':
186                                $ext = 'jpg';
187                                break;
188                        case 'tiff':
189                                $ext = 'tif';
190                                break;
191                        }
192                        $query = "SELECT * FROM spip_types_documents WHERE extension='$ext' AND upload='oui'";
193                        $result = spip_query($query);
194                        return (spip_num_rows($result) > 0);
195                }
196                return false;
197        }
198
199        // Fonction utilitaires
200        function Forms_nom_cookie_form($id_form) {
201                return $GLOBALS['cookie_prefix'].'cookie_form_'.$id_form;
202        }
203
204        function Forms_verif_cookie_sondage_utilise($id_form) {
205                global $auteur_session;
206                $id_auteur = $auteur_session ? intval($auteur_session['id_auteur']) : 0;
207                $cookie = $_COOKIE[Forms_nom_cookie_form($id_form)];
208                $q="SELECT id_donnee FROM spip_forms_donnees " .
209                        "WHERE statut='publie' AND id_form=".intval($id_form)." ";
210                if ($id_auteur)
211                        if ($cookie) $q.="AND (cookie="._q($cookie)." OR id_auteur="._q($id_auteur).")";
212                        else $q.="AND id_auteur=".$id_auteur;
213                else
214                        if ($cookie) $q.="AND (cookie="._q($cookie)."' OR id_auteur="._q($id_auteur).")";
215                        else return false;
216                //On retourne les donnees si auteur ou cookie
217                $res = spip_query($q);
218                return (spip_num_rows($res)>0);
219        }
220
221        function Forms_extraire_reponse($id_donnee){
222                // Lire les valeurs entrees
223                $result = spip_query("SELECT * FROM spip_forms_donnees_champs AS r
224                        JOIN spip_forms_champs AS ch ON ch.champ=r.champ
225                        JOIN spip_forms_donnees AS d ON d.id_donnee = r.id_donnee
226                        WHERE d.id_form = ch.id_form AND r.id_donnee="._q($id_donnee)." ORDER BY ch.rang");
227                $valeurs = array();
228                $retour = urlencode(self());
229                $libelles = array();
230                $values = array();
231                $url = array();
232                while ($row = spip_fetch_array($result)) {
233                        $rang = $row['rang'];
234                        $champ = $row['champ'];
235                        $libelles[$champ]=$row['titre'];
236                        $type = $row['type'];
237                        if ($type == 'fichier') {
238                                $values[$champ][] = $row['valeur'];
239                                $url[$champ][] = generer_url_ecrire("forms_telecharger","id_donnee=$id_donnee&champ=$champ&retour=$retour");
240                        }
241                        else if (in_array($type,array('select','multiple'))) {
242                                if ($row3=spip_fetch_array(spip_query("SELECT titre FROM spip_forms_champs_choix WHERE id_form="._q($row['id_form'])." AND champ="._q($champ)." AND choix="._q($row['valeur']))))
243                                        $values[$champ][]=$row3['titre'];
244                                else
245                                        $values[$champ][]= $row['valeur'];
246                                $url[$champ][] = '';
247                        }
248                        else if ($type == 'mot') {
249                                $id_groupe = intval($row['extra_info']);
250                                $id_mot = intval($row['valeur']);
251                                if ($row3 = spip_fetch_array(spip_query("SELECT id_mot, titre FROM spip_mots WHERE id_groupe="._q($id_groupe)." AND id_mot="._q($id_mot)))){
252                                        $values[$champ][]=$row3['titre'];
253                                        $url[$champ][]= generer_url_ecrire("mots_edit","id_mot=$id_mot");
254                                }
255                                else {
256                                        $values[$champ][]= $row['valeur'];
257                                        $url[$champ][] = '';
258                                }
259                        }
260                        else {
261                                $values[$champ][] = $row['valeur'];
262                                $url[$champ][] = '';
263                        }
264                }
265                return array($libelles,$values,$url);
266        }
267       
268        //
269        // Afficher un pave formulaires dans la colonne de gauche
270        // (edition des articles)
271       
272        function Forms_afficher_insertion_formulaire($id_article) {
273                global $connect_id_auteur, $connect_statut;
274                global $couleur_foncee, $couleur_claire, $options;
275                global $spip_lang_left, $spip_lang_right;
276       
277                $s = "";
278                // Ajouter un formulaire
279                $s .= "\n<p>";
280                $s .= debut_cadre_relief("../"._DIR_PLUGIN_FORMS."img_pack/form-24.png", true);
281       
282                $s .= "<div style='padding: 2px; background-color: $couleur_claire; text-align: center; color: black;'>";
283                $s .= bouton_block_invisible("ajouter_form");
284                $s .= "<strong class='verdana3' style='text-transform: uppercase;'>"
285                        ._T("forms:article_inserer_un_formulaire")."</strong>";
286                $s .= "</div>\n";
287       
288                $s .= debut_block_invisible("ajouter_form");
289                $s .= "<div class='verdana2'>";
290                $s .= _T("forms:article_inserer_un_formulaire_detail");
291                $s .= "</div>";
292       
293                $query = "SELECT id_form, titre FROM spip_forms ORDER BY titre";
294                $result = spip_query($query);
295                if (spip_num_rows($result)) {
296                        $s .= "<br />\n";
297                        $s .= "<div class='bandeau_rubriques' style='z-index: 1;'>";
298                        $s .= "<div class='plan-articles'>";
299                        while ($row = spip_fetch_array($result)) {
300                                $id_form = $row['id_form'];
301                                $titre = typo($row['titre']);
302                               
303                                $link = generer_url_ecrire('forms_edit',"id_form=$id_form&retour=".urlencode(self()));
304                                $s .= "<a href='".$link."'>";
305                                $s .= $titre."</a>\n";
306                                $s .= "<div class='arial1' style='text-align:$spip_lang_right;color: black; padding-$spip_lang_left: 4px;' "."title=\""._T("forms:article_recopier_raccourci")."\">";
307                                $s .= "<strong>&lt;form".$id_form."&gt;</strong>";
308                                $s .= "</div>";
309                        }
310                        $s .= "</div>";
311                        $s .= "</div>";
312                }
313       
314                // Creer un formulaire
315                if (!include_spip('inc/autoriser'))
316                        include_spip('inc/autoriser_compat');
317                if (autoriser('creer','form')) {
318                        $s .= "\n<br />";
319                        $link = generer_url_ecrire('forms_edit',"new=oui&retour=".urlencode(self()));
320                        $s .= icone_horizontale(_T("forms:icone_creer_formulaire"),
321                                $link, "../"._DIR_PLUGIN_FORMS."img_pack/form-24.png", "creer.gif", false);
322                }
323       
324                $s .= fin_block();
325       
326                $s .= fin_cadre_relief(true);
327                return $s;
328        }
329       
330        function Forms_insertions_reponse_un_champ($id_form,$id_donnee,$champ,$type,$val,&$erreur,&$ok){
331                $inserts = array();
332                if ($type == 'fichier') {
333                        if (($val = $_FILES[$champ]) AND ($val['tmp_name'])) {
334                                // Fichier telecharge : deplacer dans IMG, stocker le chemin dans la base
335                                $dir = sous_repertoire(_DIR_IMG, "protege");
336                                $dir = sous_repertoire($dir, "form".$id_form);
337                                $source = $val['tmp_name'];
338                                $dest = $dir.Forms_nommer_fichier_form($val['name'], $dir);
339                                if (!Forms_deplacer_fichier_form($source, $dest)) {
340                                        $erreur[$champ] = _T("forms:probleme_technique_upload");
341                                        $ok = false;
342                                }
343                                else {
344                                        $inserts[] = "("._q($id_donnee).","._q($champ).","._q($dest).")";
345                                }
346                        }
347                }
348                else if ($val) {
349                        // Choix multiples : enregistrer chaque valeur separement
350                        if (is_array($val))
351                                foreach ($val as $v)
352                                        $inserts[] = "("._q($id_donnee).","._q($champ).","._q($v).")";
353                        else
354                                $inserts[] = "("._q($id_donnee).","._q($champ).","._q($val).")";
355                }
356                return $inserts;
357        }
358       
359        function Forms_insertions_reponse_post($id_form,$id_donnee,&$erreur,&$ok, $c = NULL){
360                $inserts = array();
361                $res = spip_query("SELECT * FROM spip_forms_champs WHERE id_form="._q($id_form));
362                while($row = spip_fetch_array($res)){
363                        $champ = $row['champ'];
364                        $type = $row['type'];
365                        if (!$c) 
366                                $val = _request($champ);
367                        else
368                                $val = isset($c[$champ])?$c[$champ]:NULL;
369                        $ins = Forms_insertions_reponse_un_champ($id_form,$id_donnee,$champ,$type,$val,$erreur,$ok);
370                        $inserts = array_merge($inserts,$ins);
371                }
372                return $inserts;
373        }
374
375        function Forms_revision_donnee($id_donnee, $c = NULL) {
376                include_spip('base/abstract_sql');
377                $inserts = array();
378                $result = spip_query("SELECT id_form FROM spip_forms_donnees WHERE id_donnee="._q($id_donnee));
379                if (!$row = spip_fetch_array($result)) {
380                        $erreur['@'] = _T("forms:probleme_technique");
381                }
382                $id_form = $row['id_form'];
383                $structure = Forms_structure($id_form);
384                include_spip("inc/forms_type_champs");
385               
386                $erreur = Forms_valide_conformite_champs_reponse_post($id_form, $c, $structure);
387                if (!$erreur) {
388                        $champs_mod = array();
389                        foreach($structure as $champ=>$infos){
390                                $val = _request($champ,$c);
391                                if ($val!==NULL){
392                                        $champs_mod[] = $champ;
393                                        $type = $infos['type'];
394                                        $ins = Forms_insertions_reponse_un_champ($id_form,$id_donnee,$champ,$type,$val,$erreur,$ok);
395                                        $inserts = array_merge($inserts,$ins);
396                                }
397                        }
398                        $in_champs = calcul_mysql_in('champ',join(',',array_map('_q', $champs_mod)));
399                        spip_query("DELETE FROM spip_forms_donnees_champs WHERE $in_champs AND id_donnee="._q($id_donnee));
400                        spip_query("INSERT INTO spip_forms_donnees_champs (id_donnee, champ, valeur) ".
401                                "VALUES ".join(',', $inserts));
402                }
403                else
404                        spip_log("erreur: ".serialize($erreur));
405
406                return $erreur;
407        }
408       
409        function Forms_enregistrer_reponse_formulaire($id_form, $id_donnee, &$erreur, &$reponse, $script_validation = 'valide_form', $script_args='') {
410                $r = '';
411       
412                $result = spip_query("SELECT * FROM spip_forms WHERE id_form="._q($id_form));
413                if (!$row = spip_fetch_array($result)) {
414                        $erreur['@'] = _T("forms:probleme_technique");
415                }
416                $moderation = $row['moderation'];
417                // Extraction des donnees pour l'envoi des mails eventuels
418                //   accuse de reception et forward webmaster
419                $email = unserialize($row['email']);
420                $champconfirm = $row['champconfirm'];
421                $mailconfirm = '';
422
423                include_spip("inc/forms_type_champs");
424                $erreur = Forms_valide_champs_reponse_post($id_form);
425       
426                // Si tout est bon, enregistrer la reponse
427                if (!$erreur) {
428                        global $auteur_session;
429                        $id_auteur = $auteur_session ? intval($auteur_session['id_auteur']) : 0;
430                        $url = (_DIR_RESTREINT==_DIR_RESTREINT_ABS)?parametre_url(self(),'id_form',''):_DIR_RESTREINT_ABS;
431                        $ok = true;
432                       
433                        if ($row['type_form']=='sondage') {
434                                $confirmation = 'attente';
435                                $cookie = $GLOBALS['cookie_form'];
436                                $nom_cookie = Forms_nom_cookie_form($id_form);
437                        }
438                        else {
439                                $confirmation = 'valide';
440                                $cookie = '';
441                        }
442                        if ($moderation = 'posteriori') 
443                                $statut='publie';
444                        else 
445                                $statut = 'propose';
446                        // D'abord creer la reponse dans la base de donnees
447                        if ($ok) {
448                                $dejareponse=Forms_verif_cookie_sondage_utilise($id_form);
449                                if (($row['modifiable'] == 'oui' || !_DIR_RESTREINT) && $dejareponse) {
450                                        $q = "SELECT id_donnee FROM spip_forms_donnees WHERE id_form="._q($id_form).
451                                                " AND (cookie="._q($cookie)." OR id_auteur="._q($id_auteur).")";
452                                        if ($id_auteur)
453                                                if ($cookie) $q.="AND (cookie="._q($cookie)." OR id_auteur="._q($id_auteur).")";
454                                                else $q.="AND id_auteur="._q($id_auteur);
455                                        else
456                                                if ($cookie) $q.="AND (cookie="._q($cookie)." OR id_auteur="._q($id_auteur).")";
457                                        //si unique, ignorer id_donnee, si pas id_donnee, ne renverra rien
458                                        if ($row['multiple']=='oui' || !_DIR_RESTREINT) $q.=" AND donnees_champs.id_donnee="._q($id_donnee);
459                                        $r=spip_query($q);
460                                        if ($r=spip_fetch_array($r)){
461                                                $id_donnee = $r['id_donnee'];
462                                                spip_query("UPDATE spip_forms_donnees SET date=NOW(), ip="._q($GLOBALS['ip']).", url="._q($url).", '$confirmation', statut="._q($statut).", cookie="._q($cookie)." ".
463                                                        "WHERE id_donnee="._q($id_donnee));
464                                                spip_query("DELETE FROM spip_forms_donnees_champs WHERE id_donnee="._q($id_donnee));
465                                        } else {
466                                                spip_query("INSERT INTO spip_forms_donnees (id_form, id_auteur, date, ip, url, confirmation,statut, cookie) ".
467                                                "VALUES ("._q($id_form).","._q($id_auteur).", NOW(),"._q($GLOBALS['ip']).","._q($url).", '$confirmation', '$statut',"._q($cookie).")");
468                                                $id_donnee = spip_insert_id();
469                                        }
470                                } elseif (!$id_donnee && (!_DIR_RESTREINT || !($dejareponse && $row['multiple']=='non'))) {
471                                                spip_query("INSERT INTO spip_forms_donnees (id_form, id_auteur, date, ip, url, confirmation,statut, cookie) ".
472                                                "VALUES ("._q($id_form).","._q($id_auteur).", NOW(),"._q($GLOBALS['ip']).","._q($url).", '$confirmation', '$statut',"._q($cookie).")");
473                                        $id_donnee = spip_insert_id();
474                                }
475                                if (!$id_donnee) {
476                                        $erreur['@'] = _T("forms:probleme_technique");
477                                        $ok = false;
478                                }
479                        }
480                        // Puis enregistrer les differents champs
481                        if ($ok) {
482                                $inserts = Forms_insertions_reponse_post($id_form,$id_donnee,$erreur,$ok);
483                                if (!count($inserts)) {
484                                        // Reponse vide => annuler
485                                        $erreur['@'] = _T("forms:remplir_un_champ");
486                                        spip_query("DELETE FROM spip_forms_donnees WHERE id_donnee="._q($id_donnee));
487                                        $ok = false;
488                                }
489                        }
490                        if ($ok) {
491                                include_spip('inc/securiser_action');
492                                spip_query("DELETE FROM spip_forms_donnees_champs WHERE id_donnee="._q($id_donnee));
493                                spip_query("INSERT INTO spip_forms_donnees_champs (id_donnee, champ, valeur) ".
494                                        "VALUES ".join(',', $inserts));
495                                if ($champconfirm)
496                                        if ($row=spip_fetch_array(spip_query("SELECT * FROM spip_forms_donnees_champs WHERE id_donnee="._q($id_donnee)." AND champ="._q($champconfirm))))
497                                                $mailconfirm = $row['valeur'];
498                                if (($email) || ($mailconfirm)) {
499                                        $hash = calculer_action_auteur("forms confirme reponse $id_donnee");
500                                        $url = generer_url_public($script_validation,"mel_confirm=oui&id_donnee=$id_donnee&hash=$hash".($script_args?"&$script_args":""));
501                                        $r = $url;
502                                }
503                                if ($row['type_form']=='sondage') {
504                                        $hash = calculer_action_auteur("forms valide reponse sondage $id_donnee");
505                                        $url = generer_url_public($script_validation,"verif_cookie=oui&id_donnee=$id_donnee&hash=$hash".($script_args?"&$script_args":""));
506                                        $r = $url;
507                                }
508                        }
509                }
510       
511                return $r;
512        }
513
514        function Forms_generer_mail_reponse_formulaire($id_form, $id_donnee, $env){
515                if (!is_array($env)) $env=array();
516                $modele_mail = 'form_reponse_email';
517                if (isset($env['modele']))
518                        $modele_mail = $env['modele'];
519                $result = spip_query("SELECT * FROM spip_forms WHERE id_form="._q($id_form));
520                if ($row = spip_fetch_array($result)) {
521                        $modele = "modeles/$modele_mail";
522                        if ($f = find_in_path(($m = "$modele-$id_form").".html"))
523                                $modele = $m;
524                        $corps_mail = recuperer_fond($modele,array_merge($env,array('id_donnee'=>$id_donnee)));
525                        $corps_mail_admin = recuperer_fond($modele,array_merge($env,array('id_donnee'=>$id_donnee,'mail_admin'=>'oui')));
526                        $champconfirm = $row['champconfirm'];
527                        $email = unserialize($row['email']);
528                        $email_dest = $email['defaut'];
529                        $mailconfirm = "";
530                       
531                        // recuperer l'email de confirmation
532                        $result2 = spip_query("SELECT * FROM spip_forms_donnees_champs WHERE id_donnee="._q($id_donnee)." AND champ="._q($champconfirm));
533                        if ($row2 = spip_fetch_array($result2)) {
534                                $mailconfirm = $row2['valeur'];
535                        }
536
537                        // recuperer l'email d'admin
538                        $result2 = spip_query("SELECT * FROM spip_forms_donnees_champs WHERE id_donnee="._q($id_donnee)." AND champ="._q($email['route']));
539                        if ($row2 = spip_fetch_array($result2)) {
540                                if (isset($email[$row2['valeur']]))
541                                        $email_dest = $email[$row2['valeur']];
542                        }
543
544                        include_spip('inc/mail');
545                        if ($mailconfirm !== '') {
546                                $head="From: formulaire@".$_SERVER["HTTP_HOST"]."\n";
547                                $sujet = $row['titre'];
548                                $dest = $mailconfirm;
549                                // mettre le texte dans un charset acceptable et sans entites
550                                //$mess_iso = unicode2charset(html2unicode(charset2unicode($corps_mail)),'iso-8859-1');
551                                //mail($dest, $sujet, $mess_iso, $head);
552                                $headers = "";
553                                if (preg_match(",<html>(.*)</html>,Uims",$corps_mail,$regs)){
554                                        $charset = $GLOBALS['meta']['charset'];
555                                        $headers .=
556                                        "MIME-Version: 1.0\n".
557                                        "Content-Type: text/html; charset=$charset\n".
558                                        "Content-Transfer-Encoding: 8bit\n";
559                                        if (preg_match(",<h[1-6]>(.*)</h[1-6]>,Uims",$regs[1],$hs))
560                                                $sujet=$hs[1];
561                                }
562                                envoyer_mail($dest, $sujet, $corps_mail, "formulaire@".$_SERVER["HTTP_HOST"], $headers);
563                        }
564                        if ($email_dest != '') {
565                                $head="From: formulaire_$id_form@".$_SERVER["HTTP_HOST"]."\n";
566                                $sujet = $row['titre'];
567                                $dest = $email_dest;
568                                // mettre le texte dans un charset acceptable et sans entites
569                                //$mess_iso = unicode2charset(html2unicode(charset2unicode($corps_mail_admin)),'iso-8859-1');
570                                //mail($dest, $sujet, $mess_iso, $head);
571                                $headers = "";
572                                if (preg_match(",<html>.*</html>,Uims",$corps_mail_admin,$regs)){
573                                        $charset = $GLOBALS['meta']['charset'];
574                                        $headers .=
575                                        "MIME-Version: 1.0\n".
576                                        "Content-Type: text/html; charset=$charset\n".
577                                        "Content-Transfer-Encoding: 8bit\n";
578                                        if (preg_match(",<h[1-6]>(.*)</h[1-6]>,Uims",$regs[1],$hs))
579                                                $sujet=$hs[1];
580                                }
581                                envoyer_mail($dest, $sujet, $corps_mail_admin, "formulaire@".$_SERVER["HTTP_HOST"], $headers);
582                        }
583                }
584        }
585function Forms_obligatoire($row,$forms_obligatoires){
586        $returned=$row;
587        global $auteur_session;
588        $id_auteur = $auteur_session ? intval($auteur_session['id_auteur']) : 0;
589        $form_tab=explode(',',$forms_obligatoires);
590        $chercher=true;
591        $i=0;
592        while ($chercher && $i<count($form_tab)){
593                $form_id=$form_tab[$i];
594                $cookie = $_COOKIE[Forms_nom_cookie_form($form_id)];
595                $q="SELECT id_form FROM spip_forms_donnees WHERE statut='publie' AND id_form="._q($form_id)." AND (id_auteur="._q($form_id)." OR cookie="._q($cookie).")";
596                $res=spip_query($q);
597                if (!spip_fetch_array($res)){
598                        $res2 = spip_query("SELECT * FROM spip_forms WHERE id_form="._q($form_id));
599                        $returned = spip_fetch_array($res2);
600                        $chercher=false;
601                }
602                $i++;   
603        }
604        return $returned;       
605}
606?>
Note: See TracBrowser for help on using the repository browser.