UPDATE `parties` SET `reussie`=".$db->escape((string)$this->reussie).", `enregistrementID` = (SELECT @id_enr := `enregistrementID`) WHERE idDevin='".$this->devin."' ORDER BY tpsDevin DESC LIMIT 1;
// récupération d'enregistrementID pour récupérer l'id de l'Oracle et l'id de la carte
//connexion à la BD
$db=db::getInstance();
//Récupération de enregistrementID
$sql='SELECT `enregistrementID` FROM `parties` WHERE `idDevin`="'.$this->diviner.'" ORDER BY `tpsDevin` DESC LIMIT 1 ';
$db->query($sql);
// récupération d'enregistrementID pour récupérer l'id de l'Oracle et l'id de la carte
//connexion à la BD
$db=db::getInstance();
//Récupération de enregistrementID
$sql="SELECT `enregistrementID`, `partieID` FROM `parties` WHERE `idDevin`='$this->diviner' AND `reussite`='en cours' ORDER BY `tpsDevin` DESC LIMIT 1 ";
$this->add_query("SELECT @previous_recording_score := ".$this->sv->get_recording_score_sql_formula().", @recording_id := `enregistrementID`, @lang := `OracleLang` FROM `enregistrement` WHERE `enregistrement`.`idOracle` = ".$this->user->id." AND `enregistrement`.`carteID`='$cardId';");
...
...
@@ -111,7 +110,7 @@ class TracesHandler{
}
publicfunctionabort_record($recording_path){
$this->reinit_queries();
$this->reset_queries();
//update recording
//prepare score
$this->add_query("SELECT @previous_recording_score := ".$this->sv->get_recording_score_sql_formula().", @recording_id := `enregistrementID`, @lang := `OracleLang` FROM `enregistrement` WHERE `enregistrement`.`cheminEnregistrement` = '$recording_path';");
...
...
@@ -139,8 +138,27 @@ class TracesHandler{
return$res;
}
publicfunctiondruid_create_card($lang){
$this->reset_queries();
$this->add_query("UPDATE `stats` SET `nbCartes_druide`=`nbCartes_druide`+1, `score_druide`=`score_druide`+".$this->sv->get_druid_create_card_score()." WHERE `userid`='".$this->user->id."' AND `langue`='$lang';");
$this->add_query("INSERT INTO `arbitrage` (`enregistrementID`, `idDruide` , `validation`) VALUES(
'$recordingID',
...
...
@@ -177,9 +195,9 @@ class TracesHandler{
$this->add_query("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){
$this->add_query("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).");");
$this->add_query("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->add_query("UPDATE `stats` SET `nbErrArbitrage_druide` = `nbErrArbitrage_druide`+1, `score_druide` = `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)."');");
$this->add_query("UPDATE `stats` SET `nbErrArbitrage_druide` = `nbErrArbitrage_druide`+1, `score_druide` = `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
...
...
@@ -199,7 +217,7 @@ class TracesHandler{
false
));
//TODO, il faudrait des notifications de réhabilitation / révocation, mais de toute façon il y a pas vraiment la fonctionnalité…
$this->add_query("UPDATE `stats` SET `nbEnregistrements_devin` = `nbEnregistrements_devin`+1, `sommeMises_devin`=`sommeMises_devin`+$stake WHERE `userid`='".$this->user->id."';");
$this->add_query("UPDATE `stats` SET `score_devin`='".$this->sv->get_augur_score_formula()."' WHERE `userid`='".$this->user->id."';");
//two queries (update score needs up to date stats)
$this->add_query("UPDATE `stats` SET `nbEnregistrements_devin` = `nbEnregistrements_devin`+1 WHERE `langue`='$rec_lang' AND `userid`='".$this->user->id."';");
$this->add_query("UPDATE `stats` SET `score_devin`='".$this->sv->get_augur_score_formula()."' WHERE `langue`='$rec_lang' AND `userid`='".$this->user->id."';");
//augur, just needs to update game (partie) stats are already up to date (see start_play)
if(!$duration){
$duration="NULL";
}
else{
$duration="'$duration'";
}
$this->add_query("UPDATE `parties` SET `duree_Partie`=$duration, `reussite`='non' WHERE `partieID`='$game_id' AND `reussite`='en cours';");
//update Oracle
//former score
$this->add_query("SELECT @previous_recording_score := ".$this->sv->get_recording_score_sql_formula().", @lang:=`OracleLang`, @oracle_id:= `idOracle` FROM `enregistrement` WHERE `enregistrementID`='$recording_id';");
//recording
$this->add_query("UPDATE `enregistrement` SET `nbTentatives`=`nbTentatives`+1 WHERE `enregistrementID`='$recording_id';");
//score diff
$this->add_query("SELECT @recording_score_diff := ".$this->sv->get_recording_score_sql_formula()."-(@previous_recording_score) FROM `enregistrement` WHERE `enregistrementID`='$recording_id';");
//update score
$this->add_query("UPDATE `stats` SET `nbLectures_oracle`=`nbLectures_oracle`+1, `score_oracle`=`score_oracle`+@recording_score_diff WHERE `userid`=@oracle_id AND `langue`=@lang;");
thrownewException("“".print_r($this->queries,true)."” could not be performed.\n".$this->db->get_error());
}
else{
$res=true;
}
return$res;
}
//augur (and oracle) win
publicfunctionaugur_win(){
//update partie + durée réussite oui
publicfunctionaugur_win($recording_id,$duration){
//stats devin : +1 nbMotsTrouves_devin + mise / update score
//enr +1 tentative + 1 succès
//oracle +1 lecture +1 succès → update score.
$this->reset_queries();
//begin update Augur
//update partie : durée / réussite → oui
$this->add_query("UPDATE `parties` SET `duree_Partie`=$duration, `reussite`='oui' WHERE `enregistrementID`='$recording_id' AND `reussite`='en cours' AND `mise`=(@mise := `mise`) AND `idDevin`=".$this->user->id.";");
//update Oracle
//former score
$this->add_query("SELECT @previous_recording_score := ".$this->sv->get_recording_score_sql_formula().", @lang:=`OracleLang`, @oracle_id:= `idOracle` FROM `enregistrement` WHERE `enregistrementID`='$recording_id';");
//recording
$this->add_query("UPDATE `enregistrement` SET `nbTentatives`=`nbTentatives`+1, `nbSucces`=`nbSucces`+1 WHERE `enregistrementID`='$recording_id';");
//score diff
$this->add_query("SELECT @recording_score_diff := ".$this->sv->get_recording_score_sql_formula()."-(@previous_recording_score) FROM `enregistrement` WHERE `enregistrementID`='$recording_id';");
//update score
$this->add_query("UPDATE `stats` SET `nbLectures_oracle` = `nbLectures_oracle` + 1 , `nbSucces_oracle` = `nbSucces_oracle` + 1 , `score_oracle` = `score_oracle` + @recording_score_diff WHERE `userid`=@oracle_id AND `langue`=@lang;");
//end update Augur
//update stats :
$this->add_query("UPDATE `stats` SET `nbMotsTrouves_devin`=`nbMotsTrouves_devin`+1, `sommeMises_devin`=`sommeMises_devin`+@mise WHERE `userid`=".$this->user->id." AND `langue`=@lang;");
/*Except for the druid card creation, the score handler basically requires two users and a recording, to be able to process the scores, the constructor allows to set the appropriate variables*/
//if $user1 is true we are considering the logged in user
//otherwise we expect a user id.
//For druid card creation we only need the language concerned (otherwise we get it through the recording)
$sql="UPDATE `score` SET `$role` = `$role` + ($diff), `scoreGlobal`=`scoreGlobal`+ ($diff) WHERE `score`.`userid` = '$user_id' AND `langue`='".$this->lang_iso->french_for($lang_code)."'";
$this->db->query($sql);
if($this->db->affected_rows()!=1){
thrownewException("store score in db : mais que se passe-t-il ? ($sql)");
}
}
//The context allows to pick the appropriate score computation, we only need to know if it was a success (=the druid found the recording appropriate or the augur found the word.)