From b62ffdfba4f5e48c1bb398af36414a3b94a4c806 Mon Sep 17 00:00:00 2001
From: Guillaume Heurtier <guillaume.heurtier@maarch.org>
Date: Fri, 27 Dec 2019 17:07:15 +0100
Subject: [PATCH] FEAT #12510 TIME 2:00 display contact list in search result
 list

---
 .../documents_list_mlb_search_adv.php         | 12 ++-
 apps/maarch_entreprise/js/functions.js        | 21 ++++++
 .../template/documents_list_search_adv.html   | 14 +++-
 rest/index.php                                |  1 +
 .../contact/controllers/ContactController.php | 73 +++++++++++++++++++
 src/core/lang/lang-en.php                     |  4 +-
 src/core/lang/lang-fr.php                     |  2 +
 src/core/lang/lang-nl.php                     |  2 +
 8 files changed, 123 insertions(+), 6 deletions(-)

diff --git a/apps/maarch_entreprise/indexing_searching/documents_list_mlb_search_adv.php b/apps/maarch_entreprise/indexing_searching/documents_list_mlb_search_adv.php
index 48cddef2ffb..ab3db712649 100755
--- a/apps/maarch_entreprise/indexing_searching/documents_list_mlb_search_adv.php
+++ b/apps/maarch_entreprise/indexing_searching/documents_list_mlb_search_adv.php
@@ -803,7 +803,11 @@ if ($mode == 'normal') {
 
                     if (!empty($senderList)) {
                         if (count($senderList) >= 2) {
-                            $formattedSenders = count($senderList) . ' ' . _SENDERS;
+                            $formattedSenders = count($senderList) . ' ' . _SENDERS
+                                    . '  <i class="fa fa-book fa-2x" style="cursor: pointer;" title="'
+                                    . _VIEW_CONTACTS.'"onclick="'
+                                    . "loadContactsList(".$resId.", 'sender');"
+                                    . '"></i>';
                         } else {
                             $formattedSenders = implode("<br>", $senderList);
                         }
@@ -816,7 +820,11 @@ if ($mode == 'normal') {
                     }
                     if (!empty($recipientList)) {
                         if (count($recipientList) >= 2) {
-                            $formattedRecipients = count($recipientList) . ' ' . _RECIPIENTS;
+                            $formattedRecipients = count($recipientList) . ' ' . _RECIPIENTS
+                                    . '  <i class="fa fa-book fa-2x" style="cursor: pointer;" title="'
+                                    . _VIEW_CONTACTS.'"onclick="'
+                                    . "loadContactsList(".$resId.", 'recipient');"
+                                    . '"></i>';;
                         } else {
                             $formattedRecipients = implode("<br>", $recipientList);
                         }
diff --git a/apps/maarch_entreprise/js/functions.js b/apps/maarch_entreprise/js/functions.js
index 33db9d13588..61833b46351 100755
--- a/apps/maarch_entreprise/js/functions.js
+++ b/apps/maarch_entreprise/js/functions.js
@@ -2888,3 +2888,24 @@ function setSendAttachment(id) {
         }
     });
 }
+
+function loadContactsList(id, mode) {
+    new Effect.toggle('contactsList_' + mode + '_' + id, 'appear', {
+        delay: 0.2
+    });
+
+    var path_manage_script = '../../rest/contacts/formatV1';
+
+
+    new Ajax.Request(path_manage_script, {
+        method: 'post',
+        parameters: {
+            resId: id,
+            mode: mode
+        },
+        onSuccess: function (answer) {
+            eval("response = " + answer.responseText);
+            $('divContactsList_' + mode + '_' + id).innerHTML = response.toShow;
+        }
+    });
+}
diff --git a/apps/maarch_entreprise/template/documents_list_search_adv.html b/apps/maarch_entreprise/template/documents_list_search_adv.html
index 65927fd92de..5535048d930 100755
--- a/apps/maarch_entreprise/template/documents_list_search_adv.html
+++ b/apps/maarch_entreprise/template/documents_list_search_adv.html
@@ -148,14 +148,22 @@ Mods
                         </div>
                     </td>
                 </tr>   
-               <tr id="contactsList_##loadValue|res_id##" name="contactsList_##loadValue|res_id##" style="display: none; border-bottom: solid 1px black; background-color: white;" width="100%">
+               <tr id="contactsList_sender_##loadValue|res_id##" name="contactsList_##loadValue|res_id##" style="display: none; border-bottom: solid 1px black; background-color: white;" width="100%">
                     <td colspan="6" style="background-color: #f2f2f2;">
