Commit 82f0b12e authored by Mathieu Loiseau's avatar Mathieu Loiseau
Browse files

Druide+Score

parent 3d98a53d
......@@ -161,7 +161,7 @@ CREATE TABLE `stats` (
`nbJeux_oracle` smallint(5) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Nombre de parties',
`nbAbandons_oracle` smallint(5) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Nombre d''abandons',
`nbEnregistrements_oracle` smallint(5) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Nombre d''enregistrements envoyés',
`nbErreurs_oracle` smallint(5) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Nombre d''enregistrements erronés ou techniquements ratés',
`nbErreurs_oracle` smallint(5) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Nombre d''enregistrements erronés ou techniquement ratés',
`nbLectures_oracle` smallint(5) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Nombre de devins qui ont lu un enregistrement de l''utilisateur',
`nbSucces_oracle` smallint(5) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Nombre de succès des devins',
`score_oracle` mediumint(8) NOT NULL DEFAULT '0' COMMENT 'Score résultant (prends aussi en compte les niveaux, ne peut être calculé directement à partir des infos de la table)',
......
<?php
require_once("./models/item.factory.class.php");
require_once("./models/card.class.php");
require_once("./models/card.class.php");
require_once('./sys/db.class.php');
require_once("./controllers/traces.handler.class.php");
class druid_arbitrage
{
......@@ -94,7 +97,8 @@ class druid_arbitrage
//construction de l'adresse de l'enregistrement à partir du nom du fichier
$this->adresse = "enregistrements/".$this->raisin->cheminEnregistrement ;
$this->enregistrement = $this->raisin->enregistrementID;
// récupération du pseudo du joueur arbitré
// récupération du pseudo du joueur arbitré
$db = db::getInstance();
$sql = 'SELECT username FROM user WHERE userid ="'.$this->raisin->idOracle.'"';
$this->result=$db->query($sql);
$this->res2= mysqli_fetch_assoc($this->result);
......@@ -124,73 +128,18 @@ class druid_arbitrage
private function display_et_scores(){
require_once('./sys/load_iso.php');
$lang_iso = new IsoLang();
if( ($this->invalidate!==true)
&& ($this->invalidate!==false){
if( ($this->invalidate()!==true)
&& ($this->invalidate()!==false) ){
include('./views/druid.arbitrage.html');
}
else{
$th = new TracesHandler();
//could change $this->invalidate to validate…
$th->druid_validate($this->enregistrement, !$this->invalidate, $this->revoke);
$th->druid_validate($this->enregistrement, !$this->invalidate(), $this->revoke);
//for dynamic notification don't want to take the time to understand them…
$_SESSION["notif"]["notification_done"]["Druide"] = 'pointsDruide';
header('Location: index.php?page.home.html');
}
require_once('./controllers/update_score_coeff.php');
if(isset($this->enregistrement) && ($this->enregistrement!="") ){
$sh = new ScoreHandler($this->druid, ScoreHandler::DRUID,(int) $this->enregistrement);
}
// après avoir cliqué sur "au bûcher" = description vide ou fautive
if($this->invalidate() === true){
// Requête d'insertion des info dans la table 'arbitrage'
$sql = '' ;
$db->query($sql);
// mettre à jour le champs "validation" de la table enregistrement pour que cet enregistrement devienne jouable
$sql = 'UPDATE enregistrement
SET validation = ' .$db->escape((string) $this->invalid ) . '
WHERE enregistrementID="'.$this->enregistrement .'" ' ;
$db->query($sql);
//Requête de modification du score de l'Oracle dont la description est jetée en pâture aux flammes du bûcher purificateur
//Requête de modification du score du Druide après l'accomplissement de son fastidieux travail d'inquisition
$sh->update_scores(false);
// après avoir cliqué sur "valider" = description correcte et jouable
}elseif ($this->invalidate() === false){
// insertion des informations dans la table arbitrage
$sql = 'INSERT INTO arbitrage
(enregistrementID,idDruide,validation)
VALUES(' .
$db->escape((string) $this->enregistrement ) . ', ' .
$db->escape((string) $this->druid) . ', ' .
$db->escape((string) $this->valid ) . ') ' ;
$db->query($sql);
// mettre à jour le champs "validation" de la table enregistrement pour que cet enregistrement devienne jouable
$sql = 'UPDATE enregistrement
SET validation = ' .$db->escape((string) $this->valid ) . '
WHERE enregistrementID="'.$this->enregistrement .'" ' ;
$db->query($sql);
// Requête de modification du score de l'Oracle dont la description est élevée au rang de prediction divine
//Requête de modification du score du Druide l'accomplissement de son fastidieux travail d'inquisition
$sh->update_scores(true);
}
else{
}
return true;
}
......
......@@ -26,31 +26,36 @@ class Notification
function readNotif(){
if($this->is_query_performer()){
//récupération des messages de notification;
$sql = 'SELECT * FROM `notif` WHERE `userid`="'.$this->user->id.'" ORDER BY `time` DESC';
$result=$this->db->query($sql);
// comptage du nombre de résultats
$nb_result=$result->num_rows;
$sql = 'SELECT * FROM `notif` WHERE `userid`='.$this->user->id.' ORDER BY `time` DESC';
if($result=$this->db->query($sql)){
// comptage du nombre de résultats
$nb_result=$result->num_rows;
//pour chaque enregistrement:
if ($nb_result > 0){
while($res = mysqli_fetch_assoc($result)){
if($res['emetteur'] != 0){
$sql = "SELECT `photo` FROM `user` WHERE `userid`=".$res['emetteur'];
$resultat=$this->db->query($sql);
$res2 = mysqli_fetch_assoc($resultat);
$emetteur = $res2["photo"];
}
else{
$emetteur = $res["game"];
//pour chaque enregistrement:
if ($nb_result > 0){
while($res = mysqli_fetch_assoc($result)){
if($res['emetteur'] != 0){
$sql = "SELECT `photo` FROM `user` WHERE `userid`=".$res['emetteur'];
$resultat=$this->db->query($sql);
$res2 = mysqli_fetch_assoc($resultat);
$emetteur = $res2["photo"];
}
else{
$emetteur = $res["game"];
}
$this->messNotif[$res['id']][$res['state']][$emetteur][$res["time"]] = $res['message'];
}
$this->messNotif[$res['id']][$res['state']][$emetteur][$res["time"]] = $res['message'];
}
}
}
}
function addNotif($userid,$notification,$emetteur,$type="NULL"){
$sql = "INSERT INTO `notif`(`userid`, `type`, `message`, `emetteur`) VALUES ($userid,$type,".$this->db->escape($notification).",'$emetteur');";
function addNotif($userid,$notification,$emetteur,$type="NULL",$escapeChars=true){
$text = $notification;
if($escapeChars){
$text = $this->db->escape($text);
}
$sql = "INSERT INTO `notif`(`userid`, `type`, `message`, `emetteur`) VALUES ($userid,$type,$text,$emetteur);";
if($this->is_query_performer()){
$result=$this->db->query($sql);
}
......@@ -60,9 +65,13 @@ class Notification
return $result;
}
function addNotifGAME($userid,$notification,$role,$type="NULL"){
function addNotifGAME($userid,$notification,$role,$type="NULL",$escapeChars=true){
$text = $notification;
if($escapeChars){
$text = $this->db->escape($text);
}
//add an image to your notification…
$sql = "INSERT INTO `notif` (`userid`, `type`, `message`, `emetteur` ,`game`) VALUES ($userid,$type,".$this->db->escape($notification).",0,'".$role."');";
$sql = "INSERT INTO `notif` (`userid`, `type`, `message`, `emetteur` ,`game`) VALUES ($userid,$type,$text,0,'".$role."');";
if($this->is_query_performer()){
$result=$this->db->query($sql);
}
......@@ -99,7 +108,7 @@ class Notification
}
function cancelLastNotifOfType($user_id,$type){
$sql= "DELETE FROM `notif` WHERE `notif`.`userid`='$user_id' AND `notif`.`type` = '$type' ORDER BY `notif`.`time` DESC LIMIT 1;";
$sql= "DELETE FROM `notif` WHERE `notif`.`userid`=$user_id AND `notif`.`type` = '$type' ORDER BY `notif`.`time` DESC LIMIT 1;";
if($this->is_query_performer()){
$result=$this->db->query($sql);
}
......
......@@ -133,42 +133,72 @@ class TracesHandler{
public function druid_validate($recordingID, $validate=true, $revoke=false){
$queries = array();
//insert new arbitrage
array_push($queries, "INSERT INTO `arbitrage` (`enregistrementID`, `idDruide` , `validation`)
VALUES('$recordingID', '".$this->user->id."', '".$this->sv->get_druid_string($validate)."');");
array_push($queries, "INSERT INTO `arbitrage` (`enregistrementID`, `idDruide` , `validation`) VALUES(
'$recordingID',
'".$this->user->id."',
'".$this->sv->get_druid_string($validate)."');");
if($revoke){
array_push($queries, "SET @arbitrage_id = LAST_INSERT_ID();");
}
//update recording
//previous score and variables
array_push($queries, "SELECT @previous_recording_score := ".$this->sv->get_recording_score_sql_formula().", @language:=`OracleLang`, @oracle_id:= `idOracle` FROM `enregistrement` WHERE `enregistrementID`='$recordingID';");
array_push($queries, "SELECT @previous_recording_score := ".$this->sv->get_recording_score_sql_formula().", @lang:=`OracleLang`, @oracle_id:= `idOracle` FROM `enregistrement` WHERE `enregistrementID`='$recordingID';");
//new recording validation
array_push($queries, "UPDATE `enregistrement` SET `validation` = '".
$this->sv->get_druid_string($validate)."' WHERE `enregistrementID`='$recordingID';");
//update oracle score
if($validate){
$nb_err = "";
if($revoke){
//update oracle score
//the score itself
array_push($queries, "SELECT @recording_score_diff := ".$this->sv->get_recording_score_sql_formula()."-(@previous_recording_score) FROM `enregistrement` WHERE `enregistrementID`='$recordingID';");
$nb_err = "";
if($revoke){
if($validate){
$nb_err = ", `nbErreurs_oracle` = `nbErreurs_oracle` - 1";
}
array_push($queries, "UPDATE `stats` SET `score_oracle`=`score_oracle`+(SELECT ".$this->sv->get_recording_score_sql_formula()." FROM `enregistrement` WHERE `enregistrementID`='$recordingID')-(@previous_recording_score)$nb_err");
}
else{
$nb_err = "";
if($revoke){
else{
$nb_err = ", `nbErreurs_oracle` = `nbErreurs_oracle` + 1";
}
array_push($queries, "UPDATE `stats` SET `score_oracle`=`score_oracle`+(SELECT ".$this->sv->get_recording_score_sql_formula()." FROM `enregistrement` WHERE `enregistrementID`='$recordingID')-(@previous_recording_score)$nb_err");
}
elseif (!$validate) {
$nb_err = ", `nbErreurs_oracle` = `nbErreurs_oracle` + 1";
}
array_push($queries, "UPDATE `stats` SET `score_oracle`=`score_oracle`+@recording_score_diff$nb_err WHERE `userid`=@oracle_id AND `langue`=@lang;");
//update druid score
array_push($queries, "UPDATE `stats` SET `nbArbitrages_druide` = `nbArbitrages_druide`+1, `score_druide` = `score_druide`+".$this->sv->get_druid_verification_score()." WHERE `stats`.`userid` = '".$this->user->id."' AND `stats`.`langue` = @language;");
array_push($queries, "UPDATE `stats` SET `nbArbitrages_druide` = `nbArbitrages_druide`+1, `score_druide` = `score_druide`+".$this->sv->get_druid_verification_score()." WHERE `stats`.`userid` = '".$this->user->id."' AND `stats`.`langue` = @lang;");
//update former druids score
if($revoke){
array_push($queries, "UPDATE `stats` SET `nbErrArbitrage_druide` = `nbErrArbitrage_druide`+1, `score_druide` = IF()`score_druide`-".$this->sv->get_druid_verification_error_score()." WHERE `stats`.`userid` IN (SELECT `idDruide` FROM `arbitrage` WHERE `enregistrementID`='$recordingID' AND `arbitrageID` < @arbitrage_id AND 'validation'!='".
array_push($queries, "UPDATE `stats` SET `nbErrArbitrage_druide` = `nbErrArbitrage_druide`+1, `score_druide` = IF(`score_druide`-".$this->sv->get_druid_verification_error_score()." WHERE `stats`.`langue` = @lang AND `stats`.`userid` IN (SELECT `idDruide` FROM `arbitrage` WHERE `enregistrementID`='$recordingID' AND `arbitrageID` < @arbitrage_id AND 'validation'!='".
$this->sv->get_druid_string($validate).");");
array_push($queries, "UPDATE `stats` SET `nbErrArbitrage_druide` = `nbErrArbitrage_druide`+1, `score_druide` = IF()`score_druide`+".$this->sv->get_druid_verification_error_score()." WHERE `stats`.`userid` IN (SELECT `idDruide` FROM `arbitrage` WHERE `enregistrementID`='$recordingID' AND `arbitrageID` < @arbitrage_id AND 'validation'='".
array_push($queries, "UPDATE `stats` SET `nbErrArbitrage_druide` = `nbErrArbitrage_druide`+1, `score_druide` = IF(`score_druide`+".$this->sv->get_druid_verification_error_score()." WHERE `stats`.`langue` = @lang AND `stats`.`userid` IN (SELECT `idDruide` FROM `arbitrage` WHERE `enregistrementID`='$recordingID' AND `arbitrageID` < @arbitrage_id AND 'validation'='".
$this->sv->get_druid_string($validate)."');");
}
//the notifications
array_push($queries, $this->notif->addNotif(
"@oracle_id",
"CONCAT('".$this->user->username.$this->messages['Oracle_verif'][$validate]."',
' (', @recording_score_diff,' pts)')",
$this->user->id,
$this->messages['notif']['Oracle_verif'][$validate],
false
));
array_push($queries, $this->notif->addNotif(
$this->user->id,
"'".$this->messages['Rec_verified']."'",
"@oracle_id",
$this->messages['notif']['Rec_verified'],
false
));
//TODO, il faudrait des notifications de réhabilitation / révocation, mais je vais pas m'en sortir si je les fais maintenant…
/**/require_once("debug.php");
/**/myLog("<h2>Druid action</h2><pre>".print_r($queries, true)."</pre>");
if(!$this->db->transaction($queries)){
$res = false;
throw new Exception("“".print_r($queries,true)."” could not be performed.\n".$this->db->get_error());
}
else{
$res = true;
}
return $res;
}
}?>
......@@ -211,7 +211,7 @@ $lang['Devin_easy'] = "Twice the duration of the recording, for a 10 points stak
$lang['Devin_medium'] = "1.5 times the duration of the recording, for a 20 points stake.";
$lang['Devin_hard'] = "Recording duration + 8″, for a 30 points stake.";
$lang['Card_created'] = "Thank you for creating a card: ";
$lang['Rec_verified'] = "Thank you for verifying the recording of ";
$lang['Rec_verified'] = "Thank you for verifying this recording.";
$lang['Oracle_verif'][true] = " verified your recording and thinks you didn't use forbidden words";
$lang['Oracle_verif'][false] = " verified your recording and thinks you used forbidden words";
$lang['Oracle_started'] = "Oracle game started, if you give up the recording you'll lose ";
......
......@@ -205,9 +205,9 @@ $lang['Devin_easy'] = "2 fois la durée de l'enregistrement pour une mise de 10
$lang['Devin_medium'] = "1,5 fois la durée de l'enregistrement pour une mise de 20 points.";
$lang['Devin_hard'] = 'Enregistrement + 8″ pour une mise de 30 points.';
$lang['Card_created'] = "Merci d'avoir créé une carte&nbsp;: ";
$lang['Rec_verified'] = "Merci d'avoir vérifié l'enregistrement de ";
$lang['Oracle_verif'][true] = " a vérifié votre enregistrement et pense que vous n'avez pas utilisé de mot interdit";
$lang['Oracle_verif'][false] = " a vérifié votre enregistrement et pense que vous n'avez pas utilisé de mot interdit";
$lang['Rec_verified'] = "Merci d\'avoir vérifié cet enregistrement.";
$lang['Oracle_verif'][true] = " a vérifié votre enregistrement et pense que vous n\'avez pas utilisé de mot interdit";
$lang['Oracle_verif'][false] = " a vérifié votre enregistrement et pense que vous avez utilisé des mots interdits";
$lang['Oracle_started'] = "Partie “Oracle” commencée, sans dépôt du fichier, vous perdrez ";
$lang['Oracle_posted'] = "Vous avez osé valider votre description, courageux…";
$lang['Oracle_abort'] = "Enregistrement supprimé. Petite pénalité, mais moins lourde qu'en envoyant un enregistrement avec mots interdits…";
......
......@@ -15,6 +15,7 @@ if(isset($lang)){
$lang['notif']['Oracle_started'] = 13;
$lang['notif']['Oracle_posted'] = 14;
$lang['notif']['Oracle_abort'] = 15;
$lang['notif']['Rec_verified'] = 16;
//images
$lang['img_augur'] = "./profil/diviner.jpg";
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment