Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
50.00% |
3 / 6 |
CRAP | |
95.45% |
63 / 66 |
DataBase | |
0.00% |
0 / 1 |
|
50.00% |
3 / 6 |
54 | |
95.45% |
63 / 66 |
__construct($host, $dbname, $username, $password) | |
0.00% |
0 / 1 |
2.01 | |
88.89% |
8 / 9 |
|||
getInstance() | |
0.00% |
0 / 1 |
6.10 | |
85.71% |
6 / 7 |
|||
getPDO() | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
getConfig() | |
100.00% |
1 / 1 |
1 | |
100.00% |
3 / 3 |
|||
delNumeric($fetchData, $oneDimension=false) | |
100.00% |
1 / 1 |
14 | |
100.00% |
25 / 25 |
|||
check($type, $value) | |
0.00% |
0 / 1 |
30 | |
95.00% |
19 / 20 |
<?php | |
namespace manager; | |
class DataBase{ | |
/* ATTRIBUTS STATIQUES */ | |
public static $config_path = array( | |
'local' => 'f/json/database-local/conf', | |
'remote' => 'f/json/database/conf' | |
); | |
private static $pdo; | |
private static $instance; | |
/* ATTRIBUTS */ | |
private $host; | |
private $dbname; | |
private $username; | |
private $password; | |
public static $error; | |
public function __construct($host, $dbname, $username, $password){ | |
$this->host = $host; | |
$this->dbname = $dbname; | |
$this->username = $username; | |
$this->password = $password; | |
try{ | |
self::$pdo = new \PDO('mysql:host='.$this->host.';dbname='.$this->dbname, $this->username, $this->password); | |
// On signale que tout s'est bien passe | |
self::$error = ManagerError::Success; | |
}catch(Exception $e){ | |
// On signale qu'il y a une erreur | |
self::$error = ManagerError::PDOConnection; | |
} | |
} | |
/* retourne une instance de la classe */ | |
public static function getInstance(){ | |
if( self::$instance == null || self::$error != ManagerError::Success ){ // Si aucune instance existante OU erreur de connection | |
// chargement de la configuration du server SQL | |
if( !isset($_SERVER['HTTP_HOST']) || isset($_SERVER['HTTP_HOST']) && $_SERVER['HTTP_HOST'] == 'stefproject' ) | |
$conf = json_decode( ResourceDispatcher::getResource(self::$config_path['local']), true ); | |
else | |
$conf = json_decode( ResourceDispatcher::getResource(self::$config_path['remote']), true ); | |
// creation de l'instance en fonction des parametres | |
self::$instance = new DataBase($conf['host'], $conf['dbname'], $conf['user'], $conf['password']); | |
} | |
return self::$instance; | |
} | |
/* retourne la connection statique */ | |
public static function getPDO(){ | |
$instance = self::getInstance(); | |
return self::$pdo; | |
} | |
public function getConfig(){ | |
return array( | |
'host' => $this->host, | |
'username' => $this->username | |
); | |
} | |
/*************************************************************/ | |
/* _____ ______ _ _ ______ _____ _ */ | |
/* / ____| ____| \ | | ____| __ \ /\ | | */ | |
/* | | __| |__ | \| | |__ | |__) | / \ | | */ | |
/* | | |_ | __| | . ` | __| | _ / / /\ \ | | */ | |
/* | |__| | |____| |\ | |____| | \ \ / ____ \| |____ */ | |
/* \_____|______|_| \_|______|_| \_\/_/ \_\______| */ | |
/* */ | |
/*************************************************************/ | |
/* SUPPRIME LES VALEURS À CLÉS NUMÉRIQUES DANS UN FETCH D'UNE TABLE DE LA BDD | |
* | |
* @fetchData<Array> le résultat d'une $requeteSQL->fetchAll() | |
* @oneDimension<Boolean> FAUX <=> fetchAll ; VRAI <=> fetch | |
* | |
* @return newFetchData<Array> retourne le tableau donné en paramètre mais sans les valeurs à clés numériques | |
* | |
*/ | |
public static function delNumeric($fetchData, $oneDimension=false){ | |
// On quitte si ce n'est pas un tableau | |
if( !is_array($fetchData) ) | |
return array(); | |
$nextEquivalent = false; // Vaut VRAI si le prochain est peut-etre un equivalent numerique | |
/* [1] 2 dimensions | |
===============================================*/ | |
if( !$oneDimension && isset($fetchData[0]) && is_array($fetchData[0]) ){ | |
// on supprime les doublons des entrées (indice numérique) | |
for( $i = 0 ; $i < count($fetchData) ; $i++ ) // pour tout les utilisateurs | |
foreach($fetchData[$i] as $col => $val){ // pour toutes les entrées | |
if( !mb_detect_encoding($val, 'UTF-8') ) | |
$fetchData[$i][$col] = utf8_encode($val); | |
if( is_int($col) ){ // Si indice numerique | |
if( $nextEquivalent ) // Si suit un indice textuel | |
unset( $fetchData[$i][$col] ); // on supprime l'indice | |
$nextEquivalent = false; // Dans tous les cas, on dit que le prochain ne pourra pas etre supprime si numerique | |
}else // Si l'indice n'est pas un entier | |
$nextEquivalent = true; // On signale qu'il y aura peut etre un indice numerique suivant | |
} | |
/* [2] 1 dimensions | |
===============================================*/ | |
}else{ | |
// on supprime les doublons des entrées (indice numérique) | |
foreach($fetchData as $i=>$val){ // pour toutes les entrées | |
if( !mb_detect_encoding($val, 'UTF-8') ) | |
$fetchData[$i] = utf8_encode($val); | |
if( is_int($i) ){ // Si indice numerique | |
if( $nextEquivalent ) // Si suit un indice textuel | |
unset( $fetchData[$i] ); // on supprime l'indice | |
$nextEquivalent = false; // Dans tous les cas, on dit que le prochain ne pourra pas etre supprime si numerique | |
}else // Si l'indice n'est pas un entier | |
$nextEquivalent = true; // On signale qu'il y aura peut etre un indice numerique suivant | |
} | |
} | |
return $fetchData; | |
} | |
//////////////////////////////////////////////////////////////// | |
// _ __ _ _ _ | |
// __ _____ _ __(_)/ _(_) ___ __ _| |_(_) ___ _ __ ___ | |
// \ \ / / _ \ '__| | |_| |/ __/ _` | __| |/ _ \| '_ \/ __| | |
// \ V / __/ | | | _| | (_| (_| | |_| | (_) | | | \__ \ | |
// \_/ \___|_| |_|_| |_|\___\__,_|\__|_|\___/|_| |_|___/ | |
// | |
//////////////////////////////////////////////////////////////// | |
/* VERIFICATIONS DES TYPES UTILES GENERIQUES | |
* | |
* @type<String> Type que l'on veut verifier | |
* @value<mixed*> Valeur a verifier | |
* | |
* @return match<Boolean> Retourne si oui ou non la valeur @value est du bon type @type | |
* | |
*/ | |
public static function check($type, $value){ | |
$checker = !is_null($value); | |
switch($type){ | |
/* (1) Global */ | |
case 'auto_increment_id': | |
return $checker && is_numeric($value) && $value <= 2147483647 && $value >= -2147483647; | |
break; | |
/* (2) Utilisateur */ | |
case 'user.code': | |
case 'machine.code': | |
return $checker && is_string($value) && preg_match('/^[\dA-F]{2}(\-[\dA-F]{2}){3,5}$/i', $value); | |
break; | |
case 'user.username': | |
case 'machine.name': | |
case 'group.name': | |
return $checker && is_string($value) && preg_match('/^[\w-]{1,30}$/i', $value); | |
break; | |
case 'user.firstname': | |
case 'user.lastname': | |
return $checker && is_string($value) && preg_match('/^[a-z -]{3,30}$/i', $value); | |
break; | |
case 'user.mail': | |
return $checker && is_string($value) && strlen($value) <= 50 && preg_match('/^[\w\.-]+@[\w\.-]+\.[a-z]{2,4}$/i', $value); | |
break; | |
case 'user.password': | |
return $checker && is_string($value) && preg_match('/^[\da-f]{40}$/i', $value); | |
break; | |
case 'user.status': | |
return $checker && is_numeric($value) && floor($value) == $value && $value >= 0 && $value <= 100; | |
break; | |
} | |
return $checker; | |
} | |
} | |
?> |