Check out the LimeSurvey source code on GitHub!

Rotation aléatoire des groupes

More
5 years 5 months ago - 5 years 5 months ago #65880 by Ysthad
Bonjour à tous,

J'ai trouvé des pistes très intéressantes sur la rotation aléatoire des groupes, notamment un document pdf qui pose très clairement le problème et propose une solution.

Le hic, c'est que ça ne fonctionne pas chez moi (version 1.91 build 10951).
Plus précisément, ce code semble affecter tous les groupes de toutes les surveys sans distinction en faisant des rotations aléatoires dans tous les sens.

Mes questions :

est-ce que quelqu'un a essayé ce code ?
est-ce que ça fonctionne chez vous ?
en gros ça vient de moi :blush: ou le code bug à partir des versions sup à la version 1.7x ?

Merci de vos retours,
Cdt,
Christophe.

Note : désolé pour ce nouveau topic, je sais que ce sujet a déjà été abordé sur le forum mais je ne le retrouve pas.
Last Edit: 5 years 5 months ago by Ysthad.

Please Log in to join the conversation.

More
5 years 5 months ago #66048 by DenisChenu
Le code est pour une ancienne version, sans doute pas adapté à la nouvelle version.

As tu regardé du coté de "Nom de groupe aléatoire" ( paramètres avancé des questions), je sais pas trop comment cela fonction mais bon ...

Denis

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand (or search sondages pro).

Please Log in to join the conversation.

More
5 years 5 months ago - 5 years 5 months ago #66051 by Ysthad
Bonjour Nickko,
Bonjour Denis,

Nickko, merci pour le déplacement du post ;)

Nickko,
Denis,

En fait, LS ne propose pas (encore) la possibilité de "rotationner" aléatoirement des groupes. C'est possible de le faire pour les questions mais pas (encore) pour les groupes. Du coup, il faut coder.

dans index.php il existe une fonction qui est au coeur de mes présentes préoccupations :
 
function UpdateSessionGroupList($language)
//1. SESSION VARIABLE: grouplist
//A list of groups in this survey, ordered by group name.
{
    global $surveyid;
    unset ($_SESSION['grouplist']);
    $query = "SELECT * FROM ".db_table_name('groups')." WHERE sid=$surveyid AND language='".$language."' ORDER BY group_order";
    $result = db_execute_assoc($query) or safe_die ("Couldn't get group list<br />$query<br />".$connect->ErrorMsg());  //Checked
    while ($row = $result->FetchRow())
    {
        $_SESSION['grouplist'][]=array($row['gid'], $row['group_name'], $row['description']);
    }
}

Qu'il faudrait remplacer par le code suivant (Cf. le pdf trouvé plus haut) :
function UpdateSessionGroupList($language)
//1. SESSION VARIABLE: grouplist
//A list of groups in this survey, ordered by group name.
{
	global $surveyid;
	unset ($_SESSION['grouplist']);
	$query = "SELECT * FROM ".db_table_name('groups')." WHERE sid=$surveyid AND language='".$language."' ORDER BY ".db_table_name('groups').".group_order";
	$result = db_execute_assoc($query) or safe_die ("Couldn't get group list<br />$query<br />".$connect->ErrorMsg()); //Checked
	while ($row = $result->FetchRow())
	{
		$_SESSION['grouplist'][]=array($row['gid'], $row['group_name'], $row['description']);
	}
	// The line below needs to be added in order to randomize group order
	RandomizeSessionGroupList();
}

Les deux différences :

1. ORDER BY ".db_table_name('groups').".group_order";
=> no comprendo : pourquoi ajouter ce bout de code ?!
=> d'ailleurs, c'est peut-être ça qui met le chantier dans toutes mes surveys ?!

2. la fonction RandomizeSessionGroupList();
où la fonction RandomizeSessionGroupList() ressemble à cela (Cf. le pdf trouvé plus haut) :
 
function RandomizeSessionGroupList()
{
	$scratcharr = array();
	$randarr = array();
	if (isset($_SESSION['grouplist'])) 
	{
		foreach ($_SESSION['grouplist'] as $group)
			{
				if (strrpos(rtrim($group[1]),'_rand()') == (strlen($group[1])-7)) 
				{
					$randarr[] = $group;
				}
				else
				{
					if (count($randarr)>0)
						{
							shuffle($randarr);
							$scratcharr = array_merge($scratcharr, $randarr);
							$randarr = array();
						}
					$scratcharr[] = $group;
				}
			}
			if (count($randarr)>0)
			{
			shuffle($randarr);
			$scratcharr = array_merge($scratcharr, $randarr);
			$randarr = array();
			}
			$_SESSION['grouplist'] = $scratcharr;
	}
}

Le problème c'est que (chez moi) la rotation s'applique à toutes les surveys de toutes les études que leurs noms soient ou pas suffixés par "_rand()"...
C'est embettant :S
Je suis sur que ce n'est pas grand chose à modifier mais je bloque !?
Si vous avez une idée ?!

Merci,
Cdt,
Christophe.
Last Edit: 5 years 5 months ago by Ysthad.

Please Log in to join the conversation.

More
5 years 4 months ago - 5 years 4 months ago #66259 by DenisChenu
Salut,