-                        <div id="divContactsList_##loadValue|res_id##" align="center" style="color: grey;margin:10px;padding:10px;border: 1px dashed #135F7F;">
+                        <div id="divContactsList_sender_##loadValue|res_id##" align="center" style="color: grey;margin:10px;padding:10px;border: 1px dashed #135F7F;">
                             <i class="fa fa-spinner fa-2x"></i><br />
                             ##define_lang|_LOADING_INFORMATIONS##
                         </div>
                     </td>
-                </tr>   
+                </tr>
+                <tr id="contactsList_recipient_##loadValue|res_id##" name="contactsList_##loadValue|res_id##" style="display: none; border-bottom: solid 1px black; background-color: white;" width="100%">
+                    <td colspan="6" style="background-color: #f2f2f2;">
+                        <div id="divContactsList_recipient_##loadValue|res_id##" align="center" style="color: grey;margin:10px;padding:10px;border: 1px dashed #135F7F;">
+                            <i class="fa fa-spinner fa-2x"></i><br />
+                            ##define_lang|_LOADING_INFORMATIONS##
+                        </div>
+                    </td>
+                </tr>
                 <tr id="repList_##loadValue|res_id##" name="repList_##loadValue|res_id##" style="display: none; border-bottom: solid 1px black; background-color: #FFF;" width="100%">
                     <td colspan="2" style="background-color: #f2f2f2;">
                         <div id="divRepList_##loadValue|res_id##" align="center" style="color: grey;margin:10px;padding:10px;border: 1px dashed #135F7F;">
diff --git a/rest/index.php b/rest/index.php
index ab3d2f7ee72..c02257d2104 100755
--- a/rest/index.php
+++ b/rest/index.php
@@ -120,6 +120,7 @@ $app->delete('/contacts/{id}', \Contact\controllers\ContactController::class . '
 $app->put('/contacts/{id}/activation', \Contact\controllers\ContactController::class . ':updateActivation');
 $app->get('/formattedContacts/{id}/types/{type}', \Contact\controllers\ContactController::class . ':getLightFormattedContact');
 $app->get('/ban/availableDepartments', \Contact\controllers\ContactController::class . ':getAvailableDepartments');
+$app->post('/contacts/formatV1', \Contact\controllers\ContactController::class . ':getFormattedContactsForSearchV1');
 
 //ContactsCustomFields
 $app->get('/contactsCustomFields', \Contact\controllers\ContactCustomFieldController::class . ':get');
diff --git a/src/app/contact/controllers/ContactController.php b/src/app/contact/controllers/ContactController.php
index cf3c5c1013e..2197ae395d4 100755
--- a/src/app/contact/controllers/ContactController.php
+++ b/src/app/contact/controllers/ContactController.php
@@ -523,6 +523,79 @@ class ContactController
         return $response->withJson(['civilities' => $civilities]);
     }
 
+    public static function getFormattedContactsForSearchV1(Request $request, Response $response)
+    {
+        $data = $request->getParsedBody();
+
+        $return = '';
+
+        if (!isset($data['resId']) && !isset($data['mode'])) {
+            $status = 1;
+            $return .= '<td colspan="6" style="background-color: red;">';
+            $return .= '<p style="padding: 10px; color: black;">';
+            $return .= 'Erreur lors du chargement des contacts';
+            $return .= '</p>';
+            $return .= '</td>';
+
+            return $response->withJson(['status' => $status, 'toShow' => $return]);
+        }
+
+        $status = 0;
+        $return .= '<td>';
+        $return .= '<div align="center">';
+        $return .= '<table width="100%">';
+
+        $resourceContacts = ResourceContactModel::get([
+            'where' => ['res_id = ?', 'mode = ?'],
+            'data'  => [$data['resId'], $data['mode']]
+        ]);
+
+        $mode = '';
+        if ($data['mode'] == 'sender') {
+            $mode = _SENDER;
+        } else if ($data['mode'] == 'recipient') {
+            $mode = _RECIPIENT;
+        }
+
+        foreach ($resourceContacts as $resourceContact) {
+            $return .= '<tr>';
+            $return .= '<td style="background: transparent; border: 0px dashed rgb(200, 200, 200);">';
+
+            $return .= '<div style="text-align: left; background-color: rgb(230, 230, 230); padding: 3px; margin-left: 20px; margin-top: -6px;">';
+
+            if ($resourceContact['type'] == 'contact') {
+                $contactRaw = ContactModel::getById([
+                    'select' => ['*'],
+                    'id'     => $resourceContact['item_id']
+                ]);
+
+                $contactToDisplay = ContactController::getFormattedContactWithAddress(['contact' => $contactRaw]);
+
+                $return .= '<span style="font-size:10px;color:#135F7F;">' . $mode . '</span> - ';
+                $return .= $contactToDisplay['contact']['otherInfo'];
+            } elseif ($resourceContact['type'] == 'user') {
+                $return .= '<span style="font-size:10px;color:#135F7F;">' . $mode . ' (interne)</span> - ';
+                $return .= UserModel::getLabelledUserById(['id' => $resourceContact['item_id']]);
+            } elseif ($resourceContact['type'] == 'entity') {
+                $return .= '<span style="font-size:10px;color:#135F7F;">' . $mode . ' (interne)</span> - ';
+                $entity = EntityModel::getById(['id' => $resourceContact['item_id'], 'select' => ['entity_label']]);
+                $return .= $entity['entity_label'];
+            }
+
+            $return .= '</div>';
+
+            $return .= '</td>';
+            $return .= '</tr>';
+        }
+
+        $return .= '</table>';
+        $return .= '<br />';
+        $return .= '</div>';
+        $return .= '</td>';
+
+        return $response->withJson(['status' => $status, 'toShow' => $return]);
+    }
+
     public static function getFillingRate(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['contactId']);
