From ce0814d99f2a5a71de7860224025ab5b69e2e896 Mon Sep 17 00:00:00 2001
From: "florian.azizian" <florian.azizian@maarch.org>
Date: Wed, 12 Dec 2018 17:12:15 +0100
Subject: [PATCH] FEAT #8960 improve log ixbus

---
 .../actions/sendToExternalSignatureBook.php   | 29 ++++++---
 modules/visa/batch/batch_tools.php            |  5 ++
 .../batch/process_mailsFromSignatoryBook.php  |  5 ++
 modules/visa/class/IxbusController.php        | 61 ++++++++++++-------
 src/core/models/CurlModel.php                 | 16 ++++-
 5 files changed, 83 insertions(+), 33 deletions(-)

diff --git a/apps/maarch_entreprise/actions/sendToExternalSignatureBook.php b/apps/maarch_entreprise/actions/sendToExternalSignatureBook.php
index a2a6caae2dd..e6118b13bc2 100644
--- a/apps/maarch_entreprise/actions/sendToExternalSignatureBook.php
+++ b/apps/maarch_entreprise/actions/sendToExternalSignatureBook.php
@@ -54,31 +54,40 @@ function get_form_txt($values, $path_manage_action, $id_action, $table, $module,
 
     $html .= '<form name="sendToExternalSB" id="sendToExternalSB" method="post" class="forms" action="#">';
     $html .= '<input type="hidden" name="chosen_action" id="chosen_action" value="end_action" />';
+    $htmlModal = '';
     if (!empty($config)) {
         if ($config['id'] == 'ixbus') {
             include_once 'modules/visa/class/IxbusController.php';
 
-            $html .= IxbusController::getModal($config);
+            $htmlModal = IxbusController::getModal($config);
         } elseif ($config['id'] == 'iParapheur') {
             include_once 'modules/visa/class/IParapheurController.php';
 
-            $html .= IParapheurController::getModal($config);
+            $htmlModal = IParapheurController::getModal($config);
         } elseif ($config['id'] == 'fastParapheur') {
             include_once 'modules/visa/class/FastParapheurController.php';
 
-            $html .= FastParapheurController::getModal($config);
-        } elseif ($config['id'] == 'maarchParapheur') {
-            include_once 'modules/visa/class/MaarchParapheurController.php';
+            $htmlModal = FastParapheurController::getModal($config);
+        }
 
-            $html .= MaarchParapheurController::getModal($config);
+        if (!empty($htmlModal['error'])) {
+            $error = $htmlModal['error'];
+        } else {
+            $html .= $htmlModal;
         }
+    } else {
+        $error = _FILE . ' modules/visa/xml/remoteSignatoryBooks.xml' . ' ' . _NOT_EXISTS;
     }
 
     $html .='<div align="center">';
-    $html .=' <input type="button" name="validate" id="validate" value="'._VALIDATE.'" class="button" ' .
-            'onclick="valid_action_form(\'sendToExternalSB\', \'' . $path_manage_action .
-            '\', \'' . $id_action . '\', \'' . $values_str . '\', \'res_letterbox\', \'null\', \'letterbox_coll\', \'' .
-            $mode . '\');" />&nbsp;';
+    if (empty($error)) {
+        $html .=' <input type="button" name="validate" id="validate" value="'._VALIDATE.'" class="button" ' .
+                'onclick="valid_action_form(\'sendToExternalSB\', \'' . $path_manage_action .
+                '\', \'' . $id_action . '\', \'' . $values_str . '\', \'res_letterbox\', \'null\', \'letterbox_coll\', \'' .
+                $mode . '\');" />&nbsp;';
+    } else {
+        $html .= '<br>' . $error . '<br><br>';
+    }
     $html .='<input type="button" name="cancel" id="cancel" class="button" value="'._CANCEL.'" onclick="pile_actions.action_pop();destroyModal(\'modal_'.$id_action.'\');"/>';
 
     $html .='</div>';
diff --git a/modules/visa/batch/batch_tools.php b/modules/visa/batch/batch_tools.php
index 6971519c33b..095f7fb0241 100755
--- a/modules/visa/batch/batch_tools.php
+++ b/modules/visa/batch/batch_tools.php
@@ -213,6 +213,11 @@ function Bt_createAttachment($aArgs = [])
     $curl = curl_init();
     curl_setopt_array($curl, $opts);
     $rawResponse = curl_exec($curl);
+    $error = curl_error($curl);
+    if (!empty($error)) {
+        $GLOBALS['logger']->write($error, 'ERROR');
+        exit;
+    }
 
     return json_decode($rawResponse, true);
 }
