Comment transformer des réponses de formulaires en articles classés automatiquement dans des rubriques ?

Bonjour,

Dans le cadre d’un projet d’agenda automatique en ligne, est-il possible :

1) de convertir automatiquement des réponses de formulaires en articles ? (ou éventuellement avec une validation)

2) d’utiliser un des champs pour classer l’article automatiquement dans une rubrique ? (exemple : champ_rubrique du formulaire="Nature" -> rubrique "Nature"

3) de présenter les différents champs avec les CSS, comme pour un article normal ? (exemple : champ_titre du formulaire -> titre de l’article)

Merci pour l’aide éventuelle :wink:
Christophe

Bonjour,

Pour une fois que je peux répondre !
Je suis justement en train de travailler là dessus :
sur un site associatif en développement, les visiteurs pourront déposer des "fiches-projet" en remplissant un formulaire. Ces fiches (les réponses au formulaire) seront alors envoyées par mail à l'administrateur et, si ils les valident, transformées en article, les différents champs du formulaire se répartissant "comme il faut" entre le nom de l'article, le sous-titre, le descriptif...

Pour ce faire, j'utilise le plugin formes & tables dont j'ai modifié le fichier forms_exporte_reponse_article.php.

Ci-dessous mon fichier modifié (modifications en cours... à encore améliorer...)

Boby

<?php
/*
* forms
* Gestion de formulaires editables dynamiques
*
* Auteurs :
* Antoine Pitrou
* Cedric Morin
* Renato
* © 2005,2006 - Distribue sous licence GNU/GPL
*

modifié pour s'adapter au site HG

*/

include_spip('inc/forms');
include_spip('inc/texte');

