Welcome, Guest
Username: Password: Remember me
  • Page:
  • 1
  • 2

TOPIC: Rotation aléatoire des groupes

Rotation aléatoire des groupes 2 years 10 months ago #65880

  • Ysthad
  • Ysthad's Avatar
  • OFFLINE
  • Senior Lime
  • Posts: 44
  • Thank you received: 1
  • Karma: 2
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: 2 years 10 months ago by Ysthad.
The administrator has disabled public write access.

Re: Rotation aléatoire des groupes 2 years 10 months ago #66048

  • DenisChenu
  • DenisChenu's Avatar
  • OFFLINE
  • Moderator Lime
  • Posts: 6219
  • Thank you received: 791
  • Karma: 238
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
The administrator has disabled public write access.

Re: Rotation aléatoire des groupes 2 years 10 months ago #66051

  • Ysthad
  • Ysthad's Avatar
  • OFFLINE
  • Senior Lime
  • Posts: 44
  • Thank you received: 1
  • Karma: 2
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: 2 years 10 months ago by Ysthad.
The administrator has disabled public write access.

Re: Rotation aléatoire des groupes 2 years 10 months ago #66259

  • DenisChenu
  • DenisChenu's Avatar
  • OFFLINE
  • Moderator Lime
  • Posts: 6219
  • Thank you received: 791
  • Karma: 238
Salut,

C'est le test qui semble planter.

Essaye avec:
[code type=php-brief]if (strrpos(rtrim($group[1]),'_rand()'))[/code]
Last Edit: 2 years 10 months ago by DenisChenu.
The administrator has disabled public write access.

Re: Rotation aléatoire des groupes 2 years 10 months ago #66275

  • Ysthad
  • Ysthad's Avatar
  • OFFLINE
  • Senior Lime
  • Posts: 44
  • Thank you received: 1
  • Karma: 2
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: 2 years 10 months ago by Ysthad.
The administrator has disabled public write access.

Re: Rotation aléatoire des groupes 2 years 10 months ago #66279

  • DenisChenu
  • DenisChenu's Avatar
  • OFFLINE
  • Moderator Lime
  • Posts: 6219
  • Thank you received: 791
  • Karma: 238
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.

;)
The administrator has disabled public write access.

Re: Rotation aléatoire des groupes 2 years 10 months ago #66280

  • Ysthad
  • Ysthad's Avatar
  • OFFLINE
  • Senior Lime
  • Posts: 44
  • Thank you received: 1
  • Karma: 2
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 ?!
The administrator has disabled public write access.

Re: Rotation aléatoire des groupes 2 years 10 months ago #66300

  • DenisChenu
  • DenisChenu's Avatar
  • OFFLINE
  • Moderator Lime
  • Posts: 6219
  • Thank you received: 791
  • Karma: 238
Heu ...

Aucune idée ....
The administrator has disabled public write access.

Re: Rotation aléatoire des groupes 2 years 9 months ago #67838

  • Ysthad
  • Ysthad's Avatar
  • OFFLINE
  • Senior Lime
  • Posts: 44
  • Thank you received: 1
  • Karma: 2
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: 2 years 9 months ago by Ysthad.
The administrator has disabled public write access.

Re: Rotation aléatoire des groupes 2 years 9 months ago #67846

  • dihme69
  • dihme69's Avatar
  • OFFLINE
  • Fresh Lemon
  • Posts: 8
  • Karma: 0
tu avais apporté cette modification :
if (strpos(trim($group[1]),'_rand()'))
The administrator has disabled public write access.
  • Page:
  • 1
  • 2
Moderators: Nickko
Time to create page: 0.418 seconds
Donation Image