getRoutes('web'); $menu=''; $body=''; // Tris des routes function sortRoutes($a, $b){ return strnatcmp($a['api'], $b['api']); } usort($routes, 'sortRoutes'); function GenerateLinks($key,$apiArray){ $l=''; if (array_key_exists($key,$apiArray) && count($apiArray[$key])){ foreach ($apiArray[$key] as $api){ preg_match_all('/\w+/', $api['url'], $matches); $link=$apiArray['api'].'-'.implode('-',$matches[0]); $urlText=empty($api['url'])?'/':$api['url']; $l.=''.$urlText.''; } } return $l; } function isSeqArray(array $array) { return !count(array_filter(array_keys($array), 'is_string')) > 0; } function decodeJSONParam($params,$spacer=false,$isSequentialArray=false){ $t=''; foreach($params as $k=>$v){ if(!is_array($v)){ if(strpos($v,'[REQUIRED]')!==false) $v=str_ireplace('[REQUIRED]','REQUIRED',$v); if(strpos($k,'!COMMENT!')!==false) $t.='
// '.$v.'
'; else $t.='
'.$k.' : '.$v.'
'; } else { $delimiterIn='{'; $delimiterOut='},'; $isSeq=false; if(isSeqArray($v)){ $delimiterIn='['; $delimiterOut='],'; $isSeq=true; } $key=''.$k.' : '; if($isSequentialArray) $key=''; $t.='
'.$key.' '.$delimiterIn.decodeJSONParam($v,true,$isSeq).$delimiterOut.'
'; } } return $t; } function GenerateAnApiDoc($key,$apiArray){ $t=''; if (array_key_exists($key,$apiArray) && count($apiArray[$key])){ $t.='

'.$key.'

'; foreach ($apiArray[$key] as $api){ preg_match_all('/\w+/', $api['url'], $matches); $link=$apiArray['api'].'-'.implode('-',$matches[0]); $t.='

'.$apiArray['api'].'/'.$api['url'].'

'; // description principale if(array_key_exists('desc',$api)){ $t.='

'.$api['desc'].'

'; } // paramètre de chemin if (array_key_exists('params',$api) && count($api['params'])){ $t.='

Paramètre du chemin