function action_forms_exporte_reponse_article(){

    $id_donnee = _request('arg'); // id de la réponse //
    $hash = _request('hash');
    $id_auteur = _request('id_auteur');
    $redirect = _request('redirect');
    if ($redirect==NULL) $redirect="";
    if (!include_spip("inc/securiser_action"))
        include_spip("inc/actions");
    if (verifier_action_auteur("forms_exporte_reponse_article-$id_donnee",$hash,$id_auteur)==TRUE){
        // preparer l'article
        $id_article = 0;
        $res = spip_query("SELECT * FROM spip_forms_donnees AS r LEFT JOIN spip_forms AS f ON f.id_form = r.id_form WHERE r.id_donnee="._q($id_donnee));
        if ($row=spip_fetch_array($res)){
            $id_form = $row['id_form']; // n° du formulaire //
            switch ($id_form) {
                   case 1:
                        $id_rubrique=14; // les réponses au formulaire n°1 seront exportée dans un article de cette rubrique //
                        $id_secteur=9;
                        break;
                   case 2:
                        $id_rubrique=9;
                        $id_secteur=9;
                        break;
                   default:
                        $id_secteur='';
                       $id_rubrique='';
            }
            $titre = _T("forms:reponse",array('id_reponse'=>$id_donnee));
            $soustitre="";
            $descriptif="";
            $chapo="";
            $url_site = "";
            $titre_article = "";
            $surtitre = $row['titre']; // titre du formulaire //
            $date = $row['date']; // date de la réponse //
            $ps = "";
            list($lib,$values,$urls) = Forms_extraire_reponse($id_donnee);
            $texte = "";
            $res = spip_query("SELECT * FROM spip_forms_champs AS forms WHERE id_form="._q($id_form)." ORDER BY rang"); // tous les champs du formulaire //
            switch ($id_form) {
                   case 1: // traitement particulier pour le formulaire n°1 //
            while ($row = spip_fetch_array($res)){
                $titre = $row['titre']; // nom du champ //
                $champ = $row['champ']; // type et n° du champ //
                $type = $row['type']; // type de champ //
                if (!isset($values[$champ])){
                    switch ($type){
                        case 'textestatique': $texte .= "\n{{{$titre}}}\n\n"; break;
                        case 'separateur': $texte .= "\n{{{{$titre}}}}\n\n"; break;
                    }
                }
                else {
                    $s = '';
                    if (count($values[$champ])>1) $s = "\n-* ";
                    foreach ($values[$champ] as $id=>$valeur){
                        $valeur = typo($valeur);
                        if(strlen($s)) $s .= "\n-* ";
                        if ($lien = $urls[$champ][$id])
                            $s .= "[$valeur -> $lien]";
                        else
                            $s .= $valeur;
                    }
                    if ($champ == 'texte_1')
                       $descriptif = $s; // la réponse du premier champ texte est mise en descriptif et sera aussi dans le bloc principal de l'article //
                    if ($champ == 'ligne_1')
                       $titre_article = $s; // la réponse du premier champ ligne est mise en titre et ne sera pas insérée dans le bloc principal de l'article //
                    else {
                    switch ($type){
                        case 'texte': $texte .= "\n{{{$titre}}}\n_ $s\n"; break;
                        case 'url': $url_site = "$s"; break;
                        case 'email': $ps= "_ {{{$titre}}} : [$s -> mailto:$s]\n"; break; // le contact est mis en ps //
                        default:
                            $texte .= "_ {{{$titre}}} : $s\n"; break;
                    }
                }
            } //fin while
                     break;
            default:
            while ($row = spip_fetch_array($res)){
                $titre = $row['titre']; // nom du champ //
                $champ = $row['champ']; // type et n° du champ //
                $type = $row['type']; // type de champ //
                if (!isset($values[$champ])){
                    switch ($type){
                        case 'textestatique': $texte .= "\n{{{$titre}}}\n\n"; break;
                        case 'separateur': $texte .= "\n{{{{$titre}}}}\n\n"; break;
                    }
                }
                else {
                    $s = '';
                    if (count($values[$champ])>1) $s = "\n-* ";
                    foreach ($values[$champ] as $id=>$valeur){
                        $valeur = typo($valeur);
                        if(strlen($s)) $s .= "\n-* ";
                        if ($lien = $urls[$champ][$id])
                            $s .= "[$valeur -> $lien]";
                        else
                            $s .= $valeur;
                    }
                    switch ($type){
                        case 'texte': $texte .= "\n{{{$titre}}}\n_ $s\n"; break;
                        case 'url': $texte .= "_ {{{$titre}}} : [$s -> $s]\n"; break;
                        case 'email': $texte .= "_ {{{$titre}}} : [$s -> mailto:$s]\n"; break;
                        default:
                            $texte .= "_ {{{$titre}}} : $s\n"; break;
                    }
                }
            } //fin while
            } // fin switch

            // creer un article
            include_spip('base/abstract_sql');
            $id_article = spip_abstract_insert("spip_articles",
            "(surtitre, titre,soustitre, id_rubrique,id_secteur,descriptif,chapo,texte,date,statut,url_site,ps)",
            "("._q($surtitre).","._q($titre_article).","._q($soustitre).","._q($id_rubrique).","._q($id_secteur).","._q($descriptif).","._q($chapo).","._q($texte).","._q($date).",'prepa',"._q($url_site).","._q($ps).")");

            if ($id_article!=0){
                spip_query("UPDATE spip_forms_donnees SET id_article_export=$id_article WHERE id_donnee="._q($id_donnee));
            }
        }
        if ($id_article!=0)
            redirige_par_entete(generer_url_ecrire('articles_edit',"id_article=$id_article",true));
        else
            redirige_par_entete($redirect);
    }
    else
        redirige_par_entete($redirect);
}

?>

----- Original Message ----- From: "Christophe Danaux" <info@sentiers.be>
To: <spip@rezo.net>
Sent: Tuesday, April 07, 2009 10:46 PM
Subject: [Spip] Comment transformer des réponses de formulaires en articles classés automatiquement dans des rubriques ?

Bonjour,

Dans le cadre d’un projet d’agenda automatique en ligne, est-il possible :

1) de convertir automatiquement des réponses de formulaires en articles
? (ou éventuellement avec une validation)

