From de903a331cdec25d7aad9b533009cc6f99c1e142 Mon Sep 17 00:00:00 2001
From: Laurent Giovannoni <laurent.giovannoni@maarch.org>
Date: Thu, 18 Jan 2018 14:27:17 +0100
Subject: [PATCH] #13 add batch to convert and delete old files

---
 .gitignore                                    |   4 +
 core/Controllers/DocserverController.php      |   2 +-
 core/Controllers/StoreController.php          |   3 +-
 core/Models/DatabasePDO.php                   |  13 +
 .../Controllers/ProcessConvertController.php  |  19 +-
 .../Controllers/ProcessFulltextController.php |   8 +-
 .../ProcessManageConvertController.php        |   6 +-
 .../ProcessThumbnailsController.php           |   2 +-
 modules/convert/Test/ProcessConvertTest.php   |  24 +-
 .../convert/Test/ProcessManageConvertTest.php | 286 ++++++-
 modules/convert/Test/Samples/test.html        |   8 +
 modules/convert/Test/Samples/test.odt         | Bin 0 -> 8726 bytes
 modules/convert/Test/Samples/test.pdf         | Bin 0 -> 7945 bytes
 modules/convert/Test/Samples/test.txt         |   1 +
 modules/convert/batch/LoggerLog4php.php       |   7 +
 modules/convert/batch/batch_tools.php         |  20 +-
 modules/convert/batch/config/config.xml       |  44 +-
 modules/convert/batch/fill_stack.php          |  38 +-
 modules/convert/batch/load_fill_stack.php     |  38 +-
 modules/convert/batch/process_stack.php       |  29 +-
 modules/convert/batch/verif_index.php         |   7 +
 modules/convert/services/ManageConvert.php    |  42 -
 .../services/ManageConvertAbstract.php        | 164 ----
 modules/convert/services/ProcessConvert.php   |  42 -
 .../services/ProcessConvertAbstract.php       | 592 --------------
 modules/convert/services/ProcessFulltext.php  |  42 -
 .../services/ProcessFulltextAbstract.php      | 740 ------------------
 .../convert/services/ProcessThumbnails.php    |  42 -
 .../services/ProcessThumbnailsAbstract.php    | 501 ------------
 29 files changed, 394 insertions(+), 2330 deletions(-)
 create mode 100644 modules/convert/Test/Samples/test.html
 create mode 100644 modules/convert/Test/Samples/test.odt
 create mode 100644 modules/convert/Test/Samples/test.pdf
 create mode 100644 modules/convert/Test/Samples/test.txt
 delete mode 100644 modules/convert/services/ManageConvert.php
 delete mode 100644 modules/convert/services/ManageConvertAbstract.php
 delete mode 100644 modules/convert/services/ProcessConvert.php
 delete mode 100644 modules/convert/services/ProcessConvertAbstract.php
 delete mode 100644 modules/convert/services/ProcessFulltext.php
 delete mode 100644 modules/convert/services/ProcessFulltextAbstract.php
 delete mode 100644 modules/convert/services/ProcessThumbnails.php
 delete mode 100644 modules/convert/services/ProcessThumbnailsAbstract.php

diff --git a/.gitignore b/.gitignore
index 68d9b18a307..1c765e659bf 100755
--- a/.gitignore
+++ b/.gitignore
@@ -13,3 +13,7 @@ core/Test/build/
 apps/maarch_entreprise/tmp/*
 /nbproject/private/apps/maarch_entreprise/define_custom.php
 apps/maarch_entreprise/js/angular/main.bundle.js
+modules/convert/batch/scripts/launch_fulltext_letterbox.sh
+modules/convert/batch/scripts/launch_convert_letterbox.sh
+modules/convert/batch/config/config_only_indexes.xml
+modules/convert/batch/tmp/
diff --git a/core/Controllers/DocserverController.php b/core/Controllers/DocserverController.php
index d8813ff39e4..b011be2edcd 100755
--- a/core/Controllers/DocserverController.php
+++ b/core/Controllers/DocserverController.php
@@ -107,7 +107,7 @@ class DocserverController
                 umask(0022);
                 chmod($monthPath, 0770);
             } else {
-                return ['errors' => '[createPathOnDocServer] Folder alreay exists, workbatch already exist:' . $pathToDS];
+                //return ['errors' => '[createPathOnDocServer] Folder alreay exists, workbatch already exist:' . $pathToDS];
             }
         }
 
diff --git a/core/Controllers/StoreController.php b/core/Controllers/StoreController.php
index 521ff4424e5..42aa78df6df 100644
--- a/core/Controllers/StoreController.php
+++ b/core/Controllers/StoreController.php
@@ -99,7 +99,8 @@ class StoreController
             return ['errors' => '[storeRessourceOnDocserver] FileInfos.tmpDir does not exist'];
         }
         if (!file_exists($aArgs['fileInfos']['tmpDir'] . $aArgs['fileInfos']['tmpFileName'])) {
-            return ['errors' => '[storeRessourceOnDocserver] FileInfos.tmpFileName does not exist'];
+            return ['errors' => '[storeRessourceOnDocserver] FileInfos.tmpFileName does not exist '
+            . $aArgs['fileInfos']['tmpDir'] . $aArgs['fileInfos']['tmpFileName']];
         }
 
         $aArgs['docserverTypeId'] = empty($aArgs['docserverTypeId']) ? 'DOC' : $aArgs['docserverTypeId'];
diff --git a/core/Models/DatabasePDO.php b/core/Models/DatabasePDO.php
index 83685fbdeaa..9422820642c 100755
--- a/core/Models/DatabasePDO.php
+++ b/core/Models/DatabasePDO.php
@@ -35,6 +35,19 @@ class DatabasePDO
             $path = 'apps/maarch_entreprise/xml/config.xml';
         }
 
+        if (!file_exists($path)) {
+            if (
+                file_exists($GLOBALS['MaarchDirectory'] 
+                    . "custom/{$customId}/apps/maarch_entreprise/xml/config.xml")
+            ) {
+                $path = $GLOBALS['MaarchDirectory'] 
+                    . "custom/{$customId}/apps/maarch_entreprise/xml/config.xml";
+            } else {
+                $path = $GLOBALS['MaarchDirectory'] 
+                    . 'apps/maarch_entreprise/xml/config.xml';
+            }
+        }
+
         $server = '';
         $port = '';
         $name = '';
diff --git a/modules/convert/Controllers/ProcessConvertController.php b/modules/convert/Controllers/ProcessConvertController.php
index f5b63b707d4..27276ed007c 100644
--- a/modules/convert/Controllers/ProcessConvertController.php
+++ b/modules/convert/Controllers/ProcessConvertController.php
@@ -131,7 +131,7 @@ class ProcessConvertController
         }
 
         $res = ResModel::getById(['resId' => $resId, 'resTable' => $args['resTable']]);
-        
+
         if ($res['res_id'] <> '') {
             $resourcePath = ResDocserverModel::getSourceResourcePath(
                 [
@@ -182,7 +182,6 @@ class ProcessConvertController
                 'error' => '',
             );
         }
-        
         if ($resultOfConversion['status'] <> '0') {
             ProcessConvertModel::manageErrorOnDb(
                 ['resTable' => $resTable, 'resId' => $resId, 'result' => '-1']
@@ -194,7 +193,7 @@ class ProcessConvertController
         $storeResult = StoreController::storeResourceOnDocServer([
             'collId'    => $collId,
             'fileInfos' => [
-                'tmpDir'        => CoreConfigModel::getTmpPath(),
+                'tmpDir'        => $tmpDir,
                 'size'          => filesize($fileNameOnTmp),
                 'format'        => 'PDF',
                 'tmpFileName'   => pathinfo($fileNameOnTmp, PATHINFO_FILENAME) . '.pdf',
@@ -202,7 +201,6 @@ class ProcessConvertController
             'docserverTypeId'   => 'CONVERT'
         ]);
 
-
         if (empty($storeResult)) {
             $returnArray = array(
                 'status' => '1',
@@ -216,6 +214,19 @@ class ProcessConvertController
             return $returnArray;
         }
 
+        if (!empty($storeResult['errors'])) {
+            $returnArray = array(
+                'status' => '1',
+                'value' => '',
+                'error' => $storeResult['errors'] . ' error for convert:' 
+                    . $fileNameOnTmp,
+            );
+            ProcessConvertModel::manageErrorOnDb(
+                ['resTable' => $resTable, 'resId' => $resId, 'result' => '-1']
+            );
+            return $returnArray;
+        }
+
         $targetDs = DocserverModel::getById(['id' => $storeResult['docserver_id']]);
 
         // LogsController::info(['message'=>'avant update', 'code'=>19, ]);
diff --git a/modules/convert/Controllers/ProcessFulltextController.php b/modules/convert/Controllers/ProcessFulltextController.php
index 3d39152c58e..54a3a3bf514 100644
--- a/modules/convert/Controllers/ProcessFulltextController.php
+++ b/modules/convert/Controllers/ProcessFulltextController.php
@@ -43,19 +43,19 @@ class ProcessFulltextController
 
     public function __construct($pdftotext = 'pdftotext')
     {
-        // Storing text in lucpreene index
+        // Storing text in lucene index
         set_include_path('apps/maarch_entreprise/tools/' 
             . PATH_SEPARATOR . get_include_path()
         );
 
-        if(!@include('Zend/Search/Lucene.php')) {
+        //if(!@include('Zend/Search/Lucene.php')) {
             set_include_path($GLOBALS['MaarchDirectory'] 
                 . 'apps/maarch_entreprise/tools/' 
                 . PATH_SEPARATOR . get_include_path()
             );
 
             require_once("Zend/Search/Lucene.php");
-        }
+        //}
 
         $this->pdftotext = $pdftotext;
     }
@@ -256,7 +256,7 @@ class ProcessFulltextController
         $storeResult = StoreController::storeResourceOnDocServer([
             'collId'    => $collId,
             'fileInfos' => [
-                'tmpDir'        => CoreConfigModel::getTmpPath(),
+                'tmpDir'        => $tmpDir,
                 'size'          => filesize($fileNameOnTmp),
                 'format'        => 'TXT',
                 'tmpFileName'   => pathinfo($fileNameOnTmp, PATHINFO_FILENAME) . '.txt',
diff --git a/modules/convert/Controllers/ProcessManageConvertController.php b/modules/convert/Controllers/ProcessManageConvertController.php
index 4d8964681b9..0c0afa889f2 100644
--- a/modules/convert/Controllers/ProcessManageConvertController.php
+++ b/modules/convert/Controllers/ProcessManageConvertController.php
@@ -188,8 +188,10 @@ class ProcessManageConvertController
                 'path_to_lucene' => $path_to_lucene
             );
         }
-        $ProcessConvertService = new ProcessFulltextController();
-        $resultOfConversion = $ProcessConvertService->fulltext($params);
+        $ProcessConvertServiceFulltext = new ProcessFulltextController();
+
+        $resultOfConversion = $ProcessConvertServiceFulltext->fulltext($params);
+
         if ($resultOfConversion['status'] <> '0') {
             $returnArray = array(
                 'status' => '1',
diff --git a/modules/convert/Controllers/ProcessThumbnailsController.php b/modules/convert/Controllers/ProcessThumbnailsController.php
index c5c9b23b43e..39a4545e0fd 100644
--- a/modules/convert/Controllers/ProcessThumbnailsController.php
+++ b/modules/convert/Controllers/ProcessThumbnailsController.php
@@ -199,7 +199,7 @@ class ProcessThumbnailsController
         $storeResult = StoreController::storeResourceOnDocServer([
             'collId'    => $collId,
             'fileInfos' => [
-                'tmpDir'        => CoreConfigModel::getTmpPath(),
+                'tmpDir'        => $tmpDir,
                 'size'          => filesize($fileNameOnTmp),
                 'format'        => 'PNG',
                 'tmpFileName'   => pathinfo($fileNameOnTmp, PATHINFO_FILENAME) . '.png',
diff --git a/modules/convert/Test/ProcessConvertTest.php b/modules/convert/Test/ProcessConvertTest.php
index c25c0dcc3e3..301729d109a 100644
--- a/modules/convert/Test/ProcessConvertTest.php
+++ b/modules/convert/Test/ProcessConvertTest.php
@@ -22,23 +22,13 @@ class ProcessConvertTest extends TestCase
             ]
         );
 
-        $path = $_SESSION['config']['tmppath'] . '/test/';
+        $samplePath = 'modules/convert/Test/Samples/';
 
-        if (!is_dir($path)) {
-            mkdir($path);
-        }
-
-        $fileSource = 'test_source.txt';
-        
-        if (file_exists($path . $fileSource)) {
-            unlink($path . $fileSource);
-        }
-
-        $fp = fopen($path . $fileSource, 'a');
-        fwrite($fp, 'a unit test for PHP CONVERSION lorem ipsum...');
-        fclose($fp);
+        //SAMPLE TXT
+        $fileSource = 'test.txt';
+        $fileFormat = 'txt';
 
-        $fileContent = file_get_contents($path . $fileSource, FILE_BINARY);
+        $fileContent = file_get_contents($samplePath . $fileSource, FILE_BINARY);
         $encodedFile = base64_encode($fileContent);
         //echo $encodedFile . PHP_EOL;exit;
         
@@ -48,7 +38,7 @@ class ProcessConvertTest extends TestCase
             $data,
             array(
                 'column' => 'subject',
-                'value' => 'UNIT TEST from slim',
+                'value' => 'UNIT TEST CONVERT from slim',
                 'type' => 'string',
             )
         );
@@ -85,7 +75,7 @@ class ProcessConvertTest extends TestCase
             'data'          => $data,
             'collId'        => 'letterbox_coll',
             'table'         => 'res_letterbox',
-            'fileFormat'    => 'txt',
+            'fileFormat'    => $fileFormat,
             'status'        => 'new',
         ];
 
diff --git a/modules/convert/Test/ProcessManageConvertTest.php b/modules/convert/Test/ProcessManageConvertTest.php
index 470e953f990..106657787f8 100644
--- a/modules/convert/Test/ProcessManageConvertTest.php
+++ b/modules/convert/Test/ProcessManageConvertTest.php
@@ -22,23 +22,205 @@ class ManageProcessConvertTest extends TestCase
             ]
         );
 
-        $path = $_SESSION['config']['tmppath'] . '/test/';
+        $samplePath = 'modules/convert/Test/Samples/';
 
-        if (!is_dir($path)) {
-            mkdir($path);
-        }
+        //SAMPLE TXT
+        $fileSource = 'test.txt';
+        $fileFormat = 'txt';
 
-        $fileSource = 'test_source.txt';
+        $fileContent = file_get_contents($samplePath . $fileSource, FILE_BINARY);
+        $encodedFile = base64_encode($fileContent);
+        //echo $encodedFile . PHP_EOL;exit;
+        
+        $data = [];
+
+        array_push(
+            $data,
+            array(
+                'column' => 'subject',
+                'value' => 'UNIT TEST CONVERT ALL from slim with ' . $fileFormat . ' file',
+                'type' => 'string',
+            )
+        );
+
+        array_push(
+            $data,
+            array(
+                'column' => 'type_id',
+                'value' => 110,
+                'type' => 'integer',
+            )
+        );
+
+        array_push(
+            $data,
+            array(
+                'column' => 'custom_t1',
+                'value' => 'TEST',
+                'type' => 'string',
+            )
+        );
+
+        array_push(
+            $data,
+            array(
+                'column' => 'custom_t10',
+                'value' => 'lgi@maarch.org',
+                'type' => 'string',
+            )
+        );
+
+        $aArgs = [
+            'encodedFile'   => $encodedFile,
+            'data'          => $data,
+            'collId'        => 'letterbox_coll',
+            'table'         => 'res_letterbox',
+            'fileFormat'    => $fileFormat,
+            'status'        => 'new',
+        ];
+
+        $request = \Slim\Http\Request::createFromEnvironment($environment);
+        $response = new \Slim\Http\Response();
+        $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
+
+        $response = $action->create($fullRequest, $response);
+        $responseBody = json_decode((string)$response->getBody());
+        
+        $resIdTxt = $responseBody->resId;
+
+        //SAMPLE PDF
+        $fileSource = 'test.pdf';
+        $fileFormat = 'pdf';
+
+        $fileContent = file_get_contents($samplePath . $fileSource, FILE_BINARY);
+        $encodedFile = base64_encode($fileContent);
+        //echo $encodedFile . PHP_EOL;exit;
+        
+        $data = [];
+
+        array_push(
+            $data,
+            array(
+                'column' => 'subject',
+                'value' => 'UNIT TEST CONVERT ALL from slim with ' . $fileFormat . ' file',
+                'type' => 'string',
+            )
+        );
+
+        array_push(
+            $data,
+            array(
+                'column' => 'type_id',
+                'value' => 110,
+                'type' => 'integer',
+            )
+        );
+
+        array_push(
+            $data,
+            array(
+                'column' => 'custom_t1',
+                'value' => 'TEST',
+                'type' => 'string',
+            )
+        );
+
+        array_push(
+            $data,
+            array(
+                'column' => 'custom_t10',
+                'value' => 'lgi@maarch.org',
+                'type' => 'string',
+            )
+        );
+
+        $aArgs = [
+            'encodedFile'   => $encodedFile,
+            'data'          => $data,
+            'collId'        => 'letterbox_coll',
+            'table'         => 'res_letterbox',
+            'fileFormat'    => $fileFormat,
+            'status'        => 'new',
+        ];
+
+        $request = \Slim\Http\Request::createFromEnvironment($environment);
+        $response = new \Slim\Http\Response();
+        $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
+
+        $response = $action->create($fullRequest, $response);
+        $responseBody = json_decode((string)$response->getBody());
+        
+        $resIdPdf = $responseBody->resId;
+
+        //SAMPLE ODT
+        $fileSource = 'test.odt';
+        $fileFormat = 'odt';
+
+        $fileContent = file_get_contents($samplePath . $fileSource, FILE_BINARY);
+        $encodedFile = base64_encode($fileContent);
+        //echo $encodedFile . PHP_EOL;exit;
         
-        if (file_exists($path . $fileSource)) {
-            unlink($path . $fileSource);
-        }
+        $data = [];
 
-        $fp = fopen($path . $fileSource, 'a');
-        fwrite($fp, 'a unit test for PHP CONVERSION lorem ipsum...');
-        fclose($fp);
+        array_push(
+            $data,
+            array(
+                'column' => 'subject',
+                'value' => 'UNIT TEST CONVERT ALL from slim with ' . $fileFormat . ' file',
+                'type' => 'string',
+            )
+        );
 
-        $fileContent = file_get_contents($path . $fileSource, FILE_BINARY);
+        array_push(
+            $data,
+            array(
+                'column' => 'type_id',
+                'value' => 110,
+                'type' => 'integer',
+            )
+        );
+
+        array_push(
+            $data,
+            array(
+                'column' => 'custom_t1',
+                'value' => 'TEST',
+                'type' => 'string',
+            )
+        );
+
+        array_push(
+            $data,
+            array(
+                'column' => 'custom_t10',
+                'value' => 'lgi@maarch.org',
+                'type' => 'string',
+            )
+        );
+
+        $aArgs = [
+            'encodedFile'   => $encodedFile,
+            'data'          => $data,
+            'collId'        => 'letterbox_coll',
+            'table'         => 'res_letterbox',
+            'fileFormat'    => $fileFormat,
+            'status'        => 'new',
+        ];
+
+        $request = \Slim\Http\Request::createFromEnvironment($environment);
+        $response = new \Slim\Http\Response();
+        $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
+
+        $response = $action->create($fullRequest, $response);
+        $responseBody = json_decode((string)$response->getBody());
+        
+        $resIdOdt = $responseBody->resId;
+
+        //SAMPLE HTML
+        $fileSource = 'test.html';
+        $fileFormat = 'html';
+
+        $fileContent = file_get_contents($samplePath . $fileSource, FILE_BINARY);
         $encodedFile = base64_encode($fileContent);
         //echo $encodedFile . PHP_EOL;exit;
         
@@ -48,7 +230,7 @@ class ManageProcessConvertTest extends TestCase
             $data,
             array(
                 'column' => 'subject',
-                'value' => 'UNIT TEST from slim',
+                'value' => 'UNIT TEST CONVERT ALL from slim with ' . $fileFormat . ' file',
                 'type' => 'string',
             )
         );
@@ -85,7 +267,7 @@ class ManageProcessConvertTest extends TestCase
             'data'          => $data,
             'collId'        => 'letterbox_coll',
             'table'         => 'res_letterbox',
-            'fileFormat'    => 'txt',
+            'fileFormat'    => $fileFormat,
             'status'        => 'new',
         ];
 
@@ -96,13 +278,77 @@ class ManageProcessConvertTest extends TestCase
         $response = $action->create($fullRequest, $response);
         $responseBody = json_decode((string)$response->getBody());
         
-        $resId = $responseBody->resId;
+        $resIdHtml = $responseBody->resId;
+
+        /***************************************************************************/
+
+        //test TXT
+        $request = \Slim\Http\Request::createFromEnvironment($environment);
+        $action = new \Convert\Controllers\ProcessManageConvertController();
+
+        $aArgs = [
+            'collId' => 'letterbox_coll', 
+            'resTable' => 'res_letterbox', 
+            'adrTable' => 'adr_letterbox', 
+            'resId' => $resIdTxt, 
+            'tmpDir' => $_SESSION['config']['tmppath'],
+            'createZendIndex' => true
+        ];
+
+        $response = new \Slim\Http\Response();
+        $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
+
+        $response = $action->create($fullRequest, $response);
+        $responseBody = json_decode((string)$response->getBody());
+        $status = $responseBody->status;
+        
+        $this->assertEquals('0', $status);
+
+        //test PDF
+        $request = \Slim\Http\Request::createFromEnvironment($environment);
+        $action = new \Convert\Controllers\ProcessManageConvertController();
+
+        $aArgs = [
+            'collId' => 'letterbox_coll', 
+            'resTable' => 'res_letterbox', 
+            'adrTable' => 'adr_letterbox', 
+            'resId' => $resIdPdf, 
+            'tmpDir' => $_SESSION['config']['tmppath'],
+            'createZendIndex' => true
+        ];
+
+        $response = new \Slim\Http\Response();
+        $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
+
+        $response = $action->create($fullRequest, $response);
+        $responseBody = json_decode((string)$response->getBody());
+        $status = $responseBody->status;
+        
+        $this->assertEquals('0', $status);
+
+        //test ODT
+        $request = \Slim\Http\Request::createFromEnvironment($environment);
+        $action = new \Convert\Controllers\ProcessManageConvertController();
+
+        $aArgs = [
+            'collId' => 'letterbox_coll', 
+            'resTable' => 'res_letterbox', 
+            'adrTable' => 'adr_letterbox', 
+            'resId' => $resIdOdt, 
+            'tmpDir' => $_SESSION['config']['tmppath'],
+            'createZendIndex' => true
+        ];
+
+        $response = new \Slim\Http\Response();
+        $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
+
+        $response = $action->create($fullRequest, $response);
+        $responseBody = json_decode((string)$response->getBody());
+        $status = $responseBody->status;
         
