V0 : initial import
This commit is contained in:
591
ProserveAPI/htdocs/proserve/objects/db_participates.php
Normal file
591
ProserveAPI/htdocs/proserve/objects/db_participates.php
Normal file
@@ -0,0 +1,591 @@
|
||||
<?php
|
||||
include_once "../objects/db_table_object.php";
|
||||
include_once "../objects/db_participates_results.php";
|
||||
include_once '../score/score_algo1.php'; // for score calculation
|
||||
|
||||
class UserInGameSession extends DBTableObject
|
||||
{
|
||||
// database connection and table name
|
||||
//private $conn;
|
||||
protected $table_name = PARTICIPATES_TABLE_NAME;
|
||||
protected $array_key = "participation";
|
||||
|
||||
// object properties
|
||||
public int $userId = -1;
|
||||
public int $sessionId = 0;
|
||||
public float $score = 0;
|
||||
public float $firePrecision = 0.0;
|
||||
public float $reactionTime = 0.0;
|
||||
public int $nbEnemyHit = 0;
|
||||
public int $nbCivilsHit = 0;
|
||||
public int $damageTaken = 0;
|
||||
public $endStatus = 0;
|
||||
public $avatar = "";
|
||||
public $weapon = "";
|
||||
public int $role = 0;
|
||||
public $results = "";
|
||||
//public $replayFileName = "";
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
public function toArray () : array
|
||||
{
|
||||
return array (
|
||||
"userId" => (int)$this->userId,
|
||||
"sessionId" => (int)$this->sessionId,
|
||||
"score" => (float)$this->score ?? 0.0,
|
||||
"firePrecision" => (float)$this->firePrecision ?? 0.0,
|
||||
"reactionTime" => (float)$this->reactionTime ?? 0.0,
|
||||
"nbEnemyHit" => (int)$this->nbEnemyHit ?? 0,
|
||||
"nbCivilsHit" => (int)$this->nbCivilsHit ?? 0,
|
||||
"damageTaken" => (int)$this->damageTaken ?? 0,
|
||||
"endStatus" => (int)$this->endStatus ?? 0,
|
||||
"avatar" => $this->avatar ?? "",
|
||||
"weapon" => $this->weapon ?? "",
|
||||
"roleId" => $this->role,
|
||||
"resultsAsString" => $this->results
|
||||
);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
function readRow (array $row)
|
||||
{
|
||||
$this->userId = (int)$row['userId'];
|
||||
$this->sessionId = (int)$row['sessionId'];
|
||||
$this->score = (int)$row['score'];
|
||||
$this->firePrecision = (float)$row['firePrecision'];
|
||||
$this->reactionTime = (float)$row['reactionTime'];
|
||||
$this->nbEnemyHit = (int)$row['nbEnemyHit'];
|
||||
$this->nbCivilsHit = (int)$row['nbCivilsHit'];
|
||||
$this->damageTaken = (int)$row['damageTaken'];
|
||||
$this->endStatus = (int)$row['endStatus'];
|
||||
$this->avatar = $row['avatar'];
|
||||
$this->weapon = $row['weapon'];
|
||||
$this->role = $row['role'];
|
||||
$this->results = $row['results'];
|
||||
//$this->replayFileName = $row['replayFileName'];
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
function sanitize ()
|
||||
{
|
||||
$this->userId=htmlspecialchars(strip_tags($this->userId));
|
||||
$this->sessionId=htmlspecialchars(strip_tags($this->sessionId));
|
||||
$this->avatar=htmlspecialchars(strip_tags($this->avatar));
|
||||
$this->weapon=htmlspecialchars(strip_tags($this->weapon));
|
||||
$this->role=htmlspecialchars(strip_tags($this->role));
|
||||
$this->results=htmlspecialchars(strip_tags($this->results));
|
||||
//$this->nbCivilsHit=htmlspecialchars(strip_tags($this->nbCivilsHit));
|
||||
//$this->nbEnemyHit=htmlspecialchars(strip_tags($this->nbEnemyHit));
|
||||
//$this->score=htmlspecialchars(strip_tags($this->score));
|
||||
//$this->firePrecision=htmlspecialchars(strip_tags($this->firePrecision));
|
||||
//$this->damageTaken=htmlspecialchars(strip_tags($this->damageTaken));
|
||||
//$this->replayFileName=htmlspecialchars(strip_tags($this->replayFileName));
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
function load ()
|
||||
{
|
||||
// select all query with user inputed username and password
|
||||
$query = "SELECT * FROM " . $this->table_name . " WHERE userId='" . $this->userId . "' AND sessionId='" . $this->sessionId . "'";
|
||||
|
||||
// prepare query statement
|
||||
$stmt = $this->conn->prepare($query);
|
||||
|
||||
// execute query
|
||||
$stmt->execute();
|
||||
|
||||
if($stmt->rowCount() > 0)
|
||||
{
|
||||
// get retrieved row
|
||||
$row = $stmt->fetch(PDO::FETCH_ASSOC);
|
||||
// retrieve session values
|
||||
$this->readRow($row);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
function registerUser ()
|
||||
{
|
||||
//$this->sessionId = $session;
|
||||
//$this->userId = $user;
|
||||
//$this->avatar = $avatar;
|
||||
//$this->weapon = $weapon;
|
||||
|
||||
if ($this->alreadyRegistered())
|
||||
return false;
|
||||
|
||||
// query to insert record of new user signup
|
||||
$query = "INSERT INTO " . $this->table_name . " SET sessionId=:sessionId, userId=:userId, avatar=:avatar, weapon=:weapon, role=:role";
|
||||
|
||||
// prepare query
|
||||
$stmt = $this->conn->prepare($query);
|
||||
|
||||
// sanitize
|
||||
$this->sanitize();
|
||||
|
||||
// bind values
|
||||
$stmt->bindParam(":sessionId", $this->sessionId);
|
||||
$stmt->bindParam(":userId", $this->userId);
|
||||
$stmt->bindParam(":avatar", $this->avatar);
|
||||
$stmt->bindParam(":weapon", $this->weapon);
|
||||
$stmt->bindParam(":role", $this->role);
|
||||
//$stmt->bindParam(":nbCivilsHit", $this->nbCivilsHit);
|
||||
//$stmt->bindParam(":nbEnemyHit", $this->nbEnemyHit);
|
||||
//$stmt->bindParam(":score", $this->score);
|
||||
//$stmt->bindParam(":firePrecision", $this->firePrecision);
|
||||
//$stmt->bindParam(":damageTaken", $this->damageTaken);
|
||||
//$stmt->bindParam(":replayFileName", $this->replayFileName);
|
||||
|
||||
// execute query
|
||||
return $stmt->execute();
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
function alreadyRegistered ()
|
||||
{
|
||||
$query = "SELECT * FROM " . $this->table_name . " WHERE userId=:userId AND sessionId=:sessionId";
|
||||
|
||||
// prepare query statement
|
||||
$stmt = $this->conn->prepare($query);
|
||||
|
||||
// sanitize
|
||||
$this->userId=htmlspecialchars(strip_tags($this->userId));
|
||||
$this->sessionId=htmlspecialchars(strip_tags($this->sessionId));
|
||||
|
||||
// bind values
|
||||
$stmt->bindParam(":sessionId", $this->sessionId);
|
||||
$stmt->bindParam(":userId", $this->userId);
|
||||
|
||||
// execute query
|
||||
$stmt->execute();
|
||||
|
||||
return $stmt->rowCount() > 0;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
function updateUserScores ()
|
||||
{
|
||||
//$this->sessionId = $sessionId;
|
||||
//$this->userId = $userId;
|
||||
|
||||
// load current values
|
||||
$this->load();
|
||||
|
||||
$this->score = 0;
|
||||
|
||||
$query = "SELECT sessionType FROM Sessions WHERE id='" . $this->sessionId . "'";
|
||||
// prepare query
|
||||
$stmt = $this->conn->prepare($query);
|
||||
$stmt->execute();
|
||||
if($stmt->rowCount() > 0)
|
||||
{
|
||||
$row = $stmt->fetch(PDO::FETCH_ASSOC);
|
||||
if ($row['sessionType'] == 0) // FireRange
|
||||
{
|
||||
$query = "SELECT R.id, R.hitPrecision, R.objectHitLocationX, R.objectHitLocationY, R.distance, R.objectHitTagLocation " . "
|
||||
FROM " . REACTEVENTS_TABLE_NAME . " R, " . TRIGGEREVENTS_TABLE_NAME . " T " . "
|
||||
WHERE R.srcEventSessionId=T.sessionId AND R.srcEventIndex=T.indexCount AND T.srcUserId=:userId AND T.sessionId=:sessionId";
|
||||
|
||||
// prepare query
|
||||
$stmt = $this->conn->prepare($query);
|
||||
|
||||
// bind values
|
||||
$stmt->bindParam(":sessionId", $this->sessionId);
|
||||
$stmt->bindParam(":userId", $this->userId);
|
||||
//$stmt->bindParam(":score", $this->score);
|
||||
//$stmt->bindParam(":role", $role);
|
||||
|
||||
// execute query
|
||||
$stmt->execute();
|
||||
|
||||
$totalPrecision=0;
|
||||
while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
|
||||
$totalPrecision += $row['hitPrecision'];
|
||||
|
||||
$this->score = calculate_firerange_v1($totalPrecision);
|
||||
}
|
||||
else
|
||||
{
|
||||
$query = "SELECT R.id, R.hitPrecision, R.distance, R.reactType, P.nbCivilsHit " . "
|
||||
FROM " . REACTEVENTS_TABLE_NAME . " R, " . TRIGGEREVENTS_TABLE_NAME . " T, " . $this->table_name . " P " . "
|
||||
WHERE R.srcEventIndex=T.indexCount AND R.srcEventSessionId=T.sessionId AND P.sessionId=R.srcEventSessionId AND P.userId=T.srcUserId " . "
|
||||
AND R.srcEventSessionId=:sessionId AND T.srcUserId=:userId AND (R.reactType=0 OR R.reactType=4 OR R.reactType=5)";
|
||||
|
||||
// prepare query
|
||||
$stmt = $this->conn->prepare($query);
|
||||
|
||||
// bind values
|
||||
$stmt->bindParam(":sessionId", $this->sessionId);
|
||||
$stmt->bindParam(":userId", $this->userId);
|
||||
//$stmt->bindParam(":score", $this->score);
|
||||
//$stmt->bindParam(":role", $role);
|
||||
|
||||
// execute query
|
||||
$stmt->execute();
|
||||
if ($stmt->rowCount() > 0)
|
||||
{
|
||||
$totalPrecision=0;
|
||||
$nbCivilHits=0;
|
||||
while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
|
||||
{
|
||||
$nbCivilHits = $row['nbCivilsHit'];
|
||||
if ($row['reactType']==0) // todo : to keep ?
|
||||
$totalPrecision += $row['hitPrecision'];
|
||||
}
|
||||
|
||||
$this->score = calculate_v1($totalPrecision, $nbCivilHits);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$query = "UPDATE " . $this->table_name . " SET score=:score WHERE sessionId=:sessionId AND userId=:userId";
|
||||
|
||||
// prepare query
|
||||
$stmt = $this->conn->prepare($query);
|
||||
|
||||
// bind values
|
||||
$stmt->bindParam(":sessionId", $this->sessionId);
|
||||
$stmt->bindParam(":userId", $this->userId);
|
||||
$stmt->bindParam(":score", $this->score);
|
||||
|
||||
|
||||
|
||||
// update overall averages for participation user
|
||||
$query_Precision = "SELECT X.UserId AS UserId, SUM(X.NbShotsFired) AS nbFire, SUM(Y.HitPrecision) AS precisionTotal FROM " . "
|
||||
(SELECT P.userID AS UserId, P.sessionId AS SessionId, TE.indexCount AS IndexCount, COUNT(DISTINCT TE.sessionId, TE.indexCount) AS NbShotsFired
|
||||
FROM " . PARTICIPATES_TABLE_NAME . " P, " . TRIGGEREVENTS_TABLE_NAME . " TE " . "
|
||||
WHERE P.sessionId=TE.sessionId AND TE.srcUserId=P.UserId GROUP BY P.UserId, P.sessionId, TE.indexCount) AS X
|
||||
LEFT JOIN
|
||||
(SELECT P.userID AS UserId, P.sessionId AS SessionId, TE.indexCount AS IndexCount, MAX(RE.hitPrecision) AS HitPrecision
|
||||
FROM " . PARTICIPATES_TABLE_NAME . " P, " . TRIGGEREVENTS_TABLE_NAME . " TE, " . REACTEVENTS_TABLE_NAME . " RE
|
||||
WHERE P.sessionId=TE.sessionId AND P.sessionId=RE.srcEventSessionId AND TE.srcUserId=P.UserId AND RE.srcEventIndex=TE.indexCount GROUP BY P.UserId, P.sessionId, TE.indexCount) AS Y
|
||||
ON (X.UserId=Y.UserId AND X.SessionId=Y.SessionId AND X.IndexCount=Y.IndexCount) WHERE X.UserId=:userId
|
||||
GROUP BY UserId";
|
||||
|
||||
$query_ReactionTime = "SELECT P.userID AS UserId, SUM(CASE WHEN RE.reactTime>0 THEN 1 ELSE 0 END) AS nbHits, SUM(RE.reactTime) AS reactTimeTotal
|
||||
FROM " . PARTICIPATES_TABLE_NAME . " P, " . TRIGGEREVENTS_TABLE_NAME . " TE, " . REACTEVENTS_TABLE_NAME . " RE
|
||||
WHERE P.sessionId=TE.sessionId AND P.sessionId=RE.srcEventSessionId AND TE.srcUserId=P.UserId AND RE.srcEventIndex=TE.indexCount AND P.UserId=:userId GROUP BY P.UserId";
|
||||
|
||||
$stmt_Precision = $this->conn->prepare($query_Precision);
|
||||
$stmt_ReactionTime = $this->conn->prepare($query_ReactionTime);
|
||||
|
||||
$stmt_Precision->bindParam(":userId", $this->userId);
|
||||
$stmt_ReactionTime->bindParam(":userId", $this->userId);
|
||||
|
||||
$stmt_Precision->execute();
|
||||
$stmt_ReactionTime->execute();
|
||||
|
||||
$res_UpdatePrecision = true;
|
||||
$res_UpdateReactionTime = true;
|
||||
|
||||
if ($stmt_Precision->rowCount() > 0 && $this->userId > 0)
|
||||
{
|
||||
// get retrieved row
|
||||
$row = $stmt_Precision->fetch(PDO::FETCH_ASSOC);
|
||||
$shotFired = $row['nbFire'];
|
||||
|
||||
// retrieve average precision per shot
|
||||
$userPrecision = $row['precisionTotal']/($shotFired == 0 ? 1 : $shotFired);
|
||||
|
||||
$updatePrecision = "UPDATE " . USERS_TABLE_NAME . " SET avgPrecision=" . $userPrecision . " WHERE id=" . $this->userId;
|
||||
|
||||
$stmt_UpdatePrecision = $this->conn->prepare($updatePrecision);
|
||||
$res_UpdatePrecision = $stmt_UpdatePrecision->execute();
|
||||
}
|
||||
|
||||
if ($stmt_ReactionTime->rowCount() > 0 && $this->userId > 0)
|
||||
{
|
||||
// get retrieved row
|
||||
$row = $stmt_ReactionTime->fetch(PDO::FETCH_ASSOC);
|
||||
$shotHits = $row['nbHits'];
|
||||
|
||||
// retrieve average reactionTime per shot
|
||||
$userReactionTime = $row['reactTimeTotal']/($shotHits == 0 ? 1 : $shotHits);
|
||||
|
||||
$updateReactionTime = "UPDATE " . USERS_TABLE_NAME . " SET avgReaction=" . $userReactionTime . " WHERE id=" . $this->userId;
|
||||
$stmt_UpdateReactionTime = $this->conn->prepare($updateReactionTime);
|
||||
$res_UpdateReactionTime = $stmt_UpdateReactionTime->execute();
|
||||
}
|
||||
|
||||
return $stmt->execute() && $res_UpdatePrecision && $res_UpdateReactionTime;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
function updateObjectives ()
|
||||
{
|
||||
// load current values
|
||||
//$this->load();
|
||||
|
||||
// sanitize JSON string
|
||||
//$this->results=htmlspecialchars(strip_tags($this->results));
|
||||
|
||||
// update participation with objective results in database
|
||||
$query = "UPDATE " . $this->table_name . " SET results=:results WHERE sessionId=:sessionId AND userId=:userId";
|
||||
|
||||
// prepare query
|
||||
$stmt = $this->conn->prepare($query);
|
||||
|
||||
// bind values
|
||||
$stmt->bindParam(":sessionId", $this->sessionId);
|
||||
$stmt->bindParam(":userId", $this->userId);
|
||||
$stmt->bindParam(":results", $this->results);
|
||||
|
||||
return $stmt->execute();
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
function userLeaves ()
|
||||
{
|
||||
//$this->userId = $userId;
|
||||
//$this->sessionId = $sessionId;
|
||||
|
||||
// load current values
|
||||
$this->load();
|
||||
|
||||
// queries to update user stats
|
||||
$query_NbShotFired = "SELECT COUNT(DISTINCT TE.indexCount) AS nbFire FROM " . TRIGGEREVENTS_TABLE_NAME . " TE WHERE TE.sessionId=:sessionId AND TE.srcUserId=:userId";
|
||||
$query_NbEnemyHit = "SELECT COUNT(DISTINCT TE.indexCount, RE.hitTargetName) AS nbEnemyHits FROM " . TRIGGEREVENTS_TABLE_NAME . " TE, " . REACTEVENTS_TABLE_NAME . " RE WHERE TE.sessionId=:sessionId AND RE.srcEventSessionId=TE.sessionId AND RE.srcEventIndex=TE.indexCount AND TE.srcUserId=:userId AND RE.reactType=0";
|
||||
$query_NbCivilHit = "SELECT COUNT(DISTINCT TE.indexCount, RE.hitTargetName) AS nbCivilHits FROM " . TRIGGEREVENTS_TABLE_NAME . " TE, " . REACTEVENTS_TABLE_NAME . " RE WHERE TE.sessionId=:sessionId AND RE.srcEventSessionId=TE.sessionId AND RE.srcEventIndex=TE.indexCount AND TE.srcUserId=:userId AND RE.reactType=1";
|
||||
$query_PrecisionAndReactionTime = "SELECT SUM(X.precisionByShot) AS precisionTotal, SUM(X.reactTimeByShot) AS reactTimeTotal, COUNT(CASE WHEN X.reactTime > 0 THEN 1 ELSE 0 END) AS shots
|
||||
FROM (SELECT COALESCE(RE.hitPrecision,0) AS precisionByShot, COALESCE(RE.reactTime,0) AS reactTimeByShot, RE.reactTime AS reactTime FROM " . TRIGGEREVENTS_TABLE_NAME . " TE, " . REACTEVENTS_TABLE_NAME . " RE WHERE TE.sessionId=:sessionId AND TE.srcUserId=:userId AND TE.sessionId = RE.srcEventSessionId AND TE.indexCount = RE.srcEventIndex AND (RE.reactType=0 OR RE.reactType=4 OR RE.reactType=5) GROUP BY TE.sessionId, TE.srcUserId, TE.indexCount) AS X";
|
||||
|
||||
// prepare queries
|
||||
$stmt_NbShotFired = $this->conn->prepare($query_NbShotFired);
|
||||
$stmt_NbEnemyHit = $this->conn->prepare($query_NbEnemyHit);
|
||||
$stmt_NbCivilHit = $this->conn->prepare($query_NbCivilHit);
|
||||
$stmt_PrecisionAndReactionTime = $this->conn->prepare($query_PrecisionAndReactionTime);
|
||||
|
||||
// bind values
|
||||
$stmt_NbShotFired->bindParam(":sessionId", $this->sessionId);
|
||||
$stmt_NbShotFired->bindParam(":userId", $this->userId);
|
||||
$stmt_NbEnemyHit->bindParam(":sessionId", $this->sessionId);
|
||||
$stmt_NbEnemyHit->bindParam(":userId", $this->userId);
|
||||
$stmt_NbCivilHit->bindParam(":sessionId", $this->sessionId);
|
||||
$stmt_NbCivilHit->bindParam(":userId", $this->userId);
|
||||
$stmt_PrecisionAndReactionTime->bindParam(":sessionId", $this->sessionId);
|
||||
$stmt_PrecisionAndReactionTime->bindParam(":userId", $this->userId);
|
||||
|
||||
// execute queries
|
||||
$stmt_NbShotFired->execute();
|
||||
$stmt_NbEnemyHit->execute();
|
||||
$stmt_NbCivilHit->execute();
|
||||
$stmt_PrecisionAndReactionTime->execute();
|
||||
|
||||
|
||||
$shotFired=1;
|
||||
if ($stmt_NbShotFired->rowCount() > 0)
|
||||
{
|
||||
// get retrieved row
|
||||
$row = $stmt_NbShotFired->fetch(PDO::FETCH_ASSOC);
|
||||
// retrieve nbFire value
|
||||
$shotFired = $row['nbFire'];
|
||||
}
|
||||
if ($stmt_NbEnemyHit->rowCount() > 0)
|
||||
{
|
||||
// get retrieved row
|
||||
$row = $stmt_NbEnemyHit->fetch(PDO::FETCH_ASSOC);
|
||||
// retrieve nbEnemyHits value
|
||||
$this->nbEnemyHit = $row['nbEnemyHits'];
|
||||
}
|
||||
if ($stmt_NbCivilHit->rowCount() > 0)
|
||||
{
|
||||
// get retrieved row
|
||||
$row = $stmt_NbCivilHit->fetch(PDO::FETCH_ASSOC);
|
||||
// retrieve nbCivilHits value
|
||||
$this->nbCivilsHit = $row['nbCivilHits'];
|
||||
}
|
||||
if ($stmt_PrecisionAndReactionTime->rowCount() > 0)
|
||||
{
|
||||
// get retrieved row
|
||||
$row = $stmt_PrecisionAndReactionTime->fetch(PDO::FETCH_ASSOC);
|
||||
|
||||
$shotsWithReactTime = (int)$row['shots'];
|
||||
if ($shotsWithReactTime <= 0)
|
||||
$shotsWithReactTime = 1;
|
||||
|
||||
// retrieve average precision per shot
|
||||
$this->firePrecision = $row['precisionTotal']/($shotFired == 0 ? 1 : $shotFired);
|
||||
// retrieve average reactionTime per shot
|
||||
$this->reactionTime = $row['reactTimeTotal']/$shotsWithReactTime;
|
||||
}
|
||||
|
||||
return $this->update() && $stmt_NbShotFired->rowCount() > 0 && $stmt_NbEnemyHit->rowCount() > 0 && $stmt_NbCivilHit->rowCount() > 0 && $stmt_PrecisionAndReactionTime->rowCount() > 0 /* && $stmt_Precision->rowCount() > 0 && $stmt_ReactionTime->rowCount() > 0*/;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
function update ()
|
||||
{
|
||||
$query = "UPDATE " . $this->table_name . "
|
||||
SET nbEnemyHit=:nbEnemyHit, nbCivilsHit=:nbCivilsHit, firePrecision=:firePrecision, reactionTime=:reactionTime " . "
|
||||
WHERE sessionId='".$this->sessionId."' AND userId='".$this->userId."'";
|
||||
|
||||
// prepare query
|
||||
$stmt = $this->conn->prepare($query);
|
||||
|
||||
// bind values
|
||||
$stmt->bindParam(":nbEnemyHit", $this->nbEnemyHit);
|
||||
$stmt->bindParam(":nbCivilsHit", $this->nbCivilsHit);
|
||||
$stmt->bindParam(":firePrecision", $this->firePrecision);
|
||||
$stmt->bindParam(":reactionTime", $this->reactionTime);
|
||||
|
||||
// execute query
|
||||
if ($stmt->execute())
|
||||
{
|
||||
// once it has been updated, we have to update the averagePrecision field in the USERS_TABLE_NAME table
|
||||
$query = "UPDATE " . USERS_TABLE_NAME . "
|
||||
SET avgPrecision=(SELECT AVG(firePrecision) FROM " . PARTICIPATES_TABLE_NAME . " P WHERE P.userId='".$this->userId."'),
|
||||
avgReaction=(SELECT AVG(reactionTime) FROM " . PARTICIPATES_TABLE_NAME . " P WHERE P.userId='".$this->userId."')
|
||||
WHERE users.id='".$this->userId."'";
|
||||
|
||||
// prepare query
|
||||
$stmt = $this->conn->prepare($query);
|
||||
|
||||
// execute query
|
||||
return $stmt->execute();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
function updateScore ()
|
||||
{
|
||||
$query = "UPDATE " . $this->table_name . " SET score=:score WHERE sessionId=:sessionId AND userId=:userId";
|
||||
|
||||
// prepare query
|
||||
$stmt = $this->conn->prepare($query);
|
||||
|
||||
// bind values
|
||||
$stmt->bindParam(":sessionId", $this->sessionId);
|
||||
$stmt->bindParam(":userId", $this->userId);
|
||||
$stmt->bindParam(":score", $this->score);
|
||||
|
||||
return $stmt->execute();
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
function getAllUsersInSession ()
|
||||
{
|
||||
$query = "SELECT DISTINCT userId FROM " . $this->table_name . " WHERE sessionId=:sessionId";
|
||||
|
||||
// prepare query
|
||||
$stmt = $this->conn->prepare($query);
|
||||
|
||||
// bind values
|
||||
$stmt->bindParam(":sessionId", $this->sessionId);
|
||||
|
||||
// execute query
|
||||
$stmt->execute();
|
||||
|
||||
$usersIdForSession = array();
|
||||
|
||||
// loop through results
|
||||
while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
|
||||
{
|
||||
// retrieve user ids
|
||||
array_push( $usersIdForSession, $row['userId'] );
|
||||
}
|
||||
|
||||
return $usersIdForSession;
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
function copy (UserInGameSession $otherParticipation)
|
||||
{
|
||||
$this->userId = $otherParticipation->userId;
|
||||
$this->sessionId = $otherParticipation->sessionId;
|
||||
|
||||
$this->score = $otherParticipation->score; // need to call calculateAverages manually
|
||||
$this->firePrecision = $otherParticipation->firePrecision; // need to call calculateAverages manually
|
||||
$this->reactionTime = $otherParticipation->reactionTime; // need to call calculateAverages manually
|
||||
|
||||
$this->nbEnemyHit = $otherParticipation->nbEnemyHit; // total
|
||||
$this->nbCivilsHit = $otherParticipation->nbCivilsHit; // total
|
||||
$this->damageTaken = $otherParticipation->damageTaken; // total
|
||||
|
||||
$this->endStatus = $otherParticipation->endStatus; // TODO : mixed ?
|
||||
$this->avatar = $otherParticipation->avatar;
|
||||
$this->weapon = $otherParticipation->weapon;
|
||||
$this->role = $otherParticipation->role; // TODO
|
||||
|
||||
if ($this->results != null && $otherParticipation->results != null)
|
||||
$this->results = $otherParticipation->results;
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
function add (UserInGameSession $otherParticipation)
|
||||
{
|
||||
if ($this->userId != $otherParticipation->userId)
|
||||
$this->userId = -1;
|
||||
|
||||
if ($this->sessionId != $otherParticipation->sessionId)
|
||||
$this->sessionId = -1;
|
||||
|
||||
$this->score += $otherParticipation->score; // need to call calculateAverages manually
|
||||
$this->firePrecision += $otherParticipation->firePrecision; // need to call calculateAverages manually
|
||||
$this->reactionTime += $otherParticipation->reactionTime; // need to call calculateAverages manually
|
||||
|
||||
$this->nbEnemyHit += $otherParticipation->nbEnemyHit; // total
|
||||
$this->nbCivilsHit += $otherParticipation->nbCivilsHit; // total
|
||||
$this->damageTaken += $otherParticipation->damageTaken; // total
|
||||
|
||||
$this->endStatus = $this->endStatus; // TODO : mixed ?
|
||||
if ($this->avatar != $otherParticipation->avatar)
|
||||
$this->avatar = "various avatars";
|
||||
if ($this->weapon != $otherParticipation->weapon)
|
||||
$this->weapon = "various weapons";
|
||||
$this->role = $this->role; // TODO
|
||||
|
||||
$this->addResults($otherParticipation);
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
function addResults (UserInGameSession $otherParticipation)
|
||||
{
|
||||
// add resultsObject debriefs
|
||||
if ($this->results != null && $otherParticipation->results != null)
|
||||
{
|
||||
$resultsObject = UserInGameSessionResults::fromJsonString($this->results);
|
||||
$otherParticipationResultsObject = UserInGameSessionResults::fromJsonString($otherParticipation->results);
|
||||
|
||||
if ($resultsObject != null && $otherParticipationResultsObject)
|
||||
{
|
||||
$resultsObject->add($otherParticipationResultsObject);
|
||||
|
||||
// update results string
|
||||
$this->results = json_encode($resultsObject);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
function calculateAverages ($nb)
|
||||
{
|
||||
if ($nb > 0)
|
||||
{
|
||||
$this->score /= $nb; // average
|
||||
$this->firePrecision /= $nb; // average
|
||||
$this->reactionTime /= $nb; // average
|
||||
$this->nbEnemyHit = $this->nbEnemyHit; // total
|
||||
$this->nbCivilsHit = $this->nbCivilsHit; // total
|
||||
$this->damageTaken = $this->damageTaken; // total
|
||||
|
||||
// calculate averages for scores of resultsObject
|
||||
$resultsObject = UserInGameSessionResults::fromJsonString($this->results);
|
||||
$resultsObject->calculateAverages($nb);
|
||||
|
||||
// update results string
|
||||
$this->results = json_encode($resultsObject);
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
Reference in New Issue
Block a user