2) d’utiliser un des champs pour classer l’article automatiquement dans
une rubrique ? (exemple : champ_rubrique du formulaire="Nature" ->
rubrique "Nature"

3) de présenter les différents champs avec les CSS, comme pour un
article normal ? (exemple : champ_titre du formulaire -> titre de l’article)

Merci pour l’aide éventuelle :wink:
Christophe

_______________________________________________
liste spip
spip@rezo.net - désabonnement : spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

irc://irc.freenode.net/spip ou http://embed.mibbit.com/?server=irc.freenode.net&channel=%23spip

mais attention, si tu es sur SPIP 2, le plugin forms & tables n'est pas encore disponible pour cette version, malheureusement, et je peux te dire qu'on est tous impatients qu'il arrive :wink:

YB

Christophe Danaux a écrit :

Bonjour,

Dans le cadre d’un projet d’agenda automatique en ligne, est-il possible :

1) de convertir automatiquement des réponses de formulaires en articles ? (ou éventuellement avec une validation)

2) d’utiliser un des champs pour classer l’article automatiquement dans une rubrique ? (exemple : champ_rubrique du formulaire="Nature" -> rubrique "Nature"

3) de présenter les différents champs avec les CSS, comme pour un article normal ? (exemple : champ_titre du formulaire -> titre de l’article)

Merci pour l’aide éventuelle :wink:
Christophe

_______________________________________________
liste spip
spip@rezo.net - désabonnement : spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

irc://irc.freenode.net/spip ou http://embed.mibbit.com/?server=irc.freenode.net&channel=%23spip

--
*Younès Benjelloun* Intégrateur
ybenjelloun@insite.coop <mailto:ybenjelloun@insite.coop>
139 rue des Arts - 59100 Roubaix
Tel : +33 3 20 28 48 68 - Fax : +33 3 20 28 48 69
*INSITE* - www.insite.coop <http://www.insite.coop>

Je me suis posé le problème sur cette même liste le mois dernier et Alexandra Guiderdoni m'a répondu :

Lien de la version zipée avec le dernier commit sur vieilles def

http://rapidshare.com/files/213276512/forms_1_9_3_foireux_mais_parfois_utile.zip.html

Mais utiliser plutôt un client SVN pour être sur d'avoir une version toujours à jour

Alexandra

Je l'ai installé et il tourne admirablement sur un 2.0.6 mais pas sur une 2.0.5.

Gérald

Younès Benjelloun a écrit :

mais attention, si tu es sur SPIP 2, le plugin forms & tables n'est pas encore disponible pour cette version, malheureusement, et je peux te dire qu'on est tous impatients qu'il arrive :wink:

YB

Christophe Danaux a écrit :

Bonjour,

Dans le cadre d’un projet d’agenda automatique en ligne, est-il possible :

1) de convertir automatiquement des réponses de formulaires en articles ? (ou éventuellement avec une validation)

2) d’utiliser un des champs pour classer l’article automatiquement dans une rubrique ? (exemple : champ_rubrique du formulaire="Nature" -> rubrique "Nature"

3) de présenter les différents champs avec les CSS, comme pour un article normal ? (exemple : champ_titre du formulaire -> titre de l’article)

Merci pour l’aide éventuelle :wink:
Christophe

_______________________________________________
liste spip
spip@rezo.net - désabonnement : spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

irc://irc.freenode.net/spip ou http://embed.mibbit.com/?server=irc.freenode.net&channel=%23spip

malheureusement le lien ne mène plus à rien :frowning:

j'avais testé la dernière version en cours sur svn (les dernières modifs datent du week end dernier si je ne me trompe pas) et je n'ai absolument rien de visible quand je l'installe (aucun nouveau bouton dans l'admin pour y accéder), c'est peut être moi qui m'y suis pris comme un manche...?

YB

Gerald Yart a écrit :

Je me suis posé le problème sur cette même liste le mois dernier et Alexandra Guiderdoni m'a répondu :

