Merge branch 'master' of https://github.com/jsmaniac/2011-m1s2-ter
This commit is contained in:
commit
c8c9e627fc
|
@ -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 <<EOF
|
||||
begin transaction;
|
||||
|
@ -25,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);
|
||||
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);
|
||||
|
@ -33,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) 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);
|
||||
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
|
||||
|
@ -44,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);#' \
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
<?php
|
||||
require_once("ressources/strings.inc");
|
||||
require_once("pticlic.php");
|
||||
session_start();
|
||||
|
||||
$state = 0;
|
||||
|
@ -17,6 +18,8 @@ if(isset($_POST['nbcloudwords'])) {
|
|||
$state = 1;
|
||||
|
||||
if($state == 1) {
|
||||
$relations = get_game_relations();
|
||||
|
||||
for($i = 0; $i < $nbwords; $i++)
|
||||
if(!isset($_POST['word'.$i]) || empty($_POST['word'.$i])) {
|
||||
$err = true;
|
||||
|
@ -65,27 +68,41 @@ if($err == false)
|
|||
echo '<td><input type="text" name="nbcloudwords" /></td></tr>';
|
||||
echo '<tr><td></td><td><input type="submit" value="suivant" /></td></tr>';
|
||||
}
|
||||
else {
|
||||
elseif($state == 1) {
|
||||
echo '<table class="wordsform">';
|
||||
echo '<tr><td><label for="relation1">Relation 1 : </label></td>';
|
||||
echo '<td class="inputcell"><select name="relation1">';
|
||||
foreach($relations as $r)
|
||||
echo '<option value="'.$r[0].'">'.$r[1].'</option>';
|
||||
echo '</select></td>';
|
||||
echo '<td><label for="relation2">Relation 2 : </label></td>';
|
||||
echo '<td class="inputcell"><select name="relation2">';
|
||||
foreach($relations as $r)
|
||||
echo '<option value="'.$r[0].'">'.$r[1].'</option>';
|
||||
echo '</select></td>';
|
||||
echo '<input type="hidden" name="nbcloudwords" value="'.$nbwords.'" />';
|
||||
echo '<tr><td colspan="2"><label for="centralword">Mot central : </label><br /><br /></td>';
|
||||
echo '<td colspan="2" class="inputcell"><input type="text" name="centralword" /><br /><br /></td>';
|
||||
echo '<td colspan="2" class="inputcell"><input type="text" name="centralword" value="';
|
||||
if(isset($_POST['centralword'])) echo $_POST['centralword'];
|
||||
echo '"/><br /><br /></td>';
|
||||
|
||||
for($i = 0; $i < $nbwords; $i++) {
|
||||
if($i % 2 == 0) {
|
||||
echo '</tr><tr><td><label for="word'.$i.'">Mot '.($i+1).' : </label></td>';
|
||||
echo '<td class="inputcell"><input type="text" name="word'.$i.'" /></td>';
|
||||
}
|
||||
else {
|
||||
echo '<td><label for="word'.$i.'">Mot '.($i+1).' : </label></td>';
|
||||
echo '<td class="inputcell"><input type="text" name="word'.$i.'" /></td>';
|
||||
}
|
||||
if($i % 2 == 0)
|
||||
echo '</tr><tr>';
|
||||
|
||||
echo '<td><label for="word'.$i.'">Mot '.($i+1).' : </label></td>';
|
||||
echo '<td class="inputcell"><input type="text" name="word'.$i.'" value="';
|
||||
if(isset($_POST['word'.$i])) echo $_POST['word'.$i];
|
||||
echo '" /></td>';
|
||||
}
|
||||
|
||||
if($nbwords % 2 != 0)
|
||||
echo '<td></td>';
|
||||
|
||||
echo '</tr><tr><td colspan="2"></td><td colspan="2" class="td2"><input type="submit" value="Enregistrer la partie" /></td></tr>';
|
||||
}
|
||||
else {
|
||||
|
||||
}
|
||||
?>
|
||||
</table>
|
||||
|
|
|
@ -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,20 @@ function setGame($user, $pgid, $gid, $answers)
|
|||
return $scores;
|
||||
}
|
||||
|
||||
/** Fourni l'ensembles des relations pouvant apparaître dans le jeu.
|
||||
* @return array : un tableau de realtions.
|
||||
*/
|
||||
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())
|
||||
$relations[] = $r;
|
||||
|
||||
return $relations;
|
||||
}
|
||||
?>
|
|
@ -1,41 +0,0 @@
|
|||
<?php
|
||||
/* Cette page permet d'afficher les messages postés depuis le formulaire du site.
|
||||
* Pour le moment l'identification se fait par le login : admin et le mot de passe : admin.
|
||||
*/
|
||||
|
||||
// TODO Voir si on rajoute dans la base de donnée un champ permettant de distinguer un type d'utilisateurs particulier qui pourrait accéder au différentes pages de "gestion" comme celle-ci. Ou si on reste sur une compte unique d'administration.
|
||||
|
||||
session_start();
|
||||
|
||||
if(isset($_POST['login']))
|
||||
$login = $_POST['login'];
|
||||
if(isset($_POST['passwd']))
|
||||
$pass = $_POST['passwd'];
|
||||
|
||||
if(isset($_GET['d']))
|
||||
session_destroy();
|
||||
|
||||
if(isset($login) && isset($pass) && $login == "admin" && $pass == "admin")
|
||||
$_SESSION['adminAuth'] = true;
|
||||
|
||||
function affiche_messages() {
|
||||
$fileName = "mails.txt";
|
||||
|
||||
// Lecture et affichage du la totalité du fichier.
|
||||
readfile($fileName);
|
||||
}
|
||||
|
||||
if(!isset($_SESSION['adminAuth']) || $_SESSION['adminAuth'] != true) { // Affichage du formulaire d'authentification.
|
||||
echo '<form action="readmail.php" method="POST">';
|
||||
echo '<label for="login">login : </label><input type="text" name="login" /><br />';
|
||||
echo '<label for="passwd">mdp : </label><input type="password" name="passwd" /><br />';
|
||||
echo '<input type="submit" value="Suivant" />';
|
||||
}
|
||||
else { // Affichage des messages.
|
||||
header("Content-Type: text/plain");
|
||||
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
|
||||
|
||||
affiche_messages();
|
||||
}
|
||||
|
||||
?>
|
|
@ -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, ugroup) VALUES ('" . SQLite3::escapeString($signupemail)
|
||||
. "', '" . SQLite3::escapeString($signupid)
|
||||
. "', '" . SQLite3::escapeString(md5($signuppswd1))
|
||||
. "', 0);"));
|
||||
. "', 0, 1);"));
|
||||
|
||||
if($ok == true) {
|
||||
$_SESSION['userId'] = $signupid;
|
||||
|
|
Loading…
Reference in New Issue
Block a user