Changeset 7895 in spip-zone


Ignore:
Timestamp:
Dec 12, 2006, 1:48:09 PM (12 years ago)
Author:
spipcarto@…
Message:

Gros morceau :

  • modifiable : oui/non (non)
  • unique : oui / non
  • forms_obligatoires : liste des id_form a remplir avant de pouvoir remplir ce formulaire (separateur ",")

Les verifs cookie/form sont etendues à id_auteur/form

Location:
_plugins_/_stable_/forms/forms_et_tables_1_9_1
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/_stable_/forms/forms_et_tables_1_9_1/action/forms_edit.php

    r7857 r7895  
    88 * Cedric Morin
    99 * Renato
    10  * © 2005,2006 - Distribue sous licence GNU/GPL
     10 * 2005,2006 - Distribue sous licence GNU/GPL
    1111 *
    1212 */
     
    8686        $texte = _request('texte');
    8787        $type_form = _request('type_form');
     88        ///////////////////////
     89        //MODIFICATION
     90        ///////////////////////
     91        $modifiable = _request('modifiable');
     92        $multiple = _request('multiple');
     93        $forms_obligatoires = _request('forms_obligatoires');
     94        ///////////////////////
    8895        $moderation = _request('moderation');
    8996        $public = _request('public');
     
    118125                        "descriptif="._q($descriptif).", ".
    119126                        "type_form="._q($type_form).", ".
     127                        ///////////////////////
     128                        //MODIFICATION
     129                        ///////////////////////
     130                        "modifiable="._q($modifiable).", ".
     131                        "multiple="._q($multiple).", ".
     132                        "forms_obligatoires="._q($forms_obligatoires).", ".
     133        ///////////////////////
    120134                        "email="._q(serialize($email)).", ".
    121135                        "champconfirm="._q($champconfirm).", ".
     
    134148                $descriptif = $row['descriptif'];
    135149                $type_form = $row['type_form'];
     150                ///////////////////////
     151                //MODIFICATION
     152                ///////////////////////
     153                $modifiable = $row['modifiable'];
     154                $multiple = $row['multiple'];
     155                $forms_obligatoires = $row['forms_obligatoires'];
     156                ///////////////////////
    136157                $moderation = $row['moderation'];
    137158                $public = $row['public'];
     
    221242        }
    222243        if ($redirect)
    223                 redirige_par_entete(str_replace("&","&",$redirect));
     244                redirige_par_entete(str_replace("&","&",urldecode($redirect)));
    224245}
    225246
  • _plugins_/_stable_/forms/forms_et_tables_1_9_1/balise/forms.php

    r7725 r7895  
    88 * Cedric Morin
    99 * Renato
    10  * © 2005,2006 - Distribue sous licence GNU/GPL
     10 * ??? 2005,2006 - Distribue sous licence GNU/GPL
    1111 *
    1212 */
     
    2626}
    2727 
    28 function balise_FORMS_dyn($id_form = 0, $id_article = 0, $id_donnee = 0, $class='', $script_validation = 'valide_form', $message_confirm='forms:avis_message_confirmation',$reponse_enregistree="forms:reponse_enregistree") {
     28function balise_FORMS_dyn($id_form = 0, $id_article = 0, $id_donnee = 0, $class='', $script_validation = 'valide_form', $message_confirm='forms:avis_message_confirmation',$reponse_enregistree="forms:reponse_enregistree",$forms_obligatoires="") {
    2929        $url = self();
    30         // nettoyer l'url qui est passee par htmlentities pour raison de securités
     30        // nettoyer l'url qui est passee par htmlentities pour raison de securites
    3131        $url = str_replace("&","&",$url);
    3232        if ($retour=='') $retour = $url;
     
    3434        $res = spip_query("SELECT * FROM spip_forms WHERE id_form="._q($id_form));
    3535        if (!$row = spip_fetch_array($res)) return;
    36                
     36        /////////////////
     37        //MODIFICATION
     38        /////////////////
     39        else {
     40                if ($forms_obligatoires!='')
     41                        if ($row['forms_obligatoires']!='') $forms_obligatoires=$forms_obligatoires.','.$row['forms_obligatoires'];
     42                        else $forms_obligatoires=$row['forms_obligatoires'];
     43                else
     44                        if ($row['forms_obligatoires']!='') $forms_obligatoires=$row['forms_obligatoires'];
     45                if ($forms_obligatoires){
     46                        $row=Forms_obligatoire($row,$forms_obligatoires);
     47                        $id_form=$row['id_form'];
     48                }
     49        }
     50        /////////////////       
    3751        $erreur = array();
    3852        $reponse = '';
     
    6680                }
    6781        }
     82        ///////////////////////////
     83        //MODIFICATION
     84        ///////////////////////////
     85        elseif (_DIR_RESTREINT!="" && $row['modifiable']=='oui'){
     86                global $auteur_session;
     87                $id_auteur = $auteur_session ? intval($auteur_session['id_auteur']) : 0;
     88                $cookie = $_COOKIE[Forms_nom_cookie_form($id_form)];
     89                //On retourne les donnees si auteur ou cookie
     90                $q = "SELECT donnees_champs.* " .
     91                        "FROM spip_forms_donnees_champs AS donnees_champs, spip_forms_donnees AS donnees " .
     92                        "WHERE donnees.id_donnee=donnees_champs.id_donnee " .
     93                        "AND donnees.id_form=".$id_form." ".
     94                        "AND donnees.statut='publie' ";
     95                if ($id_auteur)
     96                        if ($cookie) $q.="AND (cookie='".addslashes($cookie)."' OR id_auteur=".$id_auteur.") ";
     97                        else $q.="AND id_auteur=".$id_auteur." ";
     98                else
     99                        if ($cookie) $q.="AND (cookie='".addslashes($cookie)."' OR id_auteur=".$id_auteur.") ";
     100                        else $q.="AND 0=1 ";
     101                //si unique, ignorer id_donnee, si pas id_donnee, ne renverra rien
     102                if ($row['multiple']=='oui' && $id_donnee) $q.="AND donnees_champs.id_donnee="._q($id_donnee);
     103                $res = spip_query($q);
     104                while ($row2 = spip_fetch_array($res)){
     105                        $valeurs[$row2['champ']]= $row2['valeur'];
     106                }
     107        }
     108        ///////////////////////////
    68109        if ($row['type_form'] == 'sondage' && $row['public']=='oui'){
    69110                include_spip('inc/forms');
     
    79120                        'id_article' => $id_article,
    80121                        'id_form' => $id_form,
     122                        ///////////////////////////
     123                        //MODIFICATION
     124                        ///////////////////////////
     125                        'id_donnee' => $id_donnee,
     126                        ///////////////////////////
    81127                        'self' => $url,
    82128                        'valeurs' => serialize($valeurs),
  • _plugins_/_stable_/forms/forms_et_tables_1_9_1/base/forms.php

    r7702 r7895  
    88 * Cedric Morin
    99 * Renato
    10  * © 2005,2006 - Distribue sous licence GNU/GPL
     10 * ??? 2005,2006 - Distribue sous licence GNU/GPL
    1111 *
    1212 */
     
    2222        "descriptif"    => "text",
    2323        "type_form"     => "varchar(255) NOT NULL",
     24        //////////////////////////
     25        //MODIFICATION
     26        //////////////////////////
     27        "modifiable"    => "ENUM('non', 'oui') DEFAULT 'non'",
     28        "multiple"      => "ENUM('non', 'oui') DEFAULT 'non'",
     29        "forms_obligatoires" => "varchar(255) NOT NULL DEFAULT ''",
     30        //////////////////////////
    2431        "email" => "text",
    2532        "champconfirm" => "varchar(255) NOT NULL",
  • _plugins_/_stable_/forms/forms_et_tables_1_9_1/base/forms_upgrade.php

    r7703 r7895  
    88 * Cedric Morin
    99 * Renato
    10  * © 2005,2006 - Distribue sous licence GNU/GPL
     10 * ??? 2005,2006 - Distribue sous licence GNU/GPL
    1111 *
    1212 */
     
    177177                        ecrire_meta('forms_base_version',$current_version=0.20);
    178178                }
     179                if ($current_version<0.21){
     180                        spip_query("ALTER TABLE spip_forms ADD forms_obligatoires VARCHAR(255) DEFAULT '' AFTER type_form");
     181                        spip_query("ALTER TABLE spip_forms ADD modifiable ENUM('non', 'oui') DEFAULT 'non' AFTER type_form");
     182                        spip_query("ALTER TABLE spip_forms ADD multiple ENUM('non', 'oui') DEFAULT 'non' AFTER type_form");
     183                        ecrire_meta('forms_base_version',$current_version=0.21);
     184                }
    179185                ecrire_metas();
    180186        }
  • _plugins_/_stable_/forms/forms_et_tables_1_9_1/exec/forms_edit.php

    r7857 r7895  
    88 * Cedric Morin
    99 * Renato
    10  * © 2005,2006 - Distribue sous licence GNU/GPL
     10 * ??? 2005,2006 - Distribue sous licence GNU/GPL
    1111 *
    1212 */
     
    203203                $row['titre'] = $titre = unicode2charset(html2unicode($titre));
    204204                $row['descriptif'] = "";
    205                
     205                ///////////////////////
     206                //MODIFICATION
     207                ///////////////////////
     208                $row['modifiable'] = 'non';
     209                $row['multiple'] = 'non';
     210                $row['forms_obligatoires'] = "";
     211                ///////////////////////
    206212                $row['email'] = array();
    207213                $row['champconfirm'] = "";
  • _plugins_/_stable_/forms/forms_et_tables_1_9_1/inc/forms.php

    r7743 r7895  
    88 * Cedric Morin
    99 * Renato
    10  * © 2005,2006 - Distribue sous licence GNU/GPL
     10 * 2005,2006 - Distribue sous licence GNU/GPL
    1111 *
    1212 */
     
    203203
    204204        function Forms_verif_cookie_sondage_utilise($id_form) {
    205                 //var_dump($_COOKIE);
    206                 $cookie_utilise=true;
    207                 $nom_cookie = Forms_nom_cookie_form($id_form);
    208                 // Ne generer un nouveau cookie que s'il n'existe pas deja
    209                 if (!$cookie = addslashes($GLOBALS['cookie_form'])){
    210                         if (!$cookie = $_COOKIE[$nom_cookie]) {
    211                         $cookie_utilise=false;  // pas de cookie a l'horizon donc pas de reponse presumée
    212                                 //include_spip("inc/session");
    213                                 //$cookie = creer_uniqid();
    214                         }
    215                 }
    216                 $query = "SELECT id_donnee FROM spip_forms_donnees ".
    217                         "WHERE id_form=$id_form AND cookie='".addslashes($cookie)."'";
    218                 if (!spip_num_rows(spip_query($query)))
    219                   $cookie_utilise=false;  // cet utilisateur n'a pas deja repondu !
    220                 return $cookie_utilise;
     205                /////////////////////
     206                //MODIFICATION
     207                /////////////////////
     208                global $auteur_session;
     209                $id_auteur = $auteur_session ? intval($auteur_session['id_auteur']) : 0;
     210                $cookie = $_COOKIE[Forms_nom_cookie_form($id_form)];
     211                $q="SELECT id_donnee FROM spip_forms_donnees " .
     212                        "WHERE statut='publie' AND id_form=".intval($id_form)." ";
     213                if ($id_auteur)
     214                        if ($cookie) $q.="AND (cookie='".addslashes($cookie)."' OR id_auteur=".$id_auteur.")";
     215                        else $q.="AND id_auteur=".$id_auteur;
     216                else
     217                        if ($cookie) $q.="AND (cookie='".addslashes($cookie)."' OR id_auteur=".$id_auteur.")";
     218                        else return false;
     219                //On retourne les donnees si auteur ou cookie
     220                $res = spip_query($q);
     221                return (spip_num_rows($res)>0);
     222                /////////////////////
    221223        }
    222224
     
    448450                        // D'abord creer la reponse dans la base de donnees
    449451                        if ($ok) {
    450                                 if (!$id_donnee){
    451                                         spip_query("INSERT INTO spip_forms_donnees (id_form, id_auteur, date, ip, url, confirmation,statut, cookie) ".
     452                                /////////////////////
     453                                //MODIFICATION
     454                                /////////////////////
     455                                $dejareponse=Forms_verif_cookie_sondage_utilise($id_form);
     456                                if ($row['modifiable'] == 'oui' && $dejareponse) {
     457                                        $q = "SELECT id_donnee FROM spip_forms_donnees WHERE id_form=".$id_form.
     458                                                " AND (cookie='".addslashes($cookie)."' OR id_auteur=".$id_auteur.")";
     459                                        if ($id_auteur)
     460                                                if ($cookie) $q.="AND (cookie='".addslashes($cookie)."' OR id_auteur=".$id_auteur.")";
     461                                                else $q.="AND id_auteur=".$id_auteur;
     462                                        else
     463                                                if ($cookie) $q.="AND (cookie='".addslashes($cookie)."' OR id_auteur=".$id_auteur.")";
     464                                        //si unique, ignorer id_donnee, si pas id_donnee, ne renverra rien
     465                                        if ($row['multiple']=='oui') $q.=" AND donnees_champs.id_donnee="._q($id_donnee);
     466                                        $r=spip_query($q);
     467                                        if ($r=spip_fetch_array($r)){
     468                                                $id_donnee = $r['id_donnee'];
     469                                                $q2 = "UPDATE spip_forms_donnees SET date=NOW(), ip="._q($GLOBALS['ip']).", url="._q($url).", '$confirmation', statut="._q($statut).", cookie="._q($cookie)." ".
     470                                                        "WHERE id_donnee=".$id_donnee;
     471                                                spip_query($q2);
     472                                                $q3 = "DELETE FROM spip_forms_donnees_champs WHERE id_donnee=".$id_donnee;
     473                                                spip_query($q3);
     474                                        } else {
     475                                                $q2="INSERT INTO spip_forms_donnees (id_form, id_auteur, date, ip, url, confirmation,statut, cookie) ".
     476                                                        "VALUES ("._q($id_form).","._q($id_auteur).", NOW(),"._q($GLOBALS['ip']).","._q($url).", '$confirmation', '$statut',"._q($cookie).")";
     477                                                spip_query($q2);
     478                                                $id_donnee = spip_insert_id();
     479                                        }
     480                                } elseif (!$id_donnee && !($dejareponse && $row['multiple']=='non')) {
     481                                /////////////////////
     482                                                spip_query("INSERT INTO spip_forms_donnees (id_form, id_auteur, date, ip, url, confirmation,statut, cookie) ".
    452483                                                "VALUES ("._q($id_form).","._q($id_auteur).", NOW(),"._q($GLOBALS['ip']).","._q($url).", '$confirmation', '$statut',"._q($cookie).")");
    453484                                        $id_donnee = spip_insert_id();
     
    563594                }
    564595        }
    565 
     596function Forms_obligatoire($row,$forms_obligatoires){
     597        $returned=$row;
     598        global $auteur_session;
     599        $id_auteur = $auteur_session ? intval($auteur_session['id_auteur']) : 0;
     600        $form_tab=explode(',',$forms_obligatoires);
     601        $chercher=true;
     602        $i=0;
     603        while ($chercher && $i<count($form_tab)){
     604                $form_id=$form_tab[$i];
     605                $cookie = $_COOKIE[Forms_nom_cookie_form($form_id)];
     606                $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).")";
     607                $res=spip_query($q);
     608                if (!spip_fetch_array($res)){
     609                        $res2 = spip_query("SELECT * FROM spip_forms WHERE id_form="._q($form_id));
     610                        $returned = spip_fetch_array($res2);
     611                        $chercher=false;
     612                }
     613                $i++;   
     614        }
     615        return $returned;       
     616}
    566617?>
  • _plugins_/_stable_/forms/forms_et_tables_1_9_1/inc/forms_edit.php

    r7857 r7895  
    88 * Cedric Morin
    99 * Renato
    10  * 2005,2006 - Distribue sous licence GNU/GPL
     10 * 2005,2006 - Distribue sous licence GNU/GPL
    1111 *
    1212 */
     
    508508                $out .= "<input type='hidden' name='type_form' value='".$row['type_form']."' />";
    509509
     510        ///////////////////////
     511        //MODIFICATION
     512        ///////////////////////
     513        $out .= debut_cadre_enfonce("",true);
     514        $out .= "<strong><label for='modifiable'>"._T('forms:modifiable_donnees')."</label></strong>";
     515        $out .= "<br />";
     516        $out .= bouton_radio("modifiable", "oui", _T('forms:donnees_modifiable'), $row['modifiable'] == "oui", "");
     517        $out .= "<br />";
     518        $out .= bouton_radio("modifiable", "non", _T('forms:donnees_nonmodifiable'), $row['modifiable'] != "oui", "");
     519        $out .= "<br />";
     520        $out .= fin_cadre_enfonce(true);
     521       
     522        $out .= debut_cadre_enfonce("",true);
     523        $out .= "<strong><label for='multiple'>"._T('forms:multiple_donnees')."</label></strong>";
     524        $out .= "<br />";
     525        $out .= bouton_radio("multiple", "oui", _T('forms:donnees_multiple'), $row['multiple'] == "oui", "");
     526        $out .= "<br />";
     527        $out .= bouton_radio("multiple", "non", _T('forms:donnees_nonmultiple'), $row['multiple'] != "oui", "");
     528        $out .= "<br />";
     529        $out .= fin_cadre_enfonce(true);
     530       
     531        $out .= debut_cadre_enfonce("",true);
     532        $out .= "<strong><label for='forms_obligatoires'>"._T('forms:forms_obligatoires')."</label></strong>";
     533        $out .= "<br />";
     534        $out .= "<input type='text' name='forms_obligatoires' id='forms_obligatoires_form' class='formo $focus' ".
     535                "value=\"".$row['forms_obligatoires']."\" size='40' /><br />\n";
     536        $out .= "<br />";
     537        $out .= fin_cadre_enfonce(true);
     538        ///////////////////////
     539       
    510540        $out .= debut_cadre_enfonce("",true);
    511541        $out .= "<strong><label for='moderation'>"._T('forms:publication_donnees')."</label></strong>";
  • _plugins_/_stable_/forms/forms_et_tables_1_9_1/lang/forms_fr.php

    r7447 r7895  
    5353'date_invalide' => "Format de la date invalide",
    5454'dupliquer' => "Dupliquer",
     55'donnees_modifiable'=>"Donn&eacute;es modifiables par l'utilisateur.",
     56'donnees_multiple'=>"R&eacute;ponses multiples.",
     57'donnees_nonmodifiable'=>"Donn&eacute;es non modifiables par l'utilisateur.",
     58'donnees_nonmultiple'=>"R&eacute;ponse unique.",
    5559'donnees_pub'=>"Donn&eacute;es publiques. Les donn&eacute;es enregitr&eacute;es seront accessibles aux visiteurs du site.",
    5660'donnees_prot'=>"Donn&eacute;es prot&eacute;g&eacute;es. Les donn&eacute;es enregitr&eacute;es ne seront accessibles que depuis l'interface priv&eacute;e.",
     
    9296
    9397'moderation_donnees' => 'Valider les donn&eacute;es avant publication :',
     98'modifiable_donnees'=>"R&eacute;ponses Modifiables.",
     99'multiple_donnees'=>"Type de formulaire.",
    94100
    95101'nombre_reponses'=>"@nombre@ donn&eacute;es",
Note: See TracChangeset for help on using the changeset viewer.