Lien de la version zipée avec le dernier commit sur vieilles def

http://rapidshare.com/files/213276512/forms_1_9_3_foireux_mais_parfois_utile.zip.html

Mais utiliser plutôt un client SVN pour être sur d'avoir une version toujours à jour

Alexandra

Je l'ai installé et il tourne admirablement sur un 2.0.6 mais pas sur une 2.0.5.

Gérald

Younès Benjelloun a écrit :

mais attention, si tu es sur SPIP 2, le plugin forms & tables n'est pas encore disponible pour cette version, malheureusement, et je peux te dire qu'on est tous impatients qu'il arrive :wink:

YB

Christophe Danaux a écrit :

Bonjour,

Dans le cadre d’un projet d’agenda automatique en ligne, est-il possible :

1) de convertir automatiquement des réponses de formulaires en articles ? (ou éventuellement avec une validation)

2) d’utiliser un des champs pour classer l’article automatiquement dans une rubrique ? (exemple : champ_rubrique du formulaire="Nature" -> rubrique "Nature"

3) de présenter les différents champs avec les CSS, comme pour un article normal ? (exemple : champ_titre du formulaire -> titre de l’article)

Merci pour l’aide éventuelle :wink:
Christophe

_______________________________________________
liste spip
spip@rezo.net - désabonnement : spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

irc://irc.freenode.net/spip ou http://embed.mibbit.com/?server=irc.freenode.net&channel=%23spip

--
*Younès Benjelloun* Intégrateur
ybenjelloun@insite.coop <mailto:ybenjelloun@insite.coop>
139 rue des Arts - 59100 Roubaix
Tel : +33 3 20 28 48 68 - Fax : +33 3 20 28 48 69
*INSITE* - www.insite.coop <http://www.insite.coop>

Oulah ! Moi qui pensais qu'il y avait moyen de chipoter directement avec des squelettes, voilà qu'il faut aller dans le php pur et dur. Suis pas sur d'avoir le temps d'y plonger. En attendant, je ferai le transfert manuellement à partir de la possibilité de convertir une réponse en article...

Merci pour la réponse.

Christophe

Boby K a écrit :

Bonjour,

Pour une fois que je peux répondre !
Je suis justement en train de travailler là dessus :
sur un site associatif en développement, les visiteurs pourront déposer des "fiches-projet" en remplissant un formulaire. Ces fiches (les réponses au formulaire) seront alors envoyées par mail à l'administrateur et, si ils les valident, transformées en article, les différents champs du formulaire se répartissant "comme il faut" entre le nom de l'article, le sous-titre, le descriptif...

Pour ce faire, j'utilise le plugin formes & tables dont j'ai modifié le fichier forms_exporte_reponse_article.php.

Ci-dessous mon fichier modifié (modifications en cours... à encore améliorer...)

Boby

<?php
/*
* forms
* Gestion de formulaires editables dynamiques
*
* Auteurs :
* Antoine Pitrou
* Cedric Morin
* Renato
* © 2005,2006 - Distribue sous licence GNU/GPL
*

modifié pour s'adapter au site HG

*/

include_spip('inc/forms');
include_spip('inc/texte');

