LimeSurvey

Limesurvey contient par défaut tout ce dont vous avez besoin pour réaliser avec élégance quasiment tout type de questionnaire. , il s'installe en 5' (required: apache+php+mySQL)

Install tips

Tenez-vous informé par les flux rss des dernières versions

Pour l'installation, copier sur un serveur, faire la base de données, éditer config.php à la racine

Puis vous rendre sur votre url, eg.

http://localhost/limesurvey/admin/install

Upgrade

Droits

chmod -R 777 upload/
chmod -R 777 tmp/

Main Site

Roadmap

Prévisions et annonces sur ce qui va se faire

http://docs.limesurvey.org/tiki-index.php?page=LimeSurvey+2.0+Roadmap

et bugtracker (le plus à jour)

http://bugs.limesurvey.org./roadmap_page.php

pour poster des bugs

http://bugs.limesurvey.org/

Feeds / RSS

Doc (globale)

Doc français

HomePage (français)

doc:Question Types

Add-ons

Démo fournie par LimeSurvey

Dans le répertoire

limesurvey/docs/demosurveys/

uploader le fichier sample_survey.csv

Il y a plein d'exemples de questions: par contre l'autre démo Language_Question_Test.csv est inutile

Export

email validation (perl epression)

/(\w[-._\w]*\w@\w[-._\w]*\w\.\w{2,3})/

si on veut seulement des emails *.akademia.ch - mais on accepte truc.akademia.ch

/(\w[-._\w]*\w@(truc.)?akademia\.ch)/

date validation http://www.limesurvey.org/en/support/forums/13-french-forum/24531-utilisation-dexpression-pour-validation.html

Pour les dates, le mieux est d'utiliser une question de type date.

Sinon on peut utiliser pour MM/JJ/AAAA =⇒ Code:

/[0-1][0-9]\\/[0-3][0-9]\\/[0-9][0-9][0-9][0-9]/

Mais c'est loin d'être parfait

et pour JJ/MM/AAAA Code:

/[0-3][0-9]\\/[0-1][0-9]\\/[0-9][0-9][0-9][0-9]/

sendmail

sur certains ISP (ex. infomaniak) la fonction mail marche pas, il faut modifier config.php

$emailmethod        =   'smtp';           // The following values can be used:
                                          // mail      -  use internal PHP Mailer
                                          // sendmail  -  use Sendmail Mailer
                                          // qmail     -  use Qmail MTA
                                          // smtp      -  use SMTP relaying

$emailsmtphost      =   'localhost';      // Sets the SMTP host. You can also specify a different port than 25 by using
                                          // this format: [hostname:port] (e.g. 'smtp1.example.com:25').
$emailcharset = "UTF-8";                  // You can change this to change the charset of outgoing emails to some other encoding  - like 'iso-8859-1'

Tools maison

Ressources

Workarounds: Manipulating a survey at runtime using Javascript

Ci-dessous quelques outils bricolés par mes soins

Renvoyer un email à l'usager

Une astuce permettant de renvoyer les données saisies à l'usager, source: http://www.limesurvey.org/en/forum/french-forum/65535-une-reponse-automatique-pour-tous-le-monde#65535

1) configure une question de texte court où tu veux dans ton questionnaire pour 
récupérer l'email de la personne... "votre email svp" 
(tu peux la mettre obligatoire ou non et vérifier ou non le format)

2) Récupère le code SGQA de cette question

3) Dans un des deux champs que tu vois (je pense à la notification détaillée) sur la photo mets:

{INSERTANS:SGQA}

on peut remplacer le SGQA par l'identifiant, qu'on obtient en visualisant le code source de la question portant sur le mail (name)

Il faut ensuite adapter le modèle de courriel utilisé et le tour est joué

EndURL / pour passer des variables à la fin d'un quiz ou d'un formulaire

pour passer des variables à l'url de fin du quiz (très utile pour utiliser limesurvey comme une usine à formulaire)

url de redirection

ex http://yourServer/yourPath/action.php?var1={SAVEDID}&var2={TOKEN}&var3={SID}&lang={LANG}

Afficher une liste déroulante en retirant des valeurs en fonction des réponses déjà fournies

Si vous avez p. ex. des réservations pour des dates, et que vous souhaitez retirer des dates pour lesquelles des réservations ont déjà été effectuées

Faire une page (script php) qui servira de point de départ