diff --git a/modules/visa/batch/process_mailsFromSignatoryBook.php b/modules/visa/batch/process_mailsFromSignatoryBook.php
index fe96a1ff162..917ba721119 100755
--- a/modules/visa/batch/process_mailsFromSignatoryBook.php
+++ b/modules/visa/batch/process_mailsFromSignatoryBook.php
@@ -265,6 +265,11 @@ if ($configRemoteSignatoryBook['id'] == 'ixbus') {
     $retrievedMails = MaarchParapheurController::retrieveSignedMails(['config' => $configRemoteSignatoryBook, 'idsToRetrieve' => $idsToRetrieve]);
 }
 
+if (!empty($retrievedMails['error'])) {
+    $GLOBALS['logger']->write($retrievedMails['error'], 'ERROR');
+    exit;
+}
+
 // On dégele les pj et on créé une nouvelle ligne si le document a été signé
 foreach ($retrievedMails['isVersion'] as $resId => $value) {
     $GLOBALS['logger']->write('Update res_version_attachments : ' . $resId . '. ExternalId : ' . $value->external_id, 'INFO');
diff --git a/modules/visa/class/IxbusController.php b/modules/visa/class/IxbusController.php
index dc5b63a03a5..dd0fd48eb9b 100755
--- a/modules/visa/class/IxbusController.php
+++ b/modules/visa/class/IxbusController.php
@@ -18,7 +18,15 @@ class IxbusController
     public static function getModal($config)
     {
         $initializeDatas = IxbusController::getInitializeDatas($config);
-
+        if (!empty($initializeDatas['error'])) {
+            return ['error' => $initializeDatas['error']];
+        }
+        if (empty($initializeDatas['natures'])) {
+            return ['error' => _NATURE . ' ' . _IS_EMPTY ];
+        }
+        if (empty($initializeDatas['messagesModel'])) {
+            return ['error' => _VISA_WORKFLOW . ' ' . _IS_EMPTY ];
+        }
         $html .= '<label for="nature">' . _NATURE_IXBUS . '</label><select name="nature" id="nature">';
         if (!empty($initializeDatas['natures']->Classeur)) {
             foreach ($initializeDatas['natures']->Classeur as $value) {
@@ -67,30 +75,36 @@ class IxbusController
             'options'       => [CURLOPT_HEADER => 1]
         ]);
 
-        $cookie = '';
-        foreach ($data['cookies'] as $key => $value) {
-            $cookie = $key . '=' . $value . ';';
+        if (!empty($data['cookies'])) {
+            $cookie = '';
+            foreach ($data['cookies'] as $key => $value) {
+                $cookie = $key . '=' . $value . ';';
+            }
+        } elseif (!empty($data['error'])) {
+            return ["error" => $data['error']];
         }
 
-        return $cookie;
+        return ["cookie" => $cookie];
     }
 
     public static function getInitializeDatas($config)
     {
         $sessionId = IxbusController::createSession($config);
-        $rawResponse['natures']       = IxbusController::getNature(['config' => $config, 'sessionId' => $sessionId]);
-        // $rawResponse['usersList']     = IxbusController::getUsersList(['config' => $config, 'sessionId' => $sessionId]);
-        $messagesModels = IxbusController::getMessagesModel(['config' => $config, 'sessionId' => $sessionId]);
+        if (!empty($sessionId['error'])) {
+            return ['error' => $sessionId['error']];
+        }
+        $rawResponse['natures']       = IxbusController::getNature(['config' => $config, 'sessionId' => $sessionId['cookie']]);
+        // $rawResponse['usersList']     = IxbusController::getUsersList(['config' => $config, 'sessionId' => $sessionId['cookie']]);
+        $userInfo  = IxbusController::getInfoUtilisateur(['config' => $config, 'login' => $config['data']['userId'], 'password' => $config['data']['password']]);
+        $messagesModels = IxbusController::getMessagesModel(['config' => $config, 'sessionId' => $sessionId['cookie'], 'userIdentifiant' => $userInfo->Identifiant]);
 
         $rawResponse['messagesModel'] = [];
         if (!empty($rawResponse['natures']->Classeur)) {
             foreach ($rawResponse['natures']->Classeur as $nature) {
                 foreach ($messagesModels->Message as $message) {
-                    if ($message->Identifiant == 392213) {
-                        $messageModel = IxbusController::getMessageNature(['config' => $config, 'messageId' => $message->Identifiant, 'sessionId' => $sessionId]);
-                        if ((string)$messageModel->IdentifiantClasseur == (string)$nature->Identifiant) {
-                            $rawResponse['messagesModel'][(string)$messageModel->IdentifiantMessage] = (string)$message->IdentifiantSpecifique;
-                        }
+                    $messageModel = IxbusController::getMessageNature(['config' => $config, 'messageId' => $message->Identifiant, 'sessionId' => $sessionId['cookie']]);
+                    if ((string)$messageModel->IdentifiantClasseur == (string)$nature->Identifiant) {
+                        $rawResponse['messagesModel'][(string)$messageModel->IdentifiantMessage] = (string)$message->IdentifiantSpecifique;
                     }
                 }
             }
@@ -142,7 +156,7 @@ class IxbusController
         <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
           <soap:Body>
             <GetMessagesModel xmlns="http://www.srci.fr">
-              <utilisateurID>8</utilisateurID>
+              <utilisateurID>'.$aArgs['userIdentifiant'].'</utilisateurID>
               <organisationID>'.$aArgs['config']['data']['organizationId'].'</organisationID>
               <serviceID>-1</serviceID>
               <typeMessage>Production</typeMessage>
@@ -253,6 +267,9 @@ class IxbusController
     public static function sendDatas($aArgs)
     {
         $sessionId = IxbusController::createSession($aArgs['config']);
+        if (!empty($sessionId['error'])) {
+            return ['error' => $sessionId['error']];
+        }
         $userInfo  = IxbusController::getInfoUtilisateur(['config' => $aArgs['config'], 'login' => $aArgs['loginIxbus'], 'password' => $aArgs['passwordIxbus']]);
 
         $attachments = \Attachment\models\AttachmentModel::getOnView([
@@ -318,7 +335,7 @@ class IxbusController
                     "Cache-Control: no-cache",
                     "Pragma: no-cache",
                     "Content-length: ".strlen($xmlPostString),
-                    "Cookie:".$sessionId,
+                    "Cookie:".$sessionId['cookie'],
                     "SOAPAction: \"http://www.srci.fr/SendDossier\""
                 ],
                 CURLOPT_RETURNTRANSFER => true,
@@ -350,7 +367,7 @@ class IxbusController
         if ($zip->open($zipFilename, ZipArchive::CREATE) === true) {
             $zip->addFile($aArgs['filepath'], $aArgs['filename']);
             
-            $adrInfo             = \Convert\models\AdrModel::getConvertedDocumentById(['resId' => $aArgs['res_id_master'], 'collId' => 'letterbox_coll', 'type' => 'PDF']);
+            $adrInfo             = \Convert\controllers\ConvertPdfController::getConvertedPdfById(['resId' => $aArgs['res_id_master'], 'collId' => 'letterbox_coll']);
             $docserverInfo       = \Docserver\models\DocserverModel::getByDocserverId(['docserverId' => $adrInfo['docserver_id']]);
             $arrivedMailfilePath = $docserverInfo['path_template'] . str_replace('#', '/', $adrInfo['path']) . $adrInfo['filename'];
             $zip->addFile($arrivedMailfilePath, 'courrier_arrivee.pdf');
@@ -368,24 +385,26 @@ class IxbusController
     public static function retrieveSignedMails($aArgs)
     {
         $sessionId = IxbusController::createSession($aArgs['config']);
-
+        if (!empty($sessionId['error'])) {
+            return ['error' => $sessionId['error']];
+        }
         foreach (['noVersion', 'isVersion'] as $version) {
             foreach ($aArgs['idsToRetrieve'][$version] as $resId => $value) {
-                $etatDossier = IxbusController::getEtatDossier(['config' => $aArgs['config'], 'sessionId' => $sessionId, 'dossier_id' => $value->external_id]);
+                $etatDossier = IxbusController::getEtatDossier(['config' => $aArgs['config'], 'sessionId' => $sessionId['cookie'], 'dossier_id' => $value->external_id]);
     
                 // Refused
                 if ((string)$etatDossier == $aArgs['config']['data']['ixbusIdEtatRefused']) {
                     $aArgs['idsToRetrieve'][$version][$resId]->status = 'refused';
-                    $notes = IxbusController::getDossier(['config' => $aArgs['config'], 'sessionId' => $sessionId, 'dossier_id' => $value->external_id]);
+                    $notes = IxbusController::getDossier(['config' => $aArgs['config'], 'sessionId' => $sessionId['cookie'], 'dossier_id' => $value->external_id]);
                     $aArgs['idsToRetrieve'][$version][$resId]->noteContent = (string)$notes->MotifRefus;
                 // Validated
                 } elseif ((string)$etatDossier == $aArgs['config']['data']['ixbusIdEtatValidated']) {
                     $aArgs['idsToRetrieve'][$version][$resId]->status = 'validated';
-                    $signedDocument = IxbusController::getAnnexes(['config' => $aArgs['config'], 'sessionId' => $sessionId, 'dossier_id' => $value->external_id]);
+                    $signedDocument = IxbusController::getAnnexes(['config' => $aArgs['config'], 'sessionId' => $sessionId['cookie'], 'dossier_id' => $value->external_id]);
                     $aArgs['idsToRetrieve'][$version][$resId]->format = 'pdf'; // format du fichier récupéré
                     $aArgs['idsToRetrieve'][$version][$resId]->encodedFile = (string)$signedDocument->Fichier;
 
-                    $notes = IxbusController::getAnnotations(['config' => $aArgs['config'], 'sessionId' => $sessionId, 'dossier_id' => $value->external_id]);
+                    $notes = IxbusController::getAnnotations(['config' => $aArgs['config'], 'sessionId' => $sessionId['cookie'], 'dossier_id' => $value->external_id]);
                     $aArgs['idsToRetrieve'][$version][$resId]->noteContent = (string)$notes->Annotation->Texte;
                 } else {
                     unset($aArgs['idsToRetrieve'][$version][$resId]);
diff --git a/src/core/models/CurlModel.php b/src/core/models/CurlModel.php
index b59cf9862da..b12fd25730b 100644
--- a/src/core/models/CurlModel.php
+++ b/src/core/models/CurlModel.php
@@ -85,8 +85,8 @@ class CurlModel
             'moduleId'  => 'curl',
             'level'     => 'DEBUG',
             'tableName' => '',
-            'recordId'  => '',
-            'eventType' => 'Exec Curl : ' . $aArgs['url'],
+            'recordId'  => 'Body : ' . json_encode($bodyData),
+            'eventType' => 'Exec Curl : ' . $curlConfig['url'],
             'eventId'   => $rawResponse
         ]);
 
@@ -155,6 +155,18 @@ class CurlModel
             'eventId'   => $rawResponse
         ]);
 
+        if (!empty($error)) {
+            LogsController::add([
+                'isTech'    => true,
+                'moduleId'  => 'curl',
+                'level'     => 'ERROR',
+                'tableName' => '',
+                'recordId'  => '',
+                'eventType' => 'Error Exec Curl : ' . $error,
+                'eventId'   => $rawResponse
+            ]);
+        }
+
         return ['response' => simplexml_load_string($rawResponse), 'infos' => $infos, 'cookies' => $cookies, 'raw' => $rawResponse, 'error' => $error];
     }
 
-- 
GitLab