'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 = \manager\ManagerError::Success; }catch(Exception $e){ // On signale qu'il y a une erreur self::$error = \manager\ManagerError::PDOConnection; } } /* retourne une instance de la classe */ public static function getInstance(){ if( self::$instance == null || self::$error != \manager\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 le résultat d'une $requeteSQL->fetchAll() * @oneDimension FAUX <=> fetchAll ; VRAI <=> fetch * * @return newFetchData retourne le tableau donné en paramètre mais sans les valeurs à clés numériques * */ public static function delNumeric($fetchData, $oneDimension=false){ $nextEquivalent = false; // Vaut VRAI si le prochain est peut-etre un equivalent numerique /* [1] 2 dimensions ===============================================*/ if( !$oneDimension && 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 Type que l'on veut verifier * @value Valeur a verifier * * @return match 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; } return $checker; } } ?>