From 1dd4217434fbad3b2d30a122cc783dad67c61ce4 Mon Sep 17 00:00:00 2001
From: Guillaume Heurtier <guillaume.heurtier@maarch.org>
Date: Thu, 21 Nov 2019 16:10:12 +0100
Subject: [PATCH] FEAT #12331 TIME 1:30 update resource folders

---
 .../resource/controllers/ResController.php    | 31 +++++++++++++++++--
 1 file changed, 29 insertions(+), 2 deletions(-)

diff --git a/src/app/resource/controllers/ResController.php b/src/app/resource/controllers/ResController.php
index 2cafd15f0fb..2994adbe37d 100755
--- a/src/app/resource/controllers/ResController.php
+++ b/src/app/resource/controllers/ResController.php
@@ -633,7 +633,7 @@ class ResController
         $contacts = [];
         if ($queryParams['type'] == 'senders') {
             if ($resource['category_id'] == 'outgoing') {
-                $contacts = ResController::getFormattedContacts(['resource' => $resource, 'tableMulti' => 'resource_contacts', 'columnRes' => 'dest_user_id']);
+                $contacts = ResController::getFormattedContacts(['resource' => $resource, 'tableMulti' => 'resource_contacts', 'columnRes' => null]);
             } else {
                 $contacts = ResController::getFormattedContacts(['resource' => $resource, 'tableMulti' => 'contacts_res', 'columnRes' => 'exp_user_id']);
             }
@@ -857,7 +857,34 @@ class ResController
             }
         }
         if (!empty($body['folders'])) {
-            ResourceFolderModel::delete(['where' => ['res_id = ?'], 'data' => [$args['resId']]]);
+            // Delete association with user's folders
+            $idToDelete = FolderModel::getWithResources([
+                'select'    => ['resources_folders.id'],
+                'where'     => ['resources_folders.res_id = ?', 'folders.user_id = ?'],
+                'data'      => [$args['resId'], $GLOBALS['id']]
+            ]);
+            $idToDelete = array_column($idToDelete, 'id');
+            if (!empty($idToDelete)) {
+                ResourceFolderModel::delete(['where' => ['id in (?)'], 'data' => [$idToDelete]]);
+            }
+
+            // Delete association with folders the user can see
+            $entities = EntityModel::getWithUserEntities([
+                'select' => ['entities.id'],
+                'where'  => ['user_id = ?'],
+                'data'   => [$GLOBALS['userId']]
+            ]);
+            $entities = array_column($entities, 'id');
+            $idToDelete = FolderModel::getWithEntitiesAndResources([
+                'select'    => ['resources_folders.id'],
+                'where'     => ['resources_folders.res_id = ?', 'entities_folders.entity_id in (?)'],
+                'data'      => [$args['resId'], $entities]
+            ]);
+            $idToDelete = array_column($idToDelete, 'id');
+            if (!empty($idToDelete)) {
+                ResourceFolderModel::delete(['where' => ['id in (?)'], 'data' => [$idToDelete]]);
+            }
+
             foreach ($body['folders'] as $folder) {
                 ResourceFolderModel::create(['res_id' => $args['resId'], 'folder_id' => $folder]);
             }
-- 
GitLab