2026-03-09 07:12:13 +01:00

591 lines
23 KiB
PHP

<?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);
}
}
}
?>