diff --git a/src/core/lang/lang-en.php b/src/core/lang/lang-en.php
index 7dc6345850a..1b232c9361b 100755
--- a/src/core/lang/lang-en.php
+++ b/src/core/lang/lang-en.php
@@ -332,7 +332,9 @@ define('_SUMMARY_SHEET', 'Summary sheet');
 define('_UNDEFINED', 'Undefined');
 define('_CATEGORY', 'Category');
 define('_SENDERS', 'Sender(s)');
+define('_SENDER', 'Sender');
 define('_RECIPIENTS', 'Recipient(s)');
+define('_RECIPIENT', 'Recipient');
 define('_CHRONO_NUMBER', 'Chrono number');
 define('_INITIATOR_ENTITY', 'Initiator entity');
 define('_DESTINATION_ENTITY', 'Destination entity');
@@ -442,4 +444,4 @@ define("_CANNOT_SYNCHRONIZE_M2M_ANNUARY", "Contact can not be added in M2M annua
 
 define("_DATE_LOCALE", "en_US.utf8");
 
-define("_USER_PREFERENCE_UPDATED", "User preferences updated");
\ No newline at end of file
+define("_USER_PREFERENCE_UPDATED", "User preferences updated");
diff --git a/src/core/lang/lang-fr.php b/src/core/lang/lang-fr.php
index f4f807e9539..7008cb6f0fb 100755
--- a/src/core/lang/lang-fr.php
+++ b/src/core/lang/lang-fr.php
@@ -332,7 +332,9 @@ define('_SUMMARY_SHEET', 'Fiche de liaison');
 define('_UNDEFINED', 'Non défini');
 define('_CATEGORY', 'Catégorie');
 define('_SENDERS', 'Expéditeur(s)');
+define('_SENDER', 'Expéditeur');
 define('_RECIPIENTS', 'Destinataire(s)');
+define('_RECIPIENT', 'Destinataire');
 define('_CHRONO_NUMBER', 'Numéro chrono');
 define('_INITIATOR_ENTITY', 'Entité initiatrice');
 define('_DESTINATION_ENTITY', 'Entité traitante');
diff --git a/src/core/lang/lang-nl.php b/src/core/lang/lang-nl.php
index f620aee88fe..a24d7a0e603 100755
--- a/src/core/lang/lang-nl.php
+++ b/src/core/lang/lang-nl.php
@@ -332,7 +332,9 @@ define('_SUMMARY_SHEET', 'Summary sheet_TO_TRANSLATE');
 define('_UNDEFINED', 'Undefined_TO_TRANSLATE');
 define('_CATEGORY', 'Category_TO_TRANSLATE');
 define('_SENDERS', 'Sender(s)_TO_TRANSLATE');
+define('_SENDER', 'Sender_TO_TRANSLATE');
 define('_RECIPIENTS', 'Recipient(s)_TO_TRANSLATE');
+define('_RECIPIENT', 'Recipient_TO_TRANSLATE');
 define('_CHRONO_NUMBER', 'Chrono number_TO_TRANSLATE');
 define('_INITIATOR_ENTITY', 'Initiator entity_TO_TRANSLATE');
 define('_DESTINATION_ENTITY', 'Destination entity_TO_TRANSLATE');
-- 
GitLab