function action_forms_exporte_reponse_article(){

   $id_donnee = _request('arg'); // id de la réponse //
   $hash = _request('hash');
   $id_auteur = _request('id_auteur');
   $redirect = _request('redirect');
   if ($redirect==NULL) $redirect="";
   if (!include_spip("inc/securiser_action"))
       include_spip("inc/actions");
   if (verifier_action_auteur("forms_exporte_reponse_article-$id_donnee",$hash,$id_auteur)==TRUE){

       // preparer l'article
       $id_article = 0;
       $res = spip_query("SELECT * FROM spip_forms_donnees AS r LEFT JOIN spip_forms AS f ON f.id_form = r.id_form WHERE r.id_donnee="._q($id_donnee));
       if ($row=spip_fetch_array($res)){
           $id_form = $row['id_form']; // n° du formulaire //
           switch ($id_form) {
                  case 1:
                       $id_rubrique=14; // les réponses au formulaire n°1 seront exportée dans un article de cette rubrique //
                       $id_secteur=9;
                       break;
                  case 2:
                       $id_rubrique=9;
                       $id_secteur=9;
                       break;
                  default:
                       $id_secteur='';
                      $id_rubrique='';
           }
           $titre = _T("forms:reponse",array('id_reponse'=>$id_donnee));
           $soustitre="";
           $descriptif="";
           $chapo="";
           $url_site = "";
           $titre_article = "";
           $surtitre = $row['titre']; // titre du formulaire //
           $date = $row['date']; // date de la réponse //
           $ps = "";
           list($lib,$values,$urls) = Forms_extraire_reponse($id_donnee);
           $texte = "";
           $res = spip_query("SELECT * FROM spip_forms_champs AS forms WHERE id_form="._q($id_form)." ORDER BY rang"); // tous les champs du formulaire //
           switch ($id_form) {
                  case 1: // traitement particulier pour le formulaire n°1 //
           while ($row = spip_fetch_array($res)){
               $titre = $row['titre']; // nom du champ //
               $champ = $row['champ']; // type et n° du champ //
               $type = $row['type']; // type de champ //
               if (!isset($values[$champ])){
                   switch ($type){
                       case 'textestatique': $texte .= "\n{{{$titre}}}\n\n"; break;
                       case 'separateur': $texte .= "\n{{{{$titre}}}}\n\n"; break;
                   }
               }
               else {
                   $s = '';
                   if (count($values[$champ])>1) $s = "\n-* ";
                   foreach ($values[$champ] as $id=>$valeur){
                       $valeur = typo($valeur);
                       if(strlen($s)) $s .= "\n-* ";
                       if ($lien = $urls[$champ][$id])
                           $s .= "[$valeur -> $lien]";
                       else
                           $s .= $valeur;
                   }
                   if ($champ == 'texte_1')
                      $descriptif = $s; // la réponse du premier champ texte est mise en descriptif et sera aussi dans le bloc principal de l'article //
                   if ($champ == 'ligne_1')
                      $titre_article = $s; // la réponse du premier champ ligne est mise en titre et ne sera pas insérée dans le bloc principal de l'article //
                   else {
                   switch ($type){
                       case 'texte': $texte .= "\n{{{$titre}}}\n_ $s\n"; break;
                       case 'url': $url_site = "$s"; break;
                       case 'email': $ps= "_ {{{$titre}}} : [$s -> mailto:$s]\n"; break; // le contact est mis en ps //
                       default:
                           $texte .= "_ {{{$titre}}} : $s\n"; break;
                   }
               }
           } //fin while
                    break;
           default:
           while ($row = spip_fetch_array($res)){
               $titre = $row['titre']; // nom du champ //
               $champ = $row['champ']; // type et n° du champ //
               $type = $row['type']; // type de champ //
               if (!isset($values[$champ])){
                   switch ($type){
                       case 'textestatique': $texte .= "\n{{{$titre}}}\n\n"; break;
                       case 'separateur': $texte .= "\n{{{{$titre}}}}\n\n"; break;
                   }
               }
               else {
                   $s = '';
                   if (count($values[$champ])>1) $s = "\n-* ";
                   foreach ($values[$champ] as $id=>$valeur){
                       $valeur = typo($valeur);
                       if(strlen($s)) $s .= "\n-* ";
                       if ($lien = $urls[$champ][$id])
                           $s .= "[$valeur -> $lien]";
                       else
                           $s .= $valeur;
                   }
                   switch ($type){
                       case 'texte': $texte .= "\n{{{$titre}}}\n_ $s\n"; break;
                       case 'url': $texte .= "_ {{{$titre}}} : [$s -> $s]\n"; break;
                       case 'email': $texte .= "_ {{{$titre}}} : [$s -> mailto:$s]\n"; break;
                       default:
                           $texte .= "_ {{{$titre}}} : $s\n"; break;
                   }
               }
           } //fin while
           } // fin switch

           // creer un article
           include_spip('base/abstract_sql');
           $id_article = spip_abstract_insert("spip_articles",
           "(surtitre, titre,soustitre, id_rubrique,id_secteur,descriptif,chapo,texte,date,statut,url_site,ps)",
           "("._q($surtitre).","._q($titre_article).","._q($soustitre).","._q($id_rubrique).","._q($id_secteur).","._q($descriptif).","._q($chapo).","._q($texte).","._q($date).",'prepa',"._q($url_site).","._q($ps).")");

           if ($id_article!=0){
               spip_query("UPDATE spip_forms_donnees SET id_article_export=$id_article WHERE id_donnee="._q($id_donnee));
           }
       }
       if ($id_article!=0)
           redirige_par_entete(generer_url_ecrire('articles_edit',"id_article=$id_article",true));

       else
           redirige_par_entete($redirect);
   }
   else
       redirige_par_entete($redirect);
}

?>

----- Original Message ----- From: "Christophe Danaux" <info@sentiers.be>
To: <spip@rezo.net>
Sent: Tuesday, April 07, 2009 10:46 PM
Subject: [Spip] Comment transformer des réponses de formulaires en articles classés automatiquement dans des rubriques ?

Bonjour,

Dans le cadre d’un projet d’agenda automatique en ligne, est-il possible :

1) de convertir automatiquement des réponses de formulaires en articles
? (ou éventuellement avec une validation)

