Browse Source

* traitement de l'anonymisation. Elle permet de créer des formulaires dont les réponses sont anonymes (pas d'adresse IP, pas de nom de cookie, pas de login)

* export de l'analyse des données en en CSV depuis l'Espace Privé
svn/root/tags/v1.3.6
camille.sauvage@espci.fr 10 years ago
parent
commit
839b7a4a1b
  1. 2
      .gitattributes
  2. 103
      action/exporter_analyse_reponses.php
  3. 8
      formidable_autorisations.php
  4. 11
      formidable_options.php
  5. 5
      formulaires/formidable.html
  6. 4
      formulaires/formidable.php
  7. 173
      inc/formidable.php
  8. 11
      lang/formidable_de.php
  9. 11
      lang/formidable_fr.php
  10. 5
      lang/formidable_it.php
  11. 5
      lang/formidable_sk.php
  12. 8
      prive/squelettes/extra/formulaires_analyse.html
  13. 9
      traiter/enregistrement.php
  14. 18
      traiter/enregistrement.yaml

2
.gitattributes vendored

@ -1,6 +1,7 @@
* text=auto !eol
action/dupliquer_formulaire.php -text
action/editer_formulaire.php -text
action/exporter_analyse_reponses.php -text
action/exporter_formulaire.php -text
action/exporter_formulaires_reponses.php -text
action/instituer_formulaires_reponse.php -text
@ -81,6 +82,7 @@ prive/squelettes/contenu/formulaires_reponse.html -text
prive/squelettes/contenu/formulaires_reponses.html -text
prive/squelettes/extra/formulaire.html -text
prive/squelettes/extra/formulaire_edit.html -text
prive/squelettes/extra/formulaires_analyse.html -text
prive/squelettes/extra/formulaires_reponses.html -text
prive/squelettes/hierarchie/formulaire.html -text
prive/squelettes/hierarchie/formulaire_edit.html -text

103
action/exporter_analyse_reponses.php

@ -0,0 +1,103 @@
<?php
// Sécurité
if (!defined("_ECRIRE_INC_VERSION")) return;
/*
* Exporter l'analyse des réponses d'un formulaire
* @param unknown_type $arg
* @return unknown_type
*/
function action_exporter_analyse_reponses_dist($arg=null) {
if (is_null($arg)){
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
}
// on ne fait des choses seulements si le formulaire existe et qu'il a des enregistrements
$ok = false;
if (
$id_formulaire = intval($arg)
and $formulaire = sql_fetsel('*','spip_formulaires','id_formulaire = '.$id_formulaire)
and $reponses = sql_allfetsel('*', 'spip_formulaires_reponses', 'id_formulaire = '.$id_formulaire.' and statut = '.sql_quote('publie'))
) {
include_spip('inc/saisies');
include_spip('classes/facteur');
include_spip('inc/filtres');
$reponses_completes = array();
$saisies = saisies_lister_par_nom(unserialize($formulaire['saisies']), false);
$res = sql_select(
array('nom, valeur'),
'intranet_formulaires_reponses_champs AS FRC,
intranet_formulaires_reponses AS FR,
intranet_formulaires AS F',
"FRC.id_formulaires_reponse=FR.id_formulaires_reponse
AND FR.statut='publie'
AND F.id_formulaire=FR.id_formulaire
AND F.id_formulaire=$id_formulaire"
);
$valeurs = array();
while($r = sql_fetch($res)) {
$valeurs[$r['nom']][] = is_array(unserialize($r['valeur']))
? unserialize($r['valeur'])
: $r['valeur'];
}
foreach ($saisies as $nom=>$saisie){
$valeur = sql_getfetsel(
'valeur',
'spip_formulaires_reponses_champs',
'id_formulaires_reponse = '.intval($reponse['id_formulaires_reponse']).' and nom = '.sql_quote($nom)
);
if (is_array(unserialize($valeur)))
$valeur = unserialize($valeur);
$reponse_complete[] = formidable_analyser_saisie($saisie, $valeurs, 0, true);
}
$colonnes = array(_T('formidable:champs'), _T('formidable:sans_reponses'));
foreach($reponse_complete as $reponses) {
foreach($reponses as $key => $reponse) {
if ($key == 'header' || $key == 'sans_reponse') continue;
if (in_array($key, $colonnes) == false)
array_push($colonnes, $key);
}
}
$csv = array();
foreach($reponse_complete as $reponses) {
foreach($colonnes as $colonne) {
$csv[$reponses['header']][$colonne] =
isset($reponses[$colonne])
? $reponses[$colonne]
: '';
}
$csv[$reponses['header']][_T('formidable:champs')] = $reponses['header'];
$csv[$reponses['header']][_T('formidable:sans_reponses')]
= $reponses['formidable:sans_reponse'];
}
$cpt_ligne = 1;
$reponses_completes = array();
$reponses_completes[0] = $colonnes;
foreach($csv as $ligne => $colonnes) {
$cpt_colonne = 0;
foreach($colonnes as $colonne) {
$reponses_completes[$cpt_ligne][$cpt_colonne++] = $colonne;
}
$cpt_ligne++;
}
if ($reponses_completes and $exporter_csv = charger_fonction('exporter_csv', 'inc/', true)){
echo $exporter_csv('analyses-formulaire-'.$formulaire['identifiant'], $reponses_completes);
exit();
}
}
}
?>

