diff --git a/doc/api/api.docbook b/doc/api/api.docbook
index b0330e75..3c28206c 100644
--- a/doc/api/api.docbook
+++ b/doc/api/api.docbook
@@ -397,6 +397,152 @@
+
+ /api/1.0/object/[object type]/import
+
+ Cette méthode permet d'importer des objets d'un type en particulier à partir de données
+ d'import formatées selon un &ioFormat; configuré pour ce type d'objets. Le type de l'objet
+ est précisé dans l'URL et doit être encodé en conséquence. Par mimétisme du comportement de
+ l'interface web, cette méthode accepte des paramètres similaires et s'attend à récupérer les
+ données d'import dans le corps de la requête.
+
+ Paramètres acceptés
+
+
+ ioFormat
+ Le nom de l'&ioFormat; des données d'import.
+
+
+
+ updateIfExists
+ Booléen permettant d'activer/désactiver la mise à jour des données
+ des objets s'ils existent déjà. Si ce mode est inactif et qu'un objet des données
+ d'import existe déjà, une erreur sera remontée. Les valeurs acceptées sont 1
+ ou 0.
+
+
+
+
+ justTry
+ Booléen permettant d'activer/désactiver le mode de vérification des
+ données d'import uniquement. Si ce mode est actif, les données d'import seront analysées
+ pour vérifier qu'elles sont correctes, mais l'import en lui-même ne sera pas effectué.
+ Les valeurs acceptées sont 1 ou 0.
+
+ Le retour de cette méthode en mode justTry est identique
+ à une exécution en mode normal. Ce mode permet donc d'anticiper le résultat d'un import à
+ partir d'un jeu de données sources.
+ En mode justTry, seul la vérification syntaxique des
+ données est fiable, car les informations doublonnées au sein des données d'import ne pourront
+ être détectées.
+
+
+
+
+
+ En cas d'erreurs détectées dans les informations des objets des données d'import, le tableau
+ errors du retour de la méthode contiendra une entrée pour chaque objet en erreur
+ sous le format d'un dictionnaire dont la clé data reprendra les informations de
+ l'objet telle que chargé (ou générée) depuis les données sources, ainsi qu'un dictionnaire sous la
+ clé errors qui contiendra les erreurs globales concernant l'objet sous la clé
+ globals et les erreurs propres à ses attributs dans un dictionnaire sous la clé
+ attrs.
+
+ Les erreurs d'importation sur un objet sont non-bloquantes : l'importation des autres
+ objets ne sera pas interrompue.
+
+
+ Exemple
+
+
+
+
+
+
+ /api/1.0/object/[object type]/export
+
+ Cette méthode permet d'exporter les objets d'un type en particulier dans un &ioFormat;
+ configuré pour ce type d'objets. Le type de l'objet est précisé dans l'URL et doit être encodé
+ en conséquence.
+
+ Paramètres acceptés
+
+
+ ioFormat
+ Le nom de l'&ioFormat;.
+
+
+
+ En tant normal, le retour de cette méthode sera directement le fichier d'export demandé.
+ Cependant, si une erreur survient, les paramètres d'export seront repris dans le retour
+ JSON de la méthode qui contiendra également les erreurs survenues.
+
+
+ Exemple
+
+
+
+
+
/api/1.0/object/[object type]/[dn]/relation/[relation]
diff --git a/doc/conf/conf.entities.xml b/doc/conf/conf.entities.xml
index 079a8a7b..f1c3514a 100644
--- a/doc/conf/conf.entities.xml
+++ b/doc/conf/conf.entities.xml
@@ -29,3 +29,4 @@
+ioFormat">
diff --git a/src/includes/routes.php b/src/includes/routes.php
index 6fbf5011..381cb287 100644
--- a/src/includes/routes.php
+++ b/src/includes/routes.php
@@ -840,7 +840,6 @@ function handle_old_import_php($request) {
}
LSurl :: add_handler('#^import\.php#', 'handle_old_import_php', false);
-
/*
* Handle LSobject export request
*
@@ -854,7 +853,6 @@ function handle_LSobject_export($request) {
return;
$ioFormats = array();
- $result = null;
if ( LSsession :: loadLSclass('LSio', null, true)) { // Load class with warning
$ioFormats = $object->listValidIOformats();
if (!is_array($ioFormats) || empty($ioFormats)) {
@@ -1675,6 +1673,89 @@ function handle_api_LSobject_create($request) {
}
LSurl :: add_handler('#^api/1.0/object/(?P[^/]+)/create/?$#', 'handle_api_LSobject_create', true, false, true);
+/*
+ * Handle API LSobject import request
+ *
+ * @param[in] $request LSurlRequest The request
+ *
+ * @retval void
+**/
+function handle_api_LSobject_import($request) {
+ $object = get_LSobject_from_API_request($request, true);
+ $data = array(
+ 'success' => false,
+ 'LSobject' => $object -> type,
+ 'ioFormat' => (isset($_REQUEST['ioFormat'])?$_REQUEST['ioFormat']:null),
+ 'updateIfExists' => (isset($_REQUEST['updateIfExists'])?boolval($_REQUEST['updateIfExists']):false),
+ 'justTry' => (isset($_REQUEST['justTry'])?boolval($_REQUEST['justTry']):false),
+ );
+
+ if (!LSsession :: loadLSclass('LSio', null, true)) { // Load LSio class (with warning)
+ LSsession :: displayAjaxReturn($data);
+ return;
+ }
+
+ $ioFormats = $object->listValidIOformats();
+ if (!is_array($ioFormats) || empty($ioFormats)) {
+ $ioFormats = array();
+ LSerror :: addErrorCode('LSsession_16');
+ }
+ else {
+ $data = LSio::import(
+ $data['LSobject'],
+ $data['ioFormat'],
+ 'php://input',
+ $data['updateIfExists'],
+ $data['justTry']
+ );
+ LSlog :: debug("LSio::importFromPostData(): result = ".varDump($result));
+ }
+
+ LSsession :: displayAjaxReturn($data);
+ return $data['success'];
+}
+LSurl :: add_handler('#^api/1.0/object/(?P[^/]+)/import/?$#', 'handle_api_LSobject_import', true, false, true);
+
+/*
+ * Handle API LSobject export request
+ *
+ * @param[in] $request LSurlRequest The request
+ *
+ * @retval void
+**/
+function handle_api_LSobject_export($request) {
+ $object = get_LSobject_from_API_request($request, true);
+ if (!$object)
+ return;
+ $data = array(
+ 'success' => false,
+ 'LSobject' => $object -> type,
+ 'ioFormat' => (isset($_REQUEST['ioFormat'])?$_REQUEST['ioFormat']:null),
+ );
+
+ if (!LSsession :: loadLSclass('LSio', null, true)) { // Load LSio class (with warning)
+ LSsession :: displayAjaxReturn($data);
+ return;
+ }
+
+ if (!$data['ioFormat']) {
+ LSerror :: addErrorCode(null, "ioFormat not specified");
+ LSsession :: displayAjaxReturn($data);
+ return;
+ }
+
+ $ioFormats = $object->listValidIOformats();
+ if (!is_array($ioFormats) || empty($ioFormats)) {
+ $ioFormats = array();
+ LSerror :: addErrorCode('LSsession_16');
+ }
+ else if (!LSio::export($object, $data['ioFormat'])) {
+ LSlog :: error("An error occurred exporting ".$object -> type);
+ }
+ LSsession :: displayAjaxReturn($data);
+}
+LSurl :: add_handler('#^api/1.0/object/(?P[^/]+)/export/?$#', 'handle_api_LSobject_export', true, false, true);
+
/*
* Handle API LSobject show request
*