From 25bbbb99f632156aaf3af4bbdf9ea7cebf9d6a2b Mon Sep 17 00:00:00 2001
From: Damien <damien.burel@maarch.org>
Date: Tue, 7 Aug 2018 17:15:16 +0200
Subject: [PATCH] FEAT #8137 Goodbye Thumbnail module + Improve thumbnail
 process

---
 .../Views/signature-book.component.html       |   2 +-
 .../class/class_lists_Abstract.php            |   2 +-
 apps/maarch_entreprise/css/styles.css         |  22 +
 apps/maarch_entreprise/img/noThumbnail.png    | Bin 0 -> 27851 bytes
 apps/maarch_entreprise/smartphone/details.php |  47 +-
 .../xml/IVS/requests_definitions.xml          |   3 -
 apps/maarch_entreprise/xml/config.xml.default |   4 -
 core/class/LinkController.php                 |  14 +-
 install/class/Class_Install.php               | 205 +-----
 modules/attachments/attachments_content.php   |  64 --
 modules/thumbnails/LICENSE.txt                | 675 ------------------
 modules/thumbnails/LoggerLog4php.php          | 314 --------
 modules/thumbnails/README.txt                 |  14 -
 modules/thumbnails/ajaxShowThumb.php          |  61 --
 modules/thumbnails/batch_tools.php            | 155 ----
 .../thumbnails/class/class_modules_tools.php  | 250 -------
 modules/thumbnails/create_tnl.php             | 314 --------
 modules/thumbnails/css/module.css             |  66 --
 modules/thumbnails/doc_thumb.php              |  40 --
 modules/thumbnails/doc_thumb_frame.php        | 118 ---
 modules/thumbnails/js/functions.js            |  32 -
 modules/thumbnails/lang/en.php                |   3 -
 modules/thumbnails/lang/fr.php                |   3 -
 modules/thumbnails/log/test.txt               |   0
 modules/thumbnails/no_thumb.png               | Bin 13380 -> 0 bytes
 .../scripts/launch_batch_thumbnails.sh        |   4 -
 modules/thumbnails/xml/IVS/data_types.xml     |   3 -
 .../xml/IVS/requests_definitions.xml          |  23 -
 .../thumbnails/xml/IVS/validation_rules.xml   |  10 -
 modules/thumbnails/xml/config.xml             |   8 -
 modules/thumbnails/xml/config.xml.default     |   8 -
 .../xml/config_batch_attachments.xml.default  |  23 -
 .../xml/config_batch_letterbox.xml.default    |  23 -
 modules/thumbnails/xml/services.xml           |   3 -
 sql/develop.sql                               |   1 +
 .../ConvertThumbnailController.php            |   8 +-
 .../resource/controllers/ResController.php    |  38 +-
 .../resource/controllers/StoreController.php  |   2 +-
 .../controllers/SignatureBookController.php   |   6 +-
 39 files changed, 79 insertions(+), 2489 deletions(-)
 create mode 100644 apps/maarch_entreprise/img/noThumbnail.png
 delete mode 100755 modules/thumbnails/LICENSE.txt
 delete mode 100755 modules/thumbnails/LoggerLog4php.php
 delete mode 100755 modules/thumbnails/README.txt
 delete mode 100755 modules/thumbnails/ajaxShowThumb.php
 delete mode 100755 modules/thumbnails/batch_tools.php
 delete mode 100755 modules/thumbnails/class/class_modules_tools.php
 delete mode 100755 modules/thumbnails/create_tnl.php
 delete mode 100755 modules/thumbnails/css/module.css
 delete mode 100755 modules/thumbnails/doc_thumb.php
 delete mode 100755 modules/thumbnails/doc_thumb_frame.php
 delete mode 100755 modules/thumbnails/js/functions.js
 delete mode 100755 modules/thumbnails/lang/en.php
 delete mode 100755 modules/thumbnails/lang/fr.php
 delete mode 100755 modules/thumbnails/log/test.txt
 delete mode 100755 modules/thumbnails/no_thumb.png
 delete mode 100755 modules/thumbnails/scripts/launch_batch_thumbnails.sh
 delete mode 100755 modules/thumbnails/xml/IVS/data_types.xml
 delete mode 100755 modules/thumbnails/xml/IVS/requests_definitions.xml
 delete mode 100755 modules/thumbnails/xml/IVS/validation_rules.xml
 delete mode 100755 modules/thumbnails/xml/config.xml
 delete mode 100755 modules/thumbnails/xml/config.xml.default
 delete mode 100755 modules/thumbnails/xml/config_batch_attachments.xml.default
 delete mode 100755 modules/thumbnails/xml/config_batch_letterbox.xml.default
 delete mode 100755 modules/thumbnails/xml/services.xml

diff --git a/apps/maarch_entreprise/Views/signature-book.component.html b/apps/maarch_entreprise/Views/signature-book.component.html
index ac5dc94189e..50bf8dbd5bc 100755
--- a/apps/maarch_entreprise/Views/signature-book.component.html
+++ b/apps/maarch_entreprise/Views/signature-book.component.html
@@ -76,7 +76,7 @@
             <div *ngIf="headerTab == 1" class="contentShow">
                 <div *ngIf="showTopLeftPanel" class="pjDoc">
                     <div style="height:100%;">
-                        <img title="{{document.title}}" id="thumnails_img" *ngFor="let document of signatureBook.documents; let i = index" (click)="changeLeftViewer(i)" [src]="document.thumbnailLink"
+                        <img title="{{document.title}}" id="thumnails_img" *ngFor="let document of signatureBook.documents; let i = index" (click)="changeLeftViewer(i)" [src]="coreUrl + document.thumbnailLink"
                                  class="leftPanelThumbnails" [ngClass]="{'panelSelectedThumbnail': i == leftSelectedThumbnail}"/>
                     </div>
                 </div>
diff --git a/apps/maarch_entreprise/class/class_lists_Abstract.php b/apps/maarch_entreprise/class/class_lists_Abstract.php
index 7d5948d5c6d..88a31edf400 100755
--- a/apps/maarch_entreprise/class/class_lists_Abstract.php
+++ b/apps/maarch_entreprise/class/class_lists_Abstract.php
@@ -1190,7 +1190,7 @@ abstract class lists_Abstract extends Database
         }
 
         $href = $this->_buildMyLink($this->params['viewDocumentLink'], $resultTheLine, $listKey);