<noscript>
<h1>Vous DEVEZ activer JavaScript!</h1>
</noscript>
<?php
//echo "test pour redirection en fonction du nombre d'inscrits";
$quiz=18924; //changer pour le sid du quiz
var id0 = getUrlVars()["id0"];
if(id0=="javatbd18924X1719X436551013") {
document.getElementById('javatbd18924X1719X436551013').style.display='none';
}
var id1 = getUrlVars()["id1"];
if(id1=="javatbd18924X1719X436551014") {
document.getElementById('javatbd18924X1719X436551014').style.display='none';
}
//...
#connect to database
include("connect.inc.php");
$db=connect_db();
$db_name=db_name();
mysql_select_db($db_name,$db);
$chercheA="
SELECT 18924X1719X43655 AS inscriptions
FROM `lime_survey_" .$quiz ."` ORDER BY 18924X1719X43655 ASC
";
//echo $chercheA;
$chercheA=mysql_query($chercheA);
if(!$chercheA) {
	echo mysql_error(); exit;
}

$i=0; $booked="";
//echo mysql_num_rows($chercheA); exit;
while($i<mysql_num_rows($chercheA)){
	 
	if(mysql_result($chercheA,$i,'inscriptions')=="1013"){
	$booked.="id0=javatbd18924X1719X436551013&";
	}
		if(mysql_result($chercheA,$i,'inscriptions')=="1014"){
	$booked.="id1=javatbd18924X1719X436551014&";
	}
	//...
$i++;
}

$link="http://akademia.ch/limesurvey/index.php?sid=18924&".$booked;
?>
<meta http-equiv="refresh" content="0;URL=<? echo $link; ?>">

Dans limesurvey ensuite:

Editer d'abord le code-source du premier groupe et ajouter:

<script type="text/javascript" charset="utf-8">
// Read a page's GET URL variables and return them as an associative array.
function getUrlVars()
{
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for(var i = 0; i < hashes.length; i++)
    {
        hash = hashes[i].split('=');
        vars.push(hash[0]);
        vars[hash[0]] = hash[1];
    }
    return vars;
}
</script>

Editer enfin le code-source de la question sur laquelle on veut porter la condition

<script type="text/javascript" charset="utf-8">
var id0 = getUrlVars()["id0"];
if(id0=="javatbd18924X1719X436551013") {
document.getElementById('javatbd18924X1719X436551013').style.display='none';
}
var id1 = getUrlVars()["id1"];
if(id1=="javatbd18924X1719X436551014") {
document.getElementById('javatbd18924X1719X436551014').style.display='none';
}
/* ... */
</script>

Si vous entrez des valeurs, elles seront automatiquement “cachées” par ce script

Sortir d'un quiz selon une réponse

Pour sortir automatiquement d'un quiz en fonction d'une réponse donnée, créer la question à la fin d'un groupe; récupérer son identifiant, soit en affichant le code source, soit avec webdeveloper, exemple:

On veut qu'une personne cliquant sur “Non” sorte de limesurvey et soit redirigée sur une autre page

Editer ensuite le code-source du groupe suivant, et mettre:

<script>
/* a script to exit using JS */
if ("{INSERTANS:93951X1457X5242}" == "Non")
{
   window.location="http://www.akademia.ch/bye";
}
</script>

note: ici le SID est 93951X1457X5242, la valeur “Non” correspond à un “N” dans un champ oui/non si le formulaire est en français

Droit utilisateurs limesurvey

Les droits des utilisateurs limesurvey ne sont pas encore top sur 1.9 au niveau de la granularité - les rôles sont assez limités, p. ex. on ne peut pas donner à un utilisateur accès à son/ses template sans lui donner les droits sur tous, idem pour les labels etc.

Autoriser la modification des réponses

Seul les utilisateurs super-admin et le propriétaire (créateur) du questionnaire peuvent modifier les réponses; si vous ne parvenez pas à modifier les réponses, alors que vous avez tous les droits sur le questionnaire, c'est sans doute car un super-administrateur a créé ce questionnaire pour vous. Il faut lui demander de modifier dans la table MySQL lime_surveys la valeur owner_id pour y mettre la votre (celle de lime_users.uid)

Référence: http://www.limesurvey.org/fr/forum/can-i-do-this-with-limesurvey/57905-editing-responses-in-limesurvey: “To my knowledge only the person who created a survey and all superadmins can edit results for security reasons”