2) d’utiliser un des champs pour classer l’article automatiquement dans
une rubrique ? (exemple : champ_rubrique du formulaire="Nature" ->
rubrique "Nature"

3) de présenter les différents champs avec les CSS, comme pour un
article normal ? (exemple : champ_titre du formulaire -> titre de l’article)

Merci pour l’aide éventuelle :wink:
Christophe

_______________________________________________
liste spip
spip@rezo.net - désabonnement : spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

irc://irc.freenode.net/spip ou http://embed.mibbit.com/?server=irc.freenode.net&channel=%23spip

Tu peux quand même activer le plugin ? Si c'est le cas après il te faut aller dans Edition/Formulaires & Sondages

Gérald

Gerald Yart a écrit :

Je me suis posé le problème sur cette même liste le mois dernier et Alexandra Guiderdoni m'a répondu :

Lien de la version zipée avec le dernier commit sur vieilles def

http://rapidshare.com/files/213276512/forms_1_9_3_foireux_mais_parfois_utile.zip.html

Mais utiliser plutôt un client SVN pour être sur d'avoir une version toujours à jour

Alexandra

Je l'ai installé et il tourne admirablement sur un 2.0.6 mais pas sur une 2.0.5.

Gérald

Younès Benjelloun a écrit :

mais attention, si tu es sur SPIP 2, le plugin forms & tables n'est pas encore disponible pour cette version, malheureusement, et je peux te dire qu'on est tous impatients qu'il arrive :wink:

YB

Christophe Danaux a écrit :

Bonjour,

Dans le cadre d’un projet d’agenda automatique en ligne, est-il possible :

1) de convertir automatiquement des réponses de formulaires en articles ? (ou éventuellement avec une validation)

2) d’utiliser un des champs pour classer l’article automatiquement dans une rubrique ? (exemple : champ_rubrique du formulaire="Nature" -> rubrique "Nature"

3) de présenter les différents champs avec les CSS, comme pour un article normal ? (exemple : champ_titre du formulaire -> titre de l’article)

Merci pour l’aide éventuelle :wink:
Christophe

_______________________________________________
liste spip
spip@rezo.net - désabonnement : spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

irc://irc.freenode.net/spip ou http://embed.mibbit.com/?server=irc.freenode.net&channel=%23spip

_______________________________________________
liste spip
spip@rezo.net - désabonnement : spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

irc://irc.freenode.net/spip ou http://embed.mibbit.com/?server=irc.freenode.net&channel=%23spip