-        if ($core->is_module_loaded('thumbnails') === true && !$isAttachment) {
+        if (!$isAttachment) {
             $return .= '<div align="center" class="iconDoc" onmouseover="displayThumbnail(\''.$res_id.'\')"><a href="'.$href.'" target="_blank" title="'
                     ._VIEW_DOC.'"><i class="tooltip fa fa-download fa-2x" title="'._VISUALIZE.'"></i><span id="thumb_'.$res_id.'" name="thumb_'.$res_id.'"></span></a></div>';
         } else {
diff --git a/apps/maarch_entreprise/css/styles.css b/apps/maarch_entreprise/css/styles.css
index 87e093da58f..d482657ec57 100755
--- a/apps/maarch_entreprise/css/styles.css
+++ b/apps/maarch_entreprise/css/styles.css
@@ -3733,3 +3733,25 @@ width:auto;
 .typeahead__list {
     min-width: 150px !important;
 }
+.iconDoc span {
+    display: none;
+}
+.iconDoc:hover span {
+    display: block;
+    position:fixed;
+    left:10px;
+    top:10px;
+    -moz-box-shadow: 0px 0px 5px 0px #656565;
+    -webkit-box-shadow: 0px 0px 5px 0px #656565;
+    -o-box-shadow: 0px 0px 5px 0px #656565;
+    box-shadow: 0px 0px 5px 0px #656565;
+    filter:progid:DXImageTransform.Microsoft.Shadow(color=#656565, Direction=NaN, Strength=5);
+    z-index:100;
+    height:auto;
+    width:auto;
+}
+
+.iconDoc:hover span img {
+    height:auto;
+    width:auto;
+}
diff --git a/apps/maarch_entreprise/img/noThumbnail.png b/apps/maarch_entreprise/img/noThumbnail.png
new file mode 100644
index 0000000000000000000000000000000000000000..2e865dcf63e0afb0acc95a766b08b88eb8e8f7f8
GIT binary patch
literal 27851
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

literal 0
HcmV?d00001

diff --git a/apps/maarch_entreprise/smartphone/details.php b/apps/maarch_entreprise/smartphone/details.php
index ad341f18ca8..1204347afed 100755
--- a/apps/maarch_entreprise/smartphone/details.php
+++ b/apps/maarch_entreprise/smartphone/details.php
@@ -146,44 +146,18 @@ foreach (array_keys($data) as $key) {
     }
 }
 
-require_once 'modules'.DIRECTORY_SEPARATOR.'thumbnails'.DIRECTORY_SEPARATOR
-            .'class'.DIRECTORY_SEPARATOR
-            .'class_modules_tools.php';
-
 $getAttach = '';
 
-$tnl = new thumbnails();
-
 $db = new Database();
-if (isset($_REQUEST['res_id_master'])) {
-    //$ac->getCorrespondingPdf($att_id);
-    require_once 'modules/attachments/class/attachments_controler.php';
-    $ac = new attachments_controler();
-    $infos_attach = $ac->getAttachmentInfos($att_id);
-    $pdf_id = $ac->getCorrespondingPdf($att_id);
-    //echo "pdf : ".$pdf_id;
-
-    $path = $tnl->getPathTnl($s_id, $coll_id);
-    if (!is_file($path)) {
-        $path = $tnl->generateTnl($s_id, $coll_id);
-    }
-
-    $path = $tnl->getPathTnl($pdf_id, $coll_id, 'res_attachments');
-    $getAttach = '&res_id_attach='.$pdf_id;
-
-    if (!is_file($path)) {
-        $path = $tnl->generateTnl($pdf_id, $coll_id, 'res_attachments');
-    }
-} else {
-    $path = $tnl->getPathTnl($s_id, $coll_id);
-    if (!is_file($path)) {
-        $path = $tnl->generateTnl($s_id, $coll_id);
-    }
-}
+$tnlAdr = \Resource\models\AdrModel::getTypedDocumentAdrByResId([
+    'select'    => [1],
+    'resId'     => $s_id,
+    'type'      => 'TNL'
+]);
 ?>
 <div id="details" title="Détails" class="panel">
     <?php
-        if (!is_file($path)) {
+        if (empty($tnlAdr)) {
             echo 'pdf : '.$pdf_id; ?>
     <div align="center">
         <input type="button" class="whiteButton" value="<?php 
@@ -193,11 +167,8 @@ if (isset($_REQUEST['res_id_master'])) {
 
         } else {
             ?>
-    <!--<img style="width:90%;" src="<?php echo $_SESSION['config']['businessappurl'].'index.php?page=doc_thumb&module=thumbnails&res_id='.$s_id.'&coll_id=letterbox_coll&display=true'; ?>" onclick="window.open('
-    <?php echo $fileUrl; ?>', '_blank');"/>-->
-
     <div id="frameThumb">
-        <iframe id="ifrm" frameborder="0" scrolling="no" width="0" height="0" src="<?php echo $_SESSION['config']['businessappurl'].'index.php?page=doc_thumb_frame&body_loaded&module=thumbnails&res_id='.$s_id.'&coll_id=letterbox_coll'.$getAttach; ?>"></iframe>
+        <iframe id="ifrm" frameborder="0" scrolling="no" width="0" height="0" src="<?php echo '../../../rest/res/'.$s_id.'/thumbnail' ?>"></iframe>
     </div>
 
     <?php
@@ -242,10 +213,6 @@ if (isset($_REQUEST['res_id_master'])) {
                     <i class="fa fa-hand-point-up fa-2x mCdarkGrey" aria-hidden="true"></i>
                 </span>
             </a>
-
-            <span class="bubble" style="cursor: pointer;margin-right: 5px;" onclick="switchFrame('<?php functions::xecho($_SESSION['config']['businessappurl'].'index.php?page=doc_thumb_frame&body_loaded&module=thumbnails'); ?>',<?php functions::xecho($s_id); ?>,<?php functions::xecho($pdf_id); ?>);">
-                <i class="fa fa-retweet fa-2x mCdarkGrey"></i>
-            </span>
             <input type="hidden" id="type_doc_show" value="attach" />
             <?php
 
diff --git a/apps/maarch_entreprise/xml/IVS/requests_definitions.xml b/apps/maarch_entreprise/xml/IVS/requests_definitions.xml
index 4a168743a85..7bb867b8b38 100755
--- a/apps/maarch_entreprise/xml/IVS/requests_definitions.xml
+++ b/apps/maarch_entreprise/xml/IVS/requests_definitions.xml
@@ -591,7 +591,6 @@
     <xi:include href="../../../../modules/sendmail/xml/IVS/requests_definitions.xml"/>
     <xi:include href="../../../../modules/tags/xml/IVS/requests_definitions.xml"/>
     <xi:include href="../../../../modules/templates/xml/IVS/requests_definitions.xml"/>
-    <xi:include href="../../../../modules/thumbnails/xml/IVS/requests_definitions.xml"/>
     <xi:include href="../../../../modules/visa/xml/IVS/requests_definitions.xml"/>
     <xi:include href="../../../../modules/avis/xml/IVS/requests_definitions.xml"/>
     <xi:include href="../../../../modules/thesaurus/xml/IVS/requests_definitions.xml"/>
@@ -623,7 +622,6 @@
     <xi:include href="../../../../modules/sendmail/xml/IVS/validation_rules.xml"/>
     <xi:include href="../../../../modules/tags/xml/IVS/validation_rules.xml"/>
     <xi:include href="../../../../modules/templates/xml/IVS/validation_rules.xml"/>
-    <xi:include href="../../../../modules/thumbnails/xml/IVS/validation_rules.xml"/>
     <xi:include href="../../../../modules/visa/xml/IVS/validation_rules.xml"/>
     <xi:include href="../../../../modules/avis/xml/IVS/validation_rules.xml"/>
     <xi:include href="../../../../modules/thesaurus/xml/IVS/validation_rules.xml"/>
@@ -655,7 +653,6 @@
     <xi:include href="../../../../modules/sendmail/xml/IVS/data_types.xml"/>
     <xi:include href="../../../../modules/tags/xml/IVS/data_types.xml"/>
     <xi:include href="../../../../modules/templates/xml/IVS/data_types.xml"/>
-    <xi:include href="../../../../modules/thumbnails/xml/IVS/data_types.xml"/>
     <xi:include href="../../../../modules/visa/xml/IVS/data_types.xml"/>
     <xi:include href="../../../../modules/avis/xml/IVS/data_types.xml"/>
     <xi:include href="../../../../modules/thesaurus/xml/IVS/data_types.xml"/>
diff --git a/apps/maarch_entreprise/xml/config.xml.default b/apps/maarch_entreprise/xml/config.xml.default
index cab1d4cb99a..821a48a829c 100755
--- a/apps/maarch_entreprise/xml/config.xml.default
+++ b/apps/maarch_entreprise/xml/config.xml.default
@@ -291,10 +291,6 @@
     <MODULES>
         <moduleid>sendmail</moduleid>
         <comment>_SENDMAIL_COMMENT</comment>
-    </MODULES>
-    <MODULES>
-        <moduleid>thumbnails</moduleid>
-        <comment>_THUMBNAILS_COMMENT</comment>
     </MODULES>
 	<MODULES>
         <moduleid>visa</moduleid>
diff --git a/core/class/LinkController.php b/core/class/LinkController.php
index b7295264fb2..828c85a8482 100755
--- a/core/class/LinkController.php
+++ b/core/class/LinkController.php
@@ -118,19 +118,7 @@ class LinkController
                     $delChild = $key;
                 }
                 $return .= '<td align="right">';
-                if ($core->is_module_loaded('thumbnails') === true) {
-                    require_once 'modules'.DIRECTORY_SEPARATOR.'thumbnails'.DIRECTORY_SEPARATOR
-                                .'class'.DIRECTORY_SEPARATOR
-                                .'class_modules_tools.php';
-
-                    $tnl = new thumbnails();
-                    $path = $tnl->getPathTnl($key, 'letterbox_coll');
-                    if (is_file($path)) {
-                        $return .= '<div align="center" class="iconDoc"><a href="index.php?display=true&dir=indexing_searching&page=view_resource_controler&id='.$key.'" target="_blank" title="'._VIEW_DOC.'"><i class="fa fa-download fa-2x" title="'._VIEW_DOC.'"></i><span><img src="index.php?page=doc_thumb&module=thumbnails&res_id='.$key.'&coll_id=letterbox_coll&display=true"></span></a></div>';
-                    } else {
-                        $return .= '<div align="center" class="iconDoc"><a href="index.php?display=true&dir=indexing_searching&page=view_resource_controler&id='.$key.'" target="_blank" title="'._VIEW_DOC.'"><i class="fa fa-download fa-2x" title="'._VIEW_DOC.'"></i><span id="no_doc"></span></a></div>';
-                    }
-                }
+                $return .= '<div align="center" class="iconDoc"><a href="index.php?display=true&dir=indexing_searching&page=view_resource_controler&id='.$key.'" target="_blank" title="'._VIEW_DOC.'"><i class="fa fa-download fa-2x" title="'._VIEW_DOC.'"></i><span><img src="../../rest/res/'.$key.'/thumbnail"></span></a></div>';
                 $return .= '</td>';
                 $return .= '<td align="right">';
                 $return .= '<span onclick="';
diff --git a/install/class/Class_Install.php b/install/class/Class_Install.php
index aff28df4ac6..0575a35bc8e 100755
--- a/install/class/Class_Install.php
+++ b/install/class/Class_Install.php
@@ -125,9 +125,9 @@ class Install extends functions
         if (!$this->isPhpRequirements('gd')) {
             return false;
         }
-        /*if (!$this->isPhpRequirements('imagick')) {
+        if (!$this->isPhpRequirements('imagick')) {
             return false;
-        }*/
+        }
         /*if (!$this->isPhpRequirements('ghostscript')) {
             return false;
         }*/
@@ -323,16 +323,6 @@ class Install extends functions
                 $cheminCustomMaarchCourrierModules = realpath('.')."/custom/cs_$databasename/modules";
                 mkdir($cheminCustomMaarchCourrierModules, 0755);
 
-                /** Création répertoire thumbnails dans le custom **/
-                $cheminCustomMaarchCourrierModulesThumbnails = realpath('.')."/custom/cs_$databasename/modules/thumbnails";
-                mkdir($cheminCustomMaarchCourrierModulesThumbnails, 0755);
-
-                $cheminCustomMaarchCourrierModulesThumbnailsXml = realpath('.')."/custom/cs_$databasename/modules/thumbnails/xml";
-                mkdir($cheminCustomMaarchCourrierModulesThumbnailsXml, 0755);
-
-                $cheminCustomMaarchCourrierModulesThumbnailsScripts = realpath('.')."/custom/cs_$databasename/modules/thumbnails/scripts";
-                mkdir($cheminCustomMaarchCourrierModulesThumbnailsScripts, 0755);
-
                 /** Création répertoire notification dans le custom **/
                 $cheminCustomMaarchCourrierModulesNotifications = realpath('.')."/custom/cs_$databasename/modules/notifications";
                 mkdir($cheminCustomMaarchCourrierModulesNotifications, 0755);
@@ -381,22 +371,8 @@ class Install extends functions
             }
 
             if (is_dir(realpath('.')."/custom/cs_$databasename/modules/")) {
-                /* Création répertoire thumbnails dans le custom **/
-
-                if (!is_dir(realpath('.')."/custom/cs_$databasename/modules/thumbnails/")) {
-                    $cheminCustomMaarchCourrierModulesThumbnails = realpath('.')."/custom/cs_$databasename/modules/thumbnails";
-                    mkdir($cheminCustomMaarchCourrierModulesThumbnails, 0755);
-                }
-                if (!is_dir(realpath('.')."/custom/cs_$databasename/modules/thumbnails/xml/")) {
-                    $cheminCustomMaarchCourrierModulesThumbnailsXml = realpath('.')."/custom/cs_$databasename/modules/thumbnails/xml";
-                    mkdir($cheminCustomMaarchCourrierModulesThumbnailsXml, 0755);
-                }
-                if (!is_dir(realpath('.')."/custom/cs_$databasename/modules/thumbnails/scripts/")) {
-                    $cheminCustomMaarchCourrierModulesThumbnailsScripts = realpath('.')."/custom/cs_$databasename/modules/thumbnails/scripts";
-                    mkdir($cheminCustomMaarchCourrierModulesThumbnailsScripts, 0755);
-                }
 
-                /* Création répertoire thumbnails dans le custom **/
+                /* Création répertoire notif dans le custom **/
                 if (!is_dir(realpath('.')."/custom/cs_$databasename/modules/notifications/")) {
                     $cheminCustomMaarchCourrierModulesNotifications = realpath('.')."/custom/cs_$databasename/modules/notifications/";
                     mkdir($cheminCustomMaarchCourrierModulesNotifications, 0755);
@@ -414,7 +390,7 @@ class Install extends functions
                     mkdir($cheminCustomMaarchCourrierModulesNotificationsScripts, 0755);
                 }
 
-                /* Création répertoire thumbnails dans le custom **/
+                /* Création répertoire sendmail dans le custom **/
                 if (!is_dir(realpath('.')."/custom/cs_$databasename/modules/sendmail/")) {
                     $cheminCustomMaarchCourrierModulesSendmail = realpath('.')."/custom/cs_$databasename/modules/sendmail";
                     mkdir($cheminCustomMaarchCourrierModulesSendmail, 0755);
@@ -568,16 +544,6 @@ class Install extends functions
             $cheminCustomMaarchCourrierModules = realpath('.')."/custom/cs_$databasename/modules";
             mkdir($cheminCustomMaarchCourrierModules, 0755);
 
-            /** Création répertoire thumbnails dans le custom **/
-            $cheminCustomMaarchCourrierModulesThumbnails = realpath('.')."/custom/cs_$databasename/modules/thumbnails";
-            mkdir($cheminCustomMaarchCourrierModulesThumbnails, 0755);
-
-            $cheminCustomMaarchCourrierModulesThumbnailsXml = realpath('.')."/custom/cs_$databasename/modules/thumbnails/xml";
-            mkdir($cheminCustomMaarchCourrierModulesThumbnailsXml, 0755);
-
-            $cheminCustomMaarchCourrierModulesThumbnailsScripts = realpath('.')."/custom/cs_$databasename/modules/thumbnails/scripts";
-            mkdir($cheminCustomMaarchCourrierModulesThumbnailsScripts, 0755);
-
             /** Création répertoire notification dans le custom **/
             $cheminCustomMaarchCourrierModulesNotifications = realpath('.')."/custom/cs_$databasename/modules/notifications";
             mkdir($cheminCustomMaarchCourrierModulesNotifications, 0755);
@@ -782,18 +748,6 @@ class Install extends functions
         $connect .= 'password='.$_SESSION['config']['databasepassword'].' ';
         $connect .= 'dbname=postgres';
 
-        if (!$this->setConfigXmlThumbnails()) {
-            return false;
-            exit;
-        }
-        if (!$this->setConfig_batch_XmlThumbnails()) {
-            return false;
-            exit;
-        }
-        if (!$this->setConfigScriptLaunchThumbnails()) {
-            return false;
-            exit;
-        }
         if (!$this->setConfig_sendmail()) {
             return false;
             exit;
@@ -911,18 +865,6 @@ class Install extends functions
             exit;
         }
 
-        if (!$this->setConfigXmlThumbnails()) {
-            return false;
-            exit;
-        }
-        if (!$this->setConfig_batch_XmlThumbnails()) {
-            return false;
-            exit;
-        }
-        if (!$this->setConfigScriptLaunchThumbnails()) {
-            return false;
-            exit;
-        }
         if (!$this->setConfig_sendmail()) {
             return false;
             exit;
@@ -1033,10 +975,6 @@ class Install extends functions
 ####################################################################################
 
 
-######################THUMBNAILS####################################################
-*/5 5-21 * * 1-5       '.realpath('.').'/custom/cs_'.$_SESSION['config']['databasename'].'/modules/thumbnails/scripts/launch_batch_thumbnails.sh
-15 12 * * 0        rm -Rf '.realpath('.').'/modules/thumbnails/log/*.log
-
 ######################notification#################################################
 
 15 10 * * *     '.realpath('.').'/custom/cs_'.$_SESSION['config']['databasename'].'/modules/notifications/batch/scripts/nct-ncc-and-anc.sh
@@ -1148,95 +1086,6 @@ class Install extends functions
     //     return true;
     // }
 
-    private function setConfigXmlThumbnails()
-    {
-        //var_dump("setConfigXmlThumbnails");
-        $xmlconfig = simplexml_load_file('modules/thumbnails/xml/config.xml.default');
-        //$xmlconfig = 'apps/maarch_entreprise/xml/config.xml.default';
-        $CONFIG = $xmlconfig->CONFIG;
-
-        $CONFIG->docserver_id = 'TNL';
-        $chemin_no_file = realpath('.').'/modules/thumbnails/no_thumb.png';
-        $CONFIG->no_file = $chemin_no_file;
-        $res = $xmlconfig->asXML();
-        $fp = @fopen(realpath('.').'/custom/cs_'.$_SESSION['config']['databasename'].'/modules/thumbnails/xml/config.xml', 'w+');
-        if (!$fp) {
-            return false;
-            exit;
-        }
-        $write = fwrite($fp, $res);
-        if (!$write) {
-            return false;
-            exit;
-        }
-
-        return true;
-    }
-
-    private function setConfig_batch_XmlThumbnails()
-    {
-        $xmlconfig = simplexml_load_file('modules/thumbnails/xml/config_batch_letterbox.xml.default');
-
-        $CONFIG = $xmlconfig->CONFIG;
-
-        $chemin_core = realpath('.').'/core/';
-
-        $CONFIG->MaarchDirectory = realpath('.').'/';
-
-        $CONFIG_BASE = $xmlconfig->CONFIG_BASE;
-        $CONFIG_BASE->databaseserver = $_SESSION['config']['databaseserver'];
-        $CONFIG_BASE->databaseserverport = $_SESSION['config']['databaseserverport'];
-        $CONFIG_BASE->databasename = $_SESSION['config']['databasename'];
-        $CONFIG_BASE->databaseuser = $_SESSION['config']['databaseuser'];
-        $CONFIG_BASE->databasepassword = $_SESSION['config']['databasepassword'];
-
-        $LOG4PHP = $xmlconfig->LOG4PHP;
-        $LOG4PHP->Log4PhpConfigPath = realpath('.').'/custom/cs_'.$_SESSION['config']['databasename'].'/apps/maarch_entreprise/xml/log4php.xml';
-
-        $res = $xmlconfig->asXML();
-        $fp = @fopen(realpath('.').'/custom/cs_'.$_SESSION['config']['databasename'].'/modules/thumbnails/xml/config_batch_letterbox.xml', 'w+');
-        if (!$fp) {
-            return false;
-            exit;
-        }
-
-        $write = fwrite($fp, $res);
-        if (!$write) {
-            return false;
-            exit;
-        }
-        $xmlconfig = simplexml_load_file('modules/thumbnails/xml/config_batch_attachments.xml.default');
-
-        $CONFIG = $xmlconfig->CONFIG;
-
-        $chemin_core = realpath('.').'/core/';
-
-        $CONFIG->MaarchDirectory = realpath('.').'/';
-
-        $CONFIG_BASE = $xmlconfig->CONFIG_BASE;
-        $CONFIG_BASE->databaseserver = $_SESSION['config']['databaseserver'];
-        $CONFIG_BASE->databaseserverport = $_SESSION['config']['databaseserverport'];
-        $CONFIG_BASE->databasename = $_SESSION['config']['databasename'];
-        $CONFIG_BASE->databaseuser = $_SESSION['config']['databaseuser'];
-        $CONFIG_BASE->databasepassword = $_SESSION['config']['databasepassword'];
-
-        $LOG4PHP = $xmlconfig->LOG4PHP;
-        $LOG4PHP->Log4PhpConfigPath = realpath('.').'/custom/cs_'.$_SESSION['config']['databasename'].'/apps/maarch_entreprise/xml/log4php.xml';
-
-        $res = $xmlconfig->asXML();
-        $fp = @fopen(realpath('.').'/custom/cs_'.$_SESSION['config']['databasename'].'/modules/thumbnails/xml/config_batch_attachments.xml', 'w+');
-        if (!$fp) {
-            return false;
-            exit;
-        }
-        $write = fwrite($fp, $res);
-        if (!$write) {
-            return false;
-            exit;
-        }
-
-        return true;
-    }
 
     private function setConfig_batch_XmlNotifications()
     {
@@ -1666,52 +1515,6 @@ class Install extends functions
         return true;
     }
 
-    private function setConfigScriptLaunchThumbnails()
-    {
-        if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
-            $res = 'cd '.realpath('.')."\modules\\thumbnails\\";
-            $res .= "\n";
-            $res .= '"'.realpath('.').'\..\..\php\php.exe" '.realpath('.').'\modules\\thumbnails\create_tnl.php  '.realpath('.')."\custom\cs_".$_SESSION['config']['databasename'].'\modules\\thumbnails\xml\config_batch_letterbox.xml';
-            $res .= "\n";
-            $res .= '"'.realpath('.').'\..\..\php\php.exe" '.realpath('.').'\modules\\thumbnails\create_tnl.php  '.realpath('.')."\custom\cs_".$_SESSION['config']['databasename'].'\modules\\thumbnails\xml\config_batch_attachments.xml';
-            $res .= "\n";
-
-            $fp = @fopen(realpath('.')."\custom\cs_".$_SESSION['config']['databasename']."\modules\\thumbnails\scripts\launch_batch_thumbnails.bat", 'w+');
-            if (!$fp) {
-                return false;
-                exit;
-            }
-            $write = fwrite($fp, $res);
-            if (!$write) {
-                return false;
-                exit;
-            }
-
-            return true;
-        } elseif (strtoupper(substr(PHP_OS, 0, 3)) === 'LIN') {
-            $res = '#!/bin/bash';
-            $res .= "\n\n";
-            $res .= 'cd '.realpath('.').'/modules/thumbnails/';
-            $res .= "\n\n";
-            $res .= 'php '.realpath('.').'/modules/thumbnails/create_tnl.php '.realpath('.').'/custom/cs_'.$_SESSION['config']['databasename'].'/modules/thumbnails/xml/config_batch_letterbox.xml';
-            $res .= "\n\n";
-            $res .= 'php '.realpath('.').'/modules/thumbnails/create_tnl.php '.realpath('.').'/custom/cs_'.$_SESSION['config']['databasename'].'/modules/thumbnails/xml/config_batch_attachments.xml';
-
-            $fp = @fopen(realpath('.').'/custom/cs_'.$_SESSION['config']['databasename'].'/modules/thumbnails/scripts/launch_batch_thumbnails.sh', 'w+');
-            if (!$fp) {
-                return false;
-                exit;
-            }
-            $write = fwrite($fp, $res);
-            if (!$write) {
-                return false;
-                exit;
-            }
-
-            return true;
-        }
-    }
-
     private function setScriptNotificationNctNccAndAncSh()
     {
         if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
diff --git a/modules/attachments/attachments_content.php b/modules/attachments/attachments_content.php
index 060cc51c58d..3594038c90a 100755
--- a/modules/attachments/attachments_content.php
+++ b/modules/attachments/attachments_content.php
@@ -318,28 +318,6 @@ if (isset($_POST['add']) && $_POST['add']) {
                                     $_SESSION['data'],
                                     $_SESSION['config']['databasetype']
                                 );
-                                if ($attachment_types == 'outgoing_mail') {
-                                    $extDocument = \Resource\models\ResModel::getExtById(['select' => ['category_id'], 'resId' => $_SESSION['doc_id']]);
-
-                                    if ($extDocument['category_id'] == 'outgoing') {
-                                        $attachment = \Attachment\models\AttachmentModel::getOnView([
-                                            'select'    => ['res_id'],
-                                            'where'     => ['res_id_master = ?', 'attachment_type = ?', 'status not in (?)'],
-                                            'data'      => [$_SESSION['doc_id'], 'outgoing_mail', ['DEL', 'OBS']],
-                                            'limit'     => 1
-                                        ]);
-                                        if (!empty($attachment[0]) && $attachment[0]['res_id'] == $id) {
-                                            \Resource\models\AdrModel::deleteDocumentAdr(['where' => ['res_id = ?', 'type = ?'], 'data' => [$_SESSION['doc_id'], 'TNL']]);
-                                            \Resource\controllers\ConvertThumbnailController::convert([
-                                                'collId'            => 'letterbox_coll',
-                                                'resId'             => $_SESSION['doc_id'],
-                                                'outgoingId'        => $id,
-                                                'isOutgoingVersion' => false
-                                            ]);
-                                        }
-                                    }
-
-                                }
 
                                 //copie de la version PDF de la pièce si mode de conversion sur le client
                                 if ($_SESSION['upfile'][$numAttach]['fileNamePdfOnTmp'] != '' && empty($templateOffice)) {
@@ -814,27 +792,6 @@ if (isset($_POST['add']) && $_POST['add']) {
             } else {
                 $stmt = $db->query("UPDATE res_version_attachments SET status = 'OBS' WHERE res_id = ?", array($previous_attachment->res_id_version));
             }
-            if ($previous_attachment->attachment_type == 'outgoing_mail') {
-                $extDocument = \Resource\models\ResModel::getExtById(['select' => ['category_id'], 'resId' => $_SESSION['doc_id']]);
-
-                if ($extDocument['category_id'] == 'outgoing') {
-                    $attachment = \Attachment\models\AttachmentModel::getOnView([
-                        'select'    => ['res_id', 'res_id_version'],
-                        'where'     => ['res_id_master = ?', 'attachment_type = ?', 'status not in (?)'],
-                        'data'      => [$_SESSION['doc_id'], 'outgoing_mail', ['DEL', 'OBS']],
-                        'limit'     => 1
-                    ]);
-                    if (!empty($attachment[0]) && ($attachment[0]['res_id'] == $previous_attachment->res_id || $attachment[0]['res_id_version'] == $previous_attachment->res_id_version)) {
-                        \Resource\models\AdrModel::deleteDocumentAdr(['where' => ['res_id = ?', 'type = ?'], 'data' => [$_SESSION['doc_id'], 'TNL']]);
-                        \Resource\controllers\ConvertThumbnailController::convert([
-                            'collId'            => 'letterbox_coll',
-                            'resId'             => $_SESSION['doc_id'],
-                            'outgoingId'        => $id,
-                            'isOutgoingVersion' => true
-                        ]);
-                    }
-                }
-            }
         }
     } else {
         $is_new_version = false;
@@ -942,27 +899,6 @@ if (isset($_POST['add']) && $_POST['add']) {
         } else {
             $stmt = $db->query('UPDATE res_version_attachments SET '.$set_update.' WHERE res_id = :res_id', $arrayPDO);
         }
-        if ($_SESSION['upfile'][0]['upAttachment'] != false) {
-            $attachment = \Attachment\models\AttachmentModel::getOnView([
-                'select'    => ['res_id', 'res_id_version', 'attachment_type'],
-                'where'     => ['res_id_master = ?', 'attachment_type = ?', 'status not in (?)'],
-                'data'      => [$_SESSION['doc_id'], 'outgoing_mail', ['DEL', 'OBS']],
-                'limit'     => 1
-            ]);
-            if (!empty($attachment[0]) && in_array($_REQUEST['res_id'], [$attachment[0]['res_id'], $attachment[0]['res_id_version']])) {
-                $extDocument = \Resource\models\ResModel::getExtById(['select' => ['category_id'], 'resId' => $_SESSION['doc_id']]);
-
-                if ($extDocument['category_id'] == 'outgoing') {
-                    \Resource\models\AdrModel::deleteDocumentAdr(['where' => ['res_id = ?', 'type = ?'], 'data' => [$_SESSION['doc_id'], 'TNL']]);
-                    \Resource\controllers\ConvertThumbnailController::convert([
-                        'collId'            => 'letterbox_coll',
-                        'resId'             => $_SESSION['doc_id'],
-                        'outgoingId'        => $id,
-                        'isOutgoingVersion' => ($_REQUEST['relation'] != 1)
-                    ]);
-                }
-            }
-        }
     }
     //copie de la version PDF de la pièce si mode de conversion sur le client
     if ($_SESSION['modules_loaded']['attachments']['convertPdf'] == true && $_SESSION['upfile'][0]['fileNamePdfOnTmp'] != '' && empty($error) && $_SESSION['upfile'][0]['upAttachment'] != false) {
diff --git a/modules/thumbnails/LICENSE.txt b/modules/thumbnails/LICENSE.txt
deleted file mode 100755
index 10926e87f11..00000000000
--- a/modules/thumbnails/LICENSE.txt
+++ /dev/null
@@ -1,675 +0,0 @@
-                    GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program 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.
-
-    This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/modules/thumbnails/LoggerLog4php.php b/modules/thumbnails/LoggerLog4php.php
deleted file mode 100755
index 900b13489c9..00000000000
--- a/modules/thumbnails/LoggerLog4php.php
+++ /dev/null
@@ -1,314 +0,0 @@
-<?php
-
-/** Logger class
- *
- * @author Laurent Giovannoni <dev@maarch.org>
- **/
-
-class Logger4Php
-{
-
-    /**
-     * Array of errors levels
-     *
-     * @protected
-     **/
-    protected $error_levels = array('DEBUG' => 0, 'INFO' => 1, 'NOTICE' => 2, 'WARNING' => 3, 'ERROR' => 4);
-
-    /**
-     * Maps each handler with its log threshold.
-     *
-     * @protected
-     **/
-    protected $mapping;
-
-    /**
-     * Minimum log level
-     *
-     * @protected
-     **/
-    protected $threshold_level;
-
-    /**
-     * Path to log4Php library
-     *
-     * @protected
-     **/
-    protected $log4PhpLibrary;
-
-	/**
-     * Name of the logger
-     *
-     * @protected
-     **/
-    protected $log4PhpLogger;
-
-    /**
-     * Name of the business code
-     *
-     * @protected
-     **/
-    protected $log4PhpBusinessCode;
-
-    /**
-     * Path of the param of log4php
-     *
-     * @protected
-     **/
-    protected $log4PhpConfigPath;
-
-    /**
-     * Name of the batch
-     *
-     * @protected
-     **/
-    protected $log4PhpBatchName;
-
-    /** Class constructor
-     *
-     * Inits the threshold level
-     *
-     * @param $threshold_level (string) Threshold level (set to 'INFO' by default)
-     **/
-    function __construct($threshold_level = 'WARNING')
-    {
-        $this->threshold_level = $threshold_level;
-        $this->mapping = array_fill(0, count($this->error_levels), array());
-    }
-
-    /** Writes error message in current handlers
-     *
-     * writes only if the error level is greater or equal the threshold level
-     *
-     * @param $msg (string) Error message
-     * @param $error_level (string) Error level (set to 'INFO' by default)
-     * @param $error_code (integer) Error code (set to 0 by default)
-     **/
-    public function write($msg, $error_level = 'INFO', $error_code = 0, $other_params = array())
-    {
-		if (!array_key_exists($error_level, $this->error_levels)) {
-			$error_level = 'INFO';
-		}
-		$foundLogger = false;
-		if ($this->error_levels[$error_level] >= $this->error_levels[$this->threshold_level]) {
-			for ($i=$this->error_levels[$error_level];$i>=0;$i--) {
-				foreach ($this->mapping[$i] as $handler) {
-					$handler->write($msg, $error_level, $error_code, $other_params);
-					if (
-						get_class($handler) == 'FileHandler'
-						&& (isset($this->log4PhpLibrary)
-						&& !empty($this->log4PhpLibrary))
-					) {
-						if ($error_code == 0) {
-							$result = 'OK';
-						} else {
-							$result = 'KO';
-							$msg = '%error_code:' . $error_code . '% ' . $msg;
-						}
-						require_once($this->log4PhpLibrary);
-						$remote_ip = '127.0.0.1';
-						Logger::configure($this->log4PhpConfigPath);
-						$logger = Logger::getLogger($this->log4PhpLogger);
-						$searchPatterns = array('%ACCESS_METHOD%',
-							'%RESULT%',
-							'%BUSINESS_CODE%',
-							'%HOW%',
-							'%WHAT%',
-							'%REMOTE_IP%',
-							'%BATCH_NAME%'
-						);
-						$replacePatterns = array('Script',
-							$result,
-							$this->log4PhpBusinessCode,
-							'UP',
-							$msg,
-							$remote_ip,
-							$this->log4PhpBatchName
-						);
-						$logLine = str_replace($searchPatterns,
-							$replacePatterns,
-							'[%ACCESS_METHOD%][%RESULT%]'
-							. '[%BUSINESS_CODE%][%HOW%][%WHAT%][%BATCH_NAME%]'
-						);
-						$this->writeLog4php($logger, $logLine, $error_level);
-					}
-				}
-			}
-		}
-    }
-
-	/**
-	 *
-	 * write a log entry with a specific log level
-	 * @param object $logger Log4php logger
-	 * @param string $logLine Line we want to trace
-	 * @param enum $level Log level
-	 */
-	function writeLog4php($logger, $logLine, $level) {
-		switch ($level) {
-			case 'DEBUG':
-				$logger->debug($logLine);
-				break;
-			case 'INFO':
-				$logger->info($logLine);
-				break;
-			case 'WARNING':
-				$logger->warn($logLine);
-				break;
-			case 'ERROR':
-				$logger->error($logLine);
-				break;
-			case 'FATAL':
-				$logger->fatal($logLine);
-				break;
-		}
-	}
-
-    /** Adds a new handler in the current handlers array
-     *
-     * @param $handler (object) Handler object
-     **/
-    public function add_handler(&$handler, $error_level = NULL)
-    {
-        if(!isset($handler))
-            return false;
-
-        if(!isset($error_level) || !array_key_exists($error_level, $this->error_levels))
-        {
-            $error_level = $this->threshold_level;
-        }
-
-        $this->mapping[$this->error_levels[$error_level]][] = $handler;
-        return true;
-    }
-
-    /** Adds a new handler in the current handlers array
-     *
-     * @param $handler (object) Handler object
-     **/
-    public function change_handler_log_level(&$handler, $log_level )
-    {
-        if (!isset($handler) || !isset($log_level))
-            return false;
-
-        if (!array_key_exists($log_level, $this->error_levels)) {
-           return false;
-        }
-
-        for ($i=0; $i<count($this->mapping);$i++) {
-            for($j=0;$j<count($this->mapping[$i]);$j++) {
-                if($handler == $this->mapping[$i][$j]) {
-                    unset($this->mapping[$i][$j]);
-                }
-            }
-        }
-        $this->mapping = array_values($this->mapping);
-        $this->mapping[$this->error_levels[$log_level]][] = $handler;
-        return true;
-    }
-
-	/** Sets treshold level
-     *
-     * @param $treshold (string) treshold level
-     **/
-    public function set_threshold_level($treshold)
-    {
-        if (isset($treshold) && array_key_exists($treshold, $this->error_levels)) {
-            $this->threshold_level = $treshold;
-            return true;
-        }
-        $this->threshold_level = 'WARNING';
-        return false;
-    }
-
-	/** Sets log4Php library path
-     *
-     * @param $log4PhpLibrary (string) path
-     **/
-    public function set_log4PhpLibrary($log4PhpLibrary)
-    {
-        if (isset($log4PhpLibrary) && !empty($log4PhpLibrary)) {
-            if (file_exists($log4PhpLibrary)) {
-				$this->log4PhpLibrary = $log4PhpLibrary;
-				return true;
-			} else {
-				return false;
-			}
-        }
-        return false;
-    }
-
-    /** Sets log4php logger name
-     *
-     * @param $log4PhpLogger (string) logger name
-     **/
-    public function set_log4PhpLogger($log4PhpLogger)
-    {
-        if (isset($log4PhpLogger) && !empty($log4PhpLogger)) {
-            $this->log4PhpLogger = $log4PhpLogger;
-            return true;
-        }
-        $this->log4PhpLogger = 'loggerTechnique';
-        return false;
-    }
-
-	/** Sets log4php path to log4php xml config
-     *
-     * @param $log4PhpPath (string) path to log4php xml config
-     **/
-    public function set_log4PhpConfigPath($log4PhpConfigPath)
-    {
-        if (isset($log4PhpConfigPath) && !empty($log4PhpConfigPath)) {
-            if (file_exists($log4PhpConfigPath)) {
-				$this->log4PhpConfigPath = $log4PhpConfigPath;
-				return true;
-			} else {
-				return false;
-			}
-        }
-        return false;
-    }
-
-	/** Sets log4php business code
-     *
-     * @param $log4PhpBusinessCode (string) business code
-     **/
-    public function set_log4PhpBusinessCode($log4PhpBusinessCode)
-    {
-        if (isset($log4PhpBusinessCode) && !empty($log4PhpBusinessCode)) {
-			$this->log4PhpBusinessCode = $log4PhpBusinessCode;
-			return true;
-        }
-        $this->log4PhpBusinessCode = 'Maarch';
-        return false;
-    }
-
-    /** Sets log4php batch name
-     *
-     * @param $log4PhpBatchName (string) BatchName
-     **/
-    public function set_log4PhpBatchName($log4PhpBatchName)
-    {
-        if (isset($log4PhpBatchName) && !empty($log4PhpBatchName)) {
-			$this->log4PhpBatchName = $log4PhpBatchName;
-			return true;
-        }
-        $this->log4PhpBatchName = 'MaarchBatch';
-        return false;
-    }
-
-    /** Class destructor
-     *
-     * Calls handlers destructors
-     **/
-    function __destruct()
-    {
-        for($i=0; $i<count($this->mapping);$i++)
-        {
-            foreach($this->mapping[$i] as $handler)
-            {
-                unset($handler);
-            }
-        }
-    }
-}
diff --git a/modules/thumbnails/README.txt b/modules/thumbnails/README.txt
deleted file mode 100755
index 98a7a24520b..00000000000
--- a/modules/thumbnails/README.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-Pour Linux :
-- Paramétrer un robot qui lance le script launch_batch_thumbnails.sh placé dans modules/thumbnails/scripts
-
-- Le fichier de paramètres est config_batch_letterbox.xml (dans le dossier xml)
-
-- Ce script lance le fichier php create_tnl qui permet de créer les miniatures des documents ayant les champs "tnl_path" et "tnl_filename" vides. Ces champs sont à rajouter dans la table res_letterbox (et autres tables liées comme les versions, documents liés, etc.. ?) 
-
-- Les miniatures sont enregistrées dans un docserveur différent  (l'id est à définir dans le fichier de paramètres) du docserveur principal
-
-- La commande de conversion est la suivante 
-
-convert -thumbnail x300 -background white -alpha remove <path_input>[0] <path_output>
-
-imagemagick et ghostscript sont nécessaires
\ No newline at end of file
diff --git a/modules/thumbnails/ajaxShowThumb.php b/modules/thumbnails/ajaxShowThumb.php
deleted file mode 100755
index 3e9761f1646..00000000000
--- a/modules/thumbnails/ajaxShowThumb.php
+++ /dev/null
@@ -1,61 +0,0 @@
-<?php
-/*
-*   Copyright 2014-2017 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 Displays thumbnails if exists
-*
-*   @file
-*   @author <dev@maarch.org>
-*   @date $date$
-*   @version $Revision$
-*/
-
-require_once 'modules/thumbnails/class/class_modules_tools.php';
-
-$error = false;
-
-if (isset($_REQUEST['resId'])) {
-    $resId = $_REQUEST['resId'];
-} else {
-    $error = 'RES_ID' . _EMPTY;
-}
-
-if (isset($_REQUEST['collId'])) {
-    $collId = $_REQUEST['collId'];
-} else {
-    $error = 'COLL_ID' . _EMPTY;
-}
-
-if (!$error) {
-    $tnl = new thumbnails();
-    $path = $tnl->getPathTnl($resId, 'letterbox_coll');
-    
-    if (is_file($path)) {
-        $return .= '<img src="index.php?page=doc_thumb&module=thumbnails&res_id=' . $resId . '&coll_id=letterbox_coll&display=true">';
-    $status = 0;
-    } else {
-        $return .= '<span id="no_doc"><i class="fa fa-ban" style="font-size: 460px;color: grey;opacity: 0.2;margin-top: 30px;"></i></span>';
-        $status = 1;
-    }
-} else {
-    $return .= '<span id="no_doc"><i class="fa fa-ban" style="font-size: 460px;color: grey;opacity: 0.2;margin-top: 30px;"></i></span>';
-    $status = 1;
-}
-
-echo "{status : " . $status . ", toShow : '" . addslashes($return) . "'}";
-exit ();
diff --git a/modules/thumbnails/batch_tools.php b/modules/thumbnails/batch_tools.php
deleted file mode 100755
index b19885273e9..00000000000
--- a/modules/thumbnails/batch_tools.php
+++ /dev/null
@@ -1,155 +0,0 @@
-<?php
-
-/*
- *   Copyright 2008-2015 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 API to manage batchs 
- *
- * @file
- * @author Laurent Giovannoni
- * @date $date$
- * @version $Revision$
- * @ingroup core
- */
-
-/**
- * Execute a sql query
- * 
- * @param object $dbConn connection object to the database
- * @param string $queryTxt path of the file to include
- * @param boolean $transaction for rollback if error
- * @return true if ok, exit if ko and rollback if necessary
- */
-function Bt_doQuery($dbConn, $queryTxt, $param=array(), $transaction=false)
-{
-    if (count($param) > 0) {
-        $stmt = $dbConn->query($queryTxt, $param);
-    } else {
-        $stmt = $dbConn->query($queryTxt);
-    }
-
-    if (!$stmt) {
-        if ($transaction) {
-            $GLOBALS['logger']->write('ROLLBACK', 'INFO');
-            $dbConn->query('ROLLBACK');
-        }
-        Bt_exitBatch(
-            104, 'SQL Query error:' . $queryTxt
-        );
-    }
-    $GLOBALS['logger']->write('SQL query:' . $queryTxt, 'DEBUG');
-    return $stmt;
-}
-
-/**
- * Exit the batch with a return code, message in the log and 
- * in the database if necessary
- * 
- * @param int $returnCode code to exit (if > O error)
- * @param string $message message to the log and the DB
- * @return nothing exit the program
- */
-function Bt_exitBatch($returnCode, $message='')
-{
-    if (file_exists($GLOBALS['lckFile'])) {
-        unlink($GLOBALS['lckFile']);
-    }
-    if ($returnCode > 0) {
-        $GLOBALS['totalProcessedResources']--;
-        if ($GLOBALS['totalProcessedResources'] == -1) {
-            $GLOBALS['totalProcessedResources'] = 0;
-        }
-        if($returnCode < 100) {
-            if (file_exists($GLOBALS['errorLckFile'])) {
-                unlink($GLOBALS['errorLckFile']);
-            }
-            $semaphore = fopen($GLOBALS['errorLckFile'], "a");
-            fwrite($semaphore, '1');
-            fclose($semaphore);
-        }
-        $GLOBALS['logger']->write($message, 'ERROR', $returnCode);
-        Bt_logInDataBase($GLOBALS['totalProcessedResources'], 1, $message.' (return code: '. $returnCode.')');
-    } elseif ($message <> '') {
-        $GLOBALS['logger']->write($message, 'INFO', $returnCode);
-        Bt_logInDataBase($GLOBALS['totalProcessedResources'], 0, $message.' (return code: '. $returnCode.')');
-    }
-    Bt_updateWorkBatch();
-    exit($returnCode);
-}
-
-/**
-* Insert in the database the report of the batch
-* @param long $totalProcessed total of resources processed in the batch
-* @param long $totalErrors total of errors in the batch
-* @param string $info message in db
-*/
-function Bt_logInDataBase($totalProcessed=0, $totalErrors=0, $info='')
-{
-    $query = "INSERT INTO history_batch (module_name, batch_id, event_date, "
-           . "total_processed, total_errors, info) values(?, ?, CURRENT_TIMESTAMP, ?, ?, ?)";
-    $arrayPDO = array($GLOBALS['batchName'], $GLOBALS['wb'], $totalProcessed, $totalErrors, substr(str_replace('\\', '\\\\', str_replace("'", "`", $info)), 0, 999));
-    $GLOBALS['db']->query($query, $arrayPDO);
-}
-
-/**
- * Get the batch if of the batch
- * 
- * @return nothing
- */
-function Bt_getWorkBatch() 
-{
-    $req = "SELECT param_value_int FROM parameters WHERE id = ? ";
-    $stmt = $GLOBALS['db']->query($req, array($GLOBALS['batchName']."_id"));
-    
-    while ($reqResult = $stmt->fetchObject()) {
-        $GLOBALS['wb'] = $reqResult->param_value_int + 1;
-    }
-    if ($GLOBALS['wb'] == '') {
-        $req = "INSERT INTO parameters(id, param_value_int) VALUES (?, 1)";
-        $GLOBALS['db']->query($req, array($GLOBALS['batchName']."_id"));
-        $GLOBALS['wb'] = 1;
-    }
-}
-
-/**
- * Update the database with the new batch id of the batch
- * 
- * @return nothing
- */
-function Bt_updateWorkBatch()
-{
-    $req = "UPDATE parameters SET param_value_int = ? WHERE id = ?";
-    $GLOBALS['db']->query($req, array($GLOBALS['wb'], $GLOBALS['batchName']."_id"));
-}
-
-/**
- * Include the file requested if exists
- * 
- * @param string $file path of the file to include
- * @return nothing
- */
-function Bt_myInclude($file) 
-{
-    if (file_exists($file)) {
-        include_once ($file);
-    } else {
-        throw new IncludeFileError($file);
-    }
-}
diff --git a/modules/thumbnails/class/class_modules_tools.php b/modules/thumbnails/class/class_modules_tools.php
deleted file mode 100755
index 49a77110a7c..00000000000
--- a/modules/thumbnails/class/class_modules_tools.php
+++ /dev/null
@@ -1,250 +0,0 @@
-<?php
-
-class thumbnails
-{
-	/*function __construct()
-	{
-		parent::__construct();
-	}*/
-
-	public function build_modules_tables()
-	{
-		if (file_exists(
-            $_SESSION['config']['corepath'] . 'custom' . DIRECTORY_SEPARATOR
-            . $_SESSION['custom_override_id'] . DIRECTORY_SEPARATOR . "modules"
-            . DIRECTORY_SEPARATOR . "thumbnails" . DIRECTORY_SEPARATOR . "xml"
-            . DIRECTORY_SEPARATOR . "config.xml"
-        )
-        ) {
-            $configPath = $_SESSION['config']['corepath'] . 'custom'
-                        . DIRECTORY_SEPARATOR . $_SESSION['custom_override_id']
-                        . DIRECTORY_SEPARATOR . "modules" . DIRECTORY_SEPARATOR
-                        . "thumbnails" . DIRECTORY_SEPARATOR . "xml"
-                        . DIRECTORY_SEPARATOR . "config.xml";
-        } else {
-            $configPath = "modules" . DIRECTORY_SEPARATOR . "thumbnails"
-                        . DIRECTORY_SEPARATOR . "xml" . DIRECTORY_SEPARATOR
-                        . "config.xml";
-        }
-		
-		$xmlconfig = simplexml_load_file($configPath);
-		$conf = $xmlconfig->CONFIG;
-		
-	}
-
-	private function r_mkdir_tnl($path, $mode = 0777, $recursive = true) {
-	if(empty($path))
-		return false;
-	 
-	if($recursive) {
-		$toDo = substr($path, 0, strrpos($path, DIRECTORY_SEPARATOR));
-		if($toDo !== '.' && $toDo !== '..')
-			$this->r_mkdir_tnl($toDo, $mode);
-	}
-	 
-	if(!is_dir($path))
-		mkdir($path, $mode);
-	 
-		return true;
-}
-	public function generateTnl($res_id, $coll_id, $table_name = false){
-		$db = new Database();
-		$query = "select docserver_id from docservers where is_readonly = 'N' and "
-	   . " coll_id = ? and docserver_type_id = 'TNL'";
-		$stmt1 = $db->query($query, array($coll_id));
-
-		if($res = $stmt1->fetchObject()){
-			$docserverId = $res->docserver_id;
-		}else{
-			$docserverId='';
-		}
-
-		$docServers = "select docserver_id, path_template, device_label from docservers";
-		
-		$stmt1 = $db->query($docServers,array());
-		while ($queryResult = $stmt1->fetchObject()) {
-		  $pathToDocServer[$queryResult->docserver_id] = $queryResult->path_template;
-		}
-		$pathOutput = $pathToDocServer[(string)$docserverId];
-		if (!$table_name) $table_name = 'res_letterbox';
-		$queryMakeThumbnails = "select docserver_id, path, filename, format from ". $table_name . " where res_id = ? ";
-		$stmt1 = $db->query($queryMakeThumbnails, array($res_id));
-
-		while ($queryResult=$stmt1->fetchObject()) {
-			$fileFormat = $queryResult->format;
-			$path= $queryResult->path;
-			$filename= $queryResult->filename;
-
-			$pathToFile = $pathToDocServer[$queryResult->docserver_id] 
-			. str_replace("#", DIRECTORY_SEPARATOR, $path)
-        	. $queryResult->filename;
-			$outputPathFile  = $pathOutput . str_replace("#", DIRECTORY_SEPARATOR, $path) 
-			. str_replace(pathinfo($pathToFile, PATHINFO_EXTENSION), "png",$filename);
-		}
-
-		if (
-       		strtoupper($fileFormat) <> 'PDF' 
-       		&& strtoupper($fileFormat) <> 'HTML'
-       		&& strtoupper($fileFormat) <> 'MAARCH'
-       	) {
-			$stmt2 = $db->query("UPDATE ".$table_name." SET tnl_path = 'ERR', tnl_filename = 'ERR' WHERE res_id = ?", array($res_id));
-
-       	} else {
-			$racineOut = $pathOutput . str_replace("#", DIRECTORY_SEPARATOR, $path);
-			if (!is_dir($racineOut)){
-				$this->r_mkdir_tnl($racineOut,0777);
-			}
-			
-			$command = '';
-
-			if (strtoupper($fileFormat) == 'PDF') {
-				$command = "convert -density 100x100 -quality 65 -alpha remove " . escapeshellarg($pathToFile) . " ". escapeshellarg($outputPathFile);
-			} else {
-				$posPoint = strpos($pathToFile, '.');
-				$extension = substr($pathToFile, $posPoint);
-				$chemin = substr($pathToFile, 0, $posPoint);
-				if($extension == '.maarch'){
-					if (!copy($pathToFile, $chemin.'.html')) {
-					    echo "La copie $pathToFile du fichier a échoué...\n";
-					}else{
-						$cheminComplet = $chemin.".html";
-						$command = "wkhtmltoimage --width 400 --height 600 --quality 100 --zoom 0.2 " . escapeshellarg($cheminComplet) . " "
-						. escapeshellarg($outputPathFile);
-
-					}
-				}else{
-					$command = "wkhtmltoimage --width 400 --height 600 --quality 100 --zoom 0.2 " . escapeshellarg($pathToFile) . " "
-					. escapeshellarg($outputPathFile);
-				}
-			}
-			echo $command;
-			exec($command.' 2>&1', $output, $result);
-			if($result > 0)
-			{
-			   echo 'document not converted ! ('.$output[0].')';
-			}else{
-				if (is_file($outputPathFile)){
-					$stmt2 = $db->query("UPDATE ".$table_name." SET tnl_path = ?, tnl_filename = ? WHERE res_id = ?", array($path, str_replace(pathinfo($pathToFile, PATHINFO_EXTENSION), "png",$filename), $res_id));	
-				}
-				else if (is_file(pathinfo($outputPathFile,PATHINFO_DIRNAME) . DIRECTORY_SEPARATOR . pathinfo($outputPathFile,PATHINFO_FILENAME).'-0.png')){
-					$newFilename =  pathinfo($outputPathFile,PATHINFO_FILENAME).'-0.png';
-					$stmt2 = $db->query("UPDATE ".$table_name." SET tnl_path = ?, tnl_filename = ? WHERE res_id = ?", array($path, $newFilename, $res_id));
-				}
-				return $this->getPathTnl($res_id, $coll_id, $table_name);
-			}
-		}
-	}
-	
-	public function getPathTnl($res_id, $coll_id, $table_name = false)
-    {
-		if (empty($res_id)) {
-		    return '';
-        }
-
-        $tnlAdr = \Resource\models\AdrModel::getTypedDocumentAdrByResId([
-            'select'    => ['docserver_id', 'path', 'filename'],
-            'resId'     => $res_id,
-            'type'      => 'TNL'
-        ]);
-        if (empty($tnlAdr)) {
-            return '';
-        }
-        $docserver = \Docserver\models\DocserverModel::getByDocserverId([
-            'select'        => ['path_template'],
-            'docserverId'   => $tnlAdr['docserver_id']
-        ]);
-        $tnlPath = str_replace("#", DIRECTORY_SEPARATOR , $tnlAdr['path']);
-        $path = $docserver['path_template'] . DIRECTORY_SEPARATOR . $tnlPath . $tnlAdr['filename'];
-        $path = str_replace("//", "/", $path);
-
-		return $path;
-	}
-
-        public function testMultiPage($path_tnl){
-		if (strpos(pathinfo($path_tnl,PATHINFO_FILENAME),"-0") === false){
-			return array($path_tnl);
-		}
-		else{
-			$rep = pathinfo($path_tnl,PATHINFO_DIRNAME);
-			$basefile = explode("-",pathinfo($path_tnl,PATHINFO_FILENAME));
-			$basefile = $basefile[0];
-			$directory  = opendir($rep);
-			while (false !== ($filename = readdir($directory))) {
-				if (strpos($filename,$basefile) !== false)
-					$tmpfiles[] = $rep.DIRECTORY_SEPARATOR.$filename;
-			}
-
-			$files = array();
-			foreach($tmpfiles as $tmp){
-				$tmp_basefile = explode("-",pathinfo($tmp,PATHINFO_FILENAME));
-				$cpt = $tmp_basefile[1];
-				$files[$cpt] = $tmp;
-			}
-			return $files;
-		}
-	}
-
-	/**
-	 * Retrieve the path of source file to process
-	 * @param array $aArgs
-	 * @return string
-	 */
-	public function getTnlPathWithColl(array $aArgs = []) {
-		if (empty($aArgs['resId'])) {
-			throw new \Exception('resId empty');
-		}
-		if (empty($aArgs['collId'])) {
-			throw new \Exception('collId empty');
-		}
-
-		$resId = $aArgs['resId'];
-		$collId = $aArgs['collId'];
-
-		for ($i=0;$i < count($_SESSION['collections']);$i++) {
-			if ($_SESSION['collections'][$i]['id'] == $collId) {
-				$resTable = $_SESSION['collections'][$i]['table'];
-			}
-		}
-		if (empty($resTable)) {
-			return false;
-		}
-
-		$oRowSet = \SrcCore\models\DatabaseModel::select([
-			'select'    => ['path_template'],
-			'table'     => ['docservers'],
-			'where'     => ['docserver_type_id = ?'],
-			'data'      => ['TNL']
-		]);
-
-		if (empty($oRowSet[0]['path_template'])) {
-			throw new \Exception('TNL docserver path empty');
-		}
-
-		$docserverPath = $oRowSet[0]['path_template'];
-
-		$oRowSet = \SrcCore\models\DatabaseModel::select([
-			'select'    => ['tnl_path', 'tnl_filename'],
-			'table'     => [$resTable],
-			'where'     => ['res_id = ?'],
-			'data'      => [$resId]
-		]);
-
-		if (empty($oRowSet)) {
-			return false;
-		}
-
-		$path          = '';
-		$filename      = '';
-		if (!empty($oRowSet[0]['tnl_path'])) {
-			$path = $oRowSet[0]['tnl_path'];
-		}
-		if (!empty($oRowSet[0]['tnl_filename'])) {
-			$filename = $oRowSet[0]['tnl_filename'];
-		}
-		$sourceFilePath = $docserverPath . $path . $filename;
-		$sourceFilePath = str_replace('#', DIRECTORY_SEPARATOR, $sourceFilePath);
-
-		return $sourceFilePath;
-	}
-
-}
diff --git a/modules/thumbnails/create_tnl.php b/modules/thumbnails/create_tnl.php
deleted file mode 100755
index e6f3ab8cecf..00000000000
--- a/modules/thumbnails/create_tnl.php
+++ /dev/null
@@ -1,314 +0,0 @@
-<?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.
-
-* @brief   create_tnl
-* @author  dev <dev@maarch.org>
-* @ingroup thumbnails
-*/
-
-try {
-    include 'Maarch_CLITools/ArgsParser.php';
-    include 'LoggerLog4php.php';
-    include 'Maarch_CLITools/FileHandler.php';
-    include 'Maarch_CLITools/ConsoleHandler.php';
-} catch (IncludeFileError $e) {
-    echo 'Maarch_CLITools required ! \n (pear.maarch.org)\n';
-    exit(106);
-}
-// Load tools
-require 'batch_tools.php';
-
-$GLOBALS['batchName'] = 'thumbnails';
-$GLOBALS['wb'] = '';
-$GLOBALS['lckFile'] = '';
-$totalProcessedResources = 0;
-
-// Open Logger
-$GLOBALS['logger'] = new Logger4Php();
-$GLOBALS['logger']->set_threshold_level('DEBUG');
-
-$logFile = 'log/' . date('Y-m-d_H-i-s') . '.log';
-
-$file = new FileHandler($logFile);
-$GLOBALS['logger']->add_handler($file);
-
-//error mode and function
-error_reporting(E_ERROR);
-set_error_handler(errorHandler);
-// global vars of the program
-/**
-* Name of the config (usefull for multi instance)
-*/
-$GLOBALS['config_name'] = "";
-/**
-* Path to the log file
-*/
-$GLOBALS['log'] = "";
-/**
-* User exit of the program, contains 1 if any problem appears
-*/
-$GLOBALS['ErrorLevel'] = 0;
-/**
-* Connection object to database 1
-*/
-$GLOBALS['db'] = "";
-
-// Class to manage files includes errors
-class IncludeFileError extends Exception
-{
-    public function __construct($file)
-    {
-        $this->file = $file;
-        parent::__construct("Include File \"$file\" is missing!", 1);
-    }
-}
-
-function MyInclude($file)
-{
-    if (file_exists($file)) {
-        include_once $file;
-    } else {
-        throw new IncludeFileError($file);
-    }
-}
-
-function r_mkdir($path, $mode = 0777, $recursive = true)
-{
-    if(empty($path))
-        return false;
-     
-    if ($recursive) {
-        $toDo = substr($path, 0, strrpos($path, DIRECTORY_SEPARATOR));
-        if($toDo !== '.' && $toDo !== '..')
-            r_mkdir($toDo, $mode);
-    }
-     
-    if(!is_dir($path))
-        mkdir($path, $mode);
-     
-        return true;
-}
-
-/**
-* Managing of errors
-* @param  $errno integer number of the error
-* @param  $errstr string text of the error
-* @param  $errfile string file concerned with the error
-* @param  $errline integer line of the error
-* @param  $errcontext string context of the error
-*/
-function errorHandler($errno, $errstr, $errfile, $errline, $errcontext)
-{
-    $GLOBALS['logger']->write('from  line ' . $errline . ' : ' . $errstr, 'WARNING', 1);
-    $GLOBALS['errorLevel'] = 1;
-}
-
-// Begin
-date_default_timezone_set('Europe/Paris');
-if ($argc != 2) {
-    echo "You must specify the configuration file." . $argc;
-    exit;
-}
-$conf = $argv[1];
-;
-if (!file_exists($conf)) {
-    $GLOBALS['logger']->write("Can't load xml config file ! (".$conf.")", "ERROR");
-    exit();
-} else {
-    $xmlconfig = simplexml_load_file($conf);
-}
-foreach ($xmlconfig->CONFIG as $CONFIG) {
-    $GLOBALS['config_name'] = $CONFIG->CONFIG_NAME;
-   
-    $GLOBALS['tablename'] = $CONFIG->TABLE_NAME;
-    $GLOBALS['collection'] = $CONFIG->COLLECTION;
-    
-    $GLOBALS['max_batch_size'] = $CONFIG->MAX_BATCH_SIZE;
-    $maarchDirectory = (string) $CONFIG->MaarchDirectory;
-    $GLOBALS['core_path'] = $maarchDirectory . 'core' . DIRECTORY_SEPARATOR;
-}
-$GLOBALS['databasetype'] = $xmlconfig->CONFIG_BASE->databasetype;
-
-$log4phpParams = $xmlconfig->LOG4PHP;
-if ((string) $log4phpParams->enabled == 'true') {
-    $GLOBALS['logger']->set_log4PhpLibrary(
-        $maarchDirectory . 'apps/maarch_entreprise/tools/log4php/Logger.php'
-    );
-    $GLOBALS['logger']->set_log4PhpLogger((string) $log4phpParams->Log4PhpLogger);
-    $GLOBALS['logger']->set_log4PhpBusinessCode((string) $log4phpParams->Log4PhpBusinessCode);
-    $GLOBALS['logger']->set_log4PhpConfigPath((string) $log4phpParams->Log4PhpConfigPath);
-    $GLOBALS['logger']->set_log4PhpBatchName('thumbnails');
-}
-
-$GLOBALS['logger']->write("Launch of process of thumbnails conversion");
-$GLOBALS['logger']->write("Loading the xml config file");
-$GLOBALS['logger']->write("Config name : " . $GLOBALS['config_name']);
-$GLOBALS['logger']->write("Conversion launched for table : " . $GLOBALS['tablename']);
-
-require $GLOBALS['core_path']."class/class_functions.php";
-require $GLOBALS['core_path']."class/class_db_pdo.php";
-    
-$GLOBALS['db'] = new Database($conf);
-
-
-Bt_getWorkBatch();
-
-$query = "select docserver_id from docservers where is_readonly = 'N' and "
-       . " coll_id = ? and docserver_type_id = 'TNL'";
-       
-$stmt1 = $GLOBALS['db']->query($query, array($GLOBALS['collection']));
-if ($res = $stmt1->fetchObject()) {
-    $docserverId = $res->docserver_id;
-} else {
-    $docserverId='';
-}
-
-if ($docserverId <> '') {
-    $GLOBALS['logger']->write("TNL docserver found !");
-} else {
-    $GLOBALS['logger']->write("TNL docserver not found ! (query : ".$query, "ERROR");
-    exit();
-}
-
-$docserversList = array();
-$docServers = "select docserver_id, path_template, device_label from docservers";
-$stmt1 = $GLOBALS['db']->query($docServers);
-while ($queryResult = $stmt1->fetchObject()) {
-    $pathToDocServer[$queryResult->docserver_id] = $queryResult->path_template;
-    $docserversList[] = $queryResult->docserver_id;
-}
-$docserversList = implode(', ', $docserversList);
-//$GLOBALS['logger']->write("List of docServers : " . $docserversList);
-
-if (is_dir($pathToDocServer[(string)$docserverId])) {
-    $pathOutput = $pathToDocServer[(string)$docserverId];
-    $GLOBALS['logger']->write("TNL path: ".$pathOutput);
-
-} else {
-    $pathOutput = $pathToDocServer[(string)$docserverId];
-    $GLOBALS['logger']->write("Wrong TNL path ! (".$pathOutput.")", "ERROR");
-    exit();
-}
-$cpt_batch_size=0;
-
-$queryCount = "select count(1) as count from "
-    . $GLOBALS['tablename'] . " where (tnl_filename = '' or tnl_filename is null) "
-    . " and (filename <> '' or filename is not null)";
-$stmt1 = $GLOBALS['db']->query($queryCount);
-
-$nbResToProcess = $stmt1->fetchObject()->count;
-
-$queryMakeThumbnails = "select res_id, docserver_id, path, filename, format from "
-    . $GLOBALS['tablename'] . " where (tnl_filename = '' or tnl_filename is null) "
-    . " and (filename <> '' or filename is not null)";
-
-$stmt1 = $GLOBALS['db']->query($queryMakeThumbnails);
-
-if ($nbResToProcess === 0) {
-    Bt_exitBatch(0, 'No document to process');
-} else {
-    $GLOBALS['logger']->write($nbResToProcess." document(s) to process...");
-}
-
-$i = 1;
-$err = 0;
-$errInfo = '';
-while ($queryResult=$stmt1->fetchObject()) {
-    if ($GLOBALS['max_batch_size'] >= $cpt_batch_size) {
-        $fileFormat = $queryResult->format;
-        $pathToFile = $pathToDocServer[$queryResult->docserver_id] 
-            . str_replace("#", DIRECTORY_SEPARATOR, $queryResult->path)
-            . $queryResult->filename;
-        $outputPathFile  = $pathOutput . str_replace("#", DIRECTORY_SEPARATOR, $queryResult->path) 
-            . str_replace(pathinfo($pathToFile, PATHINFO_EXTENSION), "png",$queryResult->filename);
-        
-        $GLOBALS['logger']->write('Process n°'.$i.'/'.$nbResToProcess.' (RES_ID => '.$queryResult->res_id.', FORMAT => '.$fileFormat.', PATH => '.$pathToFile.')');
-        
-        
-        if (strtoupper($fileFormat) <> 'PDF' 
-            && strtoupper($fileFormat) <> 'HTML'
-            && strtoupper($fileFormat) <> 'MAARCH'
-        ) {
-            $errTxt = "file format not allowed : " . $fileFormat;
-            $errInfo = ' (Last Error : '.$errTxt.')';
-
-            $stmt2 = $GLOBALS['db']->query("UPDATE ".$GLOBALS['tablename']." SET tnl_path = 'ERR', tnl_filename = 'ERR' WHERE res_id = ?", array($queryResult->res_id));
-               $GLOBALS['logger']->write('document not converted ! ('.$errTxt.')',"ERROR");
-            $err++;
-        } else {
-            $racineOut = $pathOutput . str_replace("#", DIRECTORY_SEPARATOR, $queryResult->path);
-            if (!is_dir($racineOut)) {
-                r_mkdir($racineOut, 0777);
-                $GLOBALS['logger']->write("Create $racineOut directory ");
-            }
-            
-            $command = '';
-            if (strtoupper($fileFormat) == 'PDF') {
-                /*$command = "convert -thumbnail 400x600 -background white -alpha remove " . escapeshellarg($pathToFile) . "[0] "
-                    . escapeshellarg($outputPathFile);*/
-                /* convert all pdf pages to img, without resize, low quality */
-                $command = "convert -density 100x100 -quality 65 -background white -alpha remove " . escapeshellarg($pathToFile) . " ". escapeshellarg($outputPathFile);
-            } else {
-                $posPoint = strpos($pathToFile, '.');
-                $extension = substr($pathToFile, $posPoint);
-                $chemin = substr($pathToFile, 0, $posPoint);
-                if ($extension == '.maarch') {
-                    if (!copy($pathToFile, $chemin.'.html')) {
-                        echo "La copie $pathToFile du fichier a échoué...\n";
-                    } else {
-                        echo "La copie $pathToFile du fichier a réussi...\n";
-                        $cheminComplet = $chemin.".html";
-                        $command = "wkhtmltoimage --width 400 --height 600 --quality 100 --zoom 0.2 " . escapeshellarg($cheminComplet) . " "
-                        . escapeshellarg($outputPathFile);
-
-                    }
-                } else {
-                    $command = "wkhtmltoimage --width 400 --height 600 --quality 100 --zoom 0.2 " . escapeshellarg($pathToFile) . " "
-                    . escapeshellarg($outputPathFile);
-                }
-            }
-            exec($command.' 2>&1', $output, $result);
-            if ($result > 0) {
-
-                $err++;
-                $errInfo = ' (Last Error : '.$output[0].')';
-                $stmt2 = $GLOBALS['db']->query("UPDATE ".$GLOBALS['tablename']." SET tnl_path = 'ERR', tnl_filename = 'ERR' WHERE res_id = ?", array($queryResult->res_id));
-                $GLOBALS['logger']->write('document not converted ! ('.$output[0].') => '.$command,"ERROR");
-            } else {
-                if (is_file($outputPathFile)) {
-                    $stmt2 = $GLOBALS['db']->query("UPDATE ".$GLOBALS['tablename']." SET tnl_path = ?, tnl_filename = ? WHERE res_id = ?", array($queryResult->path, str_replace(pathinfo($pathToFile, PATHINFO_EXTENSION), "png",$queryResult->filename), $queryResult->res_id));	
-                
-                } else if (is_file(pathinfo($outputPathFile,PATHINFO_DIRNAME) . DIRECTORY_SEPARATOR . pathinfo($outputPathFile,PATHINFO_FILENAME).'-0.png')) {
-                    $newFilename =  pathinfo($outputPathFile,PATHINFO_FILENAME).'-0.png';
-                    $stmt2 = $GLOBALS['db']->query("UPDATE ".$GLOBALS['tablename']." SET tnl_path = ?, tnl_filename = ? WHERE res_id = ?", array($queryResult->path, $newFilename, $queryResult->res_id));
-                }
-                $GLOBALS['logger']->write('document converted');
-            }
-        }
-    } else {
-        $converted_doc = $i - $err;
-        $GLOBALS['logger']->write($converted_doc.' document(s) converted, MAX BATCH SIZE EXCEDEED !'.$errInfo);
-        Bt_logInDataBase(
-            $i, $err, $i.' document(s) converted, MAX BATCH SIZE EXCEDEED !'.$errInfo
-        );
-        break;
-    }
-    $i++;
-    $cpt_batch_size++;
-}
-$i--;
-
-$converted_doc = $i - $err;
-$GLOBALS['logger']->write($converted_doc.' document(s) converted');
-
-Bt_logInDataBase(
-    $i, $err, $converted_doc.' document(s) converted'.$errInfo
-);
-
-Bt_updateWorkBatch();
-$GLOBALS['logger']->write("End of application !");
-
-exit();
diff --git a/modules/thumbnails/css/module.css b/modules/thumbnails/css/module.css
deleted file mode 100755
index 31b1a8c7bb4..00000000000
--- a/modules/thumbnails/css/module.css
+++ /dev/null
@@ -1,66 +0,0 @@
-.iconDoc span { 
-	display: none;
-}
-.iconDoc:hover span { 
-	display: block;
-	position:fixed;
-	/*position:absolute;*/
-	left:10px;
-	top:10px;
-	/*margin-left:-420px;*/
-	/*margin-top:-110px;*/
-	border: solid 1px rgb(0, 157, 197);
-	-moz-box-shadow: 0px 0px 5px 0px #656565;
-	-webkit-box-shadow: 0px 0px 5px 0px #656565;
-	-o-box-shadow: 0px 0px 5px 0px #656565;
-	box-shadow: 0px 0px 5px 0px #656565;
-	filter:progid:DXImageTransform.Microsoft.Shadow(color=#656565, Direction=NaN, Strength=5);
-	z-index:100;
-	height:600px;
-	width:auto;
-}
-
-.iconDoc:hover span img {
-	height:600px;
-	width:auto;
-}
-
-.iconDoc:hover #no_doc { 
-	display: inline;
-	position:fixed;
-	/*position:absolute;*/
-	left:10px;
-	top:10px;
-	/*margin-top:0px;*/
-	padding: 10px;
-	background: #ffffff;
-	color: #AD5453;
-	-moz-box-shadow: 0px 0px 5px 0px #656565;
-	-webkit-box-shadow: 0px 0px 5px 0px #656565;
-	-o-box-shadow: 0px 0px 5px 0px #656565;
-	box-shadow: 0px 0px 5px 0px #656565;
-	filter:progid:DXImageTransform.Microsoft.Shadow(color=#656565, Direction=NaN, Strength=5);
-	z-index:100;
-	height:550px;
-	width: 400px;
-}
-
-.iconDoc #no_doc:after { 
-    content: 'AUCUN APERÇU DISPONIBLE';
-	font-size:20px;
-	font-weight:bold;
-	position: absolute;
-	left:18%;
-	top: 50%;
-	color: rgb(0, 157, 197);
-	opacity:1;
-}
-.iconDoc span:after { 
-    content: 'APERÇU';
-	font-size:20px;
-	font-weight:bold;
-	position: absolute;
-	left:35%;
-	color: rgb(0, 157, 197);
-	opacity:0.2;
-}
diff --git a/modules/thumbnails/doc_thumb.php b/modules/thumbnails/doc_thumb.php
deleted file mode 100755
index 58056a3f8d6..00000000000
--- a/modules/thumbnails/doc_thumb.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-	require_once 'modules/thumbnails/class/class_modules_tools.php';
-			
-	$resId    = $_REQUEST['res_id'];
-	$collId   = $_REQUEST['coll_id'];
-	$advanced = $_REQUEST['advanced'];
-
-	$tnl = new thumbnails();
-	if (empty($advanced)) {
-		if (isset($_REQUEST['tablename'])) {
-		    $path = $tnl->getPathTnl($resId, $collId,$_REQUEST['tablename']);
-        }
-		else {
-		    $path = $tnl->getPathTnl($resId, $collId);
-		}
-	} else {
-		$path = $tnl->getTnlPathWithColl(['resId' => $resId, 'collId' => $collId]); // New Behaviour
-	}
-	if (!is_file($path) && !empty($advanced)){
-		$path = 'modules/thumbnails/no_thumb.png';
-	} elseif (!is_file($path)) {
-		exit();
-	}
-
-	$tab_tnl = $tnl->testMultiPage($path);
-	if (!isset($_REQUEST['num_page'])) $num_page = 0;
-	else $num_page = $_GET['num_page'];
-	$mime_type = 'image/png';	
-	$date = mktime(0,0,0,date("m" ) + 2  ,date("d" ) ,date("Y" )  );
-	$date = date("D, d M Y H:i:s", $date);
-	$time = 30*12*60*60;
-	header("Pragma: public");
-	header("Expires: ".$date." GMT");
-	header("Cache-Control: max-age=".$time.", must-revalidate");
-	header("Content-Description: File Transfer");
-	header("Content-Type: ".$mime_type);
-	header("Content-Disposition: inline; filename=filename;");
-	header("Content-Transfer-Encoding: binary");
-	readfile($tab_tnl[$num_page]);
-	exit();
diff --git a/modules/thumbnails/doc_thumb_frame.php b/modules/thumbnails/doc_thumb_frame.php
deleted file mode 100755
index 08f729df0cc..00000000000
--- a/modules/thumbnails/doc_thumb_frame.php
+++ /dev/null
@@ -1,118 +0,0 @@
-<?php
-	require_once 'modules/thumbnails/class/class_modules_tools.php';
-			
-	$res_id = $_REQUEST['res_id'];
-	$coll_id = $_REQUEST['coll_id'];
-	$advanced = $_REQUEST['advanced'];
-	$tnl = new thumbnails();
-
-	if (isset($_REQUEST['res_id_attach'])){
-		$path = $tnl->getPathTnl($_REQUEST['res_id_attach'], $coll_id, 'res_attachments');
-
-		if (!is_file($path) && !empty($advanced)){
-			$path = 'modules/thumbnails/no_thumb.png';
-		} elseif (!is_file($path)) {
-			exit();
-		}
-		$tab_tnl = $tnl->testMultiPage($path);
-	}
-	
-	else{
-		if (empty($advanced)) {
-			$path = $tnl->getPathTnl($res_id, $coll_id);
-		} else {
-			$path = $tnl->getTnlPathWithColl(['resId' => $res_id, 'collId' => $coll_id]); // New Behaviour
-		}
-		if (!is_file($path) && !empty($advanced)){
-			$path = 'modules/thumbnails/no_thumb.png';
-		} elseif (!is_file($path)) {
-			exit();
-		}
-		$tab_tnl = $tnl->testMultiPage($path);
-	}
-?>
-<div class="pswp" tabindex="-1" role="dialog" aria-hidden="true">
-	<div class="pswp__bg"></div>
-	<div class="pswp__scroll-wrap">
-		<div class="pswp__container">
-			<div class="pswp__item"></div>
-			<div class="pswp__item"></div>
-			<div class="pswp__item"></div>
-		</div>
-		<?php 
-		if (count($tab_tnl) == 1) $style_bar = 'pswp__ui--idle';
-		else  $style_bar = '';
-		?>
-		<div class="pswp__ui pswp__ui--hidden <?php echo $style_bar; ?>">
-			<div class="pswp__top-bar">
-				<div class="pswp__counter " ></div>
-				<!--<button class="pswp__button pswp__button--close" title="Close (Esc)"></button>-->
-				<button class="pswp__button pswp__button--share" title="Share"></button>
-				<!--<button class="pswp__button pswp__button--fs" title="Toggle fullscreen"></button>-->
-				<button class="pswp__button pswp__button--zoom" title="Zoom in/out"></button>
-				<div class="pswp__preloader">
-					<div class="pswp__preloader__icn">
-					  <div class="pswp__preloader__cut">
-						<div class="pswp__preloader__donut"></div>
-					  </div>
-					</div>
-				</div>
-			</div>
-			<div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
-				<div class="pswp__share-tooltip"></div> 
-			</div>
-			<button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)">
-			</button>
-			<button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)">
-			</button>
-			<div class="pswp__caption">
-				<div class="pswp__caption__center"></div>
-			</div>
-		  </div>
-		</div>
-</div>
-<script>
-	var pswpElement = document.querySelectorAll('.pswp')[0];
-	// build items array
-	var items = [
-		<?php
-		//ksort($tab_tnl);
-		//echo "<pre>".print_r($tab_tnl,true)."</pre>";
-		if (isset($_REQUEST['res_id_attach'])){
-			foreach ($tab_tnl as $num_page=>$path){
-				?>
-				{
-				
-					src: 'index.php?page=doc_thumb&module=thumbnails&res_id=<?php echo $_REQUEST['res_id_attach'];?>&coll_id=letterbox_coll&body_loaded&display=true&num_page=<?php echo $num_page;?>&tablename=res_attachments',
-					w: 827,
-					h: 1169
-				},
-				<?php
-			}
-		}
-		else{
-			foreach ($tab_tnl as $num_page=>$path){
-			?>
-			{
-			
-				src: 'index.php?page=doc_thumb&module=thumbnails&res_id=<?php echo $res_id;?>&coll_id=letterbox_coll&body_loaded&display=true&num_page=<?php echo $num_page;?>',
-				w: 827,
-				h: 1169
-			},
-			<?php
-			}
-		}		
-		?>
-	];
-
-	var options = {
-		index: 0,
-		closeOnVerticalDrag : false,
-		closeOnScroll : false,
-		history : false,
-		pinchToClose : false
-	};
-	var gallery = new PhotoSwipe( pswpElement, PhotoSwipeUI_Default, items, options);
-	gallery.init();
-
-</script>
\ No newline at end of file
diff --git a/modules/thumbnails/js/functions.js b/modules/thumbnails/js/functions.js
deleted file mode 100755
index 8dd87f3ae73..00000000000
--- a/modules/thumbnails/js/functions.js
+++ /dev/null
@@ -1,32 +0,0 @@
-function showThumb(divName, resId, collId)
-{
-    var path_manage_script = 'index.php?module=thumbnails&page=ajaxShowThumb&display=true';
-    /*new Ajax.Request(path_manage_script,
-    {
-        method:'post',
-        parameters: { resId : resId, collId : collId},
-        onSuccess: function(answer) {
-            eval("response = "+answer.responseText);
-            $(divName+resId).innerHTML = response.toShow;
-        }
-    });*/
-    $j.ajax({
-        url: path_manage_script,
-        type: 'POST',
-        data: {
-            resId : resId,
-            collId : collId
-        },
-        success: function(answer)
-        {
-            eval("response = "+answer);
-            if(response.status==0){
-                $j('#'+divName+resId).html(response.toShow);
-            }
-        },
-        error: function(error)
-        {
-            alert(error);
-        }
-    });
-}
\ No newline at end of file
diff --git a/modules/thumbnails/lang/en.php b/modules/thumbnails/lang/en.php
deleted file mode 100755
index b9ec8ab30b4..00000000000
--- a/modules/thumbnails/lang/en.php
+++ /dev/null
@@ -1,3 +0,0 @@
-<?php
-if (!defined('_THUMBNAILS_COMMENT'))   
-	define('_THUMBNAILS_COMMENT', 'Unit of thumbnails');
diff --git a/modules/thumbnails/lang/fr.php b/modules/thumbnails/lang/fr.php
deleted file mode 100755
index 928cbff44ae..00000000000
--- a/modules/thumbnails/lang/fr.php
+++ /dev/null
@@ -1,3 +0,0 @@
-<?php
-if (!defined('_THUMBNAILS_COMMENT'))   
-	define('_THUMBNAILS_COMMENT', 'Module des miniatures');
diff --git a/modules/thumbnails/log/test.txt b/modules/thumbnails/log/test.txt
deleted file mode 100755
index e69de29bb2d..00000000000
diff --git a/modules/thumbnails/no_thumb.png b/modules/thumbnails/no_thumb.png
deleted file mode 100755
index f1a0596d15fbe6096872c313773f14851f684283..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 13380
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

diff --git a/modules/thumbnails/scripts/launch_batch_thumbnails.sh b/modules/thumbnails/scripts/launch_batch_thumbnails.sh
deleted file mode 100755
index 0513ebfe00c..00000000000
--- a/modules/thumbnails/scripts/launch_batch_thumbnails.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/bash
-cd /var/www/html/maarch_courrier_trunk/modules/thumbnails/
-php /var/www/html/maarch_courrier_trunk/modules/thumbnails/create_tnl.php /var/www/html/maarch_courrier_trunk/modules/thumbnails/xml/config_batch_letterbox.xml
-php /var/www/html/maarch_courrier_trunk/modules/thumbnails/create_tnl.php /var/www/html/maarch_courrier_trunk/modules/thumbnails/xml/config_batch_attachments.xml
\ No newline at end of file
diff --git a/modules/thumbnails/xml/IVS/data_types.xml b/modules/thumbnails/xml/IVS/data_types.xml
deleted file mode 100755
index 710b3b56651..00000000000
--- a/modules/thumbnails/xml/IVS/data_types.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-<dataTypes>
-
-</dataTypes>
\ No newline at end of file
diff --git a/modules/thumbnails/xml/IVS/requests_definitions.xml b/modules/thumbnails/xml/IVS/requests_definitions.xml
deleted file mode 100755
index a8291960c19..00000000000
--- a/modules/thumbnails/xml/IVS/requests_definitions.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<requestDefinitions>
-    <requestDefinition method="GET" path="/apps/maarch_entreprise/index.php" validationRule="get_thumbnails" >
-      <parameter name="module" value="thumbnails"/>
-      <parameter name="page" value="doc_thumb"/>
-      <parameter name="res_id"/>
-      <parameter name="coll_id"/>
-      <parameter name="num_page"/>
-      <parameter name="tablename"/>
-      <parameter name="display" value="true"/>
-      <parameter name="advanced"/>
-    </requestDefinition>
-    <requestDefinition method="GET" path="/apps/maarch_entreprise/index.php" validationRule="get_thumbnails" >
-      <parameter name="module" value="thumbnails"/>
-      <parameter name="page" value="doc_thumb_frame"/>
-      <parameter name="res_id"/>
-      <parameter name="coll_id"/>
-      <parameter name="num_page"/>
-      <parameter name="tablename"/>
-      <parameter name="getAttach"/>
-      <parameter name="display" value="true"/>
-	  <parameter name="advanced"/>
-    </requestDefinition>
-</requestDefinitions>
\ No newline at end of file
diff --git a/modules/thumbnails/xml/IVS/validation_rules.xml b/modules/thumbnails/xml/IVS/validation_rules.xml
deleted file mode 100755
index 789bc4a1b7f..00000000000
--- a/modules/thumbnails/xml/IVS/validation_rules.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<validationRules>
-    <validationRule name="get_thumbnails" extends="standardForm" mode="error">
-      <parameter name="coll_id" type="collection_list" />
-      <parameter name="res_id" type="integer" />
-      <parameter name="num_page" type="integer" />
-      <parameter name="tablename" type="string" />
-      <parameter name="module" type="identifier" />
-      <parameter name="advanced" type="string" />
-    </validationRule>
-</validationRules>
\ No newline at end of file
diff --git a/modules/thumbnails/xml/config.xml b/modules/thumbnails/xml/config.xml
deleted file mode 100755
index 967fa52e432..00000000000
--- a/modules/thumbnails/xml/config.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<ROOT>
-	<CONFIG>
-        <name>thumbnails</name>
-        <comment>_THUMBNAILS_COMMENT</comment>
-        <loaded>true</loaded>
-    </CONFIG>
-</ROOT>
diff --git a/modules/thumbnails/xml/config.xml.default b/modules/thumbnails/xml/config.xml.default
deleted file mode 100755
index 967fa52e432..00000000000
--- a/modules/thumbnails/xml/config.xml.default
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<ROOT>
-	<CONFIG>
-        <name>thumbnails</name>
-        <comment>_THUMBNAILS_COMMENT</comment>
-        <loaded>true</loaded>
-    </CONFIG>
-</ROOT>
diff --git a/modules/thumbnails/xml/config_batch_attachments.xml.default b/modules/thumbnails/xml/config_batch_attachments.xml.default
deleted file mode 100755
index 1c38ff0409e..00000000000
--- a/modules/thumbnails/xml/config_batch_attachments.xml.default
+++ /dev/null
@@ -1,23 +0,0 @@
-<ROOT>
-	<CONFIG>
-		<CONFIG_NAME>create_tnl_letterbox</CONFIG_NAME> 
-		<MaarchDirectory>/var/www/MaarchCourrier/</MaarchDirectory>
-		<TABLE_NAME>res_attachments</TABLE_NAME> <!-- Table a surveiller pour les documents à convertir -->
-		<COLLECTION>letterbox_coll</COLLECTION> 
-		<MAX_BATCH_SIZE>500</MAX_BATCH_SIZE> <!-- Nombre d'occurences max pour les conversions -->
-	</CONFIG>
-	<CONFIG_BASE>
-        <databaseserver>localhost</databaseserver>
-        <databaseserverport>5432</databaseserverport>
-        <databasetype>POSTGRESQL</databasetype>
-        <databasename>maarchcourrier</databasename>
-        <databaseuser>maarch</databaseuser>
-        <databasepassword>maarch</databasepassword>
-    </CONFIG_BASE>
-    <LOG4PHP>
-        <enabled>true</enabled>
-        <Log4PhpLogger>loggerTechnique</Log4PhpLogger>
-        <Log4PhpBusinessCode>thumbnails</Log4PhpBusinessCode>
-        <Log4PhpConfigPath>/var/www/MaarchCourrier/apps/maarch_entreprise/xml/log4php.xml</Log4PhpConfigPath>
-    </LOG4PHP>
-</ROOT>
\ No newline at end of file
diff --git a/modules/thumbnails/xml/config_batch_letterbox.xml.default b/modules/thumbnails/xml/config_batch_letterbox.xml.default
deleted file mode 100755
index 25d12867e0b..00000000000
--- a/modules/thumbnails/xml/config_batch_letterbox.xml.default
+++ /dev/null
@@ -1,23 +0,0 @@
-<ROOT>
-	<CONFIG>
-		<CONFIG_NAME>create_tnl_letterbox</CONFIG_NAME> 
-		<MaarchDirectory>/var/www/MaarchCourrier/</MaarchDirectory>
-		<TABLE_NAME>res_letterbox</TABLE_NAME> <!-- Table a surveiller pour les documents à convertir -->
-		<COLLECTION>letterbox_coll</COLLECTION> 
-		<MAX_BATCH_SIZE>500</MAX_BATCH_SIZE> <!-- Nombre d'occurences max pour les conversions -->
-	</CONFIG>
-	<CONFIG_BASE>
-        <databaseserver>localhost</databaseserver>
-        <databaseserverport>5432</databaseserverport>
-        <databasetype>POSTGRESQL</databasetype>
-        <databasename>maarchcourrier</databasename>
-        <databaseuser>maarch</databaseuser>
-        <databasepassword>maarch</databasepassword>
-    </CONFIG_BASE>
-    <LOG4PHP>
-        <enabled>true</enabled>
-        <Log4PhpLogger>loggerTechnique</Log4PhpLogger>
-        <Log4PhpBusinessCode>thumbnails</Log4PhpBusinessCode>
-        <Log4PhpConfigPath>/var/www/MaarchCourrier/apps/maarch_entreprise/xml/log4php.xml</Log4PhpConfigPath>
-    </LOG4PHP>
-</ROOT>
\ No newline at end of file
diff --git a/modules/thumbnails/xml/services.xml b/modules/thumbnails/xml/services.xml
deleted file mode 100755
index 125decc2e67..00000000000
--- a/modules/thumbnails/xml/services.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-</root>
diff --git a/sql/develop.sql b/sql/develop.sql
index 93f539828ce..a583e945777 100644
--- a/sql/develop.sql
+++ b/sql/develop.sql
@@ -154,6 +154,7 @@ DO $$ BEGIN
     ALTER TABLE res_letterbox DROP COLUMN IF EXISTS tnl_filename;
   END IF;
 END$$;
+INSERT INTO parameters (id, description, param_value_string) VALUES ('thumbnailsSize', 'Taille des imagettes', '750x900');
 
 /* Refactoring */
 DROP VIEW IF EXISTS af_view_customer_target_view;
diff --git a/src/app/resource/controllers/ConvertThumbnailController.php b/src/app/resource/controllers/ConvertThumbnailController.php
index eb903e6410e..b4b167bd5e1 100644
--- a/src/app/resource/controllers/ConvertThumbnailController.php
+++ b/src/app/resource/controllers/ConvertThumbnailController.php
@@ -19,6 +19,7 @@ namespace Resource\controllers;
 use Attachment\models\AttachmentModel;
 use Docserver\controllers\DocserverController;
 use Docserver\models\DocserverModel;
+use Parameter\models\ParameterModel;
 use Resource\models\AdrModel;
 use Resource\models\ResModel;
 use SrcCore\models\CoreConfigModel;
@@ -64,7 +65,12 @@ class ConvertThumbnailController
             $command = "wkhtmltoimage --height 600 --width 400 --quality 100 --zoom 0.2 "
                 . escapeshellarg($pathToDocument) . ' ' . escapeshellarg("{$tmpPath}{$fileNameOnTmp}.png");
         } else {
-            $command = "convert -thumbnail 1000x1500 -background white -alpha remove "
+            $size = '750x900';
+            $parameter = ParameterModel::getById(['id' => 'thumbnailsSize', 'select' => ['param_value_string']]);
+            if (!empty($parameter) && preg_match('/[0-9]{3,4}[x][0-9]{3,4}/', $parameter['param_value_string'])) {
+                $size = $parameter['param_value_string'];
+            }
+            $command = "convert -thumbnail {$size} -background white -alpha remove "
                 . escapeshellarg($pathToDocument) . '[0] ' . escapeshellarg("{$tmpPath}{$fileNameOnTmp}.png");
         }
         exec($command, $output, $return);
diff --git a/src/app/resource/controllers/ResController.php b/src/app/resource/controllers/ResController.php
index 624f1f572f1..10725b9c115 100755
--- a/src/app/resource/controllers/ResController.php
+++ b/src/app/resource/controllers/ResController.php
@@ -326,21 +326,47 @@ class ResController
             return $response->withStatus(403)->withJson(['errors' => 'Document out of perimeter']);
         }
 
+        $pathToThumbnail = 'apps/maarch_entreprise/img/noThumbnail.png';
         $tnlAdr = AdrModel::getTypedDocumentAdrByResId([
             'select'    => ['docserver_id', 'path', 'filename'],
             'resId'     => $aArgs['resId'],
             'type'      => 'TNL'
         ]);
         if (empty($tnlAdr)) {
-            return $response->withStatus(400)->withJson(['errors' => 'Thumbnail does not exist']);
+            $extDocument = ResModel::getExtById(['select' => ['category_id'], 'resId' => $aArgs['resId']]);
+            if ($extDocument['category_id'] == 'outgoing') {
+                $attachment = AttachmentModel::getOnView([
+                    'select'    => ['res_id', 'res_id_version'],
+                    'where'     => ['res_id_master = ?', 'attachment_type = ?', 'status not in (?)'],
+                    'data'      => [$aArgs['resId'], 'outgoing_mail', ['DEL', 'OBS']],
+                    'limit'     => 1
+                ]);
+                if (!empty($attachment[0])) {
+                    ConvertThumbnailController::convert([
+                        'collId'            => 'letterbox_coll',
+                        'resId'             => $aArgs['resId'],
+                        'outgoingId'        => empty($attachment[0]['res_id']) ? $attachment[0]['res_id_version'] : $attachment[0]['res_id'],
+                        'isOutgoingVersion' => empty($attachment[0]['res_id'])
+                    ]);
+                }
+            } else {
+                ConvertThumbnailController::convert(['collId' => 'letterbox_coll', 'resId' => $aArgs['resId']]);
+            }
+            $tnlAdr = AdrModel::getTypedDocumentAdrByResId([
+                'select'    => ['docserver_id', 'path', 'filename'],
+                'resId'     => $aArgs['resId'],
+                'type'      => 'TNL'
+            ]);
         }
 
-        $docserver = DocserverModel::getByDocserverId(['docserverId' => $tnlAdr['docserver_id'], 'select' => ['path_template']]);
-        if (empty($docserver['path_template']) || !file_exists($docserver['path_template'])) {
-            return $response->withStatus(400)->withJson(['errors' => 'Docserver does not exist']);
-        }
+        if (!empty($tnlAdr)) {
+            $docserver = DocserverModel::getByDocserverId(['docserverId' => $tnlAdr['docserver_id'], 'select' => ['path_template']]);
+            if (empty($docserver['path_template']) || !file_exists($docserver['path_template'])) {
+                return $response->withStatus(400)->withJson(['errors' => 'Docserver does not exist']);
+            }
 
-        $pathToThumbnail = $docserver['path_template'] . str_replace('#', DIRECTORY_SEPARATOR, $tnlAdr['path']) . $tnlAdr['filename'];
+            $pathToThumbnail = $docserver['path_template'] . str_replace('#', DIRECTORY_SEPARATOR, $tnlAdr['path']) . $tnlAdr['filename'];
+        }
 
         $fileContent = file_get_contents($pathToThumbnail);
         if ($fileContent === false) {
diff --git a/src/app/resource/controllers/StoreController.php b/src/app/resource/controllers/StoreController.php
index c0b7801fb1e..d3f86b38d72 100644
--- a/src/app/resource/controllers/StoreController.php
+++ b/src/app/resource/controllers/StoreController.php
@@ -73,7 +73,7 @@ class StoreController
             $resId = false;
             if ($aArgs['table'] == 'res_letterbox') {
                 $resId = ResModel::create($data);
-                ConvertThumbnailController::convert(['collId' => 'letterbox_coll', 'resId' => 260]);
+                ConvertThumbnailController::convert(['collId' => 'letterbox_coll', 'resId' => $resId]);
             } elseif ($aArgs['table'] == 'res_attachments') {
                 $resId = AttachmentModel::create($data);
             }
diff --git a/src/app/signatureBook/controllers/SignatureBookController.php b/src/app/signatureBook/controllers/SignatureBookController.php
index c51f0ee0e2c..f565581e7ef 100644
--- a/src/app/signatureBook/controllers/SignatureBookController.php
+++ b/src/app/signatureBook/controllers/SignatureBookController.php
@@ -170,7 +170,7 @@ class SignatureBookController
                 'title'         => $incomingMail['subject'],
                 'category_id'   => $incomingMail['category_id'],
                 'viewerLink'    => "index.php?display=true&dir=indexing_searching&page=view_resource_controler&visu&id={$resId}&collid=letterbox_coll",
-                'thumbnailLink' => "index.php?page=doc_thumb&module=thumbnails&res_id={$resId}&coll_id=letterbox_coll&display=true&advanced=true"
+                'thumbnailLink' => "rest/res/{$resId}/thumbnail"
             ]
         ];
 
@@ -202,7 +202,7 @@ class SignatureBookController
                 'format'        => $value['format'],
                 'isConverted'   => $isConverted,
                 'viewerLink'    => "index.php?display=true&module=visa&page=view_pdf_attachement&res_id_master={$resId}&id={$viewerId}",
-                'thumbnailLink' => "index.php?page=doc_thumb&module=thumbnails&res_id={$value['res_id']}&coll_id=attachments_coll&display=true&advanced=true"
+                'thumbnailLink' => "rest/res/{$value['res_id']}/thumbnail"
             ];
         }
 
@@ -317,8 +317,6 @@ class SignatureBookController
             $attachments[$key]['icon'] = $attachmentTypes[$value['attachment_type']]['icon'];
             $attachments[$key]['sign'] = $attachmentTypes[$value['attachment_type']]['sign'];
 
-            $attachments[$key]['thumbnailLink'] = "index.php?page=doc_thumb&module=thumbnails&res_id={$realId}&coll_id={$collId}&display=true&advanced=true";
-
             if(!in_array(strtoupper($value['format']), ['PDF', 'JPG', 'JPEG', 'PNG', 'GIF']) ){
                 $isVersion = 'false';
             }
-- 
GitLab