From 6497d181689f998d6f5a1d8a31d095a0c1b35fdf Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Sun, 11 Dec 2016 22:24:26 +0100 Subject: [PATCH] fix --- exporter/packages.json | 10 +- .../api/2.2/core/Authentification.php | 22 - src/packages/api/2.2/core/Request.php | 589 ------------------ .../{2.3 => 2.2/module}/core/AuthSystem.php | 0 .../api/2.2/{ => module}/core/Checker.php | 0 .../2.2/{ => module}/core/ModuleFactory.php | 0 .../api/{2.3 => 2.2/module}/core/Request.php | 0 .../api/2.2/{ => module}/core/Response.php | 0 src/packages/api/2.3/core/Checker.php | 145 ----- src/packages/api/2.3/core/ModuleFactory.php | 31 - src/packages/api/2.3/core/Response.php | 122 ---- src/packages/api/2.3/module/RESTexample.php | 125 ---- 12 files changed, 1 insertion(+), 1043 deletions(-) delete mode 100644 src/packages/api/2.2/core/Authentification.php delete mode 100644 src/packages/api/2.2/core/Request.php rename src/packages/api/{2.3 => 2.2/module}/core/AuthSystem.php (100%) rename src/packages/api/2.2/{ => module}/core/Checker.php (100%) rename src/packages/api/2.2/{ => module}/core/ModuleFactory.php (100%) rename src/packages/api/{2.3 => 2.2/module}/core/Request.php (100%) rename src/packages/api/2.2/{ => module}/core/Response.php (100%) delete mode 100644 src/packages/api/2.3/core/Checker.php delete mode 100644 src/packages/api/2.3/core/ModuleFactory.php delete mode 100644 src/packages/api/2.3/core/Response.php delete mode 100644 src/packages/api/2.3/module/RESTexample.php diff --git a/exporter/packages.json b/exporter/packages.json index b3bef6d..651d1b0 100755 --- a/exporter/packages.json +++ b/exporter/packages.json @@ -28,14 +28,6 @@ "http": [ "1.0" ] - }, - "2.3": { - "error": [ - "2.0" - ], - "http": [ - "1.0" - ] } }, "orm": { @@ -71,7 +63,7 @@ } }, "installed": { - "api": "2.3", + "api": "2.2", "error": "2.0", "http": "1.0", "orm": "0.8.2", diff --git a/src/packages/api/2.2/core/Authentification.php b/src/packages/api/2.2/core/Authentification.php deleted file mode 100644 index b52e350..0000000 --- a/src/packages/api/2.2/core/Authentification.php +++ /dev/null @@ -1,22 +0,0 @@ - Liste des permissions attendues - * - * @return status Si FALSE, pas la permission, sinon TRUE - * - */ - public static function permission($expected){ - return new Error(Err::Success); - } - } - -?> diff --git a/src/packages/api/2.2/core/Request.php b/src/packages/api/2.2/core/Request.php deleted file mode 100644 index ad14914..0000000 --- a/src/packages/api/2.2/core/Request.php +++ /dev/null @@ -1,589 +0,0 @@ - false - ]; - - // Attributs prives utiles (initialisation) - private $path; - private $params; - private $modules; - private $options; - - // Contiendra la reponse a la requete - public $answer; - - // Contiendra l'etat de la requete - public $error; - - - - - - /* CONSTRUCTEUR D'UNE REQUETE DE MODULE - * - * @path Chemin de delegation ("module/methode") - * @param Tableau associatif contenant les parametres utiles au traitement - * - * @return status Retourne si oui ou non tout s'est bien passe - * - */ - public function __construct($path=null, $params=null){ - /* [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->set(Err::MissingPath); - return false; - } - - - /* [3] On met a jour la configuration - =========================================================*/ - /* (1) Section Title */ - $this->modules = json_decode( file_get_contents(self::config_path()), true ); - - /* (2) Gestion de l'erreur de parsage */ - if( $this->modules == null ){ - $this->error->set(Err::ParsingFailed, 'json'); - return false; - } - - - - /* [4] Verification des types des parametres - =========================================================*/ - /* (1) Section Title */ - if( !is_string($path) ){ // Si le type est incorrect - $this->error->set(Err::WrongPathModule); - return false; // On retourne FALSE, si erreur - } - - /* (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'])); - - - /* [5] Verification du chemin (existence module+methode) - =========================================================*/ - if( !$this->checkPath($path) ) // Verification de la coherence du chemin + attribution - return false; - - - /* [6] Verification des droits - =========================================================*/ - if( !$this->checkPermission() ) // Si on a pas les droits - return false; - - - /* [7] Verification des parametres (si @type est defini) - =========================================================*/ - if( !$this->checkParams($params) ) // Verification de tous les types - return false; - - - /* [8] Récupèration des options - =========================================================*/ - $this->buildOptions(); - - - /* [9] Construction de l'objet - =========================================================*/ - $this->params = $params; - $this->error->set(Err::Success); - - return true; // On retourne que tout s'est bien passe - - } - - - - /* EXECUTE LE TRAITEMENT ASSOCIE ET REMPLIE LA REPONSE - * - * @return answer Retourne une reponse de type si tout s'est bien passe - * - */ - public function dispatch(){ - /* [0] Si c'est un download, on lance la methode `download()` - =========================================================*/ - if( $this->options['download'] === true ) - return $this->download(); - - /* [1] On verifie qu'aucune erreur n'a ete signalee - =========================================================*/ - 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 essaie d'instancier le module - =========================================================*/ - $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); - } - - - /* [4] On amorce la methode - =========================================================*/ - /* (1) On lance la fonction */ - $returned = call_user_func( [$instance, $this->getModuleMethod()], $this->params ); - - /* (2) On appelle le destructeur (si défini) */ - $instance = null; - - - /* [5] Gestion de la reponse - =========================================================*/ - /* (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->get() !== Err::Success ) // si il y a une erreur - return new Response($this->error); // on la passe a la reponse - - - /* [2] On essaie d'instancier le module - =========================================================*/ - $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); - } - - - /* [4] On amorce la methode - =========================================================*/ - /* (1) On lance la fonction */ - $returned = call_user_func( [$instance, $this->getModuleMethod()], $this->params ); - - /* (2) On appelle le destructeur (si défini) */ - $instance = null; - - - /* [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['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->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'; - - - /* [6.1] Si requête ajax on crée un fichier temporaire et on renvoie son URL - =========================================================*/ - if( $fromAjax ){ - - - $tmpfname = '/tmp/download_'.uniqid().'.php'; - $bodyfname = __ROOT__.'/tmp/content_'.uniqid().'.php'; - - /* (1) On crée le fichier temporaire */ - $tmpfnameroot = __ROOT__.$tmpfname; - $tmpfile = fopen($tmpfnameroot, 'w'); - - fwrite($tmpfile, '$value) - fwrite($tmpfile, "header(\"$header: $value\");".PHP_EOL); - - /* (3) Script qui écrira le contenu */ - // 1) On écrit le contenu dans un fichier temporaire (et oui encore) - $bodyfile = fopen($bodyfname, 'w'); - fwrite($bodyfile, $returned['body']); - fclose($bodyfile); - chmod($bodyfname, 0775); - - fwrite($tmpfile, "readfile('$bodyfname');".PHP_EOL); - - /* (4) Script qui supprimera les fichiers temporaires */ - fwrite($tmpfile, "unlink('$bodyfname');".PHP_EOL); - fwrite($tmpfile, "unlink(__FILE__);".PHP_EOL); - - fwrite($tmpfile, '?>'.PHP_EOL); - - /* (5) On ferme le fichier */ - fclose($tmpfile); - chmod($tmpfnameroot, 0775); - - $response = new Response($this->error); - $response->append('link', $tmpfname); - - return $response; - - /* [6.2] Gestion du download direct si pas AJAX - =========================================================*/ - }else{ - /* (1) On définit les headers */ - foreach($returned['headers'] as $header=>$value) - header($header.': '.$value); - - /* (2) On affiche le contenu */ - echo $returned['body']; - - return true; - } - } - - - /* DESERIALISATION A PARTIR DE L'URL ET DES DONNEES POST (OPT) - * - * @url Contenu de l'url formatté (commence à "/module/methode") - * @post [opt] Tableau des donnes - * - * @return instance Retourne un objet de type - * - * @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 remote($url, $data=null){ - is_null($data) && ($data = []); - - - /* [1] On verifie que le @path est renseigne - =========================================================*/ - /* (1) Si le path est dans @url */ - $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; - - } - - } - - - /* (2) On vérifie dans tous les cas si le path existe */ - if( !isset($data['path']) ) - return new Request(); - - - - /* [3] On met les paramètres en JSON - =========================================================*/ - /* (1) On initialise les paramètres*/ - $params = []; - - /* (2) On met tous les paramètres en json (sauf @path) */ - foreach($data as $name=>$value){ - if( $name === 'path' ) - continue; - - // {1} On met en JSON // - $json = json_decode( $value, true ); - - // {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 - =========================================================*/ - return new Request($data['path'], $params); - } - - - - - - /* VERIFICATION DU FORMAT ET DE LA COHERENCE DU CHEMIN SPECIFIE - * - * @path String correspondant au chemin de delegation ("module/methode") - * - * @return validity Retourne si oui ou non l'objet est correct - * - */ - private function checkPath($path){ - /* [1] Verification format general - =========================================================*/ - if( !preg_match('#^([\w_-]+)/([\w_-]+)$#i', $path, $matches) ){ // Si mauvais format - $this->error->set(Err::WrongPathModule); - return false; - } - - // On recupere les données de la regex - $module = $matches[1]; - $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->set(Err::UnknownModule, $module); - return false; // On retourne FALSE, si erreur - } - - - /* [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->set(Err::UnknownMethod, preg_replace('/\w+::/i', '', $method) ); - return false; // On retourne FALSE, si erreur - } - - - - /* [4] Enregistrement du chemin et renvoi de SUCCESS - =========================================================*/ - $this->path = [ - 'module' => $module, - 'method' => $method - ]; - - return true; - } - - - - - - - /* RETOURNE SI ON A LA PERMISSION D'EXECUTER CETTE METHODE - * - * @return permission Retourne si on a les droits ou pas pour executer cette methode - * - */ - private function checkPermission(){ - /* [1] On recupere les informations utiles - =========================================================*/ - // On recupere le nom de la methode - $method = $this->modules[$this->path['module']][$this->path['method']]; - - // Si aucune permission n'est definie - 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($method['permissions']); - - /* (1) On retourne FAUX si aucun droit n'a ete trouve */ - if( $granted->get() !== Err::Success ){ - $this->error = $granted; - return false; - } - - - - - /* On retourne VRAI si la permission est ok */ - return true; - } - - - - - /* VERIFICATION DU TYPE DES PARAMETRES ENVOYES - * - * @params Tableau associatif contenant les parametres - * @params peut se voir rajouter les paramètres optionnels s'ils ne sont pas renseignés (initialisés à NULL) - * - * @return correct Retourne si oui ou non les parametres ont le bon type - * - */ - private function checkParams(&$params){ - /* [1] On verifie qu'il ne manque aucun parametre - =========================================================*/ - // Si @params n'est pas un tableau - if( !is_array($params) ){ - $this->error->set(Err::ConfigError); - return false; - } - - $method = $this->modules[$this->path['module']][$this->path['method']]; - - - /* [2] Si le type est defini, pour chaque param, on teste - =========================================================*/ - foreach($method['parameters'] as $name=>$paramsdata){ - /* (1) On récupère si le paramètre est optionnel ou pas */ - $optional = isset($paramsdata['optional']) && $paramsdata['optional'] === true; - - /* (2) Récupère si le paramètre est un fichier et définit comme de type 'FILE' */ - $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 ){ - $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']) ) - continue; - - /* (5) Si le paramètre est optionnel et n'est pas donné */ - if( $isFile || $optional && (!isset($params[$name]) || is_null($params[$name])) ){ - // On le crée le param optionnel avec la valeur NULL - $params[$name] = null; - - // On donne une référence vers le fichier, si c'en est un - if( $isFile ) - $params[$name] = &$_FILES[$name]; - - continue; // On passe au paramètre suivant - - - /* (6) Si le paramètre est renseigné */ - }else - // Si la verification est fausse, on retourne faux - if( !Checker::run($paramsdata['type'], $params[$name]) ){ - $this->error->set(Err::WrongParam, $name, $paramsdata['type']); - return false; - } - - } - - /* [3] Gestion du retour, si tout s'est bien passe - =========================================================*/ - return true; - } - - - - - - /* AJOUT DES OPTIONS A PARTIR DE LA CONFIGURATION - * - */ - private function buildOptions(){ - /* [0] On récupère les options de la méthode en cours - =========================================================*/ - $method = $this->modules[$this->path['module']][$this->path['method']]; - - /* (1) Si 'option' n'est pas défini (ou incorrect), on met les valeurs par défaut */ - if( !isset($method['options']) || !is_array($method['options']) ) - return true; - - /* (2) Par défaut on définit les options par défaut */ - $this->options = self::$default_options; - - - /* (3) On récupère les options données */ - $options = $method['options']; - - - /* [1] Gestion des différentes options - =========================================================*/ - foreach($options as $option=>$value){ - /* (1) On ne prend en compte l'option que si elle est dans les options par défaut */ - if( !isset(self::$default_options[$option]) ) - continue; - - /* (2) Le type de la valeur doit être le même que celui de la valeur par défaut */ - if( gettype($value) != gettype(self::$default_options[$option]) ) - continue; - - /* (3) Si tout est bon, on définit la valeur */ - $this->options[$option] = $value; - } - - return true; - - } - - - - - - /* RENVOI LE CHEMIN D'AMORCAGE DE LA METHODE - * - * @return method Retourne le chemin d'amorcage de la method - * - */ - private function getModuleMethod(){ - /* (1) On essaie de trouver le bon nom */ - return preg_replace('/\w+::/i', '', $this->path['method']); - } - - - } - -?> diff --git a/src/packages/api/2.3/core/AuthSystem.php b/src/packages/api/2.2/module/core/AuthSystem.php similarity index 100% rename from src/packages/api/2.3/core/AuthSystem.php rename to src/packages/api/2.2/module/core/AuthSystem.php diff --git a/src/packages/api/2.2/core/Checker.php b/src/packages/api/2.2/module/core/Checker.php similarity index 100% rename from src/packages/api/2.2/core/Checker.php rename to src/packages/api/2.2/module/core/Checker.php diff --git a/src/packages/api/2.2/core/ModuleFactory.php b/src/packages/api/2.2/module/core/ModuleFactory.php similarity index 100% rename from src/packages/api/2.2/core/ModuleFactory.php rename to src/packages/api/2.2/module/core/ModuleFactory.php diff --git a/src/packages/api/2.3/core/Request.php b/src/packages/api/2.2/module/core/Request.php similarity index 100% rename from src/packages/api/2.3/core/Request.php rename to src/packages/api/2.2/module/core/Request.php diff --git a/src/packages/api/2.2/core/Response.php b/src/packages/api/2.2/module/core/Response.php similarity index 100% rename from src/packages/api/2.2/core/Response.php rename to src/packages/api/2.2/module/core/Response.php diff --git a/src/packages/api/2.3/core/Checker.php b/src/packages/api/2.3/core/Checker.php deleted file mode 100644 index 0aa6056..0000000 --- a/src/packages/api/2.3/core/Checker.php +++ /dev/null @@ -1,145 +0,0 @@ - Type que l'on veut verifier - * @value Valeur a verifier - * - * @return match Retourne si oui ou non la valeur @value est du bon type @type - * - */ - public static function run($type, $value){ - $checker = true; - - /* [0] On verifie que $value n'est pas nul - =========================================================*/ - if( is_null($value) ) return false; - - - - /* [1] Si de type VARCHAR(min, max, flags) - =========================================================*/ - if( preg_match('/^varchar\((\d+), ?(\d+)((?:, ?\w+)+)?\)$/', $type, $match) ){ - // On recupere la taille min - $min = (int) $match[1]; - // On recupere la taille max - $max = (int) $match[2]; - - // On recupere le sous-type si défini - $flags = isset($match[3]) ? explode(',', substr($match[3], 1)) : null; - - // On effectue la verification de taille - $lenCheck = $checker && is_string($value) && strlen($value) <= $max && strlen($value) >= $min; - - // On vérifie les FLAGS s'il est donné - if( is_array($flags) ) - foreach( $flags as $flag ) - $lenCheck = $lenCheck && self::run($flag, $value); - - return $lenCheck; - } - - - /* [2] Si de type ARRAY(type_elements) - =========================================================*/ - if( preg_match('/^array<(.+)>$/', $type, $match) ){ - - // Si c'est pas un tableau on retourne une erreur - if( !is_array($value) ) - return false; - - - $elements_type = $match[1]; - - // On verifie le type pour chaque element - foreach($value as $element) - // Si erreur dans au moins 1 element, on retourne que c'est incorrect - if( !self::run($elements_type, trim($element) ) ) - return false; - - // Si aucune erreur, on retourne que tout est bon - return true; - } - - - /* [n] Sinon, tous les autres types definis - =========================================================*/ - switch($type){ - // Quoi que ce soit - case 'mixed': - return $checker && !is_null($value); - break; - - // Entier positif (id dans BDD) - case 'id': - return $checker && is_numeric($value) && $value <= 2147483647 && $value >= 0; - break; - - // String quelconque (peut etre vide) - case 'text': - return $checker && is_string($value); - - // Adresse mail (255 caracteres max) - case 'mail': - return $checker && is_string($value) && strlen($value) <= 50 && preg_match('/^[\w\.-]+@[\w\.-]+\.[a-z]{2,4}$/i', $value); - break; - - // Hash sha1/md5 - case 'hash': - return $checker && is_string($value) && preg_match('/^[\da-f]+$/i', $value) && (strlen($value) == 40 || strlen($value) == 64); - break; - - case 'alphanumeric': - return $checker && is_string($value) && preg_match('/^[\w\.-]+$/ui', $value); - break; - - case 'letters': - return $checker && is_string($value) && preg_match('/^[a-z -]+$/i', $value); - break; - - case 'status': - return $checker && is_numeric($value) && floor($value) == $value && $value >= 0 && $value <= 100; - break; - - // Tableau non vide - case 'array': - return $checker && is_array($value) && count($value) > 0; - break; - - // Boolean - case 'boolean': - return $checker && is_bool($value); - break; - - // Objet non vide - case 'object': - return $checker && is_object($value) && count((array) $value) > 0; - break; - - // Chaine JSON (on vérifie via le parser) - case 'json': - 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; - } - - return $checker; - - } - - - } -?> diff --git a/src/packages/api/2.3/core/ModuleFactory.php b/src/packages/api/2.3/core/ModuleFactory.php deleted file mode 100644 index 527d5e9..0000000 --- a/src/packages/api/2.3/core/ModuleFactory.php +++ /dev/null @@ -1,31 +0,0 @@ - Nom du module - * @arguments [OPTIONNEL] Arguments à passer au constructeur - * - * @return instance 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); - } - - } diff --git a/src/packages/api/2.3/core/Response.php b/src/packages/api/2.3/core/Response.php deleted file mode 100644 index 840f91b..0000000 --- a/src/packages/api/2.3/core/Response.php +++ /dev/null @@ -1,122 +0,0 @@ - Erreur passee par la requete (si existe) - * - */ - 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 - - - * - * @key Le nom de la valeur a ajouter - * @value La valeur a ajouter - * - */ - public function append($key, $value){ - // Ajoute une entree pour la cle @key et de valeur @value - $this->data[$key] = $value; - - return $this; - } - - - /* AJOUTE TOUTES LES DONNEES A LA REPONSE - * - * @dataset Le tableau associatif correspondant a la reponse - * - */ - public function appendAll($dataset){ - // Si ce n'est pas un tableau, on ne fais rien - if( !is_array($dataset) ) - return $this; - - // Si une valeur contient une erreur - if( array_key_exists('error', $dataset) && $dataset['error'] instanceof Error){ - // On definit cette erreur - $this->error = $dataset['error']; - // On enleve cette entree des donnees - unset($dataset['error']); - } - - // Ajoute une entree pour la cle @key et de valeur @value - $this->data = $dataset; - - return $this; - } - /* RECUPERE UNE DONNEE DE LA REPONSE - - - * - * @key Le nom de la valeur a recuperer - * - * @return value La valeur a cette cle - * @return error Retourne NULL si aucune valeur pour cette cle - * - */ - public function get($key){ - // Si la valeur de cle @key n'existe pas, on retourne NULL - if( !isset($this->data[$key]) ) - return null; - - // Sinon, on retourne la valeur associee - return $this->data[$key]; - } - - - /* RECUPERE TOUTES LES DONNEES DE LA REPONSE - * - * @return data Les donnees de la reponse - * - */ - public function getAll(){ - // Sinon, on retourne la valeur associee - return $this->data; - } - - - /* SERIALISATION A PARTIR DES DONNEES - * - * @return json Retourne les donnees serialisees - * - */ - public function serialize(){ - - // Code Http - $this->error->setHttpCode(); - - // Type de contenu - header('Content-Type: application/json; charset=utf-8'); - - // On rajoute l'erreur au message - $returnData = array_merge([ - 'error' => $this->error->get(), - 'ErrorDescription' => $this->error->explicit() - ], - $this->data - ); - - return json_encode($returnData); - - } - } - -?> diff --git a/src/packages/api/2.3/module/RESTexample.php b/src/packages/api/2.3/module/RESTexample.php deleted file mode 100644 index f3d929a..0000000 --- a/src/packages/api/2.3/module/RESTexample.php +++ /dev/null @@ -1,125 +0,0 @@ - new Error(Err::ModuleError)]; // or other `Err` constant - - return ['created_id' => "Article with title = `$title` and content=`$content`"]; - break; - - case 'GET': - // GET all/an article with the variable: - $URL_0; // id of article ; if not given -> null - - // ... - // process to get articles and get $output_get_articles - $success = true; - // ... - - if( !$success ) - return ['error' => new Error(Err::ModuleError)]; // or other `Err` constant - - // optional param not given is set to null - if( is_null($URL_0) ) - return ['articles' => [ "Article number `1`: sometitle / somecontent", "Article number `2`: sometitle / somecontent"] ]; - else - return ['articles' => [ "Article number `$URL_0`: sometitle / somecontent"] ]; - break; - - case 'VIEW': - // VIEW a specific article (download json file) with the variable: - $URL_0; // id of article ; if not given -> null - - // ... - // process to get articles and get $output_get_articles - $success = true; - // ... - - if( !$success ) - return ['error' => new Error(Err::ModuleError)]; // or other `Err` constant - - // will download, but if AJAX will give a `link` to the file - return [ - 'headers' => [ - 'Content-Type' => 'application/json; charset=utf-8', - 'Content-Disposition' => 'attachment; filename=export'.date('_d_m_Y', time()).'.json', - 'Pragma' => 'no-cache', - 'Expires' => '0' - ], - 'body' => "Article number `$URL_0`: sometitle / somecontent" - ]; - break; - - case 'PUT': - // UPDATE an article with new content with variables: - $URL_0; // id of article to update - $title; // new article's title - $content; // new article's content - - // ... - // process to get $output_updated_article - $success = true; - // ... - - if( !$success ) - return ['error' => new Error(Err::ModuleError)]; // or other `Err` constant - - return ['article' => "Article number `$URL_0`: $title / $content"]; - break; - - case 'DELETE': - // DELETEs an article with the variable: - $URL_0; // id of the article to remove - - // ... - // process to delete article - $success = true; - // ... - - if( !$success ) - return ['error' => new Error(Err::ModuleError)]; // or other `Err` constant - - return ['log' => "Article `$URL_0` successfully deleted"]; // returns success - break; - - // if no match -> error - default: - return ['error' => new Error(Err::UnknownHttpMethod)]; - break; - } - - } - - -}