2 Module : Gargantext.Database.Action.Share
4 Copyright : (c) CNRS, 2017-Present
5 License : AGPL + CECILL v3
6 Maintainer : team@gargantext.org
7 Stability : experimental
12 module Gargantext.Database.Action.Share
15 import Control.Lens (view)
16 import Gargantext.Core.Types.Individu (User(..))
17 import Gargantext.Database.Action.Flow.Utils (getUserId)
18 import Gargantext.Database.Admin.Config (hasNodeType)
19 import Gargantext.Database.Admin.Types.Hyperdata (HyperdataAny(..))
20 import Gargantext.Database.Admin.Types.Node (NodeId)
21 import Gargantext.Database.Admin.Types.Node -- (NodeType(..))
22 import Gargantext.Database.Prelude (Cmd)
23 import Gargantext.Database.Query.Table.Node (getNode, getNodesWith)
24 import Gargantext.Database.Query.Table.Node.Error (HasNodeError, msg)
25 import Gargantext.Database.Query.Table.NodeNode (insertNodeNode, deleteNodeNode)
26 import Gargantext.Database.Query.Tree.Root (getRootId)
27 import Gargantext.Database.Schema.Node
28 import Gargantext.Database.Schema.NodeNode (NodeNodePoly(..))
29 import Gargantext.Prelude
31 ------------------------------------------------------------------------
32 shareNodeWith :: HasNodeError err
37 shareNodeWith n nt u = do
38 nodeToCheck <- getNode n
40 NodeFolderShared -> do
41 userIdCheck <- getUserId u
42 if not (hasNodeType nodeToCheck NodeTeam)
43 then msg "Can share node Team only"
45 if (view node_userId nodeToCheck == userIdCheck)
46 then msg "Can share to others only"
48 folderSharedId <- getFolderId u NodeFolderShared
49 insertNodeNode [NodeNode folderSharedId n Nothing Nothing]
51 NodeFolderPublic -> if not (hasNodeType nodeToCheck NodeGraph)
52 then msg "Can share node graph only"
54 folderId <- getFolderId (UserDBId $ view node_userId nodeToCheck) NodeFolderPublic
55 insertNodeNode [NodeNode folderId n Nothing Nothing]
57 _ -> msg "shareNodeWith not implemented with this NodeType"
59 ------------------------------------------------------------------------
60 getFolderId :: HasNodeError err => User -> NodeType -> Cmd err NodeId
63 s <- getNodesWith rootId HyperdataAny (Just nt) Nothing Nothing
65 Nothing -> msg "No folder shared found"
66 Just f -> pure (_node_id f)
68 ------------------------------------------------------------------------
71 delFolderTeam :: HasNodeError err => User -> TeamId -> Cmd err Int
72 delFolderTeam u nId = do
73 folderSharedId <- getFolderId u NodeFolderShared
74 deleteNodeNode folderSharedId nId
76 unPublish :: HasNodeError err => User -> NodeId -> Cmd err Int
78 folderId <- getFolderId u NodeFolderPublic
79 deleteNodeNode folderId nId