Upgraded to Error:2.0 + api:2.2
This commit is contained in:
parent
6a483425ae
commit
812416a566
|
@ -0,0 +1,21 @@
|
|||
<?php
|
||||
|
||||
namespace api\core;
|
||||
|
||||
use \error\core\Err;
|
||||
use \error\core\Error;
|
||||
|
||||
interface AuthSystem{
|
||||
|
||||
/* VERIFICATION DES ACCES EN FONCTION DE PERMISSIONS ATTENDUES
|
||||
*
|
||||
* @module<String> Module concerné
|
||||
* @expected<array> Liste des permissions attendues
|
||||
*
|
||||
* @return error<Error> Erreur associée à la permission (Success/PermissionError/TokenError/etc)
|
||||
*
|
||||
*/
|
||||
public static function permission($module, $expected);
|
||||
}
|
||||
|
||||
?>
|
|
@ -4,15 +4,17 @@
|
|||
|
||||
use \database\core\Repo;
|
||||
use \error\core\Error;
|
||||
use \error\core\Err;
|
||||
use \api\core\AuthSystem;
|
||||
|
||||
|
||||
|
||||
|
||||
class Authentification{
|
||||
|
||||
// Contiendra les erreurs
|
||||
public $error;
|
||||
class Authentification implements AuthSystem{
|
||||
|
||||
public function __construct(){
|
||||
self::check();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -133,7 +135,7 @@
|
|||
* @module<String> Module concerné
|
||||
* @expected<array> Liste des permissions attendues
|
||||
*
|
||||
* @return status<Boolean> Si FALSE, pas la permission, sinon si
|
||||
* @return error<Error> Si FALSE, pas la permission, sinon si
|
||||
*
|
||||
*/
|
||||
public static function permission($module, $expected){
|
||||
|
@ -148,12 +150,12 @@
|
|||
/* (1) Si entrepot requis, mais manquant
|
||||
---------------------------------------------------------*/
|
||||
if( in_array('warehouse', $expected) && self::auth() < 1 )
|
||||
return Error::PermissionError;
|
||||
return new Error(Err::PermissionError);
|
||||
|
||||
/* (2) Si admin requis, mais manquant
|
||||
---------------------------------------------------------*/
|
||||
if( in_array('admin', $expected) && self::auth() < 2 )
|
||||
return Error::PermissionError;
|
||||
return new Error(Err::PermissionError);
|
||||
|
||||
/* (3) On retire 'warehouse' et 'admin' de @expected
|
||||
---------------------------------------------------------*/
|
||||
|
@ -169,7 +171,7 @@
|
|||
foreach($expected as $permission)
|
||||
// Si il manque au minimum une permission, on retourne FALSE
|
||||
if( !in_array($permission, $_SESSION['PERM']) )
|
||||
return Error::PermissionError;
|
||||
return new Error(Err::PermissionError);
|
||||
|
||||
|
||||
/* [3] Vérification que le module est actif pour l'entrepot
|
||||
|
@ -185,12 +187,12 @@
|
|||
|
||||
/* (3) Si aucune autorisation et pas module "Default" */
|
||||
if( !$allowedModule && !$defaultModule )
|
||||
return Error::DisabledModule;
|
||||
return new Error(Err::DisabledModule);
|
||||
|
||||
|
||||
/* [4] Si on a toutes les permissions requises
|
||||
=========================================================*/
|
||||
return Error::Success;
|
||||
return new Error(Err::Success);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -81,11 +81,6 @@
|
|||
return $checker && is_numeric($value) && $value <= 2147483647 && $value >= 0;
|
||||
break;
|
||||
|
||||
// Code RFID
|
||||
case 'rfid':
|
||||
return $checker && is_string($value) && preg_match('/^[\dA-F]{2}(\-[\dA-F]{2}){3,5}$/i', $value);
|
||||
break;
|
||||
|
||||
// String quelconque (peut etre vide)
|
||||
case 'text':
|
||||
return $checker && is_string($value);
|
||||
|
@ -132,6 +127,10 @@
|
|||
return $checker && is_string($value) && json_decode($value, true) !== NULL;
|
||||
break;
|
||||
|
||||
case 'numeric':
|
||||
return $checker && (is_numeric($value) || $value == null || $value == 'null');
|
||||
break;
|
||||
|
||||
default:
|
||||
return false;
|
||||
break;
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
<?php
|
||||
|
||||
namespace api\core;
|
||||
|
||||
|
||||
class ModuleFactory{
|
||||
|
||||
/* INSTANCIE UN MODULE
|
||||
*
|
||||
* @module<String> Nom du module
|
||||
* @arguments<Array> [OPTIONNEL] Arguments à passer au constructeur
|
||||
*
|
||||
* @return instance<Module> Instance du module en question
|
||||
*
|
||||
*/
|
||||
public static function getModule($module, $arguments=[]){
|
||||
/* (1) On gère les arguments */
|
||||
$arguments = is_array($arguments) ? $arguments : [];
|
||||
|
||||
/* (1) On vérifie que la classe existe */
|
||||
if( !file_exists(__BUILD__."/api/module/$module.php") )
|
||||
return false;
|
||||
|
||||
/* (2) On récupère la classe */
|
||||
$class_name = "\\api\\module\\$module";
|
||||
|
||||
/* (3) On retourne une instance */
|
||||
return new $class_name($arguments);
|
||||
}
|
||||
|
||||
}
|
|
@ -2,17 +2,21 @@
|
|||
|
||||
namespace api\core;
|
||||
use \database\core\DatabaseDriver;
|
||||
use \api\core\Authentification;
|
||||
use \api\core\AuthSystem;
|
||||
use \api\core\ModuleFactory;
|
||||
use \error\core\Error;
|
||||
use \error\core\Err;
|
||||
use \http\core\HttpRequest;
|
||||
|
||||
|
||||
class ModuleRequest{
|
||||
class Request{
|
||||
|
||||
// Constantes
|
||||
public static function config_path(){ return __ROOT__.'/config/modules.json'; }
|
||||
public static $default_options = [
|
||||
private static function config_path(){ return __ROOT__.'/config/modules.json'; }
|
||||
private static $default_options = [
|
||||
'download' => false
|
||||
];
|
||||
private static $authsystem = null;
|
||||
|
||||
// Attributs prives utiles (initialisation)
|
||||
private $path;
|
||||
|
@ -39,66 +43,80 @@
|
|||
*
|
||||
*/
|
||||
public function __construct($path=null, $params=null){
|
||||
// Si pas parametre manquant, on quitte
|
||||
/* [1] Fetch HttpRequest correct data
|
||||
=========================================================*/
|
||||
/* (1) Parse HttpRequest data because php doesn't parse it for non-POST HTTP method */
|
||||
$httprequest = new HttpRequest();
|
||||
$_POST = $httprequest->POST();
|
||||
|
||||
|
||||
/* [2] Initialisation
|
||||
=========================================================*/
|
||||
/* (1) Erreur par défaut */
|
||||
$this->error = new Error(Err::Success);
|
||||
|
||||
/* (2) Si pas parametre manquant, on quitte */
|
||||
if( $path == null ){
|
||||
$this->error = Error::MissingPath;
|
||||
$this->error->set(Err::MissingPath);
|
||||
return false;
|
||||
}
|
||||
|
||||
/* [0] On met a jour la configuration
|
||||
|
||||
/* [3] On met a jour la configuration
|
||||
=========================================================*/
|
||||
// Modules specifies
|
||||
/* (1) Section Title */
|
||||
$this->modules = json_decode( file_get_contents(self::config_path()), true );
|
||||
|
||||
// Gestion de l'erreur de parsage
|
||||
/* (2) Gestion de l'erreur de parsage */
|
||||
if( $this->modules == null ){
|
||||
$this->error = Error::ParsingFailed;
|
||||
$this->error->set(Err::ParsingFailed, 'json');
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* [1] Verification des types des parametres
|
||||
/* [4] Verification des types des parametres
|
||||
=========================================================*/
|
||||
// Type de @path
|
||||
/* (1) Section Title */
|
||||
if( !is_string($path) ){ // Si le type est incorrect
|
||||
$this->error = Error::WrongPathModule;
|
||||
$this->error->set(Err::WrongPathModule);
|
||||
return false; // On retourne FALSE, si erreur
|
||||
}
|
||||
|
||||
// Type de @data (optionnel)
|
||||
/* (2) Section Title */
|
||||
$params = (is_array($params)) ? $params : [];
|
||||
|
||||
/* (3) On définit en constante la méthode HTTP */
|
||||
define('__HTTP_METHOD__', strtoupper($_SERVER['REQUEST_METHOD']));
|
||||
|
||||
/* [2] Verification du chemin (existence module+methode)
|
||||
|
||||
/* [5] Verification du chemin (existence module+methode)
|
||||
=========================================================*/
|
||||
if( !$this->checkPath($path) ) // Verification de la coherence du chemin + attribution
|
||||
return false;
|
||||
|
||||
|
||||
|
||||
/* [3] Verification des droits
|
||||
/* [6] Verification des droits
|
||||
=========================================================*/
|
||||
if( !$this->checkPermission() ) // Si on a pas les droits
|
||||
return false;
|
||||
|
||||
|
||||
/* [4] Verification des parametres (si @type est defini)
|
||||
/* [7] Verification des parametres (si @type est defini)
|
||||
=========================================================*/
|
||||
if( !$this->checkParams($params) ){ // Verification de tous les types
|
||||
$this->error = Error::ParamError;
|
||||
if( !$this->checkParams($params) ) // Verification de tous les types
|
||||
return false;
|
||||
}
|
||||
|
||||
/* [5] Récupèration des options
|
||||
|
||||
/* [8] Récupèration des options
|
||||
=========================================================*/
|
||||
$this->buildOptions();
|
||||
|
||||
|
||||
/* [6] Construction de l'objet
|
||||
/* [9] Construction de l'objet
|
||||
=========================================================*/
|
||||
$this->params = $params;
|
||||
$this->error = Error::Success;
|
||||
$this->error->set(Err::Success);
|
||||
|
||||
return true; // On retourne que tout s'est bien passe
|
||||
|
||||
|
@ -106,9 +124,27 @@
|
|||
|
||||
|
||||
|
||||
/* DEFINIT LE SYSTEME D'AUTHENTIFICATION
|
||||
*
|
||||
* @instance<AuthSystem> Instance de type AuthSystem
|
||||
*
|
||||
* @return success<Boolean> Whether the AuthSystem is valid or not
|
||||
*
|
||||
*/
|
||||
public static function setAuthSystem($instance=null){
|
||||
/* (1) Check instance type */
|
||||
if( !($instance instanceof AuthSystem) )
|
||||
return false;
|
||||
|
||||
/* (2) Store instance */
|
||||
self::$authsystem = $instance;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* EXECUTE LE TRAITEMENT ASSOCIE ET REMPLIE LA REPONSE
|
||||
*
|
||||
* @return answer<ModuleResponse> Retourne une reponse de type <ModuleResponse> si tout s'est bien passe
|
||||
* @return answer<Response> Retourne une reponse de type <Response> si tout s'est bien passe
|
||||
*
|
||||
*/
|
||||
public function dispatch(){
|
||||
|
@ -119,84 +155,108 @@
|
|||
|
||||
/* [1] On verifie qu'aucune erreur n'a ete signalee
|
||||
=========================================================*/
|
||||
if( $this->error != Error::Success ) // si il y a une erreur
|
||||
return new ModuleResponse($this->error); // on la passe a la reponse
|
||||
if( $this->error->get() !== Err::Success ) // si il y a une erreur
|
||||
return new Response($this->error); // on la passe a la reponse
|
||||
|
||||
|
||||
/* [2] On verifie que la methode est amorcable
|
||||
/* [2] On essaie d'instancier le module
|
||||
=========================================================*/
|
||||
if( !is_callable($this->getFunctionCaller()) ){
|
||||
$this->error = Error::UncallableMethod;
|
||||
return new ModuleResponse($this->error);
|
||||
$instance = ModuleFactory::getModule($this->path['module']);
|
||||
|
||||
if( $instance === false ){
|
||||
$this->error->set(Err::UncallableModule, $this->path['module']);
|
||||
return new Response($this->error);
|
||||
}
|
||||
|
||||
/* [3] On verifie que la methode est amorcable
|
||||
=========================================================*/
|
||||
if( !is_callable([$instance, $this->getModuleMethod()]) ){
|
||||
$this->error->set(Err::UncallableMethod, preg_replace('/\w+::/i', '', $this->path['method']) );
|
||||
return new Response($this->error);
|
||||
}
|
||||
|
||||
|
||||
/* [3] On amorce la methode
|
||||
/* [4] On amorce la methode
|
||||
=========================================================*/
|
||||
$returned = call_user_func( $this->getFunctionCaller(), $this->params );
|
||||
/* (1) On lance la fonction */
|
||||
$returned = call_user_func( [$instance, $this->getModuleMethod()], $this->params );
|
||||
|
||||
/* (2) On appelle le destructeur (si défini) */
|
||||
$instance = null;
|
||||
|
||||
|
||||
/* [4] Gestion de la reponse
|
||||
/* [5] Gestion de la reponse
|
||||
=========================================================*/
|
||||
$response = new ModuleResponse($this->error);
|
||||
/* (1) On construit la réponse avec l'erreur */
|
||||
$response = new Response($this->error);
|
||||
|
||||
/* (2) On ajoute les données */
|
||||
$response->appendAll($returned);
|
||||
|
||||
// On retourne la réponse
|
||||
return $response;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* EXECUTE LE TRAITEMENT ASSOCIE ET RENVOIE UN FICHIER AVEC LE HEADER ET LE BODY SPECIFIE
|
||||
*
|
||||
*/
|
||||
public function download(){
|
||||
/* [1] On verifie qu'aucune erreur n'a ete signalee
|
||||
=========================================================*/
|
||||
if( $this->error != Error::Success ) // si il y a une erreur
|
||||
return new ModuleResponse($this->error); // on la passe a la reponse
|
||||
if( $this->error->get() !== Err::Success ) // si il y a une erreur
|
||||
return new Response($this->error); // on la passe a la reponse
|
||||
|
||||
|
||||
/* [2] On verifie que la methode est amorcable
|
||||
/* [2] On essaie d'instancier le module
|
||||
=========================================================*/
|
||||
if( !is_callable($this->getFunctionCaller()) ){
|
||||
$this->error = Error::UncallableMethod;
|
||||
return new ModuleResponse($this->error);
|
||||
$instance = ModuleFactory::getModule($this->path['module']);
|
||||
|
||||
if( $instance === false ){
|
||||
$this->error->set(Err::UncallableModule);
|
||||
return new Response($this->error);
|
||||
}
|
||||
|
||||
/* [3] On verifie que la methode est amorcable
|
||||
=========================================================*/
|
||||
if( !is_callable([$instance, $this->getModuleMethod()]) ){
|
||||
$this->error->set(Err::UncallableMethod);
|
||||
return new Response($this->error);
|
||||
}
|
||||
|
||||
|
||||
/* [3] On amorce la methode
|
||||
/* [4] On amorce la methode
|
||||
=========================================================*/
|
||||
$returned = call_user_func( $this->getFunctionCaller(), $this->params );
|
||||
/* (1) On lance la fonction */
|
||||
$returned = call_user_func( [$instance, $this->getModuleMethod()], $this->params );
|
||||
|
||||
/* (2) On appelle le destructeur (si défini) */
|
||||
$instance = null;
|
||||
|
||||
|
||||
/* [4] Vérification des erreurs et paramètres
|
||||
/* [5] Vérification des erreurs et paramètres
|
||||
=========================================================*/
|
||||
/* (1) Vérification de l'erreur retournée, si pas Success, on retourne l'erreur */
|
||||
if( isset($returned['ModuleError']) && $returned['ModuleError'] != Error::Success ){
|
||||
$this->error = $returned['ModuleError'];
|
||||
return new ModuleResponse($this->error);
|
||||
if( isset($returned['error']) && $returned['error'] instanceof Error && $returned['error']->get() != Err::Success ){
|
||||
$this->error = $returned['error'];
|
||||
return new Response($this->error);
|
||||
}
|
||||
|
||||
/* (2) Vérification du contenu, si pas défini */
|
||||
if( !isset($returned['body']) ){
|
||||
$this->error = Error::ParamError;
|
||||
return new ModuleResponse($this->error);
|
||||
$this->error->set(Err::ParamError);
|
||||
return new Response($this->error);
|
||||
}
|
||||
|
||||
/* (3) Si @headers n'est pas défini on met par défaut */
|
||||
if( !isset($returned['headers']) || !is_array($returned['headers']) )
|
||||
$returned['headers'] = [];
|
||||
|
||||
|
||||
$fromAjax = isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest';
|
||||
|
||||
/* [5] Si la requête vient d'ajax on crée un fichier temporaire et on renvoie son URL
|
||||
|
||||
/* [6.1] Si requête ajax on crée un fichier temporaire et on renvoie son URL
|
||||
=========================================================*/
|
||||
if( $fromAjax ){
|
||||
|
||||
|
@ -233,12 +293,12 @@
|
|||
fclose($tmpfile);
|
||||
chmod($tmpfnameroot, 0775);
|
||||
|
||||
$response = new ModuleResponse(Error::Success);
|
||||
$response = new Response($this->error);
|
||||
$response->append('link', $tmpfname);
|
||||
|
||||
return $response;
|
||||
|
||||
/* [6] Gestion du download direct si pas AJAX
|
||||
/* [6.2] Gestion du download direct si pas AJAX
|
||||
=========================================================*/
|
||||
}else{
|
||||
/* (1) On définit les headers */
|
||||
|
@ -253,53 +313,77 @@
|
|||
}
|
||||
|
||||
|
||||
/* DESERIALISATION A PARTIR DES DONNEES POST
|
||||
/* DESERIALISATION A PARTIR DE L'URL ET DES DONNEES POST (OPT)
|
||||
*
|
||||
* @url<String> Contenu de l'url après api/ (si existe)
|
||||
* @post<Array> Tableau des donnes $_POST => @path + @data (opt)
|
||||
* @url<String> Contenu de l'url formatté (commence à "/module/methode")
|
||||
* @post<Array> [opt] Tableau des donnes
|
||||
*
|
||||
* @return instance<ModuleRequest> Retourne un objet de type <ModuleRequest>
|
||||
* @return instance<Request> Retourne un objet de type <Request>
|
||||
*
|
||||
* @note
|
||||
* 1. `path` peut être dans l'url : /method/module
|
||||
* `path` peut être dans les données $_POST
|
||||
* 2. les données peuvent être dans l'url : /module/method/data1/data2/...
|
||||
* les données peuvent être dans les données $_POST
|
||||
*
|
||||
*/
|
||||
public static function fromPost($url, $post){
|
||||
public static function remote($url, $data=null){
|
||||
is_null($data) && ($data = []);
|
||||
|
||||
|
||||
/* [1] On verifie que le @path est renseigne
|
||||
=========================================================*/
|
||||
/* (1) Si le path est dans @url */
|
||||
$pathInUrl = count($url) > 0 && is_string($url[0]) && strlen($url[0]) > 0 && preg_match('#^([\w_-]+)/([\w_-]+)/?$#', $url[0], $urlMatches);
|
||||
$pathInUrl = is_string($url) && preg_match('#^/?([\w_-]+/[\w_-]+)(?:/?|/((?:\w+/)*(?:\w+/?)))$#', $url, $urlMatches);
|
||||
|
||||
/* (2) On récupère le @path + les arguments dans l'URL */
|
||||
if( $pathInUrl ){
|
||||
// {1} On ajoute le @path aux données //
|
||||
$data['path'] = $urlMatches[1];
|
||||
|
||||
// {2} On ajoute les arguments d'URL aux données //
|
||||
if( count($urlMatches) > 2 ){
|
||||
|
||||
$urlParams = explode('/', trim($urlMatches[2], '/'));
|
||||
foreach($urlParams as $k=>$v)
|
||||
$data["URL_$k"] = $v;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// On l'utilise pour le chemin
|
||||
if( $pathInUrl )
|
||||
$post['path'] = $urlMatches[1].'/'.$urlMatches[2];
|
||||
|
||||
/* (2) On vérifie dans tous les cas si le path existe */
|
||||
if( !isset($post['path']) )
|
||||
return new ModuleRequest();
|
||||
if( !isset($data['path']) )
|
||||
return new Request();
|
||||
|
||||
|
||||
|
||||
/* [2] On verifie que @data est renseigne
|
||||
/* [3] On met les paramètres en JSON
|
||||
=========================================================*/
|
||||
// Si variable n'existe pas, on cree un tableau vide
|
||||
$params = $post;
|
||||
/* (1) On initialise les paramètres*/
|
||||
$params = [];
|
||||
|
||||
// On retire le @path de @params
|
||||
unset($params['path']);
|
||||
/* (2) On met tous les paramètres en json (sauf @path) */
|
||||
foreach($data as $name=>$value){
|
||||
if( $name === 'path' )
|
||||
continue;
|
||||
|
||||
|
||||
|
||||
/* [3] On met les paramètres JSON en JSON (si ils décodent sans erreur)
|
||||
=========================================================*/
|
||||
foreach($params as $name=>$value){
|
||||
// {1} On met en JSON //
|
||||
$json = json_decode( $value, true );
|
||||
// Si aucune erreur, on affecte la valeur
|
||||
|
||||
// {2} Si ok -> on remplace //
|
||||
if( !is_null($json) )
|
||||
$params[$name] = $json;
|
||||
|
||||
// {3} Sinon, on laisse tel quel //
|
||||
else
|
||||
$params[$name] = $value;
|
||||
}
|
||||
/* [4] On retourne une instance de <ModuleRequest>
|
||||
|
||||
/* [4] On retourne une instance de <Request>
|
||||
=========================================================*/
|
||||
// On cree notre requete avec le token
|
||||
return new ModuleRequest($post['path'], $params);
|
||||
return new Request($data['path'], $params);
|
||||
}
|
||||
|
||||
|
||||
|
@ -317,19 +401,19 @@
|
|||
/* [1] Verification format general
|
||||
=========================================================*/
|
||||
if( !preg_match('#^([\w_-]+)/([\w_-]+)$#i', $path, $matches) ){ // Si mauvais format
|
||||
$this->error = Error::WrongPathModule;
|
||||
$this->error->set(Err::WrongPathModule);
|
||||
return false;
|
||||
}
|
||||
|
||||
// On recupere les donnes de la regex
|
||||
// On recupere les données de la regex
|
||||
$module = $matches[1];
|
||||
$method = $matches[2];
|
||||
$method = __HTTP_METHOD__.'::'.$matches[2];
|
||||
|
||||
|
||||
/* [2] Verification de l'existence du module (conf)
|
||||
=========================================================*/
|
||||
if( !array_key_exists($module, $this->modules) ){ // Si le module n'est pas specifie dans la conf
|
||||
$this->error = Error::UnknownModule;
|
||||
$this->error->set(Err::UnknownModule, $module);
|
||||
return false; // On retourne FALSE, si erreur
|
||||
}
|
||||
|
||||
|
@ -337,7 +421,7 @@
|
|||
/* [3] Verification de l'existence de la methode (conf)
|
||||
=========================================================*/
|
||||
if( array_key_exists($method, $this->modules[$module]) === false ){ // Si la methode n'est pas specifie dans la conf
|
||||
$this->error = Error::UnknownMethod;
|
||||
$this->error->set(Err::UnknownMethod, preg_replace('/\w+::/i', '', $method) );
|
||||
return false; // On retourne FALSE, si erreur
|
||||
}
|
||||
|
||||
|
@ -370,17 +454,21 @@
|
|||
$method = $this->modules[$this->path['module']][$this->path['method']];
|
||||
|
||||
// Si aucune permission n'est definie
|
||||
if( !isset($method['permissions']) ) return true;
|
||||
if( !isset($method['permissions']) || !is_array($method['permissions']) || count($method['permissions']) < 1 )
|
||||
return true;
|
||||
|
||||
|
||||
|
||||
/* [2] Vérification des permissions et de l'authentification
|
||||
=========================================================*/
|
||||
$granted = Authentification::permission($this->path['module'], $method['permissions']);
|
||||
$granted = self::$authsystem::permission( $this->path['module'], $method['permissions'] );
|
||||
|
||||
/* (1) On retourne FAUX si aucun droit n'a ete trouve */
|
||||
if( $granted !== Error::Success )
|
||||
$this->error = Error::PermissionError;
|
||||
if( $granted->get() !== Err::Success ){
|
||||
$this->error = $granted;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -403,7 +491,10 @@
|
|||
/* [1] On verifie qu'il ne manque aucun parametre
|
||||
=========================================================*/
|
||||
// Si @params n'est pas un tableau
|
||||
if( !is_array($params) ) return false;
|
||||
if( !is_array($params) ){
|
||||
$this->error->set(Err::ConfigError);
|
||||
return false;
|
||||
}
|
||||
|
||||
$method = $this->modules[$this->path['module']][$this->path['method']];
|
||||
|
||||
|
@ -418,8 +509,10 @@
|
|||
$isFile = isset($paramsdata['type']) && $paramsdata['type'] == 'FILE' && isset($_FILES[$name]);
|
||||
|
||||
/* (3) Si le paramètre est obligatoire et qu'il n'est pas donné -> erreur */
|
||||
if( !isset($params[$name]) && !$optional && !$isFile )
|
||||
if( !isset($params[$name]) && !$optional && !$isFile ){
|
||||
$this->error->set(Err::MissingParam, $name);
|
||||
return false;
|
||||
}
|
||||
|
||||
/* (4) Si le type n'est pas defini, on a pas besoin de le vérifier */
|
||||
if( !isset($paramsdata['type']) )
|
||||
|
@ -440,8 +533,10 @@
|
|||
/* (6) Si le paramètre est renseigné */
|
||||
}else
|
||||
// Si la verification est fausse, on retourne faux
|
||||
if( !Checker::run($paramsdata['type'], $params[$name]) )
|
||||
if( !Checker::run($paramsdata['type'], $params[$name]) ){
|
||||
$this->error->set(Err::WrongParam, $name, $paramsdata['type']);
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -499,11 +594,12 @@
|
|||
|
||||
/* RENVOI LE CHEMIN D'AMORCAGE DE LA METHODE
|
||||
*
|
||||
* @return path<Array> Retourne le chemin d'amorcage de la requete
|
||||
* @return method<String> Retourne le chemin d'amorcage de la method
|
||||
*
|
||||
*/
|
||||
private function getFunctionCaller(){
|
||||
return [ '\\api\\module\\'.$this->path['module'], $this->path['method'] ];
|
||||
private function getModuleMethod(){
|
||||
/* (1) On essaie de trouver le bon nom */
|
||||
return preg_replace('/\w+::/i', '', $this->path['method']);
|
||||
}
|
||||
|
||||
|
|
@ -2,47 +2,30 @@
|
|||
|
||||
namespace api\core;
|
||||
use \error\core\Error;
|
||||
use \error\core\Err;
|
||||
|
||||
|
||||
// FORMAT:
|
||||
//
|
||||
// path: "nomModule/nomMethode"
|
||||
// data1: {donnee1}
|
||||
// data2: {donnee2}
|
||||
// ...
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
|
||||
class ModuleResponse{
|
||||
class Response{
|
||||
|
||||
// Attributs prives utiles (initialisation)
|
||||
private $data;
|
||||
public $error;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* CONSTRUCTEUR D'UNE REPONSE DE MODULE
|
||||
*
|
||||
* @error<ModuleError> Erreur passee par la requete (si existe)
|
||||
*
|
||||
*/
|
||||
public function __construct($error=Error::Success){
|
||||
public function __construct($error=null){
|
||||
if( !( $error instanceof Error ) )
|
||||
$error = new Error(Err::Success);
|
||||
|
||||
$this->data = [];
|
||||
$this->error = $error;
|
||||
}
|
||||
/* AJOUTE UNE DONNEE A LA REPONSE
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* AJOUTE UNE DONNEE A LA REPONSE
|
||||
*
|
||||
* @key<String> Le nom de la valeur a ajouter
|
||||
* @value<mixed*> La valeur a ajouter
|
||||
|
@ -56,12 +39,6 @@
|
|||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* AJOUTE TOUTES LES DONNEES A LA REPONSE
|
||||
*
|
||||
* @dataset<Array> Le tableau associatif correspondant a la reponse
|
||||
|
@ -69,14 +46,15 @@
|
|||
*/
|
||||
public function appendAll($dataset){
|
||||
// Si ce n'est pas un tableau, on ne fais rien
|
||||
if( !is_array($dataset) ) return $this;
|
||||
if( !is_array($dataset) )
|
||||
return $this;
|
||||
|
||||
// Si une valeur contient une erreur
|
||||
if( array_key_exists('ModuleError', $dataset) ){
|
||||
if( array_key_exists('error', $dataset) && $dataset['error'] instanceof Error){
|
||||
// On definit cette erreur
|
||||
$this->error = $dataset['ModuleError'];
|
||||
$this->error = $dataset['error'];
|
||||
// On enleve cette entree des donnees
|
||||
unset($dataset['ModuleError']);
|
||||
unset($dataset['error']);
|
||||
}
|
||||
|
||||
// Ajoute une entree pour la cle @key et de valeur @value
|
||||
|
@ -84,14 +62,9 @@
|
|||
|
||||
return $this;
|
||||
}
|
||||
/* RECUPERE UNE DONNEE DE LA REPONSE
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* RECUPERE UNE DONNEE DE LA REPONSE
|
||||
*
|
||||
* @key<String> Le nom de la valeur a recuperer
|
||||
*
|
||||
|
@ -109,12 +82,6 @@
|
|||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* RECUPERE TOUTES LES DONNEES DE LA REPONSE
|
||||
*
|
||||
* @return data<Array> Les donnees de la reponse
|
||||
|
@ -126,10 +93,6 @@
|
|||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* SERIALISATION A PARTIR DES DONNEES
|
||||
*
|
||||
* @return json<String> Retourne les donnees serialisees
|
||||
|
@ -138,15 +101,15 @@
|
|||
public function serialize(){
|
||||
|
||||
// Code Http
|
||||
Error::setHttpCode($this->error);
|
||||
$this->error->setHttpCode();
|
||||
|
||||
// Type de contenu
|
||||
// header('Content-Type: application/json; charset=utf-8');
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
|
||||
// On rajoute l'erreur au message
|
||||
$returnData = array_merge([
|
||||
'ModuleError' => $this->error,
|
||||
'ErrorDescription' => Error::explicit($this->error)
|
||||
'error' => $this->error->get(),
|
||||
'ErrorDescription' => $this->error->explicit()
|
||||
],
|
||||
$this->data
|
||||
);
|
||||
|
@ -154,9 +117,6 @@
|
|||
return json_encode($returnData);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
|
@ -4,12 +4,19 @@
|
|||
use \database\core\DatabaseDriver;
|
||||
use \manager\sessionManager;
|
||||
use \api\core\Authentification;
|
||||
use \error\core\Error;
|
||||
use \database\core\Repo;
|
||||
use \manager\repo\cluster as clusterRepo;
|
||||
|
||||
class authentificationDefault{
|
||||
|
||||
public function __construct(){
|
||||
// Routine to execute before each call to authentificationDefault's method
|
||||
}
|
||||
|
||||
public function __destruct(){
|
||||
// Routine to execute after each call to authentificationDefault's method
|
||||
}
|
||||
|
||||
/* CONNEXION A UN ENTREPOT
|
||||
*
|
||||
* @name<String> Nom de l'entrepot
|
||||
|
@ -18,7 +25,7 @@
|
|||
* @return status<Boolean> TRUE si les crédits sont bons, sinon FALSE
|
||||
*
|
||||
*/
|
||||
public static function warehouse($params){
|
||||
public function warehouse($params){
|
||||
extract($params);
|
||||
|
||||
|
||||
|
@ -70,7 +77,7 @@
|
|||
* @return status<Boolean> TRUE si les crédits sont bons, sinon FALSE
|
||||
*
|
||||
*/
|
||||
public static function admin($params){
|
||||
public function admin($params){
|
||||
extract($params);
|
||||
|
||||
/* [0] Par défaut, on déconnecte l'administrateur
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
|
||||
class clusterDefault{
|
||||
|
||||
public function __construct(){}
|
||||
public function __destruct(){}
|
||||
|
||||
/* CREATION D'UN NOUVEL UTILISATEUR DANS LA BDD
|
||||
*
|
||||
|
@ -19,7 +21,7 @@
|
|||
* @return id_cluster<int> Retourne l'UID du groupe
|
||||
*
|
||||
*/
|
||||
public static function create($params){
|
||||
public function create($params){
|
||||
extract($params);
|
||||
|
||||
/* [2] Creation du groupe
|
||||
|
@ -35,7 +37,7 @@
|
|||
|
||||
// Si une erreur est retournee, on retourne une erreur
|
||||
if( $id_cluster === false )
|
||||
return ['ModuleError' => Error::ModuleError];
|
||||
return ['ModuleError' => new Error(Err::ModuleError)];
|
||||
|
||||
|
||||
/* [5] Gestion du retour
|
||||
|
@ -57,7 +59,7 @@
|
|||
* @return clusters<Array> Retourne la liste des groupes trouves
|
||||
*
|
||||
*/
|
||||
public static function search($params){
|
||||
public function search($params){
|
||||
extract($params);
|
||||
|
||||
$result = [];
|
||||
|
@ -101,7 +103,7 @@
|
|||
* @return clusters<Array> Liste des groupes
|
||||
*
|
||||
*/
|
||||
public static function getAll($params){
|
||||
public function getAll($params){
|
||||
extract($params);
|
||||
|
||||
$result = [];
|
||||
|
@ -144,7 +146,7 @@
|
|||
* @return cluster<Array> Groupe d'UID donne
|
||||
*
|
||||
*/
|
||||
public static function getById($params){
|
||||
public function getById($params){
|
||||
extract($params);
|
||||
|
||||
$repoMethod = ($class==0) ? 'user_cluster/getById' : 'machine_cluster/getById';
|
||||
|
@ -158,7 +160,7 @@
|
|||
|
||||
// Si aucun resultat, on retourne une erreur
|
||||
if( $answer === false )
|
||||
return [ 'ModuleError' => Error::NoMatchFound ];
|
||||
return [ 'ModuleError' => new Error(Err::NoMatchFound) ];
|
||||
|
||||
|
||||
return [ 'cluster' => $answer ];
|
||||
|
@ -176,7 +178,7 @@
|
|||
* @return cluster<Array> Groupe de nom donne
|
||||
*
|
||||
*/
|
||||
public static function getByName($params){
|
||||
public function getByName($params){
|
||||
extract($params);
|
||||
|
||||
$repoMethod = ($class==0) ? 'user_cluster/getByName' : 'machine_cluster/getByName';
|
||||
|
@ -190,7 +192,7 @@
|
|||
|
||||
// Si aucun resultat, on retourne une erreur
|
||||
if( $answer === false )
|
||||
return [ 'ModuleError' => Error::NoMatchFound ];
|
||||
return [ 'ModuleError' => new Error(Err::NoMatchFound) ];
|
||||
|
||||
|
||||
return [ 'cluster' => $answer ];
|
||||
|
@ -208,7 +210,7 @@
|
|||
* @return members<Array> Membres du groupe donne
|
||||
*
|
||||
*/
|
||||
public static function getMembers($params){
|
||||
public function getMembers($params){
|
||||
extract($params);
|
||||
|
||||
$repoMethod = ($class==0) ? 'user_cluster/getMembers' : 'machine_cluster/getMembers';
|
||||
|
@ -222,7 +224,7 @@
|
|||
|
||||
// Si aucun resultat, on retourne une erreur
|
||||
if( $answer === false )
|
||||
return [ 'ModuleError' => Error::NoMatchFound ];
|
||||
return [ 'ModuleError' => new Error(Err::NoMatchFound) ];
|
||||
|
||||
|
||||
return [ 'members' => $answer ];
|
||||
|
@ -241,7 +243,7 @@
|
|||
* @return status<Boolean> Retourne si oui ou non tout s'est bien deroule
|
||||
*
|
||||
*/
|
||||
public static function edit($params){
|
||||
public function edit($params){
|
||||
extract($params);
|
||||
|
||||
|
||||
|
@ -257,7 +259,7 @@
|
|||
|
||||
// Si on a recupere aucun utilisateur, on retourne une erreur
|
||||
if( $cluster_data === false )
|
||||
return ['ModuleError' => Error::NoMatchFound];
|
||||
return ['ModuleError' => new Error(Err::NoMatchFound)];
|
||||
|
||||
|
||||
|
||||
|
@ -298,7 +300,7 @@
|
|||
* @return status<Boolean> Retourne si oui ou non tout s'est bien deroule
|
||||
*
|
||||
*/
|
||||
public static function delete($params){
|
||||
public function delete($params){
|
||||
extract($params);
|
||||
|
||||
$repoMethod = ($class==0) ? 'user_cluster/delete' : 'machine_cluster/delete';
|
||||
|
@ -322,7 +324,7 @@
|
|||
* @id_action<int> UID de l'action en question
|
||||
*
|
||||
*/
|
||||
public static function addPermission($params){
|
||||
public function addPermission($params){
|
||||
extract($params);
|
||||
|
||||
/* [1] On crée la relation via le repo
|
||||
|
@ -346,7 +348,7 @@
|
|||
* @id_action<int> UID de l'action en question
|
||||
*
|
||||
*/
|
||||
public static function remPermission($params){
|
||||
public function remPermission($params){
|
||||
extract($params);
|
||||
|
||||
/* [1] On supprime la relation via le repo
|
||||
|
@ -371,7 +373,7 @@
|
|||
* @return permissions<Array> Liste des permissions du groupe
|
||||
*
|
||||
*/
|
||||
public static function getPermissions($params){
|
||||
public function getPermissions($params){
|
||||
extract($params);
|
||||
|
||||
/* [1] On propage au repo
|
||||
|
@ -384,7 +386,7 @@
|
|||
|
||||
// Gestion erreur
|
||||
if( !is_array($res) )
|
||||
return ['ModuleError' => Error::NoMatchFound];
|
||||
return ['ModuleError' => new Error(Err::NoMatchFound)];
|
||||
|
||||
/* (3) On retourne le résultat */
|
||||
return [ 'permissions' => $res ];
|
||||
|
@ -399,7 +401,7 @@
|
|||
* @return clusters<Array> Liste des user_cluster ayant la permission sur le groupe target
|
||||
*
|
||||
*/
|
||||
public static function getAuthenticatedClusters($params){
|
||||
public function getAuthenticatedClusters($params){
|
||||
extract($params);
|
||||
|
||||
/* [1] On propage au repo
|
||||
|
@ -410,7 +412,7 @@
|
|||
|
||||
// error
|
||||
if( !is_array($res) )
|
||||
return ['ModuleError' => Error::NoMatchFound];
|
||||
return ['ModuleError' => new Error(Err::NoMatchFound)];
|
||||
|
||||
return ['clusters' => $res];
|
||||
}
|
||||
|
|
|
@ -8,6 +8,8 @@
|
|||
|
||||
class historyDefault{
|
||||
|
||||
public function __construct(){}
|
||||
public function __destruct(){}
|
||||
|
||||
|
||||
/* CREATION D'UNE NOUVELLE ENTREE DANS LA BDD
|
||||
|
@ -20,7 +22,7 @@
|
|||
* @return status<Boolean> Retourne si oui ou non, tout s'est bien passe
|
||||
*
|
||||
*/
|
||||
public static function create($params){
|
||||
public function create($params){
|
||||
extract($params);
|
||||
|
||||
/* [1] Creation de l'utilisateur
|
||||
|
@ -35,7 +37,7 @@
|
|||
|
||||
// Si une erreur est retournee, on retourne une erreur
|
||||
if( $id_entry === false )
|
||||
return ['ModuleError' => Error::ModuleError];
|
||||
return ['ModuleError' => new Error(Err::ModuleError)];
|
||||
|
||||
|
||||
/* [2] Gestion du retour
|
||||
|
@ -56,7 +58,7 @@
|
|||
* @return users<Array> Retourne la liste des utilisateurs trouves
|
||||
*
|
||||
*/
|
||||
public static function search($params){
|
||||
public function search($params){
|
||||
extract($params);
|
||||
|
||||
// On recupere les donnees
|
||||
|
@ -77,7 +79,7 @@
|
|||
* @return history<Array> Liste des entrées de l'historique
|
||||
*
|
||||
*/
|
||||
public static function getAll(){
|
||||
public function getAll(){
|
||||
// On recupere les donnees
|
||||
$entries = new Repo('history/getAll', [ $_SESSION['WAREHOUSE']['id'] ]);
|
||||
|
||||
|
@ -92,7 +94,7 @@
|
|||
* @return status<Boolean> Retourne si oui ou non tout s'est bien deroule
|
||||
*
|
||||
*/
|
||||
public static function delete($params){
|
||||
public function delete($params){
|
||||
extract($params);
|
||||
|
||||
/* [1] On supprime l'utilisateur
|
||||
|
|
|
@ -9,6 +9,9 @@
|
|||
|
||||
class machineDefault{
|
||||
|
||||
public function __construct(){}
|
||||
public function __destruct(){}
|
||||
|
||||
|
||||
/* CREATION D'UNE NOUVELLE MACHINE DANS LA BDD
|
||||
*
|
||||
|
@ -17,7 +20,7 @@
|
|||
* @return status<Boolean> Retourne si oui ou non, tout s'est bien passe
|
||||
*
|
||||
*/
|
||||
public static function create($params){
|
||||
public function create($params){
|
||||
extract($params);
|
||||
|
||||
/* [1] Creation de la machine
|
||||
|
@ -30,7 +33,7 @@
|
|||
|
||||
// Si une erreur est retournee, on retourne une erreur
|
||||
if( $id_machine === false )
|
||||
return ['ModuleError' => Error::ModuleError];
|
||||
return ['ModuleError' => new Error(Err::ModuleError)];
|
||||
|
||||
|
||||
|
||||
|
@ -54,7 +57,7 @@
|
|||
* Renvoie FALSE si une erreur occure
|
||||
*
|
||||
*/
|
||||
public static function link($params){
|
||||
public function link($params){
|
||||
extract($params);
|
||||
|
||||
/* Creation de l'association */
|
||||
|
@ -81,7 +84,7 @@
|
|||
* Renvoie FALSE si une erreur occure
|
||||
*
|
||||
*/
|
||||
public static function unlink($params){
|
||||
public function unlink($params){
|
||||
extract($params);
|
||||
|
||||
/* Suppression de l'association */
|
||||
|
@ -106,7 +109,7 @@
|
|||
* @return machines<Array> Retourne la liste des machines trouvees
|
||||
*
|
||||
*/
|
||||
public static function search($params){
|
||||
public function search($params){
|
||||
extract($params);
|
||||
|
||||
// On recupere les donnees
|
||||
|
@ -127,7 +130,7 @@
|
|||
* @return machines<Array> Liste des machines
|
||||
*
|
||||
*/
|
||||
public static function getAll(){
|
||||
public function getAll(){
|
||||
// On recupere les donnees
|
||||
$machines = new Repo('machine/getAll', [$_SESSION['WAREHOUSE']['id']]);
|
||||
|
||||
|
@ -145,7 +148,7 @@
|
|||
* @return machine<Array> Machine d'UID donne
|
||||
*
|
||||
*/
|
||||
public static function getById($params){
|
||||
public function getById($params){
|
||||
extract($params);
|
||||
|
||||
// On recupere les donnees
|
||||
|
@ -157,7 +160,7 @@
|
|||
|
||||
// Si aucun resultat, on retourne une erreur
|
||||
if( $answer === false )
|
||||
return [ 'ModuleError' => Error::NoMatchFound ];
|
||||
return [ 'ModuleError' => new Error(Err::NoMatchFound) ];
|
||||
|
||||
|
||||
return [ 'machine' => $answer ];
|
||||
|
@ -174,7 +177,7 @@
|
|||
* @return machine<Array> Machine de name donne
|
||||
*
|
||||
*/
|
||||
public static function getByName($params){
|
||||
public function getByName($params){
|
||||
extract($params);
|
||||
|
||||
|
||||
|
@ -187,7 +190,7 @@
|
|||
|
||||
// Si aucun resultat, on retourne une erreur
|
||||
if( $answer === false )
|
||||
return [ 'ModuleError' => Error::NoMatchFound ];
|
||||
return [ 'ModuleError' => new Error(Err::NoMatchFound) ];
|
||||
|
||||
|
||||
return [ 'machine' => $answer ];
|
||||
|
@ -204,7 +207,7 @@
|
|||
* @return clusters<Array> Groupes de la machine donne
|
||||
*
|
||||
*/
|
||||
public static function getClusters($params){
|
||||
public function getClusters($params){
|
||||
extract($params);
|
||||
|
||||
// On recupere les donnees
|
||||
|
@ -216,7 +219,7 @@
|
|||
|
||||
// Si aucun resultat, on retourne une erreur
|
||||
if( $answer === false )
|
||||
return [ 'ModuleError' => Error::NoMatchFound ];
|
||||
return [ 'ModuleError' => new Error(Err::NoMatchFound) ];
|
||||
|
||||
|
||||
return [ 'clusters' => $answer ];
|
||||
|
@ -234,7 +237,7 @@
|
|||
* @return status<Boolean> Retourne si oui ou non tout s'est bien deroule
|
||||
*
|
||||
*/
|
||||
public static function edit($params){
|
||||
public function edit($params){
|
||||
extract($params);
|
||||
|
||||
|
||||
|
@ -248,7 +251,7 @@
|
|||
|
||||
// Si on a recupere aucune machine, on retourne une erreur
|
||||
if( !is_array($machine_data) )
|
||||
return ['ModuleError' => Error::NoMatchFound];
|
||||
return ['ModuleError' => new Error(Err::NoMatchFound)];
|
||||
|
||||
|
||||
|
||||
|
@ -290,7 +293,7 @@
|
|||
* @return status<Boolean> Retourne si oui ou non tout s'est bien deroule
|
||||
*
|
||||
*/
|
||||
public static function delete($params){
|
||||
public function delete($params){
|
||||
extract($params);
|
||||
|
||||
// On recupere les donnees
|
||||
|
@ -324,7 +327,7 @@
|
|||
* @return data<Array> Données d'initialisation du système
|
||||
*
|
||||
*/
|
||||
public static function init($params){
|
||||
public function init($params){
|
||||
extract($params);
|
||||
|
||||
/* [1] On récupére la liste des actions
|
||||
|
@ -459,7 +462,7 @@
|
|||
* @return data<Array> Données de retour de synchronisation
|
||||
*
|
||||
*/
|
||||
public static function sync($params){
|
||||
public function sync($params){
|
||||
extract($params);
|
||||
|
||||
/* [0] Vérification du token
|
||||
|
@ -468,7 +471,7 @@
|
|||
|
||||
// Si token incorrect, on envoie une erreur
|
||||
if( $checkToken->answer() !== true )
|
||||
return [ 'ModuleError' => Error::TokenError ];
|
||||
return [ 'ModuleError' => new Error(Err::TokenError) ];
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -2,17 +2,21 @@
|
|||
|
||||
namespace api\module;
|
||||
use \error\core\Error;
|
||||
use \error\core\Err;
|
||||
use \manager\ResourceDispatcher;
|
||||
|
||||
class module{
|
||||
|
||||
public function __construct(){}
|
||||
public function __destruct(){}
|
||||
|
||||
/* PERMET DE TESTER L'API
|
||||
*
|
||||
*/
|
||||
public static function method($params){
|
||||
public function method($params){
|
||||
|
||||
return [
|
||||
'ModuleError' => Error::Success,
|
||||
'ModuleError' => new Error(Err::Success),
|
||||
'ReceivedArguments' => $params
|
||||
];
|
||||
|
||||
|
@ -23,7 +27,7 @@
|
|||
* @return markdown<String> Description des modules
|
||||
*
|
||||
*/
|
||||
public static function markdown(){
|
||||
public function markdown(){
|
||||
/* [1] Récupération de la configuration
|
||||
=========================================================*/
|
||||
// On récupère le fichier et on le parse
|
||||
|
@ -31,7 +35,7 @@
|
|||
|
||||
// Gestion de l'erreur de parsage
|
||||
if( $modules == null )
|
||||
return [ 'ModuleError' => Error::ParsingFailed ];
|
||||
return [ 'ModuleError' => new Error(Err::ParsingFailed) ];
|
||||
|
||||
/* [2] Mise en forme de la liste des modules
|
||||
=========================================================*/
|
||||
|
@ -61,7 +65,7 @@
|
|||
/* [n] Gestion du retour
|
||||
=========================================================*/
|
||||
return [
|
||||
'ModuleError' => Error::Success,
|
||||
'ModuleError' => new Error(Err::Success),
|
||||
'headers' => [
|
||||
'Content-Type' => 'text/markdown; charset=utf-8',
|
||||
'Content-Transfer-Encoding' => 'binary',
|
||||
|
@ -79,7 +83,7 @@
|
|||
* @return apiBlueprint<String> Description des modules au format API Blueprint
|
||||
*
|
||||
*/
|
||||
public static function apiBlueprint(){
|
||||
public function apiBlueprint(){
|
||||
/* [0] Récupération de la configuration
|
||||
=========================================================*/
|
||||
// On récupère le fichier et on le parse
|
||||
|
@ -87,7 +91,7 @@
|
|||
|
||||
// Gestion de l'erreur de parsage
|
||||
if( $modules == null )
|
||||
return [ 'ModuleError' => Error::ParsingFailed ];
|
||||
return [ 'ModuleError' => new Error(Err::ParsingFailed) ];
|
||||
|
||||
|
||||
/* [1] Début du fichier custom
|
||||
|
@ -259,7 +263,7 @@
|
|||
|
||||
|
||||
return [
|
||||
'ModuleError' => Error::Success,
|
||||
'ModuleError' => new Error(Err::Success),
|
||||
'headers' => [
|
||||
'Content-Type' => 'application/octet-stream; charset=utf-8',
|
||||
'Content-Transfer-Encoding' => 'binary',
|
||||
|
|
|
@ -8,6 +8,8 @@
|
|||
|
||||
class userDefault{
|
||||
|
||||
public function __construct(){}
|
||||
public function __destruct(){}
|
||||
|
||||
/* CREATION D'UN NOUVEL UTILISATEUR DANS LA BDD
|
||||
*
|
||||
|
@ -20,7 +22,7 @@
|
|||
* @return status<Boolean> Retourne si oui ou non, tout s'est bien passe
|
||||
*
|
||||
*/
|
||||
public static function create($params){
|
||||
public function create($params){
|
||||
extract($params);
|
||||
|
||||
/* [1] Creation de l'utilisateur
|
||||
|
@ -37,7 +39,7 @@
|
|||
|
||||
// Si une erreur est retournee, on retourne une erreur
|
||||
if( $id_user === false )
|
||||
return ['ModuleError' => Error::ModuleError];
|
||||
return ['ModuleError' => new Error(Err::ModuleError)];
|
||||
|
||||
|
||||
/* [2] Gestion du retour
|
||||
|
@ -60,7 +62,7 @@
|
|||
* Renvoie FALSE si une erreur occure
|
||||
*
|
||||
*/
|
||||
public static function link($params){
|
||||
public function link($params){
|
||||
extract($params);
|
||||
|
||||
/* [1] Creation de l'association
|
||||
|
@ -88,7 +90,7 @@
|
|||
* Renvoie FALSE si une erreur occure
|
||||
*
|
||||
*/
|
||||
public static function unlink($params){
|
||||
public function unlink($params){
|
||||
extract($params);
|
||||
|
||||
/* [1] Suppression de l'association
|
||||
|
@ -114,7 +116,7 @@
|
|||
* @return users<Array> Retourne la liste des utilisateurs trouves
|
||||
*
|
||||
*/
|
||||
public static function search($params){
|
||||
public function search($params){
|
||||
extract($params);
|
||||
|
||||
// On recupere les donnees
|
||||
|
@ -135,7 +137,7 @@
|
|||
* @return utilisateurs<Array> Liste des utilisateurs
|
||||
*
|
||||
*/
|
||||
public static function getAll(){
|
||||
public function getAll(){
|
||||
// On recupere les donnees
|
||||
$users = new Repo('user/getAll', [ $_SESSION['WAREHOUSE']['id'] ]);
|
||||
|
||||
|
@ -153,7 +155,7 @@
|
|||
* @return utilisateur<Array> Utilisateur d'UID donne
|
||||
*
|
||||
*/
|
||||
public static function getById($params){
|
||||
public function getById($params){
|
||||
extract($params);
|
||||
|
||||
// On recupere les donnees
|
||||
|
@ -165,7 +167,7 @@
|
|||
|
||||
// Si aucun resultat, on retourne une erreur
|
||||
if( $answer === false )
|
||||
return [ 'ModuleError' => Error::NoMatchFound ];
|
||||
return [ 'ModuleError' => new Error(Err::NoMatchFound) ];
|
||||
|
||||
|
||||
return [ 'user' => $answer ];
|
||||
|
@ -182,7 +184,7 @@
|
|||
* @return utilisateur<Array> Utilisateur de code donne
|
||||
*
|
||||
*/
|
||||
public static function getByCode($params){
|
||||
public function getByCode($params){
|
||||
extract($params);
|
||||
|
||||
// On recupere les donnees
|
||||
|
@ -194,7 +196,7 @@
|
|||
|
||||
// Si aucun resultat, on retourne une erreur
|
||||
if( $answer === false )
|
||||
return [ 'ModuleError' => Error::NoMatchFound ];
|
||||
return [ 'ModuleError' => new Error(Err::NoMatchFound) ];
|
||||
|
||||
|
||||
return [ 'user' => $answer ];
|
||||
|
@ -211,7 +213,7 @@
|
|||
* @return utilisateur<Array> Utilisateur d'username donne
|
||||
*
|
||||
*/
|
||||
public static function getByUsername($params){
|
||||
public function getByUsername($params){
|
||||
extract($params);
|
||||
|
||||
|
||||
|
@ -224,7 +226,7 @@
|
|||
|
||||
// Si aucun resultat, on retourne une erreur
|
||||
if( $answer === false )
|
||||
return [ 'ModuleError' => Error::NoMatchFound ];
|
||||
return [ 'ModuleError' => new Error(Err::NoMatchFound) ];
|
||||
|
||||
|
||||
return [ 'user' => $answer ];
|
||||
|
@ -241,7 +243,7 @@
|
|||
* @return clusters<Array> Groupes de l'utilisateur donne
|
||||
*
|
||||
*/
|
||||
public static function getClusters($params){
|
||||
public function getClusters($params){
|
||||
extract($params);
|
||||
|
||||
|
||||
|
@ -254,7 +256,7 @@
|
|||
|
||||
// Si aucun resultat, on retourne une erreur
|
||||
if( $answer === false )
|
||||
return [ 'ModuleError' => Error::NoMatchFound ];
|
||||
return [ 'ModuleError' => new Error(Err::NoMatchFound) ];
|
||||
|
||||
|
||||
return [ 'clusters' => $answer ];
|
||||
|
@ -276,7 +278,7 @@
|
|||
* @return status<Boolean> Retourne si oui ou non tout s'est bien deroule
|
||||
*
|
||||
*/
|
||||
public static function edit($params){
|
||||
public function edit($params){
|
||||
extract($params);
|
||||
|
||||
/* [1] On verifie l'existence de l'utilisateur
|
||||
|
@ -289,7 +291,7 @@
|
|||
|
||||
// Si on a recupere aucun utilisateur, on retourne une erreur
|
||||
if( !is_array($user_data) )
|
||||
return ['ModuleError' => Error::NoMatchFound];
|
||||
return ['ModuleError' => new Error(Err::NoMatchFound)];
|
||||
|
||||
|
||||
|
||||
|
@ -343,7 +345,7 @@
|
|||
* @return status<Boolean> Retourne si oui ou non tout s'est bien deroule
|
||||
*
|
||||
*/
|
||||
public static function delete($params){
|
||||
public function delete($params){
|
||||
extract($params);
|
||||
|
||||
/* [1] On supprime l'utilisateur
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
namespace database\core;
|
||||
use \error\core\Error;
|
||||
use \error\core\Err;
|
||||
|
||||
|
||||
class DataBaseDriver{
|
||||
|
@ -62,11 +63,11 @@
|
|||
$this->pdo = new \PDO('mysql:host='.$this->host.';dbname='.$this->dbname, $this->username, $this->password, [\PDO::ATTR_TIMEOUT => 10]);
|
||||
|
||||
// On signale que tout s'est bien passe
|
||||
$this->error = Error::Success;
|
||||
$this->error = new Error(Err::Success);
|
||||
|
||||
}catch(Exception $e){
|
||||
// On signale qu'il y a une erreur
|
||||
$this->error = Error::PDOConnection;
|
||||
$this->error = new Error(Err::PDOConnection);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
namespace database\core;
|
||||
|
||||
use \error\core\Error;
|
||||
use \error\core\Err;
|
||||
use \api\core\Authentification;
|
||||
|
||||
|
||||
|
@ -50,7 +51,7 @@
|
|||
|
||||
// Si pas parametre manquant, on quitte
|
||||
if( $path == null ){
|
||||
$this->error = Error::MissingPath;
|
||||
$this->error = new Error(Err::MissingPath);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -61,7 +62,7 @@
|
|||
|
||||
// Gestion de l'erreur de parsage
|
||||
if( $this->repositories == null ){
|
||||
$this->error = Error::ParsingFailed;
|
||||
$this->error = new Error(Err::ParsingFailed);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -71,7 +72,7 @@
|
|||
=========================================================*/
|
||||
// Type de @path
|
||||
if( !is_string($path) ){ // Si le type est incorrect
|
||||
$this->error = Error::WrongPathRepo;
|
||||
$this->error = new Error(Err::WrongPathRepo);
|
||||
return false; // On retourne FALSE, si erreur
|
||||
}
|
||||
|
||||
|
@ -89,7 +90,7 @@
|
|||
/* [3] Construction de l'objet
|
||||
=========================================================*/
|
||||
$this->params = $params;
|
||||
$this->error = Error::Success;
|
||||
$this->error = new Error(Err::Success);
|
||||
|
||||
/* [4] Enregistrement de la reponse
|
||||
=========================================================*/
|
||||
|
@ -105,7 +106,7 @@
|
|||
|
||||
|
||||
public function answer(){
|
||||
if( $this->error != Error::Success )
|
||||
if( $this->error != new Error(Err::Success) )
|
||||
return false;
|
||||
|
||||
return $this->answer;
|
||||
|
@ -121,14 +122,14 @@
|
|||
public function dispatch(){
|
||||
/* [1] On verifie qu'aucune erreur n'a ete signalee
|
||||
=========================================================*/
|
||||
if( $this->error != Error::Success ) // si il y a une erreur
|
||||
if( $this->error != new Error(Err::Success) ) // si il y a une erreur
|
||||
return false; // on la passe a la reponse
|
||||
|
||||
|
||||
/* [2] On verifie que la methode est amorcable
|
||||
=========================================================*/
|
||||
if( !is_callable($this->getFunctionCaller()) ){
|
||||
$this->error = Error::UncallableMethod;
|
||||
$this->error = new Error(Err::UncallableMethod);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -151,7 +152,7 @@
|
|||
/* [1] Verification format general
|
||||
=========================================================*/
|
||||
if( !preg_match('#^([\w_-]+)/([\w_-]+)$#i', $path, $matches) ){ // Si mauvais format
|
||||
$this->error = Error::WrongPathRepo;
|
||||
$this->error = new Error(Err::WrongPathRepo);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -162,14 +163,14 @@
|
|||
/* [2] Verification de l'existence du repo (conf)
|
||||
=========================================================*/
|
||||
if( !array_key_exists($repository, $this->repositories) ){ // Si le repo n'est pas specifie dans la conf
|
||||
$this->error = Error::UnknownRepo;
|
||||
$this->error = new Error(Err::UnknownRepo);
|
||||
return false; // On retourne FALSE, si erreur
|
||||
}
|
||||
|
||||
/* [3] Verification de l'existence de la methode (conf)
|
||||
=========================================================*/
|
||||
if( array_search($method, $this->repositories[$repository]) === false ){ // Si la methode n'est pas specifie dans la conf
|
||||
$this->error = Error::UnknownMethod;
|
||||
$this->error = new Error(Err::UnknownMethod);
|
||||
return false; // On retourne FALSE, si erreur
|
||||
}
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
namespace database\repo;
|
||||
use \database\core\DatabaseDriver;
|
||||
use \database\core\Repo;
|
||||
use \error\core\Error;
|
||||
use \manager\repo\cluster as clusterRepo;
|
||||
|
||||
class action extends parentRepo{
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
namespace database\repo;
|
||||
use \database\core\DatabaseDriver;
|
||||
use \database\core\Repo;
|
||||
use \error\core\Error;
|
||||
use \error\core\Err;
|
||||
use \orm\core\Table;
|
||||
use \orm\core\Rows;
|
||||
|
||||
|
@ -35,7 +35,7 @@
|
|||
|
||||
/* (2) Si aucun résultat, on retourne une erreur */
|
||||
if( $targetCheck === false )
|
||||
return Error::NoMatchFound;
|
||||
return Err::NoMatchFound;
|
||||
|
||||
|
||||
/* [2] On vérifie l'existance du groupe 'source'
|
||||
|
@ -49,7 +49,7 @@
|
|||
|
||||
/* (2) Si aucun résultat, on retourne une erreur */
|
||||
if( $sourceCheck === false )
|
||||
return Error::NoMatchFound;
|
||||
return Err::NoMatchFound;
|
||||
|
||||
|
||||
/* [3] On vérifie l'existance de l'action
|
||||
|
@ -60,7 +60,7 @@
|
|||
|
||||
/* (2) Si aucun résultat, on retourne une erreur */
|
||||
if( $actionCheck === false )
|
||||
return Error::NoMatchFound;
|
||||
return Err::NoMatchFound;
|
||||
|
||||
|
||||
/* [4] On vérifie que l'entrée n'existe pas déja
|
||||
|
@ -74,7 +74,7 @@
|
|||
/* (3) Si les données sont identiques pour au moins une entrée, on retourne un succès */
|
||||
foreach($checkAlready as $s=>$sameTarget)
|
||||
if( $sameTarget['id_source'] == $id_source && $sameTarget['id_action'] == $id_action )
|
||||
return Error::Success;
|
||||
return Err::Success;
|
||||
|
||||
}
|
||||
|
||||
|
@ -92,10 +92,10 @@
|
|||
|
||||
/* (2) Si erreur SQL, on retourne une erreur */
|
||||
if( !$inserted )
|
||||
return Error::RepoError;
|
||||
return Err::RepoError;
|
||||
|
||||
|
||||
return Error::Success;
|
||||
return Err::Success;
|
||||
}
|
||||
|
||||
|
||||
|
@ -134,7 +134,7 @@
|
|||
|
||||
/* (3) Si on a pas trouvé, on retourne une erreur */
|
||||
if( is_null($existingId) )
|
||||
return Error::NoMatchFound;
|
||||
return Err::NoMatchFound;
|
||||
|
||||
|
||||
/* [2] On supprime la action
|
||||
|
@ -150,10 +150,10 @@
|
|||
|
||||
/* (2) Si erreur SQL, on retourne une erreur */
|
||||
if( !$deleted || self::getById($existingId) !== false )
|
||||
return Error::RepoError;
|
||||
return Err::RepoError;
|
||||
|
||||
|
||||
return Error::Success;
|
||||
return Err::Success;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
namespace database\repo;
|
||||
use \database\core\DatabaseDriver;
|
||||
use \database\core\Repo;
|
||||
use \error\core\Error;
|
||||
use \orm\core\Table;
|
||||
use \orm\core\Rows;
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
namespace database\repo;
|
||||
use \database\core\DatabaseDriver;
|
||||
use \database\core\Repo;
|
||||
use \error\core\Error;
|
||||
use \manager\repo\cluster as clusterRepo;
|
||||
|
||||
class global_state extends parentRepo{
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
namespace database\repo;
|
||||
use \database\core\DatabaseDriver;
|
||||
use \error\core\Error;
|
||||
use \error\core\Err;
|
||||
use \database\core\Repo;
|
||||
use \orm\core\Table;
|
||||
use \orm\core\Rows;
|
||||
|
@ -76,7 +76,7 @@
|
|||
|
||||
// Si le groupe n'existe pas
|
||||
if( $cluster === false )
|
||||
return Error::NoMatchFound;
|
||||
return Err::NoMatchFound;
|
||||
|
||||
/* (2) On récupère l'utilisateur */
|
||||
$machineR = Table::get('machine')
|
||||
|
@ -88,7 +88,7 @@
|
|||
|
||||
// Si l'utilisateur n'existe pas
|
||||
if( $machine === false )
|
||||
return Error::NoMatchFound;
|
||||
return Err::NoMatchFound;
|
||||
|
||||
/* (3) On vérifie qu'il n'y a pas déja d'appartenance */
|
||||
$cluster_mergeR = Table::get('machine_cluster_merge')
|
||||
|
@ -100,7 +100,7 @@
|
|||
|
||||
// Si la relation existe déja, on ne fait rien
|
||||
if( $cluster_merge_exists !== false )
|
||||
return Error::Success;
|
||||
return Err::Success;
|
||||
|
||||
|
||||
|
||||
|
@ -117,13 +117,13 @@
|
|||
|
||||
/* (2) Si erreur, on la retourne */
|
||||
if( !$inserted )
|
||||
return Error::RepoError;
|
||||
return Err::RepoError;
|
||||
|
||||
/* (3) On vérifie quand même que l'entrée existe */
|
||||
$cluster_merge_inserted = $cluster_mergeR->fetch();
|
||||
|
||||
/* (4) Sinon, on renvoie que tout s'est bien passé */
|
||||
return is_array($cluster_merge_inserted) ? Error::Success : Error::RepoError;
|
||||
return is_array($cluster_merge_inserted) ? Err::Success : Err::RepoError;
|
||||
|
||||
}
|
||||
|
||||
|
@ -150,7 +150,7 @@
|
|||
|
||||
/* (2) Si on ne trouve rien */
|
||||
if( $get_merge_id === false )
|
||||
return Error::NoMatchFound;
|
||||
return Err::NoMatchFound;
|
||||
|
||||
|
||||
|
||||
|
@ -162,15 +162,15 @@
|
|||
|
||||
// Si erreur
|
||||
if( !$deleted )
|
||||
return Error::RepoError;
|
||||
return Err::RepoError;
|
||||
|
||||
/* [2] On verifie que l'association n'existe plus
|
||||
=========================================================*/
|
||||
if( self::getMerge($id_warehouse, $id_machine_cluster, $id_machine) !== false )
|
||||
return Error::RepoError;
|
||||
return Err::RepoError;
|
||||
|
||||
|
||||
return Error::Success;
|
||||
return Err::Success;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
namespace database\repo;
|
||||
use \database\core\DatabaseDriver;
|
||||
use \database\core\Repo;
|
||||
use \error\core\Error;
|
||||
use \manager\repo\cluster as clusterRepo;
|
||||
|
||||
class pin_merge extends parentRepo{
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
namespace database\repo;
|
||||
use \database\core\DatabaseDriver;
|
||||
use \database\core\Repo;
|
||||
use \error\core\Error;
|
||||
use \manager\repo\cluster as clusterRepo;
|
||||
|
||||
class state extends parentRepo{
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
namespace database\repo;
|
||||
use \database\core\DatabaseDriver;
|
||||
use \error\core\Error;
|
||||
use \error\core\Err;
|
||||
use \database\core\Repo;
|
||||
use \orm\core\Table;
|
||||
use \orm\core\Rows;
|
||||
|
@ -76,7 +76,7 @@
|
|||
|
||||
// Si le groupe n'existe pas
|
||||
if( $cluster === false )
|
||||
return Error::NoMatchFound;
|
||||
return Err::NoMatchFound;
|
||||
|
||||
/* (2) On récupère l'utilisateur */
|
||||
$userR = Table::get('user')
|
||||
|
@ -88,7 +88,7 @@
|
|||
|
||||
// Si l'utilisateur n'existe pas
|
||||
if( $user === false )
|
||||
return Error::NoMatchFound;
|
||||
return Err::NoMatchFound;
|
||||
|
||||
/* (3) On vérifie qu'il n'y a pas déja d'appartenance */
|
||||
$cluster_mergeR = Table::get('user_cluster_merge')
|
||||
|
@ -100,7 +100,7 @@
|
|||
|
||||
// Si la relation existe déja, on ne fait rien
|
||||
if( $cluster_merge_exists !== false )
|
||||
return Error::Success;
|
||||
return Err::Success;
|
||||
|
||||
|
||||
|
||||
|
@ -117,13 +117,13 @@
|
|||
|
||||
/* (2) Si erreur, on la retourne */
|
||||
if( !$inserted )
|
||||
return Error::RepoError;
|
||||
return Err::RepoError;
|
||||
|
||||
/* (3) On vérifie quand même que l'entrée existe */
|
||||
$cluster_merge_inserted = $cluster_mergeR->fetch();
|
||||
|
||||
/* (4) Sinon, on renvoie que tout s'est bien passé */
|
||||
return is_array($cluster_merge_inserted) ? Error::Success : Error::RepoError;
|
||||
return is_array($cluster_merge_inserted) ? Err::Success : Err::RepoError;
|
||||
}
|
||||
|
||||
|
||||
|
@ -149,7 +149,7 @@
|
|||
|
||||
/* (2) Si on ne trouve rien */
|
||||
if( $get_merge_id == false )
|
||||
return Error::NoMatchFound;
|
||||
return Err::NoMatchFound;
|
||||
|
||||
|
||||
|
||||
|
@ -161,15 +161,15 @@
|
|||
|
||||
// Si erreur
|
||||
if( !$deleted )
|
||||
return Error::RepoError;
|
||||
return Err::RepoError;
|
||||
|
||||
/* [2] On verifie que l'association n'existe plus
|
||||
=========================================================*/
|
||||
if( self::getMerge($id_warehouse, $id_user_cluster, $id_user) !== false )
|
||||
return Error::ModuleError;
|
||||
return Err::ModuleError;
|
||||
|
||||
|
||||
return Error::Success;
|
||||
return Err::Success;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,109 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace error\core;
|
||||
|
||||
|
||||
class Err{
|
||||
/* [1] Success
|
||||
=========================================================*/
|
||||
const Success = 0;
|
||||
|
||||
|
||||
/* [2] Fichiers / Ressources
|
||||
=========================================================*/
|
||||
/* (1) Parsage json/xml */
|
||||
const ParsingFailed = 1;
|
||||
/* (2) Fichier inexistant */
|
||||
const UnreachableResource = 2;
|
||||
/* (3) Erreur d'upload */
|
||||
const UploadError = 3;
|
||||
/* (4) Mauvais format de fichier */
|
||||
const FormatError = 4;
|
||||
|
||||
|
||||
/* [3] Permissions
|
||||
=========================================================*/
|
||||
/* (1) Token inexistant ou incorrect */
|
||||
const TokenError = 5;
|
||||
/* (2) Permission non autorisée */
|
||||
const PermissionError = 6;
|
||||
|
||||
|
||||
|
||||
|
||||
/* [4] API
|
||||
=========================================================*/
|
||||
/* (1) Le module n'est pas activé */
|
||||
const DisabledModule = 7;
|
||||
|
||||
/* (2) Le @path n'est pas renseigne */
|
||||
const MissingPath = 8;
|
||||
/* (3) Verification de la coherence du chemin (existe dans la conf) */
|
||||
const WrongPathModule = 9;
|
||||
|
||||
/* (4) Module non specifie dans la conf */
|
||||
const UnknownModule = 10;
|
||||
/* (5) Methode non specifie pour ce Module dans la conf */
|
||||
const UnknownMethod = 11;
|
||||
|
||||
/* (6) Module non amorcable */
|
||||
const UncallableModule = 12;
|
||||
/* (7) Methode non amorcable */
|
||||
const UncallableMethod = 13;
|
||||
|
||||
/* (8) Erreur méthode HTTP */
|
||||
const UnknownHttpMethod = 14;
|
||||
|
||||
/* (9) Erreur de configuration */
|
||||
const ConfigError = 15;
|
||||
/* (10) Paramètre manquant */
|
||||
const MissingParam = 16;
|
||||
/* (11) Paramètre incorrect */
|
||||
const WrongParam = 17;
|
||||
/* (12) Erreur dans le traitement */
|
||||
const ModuleError = 18;
|
||||
|
||||
|
||||
/* [5] Database
|
||||
=========================================================*/
|
||||
/* (1) Base de données
|
||||
---------------------------------------------------------*/
|
||||
/* (1) Erreur lors de la creation d'un objet PDO (connection) */
|
||||
const PDOConnection = 19;
|
||||
|
||||
/* (2) Repositories
|
||||
---------------------------------------------------------*/
|
||||
/* (1) Verification de la coherence du chemin (existe dans la conf) */
|
||||
const WrongPathRepo = 20;
|
||||
|
||||
/* (2) Module non specifie dans la conf */
|
||||
const UnknownRepo = 21;
|
||||
|
||||
/* (3) Erreur dans le traitement */
|
||||
const RepoError = 22;
|
||||
|
||||
/* (3) ORM
|
||||
---------------------------------------------------------*/
|
||||
/* (1) Table n'existe pas */
|
||||
const UnknownTable = 23;
|
||||
/* (2) Pas permissions de lire le schéma */
|
||||
const NotAllowedSchema = 24;
|
||||
|
||||
|
||||
/* [6] Erreurs diverses
|
||||
=========================================================*/
|
||||
/* (1) Aucune donnée trouvée */
|
||||
const NoMatchFound = 25;
|
||||
|
||||
/* (2) Mauvais chemin de template */
|
||||
const UnknownTemplate = 26;
|
||||
|
||||
/* (3) géolocalisation échouée */
|
||||
const UnknownAddress = 27;
|
||||
|
||||
/* (4) Erreur inconnue */
|
||||
const UnknownError = 28;
|
||||
}
|
||||
|
||||
?>
|
|
@ -3,148 +3,189 @@
|
|||
|
||||
namespace error\core;
|
||||
|
||||
use \error\core\Err;
|
||||
|
||||
class Error{
|
||||
|
||||
/* SUCCESS */
|
||||
const Success = 0;
|
||||
private $error = null;
|
||||
private $arguments = [];
|
||||
|
||||
/* Parsage json */
|
||||
const ParsingFailed = 1;
|
||||
/* ERROR CONSTRUCTOR
|
||||
*
|
||||
* @error<const> Const error
|
||||
* @arg1<String> [OPT] Argument 1
|
||||
* @arg2<String> [OPT] Argument 2
|
||||
* @arg...<String> [OPT] Argument ...
|
||||
*
|
||||
* @return instance<Error> Error instance
|
||||
*
|
||||
*/
|
||||
public function __construct($const){
|
||||
call_user_func_array([$this, 'set'], func_get_args());
|
||||
}
|
||||
|
||||
/* ResourceDispatcher */
|
||||
/* ERROR GETTER
|
||||
*
|
||||
* @return Err<Err::Constant> Error
|
||||
*
|
||||
*/
|
||||
public function get(){ return $this->error; }
|
||||
|
||||
// Drapeaux invalides
|
||||
const InvalidFlags = 2;
|
||||
/* ERROR SETTER
|
||||
*
|
||||
* @error<const> Const error
|
||||
* @arg1<String> [OPT] Argument 1
|
||||
* @arg2<String> [OPT] Argument 2
|
||||
* @arg...<String> [OPT] Argument ...
|
||||
*
|
||||
* @return instance<Error> Error instance
|
||||
*
|
||||
*/
|
||||
public function set($const){
|
||||
/* [1] On découpe les arguments
|
||||
=========================================================*/
|
||||
/* (1) On récupère l'erreur */
|
||||
$this->error = !is_numeric($const) ? Err::UnknownError : $const;
|
||||
|
||||
// Fichier inexistant
|
||||
const UnreachableResource = 3;
|
||||
|
||||
|
||||
/* ModuleRequest */
|
||||
|
||||
// Le module n'est pas activé
|
||||
const DisabledModule = 4;
|
||||
|
||||
// Le @path n'est pas renseigne
|
||||
const MissingPath = 5;
|
||||
|
||||
// Verification de la coherence du chemin (existe dans la conf)
|
||||
const WrongPathModule = 6;
|
||||
|
||||
// Module non specifie dans la conf
|
||||
const UnknownModule = 7;
|
||||
|
||||
// Methode non specifie pour ce Module dans la conf
|
||||
const UnknownMethod = 8;
|
||||
|
||||
// Methode inamorcable
|
||||
const UncallableMethod = 9;
|
||||
|
||||
// Erreur de parametre(s)
|
||||
const ParamError = 10;
|
||||
|
||||
// Erreur dans le traitement
|
||||
const ModuleError = 11;
|
||||
|
||||
/* Repo */
|
||||
|
||||
// Verification de la coherence du chemin (existe dans la conf)
|
||||
const WrongPathRepo = 12;
|
||||
|
||||
// Module non specifie dans la conf
|
||||
const UnknownRepo = 13;
|
||||
|
||||
// Erreur dans le traitement
|
||||
const RepoError = 14;
|
||||
|
||||
/* Database */
|
||||
|
||||
// Erreur lors de la creation d'un objet PDO (connection)
|
||||
const PDOConnection = 15;
|
||||
|
||||
/* API token */
|
||||
// Token inexistant ou faux
|
||||
const TokenError = 16;
|
||||
|
||||
const PermissionError = 17;
|
||||
|
||||
/* Erreur d'UPLOAD */
|
||||
const UploadError = 18;
|
||||
|
||||
// Mauvais format de fichier
|
||||
const FormatError = 19;
|
||||
|
||||
/* Erreur de contenu */
|
||||
// Aucune donnée trouvée
|
||||
const NoMatchFound = 20;
|
||||
|
||||
/* Erreur de vues */
|
||||
// Mauvais chemin de template
|
||||
const UnknownTemplate = 21;
|
||||
|
||||
/* Erreur de l'ORM */
|
||||
// Table n'existe pas
|
||||
const UnknownTable = 22;
|
||||
|
||||
// Pas permissions de lire le schéma
|
||||
const NotAllowedSchema = 23;
|
||||
|
||||
/* Erreur au niveau javascript */
|
||||
//const JavascriptError = 20; // -> géré en js
|
||||
/* (2) On récupère les arguments */
|
||||
$this->arguments = array_slice(func_get_args(), 1);
|
||||
}
|
||||
|
||||
|
||||
/* 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 deroulé."; break;
|
||||
public function explicit(){
|
||||
switch($this->error){
|
||||
case Err::Success: return $this->Success(); break;
|
||||
case Err::ParsingFailed: return $this->ParsingFailed(); break;
|
||||
case Err::UnreachableResource: return $this->UnreachableResource(); break;
|
||||
case Err::UploadError: return $this->UploadError(); break;
|
||||
case Err::FormatError: return $this->FormatError(); break;
|
||||
case Err::TokenError: return $this->TokenError(); break;
|
||||
case Err::PermissionError: return $this->PermissionError(); break;
|
||||
case Err::DisabledModule: return $this->DisabledModule(); break;
|
||||
case Err::MissingPath: return $this->MissingPath(); break;
|
||||
case Err::WrongPathModule: return $this->WrongPathModule(); break;
|
||||
case Err::UnknownModule: return $this->UnknownModule(); break;
|
||||
case Err::UnknownMethod: return $this->UnknownMethod(); break;
|
||||
case Err::UncallableModule: return $this->UncallableModule(); break;
|
||||
case Err::UncallableMethod: return $this->UncallableMethod(); break;
|
||||
case Err::UnknownHttpMethod: return $this->UnknownHttpMethod(); break;
|
||||
case Err::ConfigError: return $this->ConfigError(); break;
|
||||
case Err::MissingParam: return $this->MissingParam(); break;
|
||||
case Err::WrongParam: return $this->WrongParam(); break;
|
||||
case Err::ModuleError: return $this->ModuleError(); break;
|
||||
case Err::PDOConnection: return $this->PDOConnection(); break;
|
||||
case Err::WrongPathRepo: return $this->WrongPathRepo(); break;
|
||||
case Err::UnknownRepo: return $this->UnknownRepo(); break;
|
||||
case Err::RepoError: return $this->RepoError(); break;
|
||||
case Err::UnknownTable: return $this->UnknownTable(); break;
|
||||
case Err::NotAllowedSchema: return $this->NotAllowedSchema(); break;
|
||||
case Err::NoMatchFound: return $this->NoMatchFound(); break;
|
||||
case Err::UnknownTemplate: return $this->UnknownTemplate(); break;
|
||||
case Err::UnknownAddress: return $this->UnknownAddress(); break;
|
||||
case Err::UnknownError: return $this->UnknownError(); break;
|
||||
|
||||
case self::ParsingFailed: return "La lecture du fichier JSON ou XML a echouée."; break;
|
||||
|
||||
case self::InvalidFlags: return "Les spécifications (drapeaux) sont incorrects."; break;
|
||||
case self::UnreachableResource: return "La ressource n'existe pas (404)."; break;
|
||||
case self::DisabledModule: return "Vous n'avez pas accès au module demandé."; break;
|
||||
case self::MissingPath: return "Le chemin de délégation n'a pas été renseigné."; break;
|
||||
case self::WrongPathModule: return "Le chemin de délégation est incorrect ('nomModule/nomMethode')."; break;
|
||||
case self::WrongPathRepo: return "Le chemin de délégation 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 méthode n'existe pas."; break;
|
||||
case self::UncallableMethod: return "Le méthode n'est pas amorçable."; break;
|
||||
|
||||
case self::ParamError: return "Un ou plusieurs paramètres sont manquants ou incorrects."; break;
|
||||
case self::ModuleError: return "Erreur lors du traitement du module."; break;
|
||||
case self::RepoError: return "Erreur lors du traitement du repo."; break;
|
||||
|
||||
case self::PDOConnection: return "La connexion avec la base de données a echouée."; break;
|
||||
|
||||
case self::TokenError: return "Le token de connection est absent, érroné ou expiré."; break;
|
||||
case self::PermissionError: return "Vous n'avez pas la permission d'effectuer cette action."; break;
|
||||
case self::UploadError: return "Une erreur d'upload est survenue."; break;
|
||||
case self::FormatError: return "Le fichier n'est pas au bon format."; break;
|
||||
|
||||
case self::NoMatchFound: return "Aucun résultat correspondant à la requête."; break;
|
||||
|
||||
case self::UnknownTemplate: return "Modèle inconnu."; break;
|
||||
|
||||
default: return "Erreur inconnue..."; break;
|
||||
default: return $this->UnknownDebugError(); break;
|
||||
}
|
||||
|
||||
// Erreur inconnue
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
public static function setHttpCode($error){
|
||||
http_response_code( $error == self::Success ? 200 : 417 );
|
||||
private function Success(){
|
||||
return 'all right';
|
||||
}private function ParsingFailed(){
|
||||
if( count($this->arguments) > 0 )
|
||||
return $this->arguments[0].' parsing failed';
|
||||
else
|
||||
return 'parsing failed';
|
||||
}private function UnreachableResource(){
|
||||
return 'unreachable resource';
|
||||
}private function UploadError(){
|
||||
return 'upload error';
|
||||
}private function FormatError(){
|
||||
return 'format error';
|
||||
}private function TokenError(){
|
||||
return 'bad or expired token';
|
||||
}private function PermissionError(){
|
||||
return 'permission error';
|
||||
}private function DisabledModule(){
|
||||
return 'disabled module';
|
||||
}private function MissingPath(){
|
||||
return 'missing path';
|
||||
}private function WrongPathModule(){
|
||||
return 'wrong module\'s path';
|
||||
}private function UnknownModule(){
|
||||
if( count($this->arguments) > 0 )
|
||||
return 'unknown module \''.$this->arguments[0].'\'';
|
||||
else
|
||||
return 'unknown module';
|
||||
}private function UnknownMethod(){
|
||||
if( count($this->arguments) > 0 )
|
||||
return 'unknown method \''.$this->arguments[0].'\'';
|
||||
else
|
||||
return 'unknown method';
|
||||
}private function UncallableModule(){
|
||||
if( count($this->arguments) > 0 )
|
||||
return 'uncallable module \''.$this->arguments[0].'\'';
|
||||
else
|
||||
return 'uncallable module';
|
||||
}private function UncallableMethod(){
|
||||
if( count($this->arguments) > 0 )
|
||||
return 'uncallable method \''.$this->arguments[0].'\'';
|
||||
else
|
||||
return 'uncallable method';
|
||||
}private function UnknownHttpMethod(){
|
||||
return 'unknown HTTP method';
|
||||
}private function ConfigError(){
|
||||
return 'configuration error';
|
||||
}private function MissingParam(){
|
||||
if( count($this->arguments) > 0 )
|
||||
return 'missing param \''.$this->arguments[0].'\'';
|
||||
else
|
||||
return 'missing param';
|
||||
}private function WrongParam(){
|
||||
if( count($this->arguments) > 0 )
|
||||
if( count($this->arguments) > 1 )
|
||||
return 'wrong param \''.$this->arguments[0].'\' expected to be of type \''.$this->arguments[1].'\'';
|
||||
else
|
||||
return 'wrong param \''.$this->arguments[0].'\'';
|
||||
else
|
||||
return 'wrong param';
|
||||
}private function ModuleError(){
|
||||
return 'module error';
|
||||
}private function PDOConnection(){
|
||||
return 'database error';
|
||||
}private function WrongPathRepo(){
|
||||
return 'wrong repository\'s path';
|
||||
}private function UnknownRepo(){
|
||||
return 'unknown repository';
|
||||
}private function RepoError(){
|
||||
return 'repository error';
|
||||
}private function UnknownTable(){
|
||||
return 'unknown table';
|
||||
}private function NotAllowedSchema(){
|
||||
return 'schema browsing not allowed';
|
||||
}private function NoMatchFound(){
|
||||
return 'no match found';
|
||||
}private function UnknownTemplate(){
|
||||
return 'unknown template';
|
||||
}private function UnknownAddress(){
|
||||
return 'unknown';
|
||||
}private function UnknownError(){
|
||||
return 'unknown error';
|
||||
}private function UnknownDebugError(){
|
||||
return 'unknown debug error';
|
||||
}
|
||||
|
||||
|
||||
public function setHttpCode(){
|
||||
http_response_code( $this->error == Err::Success ? 200 : 417 );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
?>
|
||||
|
|
|
@ -0,0 +1,198 @@
|
|||
<?php
|
||||
|
||||
namespace http\core;
|
||||
|
||||
|
||||
class HttpRequest{
|
||||
|
||||
/* [0] Constants
|
||||
=========================================================*/
|
||||
/* (1) Content-Type */
|
||||
const CT_BINARY = 0; // unknown
|
||||
const CT_TEXT = 1;
|
||||
const CT_JSON = 2;
|
||||
const CT_YAML = 3;
|
||||
const CT_MULTIPART_FORM_DATA = 4;
|
||||
const CT_X_WWW_FORM_URLENCODED = 5;
|
||||
|
||||
|
||||
/* [1] Attributes
|
||||
=========================================================*/
|
||||
private $uri;
|
||||
private $headers;
|
||||
private $method;
|
||||
private $postdata;
|
||||
private $getdata;
|
||||
|
||||
private $type;
|
||||
private $body;
|
||||
|
||||
|
||||
/* [2] Constructs an HTTP Request based on environment
|
||||
*
|
||||
* @return instance<HttpRequest> auto-filled HTTP Request
|
||||
*
|
||||
=========================================================*/
|
||||
public function __construct(){
|
||||
/* [1] Define URI & Status Code & method
|
||||
=========================================================*/
|
||||
$this->uri = $_SERVER['REQUEST_URI'];
|
||||
$this->method = $_SERVER['REQUEST_METHOD'];
|
||||
|
||||
|
||||
/* [2] Define headers
|
||||
=========================================================*/
|
||||
$this->headers = \getallheaders();
|
||||
|
||||
|
||||
/* [3] Define default datasets (GET, POST)
|
||||
=========================================================*/
|
||||
$this->getdata = $_GET;
|
||||
$this->postdata = $_POST;
|
||||
|
||||
|
||||
/* [4] Define BODY & its type
|
||||
=========================================================*/
|
||||
/* (1) Default: set plain/text body */
|
||||
$this->body = \file_get_contents('php://input');
|
||||
|
||||
/* (2) Fetch content type */
|
||||
$this->type = self::getContentType($this->headers['Content-Type']);
|
||||
|
||||
|
||||
/* [5] Parse BODY data -> POST
|
||||
=========================================================*/
|
||||
$this->parseBody();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* GET CONSTANT CT_* FROM `Content-Type` HEADER
|
||||
*
|
||||
* @pContentType<String> `Content-Type` header value
|
||||
*
|
||||
* @return type<int> Constant value
|
||||
*
|
||||
*/
|
||||
private static function getContentType($pContentType=null){
|
||||
/* [1] Checks argv
|
||||
=========================================================*/
|
||||
if( is_null($pContentType) )
|
||||
$pContentType = $_SERVER['CONTENT_TYPE'];
|
||||
|
||||
|
||||
/* [2] Checks types
|
||||
=========================================================*/
|
||||
/* (1) Form Data Types
|
||||
---------------------------------------------------------*/
|
||||
/* (1) multipart/form-data */
|
||||
if( preg_match('/^multipart\/form\-data; boundary=(.+)$/i', $pContentType) )
|
||||
return self::CT_MULTIPART_FORM_DATA;
|
||||
|
||||
/* (2) application/x-www-form-urlencoded */
|
||||
if( preg_match('/^application\/x\-www\-form\-urlencoded/i', $pContentType) )
|
||||
return self::CT_X_WWW_FORM_URLENCODED;
|
||||
|
||||
|
||||
/* (2) Data types
|
||||
---------------------------------------------------------*/
|
||||
/* (1) Basic JSON content type */
|
||||
if( preg_match('/^application\/json/i', $pContentType) )
|
||||
return self::CT_JSON;
|
||||
|
||||
/* (2) Basic YAML content type */
|
||||
if( preg_match('/^application\/yaml/i', $pContentType) )
|
||||
return self::CT_YAML;
|
||||
|
||||
/* (3) Basic TEXT content type */
|
||||
if( preg_match('/text\/[a-z]+/', $pContentType) )
|
||||
return self::CT_TEXT;
|
||||
|
||||
|
||||
/* (3) Default Type
|
||||
---------------------------------------------------------*/
|
||||
return self::CT_BINARY;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* PARSES BODY DATA
|
||||
*
|
||||
*/
|
||||
private function parseBody(){
|
||||
/* [1] If empty body -> do nothing
|
||||
=========================================================*/
|
||||
if( strlen($this->body) === 0 )
|
||||
return true;
|
||||
|
||||
|
||||
/* [2] Management for each ContentType
|
||||
=========================================================*/
|
||||
switch($this->type){
|
||||
|
||||
/* (1) multipart/form-data -> parse for not-POST methods
|
||||
---------------------------------------------------------*/
|
||||
case self::CT_MULTIPART_FORM_DATA:
|
||||
/* (1) Fetch the boundary */
|
||||
if( !preg_match('/boundary=(.+)$/i', $this->headers['Content-Type'], $match) )
|
||||
return false;
|
||||
|
||||
$boundary = $match[1];
|
||||
|
||||
/* (2) Break body into parts */
|
||||
$splitter = "/(?:\n|\r\n|--)*$boundary(?:\n|\r\n|--)?/im";
|
||||
$parts = preg_split($splitter, $this->body);
|
||||
|
||||
/* (3) Process parts */
|
||||
foreach($parts as $part)
|
||||
if( preg_match('/^Content\-Disposition: form\-data; name=\"([^"]+)\"(?:\n|\r\n){2}(.+)$/mi', $part, $match) )
|
||||
$this->postdata[$match[1]] = $match[2];
|
||||
|
||||
/* (4) Erases body */
|
||||
$this->body = '';
|
||||
break;
|
||||
|
||||
|
||||
/* (2) application/x-www-form-urlencoded -> parse for not-POST methods
|
||||
---------------------------------------------------------*/
|
||||
case self::CT_X_WWW_FORM_URLENCODED:
|
||||
/* Auto parse builtin-php function */
|
||||
parse_str($this->body, $this->postdata);
|
||||
|
||||
/* Erases body */
|
||||
$this->body = '';
|
||||
break;
|
||||
|
||||
|
||||
/* (3) application/json -> parse if no error
|
||||
---------------------------------------------------------*/
|
||||
case self::CT_JSON:
|
||||
/* (1) Decode body content */
|
||||
$decoded = json_decode($this->body, true);
|
||||
|
||||
/* (2) If error -> do nothing */
|
||||
if( is_null($decoded) )
|
||||
return;
|
||||
|
||||
/* (3) Parse body into body */
|
||||
$this->body = $decoded;
|
||||
break;
|
||||
|
||||
|
||||
/* (4) application/yaml -> parse if no error
|
||||
---------------------------------------------------------*/
|
||||
case self::CT_YAML:
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function BODY(){ return $this->body; }
|
||||
public function POST(){ return $this->postdata; }
|
||||
public function GET(){ return $this->getdata; }
|
||||
public function HEADERS(){ return $this->headers; }
|
||||
public function METHOD(){ return $this->method; }
|
||||
public function URI(){ return $this->uri; }
|
||||
}
|
|
@ -3,10 +3,11 @@
|
|||
namespace viewer\core;
|
||||
|
||||
use \error\core\Error;
|
||||
use \error\core\Err;
|
||||
|
||||
class Viewer{
|
||||
|
||||
public $error = Error::Success;
|
||||
public $error;
|
||||
|
||||
|
||||
private $template;
|
||||
|
@ -25,9 +26,12 @@
|
|||
*
|
||||
*/
|
||||
public function __construct($template, $args){
|
||||
$this->error = new Error(Err::Success);
|
||||
|
||||
|
||||
// Si pas parametre manquant, on quitte
|
||||
if( $template == null ){
|
||||
$this->error = Error::MissingPath;
|
||||
$this->error = new Error(Err::MissingPath);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -94,7 +98,7 @@
|
|||
/* [1] On vérifie le format
|
||||
=========================================================*/
|
||||
if( !preg_match('/^(\w+)\.(\w+)$/i', $template, $match) ){
|
||||
$this->error = Error::ParamError;
|
||||
$this->error = new Error(Err::ParamError);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -106,13 +110,13 @@
|
|||
|
||||
/* (1) On vérifie que la classe existe */
|
||||
if( !class_exists($class) ){
|
||||
$this->error = Error::UnknownTemplate;
|
||||
$this->error = new Error(Err::UnknownTemplate);
|
||||
return false;
|
||||
}
|
||||
|
||||
/* (2) On vérifie que la méthode existe */
|
||||
if( !method_exists($class, $method) ){
|
||||
$this->error = Error::UnknownTemplate;
|
||||
$this->error = new Error(Err::UnknownTemplate);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
<?php
|
||||
|
||||
namespace viewer\view\group;
|
||||
use \api\core\ModuleRequest;
|
||||
use \api\core\Request;
|
||||
use \error\core\Error;
|
||||
use \error\core\Err;
|
||||
use \api\core\Authentification;
|
||||
|
||||
class group_choice{
|
||||
|
@ -24,11 +25,11 @@
|
|||
=========================================================*/
|
||||
$twig->addFunction(new \Twig_Function('f_clusters', function($class){
|
||||
/* (1) On récupère les groupes */
|
||||
$getClustersReq = new ModuleRequest('clusterDefault/getAll', ['class' => $class]);
|
||||
$getClustersReq = new Request('clusterDefault/getAll', ['class' => $class]);
|
||||
$getClusters = $getClustersReq->dispatch();
|
||||
|
||||
/* (2) si erreur, on retourne rien par défaut */
|
||||
if( $getClusters->error != Error::Success )
|
||||
if( $getClusters->error->get() != Err::Success )
|
||||
return [];
|
||||
|
||||
/* (3) On enregistre le résultat */
|
||||
|
|
|
@ -2,7 +2,8 @@
|
|||
|
||||
namespace viewer\view\group;
|
||||
use \viewer\core\Viewer;
|
||||
use \api\core\ModuleRequest;
|
||||
use \api\core\Request;
|
||||
use \error\core\Err;
|
||||
use \error\core\Error;
|
||||
use \api\core\Authentification;
|
||||
|
||||
|
@ -16,14 +17,14 @@
|
|||
return Viewer::$htmlError;
|
||||
|
||||
/* (2) On récupère le groupe */
|
||||
$checktypeRequest = new ModuleRequest('clusterDefault/getById', [
|
||||
$checktypeRequest = new Request('clusterDefault/getById', [
|
||||
'id_cluster' => $params['id_cluster'],
|
||||
'class' => $params['class']
|
||||
]);
|
||||
$checktypeResponse = $checktypeRequest->dispatch();
|
||||
|
||||
/* (3) Si on ne le trouve pas, on retourne une erreur */
|
||||
if( $checktypeResponse->error != Error::Success )
|
||||
if( $checktypeResponse->error->get() != Err::Success )
|
||||
return Viewer::$htmlError;
|
||||
|
||||
/* (4) On récupère les données du groupe */
|
||||
|
@ -52,14 +53,14 @@
|
|||
=========================================================*/
|
||||
|
||||
/* (1) On exécute la requête */
|
||||
$getmembersRequest = new ModuleRequest('clusterDefault/getMembers', [
|
||||
$getmembersRequest = new Request('clusterDefault/getMembers', [
|
||||
'id_cluster' => $id_cluster,
|
||||
'class' => $class
|
||||
]);
|
||||
$getmembersResponse = $getmembersRequest->dispatch();
|
||||
|
||||
/* (2) Si erreur, on retourne rien par défaut */
|
||||
if( $getmembersResponse->error != Error::Success )
|
||||
if( $getmembersResponse->error->get() != Err::Success )
|
||||
return [];
|
||||
|
||||
/* (3) On récupère la liste des UID uniquement */
|
||||
|
@ -74,12 +75,12 @@
|
|||
if( $class == 0 ){
|
||||
|
||||
/* (2) On exécute la requête */
|
||||
$getusersRequest = new ModuleRequest('userDefault/getAll');
|
||||
$getusersRequest = new Request('userDefault/getAll');
|
||||
// On recupere la reponse
|
||||
$getusersResponse = $getusersRequest->dispatch();
|
||||
|
||||
/* (3) si erreur, on affiche l'explicitation */
|
||||
if( $getusersResponse->error != Error::Success )
|
||||
if( $getusersResponse->error->get() != Err::Success )
|
||||
return [];
|
||||
|
||||
/* (4) On récupère la liste des utilisateurs */
|
||||
|
@ -97,12 +98,12 @@
|
|||
}else{
|
||||
|
||||
/* (2) On exécute la requête */
|
||||
$getmachinesRequest = new ModuleRequest('machineDefault/getAll');
|
||||
$getmachinesRequest = new Request('machineDefault/getAll');
|
||||
// On recupere la reponse
|
||||
$getmachinesResponse = $getmachinesRequest->dispatch();
|
||||
|
||||
/* (3) si erreur, on affiche l'explicitation */
|
||||
if( $getmachinesResponse->error != Error::Success )
|
||||
if( $getmachinesResponse->error->get() != Err::Success )
|
||||
return [];
|
||||
|
||||
/* (4) On récupère la liste des machines */
|
||||
|
|
|
@ -2,8 +2,9 @@
|
|||
|
||||
namespace viewer\view\group;
|
||||
use \viewer\core\Viewer;
|
||||
use \api\core\ModuleRequest;
|
||||
use \api\core\Request;
|
||||
use \api\core\Authentification;
|
||||
use \error\core\Err;
|
||||
use \error\core\Error;
|
||||
|
||||
class permission{
|
||||
|
@ -32,14 +33,14 @@
|
|||
/* [3] Store functions
|
||||
=========================================================*/
|
||||
$twig->addFunction(new \Twig_Function('f_clusters', function(){
|
||||
$request = new ModuleRequest('clusterDefault/getAll', [
|
||||
$request = new Request('clusterDefault/getAll', [
|
||||
'class' => 1
|
||||
]);
|
||||
|
||||
$answer = $request->dispatch();
|
||||
|
||||
// si erreur, on affiche rien par défaut
|
||||
if( $answer->error != Error::Success )
|
||||
if( $answer->error->get() != Err::Success )
|
||||
return [];
|
||||
|
||||
return $answer->get('clusters');
|
||||
|
@ -47,7 +48,7 @@
|
|||
}));
|
||||
|
||||
$twig->addFunction(new \Twig_Function('f_nbmachines', function($id_cluster){
|
||||
$machineReq = new ModuleRequest('clusterDefault/getMembers', [
|
||||
$machineReq = new Request('clusterDefault/getMembers', [
|
||||
'id_cluster' => (int) $id_cluster,
|
||||
'class' => 1
|
||||
]);
|
||||
|
@ -55,26 +56,26 @@
|
|||
$machineRes = $machineReq->dispatch();
|
||||
|
||||
// si erreur, on affiche rien par défaut
|
||||
if( $machineRes->error != Error::Success )
|
||||
if( $machineRes->error->get() != Err::Success )
|
||||
return [];
|
||||
|
||||
return count($machineRes->get('members'));
|
||||
}));
|
||||
|
||||
$twig->addFunction(new \Twig_Function('f_permissions', function(){
|
||||
$permReq = new ModuleRequest('clusterDefault/getPermissions', []);
|
||||
$permReq = new Request('clusterDefault/getPermissions', []);
|
||||
|
||||
$permRes = $permReq->dispatch();
|
||||
|
||||
// si erreur, on affiche rien par défaut
|
||||
if( $permRes->error != Error::Success )
|
||||
if( $permRes->error->get() != Err::Success )
|
||||
return [];
|
||||
|
||||
return $permRes->get('permissions');
|
||||
}));
|
||||
|
||||
$twig->addFunction(new \Twig_Function('f_userclusters', function($id_cluster, $id_permission){
|
||||
$ucReq = new ModuleRequest('clusterDefault/getAuthenticatedClusters', [
|
||||
$ucReq = new Request('clusterDefault/getAuthenticatedClusters', [
|
||||
'id_target' => $id_cluster,
|
||||
'id_action' => $id_permission
|
||||
]);
|
||||
|
@ -82,7 +83,7 @@
|
|||
$ucRes = $ucReq->dispatch();
|
||||
|
||||
// si erreur, on affiche rien par défaut
|
||||
if( $ucRes->error != Error::Success )
|
||||
if( $ucRes->error->get() != Err::Success )
|
||||
return [];
|
||||
|
||||
return $ucRes->get('clusters');
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
<?php
|
||||
|
||||
namespace viewer\view\group;
|
||||
use \api\core\ModuleRequest;
|
||||
use \api\core\Request;
|
||||
use \api\core\Authentification;
|
||||
use \error\core\Err;
|
||||
use \error\core\Error;
|
||||
|
||||
class view{
|
||||
|
@ -31,11 +32,11 @@
|
|||
=========================================================*/
|
||||
$twig->addFunction(new \Twig_Function('f_clusters', function($class){
|
||||
/* (1) On récupère les groupes */
|
||||
$getClustersReq = new ModuleRequest('clusterDefault/getAll', ['class' => $class]);
|
||||
$getClustersReq = new Request('clusterDefault/getAll', ['class' => $class]);
|
||||
$getClusters = $getClustersReq->dispatch();
|
||||
|
||||
/* (2) si erreur, on retourne rien par défaut */
|
||||
if( $getClusters->error != Error::Success )
|
||||
if( $getClusters->error->get() != Err::Success )
|
||||
return [];
|
||||
|
||||
/* (3) On enregistre le résultat */
|
||||
|
@ -43,7 +44,7 @@
|
|||
}));
|
||||
|
||||
$twig->addFunction(new \Twig_Function('f_members', function($id_cluster, $class){
|
||||
$membersReq = new ModuleRequest('clusterDefault/getMembers', [
|
||||
$membersReq = new Request('clusterDefault/getMembers', [
|
||||
'id_cluster' => (int) $id_cluster,
|
||||
'class' => $class
|
||||
]);
|
||||
|
@ -51,7 +52,7 @@
|
|||
$membersRes = $membersReq->dispatch();
|
||||
//
|
||||
// si erreur, on affiche rien par défaut
|
||||
if( $membersRes->error != Error::Success )
|
||||
if( $membersRes->error->get() != Err::Success )
|
||||
return [];
|
||||
|
||||
return $membersRes->get('members');
|
||||
|
|
|
@ -2,8 +2,9 @@
|
|||
|
||||
namespace viewer\view\history;
|
||||
|
||||
use \api\core\ModuleRequest;
|
||||
use \api\core\Request;
|
||||
use \error\core\Error;
|
||||
use \error\core\Err;
|
||||
|
||||
class view{
|
||||
|
||||
|
@ -24,12 +25,12 @@
|
|||
/* [3] Store functions
|
||||
=========================================================*/
|
||||
$twig->addFunction(new \Twig_Function('f_history', function(){
|
||||
$req = new ModuleRequest('historyDefault/getAll', []);
|
||||
$req = new Request('historyDefault/getAll', []);
|
||||
|
||||
$res = $req->dispatch();
|
||||
|
||||
// si erreur, on retourne rien par défaut
|
||||
if( $res->error != Error::Success )
|
||||
if( $res->error->get() != Err::Success )
|
||||
return [];
|
||||
|
||||
return $res->get('history');
|
||||
|
|
|
@ -2,9 +2,10 @@
|
|||
|
||||
namespace viewer\view\machine;
|
||||
use \viewer\core\Viewer;
|
||||
use \api\core\ModuleRequest;
|
||||
use \api\core\Request;
|
||||
use \api\core\Authentification;
|
||||
use \error\core\Error;
|
||||
use \error\core\Err;
|
||||
|
||||
class groups{
|
||||
|
||||
|
@ -31,14 +32,14 @@
|
|||
/* [3] Store functions
|
||||
=========================================================*/
|
||||
$twig->addFunction(new \Twig_Function('f_clusters', function(){
|
||||
$request = new ModuleRequest('clusterDefault/getAll', [
|
||||
$request = new Request('clusterDefault/getAll', [
|
||||
'class' => 1
|
||||
]);
|
||||
|
||||
$answer = $request->dispatch();
|
||||
|
||||
// si erreur, on affiche rien par défaut
|
||||
if( $answer->error != Error::Success )
|
||||
if( $answer->error->get() != Err::Success )
|
||||
return [];
|
||||
|
||||
return $answer->get('clusters');
|
||||
|
@ -46,14 +47,14 @@
|
|||
}));
|
||||
|
||||
$twig->addFunction(new \Twig_Function('f_machines', function($id_cluster){
|
||||
$usersReq = new ModuleRequest('clusterDefault/getMembers', [
|
||||
$usersReq = new Request('clusterDefault/getMembers', [
|
||||
'id_cluster' => (int) $id_cluster,
|
||||
'class' => 1
|
||||
]);
|
||||
|
||||
$usersRes = $usersReq->dispatch();
|
||||
// si erreur, on affiche rien par défaut
|
||||
if( $usersRes->error != Error::Success )
|
||||
if( $usersRes->error->get() != Err::Success )
|
||||
return [];
|
||||
|
||||
return $usersRes->get('members');
|
||||
|
|
|
@ -2,9 +2,9 @@
|
|||
|
||||
namespace viewer\view\machine;
|
||||
use \viewer\core\Viewer;
|
||||
use \api\core\ModuleRequest;
|
||||
use \api\core\Authentification;
|
||||
use \api\core\Request;
|
||||
use \error\core\Error;
|
||||
use \error\core\Err;
|
||||
|
||||
class view{
|
||||
|
||||
|
@ -30,24 +30,24 @@
|
|||
/* [3] Store functions
|
||||
=========================================================*/
|
||||
$twig->addFunction(new \Twig_Function('f_machines', function(){
|
||||
$request = new ModuleRequest('machineDefault/getAll'); // On utilise la methode 'getAll' du module 'machineDefault'
|
||||
$request = new Request('machineDefault/getAll'); // On utilise la methode 'getAll' du module 'machineDefault'
|
||||
$answer = $request->dispatch(); // On recupere la reponse
|
||||
// si erreur, on affiche rien par défaut
|
||||
if( $answer->error != Error::Success )
|
||||
if( $answer->error->get() != Err::Success )
|
||||
return [];
|
||||
|
||||
return $answer->get('machines');
|
||||
}));
|
||||
|
||||
$twig->addFunction(new \Twig_Function('f_clusters', function($id_machine){
|
||||
$clustersReq = new ModuleRequest('machineDefault/getClusters', [
|
||||
$clustersReq = new Request('machineDefault/getClusters', [
|
||||
'id_machine' => (int) $id_machine
|
||||
]);
|
||||
|
||||
$clustersRes = $clustersReq->dispatch();
|
||||
|
||||
// si erreur, on affiche rien par défaut
|
||||
if( $clustersRes->error != Error::Success )
|
||||
if( $clustersRes->error->get() != Err::Success )
|
||||
return [];
|
||||
|
||||
return $clustersRes->get('clusters');
|
||||
|
|
|
@ -2,9 +2,10 @@
|
|||
|
||||
namespace viewer\view\user;
|
||||
use \viewer\core\Viewer;
|
||||
use \api\core\ModuleRequest;
|
||||
use \api\core\Request;
|
||||
use \api\core\Authentification;
|
||||
use \error\core\Error;
|
||||
use \error\core\Err;
|
||||
|
||||
class groups{
|
||||
|
||||
|
@ -31,14 +32,14 @@
|
|||
/* [3] Store functions
|
||||
=========================================================*/
|
||||
$twig->addFunction(new \Twig_Function('f_clusters', function(){
|
||||
$request = new ModuleRequest('clusterDefault/getAll', [
|
||||
$request = new Request('clusterDefault/getAll', [
|
||||
'class' => 0
|
||||
]);
|
||||
|
||||
$answer = $request->dispatch();
|
||||
|
||||
// si erreur, on affiche rien par défaut
|
||||
if( $answer->error != Error::Success )
|
||||
if( $answer->error->get() != Err::Success )
|
||||
return [];
|
||||
|
||||
return $answer->get('clusters');
|
||||
|
@ -46,14 +47,14 @@
|
|||
}));
|
||||
|
||||
$twig->addFunction(new \Twig_Function('f_users', function($id_cluster){
|
||||
$usersReq = new ModuleRequest('clusterDefault/getMembers', [
|
||||
$usersReq = new Request('clusterDefault/getMembers', [
|
||||
'id_cluster' => (int) $id_cluster,
|
||||
'class' => 0
|
||||
]);
|
||||
|
||||
$usersRes = $usersReq->dispatch();
|
||||
// si erreur, on affiche rien par défaut
|
||||
if( $usersRes->error != Error::Success )
|
||||
if( $usersRes->error->get() != Err::Success )
|
||||
return [];
|
||||
|
||||
return $usersRes->get('members');
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
<?php
|
||||
|
||||
namespace viewer\view\user;
|
||||
use \api\core\ModuleRequest;
|
||||
use \api\core\Request;
|
||||
use \api\core\Authentification;
|
||||
use \error\core\Error;
|
||||
use \error\core\Err;
|
||||
|
||||
class view{
|
||||
|
||||
|
@ -32,22 +33,22 @@
|
|||
=========================================================*/
|
||||
$twig->addFunction(new \Twig_Function('f_users', function(){
|
||||
|
||||
$request = new ModuleRequest('userDefault/getAll'); // On utilise la methode 'getAll' du module 'userDefault'
|
||||
$request = new Request('userDefault/getAll'); // On utilise la methode 'getAll' du module 'userDefault'
|
||||
$answer = $request->dispatch(); // On recupere la reponse
|
||||
|
||||
// si erreur, on affiche rien
|
||||
if( $answer->error != Error::Success )
|
||||
if( $answer->error->get() != Err::Success )
|
||||
return [];
|
||||
|
||||
return $answer->get('users');
|
||||
}));
|
||||
|
||||
$twig->addFunction(new \Twig_Function('f_clusters', function($id_user){
|
||||
$clustersReq = new ModuleRequest('userDefault/getClusters', [ 'id_user' => $id_user ]);
|
||||
$clustersReq = new Request('userDefault/getClusters', [ 'id_user' => $id_user ]);
|
||||
$clustersRes = $clustersReq->dispatch();
|
||||
|
||||
/* (2) Gestion si erreur */
|
||||
if( $clustersRes->error != Error::Success )
|
||||
if( $clustersRes->error->get() != Err::Success )
|
||||
return [];
|
||||
|
||||
return $clustersRes->get('clusters');
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
{
|
||||
|
||||
"module": {
|
||||
"method": {
|
||||
"POST::method": {
|
||||
"description": "Test de l'API",
|
||||
"permissions": ["warehouse"],
|
||||
"permissions": [],
|
||||
"parameters": {}
|
||||
},
|
||||
|
||||
"markdown": {
|
||||
"POST::markdown": {
|
||||
"description": "Retourne une description en markdown des différents modules de l'API",
|
||||
"permissions": ["warehouse", "admin"],
|
||||
"options": { "download": true },
|
||||
"parameters": {}
|
||||
},
|
||||
|
||||
"apiBlueprint": {
|
||||
"POST::apiBlueprint": {
|
||||
"description": "Retourne une documentation de l'API au format API Blueprint.",
|
||||
"permissions": ["warehouse", "admin"],
|
||||
"options": { "download": true },
|
||||
|
@ -25,7 +25,7 @@
|
|||
|
||||
"upload": {
|
||||
|
||||
"call_log": {
|
||||
"POST::call_log": {
|
||||
"description": "Upload d'un journal d'appel au format .xml. Retour des données de call_log/unserialize",
|
||||
"permissions": ["admin"],
|
||||
"parameters": {
|
||||
|
@ -42,7 +42,7 @@
|
|||
|
||||
"download": {
|
||||
|
||||
"multiple": {
|
||||
"POST::multiple": {
|
||||
"description": "Download des données relatives aux sujets donnés.",
|
||||
"permissions": ["admin"],
|
||||
"options": { "download": true },
|
||||
|
@ -58,7 +58,7 @@
|
|||
|
||||
|
||||
"authentificationDefault": {
|
||||
"warehouse": {
|
||||
"POST::warehouse": {
|
||||
"description": "Connexion de premier niveau : entrepot.",
|
||||
"permissions": [],
|
||||
"parameters": {
|
||||
|
@ -70,7 +70,7 @@
|
|||
}
|
||||
},
|
||||
|
||||
"admin": {
|
||||
"POST::admin": {
|
||||
"description": "Connexion de second niveau : administrateur.",
|
||||
"permissions": ["warehouse"],
|
||||
"parameters": {
|
||||
|
@ -86,7 +86,7 @@
|
|||
|
||||
"userDefault": {
|
||||
|
||||
"create": {
|
||||
"POST::create": {
|
||||
"description": "Création d'un nouvel utilisateur.",
|
||||
"permissions": ["warehouse", "admin"],
|
||||
"parameters": {
|
||||
|
@ -101,7 +101,7 @@
|
|||
}
|
||||
},
|
||||
|
||||
"link": {
|
||||
"POST::link": {
|
||||
"description": "Ajout d'un utilisateur à un groupe.",
|
||||
"permissions": ["warehouse", "admin"],
|
||||
"parameters": {
|
||||
|
@ -112,7 +112,7 @@
|
|||
},
|
||||
|
||||
|
||||
"unlink": {
|
||||
"POST::unlink": {
|
||||
"description": "Retrait d'un utilisateur d'un groupe",
|
||||
"permissions": ["warehouse", "admin"],
|
||||
"parameters": {
|
||||
|
@ -122,7 +122,7 @@
|
|||
"output": {}
|
||||
},
|
||||
|
||||
"search": {
|
||||
"POST::search": {
|
||||
"description": "Recherche d'un utilisateur par mots-clés.",
|
||||
"permissions": ["warehouse", "admin"],
|
||||
"parameters": {
|
||||
|
@ -133,7 +133,7 @@
|
|||
}
|
||||
},
|
||||
|
||||
"getAll": {
|
||||
"POST::getAll": {
|
||||
"description": "Liste de tous les utilisateurs",
|
||||
"permissions": ["warehouse", "admin"],
|
||||
"parameters": {},
|
||||
|
@ -142,7 +142,7 @@
|
|||
}
|
||||
},
|
||||
|
||||
"getById": {
|
||||
"POST::getById": {
|
||||
"description": "Retourne un utilisateur spécifique.",
|
||||
"permissions": ["warehouse", "admin"],
|
||||
"parameters": {
|
||||
|
@ -153,7 +153,7 @@
|
|||
}
|
||||
},
|
||||
|
||||
"getByCode": {
|
||||
"POST::getByCode": {
|
||||
"description": "Retourne un utilisateur de Code RFID donné.",
|
||||
"permissions": ["warehouse", "admin"],
|
||||
"parameters": {
|
||||
|
@ -164,7 +164,7 @@
|
|||
}
|
||||
},
|
||||
|
||||
"getByUsername": {
|
||||
"POST::getByUsername": {
|
||||
"description": "Retourne un utilisateur d'identifiant donné.",
|
||||
"permissions": ["warehouse", "admin"],
|
||||
"parameters": {
|
||||
|
@ -175,7 +175,7 @@
|
|||
}
|
||||
},
|
||||
|
||||
"getClusters": {
|
||||
"POST::getClusters": {
|
||||
"description": "Retourne les groupes d'un utilisateur.",
|
||||
"permissions": ["warehouse", "admin"],
|
||||
"parameters": {
|
||||
|
@ -186,7 +186,7 @@
|
|||
}
|
||||
},
|
||||
|
||||
"edit": {
|
||||
"POST::edit": {
|
||||
"description": "Modifie les attributs d'un utilisateur.",
|
||||
"permissions": ["warehouse", "admin"],
|
||||
"parameters": {
|
||||
|
@ -205,7 +205,7 @@
|
|||
}
|
||||
},
|
||||
|
||||
"delete": {
|
||||
"POST::delete": {
|
||||
"description": "Suppression d'un utilisateur.",
|
||||
"permissions": ["warehouse", "admin"],
|
||||
"parameters": {
|
||||
|
@ -221,7 +221,7 @@
|
|||
|
||||
"machineDefault": {
|
||||
|
||||
"sync": {
|
||||
"POST::sync": {
|
||||
"description": "Synchronisation d'une machine.",
|
||||
"permissions": ["warehouse"],
|
||||
"parameters": {
|
||||
|
@ -234,7 +234,7 @@
|
|||
}
|
||||
},
|
||||
|
||||
"init": {
|
||||
"POST::init": {
|
||||
"description": "Données d'initialisation d'une machine.",
|
||||
"permissions": ["warehouse"],
|
||||
"parameters": {
|
||||
|
@ -245,7 +245,7 @@
|
|||
}
|
||||
},
|
||||
|
||||
"create": {
|
||||
"POST::create": {
|
||||
"description": "Création d'une nouvelle machine.",
|
||||
"permissions": ["warehouse", "admin"],
|
||||
"parameters": {
|
||||
|
@ -256,7 +256,7 @@
|
|||
}
|
||||
},
|
||||
|
||||
"link": {
|
||||
"POST::link": {
|
||||
"description": "Ajout d'une machine à un groupe.",
|
||||
"permissions": ["warehouse", "admin"],
|
||||
"parameters": {
|
||||
|
@ -266,7 +266,7 @@
|
|||
"output": {}
|
||||
},
|
||||
|
||||
"unlink": {
|
||||
"POST::unlink": {
|
||||
"description": "Retrait d'une machine d'un groupe.",
|
||||
"permissions": ["warehouse", "admin"],
|
||||
"parameters": {
|
||||
|
@ -276,7 +276,7 @@
|
|||
"output": {}
|
||||
},
|
||||
|
||||
"search": {
|
||||
"POST::search": {
|
||||
"description": "Recherche une machine par mots-clés.",
|
||||
"permissions": ["warehouse", "admin"],
|
||||
"parameters": {
|
||||
|
@ -287,7 +287,7 @@
|
|||
}
|
||||
},
|
||||
|
||||
"getAll": {
|
||||
"POST::getAll": {
|
||||
"description": "Retourne la liste de toutes les machines.",
|
||||
"permissions": ["warehouse", "admin"],
|
||||
"parameters": {},
|
||||
|
@ -296,7 +296,7 @@
|
|||
}
|
||||
},
|
||||
|
||||
"getById": {
|
||||
"POST::getById": {
|
||||
"description": "Retourne les données d'une machine.",
|
||||
"permissions": ["warehouse", "admin"],
|
||||
"parameters": {
|
||||
|
@ -307,7 +307,7 @@
|
|||
}
|
||||
},
|
||||
|
||||
"getByName": {
|
||||
"POST::getByName": {
|
||||
"description": "Retourne les données d'une machine de nom donné.",
|
||||
"permissions": ["warehouse", "admin"],
|
||||
"parameters": {
|
||||
|
@ -318,7 +318,7 @@
|
|||
}
|
||||
},
|
||||
|
||||
"getClusters": {
|
||||
"POST::getClusters": {
|
||||
"description": "Retourne les groupes d'une machine.",
|
||||
"permissions": ["warehouse", "admin"],
|
||||
"parameters": {
|
||||
|
@ -329,7 +329,7 @@
|
|||
}
|
||||
},
|
||||
|
||||
"edit": {
|
||||
"POST::edit": {
|
||||
"description": "Modifie les attributs d'une machine.",
|
||||
"permissions": ["warehouse", "admin"],
|
||||
"parameters": {
|
||||
|
@ -339,7 +339,7 @@
|
|||
"output": {}
|
||||
},
|
||||
|
||||
"delete": {
|
||||
"POST::delete": {
|
||||
"description": "Supprime une machine.",
|
||||
"permissions": ["warehouse", "admin"],
|
||||
"parameters": {
|
||||
|
@ -355,7 +355,7 @@
|
|||
|
||||
"clusterDefault": {
|
||||
|
||||
"create": {
|
||||
"POST::create": {
|
||||
"description": "Création d'un nouveau groupe.",
|
||||
"permissions": ["warehouse", "admin"],
|
||||
"parameters": {
|
||||
|
@ -367,7 +367,7 @@
|
|||
}
|
||||
},
|
||||
|
||||
"search": {
|
||||
"POST::search": {
|
||||
"description": "Recherche d'un groupe par mots-clés.",
|
||||
"permissions": ["warehouse", "admin"],
|
||||
"parameters": {
|
||||
|
@ -379,7 +379,7 @@
|
|||
}
|
||||
},
|
||||
|
||||
"getAll": {
|
||||
"POST::getAll": {
|
||||
"description": "Liste de tous les groupes",
|
||||
"permissions": ["warehouse", "admin"],
|
||||
"parameters": {
|
||||
|
@ -391,7 +391,7 @@
|
|||
}
|
||||
},
|
||||
|
||||
"getById": {
|
||||
"POST::getById": {
|
||||
"description": "Retourne un groupe spécifique.",
|
||||
"permissions": ["warehouse", "admin"],
|
||||
"parameters": {
|
||||
|
@ -403,7 +403,7 @@
|
|||
}
|
||||
},
|
||||
|
||||
"getByName": {
|
||||
"POST::getByName": {
|
||||
"description": "Retourne un groupe de nom donné.",
|
||||
"permissions": ["warehouse", "admin"],
|
||||
"parameters": {
|
||||
|
@ -415,7 +415,7 @@
|
|||
}
|
||||
},
|
||||
|
||||
"getMembers": {
|
||||
"POST::getMembers": {
|
||||
"description": "Retourne les membres d'un groupe.",
|
||||
"permissions": ["warehouse", "admin"],
|
||||
"parameters": {
|
||||
|
@ -427,7 +427,7 @@
|
|||
}
|
||||
},
|
||||
|
||||
"edit": {
|
||||
"POST::edit": {
|
||||
"description": "Modifie le nom d'un groupe.",
|
||||
"permissions": ["warehouse", "admin"],
|
||||
"parameters": {
|
||||
|
@ -440,7 +440,7 @@
|
|||
}
|
||||
},
|
||||
|
||||
"delete": {
|
||||
"POST::delete": {
|
||||
"description": "Suppression d'un groupe.",
|
||||
"permissions": ["warehouse", "admin"],
|
||||
"parameters": {
|
||||
|
@ -452,7 +452,7 @@
|
|||
}
|
||||
},
|
||||
|
||||
"addPermission": {
|
||||
"POST::addPermission": {
|
||||
"description": "Ajout d'une permission",
|
||||
"permissions": ["warehouse", "admin"],
|
||||
"parameters": {
|
||||
|
@ -463,7 +463,7 @@
|
|||
"output": {}
|
||||
},
|
||||
|
||||
"remPermission": {
|
||||
"POST::remPermission": {
|
||||
"description": "Suppression d'une permission",
|
||||
"permissions": ["warehouse", "admin"],
|
||||
"parameters": {
|
||||
|
@ -474,7 +474,7 @@
|
|||
"output": {}
|
||||
},
|
||||
|
||||
"getPermissions": {
|
||||
"POST::getPermissions": {
|
||||
"description": "Retourne la liste des permissions",
|
||||
"permissions": ["warehouse","admin"],
|
||||
"parameters": {},
|
||||
|
@ -483,7 +483,7 @@
|
|||
}
|
||||
},
|
||||
|
||||
"getAuthenticatedClusters": {
|
||||
"POST::getAuthenticatedClusters": {
|
||||
"description": "Retourne les groupes d'utilisateurs ayant une action sur un groupe de machine.",
|
||||
"permissions": ["warehouse","admin"],
|
||||
"parameters": {
|
||||
|
@ -498,7 +498,7 @@
|
|||
},
|
||||
|
||||
"historyDefault": {
|
||||
"getAll": {
|
||||
"POST::getAll": {
|
||||
"description": "Retourne l'historique complet",
|
||||
"permissions": ["warehouse", "admin"],
|
||||
"parameters": {},
|
||||
|
|
|
@ -4,11 +4,9 @@
|
|||
|
||||
debug();
|
||||
use \router\core\Router;
|
||||
|
||||
use \api\core\ModuleRequest;
|
||||
use \api\core\ModuleResponse;
|
||||
use \api\core\Request;
|
||||
use \api\core\Response;
|
||||
use \database\core\DatabaseDriver;
|
||||
use \error\core\Error;
|
||||
use \api\core\Authentification;
|
||||
|
||||
|
||||
|
@ -26,8 +24,10 @@
|
|||
/* [1] Gestion des authentifications et des droits
|
||||
=========================================================*/
|
||||
/* (1) On met à jour l'authentification et les permissions */
|
||||
Authentification::check();
|
||||
$auth = Authentification::auth();
|
||||
$authsys = new Authentification();
|
||||
$auth = $authsys::auth();
|
||||
|
||||
Request::setAuthSystem($authsys);
|
||||
|
||||
|
||||
/* (2) On définit la page d'accueil */
|
||||
|
@ -87,7 +87,7 @@
|
|||
|
||||
// logout from admin
|
||||
$R->get('logout/?', function(){
|
||||
(new ModuleRequest('authentificationDefault/admin', ['username' => '0', 'password' => '']))->dispatch();
|
||||
(new Request('authentificationDefault/admin', ['username' => '0', 'password' => '']))->dispatch();
|
||||
header('Location: /');
|
||||
});
|
||||
|
||||
|
@ -109,7 +109,7 @@
|
|||
|
||||
// warehouse logout
|
||||
$R->get('logout/?', function(){
|
||||
(new ModuleRequest('authentificationDefault/warehouse', ['name' => '000', 'password' => '']))->dispatch();
|
||||
(new Request('authentificationDefault/warehouse', ['name' => '000', 'password' => '']))->dispatch();
|
||||
header('Location: /');
|
||||
});
|
||||
|
||||
|
@ -133,12 +133,12 @@
|
|||
|
||||
|
||||
/* (4) api/module/method -> Api */
|
||||
$R->post('api(?:/(.*))/?', function($url){
|
||||
$request = ModuleRequest::fromPost($url, $_POST);
|
||||
$R->post('api(?:(/.*))/?', function($url){
|
||||
$request = Request::remote($url[0], $_POST);
|
||||
$answer = $request->dispatch();
|
||||
|
||||
// Si c'est une réponse (et non un download)
|
||||
if( $answer instanceof ModuleResponse ){
|
||||
if( $answer instanceof Response ){
|
||||
header('Content-Type: application/json; charset=UTF-8');
|
||||
echo $answer->serialize();
|
||||
}
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
<?php define('__ROOT__', dirname(dirname(dirname(__FILE__))) );
|
||||
require_once __ROOT__.'/autoloader.php';
|
||||
<?php define('__ROOT__', dirname(dirname(dirname(__DIR__))) );
|
||||
require_once __ROOT__.'/autoloader.php';
|
||||
|
||||
$_SESSION['history'] = [];
|
||||
$_SESSION['history'] = [];
|
||||
|
||||
if( !isset($_COOKIE['mac_password']) || !isset($_COOKIE['mac_count']) ){
|
||||
$_COOKIE['mac_count'] = 10;
|
||||
$_COOKIE['mac_password'] = 'macPassword';
|
||||
if( !isset($_COOKIE['mac_password']) || !isset($_COOKIE['mac_count']) ){
|
||||
$_COOKIE['mac_count'] = 10;
|
||||
$_COOKIE['mac_password'] = 'macPassword';
|
||||
|
||||
setcookie('mac_count', $_COOKIE['mac_count'], time()+3600*24*365, '/');
|
||||
setcookie('mac_password', $_COOKIE['mac_password'], time()+3600*24*365, '/');
|
||||
setcookie('mac_count', $_COOKIE['mac_count'], time()+3600*24*365, '/');
|
||||
setcookie('mac_password', $_COOKIE['mac_password'], time()+3600*24*365, '/');
|
||||
|
||||
header('Refresh: 0');
|
||||
}
|
||||
header('Refresh: 0');
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
|
@ -21,402 +21,402 @@
|
|||
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Virtual Client</title>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Virtual Client</title>
|
||||
|
||||
|
||||
<script type='text/javascript' src='/js/lib/reset.js' ></script> <!-- Corrections Javascript natif (ajouts) -->
|
||||
<script type='text/javascript' src='/js/lib/api.js' ></script> <!-- Gestion des transactions avec le serveur -->
|
||||
<script type='text/javascript' src='/js/lib/page-manager.js' ></script> <!-- Gestion réseau/chargement/liens/URL -->
|
||||
<script type='text/javascript' src='/js/lib/form-deflater.js' ></script> <!-- Gestion des formulaires (Object) -->
|
||||
<script type='text/javascript' src='/js/lib/local-storage-interface.js' ></script> <!-- Interface pour le 'localStorage' -->
|
||||
<script type='text/javascript' src='/test/client/lib.js' ></script> <!-- Dépendance Directe -->
|
||||
<style type='text/css'>
|
||||
body{
|
||||
background: #1c384b;
|
||||
font-size: 16px;
|
||||
font-family: 'Roboto';
|
||||
}
|
||||
<script type='text/javascript' src='/js/lib/reset.js' ></script> <!-- Corrections Javascript natif (ajouts) -->
|
||||
<script type='text/javascript' src='/js/lib/api.js' ></script> <!-- Gestion des transactions avec le serveur -->
|
||||
<script type='text/javascript' src='/js/lib/page-manager.js' ></script> <!-- Gestion réseau/chargement/liens/URL -->
|
||||
<script type='text/javascript' src='/js/lib/form-deflater.js' ></script> <!-- Gestion des formulaires (Object) -->
|
||||
<script type='text/javascript' src='/js/lib/local-storage-interface.js' ></script> <!-- Interface pour le 'localStorage' -->
|
||||
<script type='text/javascript' src='/test/client/lib.js' ></script> <!-- Dépendance Directe -->
|
||||
<style type='text/css'>
|
||||
body{
|
||||
background: #1c384b;
|
||||
font-size: 16px;
|
||||
font-family: 'Roboto';
|
||||
}
|
||||
|
||||
#machine-box{
|
||||
position: absolute;
|
||||
top: 40%;
|
||||
left: 60%;
|
||||
width: 20em;
|
||||
height: 35em;
|
||||
#machine-box{
|
||||
position: absolute;
|
||||
top: 40%;
|
||||
left: 60%;
|
||||
width: 20em;
|
||||
height: 35em;
|
||||
|
||||
border-radius: 10px;
|
||||
border: 2px solid #1a1a1a;
|
||||
box-shadow: 0 0 2em #172e3d;
|
||||
border-radius: 10px;
|
||||
border: 2px solid #1a1a1a;
|
||||
box-shadow: 0 0 2em #172e3d;
|
||||
|
||||
background: #222;
|
||||
background: #222;
|
||||
|
||||
transform: translateX(-50%) translateY(-50%);
|
||||
transform: translateX(-50%) translateY(-50%);
|
||||
|
||||
cursor: pointer;
|
||||
}
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#machine-box > #led{
|
||||
position: absolute;
|
||||
top: calc( 20% - 1.5em/2 - 2px/2 );
|
||||
left: calc( 75% - 1.5em/2 - 2px/2 );
|
||||
width: 1.5em;
|
||||
height: 1.5em;
|
||||
#machine-box > #led{
|
||||
position: absolute;
|
||||
top: calc( 20% - 1.5em/2 - 2px/2 );
|
||||
left: calc( 75% - 1.5em/2 - 2px/2 );
|
||||
width: 1.5em;
|
||||
height: 1.5em;
|
||||
|
||||
border-radius: 50% / 50%;
|
||||
border: 2px solid #111;
|
||||
border-radius: 50% / 50%;
|
||||
border: 2px solid #111;
|
||||
|
||||
background: #000;
|
||||
}
|
||||
background: #000;
|
||||
}
|
||||
|
||||
#machine-box > #r1,
|
||||
#machine-box > #r2{
|
||||
position: absolute;
|
||||
top: calc( 25% - 3em/2 );
|
||||
left: 100%;
|
||||
width: 4em;
|
||||
height: 3em;
|
||||
#machine-box > #r1,
|
||||
#machine-box > #r2{
|
||||
position: absolute;
|
||||
top: calc( 25% - 3em/2 );
|
||||
left: 100%;
|
||||
width: 4em;
|
||||
height: 3em;
|
||||
|
||||
background: #000;
|
||||
background: #000;
|
||||
|
||||
color: #ccc;
|
||||
text-align: center;
|
||||
line-height: 3em;
|
||||
}
|
||||
#machine-box > #r2{
|
||||
top: calc( 50% - 3em/2 );
|
||||
}
|
||||
|
||||
|
||||
#machine-box > #r1.active,
|
||||
#machine-box > #r2.active{
|
||||
font-weight: bold;
|
||||
color: #18eea9;
|
||||
}
|
||||
|
||||
#card-stack{
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 20%;
|
||||
width: 20em;
|
||||
height: 35em;
|
||||
|
||||
transform: translateX(-50%) translateY(-50%);
|
||||
}
|
||||
|
||||
#card-stack > .card{
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 4em;
|
||||
margin-bottom: .2em;
|
||||
|
||||
border-radius: 10px 10px 0 0;
|
||||
box-shadow: 0 2px 10px #111;
|
||||
|
||||
background: #eee;
|
||||
|
||||
color: #333;
|
||||
font-weight: bold;
|
||||
line-height: 4em;
|
||||
color: #ccc;
|
||||
text-align: center;
|
||||
|
||||
transition: all .2s ease-in-out;
|
||||
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#card-stack > .card:hover{
|
||||
background: #fff;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
#card-stack > .card.active{
|
||||
background: #aaa;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
#card-stack > input{
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
width: calc( 100% - 1em*2 );
|
||||
height: calc( 3em - 1em*2 );
|
||||
padding: 1em;
|
||||
margin-bottom: 2em;
|
||||
|
||||
border-radius: 3px;
|
||||
border: 0;
|
||||
|
||||
background: #eee;
|
||||
}
|
||||
|
||||
#sync-button,
|
||||
#card-pass{
|
||||
position: absolute;
|
||||
top: calc( 50% + 29em );
|
||||
left: 60%;
|
||||
padding: 1.5em;
|
||||
|
||||
border-radius: 3px;
|
||||
border: 2px solid #fff;
|
||||
|
||||
background: #1ee18e;
|
||||
|
||||
color: #fff;
|
||||
font-weight: bold;
|
||||
letter-spacing: .15em;
|
||||
text-transform: uppercase;
|
||||
|
||||
transition: all .2s ease-in-out;
|
||||
|
||||
transform: translateX(-50%) translateY(-50%);
|
||||
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#card-pass{
|
||||
top: calc( 40% + 29em );
|
||||
background: #3595ce;
|
||||
}
|
||||
|
||||
#sync-button:hover{
|
||||
background: #1ac47c;
|
||||
}
|
||||
|
||||
#card-pass:hover{
|
||||
background: #2d7dad;
|
||||
}
|
||||
line-height: 3em;
|
||||
}
|
||||
#machine-box > #r2{
|
||||
top: calc( 50% - 3em/2 );
|
||||
}
|
||||
|
||||
|
||||
</style>
|
||||
#machine-box > #r1.active,
|
||||
#machine-box > #r2.active{
|
||||
font-weight: bold;
|
||||
color: #18eea9;
|
||||
}
|
||||
|
||||
</head>
|
||||
<body>
|
||||
#card-stack{
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 20%;
|
||||
width: 20em;
|
||||
height: 35em;
|
||||
|
||||
transform: translateX(-50%) translateY(-50%);
|
||||
}
|
||||
|
||||
#card-stack > .card{
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 4em;
|
||||
margin-bottom: .2em;
|
||||
|
||||
border-radius: 10px 10px 0 0;
|
||||
box-shadow: 0 2px 10px #111;
|
||||
|
||||
background: #eee;
|
||||
|
||||
color: #333;
|
||||
font-weight: bold;
|
||||
line-height: 4em;
|
||||
text-align: center;
|
||||
|
||||
transition: all .2s ease-in-out;
|
||||
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#card-stack > .card:hover{
|
||||
background: #fff;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
#card-stack > .card.active{
|
||||
background: #aaa;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
#card-stack > input{
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
width: calc( 100% - 1em*2 );
|
||||
height: calc( 3em - 1em*2 );
|
||||
padding: 1em;
|
||||
margin-bottom: 2em;
|
||||
|
||||
border-radius: 3px;
|
||||
border: 0;
|
||||
|
||||
background: #eee;
|
||||
}
|
||||
|
||||
#sync-button,
|
||||
#card-pass{
|
||||
position: absolute;
|
||||
top: calc( 50% + 29em );
|
||||
left: 60%;
|
||||
padding: 1.5em;
|
||||
|
||||
border-radius: 3px;
|
||||
border: 2px solid #fff;
|
||||
|
||||
background: #1ee18e;
|
||||
|
||||
color: #fff;
|
||||
font-weight: bold;
|
||||
letter-spacing: .15em;
|
||||
text-transform: uppercase;
|
||||
|
||||
transition: all .2s ease-in-out;
|
||||
|
||||
transform: translateX(-50%) translateY(-50%);
|
||||
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#card-pass{
|
||||
top: calc( 40% + 29em );
|
||||
background: #3595ce;
|
||||
}
|
||||
|
||||
#sync-button:hover{
|
||||
background: #1ac47c;
|
||||
}
|
||||
|
||||
#card-pass:hover{
|
||||
background: #2d7dad;
|
||||
}
|
||||
|
||||
|
||||
<div id='machine-box'>
|
||||
<div id='led'></div>
|
||||
<div id='r1'>r1</div>
|
||||
<div id='r2'>r2</div>
|
||||
</div>
|
||||
</style>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
|
||||
|
||||
<div id='card-stack'>
|
||||
<input id='add-card' placeholder='Code RFID' type='text'>
|
||||
<div class='card'>AB-CD-EF-GH</div>
|
||||
<div class='card'>10-FE-BD-61</div>
|
||||
<div class='card'>92-55-B9-B3</div>
|
||||
</div>
|
||||
<div id='machine-box'>
|
||||
<div id='led'></div>
|
||||
<div id='r1'>r1</div>
|
||||
<div id='r2'>r2</div>
|
||||
</div>
|
||||
|
||||
|
||||
<input type='button' id='card-pass' value='Passer la carte'>
|
||||
<input type='button' id='sync-button' value='Synchronisation'>
|
||||
<div id='card-stack'>
|
||||
<input id='add-card' placeholder='Code RFID' type='text'>
|
||||
<div class='card'>AB-CD-EF-GH</div>
|
||||
<div class='card'>10-FE-BD-61</div>
|
||||
<div class='card'>92-55-B9-B3</div>
|
||||
</div>
|
||||
|
||||
|
||||
<input type='button' id='card-pass' value='Passer la carte'>
|
||||
<input type='button' id='sync-button' value='Synchronisation'>
|
||||
|
||||
|
||||
|
||||
|
||||
<script type='text/javascript'>
|
||||
/* [0] Initialisation et éléments
|
||||
=========================================================*/
|
||||
/* (1) Etats du système */
|
||||
var STATE = [ 0, 0, 0 ];
|
||||
<script type='text/javascript'>
|
||||
/* [0] Initialisation et éléments
|
||||
=========================================================*/
|
||||
/* (1) Etats du système */
|
||||
var STATE = [ 0, 0, 0 ];
|
||||
|
||||
/* (2) Elements du DOM */
|
||||
var mBox = document.getElementById('machine-box');
|
||||
var led = document.getElementById('led');
|
||||
var r1 = document.getElementById('r1');
|
||||
var r2 = document.getElementById('r2');
|
||||
var cBox = document.getElementById('card-stack');
|
||||
var cAdd = document.getElementById('add-card');
|
||||
var sync = document.getElementById('sync-button');
|
||||
var pass = document.getElementById('card-pass');
|
||||
/* (2) Elements du DOM */
|
||||
var mBox = document.getElementById('machine-box');
|
||||
var led = document.getElementById('led');
|
||||
var r1 = document.getElementById('r1');
|
||||
var r2 = document.getElementById('r2');
|
||||
var cBox = document.getElementById('card-stack');
|
||||
var cAdd = document.getElementById('add-card');
|
||||
var sync = document.getElementById('sync-button');
|
||||
var pass = document.getElementById('card-pass');
|
||||
|
||||
/* (3) Variables de suivi */
|
||||
var CARD = null;
|
||||
var lastCard = null;
|
||||
var lsi = new localStorageInterface();
|
||||
lsi.createDataset('STATES.CNF' );
|
||||
lsi.createDataset('ACTIONS.CNF');
|
||||
lsi.createDataset('CHIPS.CNF');
|
||||
lsi.createDataset('PERMISSIONS.CNF');
|
||||
lsi.createDataset('SERVER.CNF' );
|
||||
lsi.createDataset('HISTORY.LOG');
|
||||
lsi.createDataset('STATES.LOG' );
|
||||
/* (3) Variables de suivi */
|
||||
var CARD = null;
|
||||
var lastCard = null;
|
||||
var lsi = new localStorageInterface();
|
||||
lsi.createDataset('STATES.CNF' );
|
||||
lsi.createDataset('ACTIONS.CNF');
|
||||
lsi.createDataset('CHIPS.CNF');
|
||||
lsi.createDataset('PERMISSIONS.CNF');
|
||||
lsi.createDataset('SERVER.CNF' );
|
||||
lsi.createDataset('HISTORY.LOG');
|
||||
lsi.createDataset('STATES.LOG' );
|
||||
|
||||
/* (4) Récupération des données de fonctionnement */
|
||||
var api = new APIClass('/api/');
|
||||
/* (4) Récupération des données de fonctionnement */
|
||||
var api = new APIClass('/api/');
|
||||
|
||||
var ACTIONS, STATES, CHIPS, PERMISSIONS;
|
||||
var ACTIONS, STATES, CHIPS, PERMISSIONS;
|
||||
|
||||
api.send({path: 'machineDefault/init', id_machine: 1}, function(response){
|
||||
lsi.import('ACTIONS.CNF', response.actions);
|
||||
lsi.import('STATES.CNF', response.states);
|
||||
lsi.import('CHIPS.CNF', response.chips);
|
||||
lsi.import('PERMISSIONS.CNF', response.permissions);
|
||||
api.send({path: 'machineDefault/init', id_machine: 1}, function(response){
|
||||
lsi.import('ACTIONS.CNF', response.actions);
|
||||
lsi.import('STATES.CNF', response.states);
|
||||
lsi.import('CHIPS.CNF', response.chips);
|
||||
lsi.import('PERMISSIONS.CNF', response.permissions);
|
||||
|
||||
ACTIONS = lsi.export('ACTIONS.CNF');
|
||||
STATES = lsi.export('STATES.CNF');
|
||||
CHIPS = lsi.export('CHIPS.CNF');
|
||||
PERMISSIONS = lsi.export('PERMISSIONS.CNF');
|
||||
}, '643405e1004845c2291c244faab192e3ad493b9dec147c8030475794b0f2fa23');
|
||||
ACTIONS = lsi.export('ACTIONS.CNF');
|
||||
STATES = lsi.export('STATES.CNF');
|
||||
CHIPS = lsi.export('CHIPS.CNF');
|
||||
PERMISSIONS = lsi.export('PERMISSIONS.CNF');
|
||||
}, '643405e1004845c2291c244faab192e3ad493b9dec147c8030475794b0f2fa23');
|
||||
|
||||
/* (5) On initialise la carte + les puces */
|
||||
var board = new Board(50);
|
||||
/* (5) On initialise la carte + les puces */
|
||||
var board = new Board(50);
|
||||
|
||||
var CHIP = {
|
||||
led: new LedInterface( new Chip('serial', [1, 2, 3]), led ),
|
||||
r1: new RelayInterface( new Chip('serial', [4]), r1 ),
|
||||
r2: new RelayInterface( new Chip('serial', [5]), r2 )
|
||||
};
|
||||
var CHIP = {
|
||||
led: new LedInterface( new Chip('serial', [1, 2, 3]), led ),
|
||||
r1: new RelayInterface( new Chip('serial', [4]), r1 ),
|
||||
r2: new RelayInterface( new Chip('serial', [5]), r2 )
|
||||
};
|
||||
|
||||
var chipList = Object.keys(CHIP);
|
||||
var chipList = Object.keys(CHIP);
|
||||
|
||||
// Branchement des puces
|
||||
for( var i = 0 ; i < chipList.length ; i++ )
|
||||
board.plug( CHIP[chipList[i]] );
|
||||
// Branchement des puces
|
||||
for( var i = 0 ; i < chipList.length ; i++ )
|
||||
board.plug( CHIP[chipList[i]] );
|
||||
|
||||
|
||||
/* [1] Fonctions
|
||||
=========================================================*/
|
||||
/* (1) Gestion de mise à jour de la led en fonction de l'état
|
||||
---------------------------------------------------------*/
|
||||
function updateChips(){
|
||||
var STATES = lsi.export('STATES.CNF');
|
||||
var CHIPS = lsi.export('CHIPS.CNF');
|
||||
/* [1] Fonctions
|
||||
=========================================================*/
|
||||
/* (1) Gestion de mise à jour de la led en fonction de l'état
|
||||
---------------------------------------------------------*/
|
||||
function updateChips(){
|
||||
var STATES = lsi.export('STATES.CNF');
|
||||
var CHIPS = lsi.export('CHIPS.CNF');
|
||||
|
||||
/* (1) On vérifie quel état correspond */
|
||||
for( var s in STATES ){
|
||||
/* (1) On vérifie quel état correspond */
|
||||
for( var s in STATES ){
|
||||
|
||||
/* (2) Si l'état correspond */
|
||||
if( previous(STATES[s].global_state, STATE) ){
|
||||
/* (2) Si l'état correspond */
|
||||
if( previous(STATES[s].global_state, STATE) ){
|
||||
|
||||
console.log('STATE', STATE.join(''), 'matches', STATES[s].global_state);
|
||||
console.log('STATE', STATE.join(''), 'matches', STATES[s].global_state);
|
||||
|
||||
/* (3) On applique l'état à chaque CHIP */
|
||||
for( var c in CHIPS ){
|
||||
/* (3) On applique l'état à chaque CHIP */
|
||||
for( var c in CHIPS ){
|
||||
|
||||
/* (4) Si la puce a bien cet été de défini */
|
||||
if( !CHIPS[c].states.hasOwnProperty(STATES[s].chips[c]) )
|
||||
break;
|
||||
/* (4) Si la puce a bien cet été de défini */
|
||||
if( !CHIPS[c].states.hasOwnProperty(STATES[s].chips[c]) )
|
||||
break;
|
||||
|
||||
/* (5) On récupère les PIN + les VALUES */
|
||||
var pins = CHIPS[c].pins;
|
||||
var values = CHIPS[c].states[STATES[s].chips[c]];
|
||||
/* (5) On récupère les PIN + les VALUES */
|
||||
var pins = CHIPS[c].pins;
|
||||
var values = CHIPS[c].states[STATES[s].chips[c]];
|
||||
|
||||
/* (6) On applique les valeurs */
|
||||
for( var p in pins )
|
||||
board.set( parseInt(pins[p]), parseInt(values[p]) );
|
||||
/* (6) On applique les valeurs */
|
||||
for( var p in pins )
|
||||
board.set( parseInt(pins[p]), parseInt(values[p]) );
|
||||
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* [2] Gestion de l'ajout de carte
|
||||
=========================================================*/
|
||||
cAdd.addEventListener('keyup', function(e){
|
||||
if( e.keyCode == 13 ) cBox.innerHTML += "<div class='card'>"+e.target.value+"</div>";
|
||||
}, false);
|
||||
|
||||
|
||||
/* [3] Gestion de la sélection de carte
|
||||
=========================================================*/
|
||||
cBox.addEventListener('click', function(e){
|
||||
if( e.target.className == 'card' ){
|
||||
CARD = e.target.innerHTML;
|
||||
|
||||
var allCards = document.querySelectorAll('#card-stack .card');
|
||||
for( var i = 0 ; i < allCards.length ; i++ )
|
||||
allCards[i].remClass('active');
|
||||
|
||||
e.target.addClass('active');
|
||||
}
|
||||
}, false);
|
||||
CARD = document.querySelector('#card-stack .card').innerHTML;
|
||||
document.querySelector('#card-stack .card').addClass('active');
|
||||
|
||||
|
||||
/* [4] Passage de carte
|
||||
=========================================================*/
|
||||
var INTERVAL = null;
|
||||
var COUNT = 0;
|
||||
|
||||
|
||||
/* (0) Routine de comptage de temps
|
||||
---------------------------------------------------------*/
|
||||
function countRoutine(){
|
||||
/* (1) Si le TIMEOUT actuel n'est pas défini, on quitte */
|
||||
var exists = false;
|
||||
for( var t in Object.keys(ACTIONS) )
|
||||
if( t == COUNT ) exists = true;
|
||||
|
||||
// Si aucune action pour ce timeout, on quitte
|
||||
if( !exists ) return;
|
||||
|
||||
/* (2) Pour chaque action de ce timeout */
|
||||
for( var a in Object.keys(ACTIONS[COUNT]) ){
|
||||
|
||||
/* (3) On vérifie que l'utilisateur a la permissions d'effectuer l'action */
|
||||
var hasPermission = PERMISSIONS.hasOwnProperty(CARD) && PERMISSIONS[CARD].actions.indexOf( ACTIONS[COUNT][a].id_action.toString() ) > -1;
|
||||
|
||||
// Si on a pas la permission, on quitte
|
||||
if( !hasPermission ) continue;
|
||||
|
||||
|
||||
|
||||
|
||||
/* (4) Si la condition est correcte, On applique la modification de l'état */
|
||||
if( previous(ACTIONS[COUNT][a].previous, STATE) ){
|
||||
action(ACTIONS[COUNT][a].action, STATE);
|
||||
|
||||
/* (5) On enregistre l'action dans l'historique */
|
||||
var historyKeys = lsi.keys('HISTORY.LOG').length;
|
||||
|
||||
lsi.set('HISTORY.LOG', historyKeys+1, {
|
||||
id_user: parseInt(PERMISSIONS[CARD].id_user),
|
||||
id_machine: 1,
|
||||
id_action: parseInt(ACTIONS[COUNT][a].id_action)
|
||||
});
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
updateChips();
|
||||
COUNT++;
|
||||
}
|
||||
|
||||
/* (1) Appui carte
|
||||
---------------------------------------------------------*/
|
||||
pass.addEventListener('mousedown', function(e){
|
||||
COUNT = 0;
|
||||
|
||||
countRoutine();
|
||||
INTERVAL = setInterval( countRoutine, 1000 );
|
||||
|
||||
}, false);
|
||||
|
||||
/* (2) Levé carte
|
||||
---------------------------------------------------------*/
|
||||
window.addEventListener('mouseup', function(e){
|
||||
clearInterval(INTERVAL);
|
||||
}, false);
|
||||
|
||||
|
||||
/* [5] Synchronisation
|
||||
=========================================================*/
|
||||
sync.addEventListener('click', function(e){
|
||||
|
||||
/* [2] Gestion de l'ajout de carte
|
||||
=========================================================*/
|
||||
cAdd.addEventListener('keyup', function(e){
|
||||
if( e.keyCode == 13 ) cBox.innerHTML += "<div class='card'>"+e.target.value+"</div>";
|
||||
}, false);
|
||||
}, false);
|
||||
|
||||
|
||||
/* [3] Gestion de la sélection de carte
|
||||
=========================================================*/
|
||||
cBox.addEventListener('click', function(e){
|
||||
if( e.target.className == 'card' ){
|
||||
CARD = e.target.innerHTML;
|
||||
|
||||
var allCards = document.querySelectorAll('#card-stack .card');
|
||||
for( var i = 0 ; i < allCards.length ; i++ )
|
||||
allCards[i].remClass('active');
|
||||
|
||||
e.target.addClass('active');
|
||||
}
|
||||
}, false);
|
||||
CARD = document.querySelector('#card-stack .card').innerHTML;
|
||||
document.querySelector('#card-stack .card').addClass('active');
|
||||
|
||||
|
||||
/* [4] Passage de carte
|
||||
=========================================================*/
|
||||
var INTERVAL = null;
|
||||
var COUNT = 0;
|
||||
|
||||
|
||||
/* (0) Routine de comptage de temps
|
||||
---------------------------------------------------------*/
|
||||
function countRoutine(){
|
||||
/* (1) Si le TIMEOUT actuel n'est pas défini, on quitte */
|
||||
var exists = false;
|
||||
for( var t in Object.keys(ACTIONS) )
|
||||
if( t == COUNT ) exists = true;
|
||||
|
||||
// Si aucune action pour ce timeout, on quitte
|
||||
if( !exists ) return;
|
||||
|
||||
/* (2) Pour chaque action de ce timeout */
|
||||
for( var a in Object.keys(ACTIONS[COUNT]) ){
|
||||
|
||||
/* (3) On vérifie que l'utilisateur a la permissions d'effectuer l'action */
|
||||
var hasPermission = PERMISSIONS.hasOwnProperty(CARD) && PERMISSIONS[CARD].actions.indexOf( ACTIONS[COUNT][a].id_action.toString() ) > -1;
|
||||
|
||||
// Si on a pas la permission, on quitte
|
||||
if( !hasPermission ) continue;
|
||||
|
||||
|
||||
|
||||
|
||||
/* (4) Si la condition est correcte, On applique la modification de l'état */
|
||||
if( previous(ACTIONS[COUNT][a].previous, STATE) ){
|
||||
action(ACTIONS[COUNT][a].action, STATE);
|
||||
|
||||
/* (5) On enregistre l'action dans l'historique */
|
||||
var historyKeys = lsi.keys('HISTORY.LOG').length;
|
||||
|
||||
lsi.set('HISTORY.LOG', historyKeys+1, {
|
||||
id_user: parseInt(PERMISSIONS[CARD].id_user),
|
||||
id_machine: 1,
|
||||
id_action: parseInt(ACTIONS[COUNT][a].id_action)
|
||||
});
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
updateChips();
|
||||
COUNT++;
|
||||
}
|
||||
|
||||
/* (1) Appui carte
|
||||
---------------------------------------------------------*/
|
||||
pass.addEventListener('mousedown', function(e){
|
||||
COUNT = 0;
|
||||
|
||||
countRoutine();
|
||||
INTERVAL = setInterval( countRoutine, 1000 );
|
||||
|
||||
}, false);
|
||||
|
||||
/* (2) Levé carte
|
||||
---------------------------------------------------------*/
|
||||
window.addEventListener('mouseup', function(e){
|
||||
clearInterval(INTERVAL);
|
||||
}, false);
|
||||
|
||||
|
||||
/* [5] Synchronisation
|
||||
=========================================================*/
|
||||
sync.addEventListener('click', function(e){
|
||||
|
||||
}, false);
|
||||
|
||||
</script>
|
||||
</body>
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -152,7 +152,7 @@
|
|||
api.send(request, function(response){
|
||||
|
||||
// Si erreur de module
|
||||
if( response.ModuleError != 0 ){
|
||||
if( response.error != 0 ){
|
||||
errBox.innerHTML = 'Format des champs incorrect.';
|
||||
aPassword.value = '';
|
||||
return false;
|
||||
|
@ -189,7 +189,7 @@
|
|||
|
||||
/* (2) On envoie la requête */
|
||||
api.send(request, function(response){
|
||||
if( response.ModuleError == 0 ){
|
||||
if( response.error == 0 ){
|
||||
if( response.status == false )
|
||||
document.location = '/';
|
||||
}
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
<?php define('__ROOT__', dirname(dirname(dirname(__FILE__))) );
|
||||
require_once __ROOT__.'/autoloader.php';
|
||||
use \api\core\ModuleRequest;
|
||||
use \error\core\Error;
|
||||
use \api\core\Request;
|
||||
use \orm\core\Table;
|
||||
?>
|
||||
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
<?php define('__ROOT__', dirname(dirname(dirname(__FILE__))) );
|
||||
require_once __ROOT__.'/autoloader.php';
|
||||
use \viewer\core\Viewer;
|
||||
use \api\core\ModuleRequest;
|
||||
use \error\core\Error;
|
||||
use \api\core\Request;
|
||||
use \database\core\Repo;
|
||||
?>
|
||||
|
||||
|
@ -56,7 +55,7 @@
|
|||
|
||||
/* [1] VIEW -> Liste des groupes
|
||||
=========================================================*/
|
||||
$request = new ModuleRequest('clusterDefault/getAll'); // On utilise la methode 'getAll' du module 'groupDefault'
|
||||
$request = new Request('clusterDefault/getAll'); // On utilise la methode 'getAll' du module 'groupDefault'
|
||||
$answer = $request->dispatch(); // On recupere la reponse
|
||||
|
||||
echo "<section data-sublink='view' class='list'>";
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
<?php define('__ROOT__', dirname(dirname(dirname(__FILE__))) );
|
||||
require_once __ROOT__.'/autoloader.php';
|
||||
use \api\core\ModuleRequest;
|
||||
use \error\core\Error;
|
||||
use \api\core\Request;
|
||||
use \database\core\DatabaseDriver;
|
||||
use \database\core\Repo;
|
||||
use \viewer\core\Viewer;
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
<?php define('__ROOT__', dirname(dirname(dirname(__FILE__))) );
|
||||
require_once __ROOT__.'/autoloader.php';
|
||||
use \viewer\core\Viewer;
|
||||
use \api\core\ModuleRequest;
|
||||
use \error\core\Error;
|
||||
use \api\core\Request;
|
||||
use \database\core\Repo;
|
||||
?>
|
||||
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
<?php define('__ROOT__', dirname(dirname(dirname(__FILE__))) );
|
||||
require_once __ROOT__.'/autoloader.php';
|
||||
use \api\core\ModuleRequest;
|
||||
use \error\core\Error;
|
||||
use \api\core\Request;
|
||||
?>
|
||||
|
||||
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
<?php define('__ROOT__', dirname(dirname(dirname(__FILE__))) );
|
||||
require_once __ROOT__.'/autoloader.php';
|
||||
use \api\core\ModuleRequest;
|
||||
use \error\core\Error;
|
||||
use \api\core\Request;
|
||||
?>
|
||||
|
||||
<!-- [1] Gestion du sous-menu de gauche -->
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
<?php
|
||||
require_once '../../autoloader.php';
|
||||
use \api\core\ModuleRequest;
|
||||
use \error\core\Error;
|
||||
use \api\core\Request;
|
||||
use \viewer\core\Viewer;
|
||||
use \database\core\Repo;
|
||||
?>
|
||||
|
|
|
@ -138,8 +138,9 @@
|
|||
|
||||
api.send(request, function(response){
|
||||
|
||||
console.warn(response);
|
||||
// Si erreur de module
|
||||
if( response.ModuleError != 0 ){
|
||||
if( response.error != 0 ){
|
||||
errBox.innerHTML = 'Format des champs incorrect.';
|
||||
wPassword.value = '';
|
||||
return false;
|
||||
|
|
Loading…
Reference in New Issue