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
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