From 273040611b1557f065179de8043fed661ae48d41 Mon Sep 17 00:00:00 2001 From: Yoann Bonavero Date: Tue, 8 Mar 2011 08:40:44 +0100 Subject: [PATCH 1/8] Reprise de la documentation du code de "pticlic.php". --- code/serveur/php/pticlic.php | 67 +++++++++++++++++++++++++++--------- 1 file changed, 51 insertions(+), 16 deletions(-) diff --git a/code/serveur/php/pticlic.php b/code/serveur/php/pticlic.php index 747f91b..edcb873 100644 --- a/code/serveur/php/pticlic.php +++ b/code/serveur/php/pticlic.php @@ -2,6 +2,11 @@ require_once("db.php"); +/** Vérifie la validité du couple nom d'utilisateur / mot de passe. +* @param user : Le nom d'utilisateur. +* @param passwd : Le mot de passe. +* @return boolean : true si OK sinon false. +*/ function checkLogin($user, $passwd) { $db = getDB(); $hashPasswd = md5($passwd); @@ -9,7 +14,8 @@ function checkLogin($user, $passwd) { return $loginIsOk; } -/** Selectionne aléatoirement un noeud. +/** Selectionne aléatoirement l'eid d'un mot central. +* @return eid : Identifiant d'un mot central, NULL en cas d'erreur. */ function randomCenterNode() { @@ -17,15 +23,15 @@ function randomCenterNode() return $db->querySingle("select eid from random_center_node where rowid = (abs(random()) % (select max(rowid) from random_center_node))+1;"); } +/** Selectionne aléatoirement un noeud d'un nuage. +* @return eid : L'identifiant du noeud. +*/ function randomCloudNode() { $db = getDB(); return $db->querySingle("select eid from random_cloud_node where rowid = (abs(random()) % (select max(rowid) from random_cloud_node))+1;"); } - -// TODO : Yoann : peut-être faire une classe GameCreator avec les fonctions ci-dessous comme méthodes ? - /** * @param cloudSize : Taille du nuage. * @param centerEid : Identifiant du mot central. @@ -102,7 +108,7 @@ function cgBuildResultSets($cloudSize, $centerEid, $r1, $r2) } -/** +/** Sélectionne aléatoirement deux relations. * @return array : Tableau avec la relation 1 et la relation 2. */ function cgChooseRelations() @@ -120,7 +126,7 @@ function cgChooseRelations() return array($r1, $r2); } -/** +/** Génération d'un nuage pour un mot central. * @param cloudSize : Taille du nuage. * @param sources Les sources. * @param sumWeights La somme des poids. @@ -203,7 +209,7 @@ function cgBuildCloud($centerEid, $cloudSize, $sources, $sumWeights) } -/** +/** Insère la partie dans la base de données. * @param centerEid : Identifiant du mot central. * @param cloud : Le nuage. * @param r1 : Le type de la relation 1. @@ -264,26 +270,35 @@ function randomGameCore() { return $db->querySingle("select gid from game where gid = (abs(random()) % (select max(gid) from game))+1 or gid = (select max(gid) from game where gid > 0) order by gid limit 1;"); } +/** Sélection aléatoire d'une partie de la base de données parmis les parties à jouer. +* @return gid : Identifiant de la partie selectionnée. +*/ function randomGame() { $gid = randomGameCore(); + if ($gid === null) { // TODO : séparer ces créations de parties dans une fonction qui détecte le mode toussa. - for ($i = 0; $i < 100; $i++) { + for ($i = 0; $i < 100; $i++) createGameCore(10); - } + $gid = randomGameCore(); - if ($gid === null) { + + if ($gid === null) throw new Exception("Erreur lors de la récupération de la partie. Vérifiez qu'il y a au moins une partie.", 6); - } } return $gid; } +/** Formatage des mots lorsqu'il y a des généralisations/spécifications par le symbole ">". +* @param word : Le mot que l'on veut reformater. +* @return word : le mot formaté. +*/ function formatWord($word) { $db = getDB(); $res = ""; $stack = array(); + while (($pos = strpos($word, ">")) !== false) { $res .= substr($word,0,$pos) . " ("; $eid = intval(substr($word,$pos+1)); @@ -293,14 +308,17 @@ function formatWord($word) { $stack[] = $eid; $word = $db->querySingle("select name from node where eid = $eid"); } + $res .= $word; - for ($depth = count($stack); $depth > 0; $depth--) { + + for ($depth = count($stack); $depth > 0; $depth--) $res .= ')'; - } + return $res; } /** Formate une partie en JSON en l'imprimant. +* @param user : l'utilisateur. * @param gameId : L'identifiant d'une partie. */ function game2json($user, $gameId) @@ -383,7 +401,9 @@ function game2array($user, $gameId) } -/** Création d'une partie. +/** Création d'un lot de parties suivant un mode donnée. +* @param nbParties : le nombre de parties à créer. +* @param mode : Le mode de jeu pour les parties à créer. */ function createGame($nbParties, $mode) { @@ -408,6 +428,9 @@ function createGameCore($cloudSize) } /** Récupération d'une partie. +* @param user : L'identifiant de l'utilisateur. +* @param nbGames : Le nombre de parties à récupérer. +* @param mode : Le mode de jeu des parties à récupérer. */ function getGame($user, $nbGames, $mode) { @@ -424,6 +447,7 @@ function getGame($user, $nbGames, $mode) echo "]"; } + function computeScore($probas, $difficulty, $answer, $userReputation) { // Calcul du score. Score = proba[réponse de l'utilisateur]*coeff1 - proba[autres reponses]*coeff2 + bonus // score = - proba[autres reponses]*coeff2 @@ -448,15 +472,26 @@ function computeScore($probas, $difficulty, $answer, $userReputation) { return round($score * 100) / 100; } +/** Calcul de la réputation de l'utilisateur selon son score. +* @param score : Le score du joueur. +*/ function computeUserReputation($score) { return max(round(log($score)*100)/100, 0); } +/** Formatage des probalitées dans un tableau. +* @param row : le vecteur de probabilités. +* @return array : Le vecteur de probabilités normalisé. +*/ function normalizeProbas($row) { return array($row['probaR1']/$row['totalWeight'], $row['probaR2']/$row['totalWeight'], $row['probaR0']/$row['totalWeight'], $row['probaTrash']/$row['totalWeight']); } -/** Insertion des données d'une partie. +/** Insertion des données d'une partie joué par un utilisateur. +* @param user : L'identifiant de l'utilisateur ayant joué à la partie. +* @param pgid : L'identifiant de la partie jouée. +* @param gid : L'identifiant du jeu auquel la partie appartient. +* @return score : Le score réalisé par le joueur. */ function setGame($user, $pgid, $gid, $answers) { @@ -511,4 +546,4 @@ function setGame($user, $pgid, $gid, $answers) return $scores; } -?> \ No newline at end of file +?> From e45e35a0206f5a34c123d3e68bcfb6cfd1667958 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Georges=20Dup=C3=A9ron?= Date: Tue, 8 Mar 2011 23:04:40 +0100 Subject: [PATCH 2/8] =?UTF-8?q?Ajout=20d'un=20champ=20group=20=C3=A0=20la?= =?UTF-8?q?=20bdd,=20pour=20pouvoir=20distinguer=20plus=20tard=20les=20uti?= =?UTF-8?q?lisateurs=20ayant=20le=20droit=20d'acc=C3=A9der=20=C3=A0=20show?= =?UTF-8?q?game=20etc.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/serveur/dump2sqlite.sh | 5 +++-- code/serveur/php/signup.php | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/code/serveur/dump2sqlite.sh b/code/serveur/dump2sqlite.sh index aa32200..8c71fa0 100755 --- a/code/serveur/dump2sqlite.sh +++ b/code/serveur/dump2sqlite.sh @@ -18,6 +18,7 @@ echo >&2 # Played_game(type) : 0 => partie de référence, 1 => joueur # Note : l'index i_played_game_all sert à la vérification lors du set_partie. # Note : le echo | dd | md5 permet de ne pas avoir le \n, y compris sur les versions de sh sous mac boguées qui ne supportent pas «echo -n» +# Valeurs pour le champ group dans user : 1 = player, 2 = admin cat </dev/null 2>&1; then md5sum; else md5; fi) | cut -d ' ' -f 1)', 0); +insert into user(login, mail, hash_passwd, score, group) values('$(echo "$user" | sed -e "s/'/''/g")', 'foo@isp.com', '$(echo "$passwd" | dd bs=1 count="${#passwd}" | (if which md5sum >/dev/null 2>&1; then md5sum; else md5; fi) | cut -d ' ' -f 1)', 0, 1); EOF # tr : pour virer le CRLF qui traîne diff --git a/code/serveur/php/signup.php b/code/serveur/php/signup.php index f8591dd..f86dfba 100644 --- a/code/serveur/php/signup.php +++ b/code/serveur/php/signup.php @@ -79,10 +79,10 @@ if(isset($_POST['signuppswd2'])){ if(count($msg) == 0 && $newpage == false) { - $ok = ($db->query("INSERT INTO user(mail, login, hash_passwd, score) VALUES ('" . SQLite3::escapeString($signupemail) + $ok = ($db->query("INSERT INTO user(mail, login, hash_passwd, score, group) VALUES ('" . SQLite3::escapeString($signupemail) . "', '" . SQLite3::escapeString($signupid) . "', '" . SQLite3::escapeString(md5($signuppswd1)) - . "', 0);")); + . "', 0, 1);")); if($ok == true) { $_SESSION['userId'] = $signupid; From 65f8bb93bdcc1a60e67b35936216feeba84dddb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Georges=20Dup=C3=A9ron?= Date: Tue, 8 Mar 2011 23:22:59 +0100 Subject: [PATCH 3/8] =?UTF-8?q?Il=20manquait=20un=20backslash=20dans=20le?= =?UTF-8?q?=20script=20de=20conversion=20de=20dump=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/serveur/dump2sqlite.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/serveur/dump2sqlite.sh b/code/serveur/dump2sqlite.sh index 8c71fa0..5502ce5 100755 --- a/code/serveur/dump2sqlite.sh +++ b/code/serveur/dump2sqlite.sh @@ -45,7 +45,7 @@ cat "$1" \ | sed -e 's/X/XX/g' | sed -e 's/A/Xa/g' | tr '\n' 'A' | sed -e 's/A")/")/g' | tr 'A' '\n' | sed -e 's/Xa/A/g' | sed -e 's/XX/X/g' \ | pv -s "$(wc -c "$1" | sed -E -e 's/^ *([0-9]*) .*$/\1/')" \ | sed -E \ - -e "s#\##g" \ + -e 's#\\##g' \ -e "s#'#''#g" \ -e 's#^/?// [0-9]+ occurrences of relations ([a-z_]+) \(t=([0-9]+) nom_etendu="([^"]+)" info="([^"]+)"\)$#insert into type_relation(name, num, extended_name, info) values('\''\1'\'', \2, '\''\3'\'', '\''\4'\'');#' \ -e 's#^/?// [0-9]+ occurrences of nodes ([a-z_]+) \(t=([0-9]+)\)$#insert into type_node(name, num) values('\''\1'\'', \2);#' \ From 70b12494334c9953714efc68bdda9068071778e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Georges=20Dup=C3=A9ron?= Date: Tue, 8 Mar 2011 23:29:16 +0100 Subject: [PATCH 4/8] Bug. --- code/serveur/dump2sqlite.sh | 4 ++-- code/serveur/php/signup.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/serveur/dump2sqlite.sh b/code/serveur/dump2sqlite.sh index 5502ce5..8bed674 100755 --- a/code/serveur/dump2sqlite.sh +++ b/code/serveur/dump2sqlite.sh @@ -26,7 +26,7 @@ create table node(eid integer primary key autoincrement, name, type, weight); create table relation(rid integer primary key autoincrement, start, end, type, weight); create table type_node(name, num); create table type_relation(name, num, extended_name, info); -create table user(login primary key, mail, hash_passwd, score, group); +create table user(login primary key, mail, hash_passwd, score, ugroup); create table game(gid integer primary key autoincrement, eid_central_word, relation_1, relation_2, difficulty); create table game_cloud(gid, num, difficulty, eid_word, totalWeight, probaR1, probaR2, probaR0, probaTrash); create table played_game(pgid integer primary key autoincrement, gid, login, timestamp); @@ -34,7 +34,7 @@ create table played_game_cloud(pgid, gid, type, num, relation, weight, score); create table random_cloud_node(eid,nbneighbors); create table random_center_node(eid); -insert into user(login, mail, hash_passwd, score, group) values('$(echo "$user" | sed -e "s/'/''/g")', 'foo@isp.com', '$(echo "$passwd" | dd bs=1 count="${#passwd}" | (if which md5sum >/dev/null 2>&1; then md5sum; else md5; fi) | cut -d ' ' -f 1)', 0, 1); +insert into user(login, mail, hash_passwd, score, ugroup) values('$(echo "$user" | sed -e "s/'/''/g")', 'foo@isp.com', '$(echo "$passwd" | dd bs=1 count="${#passwd}" | (if which md5sum >/dev/null 2>&1; then md5sum; else md5; fi) | cut -d ' ' -f 1)', 0, 1); EOF # tr : pour virer le CRLF qui traîne diff --git a/code/serveur/php/signup.php b/code/serveur/php/signup.php index f86dfba..287a956 100644 --- a/code/serveur/php/signup.php +++ b/code/serveur/php/signup.php @@ -79,7 +79,7 @@ if(isset($_POST['signuppswd2'])){ if(count($msg) == 0 && $newpage == false) { - $ok = ($db->query("INSERT INTO user(mail, login, hash_passwd, score, group) VALUES ('" . SQLite3::escapeString($signupemail) + $ok = ($db->query("INSERT INTO user(mail, login, hash_passwd, score, ugroup) VALUES ('" . SQLite3::escapeString($signupemail) . "', '" . SQLite3::escapeString($signupid) . "', '" . SQLite3::escapeString(md5($signuppswd1)) . "', 0, 1);")); From abc2c5fd7703aa0e66a36cf71205ae0f660c9c69 Mon Sep 17 00:00:00 2001 From: Yoann Bonavero Date: Wed, 9 Mar 2011 07:17:07 +0100 Subject: [PATCH 5/8] Suppression du la page de lecture de mail. Inutile ! --- code/serveur/php/readmail.php | 41 ----------------------------------- 1 file changed, 41 deletions(-) delete mode 100644 code/serveur/php/readmail.php diff --git a/code/serveur/php/readmail.php b/code/serveur/php/readmail.php deleted file mode 100644 index 9f6096c..0000000 --- a/code/serveur/php/readmail.php +++ /dev/null @@ -1,41 +0,0 @@ -'; - echo '
'; - echo '
'; - echo ''; -} -else { // Affichage des messages. - header("Content-Type: text/plain"); - header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); - - affiche_messages(); -} - -?> From 22879841b0424c6f232043fdfc388179190abbf3 Mon Sep 17 00:00:00 2001 From: Yoann Bonavero Date: Wed, 9 Mar 2011 07:44:56 +0100 Subject: [PATCH 6/8] =?UTF-8?q?Continuation=20de=20la=20page=20de=20cr?= =?UTF-8?q?=C3=A9ation=20de=20partie.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/serveur/php/createGame.php | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/code/serveur/php/createGame.php b/code/serveur/php/createGame.php index 48984cc..359c50f 100644 --- a/code/serveur/php/createGame.php +++ b/code/serveur/php/createGame.php @@ -65,28 +65,32 @@ if($err == false) echo ''; echo ''; } - else { + elseif($state == 1) { echo ''; echo ''; echo ''; - echo ''; + echo ''; for($i = 0; $i < $nbwords; $i++) { - if($i % 2 == 0) { - echo ''; - echo ''; - } - else { - echo ''; - echo ''; - } + if($i % 2 == 0) + echo ''; + + echo ''; + echo ''; } if($nbwords % 2 != 0) echo ''; echo ''; - } + } + else { + + } ?>






From f7b50013ffdf9af0bca445fe7ffe4cf865ad4f9d Mon Sep 17 00:00:00 2001 From: Yoann Bonavero Date: Wed, 9 Mar 2011 11:14:56 +0100 Subject: [PATCH 7/8] =?UTF-8?q?Continuation=20de=20la=20page=20de=20cr?= =?UTF-8?q?=C3=A9ation=20de=20partie.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/serveur/php/createGame.php | 13 +++++++++++++ code/serveur/php/pticlic.php | 15 +++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/code/serveur/php/createGame.php b/code/serveur/php/createGame.php index 359c50f..c8feb74 100644 --- a/code/serveur/php/createGame.php +++ b/code/serveur/php/createGame.php @@ -1,5 +1,6 @@ '; + echo ''; + echo ''; + echo ''; + echo ''; echo ''; echo '

'; echo 'fetchArray()) + $relations[] = $r; + + return $relations; +} ?> From bbca51e069672e366e7990b01187ed453229b411 Mon Sep 17 00:00:00 2001 From: Yoann Bonavero Date: Wed, 9 Mar 2011 11:27:12 +0100 Subject: [PATCH 8/8] =?UTF-8?q?Compl=C3=A9ment=20dans=20la=20fonction=20fo?= =?UTF-8?q?nction=20de=20s=C3=A9lection=20de=20relations=20pour=20une=20pa?= =?UTF-8?q?rtie=20dans=20pticlic.php.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/serveur/php/pticlic.php | 1 + 1 file changed, 1 insertion(+) diff --git a/code/serveur/php/pticlic.php b/code/serveur/php/pticlic.php index f8b9b32..f8aa716 100644 --- a/code/serveur/php/pticlic.php +++ b/code/serveur/php/pticlic.php @@ -554,6 +554,7 @@ function get_game_relations() $reqlations = array(); $db = getDB(); + // TODO modifier la requête pour ne sélectionner que les relations pertinentes. $res = $db->query("SELECT num,name FROM type_relation"); while($r = $res->fetchArray())