Exemple de fichier csv pour importation / tokens / invitations

Le fichier doit être un fichier CSV standard (délimiteur: virgule) sans guillemets. La première ligne doit contenir des informations d'entête (elle sera enlevée). Les données devront être dans cet ordre : “Prénom, Nom, Mail, [Invitation], [Attribut_1], [Attribut_2]”.

firstname, lastname, email, Invitation, Attribut_1, Attribut_2

firstname, lastname, email, token, language code, attribute1, attribute2 ,,mail@truc.ch,,fr,,

note: seul email obligatoire

script bash pour convertir un fichier csv comportant uniquement des emails en un script importable dans LimeSurvey

FIXME ATTENTION: impossible de retrouver les tokens si le quiz est anonymisé!!!

IMPOSSIBLE: http://docs.limesurvey.org/tiki-index.php?page=Creating+a+New+Survey Anonymous answers?: This allows you to determine whether responses to your survey are matched up with information from your surveys tokens table, or kept 'anonymous'. The default is yes. If you choose “No” for anonymous, you must also have a tokens table for your survey when you activate it. Attention: If your survey is set to anonymous there is really no way to connect answers and participants. Even the admin can't link answers' data and users' data.

On peut fouiller dans les logs apache… mais c'est un trick!

Mettre les invitations à "envoyées"

> mysql
USE limesurvey;
UPDATE `lime_tokens_IDTABLE` SET `sent` = 'Y';

Comment faire des tests JS dans un quiz?

astuce — Fred Radeff 2008/04/10 15:11

ci-dessous le code (simplifié) d'une question avec 3 checkbox

<input class='checkbox' type='checkbox' name='48872X68X472c1' id='answer48872X68X472c1' value='Y' onclick='checkconditions(this.value, this.name, this.type)' onchange='modfield(this.name)' />
<input class='checkbox' type='checkbox' name='48872X68X472c2' id='answer48872X68X472c2' value='Y' onclick='checkconditions(this.value, this.name, this.type)' onchange='modfield(this.name)' />
<input class='checkbox' type='checkbox' name='48872X68X472c3' id='answer48872X68X472c3' value='Y' onclick='checkconditions(this.value, this.name, this.type)' onchange='modfield(this.name)' />

Mettre dans l'aide:

<script language="JavaScript"> 
function checkconditions(){ 
choix1=document.getElementById('answer48872X68X472c1').checked;
choix2=document.getElementById('answer48872X68X472c2').checked; 
  if(choix1==true&&choix2==true) { 
    alert("choix incompatible!"); 
  } 
} 
</script>