8
formidable_autorisations.php

@ -28,8 +28,10 @@ function formidable_autoriser(){}
* @return bool true s'il a le droit, false sinon
**/
function autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $opt){
if (isset($qui['statut']) and $qui['statut'] <= '0minirezo' and !$qui['restreint']) return true;
else return false;
if (isset($qui['statut']) and $qui['statut'] <= '0minirezo' and
(!$qui['restreint']) or $GLOBALS['formulaires']['autoriser_admin_restreint'])
return true;
else return false;
}
/**
@ -93,7 +95,7 @@ function autoriser_formulaire_repondre_dist($faire, $type, $id, $qui, $opt){
else{
include_spip('inc/formidable');
// Si la personne n'a jamais répondu, c'est bon
if (!formidable_verifier_reponse_formulaire($id, $options['identification']))
if (!formidable_verifier_reponse_formulaire($id))
return true;
else
return false;

11
formidable_options.php

@ -84,6 +84,17 @@ $GLOBALS['formulaires']['editer_formulaire'] = array(
)
);
/* déclaration des différentes variables utilisées pour effectuer l'anonymisation */
$GLOBALS['formulaires']['variables_anonymisation'] = array(
'remote_user' => '$_SERVER["REMOTE_USER"]',
'php_auth_user' => '$_SERVER["PHP_AUTH_USER"]',
);
$GLOBALS['formulaires']['passwd'] = array(
'interne' => 'palabresecreta',
);
$GLOBALS['formulaires']['autoriser_admin_restreint'] = true;
if (!function_exists('array_fill_keys')) {
/**

5
formulaires/formidable.html

@ -2,6 +2,11 @@
[(#REM) Afficher du HTML si prévu par un plugin ou pour les stats ]
[(#ENV**{_remplacer_formulaire})]
</BOUCLE_remplacer_le_formulaire>
<BOUCLE_formulaire(FORMULAIRES){id_formulaire=#ENV{id}}>
[(#SET{enregistrement,[(#TRAITEMENTS**|unserialize|table_valeur{'enregistrement'})]})]
[(#SET{anonymiser,[(#GET{enregistrement}|table_valeur{'anonymiser'})]})]
[(#GET{anonymiser}|=={on}|oui)<h3><:formidable:formulaire_anonyme_explication:>]</h3>
</BOUCLE_formulaire>
<div class="formulaire_spip formulaire_#ENV{form}[ formulaire_#ENV{form}-(#ENV{id,nouveau})]">
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]

4
formulaires/formidable.php

@ -95,8 +95,8 @@ function formulaires_formidable_charger($id_formulaire, $valeurs=array(), $id_fo
if ($options = $traitements['enregistrement']
and !$options['multiple']
and $options['modifiable']
and $reponses = formidable_verifier_reponse_formulaire($formulaire['id_formulaire'], $options['identification'])
){
and $reponses = formidable_verifier_reponse_formulaire($formulaire['id_formulaire'], $options)
) {
$id_formulaires_reponse = array_pop($reponses);
$contexte = formidable_definir_contexte_avec_reponse($contexte, $id_formulaires_reponse, $ok);

173
inc/formidable.php

@ -94,15 +94,26 @@ function formidable_generer_nom_cookie($id_formulaire){
* Vérifie si le visiteur a déjà répondu à un formulaire
*
* @param int $id_formulaire L'identifiant du formulaire
* @param string $choix_identification Comment verifier une reponse. Priorite sur 'cookie' ou sur 'id_auteur'
* @param string $options : options du formulaire definies dans l'espace prive
* @return unknown_type Retourne un tableau contenant les id des réponses si elles existent, sinon false
*/
function formidable_verifier_reponse_formulaire($id_formulaire, $choix_identification='cookie'){
function formidable_verifier_reponse_formulaire($id_formulaire, $options){
global $auteur_session;
$id_auteur = $auteur_session ? intval($auteur_session['id_auteur']) : 0;
$nom_cookie = formidable_generer_nom_cookie($id_formulaire);
$cookie = isset($_COOKIE[$nom_cookie]) ? $_COOKIE[$nom_cookie] : false;
$anonymiser = isset($options['anonymiser']) ? $options['anonymiser'] : false;
$anonymiser_variable = isset($options['anonymiser_variable']) ? $options['anonymiser_variable'] : '';
// traitement de l'anonymisation
if ($anonymiser != false) {
// mod de l'id_auteur
$variables_anonymisation =
$GLOBALS['formulaires']['variables_anonymisation'][$options['anonymiser_variable']];
$id = eval("return $variables_anonymisation;");
$id_auteur = formidable_scramble($id);
}
// ni cookie ni id, on ne peut rien faire
if (!$cookie and !$id_auteur) {
return false;
@ -111,17 +122,17 @@ function formidable_verifier_reponse_formulaire($id_formulaire, $choix_identific
// priorite sur le cookie
if ($choix_identification == 'cookie' or !$choix_identification) {
if ($cookie)
$where = '(cookie='.sql_quote($cookie).($id_auteur ? ' OR id_auteur='.intval($id_auteur).')' : ')');
$where = '(cookie='.sql_quote($cookie).($id_auteur ? ' OR id_auteur='.$id_auteur.')' : ')');
else
$where = 'id_auteur='.intval($id_auteur);
$where = 'id_auteur='.$id_auteur;
}
// sinon sur l'id_auteur
else {
if ($id_auteur)
$where = 'id_auteur='.intval($id_auteur);
$where = 'id_auteur='.$id_auteur;
else
$where = '(cookie='.sql_quote($cookie).($id_auteur ? ' OR id_auteur='.intval($id_auteur).')' : ')');
$where = '(cookie='.sql_quote($cookie).($id_auteur ? ' OR id_auteur='.$id_auteur.')' : ')');
}
$reponses = sql_allfetsel(
@ -149,7 +160,7 @@ function formidable_verifier_reponse_formulaire($id_formulaire, $choix_identific
* @param array $env L'environnement, contenant normalement la réponse à la saisie
* @return string Retour le HTML des vues
*/
function formidable_analyser_saisie($saisie, $valeurs=array(), $reponses_total=0){
function formidable_analyser_saisie($saisie, $valeurs=array(), $reponses_total=0, $format_brut=false) {
// Si le paramètre n'est pas bon ou que c'est un conteneur, on génère du vide
if (!is_array($saisie) or (isset($saisie['saisies']) and $saisie['saisies']))
return '';
@ -177,10 +188,104 @@ function formidable_analyser_saisie($saisie, $valeurs=array(), $reponses_total=0
}
// On génère la saisie
return recuperer_fond(
'saisies-analyses/_base',
$contexte
);
if ($format_brut) {
return analyser_saisie($contexte);
} else {
return recuperer_fond(
'saisies-analyses/_base',
$contexte
);
}
}
/*
* Renvoie une ligne de réponse sous la forme d'un tableau
*
* @param array $saisie Un tableau décrivant une saisie
* @return array Tableau contenant une ligne
*/
function analyser_saisie($saisie) {
if (!isset($saisie['type_saisie']) or $saisie['type_saisie'] == '')
return '';
$ligne = array();
switch($saisie['type_saisie']) {
case 'selecteur_rubrique' :
case 'selecteur_rubrique_article' :
case 'selecteur_article' :
$ligne['plein'] = count(array_filter($saisie['valeurs']));
$ligne['vide'] = count(array_diff_key($saisie['valeurs']
, array_filter($saisie['valeurs'])));
break;
case 'radio' :
case 'selection' :
case 'selection_multiple' :
case 'checkbox' :
$stats = array();
foreach($saisie['valeurs'] as $valeur) {
if (is_array($valeur)) {
foreach($valeur as $choix) {
if (isset($stats["choix-$choix"]))
$stats["choix-$choix"]++;
else $stats["choix-$choix"] = 1;
}
} else {
if (isset($stats["choix-$valeur"]))
$stats["choix-$valeur"]++;
else $stats["choix-$valeur"] = 1;
}
}
$datas = is_string($saisie['datas'])
? saisies_chaine2tableau($saisie['datas'])
: $saisie['datas'];
foreach($datas as $key => $val) {
$nb = (isset($stats["choix-$key"]))
? $stats["choix-$key"]
: 0;
$ligne[$val] = $nb;
}
break;
case 'destinataires' :
$stats = array();
foreach($saisie['valeurs'] as $valeur) {
foreach($valeur as $choix) {
if (isset($stats["choix-$choix"]))
$stats["choix-$choix"]++;
else $stats["choix-$choix"] = 1;
}
}
foreach($stats as $key => $val) {
$key = str_replace('choix-', '', $key);
if ($key == '') $key = '<valeur vide>';
$auteur = sql_getfetsel('nom','spip_auteurs',"id_auteur=$key");
$ligne[$auteur] = $val;
}
break;
}
$vide = 0;
foreach($saisie['valeurs'] as $valeur) {
if ($valeur == '') $vide++;
switch($saisie['type_saisie']) {
case 'case' :
case 'oui_non' :
if(isset($ligne['oui']) == false) $ligne['oui'] = 0;
if(isset($ligne['non']) == false) $ligne['non'] = 0;
if ($valeur) $ligne['oui']++; else $ligne['non']++;
break;
case 'input' :
case 'hidden' :
case 'explication' :
break;
}
}
$ligne['sans_reponse'] = $vide;
$ligne['header'] = $saisie['label'] != ''
? $saisie['label']
: $saisie['type_saisie'];
return $ligne;
}
@ -223,4 +328,50 @@ function titre_nb_reponses($nb) {
return _T('formidable:reponses_nb', array('nb' => $nb));
}
/**
* Transforme le hash MD5 en une valeur numérique unique
*
* trouvé ici : http://stackoverflow.com/questions/1422725/represent-md5-hash-as-an-integer
* @param string $hex_str La valeur alphanumérique à transformer
* @return string Valeur numérique
*/
function md5_hex_to_dec($hex_str) {
$arr = str_split($hex_str, 4);
foreach ($arr as $grp) {
$dec[] = str_pad(hexdec($grp), 5, '0', STR_PAD_LEFT);
}
/* on s'assure que $result ne commence pas par un zero */
$result = implode('', $dec);
for ($cpt = 0 ; $cpt < strlen($result) ; $cpt++) {
if ($result[$cpt] != '0') break;
}
$result = substr($result, $cpt);
return $result;
}
/**
* Transforme un login en une valeur numérique de 19 caractères
*
* NOTE: il devient impossible de retrouver la valeur d'origine car le HASH
* est coupé à 19cars et est donc incomplet. L'unicité n'est pas garantie mais
* les chances pour que deux logins tombent sur le même HASH sont de 1 sur
* 10 milliards de milliards
* A la fin, on recherche et supprime les éventuels zéros de début
* @param string $login Login à transformer
* @param string $passwd Chaîne 'secrète' ajoutée au login et id_formulaire pour éviter
* les recoupements d'identité entre plusieurs formulaires
* @return string Un nombre de 19 chiffres
*/
function formidable_scramble($login, $passwd = '') {
$id_form = (isset($flux['args']['id_form']) ? $flux['args']['id_form'] : '');
if ($passwd == '')
$passwd = $GLOBALS['formulaires']['passwd']['interne'];
$login_md5 = md5("$login$passwd$id_form");
$login_num = md5_hex_to_dec($login_md5);
$login_num = substr($login_num, 0, 19);
return $login_num;
}
?>

11
lang/formidable_de.php

@ -15,6 +15,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'analyse_une_reponse_total' => 'Une personne a répondu à ce formulaire.', # NEW
'analyse_zero_reponse_total' => 'Aucune personne n\'a répondu à ce formulaire.', # NEW
'aucun_traitement' => 'Aucun traitement', # NEW
'analyse_exporter' => 'Analyse exportieren',
// B
'bouton_formulaires' => 'Formulare',
@ -26,6 +27,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'cfg_analyse_classe_label' => 'Classe CSS de la barre de progression', # NEW
'cfg_titre_page_configurer_formidable' => 'Configurer Formidable', # NEW
'cfg_titre_parametrages_analyse' => 'Paramétrages de l\'analyse des réponses', # NEW
'champ' => 'Feld',
// E
'echanger_formulaire_forms_importer' => 'Forms & Tables (.xml)',
@ -62,6 +64,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'erreur_inexistant' => 'Formular nicht vorhanden.',
// F
'formulaire_anonyme_explication' => "Diese Form ist anonym, dh die Identität des Benutzers nicht registriert ist.",
'formulaires_aucun' => 'Kein Formular vorhanden.',
'formulaires_dupliquer' => 'Formular kopieren',
'formulaires_dupliquer_copie' => '(Kopie)',
@ -107,6 +110,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'reponses_voir_detail' => 'Antwort anzeigen',
'retour_aucun_traitement' => 'Ihre Antwort wurde gesendet, jedoch wurde keine Verarbeitungsoption für das Formular festgelegt. Deshalb geschieht mit den Daten aus diesem Formular überhaupt nichts. :)',
// S
'sans_reponses' => 'Unbeantwortet',
// T
'titre_cadre_raccourcis' => 'Raccourcis', # NEW
'traitements_actives' => 'Traitements activés', # NEW
@ -138,6 +144,11 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'traiter_email_sujet_accuse' => 'Danke für ihre Antwort.',
'traiter_email_titre' => 'Per Mail senden',
'traiter_email_url_enregistrement' => 'Sie könen die Antworten <a href="@url@">auf dieser Seite verwalten</a>.',
'traiter_enregistrement_option_anonymiser_label' => "Anonymisierter Form",
'traiter_enregistrement_option_anonymiser_explication' => "Stellen die Ergebnisse der anonymen Form (nicht halten Trace-Kennung der Befragten).')",
'traiter_enregistrement_option_choix_select_label' => "W&auml;hlen eine Variable von denen zur Verf&uuml;gung.",
'traiter_enregistrement_option_anonymiser_variable_label' => "Variable aus dem anonymisierter Form.",
'traiter_enregistrement_option_anonymiser_variable_explication' => "Welches System Variable verwendet, um einen einzelnen Wert f&uuml;r jeden Autor ohne Offenlegung seiner Identit&auml;t zu berechnen.",
'traiter_enregistrement_description' => 'Einträge in das Formular in der Datenbank speichern',
'traiter_enregistrement_erreur_base' => 'Beim Speichern in der Datenbank ist ein Fehler aufgetreten',
'traiter_enregistrement_erreur_deja_repondu' => 'Sie haben dieses Formular bereits ausgefüllt.',

11
lang/formidable_fr.php

@ -13,6 +13,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'analyse_une_reponse_total' => 'Une personne a répondu à ce formulaire.',
'analyse_zero_reponse_total' => 'Aucune personne n\'a répondu à ce formulaire.',
'aucun_traitement' => 'Aucun traitement',
'analyse_exporter' => 'Exporter l\'analyse',
// B
'bouton_formulaires' => 'Formulaires',
@ -24,6 +25,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'cfg_analyse_classe_label' => 'Classe CSS de la barre de progression',
'cfg_titre_page_configurer_formidable' => 'Configurer Formidable',
'cfg_titre_parametrages_analyse' => 'Paramétrages de l\'analyse des réponses',
'champs' => 'Champs',
// E
'echanger_formulaire_forms_importer' => 'Forms & Tables (.xml)',
@ -60,6 +62,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'erreur_inexistant' => 'Le formulaire n\'existe pas.',
// F
'formulaire_anonyme_explication' => 'Ce formulaire est anonyme ; c\'est à dire que l\'identité de l\'utilisateur n\'est pas enregistr&eacute;e.',
'formulaires_aucun' => 'Il n\'y a pour l\'instant aucun formulaire.',
'formulaires_dupliquer' => 'Dupliquer le formulaire',
'formulaires_dupliquer_copie' => '(copie)',
@ -105,6 +108,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'reponses_voir_detail' => 'Voir la réponse',
'retour_aucun_traitement' => 'Votre réponse a bien été envoyée, mais aucun traitement n\'a été défini pour ce formulaire. Il ne fait donc rien. :)',
// S
'sans_reponses' => 'Sans réponse',
// T
'titre_cadre_raccourcis' => 'Raccourcis',
'traitements_actives' => 'Traitements activés',
@ -136,6 +142,11 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'traiter_email_sujet_accuse' => 'Merci de votre réponse.',
'traiter_email_titre' => 'Envoyer par courriel',
'traiter_email_url_enregistrement' => 'Vous pouvez gérer les réponses <a href="@url@">sur cette page</a>.',
'traiter_enregistrement_option_anonymiser_label' => "Anonymiser le formulaire",
'traiter_enregistrement_option_anonymiser_explication' => "Rendre les r&eacute;sultats du formulaire anonymes (ne pas garder de traces de l'identifiant des personnes ayant r&eacute;pondu.)",
'traiter_enregistrement_option_choix_select_label' => "Choisir une variable parmi celles propos&eacute;es",
'traiter_enregistrement_option_anonymiser_variable_label' => "Variable &agrave; partir de laquelle anonymiser le formulaire",
'traiter_enregistrement_option_anonymiser_variable_explication' => "Quelle variable syst&egrave;me utiliser pour calculer une valeur unique pour chaque auteur sans pour autant r&eacute;v&eacute;ler son identit&eacute;.",
'traiter_enregistrement_description' => 'Enregistre les résultats du formulaire dans la base de données',
'traiter_enregistrement_erreur_base' => 'Une erreur technique est survenue durant l\'enregistrement en base de données',
'traiter_enregistrement_erreur_deja_repondu' => 'Vous avez déjà répondu à ce formulaire.',

5
lang/formidable_it.php

@ -15,6 +15,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'analyse_une_reponse_total' => 'Une personne a répondu à ce formulaire.', # NEW
'analyse_zero_reponse_total' => 'Aucune personne n\'a répondu à ce formulaire.', # NEW
'aucun_traitement' => 'Aucun traitement', # NEW
'analyse_exporter' => 'Esporta l\'analisi',
// B
'bouton_formulaires' => 'Moduli',
@ -26,6 +27,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'cfg_analyse_classe_label' => 'Classe CSS de la barre de progression', # NEW
'cfg_titre_page_configurer_formidable' => 'Configurer Formidable', # NEW
'cfg_titre_parametrages_analyse' => 'Paramétrages de l\'analyse des réponses', # NEW
'champ' => 'Campo',
// E
'echanger_formulaire_forms_importer' => 'Forms & Tables (.xml)',
@ -107,6 +109,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'reponses_voir_detail' => 'Vedi la risposta',
'retour_aucun_traitement' => 'La risposta è stata correttamente inviata. Grazie :)',
// S
'sans_reponses' => 'Senza risposta',
// T
'titre_cadre_raccourcis' => 'Raccourcis', # NEW
'traitements_actives' => 'Traitements activés', # NEW

5
lang/formidable_sk.php

@ -15,6 +15,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'analyse_une_reponse_total' => 'Na tento formulár odpovedal jeden človek.',
'analyse_zero_reponse_total' => 'Na tento formulár neodpovedal žiaden človek.',
'aucun_traitement' => 'Žiadne spracovanie',
'analyse_exporter' => 'Exportovať analýzu',
// B
'bouton_formulaires' => 'Formuláre',
@ -26,6 +27,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'cfg_analyse_classe_label' => 'Trieda CSS stĺpca dokončenia úkonu',
'cfg_titre_page_configurer_formidable' => 'Nastaviť Formidable',
'cfg_titre_parametrages_analyse' => 'Nastavenia analýzy odpovedí',
'champ' => 'Pol\'a',
// E
'echanger_formulaire_forms_importer' => 'formuláre Forms & Tables (.xml)',
@ -107,6 +109,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'reponses_voir_detail' => 'Zobraziť odpoveď',
'retour_aucun_traitement' => 'Vaša odpoveď bola odoslaná, ale k tomuto formuláru nebola definovaná žiadna funkcia. Nič neurobí. :-)',
// S
'sans_reponses' => 'Neriešiteľný',
// T
'titre_cadre_raccourcis' => 'Skratky',
'traitements_actives' => 'Aktívne spracovanie',

8
prive/squelettes/extra/formulaires_analyse.html

@ -0,0 +1,8 @@
<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
<BOUCLE_autoriser(CONDITION){si #AUTORISER{voir, formulaires_analyse}}>
[(#BOITE_OUVRIR{<:formidable:titre_cadre_raccourcis:>,'info'})]
[(#URL_ACTION_AUTEUR{exporter_analyse_reponses,#ID_FORMULAIRE}
|icone_horizontale{<:formidable:analyse_exporter:>,formulaire,formulaire-analyse-exporter-24,center})]
#BOITE_FERMER
</BOUCLE_autoriser>
</BOUCLE_formulaire>

9
traiter/enregistrement.php

@ -16,6 +16,15 @@ function traiter_enregistrement_dist($args, $retours){
global $auteur_session;
$id_auteur = $auteur_session ? intval($auteur_session['id_auteur']) : 0;
// traitement de l'anonymisation
if ($options['anonymiser'] == 'on') {
// mod de l'id_auteur
$variables_anonymisation =
$GLOBALS['formulaires']['variables_anonymisation'][$options['anonymiser_variable']];
$id = eval("return $variables_anonymisation;");
$id_auteur = formidable_scramble($id);
}
// On cherche le cookie et sinon on le crée
$nom_cookie = formidable_generer_nom_cookie($id_formulaire);
if (isset($_COOKIE[$nom_cookie]))

18
traiter/enregistrement.yaml

@ -26,6 +26,24 @@ options:
cookie: '<:formidable:identification_par_cookie:>'
id_auteur: '<:formidable:identification_par_id_auteur:>'
defaut: 'cookie'
-
saisie: 'oui_non'
options:
nom: 'anonymiser'
label: '<:formidable:traiter_enregistrement_option_anonymiser_label:>'
explication: '<:formidable:traiter_enregistrement_option_anonymiser_explication:>'
defaut: ''
-
saisie: 'selection'
options:
option_intro: '<:formidable:traiter_enregistrement_option_choix_select_label:>'
nom: 'anonymiser_variable'
label: '<:formidable:traiter_enregistrement_option_anonymiser_variable_label:>'
explication: '<:formidable:traiter_enregistrement_option_anonymiser_variable_explication:>'
datas:
remote_user: "Variable serveur : REMOTE_USER"
php_auth_user: "Variable serveur : PHP_AUTH_USER"
defaut: ''
-
saisie: 'radio'
options:

Loading…
Cancel
Save