-        if (!defined("_RES_ID_TEST_CONVERT")) {
-            define("_RES_ID_TEST_CONVERT", $resId);
-        }
+        $this->assertEquals('0', $status);
 
-        //real test
+        //test HTML
         $request = \Slim\Http\Request::createFromEnvironment($environment);
         $action = new \Convert\Controllers\ProcessManageConvertController();
 
@@ -110,7 +356,7 @@ class ManageProcessConvertTest extends TestCase
             'collId' => 'letterbox_coll', 
             'resTable' => 'res_letterbox', 
             'adrTable' => 'adr_letterbox', 
-            'resId' => _RES_ID_TEST_CONVERT, 
+            'resId' => $resIdHtml, 
             'tmpDir' => $_SESSION['config']['tmppath'],
             'createZendIndex' => true
         ];
diff --git a/modules/convert/Test/Samples/test.html b/modules/convert/Test/Samples/test.html
new file mode 100644
index 00000000000..974952b211c
--- /dev/null
+++ b/modules/convert/Test/Samples/test.html
@@ -0,0 +1,8 @@
+<html><head><meta content="text/html; charset=UTF-8" http-equiv="Content-Type"></head>
+        <!--<body id="validation_page" 
+        onload="javascript:moveTo(0,0);">
+            <div id="template_content" style="width:100%;">-->
+            <body><p style="text-align: center;" data-mce-style="text-align: center;"><span style="font-size: small; text-decoration: underline;" data-mce-style="font-size: small; text-decoration: underline;">ENREGISTREMENT DEMANDE Allo Mairie - DIVERS</span></p><p style="text-align: center;" data-mce-style="text-align: center;">&nbsp;</p><table style="border: 1pt solid #000000; width: 800px; background-color: #40a497;" data-mce-style="border: 1pt solid #000000; width: 800px; background-color: #40a497;" cellpadding="5" cellspacing="1" border="1"><tbody><tr><td style="width: 200px;" data-mce-style="width: 200px;">DECLARATION DU BESOIN</td><td>DATE: 17-11-2015</td><td>HEURE: 18:01:46</td></tr></tbody></table><table style="border: 1pt solid #000000; width: 800px;" data-mce-style="border: 1pt solid #000000; width: 800px;" cellpadding="5" cellspacing="1" border="1"><tbody><tr><td style="width: 200px; background-color: #40a497;" data-mce-style="width: 200px; background-color: #40a497;">OBJET</td><td style="background-color: #bef3ec;" data-mce-style="background-color: #bef3ec;">&nbsp;laurent</td></tr><tr><td style="width: 200px; background-color: #40a497;" data-mce-style="width: 200px; background-color: #40a497;">DATE ET HEURE ESTIMEES DU DECLENCHEMENT</td><td>&nbsp;</td></tr><tr><td style="width: 200px; background-color: #40a497;" data-mce-style="width: 200px; background-color: #40a497;">IMPLANTATION / LOCALISATION</td><td style="background-color: #bef3ec;" data-mce-style="background-color: #bef3ec;">&nbsp;montest</td></tr><tr><td style="width: 200px; background-color: #40a497;" data-mce-style="width: 200px; background-color: #40a497;">DESCRIPTION</td><td>&nbsp;</td></tr><tr><td style="width: 200px; background-color: #40a497;" data-mce-style="width: 200px; background-color: #40a497;">ETENDUE DU PROBLEME</td><td style="background-color: #bef3ec;" data-mce-style="background-color: #bef3ec;">&nbsp;</td></tr><tr><td style="width: 200px; background-color: #40a497;" data-mce-style="width: 200px; background-color: #40a497;">NATURE DU DESAGREMENT</td><td>&nbsp;</td></tr><tr><td style="width: 200px; background-color: #40a497;" data-mce-style="width: 200px; background-color: #40a497;">DELAIS DE TRAITEMENT SOUHAITE</td><td style="background-color: #bef3ec;" data-mce-style="background-color: #bef3ec;">&nbsp;</td></tr><tr><td style="width: 200px; background-color: #40a497;" data-mce-style="width: 200px; background-color: #40a497;">AUTRES OBSERVATIONS</td><td>&nbsp;</td></tr></tbody></table><p><br data-mce-bogus="1"></p>            <!--</div>
+        </body>
+        </html>-->
+        </body></html>
\ No newline at end of file
diff --git a/modules/convert/Test/Samples/test.odt b/modules/convert/Test/Samples/test.odt
new file mode 100644
index 0000000000000000000000000000000000000000..3038c23914d8df78dbda22d8437ab599bf36509b
GIT binary patch
literal 8726
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
a|7~tokw=1^L;(Oi*vk&~h(wa#_5KfIfRL5|

literal 0
HcmV?d00001

diff --git a/modules/convert/Test/Samples/test.pdf b/modules/convert/Test/Samples/test.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..f698ff53d41575b222e6778f87f9e9fd8da4f2b1
GIT binary patch
literal 7945
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

literal 0
HcmV?d00001

diff --git a/modules/convert/Test/Samples/test.txt b/modules/convert/Test/Samples/test.txt
new file mode 100644
index 00000000000..322dd17d9e0
--- /dev/null
+++ b/modules/convert/Test/Samples/test.txt
@@ -0,0 +1 @@
+a unit test for PHP CONVERSION lorem ipsum...
\ No newline at end of file
diff --git a/modules/convert/batch/LoggerLog4php.php b/modules/convert/batch/LoggerLog4php.php
index 5859a92f31f..22eb7fab0ec 100644
--- a/modules/convert/batch/LoggerLog4php.php
+++ b/modules/convert/batch/LoggerLog4php.php
@@ -1,5 +1,12 @@
 <?php
 
+/**
+ * Copyright Maarch since 2008 under licence GPLv3.
+ * See LICENCE.txt file at the root folder for more details.
+ * This file is part of Maarch software.
+ *
+ */
+
 /** Logger class
  *
  * @author Laurent Giovannoni <dev@maarch.org>
diff --git a/modules/convert/batch/batch_tools.php b/modules/convert/batch/batch_tools.php
index e5abba1c524..8b55200228f 100644
--- a/modules/convert/batch/batch_tools.php
+++ b/modules/convert/batch/batch_tools.php
@@ -1,22 +1,10 @@
 <?php
 
-/*
- *   Copyright 2008-2016 Maarch
- *
- *   This file is part of Maarch Framework.
- *
- *   Maarch Framework is free software: you can redistribute it and/or modify
- *   it under the terms of the GNU General Public License as published by
- *   the Free Software Foundation, either version 3 of the License, or
- *   (at your option) any later version.
- *
- *   Maarch Framework is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
+/**
+ * Copyright Maarch since 2008 under licence GPLv3.
+ * See LICENCE.txt file at the root folder for more details.
+ * This file is part of Maarch software.
  *
- *   You should have received a copy of the GNU General Public License
- *   along with Maarch Framework. If not, see <http://www.gnu.org/licenses/>.
  */
 
 /**
diff --git a/modules/convert/batch/config/config.xml b/modules/convert/batch/config/config.xml
index 3416184920d..ea4fbc74759 100644
--- a/modules/convert/batch/config/config.xml
+++ b/modules/convert/batch/config/config.xml
@@ -2,11 +2,11 @@
 <ROOT>
     <CONFIG>
         <Lang>fr</Lang> <!-- fr, en-->
-        <MaarchDirectory>/var/www/html/oem_V2/</MaarchDirectory>
-        <TmpDirectory>/var/www/html/oem_V2/modules/convert/batch/tmp/</TmpDirectory>
+        <MaarchDirectory>/var/www/html/MaarchCourrier/</MaarchDirectory>
+        <TmpDirectory>/var/www/html/MaarchCourrier/modules/convert/batch/tmp/</TmpDirectory>
         <LogLevel>INFO</LogLevel>  <!-- DEBUG, INFO, NOTICE, WARNING, ERROR-->
         <DisplayedLogLevel>INFO</DisplayedLogLevel> <!-- DEBUG, INFO, NOTICE, WARNING, ERROR-->
-        <StackSizeLimit>50</StackSizeLimit>
+        <StackSizeLimit>1000</StackSizeLimit>
         <ApacheUserAndGroup>lgi:lgi</ApacheUserAndGroup>
         <UnoconvPath>unoconv</UnoconvPath> <!-- only for Windows -->
         <OpenOfficePath>soffice</OpenOfficePath> <!-- only for Windows -->
@@ -31,7 +31,7 @@
         <databaseserver>127.0.0.1</databaseserver>
         <databaseserverport>5432</databaseserverport>
         <databasetype>POSTGRESQL</databasetype>
-        <databasename>sipol_v2</databasename>
+        <databasename>MaarchCourrier</databasename>
         <databaseuser>maarch</databaseuser>
         <databasepassword>maarch</databasepassword>
     </CONFIG_BASE>
@@ -50,44 +50,16 @@
         <path_to_lucene_index>/opt/maarch/docservers/indexes/attachments_coll/</path_to_lucene_index>
     </COLLECTION>
     <COLLECTION>
-        <Id>attachments_version_coll</Id>
+        <Id>version_attachments_coll</Id>
         <Table>res_version_attachments</Table>
         <View>res_version_attachments</View>
         <Adr>adr_attachments_version</Adr>
-        <path_to_lucene_index>/opt/maarch/docservers/indexes/attachments_version_coll/</path_to_lucene_index>
-    </COLLECTION>
-    <COLLECTION>
-        <Id>calendar_coll</Id>
-        <Table>calendar_event_attachments</Table>
-        <View>calendar_event_attachments</View>
-        <Adr>calendar_event_adr_attachments</Adr>
-        <path_to_lucene_index>/opt/maarch/docservers/indexes/calendar_coll/</path_to_lucene_index>
-    </COLLECTION>
-    <COLLECTION>
-        <Id>folder_coll</Id>
-        <Table>res_folder</Table>
-        <View>res_folder</View>
-        <Adr>adr_folder</Adr>
-        <path_to_lucene_index>/opt/maarch/docservers/indexes/folder_coll/</path_to_lucene_index>
-    </COLLECTION>
-    <COLLECTION>
-        <Id>chrono_coll</Id>
-        <Table>res_chrono</Table>
-        <View>res_chrono</View>
-        <Adr>adr_chrono</Adr>
-        <path_to_lucene_index>/opt/maarch/docservers/indexes/chrono_coll/</path_to_lucene_index>
-    </COLLECTION>
-    <COLLECTION>
-        <Id>reprise_coll</Id>
-        <Table>res_reprise</Table>
-        <View>res_reprise</View>
-        <Adr>adr_reprise</Adr>
-        <path_to_lucene_index>/opt/maarch/docservers/indexes/reprise_coll/</path_to_lucene_index>
+        <path_to_lucene_index>/opt/maarch/docservers/indexes/version_attachments_coll/</path_to_lucene_index>
     </COLLECTION>
     <LOG4PHP>
         <enabled>true</enabled>
         <Log4PhpLogger>loggerTechnique</Log4PhpLogger>
         <Log4PhpBusinessCode>Convert</Log4PhpBusinessCode>
-        <Log4PhpConfigPath>/var/www/html/oem_V2/apps/maarch_entreprise/xml/log4php.xml</Log4PhpConfigPath>
+        <Log4PhpConfigPath>/var/www/html/MaarchCourrier/apps/maarch_entreprise/xml/log4php.xml</Log4PhpConfigPath>
     </LOG4PHP>
-</ROOT>
+</ROOT>
\ No newline at end of file
diff --git a/modules/convert/batch/fill_stack.php b/modules/convert/batch/fill_stack.php
index 47ebbe5f654..b7ae35bf5ee 100644
--- a/modules/convert/batch/fill_stack.php
+++ b/modules/convert/batch/fill_stack.php
@@ -1,22 +1,10 @@
 <?php
 
-/*
- *   Copyright 2008-2016 Maarch
- *
- *   This file is part of Maarch Framework.
- *
- *   Maarch Framework is free software: you can redistribute it and/or modify
- *   it under the terms of the GNU General Public License as published by
- *   the Free Software Foundation, either version 3 of the License, or
- *   (at your option) any later version.
- *
- *   Maarch Framework is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
+/**
+ * Copyright Maarch since 2008 under licence GPLv3.
+ * See LICENCE.txt file at the root folder for more details.
+ * This file is part of Maarch software.
  *
- *   You should have received a copy of the GNU General Public License
- *   along with Maarch Framework. If not, see <http://www.gnu.org/licenses/>.
  */
 
 /**
@@ -84,14 +72,22 @@ while ($state <> 'END') {
         /* Checking if the stack is full                                      */
         /**********************************************************************/
         case 'CONTROL_STACK' :
-            $query = "select * from convert_stack "
+            //ONLY FOR TEST
+            $query = "truncate table convert_stack";
+            $stmt = Bt_doQuery(
+                $GLOBALS['db'], 
+                $query
+            );
+
+            $query = "select count(1) as cpt from convert_stack "
                    . " where coll_id = ? and regex = ?";
             $stmt = Bt_doQuery(
                 $GLOBALS['db'], 
                 $query, 
                 array($GLOBALS['collection'], $GLOBALS['regExResId'])
             );
-            if ($stmt->rowCount() > 0) {
+            $resultCpt = $stmt->fetchObject();
+            if ($resultCpt->cpt > 0) {
                 Bt_exitBatch(107, 'stack is full for collection:'
                              . $GLOBALS['collection'] . ', regex:'
                              . $GLOBALS['regExResId']
@@ -132,8 +128,9 @@ while ($state <> 'END') {
             );
             $stmt = Bt_doQuery($GLOBALS['db'], $query);
             $resourcesArray = array();
+            $stmtCpt = $stmt;
 
-            if ($stmt->rowCount() > 0) {
+            if ($stmtCpt->fetchObject()->res_id > 0) {
                 while ($resoucesRecordset = $stmt->fetchObject()) {
                     array_push(
                         $resourcesArray,
@@ -189,7 +186,8 @@ while ($state <> 'END') {
                                 $query
                             );
                             $resourcesArray = array();
-                            if ($stmt->rowCount() > 0) {
+                            $stmtCpt = $stmt;
+                            if ($stmtCpt->fetchObject()->res_id > 0) {
                                 while ($resoucesRecordset = $stmt->fetchObject()) {
                                     array_push(
                                         $resourcesArray,
diff --git a/modules/convert/batch/load_fill_stack.php b/modules/convert/batch/load_fill_stack.php
index 559abc01086..3721e3515a0 100644
--- a/modules/convert/batch/load_fill_stack.php
+++ b/modules/convert/batch/load_fill_stack.php
@@ -1,22 +1,10 @@
 <?php
 
-/*
- *   Copyright 2008-2016 Maarch
- *
- *   This file is part of Maarch Framework.
- *
- *   Maarch Framework is free software: you can redistribute it and/or modify
- *   it under the terms of the GNU General Public License as published by
- *   the Free Software Foundation, either version 3 of the License, or
- *   (at your option) any later version.
- *
- *   Maarch Framework is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
+/**
+ * Copyright Maarch since 2008 under licence GPLv3.
+ * See LICENCE.txt file at the root folder for more details.
+ * This file is part of Maarch software.
  *
- *   You should have received a copy of the GNU General Public License
- *   along with Maarch Framework. If not, see <http://www.gnu.org/licenses/>.
  */
 
 /**
@@ -297,6 +285,7 @@ unset($xmlconfig);
 
 // Include library
 try {
+    Bt_myInclude($GLOBALS['MaarchDirectory'] . 'vendor/autoload.php');
     Bt_myInclude($GLOBALS['MaarchDirectory'] . 'core/class/class_functions.php');
     Bt_myInclude($GLOBALS['MaarchDirectory'] . 'core/class/class_db.php');
     Bt_myInclude($GLOBALS['MaarchDirectory'] . 'core/class/class_db_pdo.php');
@@ -305,7 +294,7 @@ try {
     Bt_myInclude($GLOBALS['MaarchDirectory'] . 'core/class/docservers_controler.php');
     Bt_myInclude($GLOBALS['MaarchDirectory'] . 'core/docservers_tools.php');
     Bt_myInclude($GLOBALS['MaarchDirectory'] . 'core/class/docserver_types_controler.php');
-    Bt_myInclude($GLOBALS['MaarchDirectory'] . 'modules/convert/services/ManageConvert.php');
+    //Bt_myInclude($GLOBALS['MaarchDirectory'] . 'modules/convert/services/ManageConvert.php');
 } catch (IncludeFileError $e) {
     $GLOBALS['logger']->write(
         'Problem with the php include path:' 
@@ -314,24 +303,27 @@ try {
     exit(111);
 }
 if (!is_dir($GLOBALS['tmpDirectoryRoot'])) {
-    $GLOBALS['logger']->write(
-        'Problem with the tmp dir:' . $GLOBALS['tmpDirectory'], 'ERROR', 17
-    );
-    exit(17);
+    mkdir($GLOBALS['tmpDirectoryRoot']);
+    // echo PHP_EOL.'tmpDirectoryRoot '.$GLOBALS['tmpDirectoryRoot'].PHP_EOL;
+    // $GLOBALS['logger']->write(
+    //     'Problem with the tmp dir:' . $GLOBALS['tmpDirectoryRoot'], 'ERROR', 17
+    // );
+    // exit(17);
 }
 
 $coreTools = new core_tools();
 $coreTools->load_lang($lang, $GLOBALS['MaarchDirectory'], $MaarchApps);
 session_start();
 $_SESSION['modules_loaded']    = array();
+$_SESSION['user']['UserId']    = 'BOT_CONVERT';
 $GLOBALS['func']               = new functions();
 $GLOBALS['db']                 = new Database($GLOBALS['configFile']);
 $GLOBALS['db2']                = new Database($GLOBALS['configFile']);
 $GLOBALS['db3']                = new Database($GLOBALS['configFile']);
 $GLOBALS['dbLog']              = new Database($GLOBALS['configFile']);
 $GLOBALS['docserverControler'] = new docservers_controler();
-$GLOBALS['processConvert']     = new Convert_ManageConvert_Service($GLOBALS['openOfficePath']);
-$GLOBALS['processIndexes']     = new Convert_ProcessFulltext_Service();
+$GLOBALS['processConvert']     = new \Convert\Controllers\ProcessManageConvertController($GLOBALS['openOfficePath']);
+$GLOBALS['processIndexes']     = new \Convert\Controllers\ProcessFulltextController();
 
 $configFileName = basename($GLOBALS['configFile'], '.xml');
 $GLOBALS['errorLckFile'] = $GLOBALS['batchDirectory'] . '/' 
diff --git a/modules/convert/batch/process_stack.php b/modules/convert/batch/process_stack.php
index 969d610b8b3..c5d46ecbf45 100644
--- a/modules/convert/batch/process_stack.php
+++ b/modules/convert/batch/process_stack.php
@@ -1,22 +1,10 @@
 <?php
 
-/*
- *  Copyright 2008-2016 Maarch
- *
- *  This file is part of Maarch Framework.
- *
- *  Maarch Framework is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  Maarch Framework is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
+/**
+ * Copyright Maarch since 2008 under licence GPLv3.
+ * See LICENCE.txt file at the root folder for more details.
+ * This file is part of Maarch software.
  *
- *  You should have received a copy of the GNU General Public License
- *  along with Maarch Framework.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 /**
@@ -122,7 +110,8 @@ while ($GLOBALS['state'] <> "END") {
                 $query, 
                 array($GLOBALS['collection'])
             );
-            if ($stmt->rowCount() == 0) {
+            $stmtCpt = $stmt;
+            if ($stmtCpt->fetchObject()->docserver_id == '') {
                  Bt_exitBatch(13, 'Docserver not found');
                 break;
             } else {
@@ -151,7 +140,8 @@ while ($GLOBALS['state'] <> "END") {
                     $GLOBALS['wb']
                 )
             );
-            if ($stmt->rowCount() == 0) {
+            $stackRecordset = $stmt->fetchObject();
+            if (!($stackRecordset->res_id)) {
                 if ($GLOBALS['OnlyIndexes']) {
                     $GLOBALS['processIndexes']->commitZendIndex($GLOBALS['zendIndex']);
                 }
@@ -159,7 +149,6 @@ while ($GLOBALS['state'] <> "END") {
                 $GLOBALS['logger']->write('No more records to process', 'INFO');
                 break;
             } else {
-                $stackRecordset = $stmt->fetchObject();
                 $currentRecordInStack = array();
                 $currentRecordInStack = $GLOBALS['func']->object2array(
                     $stackRecordset
@@ -197,7 +186,7 @@ while ($GLOBALS['state'] <> "END") {
                         'resId'          => $currentRecordInStack['res_id'],
                         'tmpDir'         => $GLOBALS['tmpDirectory'],
                         'path_to_lucene' => $GLOBALS['path_to_lucene'],
-                        //'zendIndex'      => $GLOBALS['zendIndex']
+                        //'createZendIndex'      => false
                     )
                 );
             }
diff --git a/modules/convert/batch/verif_index.php b/modules/convert/batch/verif_index.php
index 6333e5a4232..203f6be90d0 100644
--- a/modules/convert/batch/verif_index.php
+++ b/modules/convert/batch/verif_index.php
@@ -1,5 +1,12 @@
 <?php
 
+/**
+ * Copyright Maarch since 2008 under licence GPLv3.
+ * See LICENCE.txt file at the root folder for more details.
+ * This file is part of Maarch software.
+ *
+ */
+
 date_default_timezone_set('Europe/Paris');
 
 // load the config and prepare to process
diff --git a/modules/convert/services/ManageConvert.php b/modules/convert/services/ManageConvert.php
deleted file mode 100644
index 37bde281c5e..00000000000
--- a/modules/convert/services/ManageConvert.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-
-/*
-*   Copyright 2008-2016 Maarch
-*
-*   This file is part of Maarch Framework.
-*
-*   Maarch Framework is free software: you can redistribute it and/or modify
-*   it under the terms of the GNU General Public License as published by
-*   the Free Software Foundation, either version 3 of the License, or
-*   (at your option) any later version.
-*
-*   Maarch Framework is distributed in the hope that it will be useful,
-*   but WITHOUT ANY WARRANTY; without even the implied warranty of
-*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*   GNU General Public License for more details.
-*
-*   You should have received a copy of the GNU General Public License
-*   along with Maarch Framework.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-/**
-* @brief Manage convert class
-*
-* <ul>
-* <li>Services to Manage the convertion of resources</li>
-* </ul>
-*
-* @file
-* @author Laurent Giovannoni <dev@maarch.org>
-* @date $date$
-* @version $Revision$
-* @ingroup convert
-*/
-
-
-require_once 'modules/convert/services/ManageConvertAbstract.php';
-
-class Convert_ManageConvert_Service extends Convert_ManageConvertAbstract_Service {
-	
-	
-}
diff --git a/modules/convert/services/ManageConvertAbstract.php b/modules/convert/services/ManageConvertAbstract.php
deleted file mode 100644
index fc0980e5cde..00000000000
--- a/modules/convert/services/ManageConvertAbstract.php
+++ /dev/null
@@ -1,164 +0,0 @@
-<?php
-
-/*
-*   Copyright 2008-2016 Maarch
-*
-*   This file is part of Maarch Framework.
-*
-*   Maarch Framework is free software: you can redistribute it and/or modify
-*   it under the terms of the GNU General Public License as published by
-*   the Free Software Foundation, either version 3 of the License, or
-*   (at your option) any later version.
-*
-*   Maarch Framework is distributed in the hope that it will be useful,
-*   but WITHOUT ANY WARRANTY; without even the implied warranty of
-*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*   GNU General Public License for more details.
-*
-*   You should have received a copy of the GNU General Public License
-*   along with Maarch Framework.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-/**
-* @brief Manage convert class
-*
-* <ul>
-* <li>Services to Manage the convertion of resources</li>
-* </ul>
-*
-* @file
-* @author Laurent Giovannoni <dev@maarch.org>
-* @date $date$
-* @version $Revision$
-* @ingroup convert
-*/
-
-require_once 'core/services/Abstract.php';
-require_once 'core/class/class_functions.php';
-require_once 'core/class/class_db_pdo.php';
-require_once 'core/class/class_db.php';
-require_once 'core/docservers_tools.php';
-require_once 'core/class/docservers_controler.php';
-require_once 'core/services/ManageDocservers.php';
-require_once 'modules/convert/services/ProcessConvert.php';
-require_once 'modules/convert/services/ProcessThumbnails.php';
-require_once 'modules/convert/services/ProcessFulltext.php';
-
-class Convert_ManageConvertAbstract_Service extends Core_Abstract_Service {
-
-    /**
-     * Ask for conversion in all mode
-     *
-     * @param string $collId collection
-     * @param string $resTable resource table
-     * @param string $adrTable adr table
-     * @param long $resId res_id
-     * @param string $tmpDir path to tmp
-     * @throws Exception Check des valeurs d'entrées
-     * @return array $returnArray the result
-     */
-    public function convertAll(array $args=[])
-    {
-        $timestart = microtime(true);
-        // Prés-requis :
-        $this->checkRequired($args, ['collId','resTable','adrTable','resId',]);
-        $this->checkNumeric($args, ['resId',]);
-        $this->checkString($args, ['collId','resTable','adrTable',]);
-
-        // Variabilisation :
-        $returnArray = array();
-        $collId      = $args['collId'];
-        $resTable    = $args['resTable'];
-        $adrTable    = $args['adrTable'];
-        $resId       = $args['resId'];
-        
-
-        if (!isset($args['tmpDir']) || $args['tmpDir'] == '') {
-            $tmpDir = $_SESSION['config']['tmppath'];
-        } else {
-            $tmpDir = $args['tmpDir'];
-        }
-
-        $path_to_lucene = '';
-        if (isset($args['path_to_lucene']) && !empty($args['path_to_lucene'])){
-            $path_to_lucene = $args['path_to_lucene'];
-        }
-
-        $params = array(
-            'collId'         => $collId, 
-            'resTable'       => $resTable, 
-            'adrTable'       => $adrTable, 
-            'resId'          => $resId,
-            'tmpDir'         => $tmpDir,
-            'path_to_lucene' => $path_to_lucene
-        );
-
-        //CONV
-        $ProcessConvertService = new Convert_ProcessConvert_Service();
-        $resultOfConversion = $ProcessConvertService->convert($params);
-        
-        if ($resultOfConversion['status'] <> '0') {
-            $returnArray = array(
-                'status' => '1',
-                'value' => '',
-                'error' => 'CONV:' . $resultOfConversion['error'],
-            );
-            return $returnArray;
-        }
-
-        //TNL
-        $ProcessConvertService = new Convert_ProcessThumbnails_Service();
-        $resultOfConversion = $ProcessConvertService->thumbnails($params);
-        if ($resultOfConversion['status'] <> '0') {
-            $returnArray = array(
-                'status' => '1',
-                'value' => '',
-                'error' => 'TNL:' . $resultOfConversion['error'],
-            );
-            return $returnArray;
-        }
-
-        //FULLTEXT
-        if (!empty($args['zendIndex'])) {
-            $zendIndex = $args['zendIndex'];
-            $params = array(
-                'collId'         => $collId, 
-                'resTable'       => $resTable, 
-                'adrTable'       => $adrTable, 
-                'resId'          => $resId,
-                'tmpDir'         => $tmpDir,
-                'path_to_lucene' => $path_to_lucene,
-                'zendIndex'      => $zendIndex
-            );
-        } else {
-            $params = array(
-                'collId'         => $collId, 
-                'resTable'       => $resTable, 
-                'adrTable'       => $adrTable, 
-                'resId'          => $resId,
-                'tmpDir'         => $tmpDir,
-                'path_to_lucene' => $path_to_lucene
-            );
-        }
-        $ProcessConvertService = new Convert_ProcessFulltext_Service();
-        $resultOfConversion = $ProcessConvertService->fulltext($params);
-        if ($resultOfConversion['status'] <> '0') {
-            $returnArray = array(
-                'status' => '1',
-                'value' => '',
-                'error' => 'TXT:' . $resultOfConversion['error'],
-            );
-            Core_Logs_Service::executionTimeLog($timestart, '', 'debug', '[TIMER] Convert_ManageConvertAbstract_Service::convertAll aucun contenu a indexer dans fulltext');
-            return $returnArray;
-        }
-        
-        $returnArray = array(
-            'status' => '0',
-            'value' => '',
-            'error' => '',
-        );
-        Core_Logs_Service::executionTimeLog($timestart, '', 'debug', '[TIMER] Convert_ManageConvertAbstract_Service::convertAll');
-        return $returnArray;
-    }
-
-}
diff --git a/modules/convert/services/ProcessConvert.php b/modules/convert/services/ProcessConvert.php
deleted file mode 100644
index 6cde4c76823..00000000000
--- a/modules/convert/services/ProcessConvert.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-
-/*
-*   Copyright 2008-2016 Maarch
-*
-*   This file is part of Maarch Framework.
-*
-*   Maarch Framework is free software: you can redistribute it and/or modify
-*   it under the terms of the GNU General Public License as published by
-*   the Free Software Foundation, either version 3 of the License, or
-*   (at your option) any later version.
-*
-*   Maarch Framework is distributed in the hope that it will be useful,
-*   but WITHOUT ANY WARRANTY; without even the implied warranty of
-*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*   GNU General Public License for more details.
-*
-*   You should have received a copy of the GNU General Public License
-*   along with Maarch Framework.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-/**
-* @brief process convert class
-*
-* <ul>
-* <li>Services to process the convertion of resources</li>
-* </ul>
-*
-* @file
-* @author Laurent Giovannoni <dev@maarch.org>
-* @date $date$
-* @version $Revision$
-* @ingroup convert
-*/
-
-
-require_once 'modules/convert/services/ProcessConvertAbstract.php';
-
-class Convert_ProcessConvert_Service extends Convert_ProcessConvertAbstract_Service {
-	
-	
-}
diff --git a/modules/convert/services/ProcessConvertAbstract.php b/modules/convert/services/ProcessConvertAbstract.php
deleted file mode 100644
index d5c079ed4fd..00000000000
--- a/modules/convert/services/ProcessConvertAbstract.php
+++ /dev/null
@@ -1,592 +0,0 @@
-<?php
-
-/*
-*   Copyright 2008-2016 Maarch
-*
-*   This file is part of Maarch Framework.
-*
-*   Maarch Framework is free software: you can redistribute it and/or modify
-*   it under the terms of the GNU General Public License as published by
-*   the Free Software Foundation, either version 3 of the License, or
-*   (at your option) any later version.
-*
-*   Maarch Framework is distributed in the hope that it will be useful,
-*   but WITHOUT ANY WARRANTY; without even the implied warranty of
-*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*   GNU General Public License for more details.
-*
-*   You should have received a copy of the GNU General Public License
-*   along with Maarch Framework.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-/**
-* @brief process convert class
-*
-* <ul>
-* <li>Services to process the convertion of resources</li>
-* </ul>
-*
-* @file
-* @author Laurent Giovannoni <dev@maarch.org>
-* @date $date$
-* @version $Revision$
-* @ingroup convert
-*/
-
-
-require_once 'core/services/Abstract.php';
-require_once 'core/class/class_functions.php';
-require_once 'core/class/class_db_pdo.php';
-require_once 'core/class/class_db.php';
-require_once 'core/docservers_tools.php';
-require_once 'core/class/docservers_controler.php';
-require_once 'core/services/ManageDocservers.php';
-
-class Convert_ProcessConvertAbstract_Service extends Core_Abstract_Service {
-
-    protected $libreOfficeExecutable;
-
-    //public function __construct($libreOfficeExecutable = 'cloudooo')
-    public function __construct($libreOfficeExecutable = 'soffice')
-    //public function __construct($libreOfficeExecutable = 'unoconv')
-    {
-        $this->libreOfficeExecutable = $libreOfficeExecutable;
-    }
-
-    /**
-     * Ask for conversion
-     *
-     * @param string $collId collection
-     * @param string $resTable resource table
-     * @param string $adrTable adr table
-     * @param long $resId res_id
-     * @param string $tmpDir path to tmp
-     * @param array $tgtfmt array of target format
-     * @return array $returnArray the result
-     */
-    public function convert(array $args=[])
-    {
-        $timestart = microtime(true);
-        // Core_Logs_Service::info(['message'=>'debut convert', 'code'=>111, ]);
-        $returnArray = array();
-        if (empty($args['collId'])) {
-            $returnArray = array(
-                'status' => '1',
-                'value' => '',
-                'error' => 'collId empty',
-            );
-            return $returnArray;
-        } else {
-            $collId = $args['collId'];
-        }
-        if (empty($args['resTable'])) {
-            $returnArray = array(
-                'status' => '1',
-                'value' => '',
-                'error' => 'resTable empty',
-            );
-            return $returnArray;
-        } else {
-            $resTable = $args['resTable'];
-        }
-        if (empty($args['adrTable'])) {
-            $returnArray = array(
-                'status' => '1',
-                'value' => '',
-                'error' => 'adrTable empty',
-            );
-            return $returnArray;
-        } else {
-            $adrTable = $args['adrTable'];
-        }
-        if (empty($args['resId'])) {
-            $returnArray = array(
-                'status' => '1',
-                'value' => '',
-                'error' => 'resId empty',
-            );
-            return $returnArray;
-        } else {
-            $resId = $args['resId'];
-        }
-
-        if (!isset($args['tmpDir']) || $args['tmpDir'] == '') {
-            $tmpDir = $_SESSION['config']['tmppath'];
-        } else {
-            $tmpDir = $args['tmpDir'];
-        }
-
-        $dbConv = new Database($GLOBALS['configFile']);
-        
-        //retrieve path of the resource
-        $stmtConv = $dbConv->query("select * from " . $resTable 
-            . " where res_id = ?", array($resId)
-        );
-        $line = $stmtConv->fetchObject();
-        $ManageDocservers = new Core_ManageDocservers_Service();
-        if ($line->res_id <> '') {
-            $resourcePath = $ManageDocservers->getSourceResourcePath(
-                $resTable, 
-                $adrTable, 
-                $line->res_id,
-                'DOC'
-            );
-        }
-        if (!file_exists($resourcePath)) {
-            $returnArray = array(
-                'status' => '1',
-                'value' => '',
-                'error' => 'file not exists : ' . $resourcePath,
-            );
-            $this->manageErrorOnDb($resTable, $resId, '-1');
-            return $returnArray;
-        }
-        //copy the resource on tmp directory
-        $fileNameOnTmp = $tmpDir . rand() . rand();
-        if (!copy($resourcePath, $fileNameOnTmp)) {
-            $returnArray = array(
-                'status' => '1',
-                'value' => '',
-                'error' => 'copy on tmp failed',
-            );
-            $this->manageErrorOnDb($resTable, $resId, '-1');
-            return $returnArray;
-        }
-        //now do the conversion !
-        if (strtoupper($line->format) <> 'PDF') {
-            $resultOfConversion = $this->launchConvert(
-                $fileNameOnTmp, 
-                'pdf', 
-                $tmpDir,
-                pathinfo($resourcePath, PATHINFO_EXTENSION)
-            );
-        } else {
-            //echo $fileNameOnTmp;
-            copy($fileNameOnTmp, $fileNameOnTmp . '.pdf');
-            $resultOfConversion = array(
-                'status' => '0',
-                'value' => '',
-                'error' => '',
-            );
-        }
-        
-        if ($resultOfConversion['status'] <> '0') {
-            $this->manageErrorOnDb($resTable, $resId, '-1');
-            return $resultOfConversion;
-        }
-        //find the target docserver
-        $targetDs = $ManageDocservers->findTargetDs($collId);
-        if (empty($targetDs)) {
-            $returnArray = array(
-                'status' => '1',
-                'value' => '',
-                'error' => 'Ds of collection not found:' . $collId,
-            );
-            $this->manageErrorOnDb($resTable, $resId, '-1');
-            return $returnArray;
-        }
-        //copy the result on docserver
-        // Core_Logs_Service::info(['message'=>'avant cp ds', 'code'=>1112, ]);
-        $resultCopyDs = $ManageDocservers->copyResOnDS($fileNameOnTmp . '.pdf', $targetDs);
-        if ($resultCopyDs['status'] <> '0') {
-            $this->manageErrorOnDb($resTable, $resId, '-1');
-            return $resultCopyDs;
-        }
-        // Core_Logs_Service::info(['message'=>'avant update', 'code'=>19, ]);
-        //update the database
-        $resultOfUpDb = $this->updateDatabase(
-            $collId,
-            $resTable, 
-            $adrTable, 
-            $resId,
-            $targetDs,
-            $resultCopyDs['value']['destinationDir'],
-            $resultCopyDs['value']['fileDestinationName']
-        );
-        // Core_Logs_Service::info(['message'=>var_export($resultOfUpDb, true), 'code'=>111111, ]);
-        // Core_Logs_Service::info(['message'=>$collId, 'code'=>2, ]);
-        // Core_Logs_Service::info(['message'=>$resTable, 'code'=>3, ]);
-        // Core_Logs_Service::info(['message'=>$adrTable, 'code'=>4, ]);
-        // Core_Logs_Service::info(['message'=>$resId, 'code'=>5, ]);
-        // Core_Logs_Service::info(['message'=>'apres res_id', 'code'=>6, ]);
-        // Core_Logs_Service::info(['message'=>$targetDs, 'code'=>6, ]);
-        // Core_Logs_Service::info(['message'=>var_export($resultCopyDs, true), 'code'=>7, ]);
-
-        if ($resultOfUpDb['status'] <> '0') {
-            $this->manageErrorOnDb($resTable, $resId, '-1');
-            return $resultOfUpDb;
-        }
-
-        unlink($fileNameOnTmp);
-        unlink($fileNameOnTmp . '.pdf');
-
-        $returnArray = array(
-            'status' => '0',
-            'value' => '',
-            'error' => '',
-        );
-        Core_Logs_Service::executionTimeLog($timestart, '', 'debug', '[TIMER] Convert_ProcessConvertAbstract_Service::convert');
-        return $returnArray;
-    }
-
-    /**
-     * Launch the conversion
-     *
-     * @param string $srcfile source file
-     * @param string $tgtfmt target format
-     * @param string $tgtdir target dir
-     * @param string $srcfmt source format
-     * @return array $returnArray the result
-     */
-    public function launchConvert(
-        $srcfile, 
-        $tgtfmt, 
-        $tgtdir=false, 
-        $srcfmt=null
-    ) {
-		$timestart=microtime(true);
-
-        $processHtml = false;
-		$executable='';
-		
-        Core_Logs_Service::info(['message'=>'[TIMER] Debut Convert_ProcessConvertAbstract_Service::launchConvert']);
-        if (strtoupper($srcfmt) == 'MAARCH' || strtoupper($srcfmt) == 'HTML') {
-            $processHtml = true;
-            Core_Logs_Service::info(['message'=>'[TIMER] srcfmt ' . $srcfmt]);
-            copy($srcfile, str_ireplace('.maarch', '.', $srcfile) . '.html');
-            if (file_exists('/usr/bin/mywkhtmltopdf')) {
-                $command = "mywkhtmltopdf " 
-                    . escapeshellarg(str_ireplace('.maarch', '.', $srcfile) . '.html') . " " 
-                    . escapeshellarg($tgtdir . basename(str_ireplace('.maarch', '.', $srcfile)) . '.pdf');
-            } else {
-                $envVar = "export DISPLAY=FRPAROEMINT:0.0 ; ";
-                $command = $envVar . "wkhtmltopdf " 
-                    . escapeshellarg(str_ireplace('.maarch', '.', $srcfile) . '.html') . " " 
-                    . escapeshellarg($tgtdir . basename(str_ireplace('.maarch', '.', $srcfile)) . '.pdf');
-            }
-			$executable='wkhtmltopdf';
-        } else {
-			$executable='soffice';
-            Core_Logs_Service::info(['message'=>'[TIMER] let LO do it ' . $this->libreOfficeExecutable]);
-            if ($this->libreOfficeExecutable == "cloudooo") {
-                $serverAddress = "http://192.168.21.40:8011";
-                $tokens = array();
-                require_once 'apps/maarch_entreprise/tools/phpxmlrpc/lib/xmlrpc.inc';
-                require_once 'apps/maarch_entreprise/tools/phpxmlrpc/lib/xmlrpcs.inc';
-                require_once 'apps/maarch_entreprise/tools/phpxmlrpc/lib/xmlrpc_wrappers.inc';
-                $fileContent = file_get_contents($srcfile, FILE_BINARY);
-                $encodedContent = base64_encode($fileContent);
-                $params = array();
-                array_push($params, new PhpXmlRpc\Value($encodedContent));
-                array_push($params, new PhpXmlRpc\Value($srcfmt));
-                array_push($params, new PhpXmlRpc\Value($tgtfmt));
-                array_push($params, new PhpXmlRpc\Value(false));
-                $v = new PhpXmlRpc\Value($params, "array");
-            } elseif ($this->libreOfficeExecutable == "unoconv") {
-                $tokens = array('"' . $this->libreOfficeExecutable . '"');
-                $tokens[] = "-f";
-                $tokens[] = $tgtfmt;
-                $tokens[] = '-o "' . $srcfile . '.' . $tgtfmt . '"';
-                $tokens[] = '"' . $srcfile . '"';
-            } else {
-                $tokens = array('"' . $this->libreOfficeExecutable . '"');
-                $tokens[] = "--headless";
-                $tokens[] = "--convert-to";
-                $tokens[] = $tgtfmt;
-                $tokens[] = '"' . $srcfile . '"';
-                if (!$tgtdir) {
-                    $tgtdir = dirname($srcfile);
-                }
-                $tokens[] = '--outdir "' . $tgtdir . '"';
-            }
-            
-            if (!$srcfmt) {
-                $tokens[] = $srcfmt;
-            }
-
-            $command = implode(' ', $tokens);
-
-            $output = array();
-            $return = null;
-            $this->errors = array();
-        }
-        //echo $command . '<br />';exit;
-        if ($this->libreOfficeExecutable == "cloudooo" && !$processHtml) {
-            Core_Logs_Service::info(['message'=>'[TIMER] commande : cloudooo url ' . $serverAddress]);
-            Core_Logs_Service::info(['message'=>'[TIMER] Debut Convert_ProcessConvertAbstract_Service::launchConvert__exec']);
-            $req = new PhpXmlRpc\Request('convertFile', $v);
-            //Core_Logs_Service::info(['message'=>'[TIMER] commande : cloudooo url ' . $serverAddress]);
-            Core_Logs_Service::info(['message'=>'[TIMER] Fin Convert_ProcessConvertAbstract_Service::launchConvert__exec']);
-            $client = new PhpXmlRpc\Client($serverAddress);
-            $resp = $client->send($req);
-            if (!$resp->faultCode()) {
-                $encoder = new PhpXmlRpc\Encoder();
-                $value = $encoder->decode($resp->value());
-                $theFile = fopen($srcfile . '.' . $tgtfmt, 'w+');
-                fwrite($theFile, base64_decode($value));
-                fclose($theFile);
-                $returnArray = array(
-                    'status' => '0',
-                    'value' => '',
-                    'error' => '',
-                );
-            } else {
-                //print "An error occurred: ";
-                //print "Code: " . htmlspecialchars($resp->faultCode()) 
-                //    . " Reason: '" . htmlspecialchars($resp->faultString()) . "'\n";
-                $returnArray = array(
-                    'status' => '1',
-                    'value' => '',
-                    'error' => "Code: " . htmlspecialchars($resp->faultCode()) 
-                        . " Reason: '" . htmlspecialchars($resp->faultString()),
-                );
-            }
-        } else {
-		    $timestart_command = microtime(true);
-		    exec("timeout -k 5m 3m " . $command, $output, $return);
-		    Core_Logs_Service::debug(['message'=>'[TIMER] commande : ' . $command]);
-		    Core_Logs_Service::executionTimeLog($timestart_command, '', 'info', '[TIMER] ' . $executable . ' - Convert_ProcessConvertAbstract_Service::launchConvert__exec');
-		    if ($return === 0) {
-		        $returnArray = array(
-		            'status' => '0',
-		            'value' => '',
-		            'error' => '',
-		        );
-		    } else {
-		        $returnArray = array(
-		            'status' => '1',
-		            'value' => '',
-		            'error' => $return . $output,
-		        );
-		    }
-        }
-        if (strtoupper($srcfmt) == 'MAARCH' || strtoupper($srcfmt) == 'HTML') {
-            $returnArray = array();
-            unlink(str_ireplace('.maarch', '.', $srcfile) . '.html');
-            $returnArray = array(
-                'status' => '0',
-                'value' => '',
-                'error' => '',
-            );
-        }
-        Core_Logs_Service::executionTimeLog($timestart, '', 'info', '[TIMER] Fin Convert_ProcessConvertAbstract_Service::launchConvert');
-        return $returnArray;
-    }
-
-    /**
-     * Updating the database with the location information of the document on the
-     * new docserver
-     * @param string $collId collection
-     * @param string $resTable res table
-     * @param string $adrTable adr table
-     * @param bigint $resId Id of the resource to process
-     * @param docserver $docserver docserver object
-     * @param string $path location of the resource on the docserver
-     * @param string $fileName file name of the resource on the docserver
-     * @return array $returnArray the result
-     */
-    private function updateDatabase(
-        $collId, 
-        $resTable, 
-        $adrTable, 
-        $resId,
-        $docserver,
-        $path, 
-        $fileName
-    ) {
-        try {
-            $docserver->path_template = str_replace(
-                DIRECTORY_SEPARATOR, 
-                '#', 
-                $docserver->path_template
-            );
-            $path = str_replace($docserver->path_template, '', $path);
-            $dbConv = new Database($GLOBALS['configFile']);
-            $query = "update convert_stack set status = 'P' where "
-               . " coll_id = ? and res_id = ?";
-            $stmt = $dbConv->query(
-                $query,
-                array(
-                    $collId,
-                    $resId
-                )
-            );
-
-            $query = "select * from " . $adrTable 
-                . " where res_id = ? order by adr_priority";
-            $stmt = $dbConv->query($query, array($resId));
-            if ($stmt->rowCount() == 0) {
-                $query = "select docserver_id, path, filename, offset_doc, fingerprint"
-                       . " from " . $resTable . " where res_id = ?";
-                $stmt = $dbConv->query($query, array($resId));
-                $recordset = $stmt->fetchObject();
-                // Core_Logs_Service::info(['message'=>$recordset, 'code'=>8, ]);
-                $resDocserverId = $recordset->docserver_id;
-                $resPath = $recordset->path;
-                $resFilename = $recordset->filename;
-                $resOffsetDoc = $recordset->offset_doc;
-                $fingerprintInit = $recordset->fingerprint;
-                $query = "select adr_priority_number from docservers "
-                       . " where docserver_id = ?";
-                $stmt = $dbConv->query($query, array($resDocserverId));
-                $recordset = $stmt->fetchObject();
-                $query = "insert into " . $adrTable . " (res_id, "
-                       . "docserver_id, path, filename, offset_doc, fingerprint, "
-                       . "adr_priority) values (?, ?, ?, ?, ?, ?, ?)";
-                $stmt = $dbConv->query(
-                    $query, 
-                    array(
-                        $resId,
-                        $resDocserverId,
-                        $resPath,
-                        $resFilename,
-                        $resOffsetDoc,
-                        $fingerprintInit,
-                        $recordset->adr_priority_number
-                    )
-                );
-            }
-
-            $query = "select * from " . $adrTable 
-                . " where res_id = ? and adr_type = 'CONV'";
-            $stmt = $dbConv->query($query, array($resId));
-            if ($stmt->rowCount() == 0) {
-                $query = "insert into " . $adrTable . " (res_id, docserver_id, "
-                   . "path, filename, offset_doc, fingerprint, adr_priority, adr_type) values (" 
-                   . "?, ?, ?, ?, ?, ?, ?, ?)";
-                $stmt = $dbConv->query(
-                    $query, 
-                    array(
-                        $resId,
-                        $docserver->docserver_id,
-                        $path,
-                        $fileName,
-                        $offsetDoc,
-                        $fingerprint,
-                        $docserver->adr_priority_number,
-                        'CONV'
-                    )
-                );
-            } else {
-                $query = "update " . $adrTable . " set docserver_id = ?, "
-                   . " path = ?, filename = ?, offset_doc = ?, fingerprint = ?, adr_priority = ?"
-                   . " where res_id = ? and adr_type = ? ";
-                $stmt = $dbConv->query(
-                    $query, 
-                    array(
-                        $docserver->docserver_id,
-                        $path,
-                        $fileName,
-                        $offsetDoc,
-                        $fingerprint,
-                        $docserver->adr_priority_number,
-                        $resId,
-                        'CONV'
-                    )
-                );
-            }
-            if ($_SESSION['user']['UserId'] <> '') {
-                $user = $_SESSION['user']['UserId'];
-            } else {
-                $user = 'CONVERT_BOT';
-            }
-            $query = "insert into history (table_name, record_id, "
-                   . "event_type, user_id, event_date, info, id_module) values (" 
-                   . "?, ?, 'ADD', '" . $user . "', " 
-                   . $dbConv->current_datetime() 
-                   . ", ?, 'convert')";
-            $stmt = $dbConv->query( 
-                $query, 
-                array(
-                    $resTable,
-                    $resId,
-                    "process convert done"
-                )
-            );
-
-            $queryCpt = "select coalesce(custom_t9, '0') as custom_t9 from " . $resTable 
-                . " where res_id = ?";
-            $stmtCpt = $dbConv->query($queryCpt, array($resId));
-            $rsCpt = $stmtCpt->fetchObject();
-            $cptConvert = $rsCpt->custom_t9 + 1;
-
-            $query = "update " . $resTable 
-                . " set convert_result = '1', is_multi_docservers = 'Y', custom_t9 = '" . $cptConvert . "' where "
-                . " res_id = ?";
-            $stmt = $dbConv->query(
-                $query,
-                array(
-                    $resId
-                )
-            );
-            $returnArray = array(
-                'status' => '0',
-                'value' => '',
-                'error' => '',
-            );
-            return $returnArray;
-        } catch (Exception $e) {
-            $returnArray = array(
-                'status' => '1',
-                'value' => '',
-                'error' => $e->getMessage(),
-            );
-            return $returnArray;
-        }
-    }
-
-    /**
-     * Updating the database with the error code
-     * @param string $resTable res table
-     * @param bigint $resId Id of the resource to process
-     * @param string $result error code
-     * @return nothing
-     */
-    private function manageErrorOnDb(
-        $resTable, 
-        $resId,
-        $result
-    ) {
-        $dbConv = new Database($GLOBALS['configFile']);
-        $query = "update " . $resTable 
-            . " set convert_result = ? where "
-            . " res_id = ?";
-        $stmt = $dbConv->query(
-            $query,
-            array(
-                $result,
-                $resId
-            )
-        );
-    }
-
-    /**
-     * Test if the record is already processed by convert module
-     * @param string $resTable res table
-     * @param bigint $resId Id of the resource to process
-     * @return boolean
-     */
-    public function isAlreadyProcessedByConvert(
-        $resTable, 
-        $resId
-    ) {
-        $dbConv = new Database($GLOBALS['configFile']);
-        $query = "select convert_result from " . $resTable 
-            . "  where res_id = ?";
-        $stmt = $dbConv->query(
-            $query,
-            array(
-                $resId
-            )
-        );
-        $rs = $stmt->fetchObject();
-        if (
-            empty($rs->convert_result) || 
-            $rs->convert_result == '0'
-        ) {
-            return false;
-        } else {
-            return true;
-        }
-    }
-}
diff --git a/modules/convert/services/ProcessFulltext.php b/modules/convert/services/ProcessFulltext.php
deleted file mode 100644
index 8911aab6863..00000000000
--- a/modules/convert/services/ProcessFulltext.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-
-/*
-*   Copyright 2008-2016 Maarch
-*
-*   This file is part of Maarch Framework.
-*
-*   Maarch Framework is free software: you can redistribute it and/or modify
-*   it under the terms of the GNU General Public License as published by
-*   the Free Software Foundation, either version 3 of the License, or
-*   (at your option) any later version.
-*
-*   Maarch Framework is distributed in the hope that it will be useful,
-*   but WITHOUT ANY WARRANTY; without even the implied warranty of
-*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*   GNU General Public License for more details.
-*
-*   You should have received a copy of the GNU General Public License
-*   along with Maarch Framework.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-/**
-* @brief process fulltext class
-*
-* <ul>
-* <li>Services to process the fulltext of resources</li>
-* </ul>
-*
-* @file
-* @author Laurent Giovannoni <dev@maarch.org>
-* @date $date$
-* @version $Revision$
-* @ingroup convert
-*/
-
-
-require_once 'modules/convert/services/ProcessFulltextAbstract.php';
-
-class Convert_ProcessFulltext_Service extends Convert_ProcessFulltextAbstract_Service {
-	
-	
-}
diff --git a/modules/convert/services/ProcessFulltextAbstract.php b/modules/convert/services/ProcessFulltextAbstract.php
deleted file mode 100644
index 3a7e7f8cfa2..00000000000
--- a/modules/convert/services/ProcessFulltextAbstract.php
+++ /dev/null
@@ -1,740 +0,0 @@
-<?php
-
-/*
-*   Copyright 2008-2016 Maarch
-*
-*   This file is part of Maarch Framework.
-*
-*   Maarch Framework is free software: you can redistribute it and/or modify
-*   it under the terms of the GNU General Public License as published by
-*   the Free Software Foundation, either version 3 of the License, or
-*   (at your option) any later version.
-*
-*   Maarch Framework is distributed in the hope that it will be useful,
-*   but WITHOUT ANY WARRANTY; without even the implied warranty of
-*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*   GNU General Public License for more details.
-*
-*   You should have received a copy of the GNU General Public License
-*   along with Maarch Framework.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-/**
-* @brief process fulltext class
-*
-* <ul>
-* <li>Services to process the fulltext of resources</li>
-* </ul>
-*
-* @file
-* @author Laurent Giovannoni <dev@maarch.org>
-* @date $date$
-* @version $Revision$
-* @ingroup convert
-*/
-
-require_once 'core/services/Abstract.php';
-require_once 'core/class/class_functions.php';
-require_once 'core/class/class_db_pdo.php';
-require_once 'core/class/class_db.php';
-require_once 'core/docservers_tools.php';
-require_once 'core/class/docservers_controler.php';
-require_once 'core/services/ManageDocservers.php';
-
-// Storing text in lucene index
-set_include_path('apps/maarch_entreprise/tools/' 
-    . PATH_SEPARATOR . get_include_path()
-);
-
-if(!@include('Zend/Search/Lucene.php')) {
-    set_include_path($GLOBALS['MaarchDirectory'].'apps/maarch_entreprise/tools/' 
-        . PATH_SEPARATOR . get_include_path()
-    );
-    if(!@include('Zend/Search/Lucene.php')) {
-    set_include_path('/var/www/oem/apps/maarch_entreprise/tools/' 
-        . PATH_SEPARATOR . get_include_path()
-    );
-    }
-    require_once("Zend/Search/Lucene.php");
-}
-
-//include_once('html2text/html2text.php');
-
-class Convert_ProcessFulltextAbstract_Service extends Core_Abstract_Service {
-
-    protected $pdftotext;
-
-    public function __construct($pdftotext = 'pdftotext')
-    {
-        $this->pdftotext = $pdftotext;
-    }
-
-    /**
-     * Ask for fulltext
-     *
-     * @param string $collId collection
-     * @param string $resTable resource table
-     * @param string $adrTable adr table
-     * @param long $resId res_id
-     * @param string $tmpDir path to tmp
-     * @param array $tgtfmt array of target format
-     * @return array $returnArray the result
-     */
-    public function fulltext(array $args=[])
-    {
-        $timestart = microtime(true);
-        $returnArray = array();
-        if (empty($args['collId'])) {
-            $returnArray = array(
-                'status' => '1',
-                'value' => '',
-                'error' => 'collId empty for fulltext',
-            );
-            return $returnArray;
-        } else {
-            $collId = $args['collId'];
-        }
-        // if (empty($args['batchMode'])) {
-        //     $batchMode = false;
-        // } else {
-        //     $batchMode = $args['batchMode'];
-        // }
-        if (empty($args['resTable'])) {
-            $returnArray = array(
-                'status' => '1',
-                'value' => '',
-                'error' => 'resTable empty for fulltext',
-            );
-            return $returnArray;
-        } else {
-            $resTable = $args['resTable'];
-        }
-        if (empty($args['adrTable'])) {
-            $returnArray = array(
-                'status' => '1',
-                'value' => '',
-                'error' => 'adrTable empty for fulltext',
-            );
-            return $returnArray;
-        } else {
-            $adrTable = $args['adrTable'];
-        }
-        if (empty($args['resId'])) {
-            $returnArray = array(
-                'status' => '1',
-                'value' => '',
-                'error' => 'resId empty for fulltext',
-            );
-            return $returnArray;
-        } else {
-            $resId = $args['resId'];
-        }
-
-        if (!isset($args['tmpDir']) || $args['tmpDir'] == '') {
-            $tmpDir = $_SESSION['config']['tmppath'];
-        } else {
-            $tmpDir = $args['tmpDir'];
-        }
-
-        if(isset($args['path_to_lucene']) && !empty($args['path_to_lucene'])){
-            $indexFileDirectory = $args['path_to_lucene'];
-        } else {
-            $countColl = count($_SESSION['collections']);
-            for ($i=0;$i<$countColl;$i++) {
-                if ($_SESSION['collections'][$i]['id'] == $collId) {
-                    $indexFileDirectory 
-                        = $_SESSION['collections'][$i]['path_to_lucene_index'];
-                }
-            }
-        }
-
-        $dbConv = new Database($GLOBALS['configFile']);
-        
-        //retrieve path of the resource
-        $stmtConv = $dbConv->query("select * from " . $resTable 
-            . " where res_id = ?", array($resId)
-        );
-        $line = $stmtConv->fetchObject();
-        $ManageDocservers = new Core_ManageDocservers_Service();
-        if ($line->res_id <> '')  {
-            $resourcePath = $ManageDocservers->getSourceResourcePath(
-                $resTable, 
-                $adrTable, 
-                $line->res_id, 
-                'CONV'
-            );
-        }
-        if (!file_exists($resourcePath)) {
-            $returnArray = array(
-                'status' => '2',
-                'value' => '',
-                'error' => 'file not already converted in pdf for fulltext. path :' 
-                    . $resourcePath . ", adrType : CONV, adr_table : " . $adrTable,
-            );
-            $this->manageErrorOnDb($resTable, $resId, '-1');
-            return $returnArray;
-        }
-        //copy the resource on tmp directory
-        $fileNameOnTmp = $tmpDir . rand() . rand();
-        if (!copy($resourcePath, $fileNameOnTmp)) {
-            $returnArray = array(
-                'status' => '1',
-                'value' => '',
-                'error' => 'copy on tmp failed for fulltext. Copy ' . $resourcePath . ' to ' . $fileNameOnTmp,
-            );
-            $this->manageErrorOnDb($resTable, $resId, '-1');
-            return $returnArray;
-        }
-        //now do the fulltext !
-        if (!empty($args['zendIndex'])) {
-            $resultOfConversion = $this->launchFulltext(
-                $fileNameOnTmp, 
-                $resId, 
-                $indexFileDirectory, 
-                $tmpDir,
-                $args['zendIndex']
-            );
-        } else {
-            $resultOfConversion = $this->launchFulltext(
-                $fileNameOnTmp, 
-                $resId, 
-                $indexFileDirectory, 
-                $tmpDir
-            );
-        }
-        
-        
-        if ($resultOfConversion['status'] <> '0') {
-            $this->manageErrorOnDb($resTable, $resId, '-1');
-            Core_Logs_Service::executionTimeLog($timestart, '', 'debug', '[TIMER] Convert_ProcessFulltextAbstract_Service::fulltext aucunContenuAIndexer');
-            return $resultOfConversion;
-        }
-        //find the target docserver
-        $targetDs = $ManageDocservers->findTargetDs($collId, 'FULLTEXT');
-        if (empty($targetDs)) {
-            $returnArray = array(
-                'status' => '1',
-                'value' => '',
-                'error' => 'Ds of collection and ds type not found for fulltext:' 
-                    . $collId . ' FULLTEXT',
-            );
-            $this->manageErrorOnDb($resTable, $resId, '-1');
-            return $returnArray;
-        }
-        //copy the result on docserver
-        $resultCopyDs = $ManageDocservers->copyResOnDS($fileNameOnTmp . '.txt', $targetDs);
-        if ($resultCopyDs['status'] <> '0') {
-            $this->manageErrorOnDb($resTable, $resId, '-1');
-            return $resultCopyDs;
-        }
-        //update the database
-        $resultOfUpDb = $this->updateDatabase(
-            $collId,
-            $resTable, 
-            $adrTable, 
-            $resId,
-            $targetDs,
-            $resultCopyDs['value']['destinationDir'],
-            $resultCopyDs['value']['fileDestinationName'],
-            $args['zendIndex']
-        );
-        if ($resultOfUpDb['status'] <> '0') {
-            $this->manageErrorOnDb($resTable, $resId, '-1');
-            return $resultOfUpDb;
-        }
-
-        unlink($fileNameOnTmp);
-        unlink($fileNameOnTmp . '.txt');
-
-        $returnArray = array(
-            'status' => '0',
-            'value' => '',
-            'error' => '',
-        );
-        Core_Logs_Service::executionTimeLog($timestart, '', 'debug', '[TIMER] Convert_ProcessFulltextAbstract_Service::fulltext');
-        return $returnArray;
-    }
-
-    /**
-     * Launch the fulltext process
-     *
-     * @param string $srcfile source file
-     * @param string $tgtdir target dir
-     * @param string $srcfmt source format
-     * @return array $returnArray the result
-     */
-    private function launchFulltext(
-        $srcfile, 
-        $resId,
-        $indexFileDirectory, 
-        $tgtdir=false,
-        $zendIndex=''
-    ) {
-        if (!empty($zendIndex)) {
-            $return = $this->prepareIndexFullTextPdf(
-                $srcfile, 
-                $tgtdir, 
-                $indexFileDirectory,
-                $resId,
-                $zendIndex
-            );
-        } else {
-            $return = $this->prepareIndexFullTextPdf(
-                $srcfile, 
-                $tgtdir, 
-                $indexFileDirectory,
-                $resId
-            );
-        }
-        
-        if ($return === 0) {
-            $returnArray = array(
-                'status' => '0',
-                'value' => '',
-                'error' => '',
-            );
-            return $returnArray;
-        } else {
-            $returnArray = array(
-                'status' => '1',
-                'value' => '',
-                'error' => $return . $output,
-            );
-            return $returnArray;
-        }
-    }
-
-    /**
-    * Read a txt file
-    * @param  $file string path of the file to read
-    * @return string contents of the file
-    */
-    private function readFileF($file)
-    {
-        $result = "";
-        if (is_file($file)) {
-            $fp = fopen($file, "r");
-            $result = fread($fp, filesize($file));
-            fclose($fp);
-        }
-        return $result;
-    }
-
-    private function prepareIndexFullTextPdf($pathToFile, $tmpDir, $indexFileDirectory, $resId, $zendIndex)
-    {
-        $timestart = microtime(true);
-        if (is_file($pathToFile)) {
-            $tmpFile = $tmpDir . basename($pathToFile) . ".txt";
-            // if ($_ENV['osname'] == "WINDOWS") {
-            //     $resultExtraction = exec(escapeshellarg($_ENV['maarch_tools_path'] . "pdftotext"
-            //         . DIRECTORY_SEPARATOR . $_ENV['pdftotext']) . " "
-            //         . escapeshellarg($pathToFile) . " " . escapeshellarg($tmpFile)
-            //     );
-            // } elseif ($_ENV['osname'] == "UNIX") {
-                // $resultExtraction = exec("pdftotext -enc UTF-8 " . escapeshellarg($pathToFile)
-                //     . " " . escapeshellarg($tmpFile) 
-                // );
-            $timestart_fulltext = microtime(true);
-            $resultExtraction = exec("pdftotext " . escapeshellarg($pathToFile)
-                    . " " . escapeshellarg($tmpFile) 
-                );
-            Core_Logs_Service::executionTimeLog($timestart_fulltext, '', 'debug', '[TIMER] Convert_ProcessFulltextAbstract_Service::prepareIndexFullTextPdf__exec');
-            //}
-            // echo "pdftotext " . escapeshellarg($pathToFile)
-            //         . " " . escapeshellarg($tmpFile) . '<br/><br/><br/>';
-            $fileContent = trim($this->readFileF($tmpFile));
-            //echo $fileContent . '<br />';
-            //exit;
-            //echo $tmpFile . '<br />';
-            //echo $indexFileDirectory . '<br />';
-            //echo $resId . '<br />';
-            if (!empty($zendIndex)) {
-                $result = $this->launchIndexFullTextWithZendIndex(
-                        $fileContent, 
-                        $indexFileDirectory, 
-                        $resId, 
-                        $zendIndex
-                );
-            } else {
-                // TODO : will be done only by the batch convert in OnlyIndexes mode
-                //$result = $this->launchIndexFullText($fileContent, $indexFileDirectory, $resId);
-                $result = 0;
-            }
-            
-        } else {
-            $result = 'file not found ' . $pathToFile;
-        }
-        Core_Logs_Service::executionTimeLog($timestart, '', 'debug', '[TIMER] Convert_ProcessFulltextAbstract_Service::prepareIndexFullTextPdf');
-        return $result;
-    }
-
-    /**
-    * Return zend index object for batch mode
-    * @param  $indexFileDirectory string directory of the lucene index
-    * @return zend index object
-    */
-    public function createZendIndexObject($tempIndexFileDirectory, $numberOfIndexes = 1000) 
-    {
-        //echo 'createZendIndexObject : ' . $numberOfIndexes . PHP_EOL;
-        $func = new functions();
-        $indexFileDirectory = (string) $tempIndexFileDirectory; 
-        // with version 1.12, we need a string, not an XML element
-        
-        if (!is_dir($indexFileDirectory)) {
-            $index = Zend_Search_Lucene::create($indexFileDirectory);
-        } else {
-            if ($func->isDirEmpty($indexFileDirectory)) {
-                $index = Zend_Search_Lucene::create($indexFileDirectory);
-            } else {
-                $index = Zend_Search_Lucene::open($indexFileDirectory);
-            }
-        }
-        $index->setFormatVersion(Zend_Search_Lucene::FORMAT_2_3); 
-        // we set the lucene format to 2.3
-        Zend_Search_Lucene_Analysis_Analyzer::setDefault(
-            new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8Num_CaseInsensitive()
-        );
-
-        //$index->MaxBufferedDocs();
-        $index->setMaxBufferedDocs($numberOfIndexes);
-
-        return $index;
-    }
-
-    /**
-    * Commit the zend index at the end of the batch
-    * @return nothing
-    */
-    public function commitZendIndex($index) 
-    {
-        //echo 'the commit' . PHP_EOL;
-        $index->commit();
-    }
-
-    /**
-    * Retrieve the text of a pdftext and launch the lucene engine
-    * @param  $pathToFile string path of the file to index
-    * @param  $indexFileDirectory string directory of the lucene index
-    * @param  $id integer id of the document to index
-    * @return integer user exit code is stored in fulltext_result column of the
-    * document in "res_x"
-    */
-    private function launchIndexFullText($fileContent, $tempIndexFileDirectory, $Id) 
-    {
-        // $IndexFileDirectory is replace by tempIndexFileDirectory
-        $func = new functions();
-        $fileContent = $func->normalize($fileContent);
-        $fileContent = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $fileContent);
-        $indexFileDirectory = (string) $tempIndexFileDirectory; 
-        // with version 1.12, we need a string, not an XML element
-        $result = -1;
-        if (strlen($fileContent) > 2) {
-            if (!is_dir($indexFileDirectory)) {
-                //$_ENV['logger']->write($indexFileDirectory . " not exists !", "ERROR", 2);
-                $index = Zend_Search_Lucene::create($indexFileDirectory);
-            } else {
-                if ($func->isDirEmpty($indexFileDirectory)) {
-                    //$_ENV['logger']->write($indexFileDirectory . " empty !");
-                    $index = Zend_Search_Lucene::create($indexFileDirectory);
-                } else {
-                    $index = Zend_Search_Lucene::open($indexFileDirectory);
-                }
-            }
-            $index->setFormatVersion(Zend_Search_Lucene::FORMAT_2_3); 
-            // we set the lucene format to 2.3
-            Zend_Search_Lucene_Analysis_Analyzer::setDefault(
-                new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8Num_CaseInsensitive()
-            );
-            // we need utf8 for accents
-            $term = new Zend_Search_Lucene_Index_Term($Id, 'Id');
-            foreach ($index->termDocs($term) as $id) {
-                $index->delete($id);
-            }
-            //echo $fileContent;
-            $doc = new Zend_Search_Lucene_Document();
-            $doc->addField(Zend_Search_Lucene_Field::UnIndexed('Id', (integer) $Id));
-            $doc->addField(Zend_Search_Lucene_Field::UnStored(
-                'contents', $fileContent)
-            );
-            //$func->show_array($doc);
-            $index->addDocument($doc);
-            $index->commit();
-            //$func->show_array($index);
-            //$index->optimize();
-            $result = 0;
-        } else {
-            $result = 1;
-        }
-        return $result;
-    }
-
-    /**
-    * Retrieve the text of a pdftext and launch the lucene engine
-    * @param  $pathToFile string path of the file to index
-    * @param  $indexFileDirectory string directory of the lucene index
-    * @param  $id integer id of the document to index
-    * @return integer user exit code is stored in fulltext_result column of the
-    * document in "res_x"
-    */
-    private function launchIndexFullTextWithZendIndex($fileContent, $tempIndexFileDirectory, $Id, $index) 
-    {
-        //echo 'launchIndexFullTextWithZendIndex' . PHP_EOL;
-        // $IndexFileDirectory is replace by tempIndexFileDirectory
-        $func = new functions();
-        $fileContent = $func->normalize($fileContent);
-        $fileContent = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $fileContent);
-
-        // with version 1.12, we need a string, not an XML element
-        $result = -1;
-        if (strlen($fileContent) > 2) {
-            try {
-                // we need utf8 for accents
-                $term = new Zend_Search_Lucene_Index_Term($Id, 'Id');
-                foreach ($index->termDocs($term) as $id) {
-                    $index->delete($id);
-                }
-                //echo $fileContent;
-                $doc = new Zend_Search_Lucene_Document();
-                $doc->addField(Zend_Search_Lucene_Field::UnIndexed('Id', (integer) $Id));
-                $doc->addField(Zend_Search_Lucene_Field::UnStored(
-                    'contents', $fileContent)
-                );
-                //$func->show_array($doc);
-                $index->addDocument($doc);
-                //$index->commit();
-                //$func->show_array($index);
-                //$index->optimize();
-                $result = 0;
-            } catch (Exception $e) {
-                $result = $e->getMessage();
-            }
-            
-        } else if (strlen($fileContent) >= 0){
-            $result = 0;
-        }
-        return $result;
-    }
-
-    /**
-     * Updating the database with the location information of the document on the
-     * new docserver
-     * @param string $collId collection
-     * @param string $resTable res table
-     * @param string $adrTable adr table
-     * @param bigint $resId Id of the resource to process
-     * @param docserver $docserver docserver object
-     * @param string $path location of the resource on the docserver
-     * @param string $fileName file name of the resource on the docserver
-     * @return array $returnArray the result
-     */
-    private function updateDatabase(
-        $collId, 
-        $resTable, 
-        $adrTable, 
-        $resId,
-        $docserver,
-        $path, 
-        $fileName,
-        $zendIndex = ''
-    ) {
-        try {
-            $docserver->path_template = str_replace(
-                DIRECTORY_SEPARATOR, 
-                '#', 
-                $docserver->path_template
-            );
-            $path = str_replace($docserver->path_template, '', $path);
-            $dbConv = new Database($GLOBALS['configFile']);
-            $query = "update convert_stack set status = 'P' where "
-               . " coll_id = ? and res_id = ?";
-            $stmt = $dbConv->query(
-                $query,
-                array(
-                    $collId,
-                    $resId
-                )
-            );
-
-            $query = "select * from " . $adrTable 
-                . " where res_id = ? order by adr_priority";
-            $stmt = $dbConv->query($query, array($resId));
-            if ($stmt->rowCount() == 0) {
-                $query = "select docserver_id, path, filename, offset_doc, fingerprint"
-                       . " from " . $resTable . " where res_id = ?";
-                $stmt = $dbConv->query($query, array($resId));
-                $recordset = $stmt->fetchObject();
-                $resDocserverId = $recordset->docserver_id;
-                $resPath = $recordset->path;
-                $resFilename = $recordset->filename;
-                $resOffsetDoc = $recordset->offset_doc;
-                $fingerprintInit = $recordset->fingerprint;
-                $query = "select adr_priority_number from docservers "
-                       . " where docserver_id = ?";
-                $stmt = $dbConv->query($query, array($resDocserverId));
-                $recordset = $stmt->fetchObject();
-                $query = "insert into " . $adrTable . " (res_id, "
-                       . "docserver_id, path, filename, offset_doc, fingerprint, "
-                       . "adr_priority) values (?, ?, ?, ?, ?, ?, ?)";
-                $stmt = $dbConv->query(
-                    $query, 
-                    array(
-                        $resId,
-                        $resDocserverId,
-                        $resPath,
-                        $resFilename,
-                        $resOffsetDoc,
-                        $fingerprintInit,
-                        $recordset->adr_priority_number
-                    )
-                );
-            }
-
-            $query = "select * from " . $adrTable 
-                . " where res_id = ? and adr_type = 'TXT'";
-            $stmt = $dbConv->query($query, array($resId));
-            if ($stmt->rowCount() == 0) {
-                $query = "insert into " . $adrTable . " (res_id, docserver_id, "
-                   . "path, filename, offset_doc, fingerprint, adr_priority, adr_type) values (" 
-                   . "?, ?, ?, ?, ?, ?, ?, ?)";
-                $stmt = $dbConv->query(
-                    $query, 
-                    array(
-                        $resId,
-                        $docserver->docserver_id,
-                        $path,
-                        $fileName,
-                        $offsetDoc,
-                        $fingerprint,
-                        $docserver->adr_priority_number,
-                        'TXT'
-                    )
-                );
-            } else {
-                $query = "update " . $adrTable . " set docserver_id = ?, "
-                   . " path = ?, filename = ?, offset_doc = ?, fingerprint = ?, adr_priority = ?"
-                   . " where res_id = ? and adr_type = ? ";
-                $stmt = $dbConv->query(
-                    $query, 
-                    array(
-                        $docserver->docserver_id,
-                        $path,
-                        $fileName,
-                        $offsetDoc,
-                        $fingerprint,
-                        $docserver->adr_priority_number,
-                        $resId,
-                        'TXT'
-                    )
-                );
-            }
-            if ($_SESSION['user']['UserId'] <> '') {
-                $user = $_SESSION['user']['UserId'];
-            } else {
-                $user = 'CONVERT_BOT';
-            }
-            $query = "insert into history (table_name, record_id, "
-                   . "event_type, user_id, event_date, info, id_module) values (" 
-                   . "?, ?, 'ADD', '" . $user . "', " 
-                   . $dbConv->current_datetime() 
-                   . ", ?, 'convert')";
-            $stmt = $dbConv->query( 
-                $query, 
-                array(
-                    $resTable,
-                    $resId,
-                    "process fulltext done"
-                )
-            );
-
-            $queryCpt = "select coalesce(custom_t15, '0') as custom_t15 from " . $resTable 
-                . " where res_id = ?";
-            $stmtCpt = $dbConv->query($queryCpt, array($resId));
-            $rsCpt = $stmtCpt->fetchObject();
-            $cptFullText = $rsCpt->custom_t15 + 1;
-
-            if (!empty($zendIndex)) {
-                $query = "update " . $resTable 
-                    . " set fulltext_result = '1', is_multi_docservers = 'Y', custom_t15 = '" . $cptFullText . "' where "
-                    . " res_id = ?";
-            } else {
-                $query = "update " . $resTable 
-                    . " set fulltext_result = '0', is_multi_docservers = 'Y', custom_t15 = '" . $cptFullText . "' where "
-                    . " res_id = ?";
-            }
-            $stmt = $dbConv->query(
-                $query,
-                array(
-                    $resId
-                )
-            );
-            $returnArray = array(
-                'status' => '0',
-                'value' => '',
-                'error' => '',
-            );
-            return $returnArray;
-        } catch (Exception $e) {
-            $returnArray = array(
-                'status' => '1',
-                'value' => '',
-                'error' => $e->getMessage(),
-            );
-            return $returnArray;
-        }
-    }
-
-    /**
-     * Updating the database with the error code
-     * @param string $resTable res table
-     * @param bigint $resId Id of the resource to process
-     * @param string $result error code
-     * @return nothing
-     */
-    private function manageErrorOnDb(
-        $resTable, 
-        $resId,
-        $result
-    ) {
-        $dbConv = new Database($GLOBALS['configFile']);
-
-        $queryCpt = "select coalesce(custom_t15, '0') as custom_t15 from " . $resTable 
-                . " where res_id = ?";
-        $stmtCpt = $dbConv->query($queryCpt, array($resId));
-        $rsCpt = $stmtCpt->fetchObject();
-        $cptFullText = $rsCpt->custom_t15 + 1;
-        
-        $query = "update " . $resTable 
-            . " set fulltext_result = ?, custom_t15 = '" . $cptFullText . "' where "
-            . " res_id = ?";
-        $stmt = $dbConv->query(
-            $query,
-            array(
-                $result,
-                $resId
-            )
-        );
-    }
-
-    public static function optimizeLuceneIndex(array $args=[]){
-        $timestart = microtime(true);
-        // Prés-requis :
-        self::checkRequired($args, ['collId']);
-        self::checkString($args, ['collId']); 
-        
-        $collId = $args['collId'];
-
-        $countColl = count($_SESSION['collections']);
-        for ($i=0;$i<$countColl;$i++) {
-            if ($_SESSION['collections'][$i]['id'] == $collId) {
-                $path_to_lucene = $_SESSION['collections'][$i]['path_to_lucene_index'];
-            }
-        }
-
-        if(!empty($path_to_lucene)){
-            exec('php '.$_SESSION['config']['corepath'].'modules/convert/optimizeLuceneIndex.php '.$path_to_lucene.' '.$_SESSION['config']['corepath'].' > /dev/null 2>&1 &');
-        }
-        Core_Logs_Service::executionTimeLog($timestart, '', 'debug', '[TIMER] Convert_ProcessFulltextAbstract_Service::optimizeLuceneIndex');
-        return true;
-    }
-
-}
diff --git a/modules/convert/services/ProcessThumbnails.php b/modules/convert/services/ProcessThumbnails.php
deleted file mode 100644
index 17f4b754bd7..00000000000
--- a/modules/convert/services/ProcessThumbnails.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-
-/*
-*   Copyright 2008-2016 Maarch
-*
-*   This file is part of Maarch Framework.
-*
-*   Maarch Framework is free software: you can redistribute it and/or modify
-*   it under the terms of the GNU General Public License as published by
-*   the Free Software Foundation, either version 3 of the License, or
-*   (at your option) any later version.
-*
-*   Maarch Framework is distributed in the hope that it will be useful,
-*   but WITHOUT ANY WARRANTY; without even the implied warranty of
-*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*   GNU General Public License for more details.
-*
-*   You should have received a copy of the GNU General Public License
-*   along with Maarch Framework.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-/**
-* @brief process thumbnails class
-*
-* <ul>
-* <li>Services to process the thumbnails of resources</li>
-* </ul>
-*
-* @file
-* @author Laurent Giovannoni <dev@maarch.org>
-* @date $date$
-* @version $Revision$
-* @ingroup convert
-*/
-
-
-require_once 'modules/convert/services/ProcessThumbnailsAbstract.php';
-
-class Convert_ProcessThumbnails_Service extends Convert_ProcessThumbnailsAbstract_Service {
-	
-	
-}
diff --git a/modules/convert/services/ProcessThumbnailsAbstract.php b/modules/convert/services/ProcessThumbnailsAbstract.php
deleted file mode 100644
index 0ac20cf65c4..00000000000
--- a/modules/convert/services/ProcessThumbnailsAbstract.php
+++ /dev/null
@@ -1,501 +0,0 @@
-<?php
-
-/*
-*   Copyright 2008-2016 Maarch
-*
-*   This file is part of Maarch Framework.
-*
-*   Maarch Framework is free software: you can redistribute it and/or modify
-*   it under the terms of the GNU General Public License as published by
-*   the Free Software Foundation, either version 3 of the License, or
-*   (at your option) any later version.
-*
-*   Maarch Framework is distributed in the hope that it will be useful,
-*   but WITHOUT ANY WARRANTY; without even the implied warranty of
-*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*   GNU General Public License for more details.
-*
-*   You should have received a copy of the GNU General Public License
-*   along with Maarch Framework.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-/**
-* @brief process thumbnails class
-*
-* <ul>
-* <li>Services to process the thumbnails of resources</li>
-* </ul>
-*
-* @file
-* @author Laurent Giovannoni <dev@maarch.org>
-* @date $date$
-* @version $Revision$
-* @ingroup convert
-*/
-
-
-require_once 'core/services/Abstract.php';
-require_once 'core/class/class_functions.php';
-require_once 'core/class/class_db_pdo.php';
-require_once 'core/class/class_db.php';
-require_once 'core/docservers_tools.php';
-require_once 'core/class/docservers_controler.php';
-require_once 'core/services/ManageDocservers.php';
-
-class Convert_ProcessThumbnailsAbstract_Service extends Core_Abstract_Service {
-
-    protected $tnlExecutable;
-
-    public function __construct($tnlExecutable = 'convert')
-    {
-        $this->tnlExecutable = $tnlExecutable;
-    }
-
-    /**
-     * Ask for thumbnails
-     *
-     * @param string $collId collection
-     * @param string $resTable resource table
-     * @param string $adrTable adr table
-     * @param long $resId res_id
-     * @param string $tmpDir path to tmp
-     * @param array $tgtfmt array of target format
-     * @return array $returnArray the result
-     */
-    public function thumbnails(array $args=[])
-    {
-        $timestart = microtime(true);
-        $returnArray = array();
-        if (empty($args['collId'])) {
-            $returnArray = array(
-                'status' => '1',
-                'value' => '',
-                'error' => 'collId empty for thumbnails',
-            );
-            return $returnArray;
-        } else {
-            $collId = $args['collId'];
-        }
-        if (empty($args['resTable'])) {
-            $returnArray = array(
-                'status' => '1',
-                'value' => '',
-                'error' => 'resTable empty for thumbnails',
-            );
-            return $returnArray;
-        } else {
-            $resTable = $args['resTable'];
-        }
-        if (empty($args['adrTable'])) {
-            $returnArray = array(
-                'status' => '1',
-                'value' => '',
-                'error' => 'adrTable empty for thumbnails',
-            );
-            return $returnArray;
-        } else {
-            $adrTable = $args['adrTable'];
-        }
-        if (empty($args['resId'])) {
-            $returnArray = array(
-                'status' => '1',
-                'value' => '',
-                'error' => 'resId empty for thumbnails',
-            );
-            return $returnArray;
-        } else {
-            $resId = $args['resId'];
-        }
-
-        if (!isset($args['tmpDir']) || $args['tmpDir'] == '') {
-            $tmpDir = $_SESSION['config']['tmppath'];
-        } else {
-            $tmpDir = $args['tmpDir'];
-        }
-
-        $dbConv = new Database($GLOBALS['configFile']);
-        
-        //retrieve path of the resource
-        $stmtConv = $dbConv->query("select * from " . $resTable 
-            . " where res_id = ?", array($resId)
-        );
-        $line = $stmtConv->fetchObject();
-        $ManageDocservers = new Core_ManageDocservers_Service();
-        if ($args['fileSource'] <> '' && file_exists($args['fileSource'])) {
-            $resourcePath = $args['fileSource'];
-        } else {
-            if ($line->res_id <> '')  {
-                $adrType = 'CONV';
-                if (
-                    strtoupper($line->format) == 'HTML' ||
-                    strtoupper($line->format) == 'MAARCH'
-                ) {
-                    $adrType = 'DOC';
-                }
-                $resourcePath = $ManageDocservers->getSourceResourcePath(
-                    $resTable, 
-                    $adrTable, 
-                    $line->res_id, 
-                    $adrType
-                );
-            }
-        }
-        
-        if (!file_exists($resourcePath)) {
-            $returnArray = array(
-                'status' => '1',
-                'value' => '',
-                'error' => 'file not already converted in pdf for thumbnails. Path : ' 
-                    . $resourcePath . ", adrType : " . $adrType,
-            );
-            $this->manageErrorOnDb($resTable, $resId, '-1');
-            return $returnArray;
-        }
-        //copy the resource on tmp directory
-        $fileNameOnTmp = $tmpDir . rand() . rand();
-        if (!copy($resourcePath, $fileNameOnTmp)) {
-            $returnArray = array(
-                'status' => '1',
-                'value' => '',
-                'error' => 'copy on tmp failed for thumbnails. Copy ' . $resourcePath . ' to ' . $fileNameOnTmp,
-            );
-            $this->manageErrorOnDb($resTable, $resId, '-1');
-            return $returnArray;
-        }
-        //now do the thumbnails !
-        $resultOfConversion = $this->launchThumbnails(
-            $fileNameOnTmp, 
-            $tmpDir,
-            pathinfo($resourcePath, PATHINFO_EXTENSION)
-        );
-        if ($resultOfConversion['status'] <> '0') {
-            $this->manageErrorOnDb($resTable, $resId, '-1');
-            return $resultOfConversion;
-        }
-        //find the target docserver
-        $targetDs = $ManageDocservers->findTargetDs($collId, 'TNL');
-        if (empty($targetDs)) {
-            $returnArray = array(
-                'status' => '1',
-                'value' => '',
-                'error' => 'Ds of collection and ds type not found for thumbnails:' 
-                    . $collId . ' TNL',
-            );
-            $this->manageErrorOnDb($resTable, $resId, '-1');
-            return $returnArray;
-        }
-        //copy the result on docserver
-        $resultCopyDs = $ManageDocservers->copyResOnDS($fileNameOnTmp . '.png', $targetDs);
-        if ($resultCopyDs['status'] <> '0') {
-            $this->manageErrorOnDb($resTable, $resId, '-1');
-            return $resultCopyDs;
-        }
-        //update the database
-        $resultOfUpDb = $this->updateDatabase(
-            $collId,
-            $resTable, 
-            $adrTable, 
-            $resId,
-            $targetDs,
-            $resultCopyDs['value']['destinationDir'],
-            $resultCopyDs['value']['fileDestinationName']
-        );
-        if ($resultOfUpDb['status'] <> '0') {
-            $this->manageErrorOnDb($resTable, $resId, '-1');
-            return $resultOfUpDb;
-        }
-
-        unlink($fileNameOnTmp);
-        unlink($fileNameOnTmp . '.png');
-
-        $returnArray = array(
-            'status' => '0',
-            'value' => '',
-            'error' => '',
-        );
-        Core_Logs_Service::executionTimeLog($timestart, '', 'info', '[TIMER] Convert_ProcessThumbnailsAbstract_Service::thumbnails');
-        return $returnArray;
-    }
-
-    /**
-     * Launch the thumbnails process
-     *
-     * @param string $srcfile source file
-     * @param string $tgtdir target dir
-     * @param string $srcfmt source format
-     * @return array $returnArray the result
-     */
-    private function launchThumbnails(
-        $srcfile, 
-        $tgtdir=false, 
-        $srcfmt
-    ) {
-        $timestart = microtime(true);
-        if (!$tgtdir) {
-            $tgtdir = dirname($srcfile);
-        }
-
-        $output = array();
-        $return = null;
-        $this->errors = array();
-
-        //wkhtmltoimage must be installed with compiled sources
-        if (strtoupper($srcfmt) == 'MAARCH' || strtoupper($srcfmt) == 'HTML') {
-            copy($srcfile, str_ireplace('.maarch', '.', $srcfile) . '.html');
-            if (file_exists('/usr/bin/mywkhtmltoimage')) {
-                $command = "mywkhtmltoimage  --width 164 --height 105 --quality 100 --zoom 0.2 " 
-                    . escapeshellarg(str_ireplace('.maarch', '.', $srcfile) . '.html') . " " 
-                    . escapeshellarg($tgtdir . basename(str_ireplace('.maarch', '.', $srcfile)) . '.png');
-            } else {
-                $envVar = "export DISPLAY=FRPAROEMINT:0.0 ; ";
-                $command = $envVar . "wkhtmltoimage --width 164 --height 105 --quality 100 --zoom 0.2 " 
-                    . escapeshellarg(str_ireplace('.maarch', '.', $srcfile) . '.html') . " " 
-                    . escapeshellarg($tgtdir . basename(str_ireplace('.maarch', '.', $srcfile)) . '.png');
-            }
-        } else {
-            $command = "convert -thumbnail 200x300 -background white -alpha remove " 
-                . escapeshellarg($srcfile) . "[0] "
-                . escapeshellarg($tgtdir . basename($srcfile) . '.png');
-        }
-        //echo $command . PHP_EOL;exit;
-        $timestart_command = microtime(true);
-        exec($command, $output, $return);
-        Core_Logs_Service::debug(['message'=>'[TIMER] Commande : ' . $command]);
-        Core_Logs_Service::executionTimeLog($timestart_command, '', 'debug', '[TIMER] Convert_ProcessThumbnailsAbstract_Service::launchThumbnails__exec');
-
-        if ($return === 0) {
-            $returnArray = array(
-                'status' => '0',
-                'value' => '',
-                'error' => '',
-            );
-        } else {
-            $returnArray = array(
-                'status' => '1',
-                'value' => '',
-                'error' => $return . $output,
-            );
-        }
-        if (strtoupper($srcfmt) == 'MAARCH' || strtoupper($srcfmt) == 'HTML') {
-            $returnArray = array();
-            unlink(str_ireplace('.maarch', '.', $srcfile) . '.html');
-            $returnArray = array(
-                'status' => '0',
-                'value' => '',
-                'error' => '',
-            );
-        }
-        Core_Logs_Service::executionTimeLog($timestart, '', 'debug', '[TIMER] Convert_ProcessThumbnailsAbstract_Service::launchThumbnails');
-        return $returnArray;
-    }
-
-    /**
-     * Updating the database with the location information of the document on the
-     * new docserver
-     * @param string $collId collection
-     * @param string $resTable res table
-     * @param string $adrTable adr table
-     * @param bigint $resId Id of the resource to process
-     * @param docserver $docserver docserver object
-     * @param string $path location of the resource on the docserver
-     * @param string $fileName file name of the resource on the docserver
-     * @return array $returnArray the result
-     */
-    private function updateDatabase(
-        $collId, 
-        $resTable, 
-        $adrTable, 
-        $resId,
-        $docserver,
-        $path, 
-        $fileName
-    ) {
-        try {
-            $docserver->path_template = str_replace(
-                DIRECTORY_SEPARATOR, 
-                '#', 
-                $docserver->path_template
-            );
-            $path = str_replace($docserver->path_template, '', $path);
-            $dbConv = new Database($GLOBALS['configFile']);
-            $query = "update convert_stack set status = 'P' where "
-               . " coll_id = ? and res_id = ?";
-            $stmt = $dbConv->query(
-                $query,
-                array(
-                    $collId,
-                    $resId
-                )
-            );
-
-            $query = "select * from " . $adrTable 
-                . " where res_id = ? order by adr_priority";
-            $stmt = $dbConv->query($query, array($resId));
-            if ($stmt->rowCount() == 0) {
-                $query = "select docserver_id, path, filename, offset_doc, fingerprint"
-                       . " from " . $resTable . " where res_id = ?";
-                $stmt = $dbConv->query($query, array($resId));
-                $recordset = $stmt->fetchObject();
-                $resDocserverId = $recordset->docserver_id;
-                $resPath = $recordset->path;
-                $resFilename = $recordset->filename;
-                $resOffsetDoc = $recordset->offset_doc;
-                $fingerprintInit = $recordset->fingerprint;
-                $query = "select adr_priority_number from docservers "
-                       . " where docserver_id = ?";
-                $stmt = $dbConv->query($query, array($resDocserverId));
-                $recordset = $stmt->fetchObject();
-                $query = "insert into " . $adrTable . " (res_id, "
-                       . "docserver_id, path, filename, offset_doc, fingerprint, "
-                       . "adr_priority) values (?, ?, ?, ?, ?, ?, ?)";
-                $stmt = $dbConv->query(
-                    $query, 
-                    array(
-                        $resId,
-                        $resDocserverId,
-                        $resPath,
-                        $resFilename,
-                        $resOffsetDoc,
-                        $fingerprintInit,
-                        $recordset->adr_priority_number
-                    )
-                );
-            }
-
-            $query = "select * from " . $adrTable 
-                . " where res_id = ? and adr_type = 'TNL'";
-            $stmt = $dbConv->query($query, array($resId));
-            if ($stmt->rowCount() == 0) {
-                $query = "insert into " . $adrTable . " (res_id, docserver_id, "
-                   . "path, filename, offset_doc, fingerprint, adr_priority, adr_type) values (" 
-                   . "?, ?, ?, ?, ?, ?, ?, ?)";
-                $stmt = $dbConv->query(
-                    $query, 
-                    array(
-                        $resId,
-                        $docserver->docserver_id,
-                        $path,
-                        $fileName,
-                        $offsetDoc,
-                        $fingerprint,
-                        $docserver->adr_priority_number,
-                        'TNL'
-                    )
-                );
-            } else {
-                $query = "update " . $adrTable . " set docserver_id = ?, "
-                   . " path = ?, filename = ?, offset_doc = ?, fingerprint = ?, adr_priority = ?"
-                   . " where res_id = ? and adr_type = ? ";
-                $stmt = $dbConv->query(
-                    $query, 
-                    array(
-                        $docserver->docserver_id,
-                        $path,
-                        $fileName,
-                        $offsetDoc,
-                        $fingerprint,
-                        $docserver->adr_priority_number,
-                        $resId,
-                        'TNL'
-                    )
-                );
-            }
-            if ($_SESSION['user']['UserId'] <> '') {
-                $user = $_SESSION['user']['UserId'];
-            } else {
-                $user = 'CONVERT_BOT';
-            }
-            $query = "insert into history (table_name, record_id, "
-                   . "event_type, user_id, event_date, info, id_module) values (" 
-                   . "?, ?, 'ADD', '" . $user . "', " 
-                   . $dbConv->current_datetime() 
-                   . ", ?, 'convert')";
-            $stmt = $dbConv->query( 
-                $query, 
-                array(
-                    $resTable,
-                    $resId,
-                    "process thumbnails done"
-                )
-            );
-
-            $query = "update " . $resTable 
-                . " set tnl_result = '1', is_multi_docservers = 'Y' where "
-                . " res_id = ?";
-            $stmt = $dbConv->query(
-                $query,
-                array(
-                    $resId
-                )
-            );
-            $returnArray = array(
-                'status' => '0',
-                'value' => '',
-                'error' => '',
-            );
-            return $returnArray;
-        } catch (Exception $e) {
-            $returnArray = array(
-                'status' => '1',
-                'value' => '',
-                'error' => $e->getMessage(),
-            );
-            return $returnArray;
-        }
-    }
-
-    /**
-     * Updating the database with the error code
-     * @param string $resTable res table
-     * @param bigint $resId Id of the resource to process
-     * @param string $result error code
-     * @return nothing
-     */
-    private function manageErrorOnDb(
-        $resTable, 
-        $resId,
-        $result
-    ) {
-        $dbConv = new Database($GLOBALS['configFile']);
-        $query = "update " . $resTable 
-            . " set tnl_result = ? where "
-            . " res_id = ?";
-        $stmt = $dbConv->query(
-            $query,
-            array(
-                $result,
-                $resId
-            )
-        );
-    }
-
-    /**
-     * Test if the record is already processed by convert module
-     * @param string $resTable res table
-     * @param bigint $resId Id of the resource to process
-     * @return boolean
-     */
-    public function isAlreadyProcessedByhumbnails(
-        $resTable, 
-        $resId
-    ) {
-        $dbConv = new Database($GLOBALS['configFile']);
-        $query = "select tnl_result from " . $resTable 
-            . "  where res_id = ?";
-        $stmt = $dbConv->query(
-            $query,
-            array(
-                $resId
-            )
-        );
-        $rs = $stmt->fetchObject();
-        if (
-            empty($rs->tnl_result) || 
-            $rs->tnl_result == '0'
-        ) {
-            return false;
-        } else {
-            return true;
-        }
-    }
-}
-- 
GitLab