From 1d91599b28bf7c6d93086139c9de0859b3d40f13 Mon Sep 17 00:00:00 2001
From: Guillaume Heurtier <guillaume.heurtier@maarch.org>
Date: Mon, 17 Feb 2020 18:33:04 +0100
Subject: [PATCH] FEAT #13199 TIME 0:15 refactor is contact used

---
 .../contact/controllers/ContactController.php | 29 ++++++++++++-------
 1 file changed, 19 insertions(+), 10 deletions(-)

diff --git a/src/app/contact/controllers/ContactController.php b/src/app/contact/controllers/ContactController.php
index 93ea39f44a8..04fe89893a8 100755
--- a/src/app/contact/controllers/ContactController.php
+++ b/src/app/contact/controllers/ContactController.php
@@ -99,11 +99,14 @@ class ContactController
         ]);
         $count = $contacts[0]['count'] ?? 0;
 
+        $contactIds = array_column($contacts, 'id');
+        $contactsUsed = ContactController::isContactUsed(['ids' => $contactIds]);
+
         foreach ($contacts as $key => $contact) {
             unset($contacts[$key]['count']);
             $filling = ContactController::getFillingRate(['contactId' => $contact['id']]);
 
-            $contacts[$key]['isUsed'] = ContactController::isContactUsed(['id' => $contact['id']]);
+            $contacts[$key]['isUsed'] = $contactsUsed[$contact['id']];
 
             $contacts[$key]['filling'] = $filling;
         }
@@ -1312,30 +1315,36 @@ class ContactController
 
     private static function isContactUsed(array $args)
     {
-        ValidatorModel::notEmpty($args, ['id']);
-        ValidatorModel::intVal($args, ['id']);
+        ValidatorModel::notEmpty($args, ['ids']);
+        ValidatorModel::arrayType($args, ['ids']);
+
+        $contactsUsed = array_fill_keys($args['ids'], false);
 
         $inResources = ResourceContactModel::get([
-            'select' => ['count(1)'],
+            'select' => ['item_id'],
             'where'  => ['item_id = ?', "type = 'contact'"],
             'data'   => [$args['id']]
         ]);
-        $inResources = $inResources[0]['count'] > 0;
+        $inResources = array_column($inResources, 'item_id');
 
         $inAcknowledgementReceipts = AcknowledgementReceiptModel::get([
-            'select' => ['count(1)'],
+            'select' => ['contact_id'],
             'where'  => ['contact_id = ?'],
             'data'   => [$args['id']]
         ]);
-        $inAcknowledgementReceipts = $inAcknowledgementReceipts[0]['count'] > 0;
+        $inAcknowledgementReceipts = array_column($inAcknowledgementReceipts, 'contact_id');
 
         $inAttachments = AttachmentModel::get([
-            'select' => ['count(1)'],
+            'select' => ['recipient_id'],
             'where'  => ['recipient_id = ?', "recipient_type = 'contact'"],
             'data'   => [$args['id']]
         ]);
-        $inAttachments = $inAttachments[0]['count'] > 0;
+        $inAttachments = array_column($inAttachments, 'recipient_id');
+
+        foreach ($contactsUsed as $id => $item) {
+            $contactsUsed[$id] = in_array($id, $inResources) || in_array($id, $inAcknowledgementReceipts) || in_array($id, $inAttachments);
+        }
 
-        return $inResources || $inAcknowledgementReceipts || $inAttachments;
+        return $contactsUsed;
     }
 }
-- 
GitLab