diff --git a/manager/Database.php b/manager/Database.php index 6f51cee..e1e7b81 100755 --- a/manager/Database.php +++ b/manager/Database.php @@ -6,7 +6,11 @@ class DataBase{ /* ATTRIBUTS STATIQUES */ - public static $config_path = array('f/json/database/conf', 'f/json/database-local/conf'); + public static $config_path = array( + 'local' => 'f/json/database-local/conf', + 'remote' => 'f/json/database/conf' + ); + private static $pdo; private static $instance; @@ -17,6 +21,8 @@ private $username; private $password; + public static $error; + public function __construct($host, $dbname, $username, $password){ $this->host = $host; @@ -24,20 +30,28 @@ $this->username = $username; $this->password = $password; - // password: Qt358nUdyeTxLDM8 - self::$pdo = new \PDO('mysql:host='.$host.';dbname='.$dbname, $username, $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 ){ + 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( $_SERVER['HTTP_HOST'] != 'stefproject' ) - $conf = json_decode( ResourceDispatcher::getResource(self::$config_path[0]), true ); + 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[1]), true ); + $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']); @@ -50,10 +64,31 @@ /* 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 + ); + } + + + + + + + /*************************************************************/ /* _____ ______ _ _ ______ _____ _ */ /* / ____| ____| \ | | ____| __ \ /\ | | */ diff --git a/manager/ManagerError.php b/manager/ManagerError.php index 8c043a1..3f43929 100755 --- a/manager/ManagerError.php +++ b/manager/ManagerError.php @@ -46,6 +46,11 @@ // Module non specifie dans la conf const UnknownRepo = 10; + /* Database */ + + // Erreur lors de la creation d'un objet PDO (connection) + const PDOConnection = 11; + /* EXPLICITE UN CODE D'ERREUR * @@ -67,6 +72,7 @@ case self::UnknownRepo: return "Le repo n'existe pas"; break; case self::UnknownMethod: return "Le methode n'existe pas"; break; case self::UncallableMethod: return "Le methode n'est pas amorcable"; break; + case self::PDOConnection: return "La connexion avec la base de donnees a echoue"; break; default: return "Erreur inconnue..."; break; } diff --git a/phpunit/coverage/Database.php.html b/phpunit/coverage/Database.php.html old mode 100644 new mode 100755 index 18d05b9..3b02af0 --- a/phpunit/coverage/Database.php.html +++ b/phpunit/coverage/Database.php.html @@ -48,19 +48,19 @@
- Generated by PHP_CodeCoverage 1.2.13 using PHP 5.5.9-1ubuntu4.14 and PHPUnit 3.7.28 at Fri Feb 12 20:46:41 CET 2016. + Generated by PHP_CodeCoverage 1.2.13 using PHP 5.5.9-1ubuntu4.14 and PHPUnit 3.7.28 at Fri Feb 12 22:01:41 CET 2016.
+ | Code Coverage |
+ |||||||||
+ | Classes and Traits |
+ Functions and Methods |
+ Lines |
+ |||||||
Total | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+ CRAP | +
+
+
+ |
+ 0.00% |
+ 0 / 14 |
+
ManagerError | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+ 182 | +
+
+
+ |
+ 0.00% |
+ 0 / 14 |
+
explicit($error) | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+ 182 | +
+
+
+ |
+ 0.00% |
+ 0 / 14 |
+
<?php | |
namespace manager; | |
class ManagerError{ | |
/* SUCCESS */ | |
const Success = 0; | |
/* Parsage json */ | |
const ParsingFailed = 1; | |
/* ResourceDispatcher */ | |
// Drapeaux invalides | |
const InvalidFlags = 2; | |
// Fichier inexistant | |
const UnreachableResource = 3; | |
/* ModuleRequest */ | |
// Le @path n'est pas renseigne | |
const MissingPath = 4; | |
// Verification de la coherence du chemin (existe dans la conf) | |
const WrongPathModule = 5; | |
// Module non specifie dans la conf | |
const UnknownModule = 6; | |
// Methode non specifie pour ce Module dans la conf | |
const UnknownMethod = 7; | |
// Methode inamorcable | |
const UncallableMethod = 8; | |
/* Repo */ | |
// Verification de la coherence du chemin (existe dans la conf) | |
const WrongPathRepo = 9; | |
// Module non specifie dans la conf | |
const UnknownRepo = 10; | |
/* Database */ | |
// Erreur lors de la creation d'un objet PDO (connection) | |
const PDOConnection = 11; | |
/* EXPLICITE UN CODE D'ERREUR | |
* | |
* @error<Integer> Code d'erreur | |
* | |
* @return explicit<String> Description explicite du code d'erreur | |
* | |
*/ | |
public static function explicit($error){ | |
switch($error){ | |
case self::Success: return "Tout s'est bien deroule"; break; | |
case self::ParsingFailed: return "La lecture du fichier JSON a echoue"; break; | |
case self::InvalidFlags: return "Les specifications (drapeaux) sont incorrects"; break; | |
case self::UnreachableResource: return "La ressource n'existe pas (404)"; break; | |
case self::MissingPath: return "Le chemin de delegation n'a pas ete renseigne"; break; | |
case self::WrongPathModule: return "Le chemin de delegation est incorrect ('nomModule/nomMethode')"; break; | |
case self::WrongPathRepo: return "Le chemin de delegation est incorrect ('nomRepo/nomMethode')"; break; | |
case self::UnknownModule: return "Le module n'existe pas"; break; | |
case self::UnknownRepo: return "Le repo n'existe pas"; break; | |
case self::UnknownMethod: return "Le methode n'existe pas"; break; | |
case self::UncallableMethod: return "Le methode n'est pas amorcable"; break; | |
case self::PDOConnection: return "La connexion avec la base de donnees a echoue"; break; | |
default: return "Erreur inconnue..."; break; | |
} | |
return 'Aucune erreur trouvee'; | |
} | |
} | |
+ | Code Coverage |
+ |||||||||
+ | Classes and Traits |
+ Functions and Methods |
+ Lines |
+ |||||||
Total | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+
+
+
+ |
+ 66.67% |
+ 4 / 6 |
+ CRAP | +
+
+
+ |
+ 75.93% |
+ 41 / 54 |
+
ResourceDispatcher | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+
+
+
+ |
+ 66.67% |
+ 4 / 6 |
+ 32.04 | +
+
+
+ |
+ 75.93% |
+ 41 / 54 |
+
__construct($url, $view=false) | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+ 8.30 | +
+
+
+ |
+ 60.00% |
+ 12 / 20 |
+ |||
getResource($route) | +
+
+
+ |
+ 100.00% |
+ 1 / 1 |
+ 1 | +
+
+
+ |
+ 100.00% |
+ 2 / 2 |
+ |||
createFlags($serialFlags) | +
+
+
+ |
+ 100.00% |
+ 1 / 1 |
+ 9 | +
+
+
+ |
+ 100.00% |
+ 16 / 16 |
+ |||
buildPath() | +
+
+
+ |
+ 100.00% |
+ 1 / 1 |
+ 4 | +
+
+
+ |
+ 100.00% |
+ 8 / 8 |
+ |||
view() | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+ 6 | +
+
+
+ |
+ 0.00% |
+ 0 / 5 |
+ |||
getContent() | +
+
+
+ |
+ 100.00% |
+ 1 / 1 |
+ 2 | +
+
+
+ |
+ 100.00% |
+ 3 / 3 |
+
<?php | |
namespace manager; | |
class ResourceDispatcher{ | |
// Constantes | |
public static $extension_config_path = '/config/dispatcher-extensions.json'; | |
public static $parents_config_path = '/config/dispatcher-tree.json'; | |
public static $supported_extensions; | |
public static $supported_parents; | |
// Attributs prives utiles (initialisation) | |
private $header; | |
private $path; | |
private $flags; | |
public $error; | |
/* CONSTRUCTEUR & AMORCAGE DU DISPATCHER | |
* | |
* @url<String> L'url courante | |
* @view<Boolean> Si VRAI, retourne header+contenu, sinon cree juste l'objet | |
* | |
* @return status<Boolean> Retourne si oui ou non tout s'est bien passe | |
* | |
*/ | |
public function __construct($url, $view=false){ | |
$this->error = ManagerError::Success; | |
/* [0] On met a jour la configuration | |
=====================================================*/ | |
// Extensions supportees | |
$extensions_conf = json_decode( file_get_contents(__ROOT__.self::$extension_config_path), true ); | |
// Gestion de l'erreur de parsage | |
if( $extensions_conf == null ){ | |
$this->error = ManagerError::ParsingFailed; | |
return false; | |
} | |
self::$supported_extensions = $extensions_conf; | |
// Dossiers supportes | |
$parents_conf = json_decode( file_get_contents(__ROOT__.self::$parents_config_path), true ); | |
// Gestion de l'erreur de parsage | |
if( $parents_conf == null ){ | |
$this->error = ManagerError::ParsingFailed; | |
return false; | |
} | |
self::$supported_parents = $parents_conf; | |
/* [1] On recupere les donnees de l'URL | |
==================================================*/ | |
$serialFlags = array_slice( explode('/',$url), 1 ); | |
/* [2] On check/cree les drapeaux avec ces donnees | |
==================================================*/ | |
if( !$this->createFlags($serialFlags) ){ // Creation des drapeaux | |
$this->error = ManagerError::InvalidFlags; | |
return false; | |
} | |
/* [3] On construit le chemin a partir des tags | |
==================================================*/ | |
if( !$this->buildPath() ){ // Construction du chemin | |
$this->error = ManagerError::UnreachableResource; | |
return false; | |
} | |
/* [4] On gere l'affichage pour l'appel externe/interne | |
==================================================*/ | |
if( $view ) // Appel externe | |
$this->view(); | |
return true; | |
} | |
/* INCLUSION PHP D'UNE RESSOURCE UTILISANT LE DISPATCHER | |
* | |
* @route<String> Route associee a une ressource | |
* | |
* @return content<*> Retourne le contenu de la ressource | |
* | |
*/ | |
public static function getResource($route){ | |
$instance = new ResourceDispatcher($route); | |
return $instance->getContent(); | |
} | |
/* FONCTION QUI VERIFIE LES DRAPEAUX | |
* | |
* @serialFlags<Array> Tableau a indice numerique | |
* | |
* @return correct<Boolean> Retourne si oui ou non les drapeaux sont corrects | |
* | |
*/ | |
private function createFlags($serialFlags){ | |
/* [1] Verification des flags (version serialisee) | |
======================================================*/ | |
$correct = true; | |
// Verification du nombre de drapeaux () au moins 3 | |
$correct = $correct && count($serialFlags) >= 3; | |
// Verification que l'extension est correcte | |
$correct = $correct && array_key_exists($serialFlags[0], self::$supported_extensions); | |
// Verification du filename | |
$correct = $correct && preg_match('#^[\w_-]+$#i', $serialFlags[1]); | |
// Verification du parent | |
$correct = $correct && array_key_exists($serialFlags[2], self::$supported_parents); | |
// Verification du sous-parent (optionnel) | |
$opt_subParent = count($serialFlags) >= 4; | |
if( $opt_subParent ) | |
$correct = $correct && preg_match('#^[\w_-]+$#i', $serialFlags[3]); | |
if( !$correct ) | |
return false; | |
/* [2] Creation (non serialisee) des flags | |
======================================================*/ | |
// Si tout se deroule bien, on cree les flags | |
$this->flags = array( | |
'extension' => $serialFlags[0], | |
'filename' => $serialFlags[1], | |
'parent' => $serialFlags[2] | |
); | |
// Ajout du sous-parent optionnel | |
if( $opt_subParent ) | |
$this->flags['subparent'] = $serialFlags[3]; | |
return true; | |
} | |
/* FONCTION QUI CONSTRUIT LE CHEMIN A PARTIR DU PATH | |
* | |
* @return fileExists<Boolean> Retourne si oui ou non le fichier cible existe | |
* | |
* @format | |
* | |
* f/extension/filename/parent/:subparent:/ (:OPT:) | |
* | |
*/ | |
private function buildPath(){ | |
/* [1] On recupere le HEADER associe a l'extension | |
==========================================================*/ | |
// Si aucun header pour cet cle, on retourne une erreur | |
if( !isset(self::$supported_extensions[$this->flags['extension']]) ) return false; | |
// On recupere le header associe | |
$header = self::$supported_extensions[$this->flags['extension']]; | |
/* [2] On recupere le chemin associe au parent | |
==========================================================*/ | |
// Si aucun dossier pour cet indice, on retourne une erreur | |
if( !isset(self::$supported_parents[$this->flags['parent']]) ) return false; | |
// On recupere le dossier associe | |
$parent = self::$supported_parents[$this->flags['parent']]; | |
/* [3] Gestion du sous-parent optionnel | |
==========================================================*/ | |
$opt_subParent = (isset($this->flags['subparent'])) ? $this->flags['subparent'].'/' : ''; | |
/* [4] On definit le header | |
==========================================================*/ | |
$this->header = $header; | |
/* [5] On construit le chemin | |
==========================================================*/ | |
$this->path = __ROOT__.$parent.'/'.$opt_subParent.$this->flags['filename'].'.'.$this->flags['extension']; | |
/* [6] On retourne si le fichier existe ou non | |
==========================================================*/ | |
return @file_get_contents( $this->path ) != false; | |
} | |
/* FUNCTION QUI AFFICHE LA RESSOURCE EN QUESTION | |
* | |
*/ | |
public function view(){ | |
// S'il y a eu une erreur en amont | |
if( $this->error != ManagerError::Success ) | |
return false; // on retourne faux | |
// On definit le header | |
header('Content-Type: '.$this->header); | |
// On inclut le contenu | |
echo file_get_contents($this->path); | |
} | |
/* FUNCTION QUI RETOURNE LE CONTENU DE LA RESSOURCE EN QUESTION | |
* | |
*/ | |
public function getContent(){ | |
// S'il y a eu une erreur en amont | |
if( $this->error != ManagerError::Success ) | |
return false; // on retourne faux | |
// On inclut le contenu | |
return file_get_contents($this->path); | |
} | |
} | |
- Generated by PHP_CodeCoverage 1.2.13 using PHP 5.5.9-1ubuntu4.14 and PHPUnit 3.7.28 at Fri Feb 12 20:46:41 CET 2016. + Generated by PHP_CodeCoverage 1.2.13 using PHP 5.5.9-1ubuntu4.14 and PHPUnit 3.7.28 at Fri Feb 12 22:01:41 CET 2016.
diff --git a/phpunit/coverage/css/bootstrap-responsive.min.css b/phpunit/coverage/css/bootstrap-responsive.min.css old mode 100644 new mode 100755 diff --git a/phpunit/coverage/css/bootstrap.min.css b/phpunit/coverage/css/bootstrap.min.css old mode 100644 new mode 100755 diff --git a/phpunit/coverage/css/style.css b/phpunit/coverage/css/style.css old mode 100644 new mode 100755 diff --git a/phpunit/coverage/img/glyphicons-halflings-white.png b/phpunit/coverage/img/glyphicons-halflings-white.png old mode 100644 new mode 100755 diff --git a/phpunit/coverage/img/glyphicons-halflings.png b/phpunit/coverage/img/glyphicons-halflings.png old mode 100644 new mode 100755 diff --git a/phpunit/coverage/index.dashboard.html b/phpunit/coverage/index.dashboard.html old mode 100644 new mode 100755 index 906abdd..9e06cbb --- a/phpunit/coverage/index.dashboard.html +++ b/phpunit/coverage/index.dashboard.html @@ -40,24 +40,28 @@- Generated by PHP_CodeCoverage 1.2.13 using PHP 5.5.9-1ubuntu4.14 and PHPUnit 3.7.28 at Fri Feb 12 20:46:41 CET 2016. + Generated by PHP_CodeCoverage 1.2.13 using PHP 5.5.9-1ubuntu4.14 and PHPUnit 3.7.28 at Fri Feb 12 22:01:41 CET 2016.
diff --git a/phpunit/coverage/js/bootstrap.min.js b/phpunit/coverage/js/bootstrap.min.js old mode 100644 new mode 100755 diff --git a/phpunit/coverage/js/html5shiv.js b/phpunit/coverage/js/html5shiv.js old mode 100644 new mode 100755 diff --git a/phpunit/coverage/js/jquery.min.js b/phpunit/coverage/js/jquery.min.js old mode 100644 new mode 100755 diff --git a/phpunit/phpunit.xml b/phpunit/phpunit.xml old mode 100644 new mode 100755 index 2470e97..0746731 --- a/phpunit/phpunit.xml +++ b/phpunit/phpunit.xml @@ -4,6 +4,7 @@