Attention, il y a des conditions: pour réagir au click (ici d'un checkbox), on court-circuite la fonction intégrée à LimeSurvey checkconditions(); si on veut que les fonctions intégrées à LimeSurvey soient fonctionnelles après ce court-circuitage (p.ex. si on veut que la question suivante ait une valeur “autre” qui fasse apparaître un champ de texte <INPUT>), il FAUT soit:

  • finir la page courante par cette question “court-circuitée”
  • découper le questionnaire par groupe, et finir le groupe courant par cette question “court-circuitée”
  • découper le questionnaire par question
How to use Script (eg. JavaScript etc.)
If you want to use javascript within Limesurvey you have to disable a security filter before you can add your javascript in source code mode:
FIRST, some info from config-default.php:

//$filterxsshtml__
// Enables filtering of suspicious html tags in survey, group, questions__
// and answer texts in the administration interface__
// Only set this to false if you absolutely trust the users__
// you created for the administration of  LimeSurvey and if you want to__
// allow these users to be able to use Javascript etc. .__
$filterxsshtml = true;

pour copier un questionnaire

  1. Exporter le questionnaire à copier
  2. Créer un nouveau questionnaire
  3. Importer le questionnaire exporté (fichier csv): Limesurvey lui donnera le même nom, mais un identifiant différent
  4. éditer le nouveau questionnaire, CHANGER SON NOM pour éviter toute confusion

Si on veut avoir des tokens, suivre si nécessaire la procédure décrite infra pour produire le csv. Une fois le csv obtenu:

  1. Activer le nouveau questionnaire
  2. le basculer en accès restreint
  3. importer le fichier csv des tokens
  4. envoyer les invitation

Fini!

Ancienne solution

pas trouvé de réponse simple dans la doc ou le wiki

solution hand-made:

Réfléchir à la question de l'identifiant, cf. infra CAUTION: dans l'idéal il faudrait exporter avec un identifiant discriminant, solution possible: passer par MySQL pour faire des identifiants de questionnaires uniques mais génériques voir permutations2

  • pour vérifier si le nouvel identifiant est pas déjà pris:
SELECT `sid`
FROM `lime_surveys`
ORDER BY `sid` ASC

exporter questionnaire en csv, eg. limesurvey_survey_19355.csv

en shell,

//CAUTION: IF "19355[identifiantLimesurvey]" IN FILE POSSIBLE CONFUSION!!! little grep before!!

replace "19355[identifiantLimesurvey]" "xxxx[nvlIdentifiantArbitraire]" -- limesurvey_survey_*.csv

retourner dans limesurvey, faire créer / importer :

If you have previously exported a survey, you can import it from the “New Survey” screen. Click on the browse button to choose the SQL/CSV file, and then click on the button.

ou en ligne de commande: (pratique si on en a beaucoup) - jamais essayé!

http://docs.limesurvey.org/tiki-index.php?page=Importing+a+Survey

Import using the commandline utility
Since version 1.50 it is possible to import surveys from the command line (or shell). To use this functionality you have to have access to the shell and the PHP interpreter has to be configured to allow shell execution of scripts.

This functionality is useful when you have timeout problems with the web version that could happen when you have very long surveys to import.

To use it, in the shell go to the limesurvey/admin folder and execute:

php cmdline_importsurvey <File to import> [<user> <password>]

    * <File to import> has to be one of the described above
    * <user> has to be a user with the right to create surveys
    * <password> the password for the user
      *<user> and <password> are only required if the control access is active 


If you need to see the parameters you can execute:

php cmdline_importsurvey -h

désactiver le tabulateur

Options / Sécurité / Filtrer le HTML pour XSS : non

Ajouter dans le code source du Message d'accueil :

<script language="javascript" type="text/javascript">
function stopRKey(evt) {
	var evt  = (evt) ? evt : ((event) ? event : null);
	var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
	if ((evt.keyCode == 9) && (node.type=="text")) { 
alert("Merci de ne pas utiliser le tabulateur / Please do not use tab key");
return false;
 }
}
document.onkeypress = stopRKey;
</script> 

pour changer le look du questionnaire:

- choisir le template

- éditer le fichier

REPERTOIRElimesurvey/templates/TEMPLATENAME/startpage.pstpl

p.ex. pour avoir un tableau à 100:

remplacer

<body class='default'>
<table width='75%'

par

<body class='default'>
<table width='100%'...

note: inutile de travailler sur la css pour ça

justification à gauche du quiz

replace "center" "left" -- question.pstpl

effacer la barre de progression du quiz

survey.pstpl

<!--<td nowrap valign="bottom" align="right"><strong>{SURVEYNAME}</strong><br />{PERCENTCOMPLETE}</td>-->

survey.pstpl

uploader un différent logo.gif puis:

<img src="{TEMPLATEURL}logo.gif" alt="Logo Image" height="72" width="211" />
->
<img src="{TEMPLATEURL}logo.gif" alt="Logo Image" />

Labels

Country / Pays

Le fichier openoffice isopays.ods avec la liste des pays et codes ISO; prendre les formats CSV lime_labels.csv.zip

on perd les codes ISO, à remettre après avec cette routine:

#adapt
$pays=utf8_encode(mysql_result($sqlQ,0,'91876X216X912'));
#compute country!
$pays="SELECT * FROM countries WHERE id='".$pays."'";
$pays=mysql_query($pays);
if(!$pays){
echo "sql error on converting country: " .mysql_error();
exit;
}
$pays=mysql_result($pays,0,'iso');

Les erreurs les plus fréquentes

No Word!

éviter le copier-coller depuis word ou tout autre éditeur; passer par le notepad puis travailler directement dans l'éditeur de limesurvey

Ne pas oublier de publier

Lorsque l'on a fini de travailler sur le questionnaire, ne pas oublier de le publier avant de diffuser son url, sinon les utilisateurs verront une page d'erreur

 
info/limesurvey.txt · Dernière modification: 2012/01/19 11:47 par radeff
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki