@@ -355,7 +355,7 @@ public function deleteFromSelf(\OCP\Share\IShare $share, $recipient) {
355355 if ($ data === false ) {
356356 $ qb = $ this ->dbConn ->getQueryBuilder ();
357357
358- $ type = $ share ->getNode () instanceof \ OCP \ Files \File ? ' file ' : ' folder ' ;
358+ $ type = $ share ->getNodeType () ;
359359
360360 //Insert new share
361361 $ qb ->insert ('share ' )
@@ -366,8 +366,8 @@ public function deleteFromSelf(\OCP\Share\IShare $share, $recipient) {
366366 'uid_initiator ' => $ qb ->createNamedParameter ($ share ->getSharedBy ()),
367367 'parent ' => $ qb ->createNamedParameter ($ share ->getId ()),
368368 'item_type ' => $ qb ->createNamedParameter ($ type ),
369- 'item_source ' => $ qb ->createNamedParameter ($ share ->getNode ()-> getId ()),
370- 'file_source ' => $ qb ->createNamedParameter ($ share ->getNode ()-> getId ()),
369+ 'item_source ' => $ qb ->createNamedParameter ($ share ->getNodeId ()),
370+ 'file_source ' => $ qb ->createNamedParameter ($ share ->getNodeId ()),
371371 'file_target ' => $ qb ->createNamedParameter ($ share ->getTarget ()),
372372 'permissions ' => $ qb ->createNamedParameter (0 ),
373373 'stime ' => $ qb ->createNamedParameter ($ share ->getShareTime ()->getTimestamp ()),
@@ -1062,4 +1062,74 @@ public function userDeletedFromGroup($uid, $gid) {
10621062 }
10631063 }
10641064 }
1065+
1066+ /**
1067+ * @inheritdoc
1068+ */
1069+ public function getAccessList ($ nodes , $ currentAccess ) {
1070+ $ ids = [];
1071+ foreach ($ nodes as $ node ) {
1072+ $ ids [] = $ node ->getId ();
1073+ }
1074+
1075+ $ qb = $ this ->dbConn ->getQueryBuilder ();
1076+
1077+ $ or = $ qb ->expr ()->orX (
1078+ $ qb ->expr ()->eq ('share_type ' , $ qb ->createNamedParameter (\OCP \Share::SHARE_TYPE_USER )),
1079+ $ qb ->expr ()->eq ('share_type ' , $ qb ->createNamedParameter (\OCP \Share::SHARE_TYPE_GROUP )),
1080+ $ qb ->expr ()->eq ('share_type ' , $ qb ->createNamedParameter (\OCP \Share::SHARE_TYPE_LINK ))
1081+ );
1082+
1083+ if ($ currentAccess ) {
1084+ $ or ->add ($ qb ->expr ()->eq ('share_type ' , $ qb ->createNamedParameter (self ::SHARE_TYPE_USERGROUP )));
1085+ }
1086+
1087+ $ qb ->select ('share_type ' , 'share_with ' )
1088+ ->from ('share ' )
1089+ ->where (
1090+ $ or
1091+ )
1092+ ->andWhere ($ qb ->expr ()->in ('file_source ' , $ qb ->createNamedParameter ($ ids , IQueryBuilder::PARAM_INT_ARRAY )))
1093+ ->andWhere ($ qb ->expr ()->orX (
1094+ $ qb ->expr ()->eq ('item_type ' , $ qb ->createNamedParameter ('file ' )),
1095+ $ qb ->expr ()->eq ('item_type ' , $ qb ->createNamedParameter ('folder ' ))
1096+ ));
1097+ $ cursor = $ qb ->execute ();
1098+
1099+ $ users = [];
1100+ $ link = false ;
1101+ while ($ row = $ cursor ->fetch ()) {
1102+ $ type = (int )$ row ['share_type ' ];
1103+ if ($ type === \OCP \Share::SHARE_TYPE_USER ) {
1104+ $ uid = $ row ['share_with ' ];
1105+ $ users [$ uid ] = isset ($ users [$ uid ]) ? $ users [$ uid ] + 1 : 1 ;
1106+ } else if ($ type === \OCP \Share::SHARE_TYPE_GROUP ) {
1107+ $ gid = $ row ['share_with ' ];
1108+ $ group = $ this ->groupManager ->get ($ gid );
1109+
1110+ if ($ gid === null ) {
1111+ continue ;
1112+ }
1113+
1114+ $ userList = $ group ->getUsers ();
1115+ foreach ($ userList as $ user ) {
1116+ $ users [$ user ->getUID ()] = isset ($ users [$ user ->getUID ()]) ? $ users [$ user ->getUID ()] + 1 : 1 ;
1117+ }
1118+ } else if ($ type === \OCP \Share::SHARE_TYPE_LINK ) {
1119+ $ link = true ;
1120+ } else if ($ type === self ::SHARE_TYPE_USERGROUP ) {
1121+ if ($ currentAccess === true ) {
1122+ $ uid = $ row ['share_with ' ];
1123+ $ users [$ uid ] = isset ($ users [$ uid ]) ? $ users [$ uid ] - 1 : -1 ;
1124+ }
1125+ }
1126+ }
1127+ $ cursor ->closeCursor ();
1128+
1129+ $ users = array_filter ($ users , function ($ count ) {
1130+ return $ count > 0 ;
1131+ });
1132+
1133+ return ['users ' => array_keys ($ users ), 'public ' => $ link , 'remote ' => false ];
1134+ }
10651135}
0 commit comments