C'est le test qui semble planter.

Essaye avec:
[code type=php-brief]if (strrpos(rtrim($group[1]),'_rand()'))[/code]

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand (or search sondages pro).
Last Edit: 5 years 4 months ago by DenisChenu.

Please Log in to join the conversation.

More
5 years 4 months ago - 5 years 4 months ago #66275 by Ysthad
Ca fonctionne !

J'ai juste apporté une petite modification
if (strpos(trim($group[1]),'_rand()'))
strpos à la place de strrpos
trim à la place de rtrim
Je n'ai jamais rien trouvé sur les fonctions strrpos et rtrim :unsure:

Un grand merci !
Cdt,
Christophe.
Last Edit: 5 years 4 months ago by Ysthad.

Please Log in to join the conversation.

More
5 years 4 months ago #66279 by DenisChenu
Merci de votre retour !

Si ces informations vous ont aidé et que vous aimez LimeSurvey
veuillez considérer l'opportunité d'une donation au projet .
Le projet LimeSurvey est effectué sur notre temps libre et nous ne recevons aucune rémunération.

Sans votre aide , le projet ne peut survivre.

;)

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand (or search sondages pro).

Please Log in to join the conversation.

More
5 years 4 months ago #66280 by Ysthad
Je viens d'essayer de faire un don... voici le message :
"La carte que vous avez indiquée ne peut pas être utilisée pour ce paiement. Veuillez saisir un autre numéro de carte."

Je dois donc m'ouvrir un compte paypal ?!

Please Log in to join the conversation.

More
5 years 4 months ago #66300 by DenisChenu
Heu ...

Aucune idée ....

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand (or search sondages pro).

Please Log in to join the conversation.

More
5 years 4 months ago - 5 years 4 months ago #67838 by Ysthad
if (strrpos(rtrim($group[1]),'_rand()'))
J'ai essayé d'appliquer cette méthode à un nouveau questionnaire... Ca ne fonctionne plus ?!
Je ne comprends plus rien !
J'ai revérifier 15 fois.
J'ai checker le texte.

Rien à faire. Aucune rotation à l'horizon !!!
Last Edit: 5 years 4 months ago by Ysthad.

Please Log in to join the conversation.

More
5 years 4 months ago #67846 by dihme69
tu avais apporté cette modification :
if (strpos(trim($group[1]),'_rand()'))

Please Log in to join the conversation.

More
5 years 4 months ago - 5 years 4 months ago #67847 by Ysthad
avec modif sans modif... rien à faire !
Le pire c'est que j'ai deux installations de Lime. Sur l'une ça fonctionne sur l'autre non !?
J'ai comparer les fichiers index.php avec Winmerge tout est ok !
Un truc incompréhensible...
Last Edit: 5 years 4 months ago by Ysthad.

Please Log in to join the conversation.

More
5 years 4 months ago #67854 by DenisChenu
Salut,

les 2 installs sur le même serveur ?

Dans le test, ajoute un gros:
echo "Passage par aléatoire";

Pour voir si le test passe.

Voir, fait complémentent :
[code type=php-brief]echo $group[1];
echo "<hr>";
echo var_dump($group);
echo "<hr>";
if (strpos(trim($group[1]),'_rand()')){
echo "On y VA";
}[/code]
Pour essayer de tracer le problème, et de travailler sur la partie qui plante.

Denis

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand (or search sondages pro).

Please Log in to join the conversation.

More
5 years 4 months ago #67880 by Ysthad
Ca te parle ?!

Evaluation globaleLes communicationsEvaluation de quelques communicationsmail-1_rand()mail-2_rand()mail-3_rand()Le site InternetLe service clientLes offres et les animationsVos habitudesPour finirarray(3) { [0]=> string(2) "91" [1]=> string(10) "Pour finir" [2]=> string(16) "

" } Evaluation globaleLes communicationsEvaluation de quelques communicationsmail-1_rand()mail-2_rand()mail-3_rand()Le site InternetLe service clientLes offres et les animationsVos habitudesPour finirarray(3) { [0]=> string(2) "91" [1]=> string(10) "Pour finir" [2]=> string(16) "

" }

Please Log in to join the conversation.

More
5 years 4 months ago - 5 years 4 months ago #67924 by Ysthad
Je crois avoir trouvé le problème...

Ce n'est pas un problème d'installlation ou de serveur... C'est un problème de questionnaires et plus précisément de la façon de les présenter : question par question vs groupe par groupe.

La rotation aléatoire des groupes fonctionne quand on présente le questionnaire groupe par groupe pas quand on le présente question par question !

Le problème c'est que je suis obligé de présenter le questionnaire question par question ?!

Une idée de solution ?!
Cdt,
Christophe.
Last Edit: 5 years 4 months ago by Ysthad.

Please Log in to join the conversation.

More
5 years 4 months ago #67950 by DenisChenu
Ah oui,

logique on mélange les groupes mais pas les questions.

Il faut retravailler sur l'ordre des questions en fonctions de l'ordre final des groupes ...

Denis

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand (or search sondages pro).

Please Log in to join the conversation.

Moderators: Nickko
Imprint                   Privacy policy         General Terms & Conditions         Revocation information and revocation form