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

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

utiliser l'API autoriser pour tester les autorisations insertion ou modification
l'upload d'un doc depuis l'espace privé faisait planter (securite du core !)
un cadre par ci

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