'; $t.='
Paramètre
Format (PCRE regex)
Description
'; foreach ($api['params'] as $pathparam=>$pathRgx){ $desc=''; if(array_key_exists('params_desc',$api) && array_key_exists($pathparam,$api['params_desc'])) $desc='
'.$api['params_desc'][$pathparam].'
'; $t.='
'.$pathparam.'
'.$pathRgx.'
'.$desc.'
'; } } // paramètre d'URL if ($key==='get' && array_key_exists('get_params',$api) && count($api['get_params'])){ $t.='

Paramètre d\'URL

'; $t.='
Nom du paramètre
Format (PCRE regex ou JSON(string))
Description
'; foreach ($api['get_params'] as $paramAlias=>$paramRgx){ $desc=''; if(array_key_exists('get_params_desc',$api) && array_key_exists($paramAlias,$api['get_params_desc'])) $desc='
'.$api['get_params_desc'][$paramAlias].'
'; $t.='
'.$paramAlias.'
'.$paramRgx.'
'.$desc.'
'; } } // paramètre optionnels d'URL if ($key==='get' && array_key_exists('opt_get_params',$api) && count($api['opt_get_params'])){ $t.='

Paramètre optionnels d\'URL

'; $t.='
Nom du paramètre
Format (PCRE regex ou JSON(string))
Description
'; foreach ($api['opt_get_params'] as $paramAlias=>$paramRgx){ $desc=''; if(array_key_exists('get_params_desc',$api) && array_key_exists($paramAlias,$api['get_params_desc'])) $desc='
'.$api['get_params_desc'][$paramAlias].'
'; $t.='
'.$paramAlias.'
'.$paramRgx.'
'.$desc.'
'; } } // paramètre de POST, PATCH et DELETE if (($key==='post' || $key==='patch' || $key==='delete') && array_key_exists('post_params',$api) && count($api['post_params'])){ $t.='

Paramètres

'; $t.='
Nom du paramètre
Format (PCRE regex ou JSON(string))
Description
'; foreach ($api['post_params'] as $paramAlias=>$paramRgx){ $desc=''; if($paramRgx!=='JSON' && array_key_exists('post_params_desc',$api) && array_key_exists($paramAlias,$api['post_params_desc'])){ $desc='
'.$api['post_params_desc'][$paramAlias].'
'; if(strpos($desc,'[REQUIRED]')!==false) $desc=str_ireplace('[REQUIRED]','REQUIRED',$desc); } if($paramRgx==='JSON') $desc='
'.decodeJSONParam($api['post_params_desc'][$paramAlias]).'
'; $t.='
'.$paramAlias.'
'.$paramRgx.'
'.$desc.'
'; } } // paramètre optionnels de POST ET PATCH if (($key==='post' || $key==='patch' /* || $key==='delete' */) && array_key_exists('opt_post_params',$api) && count($api['opt_post_params'])){ $t.='

Paramètres optionnels

'; $t.='
Nom du paramètre
Format (PCRE regex ou JSON(string))
Description
'; foreach ($api['opt_post_params'] as $paramAlias=>$paramRgx){ $desc=''; if($paramRgx!=='JSON' && array_key_exists('post_params_desc',$api) && array_key_exists($paramAlias,$api['post_params_desc'])) $desc='
'.$api['post_params_desc'][$paramAlias].'
'; if($paramRgx==='JSON') $desc='
'.decodeJSONParam($api['post_params_desc'][$paramAlias]).'
'; $t.='
'.$paramAlias.'
'.$paramRgx.'
'.$desc.'
'; } } } } return $t; } if(is_array($routes)){ foreach ($routes as $api){ $get=GenerateLinks('get',$api); $post=GenerateLinks('post',$api); $patch=GenerateLinks('patch',$api); $delete=GenerateLinks('delete',$api); $menu.=' '.$api['api'].'/ '; $body.='

'.$api['api'].'

'; $body.=GenerateAnApiDoc('get',$api); $body.=GenerateAnApiDoc('post',$api); $body.=GenerateAnApiDoc('patch',$api); $body.=GenerateAnApiDoc('delete',$api); $body.='
'; } } $html=' API ROUTES

API

Routes disponibles

Syntax d\'un fichier route

Le fichier route doit être nommé web.routes.php et doit être placé à la racine du controlleur concerné.

'; $html.="
Voir la syntaxe
return  [
        // nom de l'API et préfixe de l'URL, est unique au système
        'api'=>'apiname'
        // la classe publique LARAVEL connecté à cette route, relativement à /app/Http/Controllers/..
        ,'class'=>'entityOrModules\\path\\to\\publicfunction'
        // Les possibles restrictions d'accès au groupe de route (FACULTATIF). Tous les routes de tous les types seront restreint par les accès utilisateur
        // Restrictions possibles : 
        // - sys_admin : administrateur système
        // - admin : administrateur client
        ,'restrictions'=>['sys_admin','admin']
        // Les routes GET (pour l'obtention de donnée)
        ,'get'=>[
            [
                // Description de la route
                'desc'=>'La description détaillée de la route',
                // Les possibles restrictions d'accès à la route (FACULTATIF). La route sera restreinte par les accès utilisateur
                // Restrictions possibles : 
                // - sys_admin : administrateur système
                // - admin : administrateur client
                ,'restrictions'=>['sys_admin','admin']
                // Reste de l'URL
                'url'=>'{dynamicparam}/path/to/something'
                // méthode de la classe publique que ça atteindra
                ,'method'=>'methodName'
                // paramètres dynamiques du path de l'URL, et l'expression régulière de contrôle du paramètre
                ,'params'=>[
                    'dynamicparam' =>'[PCRE REGEX]',
                ]
                // description des paramètres dynamiques du path de l'URL
                ,'params_desc'=>[
                    'dynamicparam' =>'Un paramètre dynamique'
                ]
                // paramètres requis de l'URL (ie mon/url?param=paramvalue)
                ,'get_params'=>[
                    'param' =>'[PCRE REGEX]'
                ]
                // paramètres facultatifs de l'URL
                ,'opt_get_params'=>[
                    'param2' =>'[PCRE REGEX]'
                ]
                // description des paramètres de l'URL
                ,'get_params_desc'=>[
                    'param' =>'description de param',
                    'param2' =>'description de param2'
                ]
            ],
        ]
        // Les routes POST (pour la création d'éléments uniquement)
        ,'post'=>[
            [
                // Description de la route
                'desc'=>'La description détaillée de la route',
                // Les possibles restrictions d'accès à la route (FACULTATIF). La route sera restreinte par les accès utilisateur
                // Restrictions possibles : 
                // - sys_admin : administrateur système
                // - admin : administrateur client
                ,'restrictions'=>['sys_admin','admin']
                // Reste de l'URL
                'url'=>'{dynamicparam}/path/to/something'
                // méthode de la classe publique que ça atteindra
                ,'method'=>'methodName'
                // paramètres dynamiques du path de l'URL, et l'expression régulière de contrôle du paramètre
                ,'params'=>[
                    'dynamicparam' =>'[PCRE REGEX]',
                ]
                // description des paramètres dynamiques du path de l'URL
                ,'params_desc'=>[
                    'dynamicparam' =>'Un paramètre dynamique'
                ]
                // Paramètre du POST
                ,'post_params'=>[
                    'param' =>'[PCRE REGEX ou \"JSON\"]',
                    'jsonex' =>'[PCRE REGEX ou \"JSON\"]',
                ]
                // Paramètres optionnels du POST
                ,'opt_post_params'=>[
                    'param2' =>'[PCRE REGEX ou \"JSON\"]'
                ]
                // description des paramètres du POST
                ,'post_params_desc'=>[
                    'param' =>'description de param',
                    'param2' =>'description de param2',
                    'jsonex' =>'Un tableau PHP représentant l\'objet JSON',
                ]
            ],
        ]
        // Les routes PATCH (pour la mise à jour d'éléments uniquement)
        ,'patch'=>[
            [
                // Description de la route
                'desc'=>'La description détaillée de la route',
                // Les possibles restrictions d'accès à la route (FACULTATIF). La route sera restreinte par les accès utilisateur
                // Restrictions possibles : 
                // - sys_admin : administrateur système
                // - admin : administrateur client
                ,'restrictions'=>['sys_admin','admin']
                // Reste de l'URL
                'url'=>'{dynamicparam}/path/to/something'
                // méthode de la classe publique que ça atteindra
                ,'method'=>'methodName'
                // paramètres dynamiques du path de l'URL, et l'expression régulière de contrôle du paramètre
                ,'params'=>[
                    'dynamicparam' =>'[PCRE REGEX ou \"JSON\"]',
                ]
                // description des paramètres dynamiques du path de l'URL
                ,'params_desc'=>[
                    'dynamicparam' =>'Un paramètre dynamique'
                ]
                // Paramètre du PATCH
                ,'post_params'=>[
                    'param' =>'[PCRE REGEX]'
                ]
                // Paramètres optionnels du PATCH
                ,'opt_post_params'=>[
                    'param2' =>'[PCRE REGEX ou \"JSON\"]'
                    'jsonex' =>'[PCRE REGEX ou \"JSON\"]',
                ]
                // description des paramètres du PATCH
                ,'post_params_desc'=>[
                    'param' =>'description de param',
                    'param2' =>'description de param2'
                    'jsonex' =>'Un tableau PHP représentant l\'objet JSON',
                ]
            ],
        ]
        // Les routes DELETE (pour la suppression d'éléments uniquement)
        ,'delete'=>[
            [
                // Description de la route
                'desc'=>'La description détaillée de la route',
                // Les possibles restrictions d'accès à la route (FACULTATIF). La route sera restreinte par les accès utilisateur
                // Restrictions possibles : 
                // - sys_admin : administrateur système
                // - admin : administrateur client
                ,'restrictions'=>['sys_admin','admin']
                // Reste de l'URL
                'url'=>'{dynamicparam}/path/to/something'
                // méthode de la classe publique que ça atteindra
                ,'method'=>'methodName'
                // paramètres dynamiques du path de l'URL, et l'expression régulière de contrôle du paramètre
                ,'params'=>[
                    'dynamicparam' =>'[PCRE REGEX]',
                ]
                // description des paramètres dynamiques du path de l'URL
                ,'params_desc'=>[
                    'dynamicparam' =>'Un paramètre dynamique'
                ]
                // Paramètre du DELETE
                ,'post_params'=>[
                    'param' =>'[PCRE REGEX]'
                ]
                // Paramètres optionnels du DELETE
                ,'opt_post_params'=>[
                    'param2' =>'[PCRE REGEX]'
                ]
                // description des paramètres du DELETE
                ,'post_params_desc'=>[
                    'param' =>'description de param',
                    'param2' =>'description de param2'
                ]
            ],
        ]
    ];
"; $html.="
Voir un exemple
return  [
        'api'=>'articlemanager'
        ,'class'=>'Modules\ArticleManager\ArticleManagerPublic'
        ,'get'=>[
            [
                'desc'=>'Récupère les prix de l\'article par la quantité',
                'url'=>'{idtask}/getpricewithqty'
                ,'method'=>'getPriceWithQty'
                ,'params'=>[
                    'idtask' =>'\d+',
                ]
                ,'params_desc'=>[
                    'idtask' =>'Identifiant tâche'
                ]
                ,'get_params'=>[
                    'thpId' =>'\d+',
                    'qty' =>'\d+\.?\d*',
                    'discountId' =>'\d+',
                    'productUnitId' =>'\d+',
                ]
                ,'get_params_desc'=>[
                    'thpId' =>'Identifiant de ligne de tâche',
                    'qty' =>'Quantité',
                    'discountId' =>'Identifant remise',
                    'productUnitId' =>'Identifiant de l\'unité du produit',
                ]
            ],
            [
                'desc'=>'Récupère les prix de l\'article par un prix donné',
                'url'=>'{idtask}/getpricewithprice'
                ,'method'=>'getPriceWithPrice'
                ,'params'=>[
                    'idtask' =>'\d+',
                ]
                ,'params_desc'=>[
                    'idtask' =>'Identifiant tâche'
                ]
                ,'get_params'=>[
                    'thpId' =>'\d+',
                    'qty' =>'\d+\.?\d*',
                    'discountId' =>'\d+',
                    'productUnitId' =>'\d+',
                    'priceType' =>'unitprice|packprice',
                    'price' =>'\d+\.?\d*',
                ]
                ,'get_params_desc'=>[
                    'thpId' =>'Identifiant de ligne de tâche',
                    'qty' =>'Quantité',
                    'discountId' =>'Identifant remise',
                    'productUnitId' =>'Identifiant de l\'unité du produit',
                    'priceType' =>'Le type de price souhaite : prix unitaire, prix conditionnement',
                    'price' =>'Prix',
                ]
            ],
            [
                'desc'=>'Recherche des articles',
                'url'=>'{idtask}/search'
                ,'method'=>'search'
                ,'params'=>[
                    'idtask' =>'\d+',
                ]
                ,'params_desc'=>[
                    'idtask' =>'Identifiant tâche'
                ]
                ,'get_params'=>[
                    'search' =>'\w+',
                ]
                ,'get_params_desc'=>[
                    'search' =>'Terme de la recherche',
                ]
            ],
            [
                'desc'=>'Récupère un objet de grille Vgrid',
                'url'=>'{idtask}/list/{gridType}/'
                ,'method'=>'getProductList'
                ,'params'=>[
                    'idtask' =>'\d+',
                    'gridType' =>'productall|productfromprice|alreadyemployed|compmodels|devices',
                ]
                ,'params_desc'=>[
                    'idtask' =>'Identifiant tâche',
                    'gridType' =>'Le type de grille souhaité : Tous les produits, Produit des tarifs, Produits déjà utilisés, Composant modèles, Machines',
                ]
            ],
        ]
        ,'post'=>[
            [
                'desc'=>'Ajoute un article en fonction de son type',
                'url'=>'{idtask}/addarticle/'
                ,'method'=>'addArticle'
                ,'params'=>[
                    'idtask' =>'\d+',
                ]
                ,'params_desc'=>[
                    'idtask' =>'Identifiant tâche'
                ]
                ,'post_params'=>[
                    'pid' =>'\d+',
                    'type' =>'\w+',
                    'uid' =>'\d+',
                ]
                ,'post_params_desc'=>[
                    'pid' =>'Identifiant produit',
                    'type' =>'Type de produit : product, device',
                    'uid' =>'Identifiant de l\'unité',
                ]
            ],
            [
                'desc'=>'test JSON',
                'url'=>'equipment'
                ,'method'=>'addArticle'
                ,'params'=>[
                    // 'idtask' =>'\d+',
                ]
                ,'params_desc'=>[
                    // 'idtask' =>'Identifiant tâche'
                ]
                ,'post_params'=>[
                    'data' =>'JSON',
                ]
                ,'post_params_desc'=>[
                    'data'=>[
                        'external_id'=>'Id externe (ID SAGE)',
                        'code'=>'Code de la société [REQUIRED]',
                        'name'=>'Nom de la société',
                        'email'=>'Email de la société',
                        'web_site'=>'Adresse web de la société',
                        'siret'=>'Siret de la société',
                        'parent_id'=>'Id de la société mère (centrale d\'achat)',
                        'parent_code'=>'Code de la société mère (centrale d\'achat)',
                        'parent_external_id'=>'Id externe de la société mère (centrale d\'achat)',
                        'contacts'=>[
                            [
                                'external_id'=>'Id externe (ID SAGE)',
                                'code'=>'Code du contact [REQUIRED]',
                                'name'=>'Nom du contact',
                                'first_name'=>'Prénom du contact',
                                'phone'=>'Téléphone du contact',
                                'email'=>'Email du contact',
                                'linkedin'=>'Adresse LinkedIn du contact',
                            ],
                            [
                                'external_id'=>'Id externe (ID SAGE)',
                                'code'=>'Code du contact [REQUIRED]',
                                'name'=>'Nom du contact',
                                'first_name'=>'Prénom du contact',
                                'phone'=>'Téléphone du contact',
                                'email'=>'Email du contact',
                                'linkedin'=>'Adresse LinkedIn du contact',
                            ]
                        ],
                        'locations'=>[
                            '!COMMENT!_1'=>'Code adresse principale, Une seule adresse principale [REQUIRED]',
                            'main'=>[
                                'external_id'=>'Id externe (ID SAGE)',
                                'address1'=>'Zone d\'adresse 1 de l\'adresse principale',
                                'address2'=>'Zone d\'adresse 2 de l\'adresse principale',
                                'postal'=>'Code postale de l\'adresse principale',
                                'city'=>'Ville de l\'adresse principale',
                                'country'=>'Pays de l\'adresse principale',
                                'phone'=>'Téléphone de l\'adresse principale',
                                'email'=>'Email de l\'adresse principale',
                            ],
                            '!COMMENT!_2'=>'Code adresse de livraison, Peut y en avoir plusieurs ',
                            'delivery'=>[
                                'external_id'=>'Id externe (ID SAGE)',
                                'address1'=>'Zone d\'adresse 1 de l\'adresse principale',
                                'address2'=>'Zone d\'adresse 2 de l\'adresse principale',
                                'postal'=>'Code postale de l\'adresse principale',
                                'city'=>'Ville de l\'adresse principale',
                                'country'=>'Pays de l\'adresse principale',
                                'phone'=>'Téléphone de l\'adresse principale',
                                'email'=>'Email de l\'adresse principale',
                            ]
                        ],
                    ],
                ]
            ],
        ]
        ,'patch'=>[
            [
                'desc'=>'Met à jour un article',
                'url'=>'{idtask}/updatearticle/'
                ,'method'=>'updateArticle'
                ,'params'=>[
                    'idtask' =>'\d+',
                ]
                ,'params_desc'=>[
                    'idtask' =>'Identifiant tâche'
                ]
                ,'post_params'=>[
                    'thpId'=>'\d+',
                    'unitId'=>'\d+',
                    'unitPrice'=>'\d+',
                    'packPrice'=>'\d+',
                    'name'=>'\w+',
                    'qty'=>'\d+\.?\d*',
                ]
                ,'opt_post_params'=>[
                    'deliveryDate'=>'\d{4}\/\d{2}\/\d{2}(?>\s?\d{2}:\d{2}|)',
                    'discountId'=>'\d+',
                ]
                ,'post_params_desc'=>[
                    'thpId'=>'Identifiant ligne de tâche',
                    'unitId'=>'Identifiant de l\'unité',
                    'unitPrice'=>'Prix unitaire',
                    'packPrice'=>'Prix de conditionnement',
                    'name'=>'Nom du produit',
                    'qty'=>'Quantité',
                    'deliveryDate'=>'Date de livraison',
                    'discountId'=>'Identifiant de la remise',
                ]
            ],
            [
                'desc'=>'Change l\'ordre d\'une ligne',
                'url'=>'{idtask}/moveline/'
                ,'method'=>'moveLine'
                ,'params'=>[
                    'idtask' =>'\d+',
                ]
                ,'params_desc'=>[
                    'idtask' =>'Identifiant tâche'
                ]
                ,'post_params'=>[
                    'type' =>'product|comment',
                    'index' =>'\d+',
                    'oid' =>'\d+',
                ]
                ,'post_params_desc'=>[
                    'type' =>'Type de ligne : produit ou commentaire',
                    'index' =>'Ordre de la ligne dans la liste',
                    'oid' =>'Identifiant de la ligne',
                ]
            ],
            [
                'desc'=>'Met à jour un commentaire',
                'url'=>'{idtask}/updatecomment/'
                ,'method'=>'changeComment'
                ,'params'=>[
                    'idtask' =>'\d+',
                ]
                ,'params_desc'=>[
                    'idtask' =>'Identifiant tâche'
                ]
                ,'post_params'=>[
                    'txt' =>'\w+',
                    'commentId' =>'\d+',
                ]
                ,'post_params_desc'=>[
                    'txt' =>'Text du commentaire',
                    'commentId' =>'Identifiant du commentaire',
                ]
            ],
        ]
        ,'delete'=>[
            [
                'desc'=>'Supprime un article',
                'url'=>'{idtask}/deletearticle/'
                ,'method'=>'delArticle'
                ,'params'=>[
                    'idtask' =>'\d+',
                ]
                ,'params_desc'=>[
                    'idtask' =>'Identifiant tâche'
                ]
                ,'post_params'=>[
                    'thpId' =>'\d+',
                ]
                ,'post_params_desc'=>[
                    'thpId' =>'Identifiant ligne de tâche',
                ]
            ],
            [
                'desc'=>'Supprime un commentaire',
                'url'=>'{idtask}/deletecomment/'
                ,'method'=>'delComment'
                ,'params'=>[
                    'idtask' =>'\d+',
                ]
                ,'params_desc'=>[
                    'idtask' =>'Identifiant tâche'
                ]
                ,'post_params'=>[
                    'thcId' =>'\d+',
                ]
                ,'post_params_desc'=>[
                    'thpId' =>'Identifiant ligne de tâche',
                ]
            ],
        ]
    ];
"; $html.='
'.$body.'
'; echo $html;