Select Git revision
GameEngine.swift
Objet.php 6.75 KiB
<?php
require_once "Objet.php";
/**
* Implémente les magic methods.
*/
class Objet
{
public function __construct($data = null)
{
if(!is_null($data)){
foreach ($data as $key => $value){
$this->$key = $value;
}
}
}
/**
* @param $name
* @return mixed
*/
public function __get($name)
{
return $this->$name ?? null;
}
/**
* @param $name
* @param $value
* @return void
*/
public function __set($name, $value)
{
$this->$name = $value;
}
/**
* Permet d'insérer un objet dans la base de données
* @param String $tableName
* @param array $columns
* @return array|string[]
*/
public static function addObject(String $tableName, array $columns) : array
{
$result["status"] = "success";
$result["message"] = "Insertion réussie";
$validation = Objet::verifyTableAndFormat($tableName, $columns);
if($validation["status"] !== "success"){
return $validation;
}
// On prépare la requête
$queryString = ("INSERT INTO $tableName (" . implode(", ", array_keys($columns))
. ") VALUES (:" . implode(", :", array_keys($columns)) . ")");
$insertQuery = Database::pdo()->prepare($queryString);
try{
// Et on l'exécute
$insertQuery->execute($columns);
} catch (PDOException $e) {
return [
"status" => "fail",
"message" => "L'insertion de l'objet a échoué.",
"pdoError" => $e
];
}
return $result;
}
/**
* Permet de décrire une table représentant un objet.
* @param $tableName
* @return array
*/
public static function describeObject($tableName) : array
{
if(!isAlphaNumeric($tableName)){
return [
"status" => "fail",
"message" => "Le format du nom de la table est incorrect.",
"columns" => []
];
}else{
try{
$query = Database::pdo()->query("SHOW FULL COLUMNS FROM $tableName");
$columns = $query->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
return [
"status" => "fail",
"message" => $e->getMessage(),
"columns" => []
];
}
return [
"status" => "success",
"columns" => $columns
];
}
}
/**
* Permet la modification d'un objet dans la base de données
* @param String $tableName
* @param array $id
* @param array $columns
* @return array|string[]
*/
public static function modifyObject(String $tableName, array $id, array $columns) : array
{
$result["status"] = "success";
$result["message"] = "Modification réussie";
$validation = Objet::verifyTableAndFormat($tableName, $columns);
if($validation["status"] !== "success"){
return $validation;
}
if(empty($id["name"]) || empty($id["value"]) || !isAlphaNumeric($id["name"])){
return [
"status" => "fail",
"message" => "L'identifiant de la table envoyé est incorrect!"
];
}
// On prépare la requête
$queryString = ("UPDATE $tableName SET " . http_build_query($columns, '', ',') . " WHERE " . $id["name"] . "=:" . $id["name"]);
$insertQuery = Database::pdo()->prepare($queryString);
try{
// Et on l'exécute
$insertQuery->execute($columns);
} catch (PDOException $e) {
return [
"status" => "fail",
"message" => "La modification de l'objet a échoué.",
"pdoError" => $e
];
}
return $result;
}
/**
* Permet la récupération d'un objet depuis la base de données
* @param string $tableName
* @param array $id
* @return array|string[]
*/
public static function getObject(string $tableName, array $id) : array
{
$validation = Objet::verifyTableAndFormat($tableName);
if($validation["status"] !== "success"){
return $validation;
}
if(empty($id["name"]) || empty($id["value"]) || !isAlphaNumeric($id["name"])){
return [
"status" => "fail",
"message" => "L'identifiant de la table envoyé est incorrect!"
];
}
// On prépare la requête
$queryString = ("SELECT * FROM $tableName WHERE " . $id["name"] . "=?");
$insertQuery = Database::pdo()->prepare($queryString);
try{
// Et on l'exécute
$insertQuery->execute([$id["name"]]);
} catch (PDOException $e) {
return [
"status" => "fail",
"message" => "La récupération de l'objet a échoué.",
"pdoError" => $e
];
}
return [
"status" => "success",
"message" => "Récupération réussie.",
"data" => $insertQuery->fetch(PDO::FETCH_ASSOC)
];
}
/**
* Permet de vérifier le format du nom de la table et des nom des colonnes + vérifier l'existance de la table.
* @param String $tableName
* @param array|null $columns
* @return array|string[]
*/
public static function verifyTableAndFormat(string $tableName, array $columns = null) : array
{
// On va vérifier que $tableName est bien en format alphanumérique
if(!isAlphaNumeric($tableName)){
return [
"status" => "fail",
"message" => "Le format du nom de la table est incorrect."
];
}
// Maintenant on va vérifier que la table existe
try{
Database::pdo()->query("SELECT 1 FROM $tableName LIMIT 1");
} catch (PDOException $e) {
return [
"status" => "fail",
"message" => "La table $tableName ne semble pas exister.",
"pdoError" => $e
];
}
if(!is_null($columns)){
// On va vérifier que l'index de chaque est bien en format alphanumérique
foreach($columns as $index => $value){
if(!isAlphaNumeric($index)){
return [
"status" => "fail",
"message" => "Le format " . htmlspecialchars($index) . " est incorrect."
];
}
}
}
return [
"status" => "success",
"message" => "Validation réussie."
];
}
}