From 29870dafee23dd4337400a3eabd8cb3a54c2e26a Mon Sep 17 00:00:00 2001
From: Guillaume Heurtier <guillaume.heurtier@maarch.org>
Date: Fri, 25 Oct 2019 18:03:28 +0200
Subject: [PATCH] FEAT #11454 TIME 2:30 unsharing folder unpin folder if
 necessary

---
 .../folder/controllers/FolderController.php   | 38 ++++++++++++++++++-
 1 file changed, 37 insertions(+), 1 deletion(-)

diff --git a/src/app/folder/controllers/FolderController.php b/src/app/folder/controllers/FolderController.php
index d4eb11933bc..f97a25d06f1 100755
--- a/src/app/folder/controllers/FolderController.php
+++ b/src/app/folder/controllers/FolderController.php
@@ -35,6 +35,7 @@ use Slim\Http\Response;
 use SrcCore\controllers\PreparedClauseController;
 use SrcCore\models\DatabaseModel;
 use SrcCore\models\ValidatorModel;
+use User\models\UserEntityModel;
 use User\models\UserModel;
 
 class FolderController
@@ -342,7 +343,7 @@ class FolderController
             'data' => [$args['folderId']]
         ]);
 
-        if (!empty($args['remove'])) {
+        if (!empty($entitiesToRemove)) {
             EntityFolderModel::delete(['entity_id' => $entitiesToRemove, 'folder_id' => $args['folderId']]);
         }
         if (!empty($args['add'])) {
@@ -355,6 +356,41 @@ class FolderController
             }
         }
 
+        $entitiesOfFolder = EntityFolderModel::getByFolderId([
+            'select' => ['entities.entity_id'],
+            'folder_id' => $args['folderId']
+        ]);
+        $entitiesOfFolder = array_column($entitiesOfFolder, 'entity_id');
+
+        $users = UserPinnedFolderModel::get([
+            'select' => ['user_id'],
+            'where' => ['folder_id = ?'],
+            'data' => [$args['folderId']]
+        ]);
+
+        if (!empty($users) && empty($entitiesOfFolder)) {
+            UserPinnedFolderModel::delete([
+                'where' => ['folder_id = ?', 'user_id != ?'],
+                'data' => [$args['folderId'], $folder[0]['user_id']]
+            ]);
+        } else {
+            foreach ($users as $user) {
+                if ($user['user_id'] != $folder[0]['user_id']) {
+                    $inEntities = UserEntityModel::getWithUsers([
+                        'select' => ['users.id'],
+                        'where' => ['users.id = ?', 'entity_id in (?)'],
+                        'data' => [$user['user_id'], $entitiesOfFolder]
+                    ]);
+                    if (empty($inEntities)) {
+                        UserPinnedFolderModel::delete([
+                            'where' => ['folder_id = ?', 'user_id = ?'],
+                            'data' => [$args['folderId'], $user['user_id']]
+                        ]);
+                    }
+                }
+            }
+        }
+
         $folderChild = FolderModel::getChild(['id' => $args['folderId'], 'select' => ['id']]);
         if (!empty($folderChild)) {
             foreach ($folderChild as $child) {
-- 
GitLab